--
-- PostgreSQL database dump
--

-- Dumped from database version 9.6.8
-- Dumped by pg_dump version 9.6.8

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- Name: enum_Order_paymentState; Type: TYPE; Schema: public; Owner: -
--

CREATE TYPE public."enum_Order_paymentState" AS ENUM (
    'prepaid',
    'failure',
    'unpaid'
);


--
-- Name: enum_Recharge_paymentState; Type: TYPE; Schema: public; Owner: -
--

CREATE TYPE public."enum_Recharge_paymentState" AS ENUM (
    'prepaid',
    'failure',
    'unpaid'
);


--
-- Name: enum_UserApp_platform; Type: TYPE; Schema: public; Owner: -
--

CREATE TYPE public."enum_UserApp_platform" AS ENUM (
    'iOS',
    'Android',
    'Web',
    'Application'
);


--
-- Name: enum_UserOAuth2_platform; Type: TYPE; Schema: public; Owner: -
--

CREATE TYPE public."enum_UserOAuth2_platform" AS ENUM (
    'WeChat',
    'GitHub'
);


--
-- Name: enum_User_type; Type: TYPE; Schema: public; Owner: -
--

CREATE TYPE public."enum_User_type" AS ENUM (
    'Master',
    'Sub'
);


SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: Accessory; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Accessory" (
    id character varying(255) NOT NULL,
    name character varying(255),
    url character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "workOrderId" character varying(255)
);


--
-- Name: Account; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Account" (
    id character varying(255) NOT NULL,
    balance integer,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255)
);


--
-- Name: AccountServicePackage; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."AccountServicePackage" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    price character varying(255) NOT NULL,
    specification text NOT NULL,
    "initialSpecification" text NOT NULL,
    "beginTime" timestamp with time zone,
    "endTime" timestamp with time zone,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "accountId" character varying(255),
    "servicePackageId" character varying(255)
);


--
-- Name: AlertCategory; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."AlertCategory" (
    id integer NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: AlertCategory_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."AlertCategory_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: AlertCategory_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."AlertCategory_id_seq" OWNED BY public."AlertCategory".id;


--
-- Name: AlertDefinition; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."AlertDefinition" (
    id integer NOT NULL,
    key character varying(255),
    name character varying(255),
    "desc" character varying(255),
    severity integer,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "alertEventTypeId" integer,
    "alertCategoryId" integer
);


--
-- Name: AlertDefinition_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."AlertDefinition_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: AlertDefinition_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."AlertDefinition_id_seq" OWNED BY public."AlertDefinition".id;


--
-- Name: AlertEventType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."AlertEventType" (
    id integer NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    "recoverMode" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: AlertEventType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."AlertEventType_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: AlertEventType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."AlertEventType_id_seq" OWNED BY public."AlertEventType".id;


--
-- Name: Authorization; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Authorization" (
    id character varying(255) NOT NULL,
    "createBy" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userGroupId" character varying(255),
    "resourceGroupId" character varying(255),
    "roleId" character varying(255)
);


--
-- Name: CapabilityCategory; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CapabilityCategory" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    image character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: CapabilityCategory_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."CapabilityCategory_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: CapabilityCategory_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."CapabilityCategory_id_seq" OWNED BY public."CapabilityCategory".id;


--
-- Name: CapabilityFormula; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CapabilityFormula" (
    id character varying(255) NOT NULL,
    properties text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "capabilityId" character varying(255) NOT NULL,
    "formulaId" character varying(255) NOT NULL
);


--
-- Name: CapabilityMeta; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CapabilityMeta" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    image character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceMetaId" character varying(255),
    "capabilityCategoryId" integer,
    "protocolMetaId" character varying(255)
);


--
-- Name: CapabilityMetaInterface; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CapabilityMetaInterface" (
    id character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "capabilityMetaId" character varying(255) NOT NULL,
    "deviceMetaInterfaceId" character varying(255) NOT NULL
);


--
-- Name: CapabilityProperty; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CapabilityProperty" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    "showName" character varying(255),
    category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
    image character varying(255),
    enum character varying(255),
    "defaultValue" character varying(255),
    "precision" integer,
    max character varying(255),
    min character varying(255),
    unit character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "capabilityMetaId" character varying(255),
    "propertyTypeId" integer,
    required boolean DEFAULT true NOT NULL,
    "isOtherParameter" boolean DEFAULT false
);


--
-- Name: CapabilityProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."CapabilityProperty_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: CapabilityProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."CapabilityProperty_id_seq" OWNED BY public."CapabilityProperty".id;


--
-- Name: CompanyCertification; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."CompanyCertification" (
    id character varying(255) NOT NULL,
    type character varying(255) DEFAULT 'company'::character varying NOT NULL,
    name character varying(255) NOT NULL,
    "licenseId" character varying(255) NOT NULL,
    "licenseImg" character varying(255) NOT NULL,
    status character varying(255) DEFAULT 'authenticating'::character varying,
    "adminName" character varying(255) NOT NULL,
    "cardId" character varying(255) NOT NULL,
    "frontImg" character varying(255) NOT NULL,
    "reverseImg" character varying(255) NOT NULL,
    reason character varying(255),
    contacts character varying(255),
    address character varying(255),
    mobile character varying(255),
    email character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255)
);


--
-- Name: Dashboard; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Dashboard" (
    id character varying(255) NOT NULL,
    colspan character varying(255),
    height character varying(255),
    type character varying(255),
    source text,
    option text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255) NOT NULL
);


--
-- Name: Device; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Device" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    properties text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "thingId" character varying(255),
    "deviceMetaId" character varying(255)
);


--
-- Name: DeviceCapability; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceCapability" (
    id character varying(255) NOT NULL,
    properties text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceId" character varying(255),
    "capabilityMetaId" character varying(255),
    "deviceInterfaceId" character varying(255),
    "protocolMetaId" character varying(255)
);


--
-- Name: DeviceCertification; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceCertification" (
    id character varying(255) NOT NULL,
    status character varying(255) DEFAULT 'authenticating'::character varying,
    reason character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255),
    "deviceMetaId" character varying(255)
);


--
-- Name: DeviceInterface; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceInterface" (
    id character varying(255) NOT NULL,
    properties text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceId" character varying(255),
    "deviceMetaInterfaceId" character varying(255)
);


--
-- Name: DeviceMeta; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceMeta" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "createBy" character varying(255) DEFAULT '-1'::character varying,
    "belongTo" character varying(255),
    investor character varying(255),
    public boolean DEFAULT false,
    image character varying(255),
    model character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "vendorId" character varying(255),
    category integer DEFAULT 0
);


--
-- Name: DeviceMetaInterface; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceMetaInterface" (
    id character varying(255) NOT NULL,
    "directType" integer DEFAULT 1 NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceMetaId" character varying(255),
    "interfaceMetaId" character varying(255)
);


--
-- Name: DeviceProperty; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DeviceProperty" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    "showName" character varying(255),
    category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
    image character varying(255),
    enum character varying(255),
    "defaultValue" character varying(255),
    "precision" integer,
    max character varying(255),
    min character varying(255),
    unit character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceMetaId" character varying(255),
    "propertyTypeId" integer,
    required boolean DEFAULT true NOT NULL,
    "isOtherParameter" boolean DEFAULT false
);


--
-- Name: DeviceProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."DeviceProperty_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: DeviceProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."DeviceProperty_id_seq" OWNED BY public."DeviceProperty".id;


--
-- Name: Dimension; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Dimension" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "thingId" character varying(255)
);


--
-- Name: DimensionCapability; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."DimensionCapability" (
    id character varying(255) NOT NULL,
    repeats integer,
    "interval" numeric,
    qos integer,
    timeout integer DEFAULT 2,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceCapabilityId" character varying(255),
    "dimensionId" character varying(255),
    "errTimesToDrop" integer DEFAULT 255
);


--
-- Name: FeedBack; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."FeedBack" (
    id character varying(255) NOT NULL,
    email character varying(255),
    mobile character varying(255),
    title character varying(255),
    "desc" text,
    status character varying(255) DEFAULT 'pending'::character varying,
    "operatorId" character varying(255),
    "operatorName" character varying(255),
    remark text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: FilteredResource; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."FilteredResource" (
    id character varying(255) NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    type character varying(255),
    key character varying(255),
    "createBy" character varying(255),
    "belongTo" character varying(255),
    properties text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: FormulaMeta; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."FormulaMeta" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    formula character varying(255),
    key character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "deviceMetaId" character varying(255)
);


--
-- Name: FormulaProperty; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."FormulaProperty" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    "showName" character varying(255),
    category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
    image character varying(255),
    enum character varying(255),
    "defaultValue" character varying(255),
    "precision" integer,
    max character varying(255),
    min character varying(255),
    unit character varying(255),
    "desc" character varying(255),
    required boolean DEFAULT true NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "formulaMetaId" character varying(255),
    "propertyTypeId" integer,
    "isOtherParameter" boolean DEFAULT false
);


--
-- Name: FormulaProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."FormulaProperty_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: FormulaProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."FormulaProperty_id_seq" OWNED BY public."FormulaProperty".id;


--
-- Name: InterfaceMeta; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."InterfaceMeta" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "createBy" character varying(255) DEFAULT '-1'::character varying,
    "belongTo" character varying(255),
    investor character varying(255),
    public boolean DEFAULT false,
    image character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "interfaceTypeId" integer
);


--
-- Name: InterfaceProperty; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."InterfaceProperty" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    "showName" character varying(255),
    category character varying(255) DEFAULT 'Variable'::character varying NOT NULL,
    enum character varying(255),
    "defaultValue" character varying(255),
    "precision" integer,
    max character varying(255),
    min character varying(255),
    unit character varying(255),
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "propertyTypeId" integer,
    "interfaceMetaId" character varying(255),
    required boolean DEFAULT true NOT NULL,
    "isOtherParameter" boolean DEFAULT false
);


--
-- Name: InterfaceProperty_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."InterfaceProperty_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: InterfaceProperty_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."InterfaceProperty_id_seq" OWNED BY public."InterfaceProperty".id;


--
-- Name: InterfaceType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."InterfaceType" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    key character varying(255) NOT NULL,
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: InterfaceType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."InterfaceType_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: InterfaceType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."InterfaceType_id_seq" OWNED BY public."InterfaceType".id;


--
-- Name: Layout; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Layout" (
    id character varying(255) NOT NULL,
    "desc" character varying(255),
    settings text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "thingId" character varying(255)
);


--
-- Name: LayoutLink; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."LayoutLink" (
    id character varying(255) NOT NULL,
    "layoutInfo" text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "fromLayoutNodeId" character varying(255),
    "toLayoutNodeId" character varying(255),
    "fromDeviceInterfaceId" character varying(255),
    "toDeviceInterfaceId" character varying(255),
    "parentLinkId" character varying(255)
);


--
-- Name: LayoutNode; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."LayoutNode" (
    id character varying(255) NOT NULL,
    "layoutInfo" text,
    "extLocInfo" text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "layoutId" character varying(255),
    "deviceId" character varying(255)
);


--
-- Name: Migrations; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Migrations" (
    name character varying(255) NOT NULL
);


--
-- Name: Notice; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Notice" (
    id character varying(255) NOT NULL,
    receiver character varying(255) NOT NULL,
    sender character varying(255) DEFAULT '-1'::character varying,
    title character varying(255) NOT NULL,
    content text NOT NULL,
    "expireDate" timestamp with time zone,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    type character varying(255) NOT NULL
);


--
-- Name: NoticeType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."NoticeType" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: OperationRecord; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."OperationRecord" (
    id character varying(255) NOT NULL,
    record text NOT NULL,
    "operatorId" character varying(255) NOT NULL,
    type character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "workOrderId" character varying(255)
);


--
-- Name: Order; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Order" (
    id character varying(255) NOT NULL,
    out_trade_no character varying(255),
    service_name character varying(255),
    fee integer,
    "oldBalance" integer DEFAULT 0,
    "newBalance" integer DEFAULT 0,
    time_start timestamp with time zone,
    time_end timestamp with time zone,
    "payChannel" character varying(255),
    "paymentState" public."enum_Order_paymentState" DEFAULT 'unpaid'::public."enum_Order_paymentState",
    transaction_id character varying(255),
    bank_type character varying(255),
    openid character varying(255),
    standard character varying(255),
    product_id character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "accountId" character varying(255),
    "servicePackageId" character varying(255),
    "beginTime" timestamp with time zone,
    "endTime" timestamp with time zone
);


--
-- Name: Permission; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Permission" (
    id character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "roleId" character varying(255),
    "resourceTypeKey" character varying(255),
    "operationTypeKey" character varying(255)
);


--
-- Name: PersonCertification; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."PersonCertification" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "cardId" character varying(255) NOT NULL,
    "frontImg" character varying(255) NOT NULL,
    "reverseImg" character varying(255) NOT NULL,
    status character varying(255) DEFAULT 'authenticating'::character varying,
    reason character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255)
);


--
-- Name: PropertyType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."PropertyType" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    key character varying(255) NOT NULL,
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: PropertyType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."PropertyType_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: PropertyType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."PropertyType_id_seq" OWNED BY public."PropertyType".id;


--
-- Name: ProtocolCertification; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ProtocolCertification" (
    id character varying(255) NOT NULL,
    status character varying(255) DEFAULT 'authenticating'::character varying,
    reason character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255),
    "protocolMetaId" character varying(255)
);


--
-- Name: ProtocolMeta; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ProtocolMeta" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    image character varying(255),
    "desc" character varying(255),
    version character varying(255),
    "belongTo" character varying(255),
    investor character varying(255),
    public boolean DEFAULT false,
    "createBy" character varying(255) DEFAULT '-1'::character varying,
    impl character varying(255),
    resource text,
    "resType" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "enableTime" date,
    "vendorId" character varying(255)
);


--
-- Name: Recharge; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Recharge" (
    id character varying(255) NOT NULL,
    out_trade_no character varying(255),
    fee integer,
    "oldBalance" integer DEFAULT 0,
    "newBalance" integer DEFAULT 0,
    time_start timestamp with time zone,
    time_end timestamp with time zone,
    "payChannel" character varying(255),
    "paymentState" public."enum_Recharge_paymentState" DEFAULT 'unpaid'::public."enum_Recharge_paymentState" NOT NULL,
    transaction_id character varying(255),
    bank_type character varying(255),
    openid character varying(255),
    product_id character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "accountId" character varying(255)
);


--
-- Name: Resource; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Resource" (
    id character varying(255) NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    type character varying(255),
    key character varying(255),
    "createBy" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "resourceGroupId" character varying(255)
);


--
-- Name: ResourceGroup; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ResourceGroup" (
    id character varying(255) NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    "createBy" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: ResourceOperationType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ResourceOperationType" (
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    type character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "resourceTypeKey" character varying(255)
);


--
-- Name: ResourceType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ResourceType" (
    name character varying(255) NOT NULL,
    type character varying(255) NOT NULL,
    "desc" character varying(255) NOT NULL,
    model character varying(255) NOT NULL,
    "nameField" character varying(255) DEFAULT 'name'::character varying,
    "idField" character varying(255) DEFAULT 'id'::character varying,
    "descField" character varying(255) DEFAULT 'desc'::character varying,
    key character varying(255) NOT NULL,
    url character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    shareable boolean DEFAULT true
);


--
-- Name: Role; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Role" (
    id character varying(255) NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    "createBy" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: Rule; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Rule" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    flow text,
    "createBy" character varying(255),
    "belongTo" character varying(255),
    investor character varying(255),
    public boolean DEFAULT false,
    enable boolean DEFAULT false,
    release boolean DEFAULT false,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: Scheme; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Scheme" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    mode character varying(255),
    "interval" integer,
    unit character varying(255),
    repeats integer,
    "beginTime" timestamp with time zone,
    "endTime" timestamp with time zone,
    "notifyMode" integer,
    "capabilityNotifyMode" integer,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "dimensionId" character varying(255)
);


--
-- Name: ServicePackage; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."ServicePackage" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "serviceType" character varying(255),
    "desc" character varying(255) NOT NULL,
    specification text NOT NULL,
    price integer NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: SubUser; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."SubUser" (
    id integer NOT NULL,
    dependent boolean DEFAULT true,
    enable boolean DEFAULT true,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "parentId" character varying(255),
    "userId" character varying(255)
);


--
-- Name: SubUser_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."SubUser_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: SubUser_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."SubUser_id_seq" OWNED BY public."SubUser".id;


--
-- Name: TestCase; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."TestCase" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    annotations character varying(255),
    "deviceProperties" text,
    "capabilityProperties" text,
    "interfaceProperties" text,
    "formulaProperties" text,
    "deviceCapabilityId" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "thingId" character varying(255),
    "testSuiteId" character varying(255),
    param character varying(255)
);


--
-- Name: TestCaseAssert; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."TestCaseAssert" (
    id character varying(255) NOT NULL,
    type character varying(255) NOT NULL,
    operator character varying(255) NOT NULL,
    value character varying(255),
    expect character varying(255),
    index integer NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "testCaseId" character varying(255)
);


--
-- Name: TestCaseExecutionRecord; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."TestCaseExecutionRecord" (
    id character varying(255) NOT NULL,
    result character varying(255),
    "taskId" character varying(255),
    "startedAt" timestamp with time zone,
    "endedAt" timestamp with time zone,
    elapsed integer,
    log text,
    data text,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "testCaseId" character varying(255)
);


--
-- Name: TestCaseInput; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."TestCaseInput" (
    id character varying(255) NOT NULL,
    value text DEFAULT ''::text NOT NULL,
    index integer NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "testCaseId" character varying(255)
);


--
-- Name: TestSuite; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."TestSuite" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    annotations character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "thingId" character varying(255)
);


--
-- Name: Thing; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."Thing" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    "desc" character varying(255),
    image character varying(255),
    lng double precision,
    lat double precision,
    "createBy" character varying(255),
    "belongTo" character varying(255),
    investor character varying(255),
    enable boolean DEFAULT false,
    release boolean DEFAULT false,
    public boolean DEFAULT false,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: User; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."User" (
    id character varying(255) NOT NULL,
    username character varying(255) NOT NULL,
    password character varying(255) NOT NULL,
    type public."enum_User_type" DEFAULT 'Master'::public."enum_User_type",
    email character varying(255),
    mobile character varying(255),
    "actEmail" boolean DEFAULT false,
    gravatar character varying(255),
    key character varying(255),
    secret character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "isAdmin" boolean DEFAULT false,
    "deletedAt" timestamp with time zone
);


--
-- Name: UserApp; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."UserApp" (
    id character varying(255) NOT NULL,
    name character varying(255) NOT NULL,
    key character varying(255) NOT NULL,
    secret character varying(255) NOT NULL,
    platform public."enum_UserApp_platform" NOT NULL,
    "extInfo" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255)
);


--
-- Name: UserGroup; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."UserGroup" (
    id character varying(255) NOT NULL,
    name character varying(255),
    "desc" character varying(255),
    "createBy" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: UserGroupUser; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."UserGroupUser" (
    id character varying(255) NOT NULL,
    type character varying(255) NOT NULL,
    accept boolean DEFAULT false,
    "invitedCode" character varying(255),
    enable boolean DEFAULT true,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255),
    "userGroupId" character varying(255)
);


--
-- Name: UserNotice; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."UserNotice" (
    id character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255) NOT NULL,
    "noticeId" character varying(255) NOT NULL
);


--
-- Name: UserOAuth2; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."UserOAuth2" (
    id character varying(255) NOT NULL,
    platform public."enum_UserOAuth2_platform" NOT NULL,
    "openId" character varying(255) NOT NULL,
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "userId" character varying(255)
);


--
-- Name: WorkOrder; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."WorkOrder" (
    id character varying(255) NOT NULL,
    title character varying(255) NOT NULL,
    "desc" text NOT NULL,
    status character varying(255) DEFAULT 'pending'::character varying,
    "operatorId" character varying(255),
    "operatorName" character varying(255),
    email character varying(255),
    mobile character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone,
    "workOrderTypeId" integer,
    "userId" character varying(255)
);


--
-- Name: WorkOrderType; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public."WorkOrderType" (
    id integer NOT NULL,
    name character varying(255) NOT NULL,
    key character varying(255) NOT NULL,
    "desc" character varying(255),
    "createdAt" timestamp with time zone,
    "updatedAt" timestamp with time zone
);


--
-- Name: WorkOrderType_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE public."WorkOrderType_id_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- Name: WorkOrderType_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE public."WorkOrderType_id_seq" OWNED BY public."WorkOrderType".id;


--
-- Name: lock_monitor; Type: VIEW; Schema: public; Owner: -
--

CREATE VIEW public.lock_monitor AS
 SELECT COALESCE(((blockingl.relation)::regclass)::text, blockingl.locktype) AS locked_item,
    (now() - blockeda.query_start) AS waiting_duration,
    blockeda.pid AS blocked_pid,
    blockeda.query AS blocked_query,
    blockedl.mode AS blocked_mode,
    blockinga.pid AS blocking_pid,
    blockinga.query AS blocking_query,
    blockingl.mode AS blocking_mode
   FROM (((pg_locks blockedl
     JOIN pg_stat_activity blockeda ON ((blockedl.pid = blockeda.pid)))
     JOIN pg_locks blockingl ON ((((blockingl.transactionid = blockedl.transactionid) OR ((blockingl.relation = blockedl.relation) AND (blockingl.locktype = blockedl.locktype))) AND (blockedl.pid <> blockingl.pid))))
     JOIN pg_stat_activity blockinga ON (((blockingl.pid = blockinga.pid) AND (blockinga.datid = blockeda.datid))))
  WHERE ((NOT blockedl.granted) AND (blockinga.datname = current_database()));


--
-- Name: AlertCategory id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertCategory" ALTER COLUMN id SET DEFAULT nextval('public."AlertCategory_id_seq"'::regclass);


--
-- Name: AlertDefinition id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertDefinition" ALTER COLUMN id SET DEFAULT nextval('public."AlertDefinition_id_seq"'::regclass);


--
-- Name: AlertEventType id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertEventType" ALTER COLUMN id SET DEFAULT nextval('public."AlertEventType_id_seq"'::regclass);


--
-- Name: CapabilityCategory id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityCategory" ALTER COLUMN id SET DEFAULT nextval('public."CapabilityCategory_id_seq"'::regclass);


--
-- Name: CapabilityProperty id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityProperty" ALTER COLUMN id SET DEFAULT nextval('public."CapabilityProperty_id_seq"'::regclass);


--
-- Name: DeviceProperty id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceProperty" ALTER COLUMN id SET DEFAULT nextval('public."DeviceProperty_id_seq"'::regclass);


--
-- Name: FormulaProperty id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaProperty" ALTER COLUMN id SET DEFAULT nextval('public."FormulaProperty_id_seq"'::regclass);


--
-- Name: InterfaceProperty id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceProperty" ALTER COLUMN id SET DEFAULT nextval('public."InterfaceProperty_id_seq"'::regclass);


--
-- Name: InterfaceType id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceType" ALTER COLUMN id SET DEFAULT nextval('public."InterfaceType_id_seq"'::regclass);


--
-- Name: PropertyType id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."PropertyType" ALTER COLUMN id SET DEFAULT nextval('public."PropertyType_id_seq"'::regclass);


--
-- Name: SubUser id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."SubUser" ALTER COLUMN id SET DEFAULT nextval('public."SubUser_id_seq"'::regclass);


--
-- Name: WorkOrderType id; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."WorkOrderType" ALTER COLUMN id SET DEFAULT nextval('public."WorkOrderType_id_seq"'::regclass);


--
-- Data for Name: Accessory; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Accessory" (id, name, url, "createdAt", "updatedAt", "workOrderId") FROM stdin;
\.


--
-- Data for Name: Account; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Account" (id, balance, "createdAt", "updatedAt", "userId") FROM stdin;
59974bd8-c072-4e19-aacc-e8412034ce55	0	2017-08-14 13:52:03.382+08	2017-08-14 13:52:03.382+08	77804162-837d-4ff9-96c0-beb8e8888f8e
\.


--
-- Data for Name: AccountServicePackage; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."AccountServicePackage" (id, name, price, specification, "initialSpecification", "beginTime", "endTime", "createdAt", "updatedAt", "accountId", "servicePackageId") FROM stdin;
c025d854-93b2-4077-8def-81a12c2c3201	企业版	5999900	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":987,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":999,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}}	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":1000,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":1000,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}}	2019-07-05 14:42:23.788+08	3017-07-04 14:42:23.788+08	2019-01-24 14:53:26.217+08	2020-04-13 15:16:13.243+08	59974bd8-c072-4e19-aacc-e8412034ce55	0e63fe1b-20db-4bf5-802e-37a260efd075
\.


--
-- Data for Name: AlertCategory; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."AlertCategory" (id, name, "desc", "createdAt", "updatedAt") FROM stdin;
1	连接状态	反映设备与iOTA的连接状态	\N	\N
2	数据采集	反映iOTA通过设备采集数据或设备上报数据的状态	\N	\N
3	数据处理	反映数据处理的状态	\N	\N
\.


--
-- Name: AlertCategory_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."AlertCategory_id_seq"', 1, false);


--
-- Data for Name: AlertDefinition; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."AlertDefinition" (id, key, name, "desc", severity, "createdAt", "updatedAt", "alertEventTypeId", "alertCategoryId") FROM stdin;
1	LinkStatus	设备掉线	设备与iOTA连接中断	1	\N	\N	1	1
2	DacError	采集异常	设备数据采集异常	2	\N	\N	1	2
3	OutOfRange	数据超量程	设备数据超过设备量程范围	3	\N	\N	1	3
202	DoorOpenTooLong	Door Opened Time Too Long	Door Opened Time Too Long	1	\N	\N	1	3
203	TemperatureLevel2	Temperature Alert(Level 2)	Temperature Alert(Level 2)	2	\N	\N	1	3
204	TemperatureLevel1	Temperature Alert(Level 1)	Temperature Alert(Level 1)	1	\N	\N	1	3
201	DoorOpen	Door Opened	Door Opened Notification	3	\N	\N	1	3
\.


--
-- Name: AlertDefinition_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."AlertDefinition_id_seq"', 1, false);


--
-- Data for Name: AlertEventType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."AlertEventType" (id, name, "desc", "recoverMode", "createdAt", "updatedAt") FROM stdin;
1	可恢复的事件	可恢复的事件	Recoverable	\N	\N
2	不可恢复的事件，仅记录	该类事件作为历史告警保存	Notification	\N	\N
3	不可恢复，需人工介入的事件	该类事件保持当前告警状态，需运维人员进行确认处理	NeedConfirm	\N	\N
\.


--
-- Name: AlertEventType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."AlertEventType_id_seq"', 1, false);


--
-- Data for Name: Authorization; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Authorization" (id, "createBy", "createdAt", "updatedAt", "userGroupId", "resourceGroupId", "roleId") FROM stdin;
\.


--
-- Data for Name: CapabilityCategory; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CapabilityCategory" (id, name, image, "desc", "createdAt", "updatedAt") FROM stdin;
1	诊断	\N	\N	2017-08-12 17:07:00.481+08	2017-08-12 17:07:00.481+08
2	控制	\N	\N	2017-08-12 17:07:00.485+08	2017-08-12 17:07:00.485+08
3	采集	\N	\N	2017-08-12 17:07:00.487+08	2017-08-12 17:07:00.487+08
\.


--
-- Name: CapabilityCategory_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."CapabilityCategory_id_seq"', 3, true);


--
-- Data for Name: CapabilityFormula; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CapabilityFormula" (id, properties, "createdAt", "updatedAt", "capabilityId", "formulaId") FROM stdin;
\.


--
-- Data for Name: CapabilityMeta; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CapabilityMeta" (id, name, image, "desc", "createdAt", "updatedAt", "deviceMetaId", "capabilityCategoryId", "protocolMetaId") FROM stdin;
a318fba6-92d9-4d50-8a3a-1662c9b24fb9	采集	\N		2018-01-09 11:04:36.182+08	2018-01-09 11:04:36.182+08	6039a6d8-af54-411e-a520-451b20b6d089	3	\N
e7076b85-5fa8-4f26-bd92-35fd6a802b26	采集			2018-01-12 11:27:20.215+08	2018-03-21 16:05:10.216+08	99978bc0-b3c7-4ba1-9064-723c2c13b95f	3	5244cf99-a9db-4e29-9126-f4b6c786dba6
9a5459f7-7499-41f5-87d2-e55b430a9134	采集			2018-01-16 10:34:03.65+08	2018-01-16 10:34:03.65+08	70177dd0-b5ab-45c0-8338-a6f69138f85f	3	45e683e6-d49b-4b16-af85-607be4509fe5
efab5ad9-0126-4a8f-a0b1-35e21e77c0f1	采集			2018-01-16 10:34:03.981+08	2018-01-16 10:34:03.981+08	72b0bf25-78ae-4ab5-995b-c83cfbf52484	3	45e683e6-d49b-4b16-af85-607be4509fe5
9cbbc8b3-67dd-400f-95c4-31f2f9814062	采集			2018-01-16 10:34:04.391+08	2018-01-16 10:34:04.391+08	0bae88b4-e518-4869-96ea-c833160a9914	3	45e683e6-d49b-4b16-af85-607be4509fe5
cffeb47c-0a8b-48d4-974a-d3d12d22a5f9	控制能力	\N	控制能力	2018-01-19 16:19:33.3+08	2018-01-19 16:19:33.3+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	2	a5f3b3b0-2db7-446a-8642-c844f6560d52
86b95247-634a-44af-8af0-b047a5f10f5d	采集			2017-08-24 20:03:54.297+08	2017-08-24 20:03:54.297+08	38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	3	6026c019-d4d7-4a8e-969e-03ca957ba814
558e2b4d-a2dc-443a-98e5-142e99791b74	采集			2018-01-23 14:02:27.111+08	2018-01-23 14:02:27.111+08	85ba72e3-3754-4b11-a144-757d7a01f1dc	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	采集			2017-08-26 15:45:06.829+08	2017-08-26 15:45:06.829+08	d51cfe97-0f8a-4f38-95fb-34208b171056	3	82cb0db7-6181-419c-8c52-a6b5e01e6c49
aa48a11a-b276-4670-bc85-8c69368a7def	采集			2017-08-26 15:51:32.553+08	2017-08-26 15:51:32.553+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	3	e24c947d-eeba-4895-bad5-f1a03b48bfc7
c631534f-fef5-4db4-b5c2-e7cb081db305	采集			2018-01-23 15:00:11.836+08	2018-01-23 15:00:11.836+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	3	\N
7fab5981-f265-41b6-b77c-36ac36a17a85	环境噪声	\N		2017-08-28 19:16:22.982+08	2017-08-28 19:16:22.982+08	180c854a-5ace-4044-babd-b270f98fde6b	3	\N
e232591d-9a18-42c9-a7a4-dad82336325d	采集	\N		2017-08-28 20:28:53.77+08	2017-08-28 20:28:53.77+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	3	a45d8866-5e4f-48fc-a646-8462d4a516a6
a5866031-3267-4c41-97d2-0c8eeff1baab	采集	\N		2017-08-28 20:54:17.757+08	2017-08-28 20:54:17.757+08	193a9dcf-959d-4cd5-a186-637c11ae97a0	3	22419cd8-d0d1-4f79-92f4-17976bd5dd42
9486f04c-16ee-42bb-9f4b-485632a1857e	采集			2018-01-23 15:32:11.05+08	2018-01-23 15:32:11.05+08	1c332609-ad1d-4066-b0fa-67df29181432	3	a2497ec0-71a1-4611-85eb-12a18c8aaa34
11450ef7-f0d4-4947-acd3-d1f7afd85e0d	采集	\N		2017-08-28 21:24:47.329+08	2017-08-28 21:24:47.329+08	b3f251c1-ab5e-4427-8b38-9180d6544783	3	6961f5ca-3d77-4944-921f-d4bf6d757bce
06cd5938-5a30-4ca3-910e-b174b900daff	电量	\N		2017-08-28 22:07:49.312+08	2017-08-29 11:49:32.525+08	180c854a-5ace-4044-babd-b270f98fde6b	3	\N
394f3594-52f4-472a-9078-081172abaaae	采集			2017-09-08 09:20:57.959+08	2017-09-08 09:20:57.959+08	f9cf9002-bdbd-458c-8534-37db6183e217	3	a2497ec0-71a1-4611-85eb-12a18c8aaa34
38b407d6-2d46-46be-bb4d-9d0c6e673051	采集	\N	沉降位移	2017-08-31 17:03:40.521+08	2017-08-31 17:09:14.384+08	39dc1e20-9e5e-4776-8459-5354261926fd	3	44a576ba-470c-4115-8e33-f2a80145060c
6fbdae8b-7c5b-4125-8df3-4d9bef10997a	采集			2018-01-24 11:32:24.986+08	2018-01-24 11:32:24.986+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	3	\N
afcc8d5f-3e9e-4ee3-a93e-135a41569846	采集	\N	主动上传	2017-09-09 15:51:50.173+08	2018-03-19 17:10:31.998+08	cf03d97a-0c99-494f-821d-da2dc02126dc	3	b56416f5-1d0a-447a-b178-90e538da66fe
c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e	采集	\N		2019-12-05 15:45:15.352+08	2019-12-05 15:45:15.352+08	ff8195ce-78e0-4668-81bb-8f26e83411a9	3	9da84987-2b74-4e21-b24c-98592f025778
8b897f24-accb-4630-b1fa-e408e358fd35	风速			2017-09-04 14:12:42.502+08	2018-07-09 15:29:49.994+08	1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	3	2e0c0a7c-01b1-4cb8-8f27-efec39b787ca
753c5c99-5da6-4172-9173-492353bb0533	采集			2017-09-02 14:47:06.947+08	2017-09-02 14:47:06.947+08	28abcb7f-eb40-406b-a798-fc280b30638e	3	1fb03ffc-fd93-4ea6-bf06-11311a655212
3c90cbd4-1398-4e10-b930-11e414495e2f	采集			2017-09-02 14:59:34.584+08	2017-09-02 14:59:34.584+08	0a25e0b7-784b-46fb-8fa3-d1a99593f343	3	872da9a0-9b0f-48d0-9767-c090a8d895af
cbca938f-e317-4e23-a721-4f2b7b54a827	采集			2017-09-04 09:36:21.64+08	2017-09-04 09:36:21.64+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	3	7c734114-6fa7-41a5-8f0c-ce0940aded18
27235845-4d19-4dfa-adc8-4f7b84233022	采集			2017-09-09 11:32:45.954+08	2018-07-04 12:32:25.272+08	b56e401a-75e7-47ea-84db-6638fd421792	3	bf0f9241-ed4f-4e99-83c6-8160c16313ea
2f698b72-9c05-42fe-a0e9-3224917239aa	采集			2017-09-04 19:04:13.359+08	2017-09-04 19:04:13.359+08	a0bf9003-9dbd-4cc7-8bea-7da81ce69f32	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
8f438749-6713-4139-86ef-08d02243f962	采集			2017-09-04 20:41:19.218+08	2017-09-04 20:41:51.199+08	ed599be6-4811-4a09-a065-4b29586a4c00	3	6ea8f5c8-9394-4626-a6cf-1816ec45201d
0e235516-0320-49a5-91e7-a70282c3bb70	采集			2017-09-05 10:54:48.261+08	2017-09-05 10:54:48.261+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	3	526f9775-e8e0-4d37-ac18-304e20c79c6a
12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	采集			2017-08-26 15:59:26.862+08	2017-09-05 11:07:01.214+08	9110f259-e269-446d-afa3-798069f4534d	3	\N
abcd5e24-44d0-47ba-95db-9bdfab8d2d92	采集			2017-09-06 18:47:18.572+08	2017-09-06 18:47:27.057+08	584a210b-20f2-49cf-906a-9d6b4883af09	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
f02e6117-3fda-43f0-b465-8f5961e08bed	采集	\N		2017-09-06 19:35:19.119+08	2017-09-06 19:35:19.119+08	8e782506-4bab-4798-9e24-315107e3cc15	3	dce56237-048b-4d44-a741-069f30b89674
1637283e-980c-4ed8-8cf3-71e794c45bb2	采集		采集光照	2017-09-06 20:01:37.367+08	2017-09-06 20:01:37.367+08	05d70310-6689-4174-b4ae-274ab5e8f287	3	f62c8865-7064-4630-8ad6-60d29b34310d
eea54bd1-3ede-4ab6-b07d-8b1f58292efc	采集			2017-09-07 14:40:21.325+08	2017-09-07 14:40:21.325+08	0c5bca0d-95b8-416e-865b-1f09bb49285f	3	9dbee489-45fe-4387-8e66-e1b7a6c9608e
12de1b06-528f-42a2-8174-daa14d29506d	采集	\N		2017-09-07 20:32:02.664+08	2017-09-07 20:32:02.664+08	77d3bafd-4986-4848-b3c9-dfe847c6750e	3	ed3bd325-ddc9-45f1-becc-616d8d57d528
62a1a275-a6d3-44b4-b472-901f274afaaa	采集			2017-09-08 17:28:38.388+08	2017-09-08 17:28:38.388+08	96870c78-2ed9-4141-9438-e9415cd6eeb8	3	4282373a-95d9-4b6e-97de-73fdd0b03407
bda64c7e-58cc-4668-8f46-8d08be815f1a	采集			2017-09-09 14:39:09.814+08	2017-09-09 14:39:09.814+08	ae93a369-2ef8-4e20-83d6-d2f89076b115	3	33386019-d751-44bb-b39d-198ba7d892ff
368cf5ab-5455-422a-a659-ba613b272684	采集			2017-09-11 20:33:20.853+08	2017-09-11 20:33:20.853+08	497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	3	0571b781-2713-4381-a8d3-3e54717eb15a
6e5f9207-905d-4732-bb07-89e21da54dd1	采集			2017-09-12 17:44:24.681+08	2017-09-12 17:44:24.681+08	c7528fab-94f4-4110-9aaf-8964afa09c20	3	9d569abf-b544-4bd5-907a-218ea77f580b
b71b35e9-7756-46e1-84c8-d8c092029638	采集			2017-09-12 17:44:48.573+08	2017-09-12 17:44:48.573+08	003540d0-616c-4611-92c1-1cd31005eabf	3	9849a791-5487-439b-a063-f7691ed40bfc
e8a19dbd-26d3-49a0-87b6-8248ceb6fc53	测斜			2017-08-12 17:30:28.178+08	2017-11-15 11:18:38.553+08	990ac51b-201f-4818-8ac0-06e9997719ed	3	7e1e8da3-20b2-4657-bfa2-7a39b17fdd6b
e5bbfc36-064a-45ac-adf0-2003947dd2c4	采集			2017-09-12 17:57:39.268+08	2017-09-12 17:57:39.268+08	ab34de76-f758-4311-8bfc-dc7054a58ecf	3	65b7fa36-3a28-48e9-9f56-20d2277d7a63
c59b78f5-1913-43de-8355-67d4c34b662a	采集			2017-09-12 18:08:25.111+08	2017-09-12 18:08:25.111+08	65bd339b-0469-4019-8c96-55a6dbc6b697	3	cf7c40e3-05b5-4080-9814-8daf77e75127
548cf988-bee3-40cd-b3b9-5d7d2da91605	采集			2017-09-12 19:48:22.309+08	2017-09-12 19:48:22.309+08	a8a32974-fa53-4e18-a264-58c885d3c409	3	f3220830-3911-472f-a168-49c2e6be4264
d4a43ecd-43b6-4232-a482-16e675aadb59	测距	\N		2017-09-12 20:28:42.054+08	2017-09-12 20:28:42.054+08	5bc92012-60a1-48ac-840f-575cb4e94c48	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
d0fd7335-0b93-4716-9793-e95ae31f1765	采集			2017-09-13 09:13:35.772+08	2017-09-13 09:13:35.772+08	d523046b-7e32-486b-a1ab-cac779eb6209	3	018f9be4-aa05-45e1-9fbe-ef52acd6970e
1108a01e-cf7e-4407-be7a-85cf6851ca6d	采集			2017-09-13 10:00:10.879+08	2017-09-13 10:00:10.879+08	e833a38c-2409-474d-8d23-86ff4d45b199	3	410e53eb-787b-4897-8eb9-5c48e5268fbe
926a081e-9ed3-4bab-a8d1-c556a8be9404	采集	\N		2018-01-09 11:10:39.249+08	2018-01-09 11:10:39.249+08	5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	3	\N
31983eec-ccfb-4540-8ab1-12b5b3c8eeb2	采集			2017-09-14 14:34:58.931+08	2017-09-14 14:36:06.197+08	eccb6310-f340-4668-9469-3df210aa471d	3	cfb93ff0-1f09-49fb-98a7-71bcc7116084
32d914f1-c9e2-402c-b81f-3805e8f60e60	采集			2017-09-14 14:41:42.378+08	2017-09-14 14:41:42.378+08	6850f742-c5b7-4984-b1ef-d01b16015eb9	3	476e231d-d7b8-49da-bc07-0b0dd084b5d3
bbb36e1c-2e68-4274-881d-77618b327419	采集			2017-09-14 14:47:52.165+08	2017-09-14 14:47:52.165+08	ac3a0caf-7018-44d2-9337-32c7194ec412	3	d0b9cd23-81cd-4990-9b9a-5e38b382d587
806a1583-b6da-4e6d-89f9-419fad701d56	采集			2017-09-14 14:50:50.805+08	2017-09-14 14:50:50.805+08	a96f169e-56b9-49c8-a5cd-caade25fbf14	3	d0b9cd23-81cd-4990-9b9a-5e38b382d587
b640dd61-c4cb-4b47-af2d-fc9a2284f407	采集			2017-09-14 14:53:06.104+08	2017-09-14 14:53:06.104+08	3415a2e9-2c44-402f-872c-f0187cef058f	3	d0b9cd23-81cd-4990-9b9a-5e38b382d587
ed246dd4-64be-4a48-a869-c4de71bbb2b6	采集			2017-09-14 17:27:01.213+08	2017-09-14 17:27:01.213+08	cdf69820-94cb-45a3-acfe-21aa83737595	3	b31c1a66-c65d-437f-b635-6f7aa32cf0e4
4a08b319-23f2-4854-ad86-755792e575d4	采集			2017-09-14 19:08:55.126+08	2017-09-14 19:08:55.126+08	55d8d331-c61d-4523-886d-2d69f350cde0	3	75267b8b-deeb-49a4-b3f8-0c775ea41cb0
675bed44-95cd-4c66-890c-97fd1ffb3cd9	采集			2017-09-14 19:37:28.694+08	2017-09-14 19:37:28.694+08	2078f06f-be3c-4d10-90b1-200f3bdb00ae	3	cda82375-e0ae-4f55-97b2-47d867221b9b
64bf5540-28ff-480e-9225-c13af83a12bc	采集			2017-09-14 20:24:32.014+08	2017-09-14 20:24:32.014+08	92597060-2385-438d-8a9e-25fee05e4e31	3	277490e2-f0f8-4aa6-b04a-0b05a1466059
7e142a42-bfc3-472c-8c56-ef90d2964c67	采集			2017-09-14 20:36:40.093+08	2017-09-14 20:36:40.093+08	80dbb37c-0408-4a0b-8ef5-dc1acd7c303b	3	d3cd6277-96e5-4811-af48-ff6f141b2fe6
cb38bec9-e2e2-4a58-8bf5-b730c85910b3	采集			2017-09-16 12:22:16.72+08	2017-09-16 12:22:16.72+08	0357e07d-3afb-4d4b-b196-766688a5b2b2	3	1a60f41c-f6df-43a2-98f6-6b4d908caaba
c9f6eadb-715b-4ad3-9354-fcfe2735ba5a	采集	\N		2017-09-16 14:19:05.245+08	2017-09-16 14:19:05.245+08	831ab1f7-fe76-4152-b7a0-3359bdf7c3bd	3	ce984e5a-5697-4b5f-bc51-fef9a07f2d1e
33bc9e2c-5131-4c06-836f-79051ffccb1e	采集压力			2017-09-16 15:21:21.452+08	2017-09-16 15:21:21.452+08	eb1c1781-cea9-411f-8c15-39aafc8ee62c	3	bda73ab5-87db-4bba-a807-ddc03a8b2a4b
797175f9-4873-4010-8299-cb4ce6a3e386	采集			2017-09-16 16:10:09.737+08	2017-09-16 16:10:09.737+08	aa9f0751-4576-42b2-b09b-a6c3959955df	3	ee31c052-3056-4021-aaa5-3f0caa4d73ee
2b50fea6-1651-43d8-8e42-2faca6f3d3ac	采集			2017-09-18 20:53:58.4+08	2017-09-18 20:53:58.4+08	6f16c6fa-6d60-481b-95ec-e450227fe268	3	58991e17-c7c2-420e-b1a5-525a0e4d62a6
30898650-f0f5-46dc-adad-62e86317d96b	采集	\N		2017-09-18 21:06:35.749+08	2017-09-18 21:06:35.749+08	34e17d2c-cfa7-42a7-88d0-fc64f13f68c2	3	7bd91ff4-9649-4345-abc5-69e305a0738a
153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0	能力			2017-09-19 16:23:55.244+08	2017-09-19 16:23:55.244+08	98a8fd6f-cab9-47d3-88aa-8832962c931c	3	914cafcd-4123-47c7-9dc7-392c91427b17
66c8cd90-726f-42dd-afd8-2aa08f68a71f	采集			2017-09-19 20:20:53.739+08	2017-09-19 20:20:53.739+08	7e6111e8-0a68-4af8-92ae-6238b7f3c631	3	45e683e6-d49b-4b16-af85-607be4509fe5
01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5	采集			2018-01-16 09:44:42.415+08	2018-01-16 09:44:42.415+08	c02185df-1224-4e63-aab4-3d284c8bb526	3	45e683e6-d49b-4b16-af85-607be4509fe5
c0659a78-00c3-480d-a385-21a57e7eba37	采集			2017-09-20 16:26:18.708+08	2017-09-20 16:26:18.708+08	c094bbbe-bc2a-4223-bba7-539edb03d3b0	3	2a7d59b8-3a15-40f5-ad27-2f289da1dfa5
523d0a38-7b6b-4808-94b0-63bb477e7ead	采集			2017-09-21 10:57:18.455+08	2017-09-21 10:57:18.455+08	1c210656-dc67-470f-b8c3-d653c82e3bb0	3	74e538ac-294f-4037-8cc3-3720305c80c4
9e159552-fb77-4196-aea1-d7e9f88fcbbc	采集			2017-09-22 17:34:24.767+08	2017-09-22 17:34:24.767+08	fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b	3	f59cbddd-927c-47e7-97d6-964d8abdd184
13cc9f05-5d98-4778-93a9-a423b70250a7	采集			2017-09-25 10:44:21.677+08	2017-09-25 10:44:21.677+08	d3245ff1-0781-49bd-b37c-e245a350a709	3	814665db-0ede-4cc6-90de-ac291cdbf814
8092619d-978e-402a-9aa1-897cb718a39b	采集			2017-09-25 10:54:34.182+08	2017-09-25 10:54:34.182+08	3bf186e9-5049-40e4-ba57-b40d90cd1543	3	2dffaa68-111b-4b1d-89c4-2a14a6b8c64e
05c849f0-63f3-4d19-97bf-f22e655c0852	采集			2017-09-25 19:45:57.21+08	2017-09-25 19:45:57.21+08	6f1f679a-d9b7-4fe3-945d-8b83105284a8	3	cf4c0e24-9798-4c40-af39-b680721eb626
7795f990-07c0-4953-aab6-8af73f1bf2d2	采集			2017-09-25 20:40:46.382+08	2017-09-25 20:40:46.382+08	ca7ff65b-b5a0-49f3-ad0b-6821012604ce	3	93c70807-ebbf-4b88-b0b9-0232cca98b69
46e0602d-85be-45f3-99cd-4a9a0ec8c3f0	噪声			2017-09-26 10:30:13.278+08	2017-09-26 10:30:13.278+08	1c909cc1-bb51-4e83-824c-31fb278ce026	3	3675fa64-2747-4043-98d6-fdee3bfd7e89
e146e8c0-39b3-4922-b153-21492123982d	采集			2018-01-16 10:33:58.394+08	2018-01-16 10:33:58.394+08	e47f8159-ee4b-45c0-b827-30b69d0328d8	3	45e683e6-d49b-4b16-af85-607be4509fe5
8d3ad66f-9a24-4adb-99de-1b86ae3e5d46	采集			2018-01-16 10:33:59.646+08	2018-01-16 10:33:59.646+08	ff38a597-0318-47bb-a647-5ad78dd2dca8	3	45e683e6-d49b-4b16-af85-607be4509fe5
72037569-7638-4b93-9212-ba15109f9afb	采集			2017-09-29 15:08:42.953+08	2017-09-29 15:08:42.953+08	be246ea1-fd75-4151-92c6-54b278d11287	3	c3ff71d9-c748-4bb8-a264-c8c2ce35c061
755904b4-158d-413b-bc84-ad489380caf2	1312		4444444444444444444	2017-09-30 11:42:38.225+08	2017-09-30 11:43:04.33+08	cbc19e42-a8ba-4a12-83f9-6ef1469df546	2	\N
d54fb237-1da2-40a1-9a83-e4a2dc8eecff	阿道夫			2017-10-07 20:50:21.564+08	2017-10-07 20:50:21.564+08	6d1f494d-6e60-4181-85ee-115ea3586c6d	3	\N
40c5fafd-6377-439c-bc26-6e7eb069f3c1	振弦频率采集	\N		2017-10-23 10:40:53.502+08	2017-10-23 10:40:53.502+08	6888837c-236d-4a0a-871e-ea506429a386	3	\N
9b5c5f27-ebad-42e1-8586-405066f03c1d	采集	\N		2017-10-31 15:08:02.597+08	2017-10-31 15:08:02.597+08	abb38d23-09f3-48fc-b9ee-4dfaf1db995b	3	97b6dd76-4b4c-42e7-88a4-52e338aab627
32ccecbf-6cc2-4076-9f31-9541382b444a	采集			2017-10-31 16:29:27.915+08	2017-10-31 16:29:27.915+08	8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125	3	fffec7fc-706e-4f38-bb9e-8a6b284d28bf
cbd4f0c1-9be1-4123-8fff-9d16d6f163a3	abc-测斜			2017-10-31 18:02:48.584+08	2017-10-31 18:02:48.584+08	f5e0fd8e-6d70-4dd7-830f-42efadf389f5	3	8267e518-0c87-4bf5-8d35-364229aa6076
2e7a1db8-dd48-47e0-87d0-023cd2b9ff08	风速风向采集			2017-09-14 20:56:17.182+08	2017-12-08 08:40:33.68+08	fd8e5a82-2b93-4d83-9132-4666b974079d	3	71f0c6f5-2830-448a-8bf4-d4992c8cee9a
e87c4f0a-877a-4865-98c6-bca08f38164b	采集	\N		2017-09-19 20:40:30.242+08	2017-12-08 10:08:19.226+08	d32b2513-a8bb-465c-aabf-0832f355ef6b	3	ef1d82db-d7d3-4d0e-894c-63cf0bd389ae
f4bf34ce-15d4-402f-a4d4-8e307936393d	采集	\N		2018-01-09 11:31:58.817+08	2018-01-09 11:31:58.817+08	92bad770-f845-4bd8-8e2b-55e5343a2201	3	\N
62f4f7c3-95a8-49d9-a5d1-c8f432c8d598	采集			2017-11-06 11:16:45.201+08	2017-11-06 11:16:45.201+08	c52cea56-d5aa-4b14-ad9f-05fb6974e528	3	31484d44-4700-4d3e-87ad-19cdd440d7cd
8e034647-583f-43a4-9aa1-1291e5bd3b0d	采集			2017-11-06 15:04:16.817+08	2017-11-06 15:04:16.817+08	43e2a07a-c33e-4e54-ba5e-0a948ae4ba61	3	31484d44-4700-4d3e-87ad-19cdd440d7cd
e265c046-3bc7-43b9-85d7-493bfd4c76d8	采集	\N		2017-11-10 14:15:21.209+08	2017-11-10 14:15:21.209+08	393862fc-cfec-404b-873d-c42f5e22bc61	3	0dc05dea-ad41-48eb-8f4b-4b2b20ae87fe
96c5d707-f87c-4a33-a34e-4094c74b8cea	采集			2017-11-16 13:50:55.927+08	2017-11-16 13:50:55.927+08	cff552ac-d565-4a44-8400-e0f4382ce853	3	bb630bcd-5a32-416d-b6e2-9d0bd0eab954
80773b73-3653-4506-8298-8dfcb4865a90	采集			2017-11-16 17:03:23.917+08	2017-11-16 17:03:23.917+08	f86c7d29-f504-474d-8665-d484e5c41e8a	3	666451eb-2cea-4777-83de-e5d671a5be5f
28802bd7-d538-4d62-8a84-87a3e3f5c9d3	采集			2019-12-06 10:18:48.769+08	2019-12-06 10:18:48.769+08	82d07222-1b08-4fa5-85bb-790f4dc24def	3	\N
5e0f1662-8477-42af-9c5a-ae89e5c992c1	采集			2017-11-20 16:42:59.967+08	2017-11-20 16:42:59.967+08	3f80f427-4615-44ae-b2e8-e783733d0ea5	3	5379ca6c-1ae1-4730-a1b3-913ac968ef88
3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2	采集			2017-11-21 15:57:22.482+08	2017-11-21 15:57:22.482+08	dfbedf15-8cef-4760-9cad-efaab883db3d	3	aa079e43-4dfe-40f0-81f7-03b3d30d9082
eb818780-0ef4-4fd6-9b77-64d3c96493c4	采集			2017-11-23 10:44:01.176+08	2017-11-23 10:44:01.176+08	57bf451a-e6f5-4df5-a4a7-c2c42a46546f	3	598d9e9a-4e6f-4ce0-b6f0-1f2b825fb7fc
7fa794ae-2b82-40df-9084-5d7b66236d50	采集	\N		2017-11-28 16:55:37.909+08	2017-11-28 16:55:37.909+08	fe65a1cd-2040-403c-bb6f-529d4063bc45	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
f8a92db3-4b55-47ec-a466-2d3c44e8b97d	采集	\N		2017-11-28 16:59:16.91+08	2017-11-28 16:59:16.91+08	f2c96428-649e-47e9-9b6f-e5749195cb33	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
25fa942f-2929-4429-85e1-e3deb8f728b0	采集			2017-11-29 09:23:59.558+08	2017-11-29 09:23:59.558+08	04cb319d-9e45-4534-8be6-5f1f4aef7740	3	46523fa3-833c-499c-b73e-3055e95fce65
b767a3ea-663e-402a-82c0-ee964abae581	采集			2018-02-07 16:40:02.709+08	2018-02-07 16:40:02.709+08	aaa7d270-43dc-4864-bb0a-967c33658698	3	\N
4bf64044-476d-4d5a-933e-5a493f1ee2e4	采集	\N		2017-11-29 11:50:29.737+08	2017-11-29 11:50:29.737+08	13126536-b6af-48d0-b43e-25144b65dd8d	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
3dad677f-3582-41e5-a77c-ea629f6974fe	采集	\N		2017-11-29 11:50:41.726+08	2017-11-29 11:50:41.726+08	0c5d070d-fb83-4f78-acc0-a0bd12be6cc2	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
7224902a-6cd1-4877-a92f-d8cb544d36ce	采集	\N		2017-11-29 11:51:02.629+08	2017-11-29 11:51:02.629+08	f3ad3df8-e1ad-4e05-b479-185ac5ae8602	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
06beef64-e140-4b7c-865d-64d043fcecc1	采集	\N		2017-11-29 11:51:14.15+08	2017-11-29 11:51:14.15+08	e8d9a100-9650-4afc-a260-9c7bcdea9263	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
8275461f-e7c3-4595-ae09-36a4288c65fd	采集	\N		2017-11-29 11:51:33.18+08	2017-11-29 11:51:33.18+08	d7912272-424d-4546-a3c1-43a24365dde0	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
71f3c15e-91d9-4044-ba95-66957d312dc8	采集	\N		2017-11-29 11:51:59.051+08	2017-11-29 11:51:59.051+08	91372b00-3bf7-4eb0-9495-ad544dfb04ca	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
857d5408-8cb5-4084-a7a3-ab0f9d3dd1da	采集	\N		2017-11-29 11:52:13.538+08	2017-11-29 11:52:13.538+08	0aae766a-5d82-479a-bd71-7eb1e0e4e20f	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
29f596e9-1ed7-49db-b932-0d436bef0d59	采集	\N		2017-11-29 11:52:23.997+08	2017-11-29 11:52:23.997+08	ac32d002-0463-4bc7-a307-86236e6307a7	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
90706e3b-13d8-4862-a1d4-3ace7d4a7b6e	pressure	\N		2017-11-29 15:29:19.952+08	2017-11-29 15:29:19.952+08	16ca7eed-6c64-4c4b-a495-6c5f785b86cd	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
c49b63f0-5fc2-41bb-ad27-231510dde4c0	采集	\N		2017-11-29 15:37:12.751+08	2017-11-29 15:37:12.751+08	3462227d-e989-421c-9f48-c0ae7a573b78	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
e6cd110e-7720-4d98-bf4b-655e7d545791	采集	\N		2017-11-29 15:43:22.292+08	2017-11-29 15:43:22.292+08	6bd546bc-55b0-4ee4-8b58-34feec8cdb6c	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
dd89b226-58f4-4509-9eb9-cf119be26a80	采集	\N		2017-11-29 15:47:36.252+08	2017-11-29 15:47:36.252+08	65f4e736-8261-40cc-b3b8-948ab0e4252e	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
0c5f1ed6-626c-4903-ba56-b99bb676bfc1	采集	\N		2017-11-29 15:52:10.67+08	2017-11-29 15:52:10.67+08	e015d9d3-542e-4d54-80c6-39db4ba20877	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
f124fe60-87de-429a-ae17-249d22ce2005	采集			2017-11-29 15:56:44.951+08	2017-11-29 15:56:44.951+08	24b365fd-4e6e-4800-ad48-d3f082c9b2b8	3	00bf4878-0815-4bbf-bca6-8115561ffeaf
4211c278-30f5-4c53-ad81-d296e391b8db	采集			2017-11-29 16:58:58.193+08	2017-11-29 16:58:58.193+08	b3014b29-7547-4c85-a147-7ab37d6c328f	3	\N
d3ea47f8-1472-484d-a6fc-411e6637a71b	采集	\N		2017-11-29 17:38:18.634+08	2017-11-29 17:38:18.634+08	5ce1bb8e-5512-48aa-9842-c5ea7754f340	3	\N
5aa08735-2f16-4ca2-b9a3-dfbf95e1153d	采集	\N		2017-11-29 17:38:30.28+08	2017-11-29 17:38:30.28+08	6e9cc5a0-a0ab-49f5-bf77-13164ed09055	3	\N
c71648f4-8926-4408-b731-937ce2b9db90	采集			2017-11-29 17:40:19.265+08	2017-11-29 17:40:19.265+08	5dcdefa3-da3c-4745-828c-d97fae30d82d	3	\N
19e68163-a7e9-4be7-b9ae-6966035ac671	采集			2017-11-29 17:43:55.667+08	2017-11-29 17:43:55.667+08	55be82a9-bf1f-4e1d-bca3-d76fc60beca3	3	\N
9bf06fea-f0b0-492f-9d2f-5ea749264883	采集			2017-11-29 17:46:58.805+08	2017-11-29 17:46:58.805+08	6629f27c-b28d-400b-9355-71e81a910b2b	3	\N
8096b88c-dc64-4f26-8f04-6ac919d70447	采集			2017-11-29 17:49:21.402+08	2017-11-29 17:49:21.402+08	97463615-eb6e-4836-86a1-a282e935ed5d	3	\N
67806ef3-539e-4cfc-932c-2b9fd5d49329	采集			2017-11-29 17:52:19.033+08	2017-11-29 17:52:19.033+08	cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e	3	\N
17077adc-cfaa-428d-a6e5-346aa75678d9	采集			2017-11-29 17:55:29.413+08	2017-11-29 17:55:29.413+08	823921c0-40e3-46c6-809c-804adcf828ce	3	\N
af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2	采集			2017-11-29 17:57:56.259+08	2017-11-29 17:57:56.259+08	2420aadc-c220-4ce6-bfe9-c21d79ce827f	3	\N
979e7ae3-520f-4bf4-b641-7451c30378c6	采集			2017-11-29 18:00:44.756+08	2017-11-29 18:00:44.756+08	bd742efe-04d8-4e90-9799-dd3830baf3ca	3	\N
06a3c28a-b1d4-41cc-b291-aa2cd6682d60	采集			2017-11-30 13:55:54.582+08	2017-11-30 13:55:54.582+08	93f84dd4-087b-46ef-bdda-9db4adfdb16b	3	471b754b-0904-451b-96a3-a5e8c6a6ee2b
d864e964-72fe-43e7-96a5-8e0a2079b731	Output			2017-11-30 15:01:46.314+08	2017-11-30 15:01:46.314+08	345d6324-7330-4d26-a786-a6823849f483	3	\N
acb1f3e2-048a-4eb3-a01f-36e1f1968b4a	采集			2017-11-30 15:14:59.458+08	2017-11-30 15:14:59.458+08	40b8c657-2644-4ce2-b490-cf61523a4012	3	6026c019-d4d7-4a8e-969e-03ca957ba814
2de4150f-19f7-4fff-9cb5-9d97226ded24	采集			2017-11-30 15:18:38.816+08	2017-11-30 15:18:38.816+08	e889420f-f8d0-4e0d-aab2-1f2f965e75bb	3	6026c019-d4d7-4a8e-969e-03ca957ba814
6d7fdfc9-5735-4b35-85f6-238e34c241a0	云采集	\N		2018-03-08 20:02:08.209+08	2018-07-18 09:58:33.268+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	3	\N
2580380e-6175-4c59-829a-f4f2c36d4af2	采集	\N	裂缝采集	2017-11-17 09:34:17.992+08	2018-11-26 11:44:27.328+08	a300435b-3982-4694-aab4-48ba853d838e	3	\N
028ff831-cfab-43f0-a757-fe8933b46002	采集			2018-01-05 15:48:51.363+08	2018-01-05 15:48:51.363+08	424f45f6-916c-4383-bce4-c71153f82e63	3	\N
f07e4888-28ea-482b-bbe3-a61929f52026	采集	\N		2018-01-08 18:35:39.98+08	2018-01-08 19:14:02.089+08	29aa5799-e271-4913-8e21-04edddaa5be1	3	\N
689910ff-378c-4467-b95b-22907c3076e5	采集			2017-11-30 15:25:27.905+08	2017-11-30 15:25:27.905+08	f5c42818-e09f-4cb7-b7cb-63b18e8829a9	3	6026c019-d4d7-4a8e-969e-03ca957ba814
8c4a1dc0-f42b-4a5b-9267-e447615a1821	采集			2017-12-01 09:59:04.597+08	2017-12-01 09:59:04.597+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	3	0ba29e5a-b0e0-403e-b562-00f940b9be96
b1683813-a1e0-4d50-969b-1bad76311398	采集	\N		2018-01-09 14:07:31.173+08	2018-01-09 14:07:31.173+08	0beb606c-f306-4476-8526-31646c8107e5	3	\N
b69afb69-84fd-4273-be31-9727323de2e0	采集	\N		2018-01-09 14:14:58.434+08	2018-01-09 14:14:58.434+08	85f5b6fd-92cc-4d22-9dff-952c59003e3f	3	\N
7ef9f068-1ac5-4c5a-802a-3b3a1bb55191	采集			2018-01-16 10:21:41.709+08	2018-01-16 10:21:41.709+08	42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	3	45e683e6-d49b-4b16-af85-607be4509fe5
3f322286-3072-444d-8d6b-06f433f2f5aa	日志提取	\N		2019-12-06 10:23:27.688+08	2019-12-06 10:23:27.688+08	71735c3a-2e25-40c1-81ad-df10d8792ac2	2	48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac
3d303bbc-0f1a-4105-b7a6-9db99aefb409	主动查询	\N		2018-01-22 10:21:25.599+08	2018-01-22 10:21:25.599+08	0cffe018-1007-40ed-ac19-a399517129af	3	3fc1f94e-7054-43a4-a42d-21b63c00442c
6b13c027-dfe8-4dd3-ae23-c5266b03d77b	采集			2017-12-06 16:09:36.038+08	2018-11-19 16:52:58.181+08	7c42d86a-5801-4ef2-94df-2b5c702ff7f5	3	\N
d28e689e-1bcd-4f9e-81ac-a0bfc56667e3	采集			2017-12-01 15:00:04.227+08	2017-12-01 15:00:04.227+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
95a5b30a-5159-471a-810a-14e31c3a868c	采集			2017-12-01 15:05:58.353+08	2017-12-01 15:05:58.353+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
176efcfa-0544-41c5-8aef-5821cb43a0e3	采集	\N		2017-12-04 12:57:41.959+08	2017-12-04 12:57:41.959+08	f5d141ad-ea96-4398-8712-2a802af988f8	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
06d28e3e-8a80-4110-bf18-a06cadc13e9b	采集			2017-12-04 13:47:01.139+08	2017-12-04 13:47:01.139+08	e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
50cd4d61-29c8-4d36-b143-85fcda3f99e5	采集			2017-12-04 14:33:34.381+08	2017-12-04 14:33:34.381+08	409f2510-dd44-4990-b530-096bf2bcb592	3	afcdc4de-70b6-486d-a34f-fc255b4bf048
84868dd7-e484-47d3-b26f-8c39e898bb4d	采集			2017-12-05 10:50:36.379+08	2017-12-05 10:50:36.379+08	b0a937d5-432e-4a49-b044-e4b66d649f52	3	1e2ed006-51a1-4136-9de9-03451e5aee80
514c15fe-e538-4824-9e48-1d3a83a560c1	采集			2017-12-06 10:37:27.479+08	2017-12-06 10:37:27.479+08	6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	3	8338feff-fcd2-4920-9601-149a610d9887
8929f60c-f9d6-4a0f-a19b-0a57b7025b43	采集			2017-12-06 12:00:43.627+08	2017-12-06 12:00:43.627+08	b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	3	20051464-5ac9-47e7-940f-04b066d61a18
49be5f93-ae43-4fc7-89f9-58581a1f495e	采集			2017-12-06 14:12:59.652+08	2017-12-06 14:12:59.652+08	21d99b83-6a52-4465-90c4-125d8330e1c1	3	e5eeef06-b9fc-4418-8874-308658cdc66d
fcbff74f-610d-4dc8-b2a8-d5c54792fc7c	采集			2017-12-06 15:17:54.54+08	2017-12-06 15:17:54.54+08	aa86893b-e991-4c57-94a7-b29e7349fe50	3	b78abeef-fbe0-4ecf-9a73-9f343bc5800e
df01da11-6cbc-4a10-b62d-dba26d636f74	采集	\N		2017-12-07 10:22:18.577+08	2017-12-07 10:22:18.577+08	7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	3	1fb03ffc-fd93-4ea6-bf06-11311a655212
13268453-da66-4d7a-a972-e67bd897b1a9	采集			2017-12-07 11:43:58.699+08	2017-12-07 11:43:58.699+08	183c2cd5-5a53-4985-80aa-33a6ce2f82d4	3	e3ca2ca2-1556-415d-9001-4d7d88f2f3d1
b314cfb9-6a52-40c6-ab30-cc7f75189c59	采集			2017-12-07 14:20:25.163+08	2017-12-07 14:20:25.163+08	4d5a3f58-0eda-4443-9dcc-c64bb1785d88	3	fa95dbc3-abc9-43d2-98ba-9c176005b0b8
05aa0ad1-dcc0-40c2-80cc-198e8e1a6511	采集			2017-12-07 15:20:39.544+08	2017-12-07 15:20:39.544+08	5fcd559a-c3dc-4c38-acde-b4b1749b4ab3	3	d6833ba5-fa57-4983-840c-096e456ea988
096efcee-8caa-4bf3-9f0b-b8ce92ace83c	采集			2017-12-08 09:55:09.544+08	2017-12-08 09:55:09.544+08	ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	3	ef1d82db-d7d3-4d0e-894c-63cf0bd389ae
e905978b-35fd-48b2-8dca-d3af8020841e	采集			2017-12-08 14:40:29.027+08	2017-12-08 14:40:29.027+08	d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
e9b00fde-a1f2-4167-af71-7fc7862cc867	采集			2017-12-08 14:49:12.897+08	2017-12-08 14:49:12.897+08	0fc23377-9f3d-4511-ab1b-8b8df0259d2f	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
a5e1cd4e-fda7-425f-970e-ad4449eb546c	采集			2017-12-08 14:54:02.543+08	2017-12-08 14:54:02.543+08	14bab7df-524d-4a64-a618-23d4ebcc9b5e	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
22f8366a-f855-462a-ab4d-6f140e075584	采集			2017-12-08 14:57:54.018+08	2017-12-08 14:57:54.018+08	efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
e4d8894c-78bb-485f-a691-8288a65c6967	采集			2017-12-08 15:02:49.628+08	2017-12-08 15:02:49.628+08	4255e295-7830-45af-ab7c-44fee1668641	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
20231ffb-4f57-4ebc-bef1-cfd72e18d550	采集			2017-12-08 15:09:50.79+08	2017-12-08 15:09:50.79+08	ceed540f-d7a3-48bc-b8d0-e861e21499a4	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
88876216-b879-4524-bada-01f39ed17c93	采集			2017-12-08 15:16:37.892+08	2017-12-08 15:16:37.892+08	31cb6c0b-e369-46b0-9be4-1de3737503fc	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
16b2379a-313c-434d-8eb3-56120068c40a	采集			2017-12-08 15:23:44.915+08	2017-12-08 15:23:44.915+08	ea797ffb-87b5-4e0a-8da4-7f627c347b2f	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
ed796d50-66db-40b1-be39-62728b8d5fdc	采集			2017-12-08 15:30:34.581+08	2017-12-08 15:30:34.581+08	8583cb29-4726-4532-9530-a5b338d3483c	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
1bbadeee-62da-4062-bcf4-f0f18757aead	采集			2017-12-08 15:40:02.616+08	2017-12-08 15:40:02.616+08	dc5bdee9-14f3-4040-ad1c-faf008358890	3	37eb4d94-3143-426f-bb36-bbb57cc647b5
6bc1aa05-f9ce-4f21-92f8-d1464535b0c2	采集			2017-12-11 15:27:03.003+08	2017-12-11 15:27:03.003+08	ef629030-d691-43fa-b6b4-b1465e60dace	3	2e03f731-c82a-4513-ab1a-610b99c3d1a1
8c9d6aac-81ca-48cb-b67c-6916c734bf63	采集			2017-12-12 10:23:59.554+08	2017-12-12 10:23:59.554+08	24064f03-7c7e-493b-99f2-c926717d28fc	3	878afb54-7c5c-491e-8fa6-66a1405d7c37
7563b8d0-13b1-42d9-91dd-b7a48a97089f	采集			2017-12-12 11:55:07.946+08	2017-12-12 11:55:07.946+08	405df805-9088-45a7-b4b2-763299e0c57b	3	0e078d6f-ab96-4c79-ba40-2b3fb5e96e72
48838bfb-174e-42ac-a6c4-1c694dbf569b	采集			2017-12-12 14:08:56.831+08	2017-12-12 14:08:56.831+08	2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	3	c14df1bd-60ff-48b0-9820-bd146284b57c
9b5c64a1-06b3-48e2-83d2-92d0278e050c	采集			2017-12-12 14:41:03.874+08	2017-12-12 14:41:03.874+08	10018134-99f1-486e-8071-dc652f44d152	3	e1b859b1-b04b-4faa-95a8-8d0b006d392d
e5550e74-9d03-440d-b9a8-0175cec5ed42	采集			2017-12-13 13:09:16.241+08	2017-12-13 13:09:16.241+08	5cd62211-11dd-4deb-83bf-2873ae7dd42f	3	752b624d-000c-4f53-adfb-e6d12b8640af
cd2059de-7aca-4f60-9b28-90d4aec7dfcc	采集			2017-12-13 13:21:56.923+08	2017-12-13 13:21:56.923+08	b475bf8f-00a0-457f-ad96-95b187dba62f	3	752b624d-000c-4f53-adfb-e6d12b8640af
8409a1f6-b5f7-46c7-98e8-e8ed92f8113a	采集			2017-12-13 13:27:21.37+08	2017-12-13 13:27:21.37+08	63b7958b-9b1b-49ca-b01c-62ebe4df6376	3	752b624d-000c-4f53-adfb-e6d12b8640af
d6ba5199-32e3-4c9c-a69c-1317e15f21a6	采集	\N		2017-12-13 13:40:15.832+08	2017-12-13 13:40:15.832+08	41da65aa-dd1b-4a8f-8758-13f624e45dad	3	752b624d-000c-4f53-adfb-e6d12b8640af
03c5dd3d-859b-41e6-89df-ca3000a46e14	采集			2017-12-13 13:46:22.558+08	2017-12-13 13:46:22.558+08	16f7e5ff-fb7a-4aa6-a701-9776f7638689	3	752b624d-000c-4f53-adfb-e6d12b8640af
95683aa7-b094-4883-a2a1-bdabe2c7d59f	采集			2017-12-13 13:59:30.916+08	2017-12-13 13:59:30.916+08	7776a9dc-8e14-417c-a5fe-4b1dd1c869d7	3	f6f994b6-8f83-43f9-bfb0-7118d5368555
846fe925-eaae-47c8-91a4-b1d3d7fc3bc7	采集			2017-12-14 14:22:34.593+08	2017-12-14 14:22:34.593+08	61db6668-b790-47e8-9429-55bfa4f98b90	3	97b6dd76-4b4c-42e7-88a4-52e338aab627
84e943aa-b142-4142-89f4-5db0cc8e5233	采集	\N		2018-01-09 15:01:35.192+08	2018-01-09 15:01:35.192+08	db974c14-3d61-403d-b847-e0523ad53964	3	\N
2b18c0fd-b077-4d22-92b0-c38896c4d150	采集			2018-01-16 10:34:00.724+08	2018-01-16 10:34:00.724+08	addad535-5578-4010-9d74-dbeab2b9e9eb	3	45e683e6-d49b-4b16-af85-607be4509fe5
ed8fd71f-44b5-4e41-bf91-f2e5ee66e8ce	123		23	2018-01-22 11:12:08.472+08	2018-01-22 11:12:08.472+08	eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6	3	55c1f524-d49e-4b21-b960-381f35589cb6
c0392392-9da8-4232-8535-3962a4b88b7a	采集			2018-01-23 14:05:00.652+08	2018-01-23 14:05:00.652+08	3eb1b2e4-ba3a-4329-a821-33a7f5bec873	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
3436c379-cac3-4baf-8a3f-7fa4b1fe6188	采集			2018-01-23 14:46:18.988+08	2018-01-23 14:46:18.988+08	90a2bc12-2214-43ff-9154-9b9212de2c10	3	\N
f1ab939a-33ee-4a01-8373-13c941cbce03	采集			2018-01-23 14:46:19.184+08	2018-01-23 14:46:19.184+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	3	\N
53649022-343c-4129-b626-9dbf8c660e28	采集			2018-01-23 14:46:19.409+08	2018-01-23 14:46:19.409+08	5e7775c1-0766-436e-b701-b1102833b98d	3	\N
4f360434-b54d-41c3-8163-4df050a68350	采集			2018-01-23 14:46:19.615+08	2018-01-23 14:46:19.615+08	099c6283-519f-4946-aa9d-f0059a76b832	3	\N
cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	采集			2018-01-23 14:53:15.174+08	2018-01-23 14:53:15.174+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	3	\N
fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	采集			2018-01-23 14:53:15.383+08	2018-01-23 14:53:15.383+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	3	\N
069cdfbe-2463-40a3-a677-fa3564d06956	采集			2018-01-23 14:53:15.771+08	2018-01-23 14:53:15.771+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	3	\N
1933583a-00cd-4d11-99f5-76e7dbeaa81c	采集			2018-01-23 14:53:15.971+08	2018-01-23 14:53:15.971+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	3	\N
6d7906b4-b1de-4c3c-b100-bcdf039094f2	采集			2019-12-06 11:22:34.034+08	2019-12-06 11:33:26.531+08	d4255121-8115-4412-9778-4e29402a1720	3	b377a3bf-8fe3-4007-b408-eb7b0158f988
9fb57bf4-6e35-4918-ac61-3f04bf81e691	采集			2018-02-28 16:21:12.172+08	2018-02-28 16:21:12.172+08	bcc5cadb-0395-464b-8ead-ac3917b49e30	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33	采集			2018-02-28 16:21:13.121+08	2018-02-28 16:21:13.121+08	8e752366-9256-4bab-a79b-276a89aea484	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
c73c5915-cc27-425f-b6e9-288aa74c6fd4	采集			2018-02-28 16:21:13.692+08	2018-02-28 16:21:13.692+08	87bf38c3-0b08-4bcf-98b4-12060fd9a345	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
479ab844-11f3-43d2-b8da-1b5e32abf466	采集			2018-02-28 16:21:14.325+08	2018-02-28 16:21:14.325+08	167d20c6-d128-4532-9974-d4a55788823e	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
405db392-c820-4892-b209-c01d5f2d0724	采集			2018-03-05 09:35:14.841+08	2018-03-05 09:35:14.841+08	5fc4a5d5-9307-4ab0-9fb1-7f017c432911	3	\N
a831cdfa-52a9-49aa-8f41-2568b3f853de	nengli1	\N	f	2018-03-06 18:29:41.16+08	2018-03-06 18:29:41.16+08	a8add874-7ace-4c3b-a044-8d6da02a9257	2	a5f3b3b0-2db7-446a-8642-c844f6560d52
99a6c9c1-0f57-45bc-a1ff-e98a56faef46	云采集	\N		2018-03-08 20:20:24.432+08	2018-03-08 20:20:24.432+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	3	\N
06dc98b1-f6a1-4494-9519-48f5dce361b4	采集		modbus振弦采集仪	2018-01-05 11:16:01.998+08	2018-03-13 15:11:17.539+08	175e2759-ae38-4ac5-a62c-6ed4877f3863	3	0519be85-6999-49e5-a49d-0a5702bd60f6
146da222-f300-4109-b71f-337ad767c336	采集			2018-03-14 15:53:54.001+08	2018-03-14 15:53:54.001+08	4d3ecec5-32b4-4d9b-aa02-a08275dd10c7	3	\N
5bab107f-be1b-4c0d-a2cf-207aae73d273	采集			2018-03-14 16:17:20.816+08	2018-03-14 16:17:20.816+08	1f6ae927-989f-48b3-9fa4-18518326953b	3	\N
8ceadb1a-8f3b-42df-848d-523f3f16aaf2	采集			2018-03-15 16:51:58.437+08	2018-03-15 16:51:58.437+08	b55b3b15-5db9-4946-a5a9-b0d352de6a24	3	\N
e3742e72-d9c4-44b2-86aa-e90a5fa8255a	数据			2018-03-20 09:46:35.554+08	2018-03-20 09:46:35.554+08	526c42ea-d9a9-48d1-9862-b3118a7ef211	3	\N
8e3f282e-7428-497b-baa8-0ca8fd248e36	采集2	\N		2018-03-26 11:24:13.14+08	2018-03-26 11:24:13.14+08	1bda935e-56de-4365-b60e-f02d19299795	3	\N
af8660db-af7f-4f8a-ad12-70bb18f62638	采集	\N		2018-03-15 17:44:26.727+08	2018-03-20 16:10:22.325+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	3	80c16a27-2bdf-48f6-ab20-690c3926ec7a
56b4000a-2a4d-454a-9134-7499ca4e859b	采集			2018-03-28 14:52:06.914+08	2018-03-29 15:23:08.938+08	bbf47be7-1d85-4e1b-b356-70be269a0d32	3	f2ec840a-2e0c-4178-91e8-8b5b44009561
cc7aaee4-9939-40cc-b584-234221061c01	采集2			2018-02-05 11:21:34.554+08	2018-06-29 10:32:43.649+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	3	\N
95211a4e-66c1-46be-b7cd-9edc8ac63621	采集2	\N		2018-03-23 16:32:54.901+08	2018-03-23 16:36:36.622+08	2e2456a6-9738-456c-abf1-94d5ebad124a	3	\N
4ad74d57-806a-4fc6-82ec-37d782d99cab	采集2	\N		2018-03-23 17:02:48.947+08	2018-03-23 17:02:48.947+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	3	\N
8bc60164-fa52-4d68-a3b0-2c63af3113c0	采集2	\N		2018-03-26 10:54:41.213+08	2018-03-26 11:21:00.258+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	3	\N
921508aa-21fc-41c6-b609-b6df5206ea7b	采集			2018-03-26 11:24:13.131+08	2018-03-26 11:24:13.131+08	1bda935e-56de-4365-b60e-f02d19299795	3	\N
afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	云采集	\N		2018-03-26 11:46:38.22+08	2018-03-26 11:46:38.22+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	3	\N
15598365-4401-4d31-9ebe-d0e46f6d4ce5	云采集	\N		2018-03-26 15:08:56.86+08	2018-03-26 15:08:56.86+08	099c6283-519f-4946-aa9d-f0059a76b832	3	\N
79fa3616-07da-47da-a26c-0faac333d89d	云采集	\N		2018-03-26 15:26:40.937+08	2018-03-26 15:26:40.937+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	3	\N
8e638b0a-bbf4-4856-add9-c4db9b55b032	云采集	\N		2018-03-26 15:48:31.742+08	2018-03-26 15:48:31.742+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	3	\N
9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	云采集	\N		2018-03-26 16:18:00.043+08	2018-03-26 16:18:00.043+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	3	\N
606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	云采集	\N		2018-03-26 17:00:46.973+08	2018-03-26 17:00:46.973+08	27930598-2f6e-4932-a816-9685f17969b5	3	\N
fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a	云采集	\N		2018-03-27 11:23:46.169+08	2018-03-27 11:23:46.169+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	3	\N
79cc1497-99b7-4eb4-bbb5-b69192903d18	云采集	\N		2018-03-27 11:28:33.886+08	2018-03-27 11:28:33.886+08	9110f259-e269-446d-afa3-798069f4534d	3	\N
cd1e30cf-8d0c-457d-b7d4-a773af3c17f9	采集			2018-03-09 16:27:20.884+08	2018-03-28 10:56:04.95+08	22fee831-1acb-498b-a4f4-c73ca9e48eac	3	c4a9f5a0-5436-4b62-854f-332cfde5559f
a3aeb56c-762d-4329-8fc8-0309335e489e	采集			2018-03-02 17:16:41.283+08	2018-03-28 16:37:25.86+08	a812ef4d-0c77-49e6-bad2-c74c79c50e49	3	eb7d51b4-3089-4b47-a4df-3d772ee3dbf2
c4424e56-9f35-4bdd-b7c1-66836e3ba1cb	数据			2018-04-02 15:54:14.344+08	2018-04-02 15:54:14.344+08	1489127c-8f48-448b-a86e-1604f08894ce	3	\N
61625131-a37b-4478-a0dc-f7c55d54f34e	采集			2018-04-03 11:52:10.943+08	2018-04-03 11:52:10.943+08	8fb33fdb-3378-44a4-8e48-ec79ff29a37e	3	cba2303c-cdd4-477f-8bff-49ff734cfcd6
a4e76a90-da0e-45f5-a2bf-540d04090e35	采集	\N	主动上传	2018-04-02 17:21:29.453+08	2018-04-02 17:22:17.511+08	8b83567e-d874-40f2-a7e4-f78d6cb5415c	3	9e7ff46c-0808-4b46-878d-0614995edc11
855e5472-f1f9-4119-818a-337b5f302028	采集			2018-04-03 11:53:08.694+08	2018-04-03 11:53:08.694+08	00b58795-1a49-4171-b60f-a0e32a25f6f6	3	30362f9f-8691-4ba1-8338-583ea6d80c08
c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5	采集2	\N		2018-04-08 14:06:25.441+08	2018-04-08 14:06:25.441+08	624610fd-38ca-4e72-92c8-0492eb66412a	3	\N
8b5d7571-fbed-4a64-8ae5-158979e259d4	采集			2018-04-08 14:06:25.457+08	2018-04-08 14:06:25.457+08	624610fd-38ca-4e72-92c8-0492eb66412a	3	\N
5fb83056-bcb5-4ed3-8b11-5d2233522941	采集			2019-12-06 15:16:13.061+08	2019-12-06 15:16:13.061+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	3	f98f678a-503a-40a9-aba3-37c6033901dd
9f1dab20-8943-4d5f-9c48-e25d55a8a3d3	采集			2017-12-14 16:49:47.951+08	2017-12-14 16:49:47.951+08	af1cd7e8-52e1-4411-9c9a-20bc82a2786d	3	d3970047-c379-4882-af09-b7ecea4bd65a
ec181902-8df8-4d46-9c16-a1deefd286e5	采集			2017-12-14 16:55:58.28+08	2017-12-14 16:55:58.28+08	a30d283e-1af2-4531-ab6b-be1186799eea	3	d3970047-c379-4882-af09-b7ecea4bd65a
63010e3e-4783-485c-a5dc-4f26a1153ece	采集			2017-12-18 10:57:40.215+08	2017-12-18 10:57:40.215+08	4d48086d-804a-426d-9867-0e87efdc74fe	3	e548ef12-9b49-480e-a000-57c0391c5bd0
235950eb-8bd2-40b5-945f-6ba95c40892d	采集			2017-12-18 17:23:33.733+08	2017-12-18 17:23:33.733+08	701ab719-e85b-4428-ad59-1b7adff31c56	3	8757fbc2-2ae6-42b5-b888-0f5ce8edb8cc
53e4c42b-3996-45c2-9631-73b200cb840c	采集			2017-12-19 14:21:59.018+08	2017-12-19 14:21:59.018+08	0eb7e920-0359-4b8b-b604-14bc1136e8f5	3	61394f4f-a90e-4c38-8d8b-f0acdee2975c
b6bff26c-a89e-4fd7-85db-adb7ff80af6c	采集			2017-12-19 17:58:52.284+08	2018-01-09 11:03:05.674+08	dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	3	\N
851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	采集		26要素	2017-12-20 10:35:00.78+08	2017-12-20 10:35:00.78+08	1ac45c30-affc-479b-8ad6-3d63d1fa33f3	3	d7b4876b-9c7a-4446-a47a-0d99d98b117b
b55ffd52-9693-40dd-a732-e5271f0d5fb5	采集			2017-12-20 13:51:02.581+08	2017-12-20 13:51:02.581+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
ab03ba4c-6102-471a-a570-87b77683dcc3	采集			2017-12-20 13:59:41.261+08	2017-12-20 13:59:41.261+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
60ae0347-0874-4d6c-b39a-e0bc3fd616c9	采集			2017-12-20 14:03:22.688+08	2017-12-20 14:03:22.688+08	676795c3-0d71-441d-aa0e-62b82dff8193	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
f0e35d78-efe9-4656-ae6a-5116d547772f	采集			2017-12-20 14:30:07.21+08	2017-12-20 14:30:07.21+08	14f67669-6cec-42c0-a7ca-4b60950ec7b5	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0	采集			2017-12-20 15:25:01.23+08	2017-12-20 15:25:01.23+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5	采集			2017-12-20 15:39:19.353+08	2017-12-20 15:39:19.353+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
9476a386-f250-4250-a852-90fedab8ea49	collection			2017-12-20 15:39:26.998+08	2017-12-20 15:39:26.998+08	cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	3	9f43db1a-9665-4422-83dc-f17f9918a140
b9dd081e-69bc-46c3-a372-d46269234b57	采集			2017-12-20 15:44:31.426+08	2017-12-20 15:44:31.426+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
1adc0b25-92ae-4d60-9c59-b001fc8b8120	采集			2017-12-20 15:48:48.781+08	2017-12-20 15:48:48.781+08	466241f9-ceea-4552-b9c6-114413124018	3	9daba2de-e5bd-4b35-a63c-364ac8b366fa
488ca4a1-e5d4-4905-ac99-a63bf4b4e98c	采集	\N		2017-12-19 17:52:18.773+08	2018-01-09 11:03:32.971+08	235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	3	\N
ef29b89e-1964-40d7-b8c8-489d9562ce9d	采集			2017-12-21 11:15:16.276+08	2017-12-21 11:15:16.276+08	7c1b8df9-4088-4cc7-b07b-3299d827d7d0	3	08df99de-ea9b-409c-9f5c-fda7f51b2ef9
b17563d4-fe75-4b40-9fb8-97fedae3abce	采集			2017-12-21 16:37:36.685+08	2017-12-21 16:37:36.685+08	6af0f3be-6cb5-43c8-a588-490e10fdf4b7	3	36fe6fad-733b-496b-bdc7-be6c9b17f119
986f4655-aea5-4e28-8507-f17ce74073cb	采集			2018-01-23 14:10:45.51+08	2018-01-23 14:10:45.51+08	931fef11-654a-4f36-bf37-dbc168c46e84	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
d3a626a7-97a1-434d-a4ca-4a939af207b9	cpuRate		cpu使用率	2018-01-09 17:00:52.108+08	2018-01-09 17:00:52.108+08	7d457a8b-5537-4186-bd68-df0c5868ef7e	3	412d7ece-a7a5-4a1a-a9b7-4fb9d163a37c
79df301c-8707-4e42-8546-2b6a77f017f8	采集			2018-01-16 11:50:37.234+08	2018-01-16 11:50:37.234+08	0d123bba-3d2e-4252-a27e-af567da8aca1	3	45e683e6-d49b-4b16-af85-607be4509fe5
0100a56f-6c0b-48ff-9f7d-391a4eaa1bd8	采集			2018-03-13 17:32:48.261+08	2018-03-27 16:50:40.534+08	e60e191c-767a-479d-a33e-589622634060	3	4c09e571-5bca-4caa-9ee5-379594a29059
a84db97e-114a-4cbe-8e97-a18f398857a7	采集			2018-01-17 17:52:43.806+08	2018-01-17 17:52:43.806+08	4696ff30-0685-4f87-bc16-25d640a014a6	3	\N
3cd111a3-296e-4cfe-af80-2d206f3a2b36	采集			2020-12-31 14:26:55.471+08	2020-12-31 14:26:55.471+08	406adc2f-6e40-43fc-832a-d6982677d5e1	3	\N
2364818e-4cde-4614-a15d-7a127ceabf7d	采集	\N		2021-01-29 11:01:43.632+08	2021-01-29 11:01:43.632+08	8f03b15b-fbb7-4bca-ae92-2230abf071b7	3	\N
02eb3150-86c4-4e4f-933e-9adadf378910	采集			2017-12-28 20:13:20.341+08	2017-12-28 20:13:20.341+08	aa64719f-ac6f-463c-83c5-dcdbd25be81e	3	\N
d9456b27-5a08-40b3-bac7-967d99928997	上报	\N		2021-02-05 15:18:26.078+08	2021-02-05 15:18:26.078+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	3	\N
d6b914e8-a4e6-443c-a9f4-7fb5eb5148be	采集	\N		2017-12-29 17:40:41.154+08	2017-12-29 17:40:41.154+08	e58ee78a-e499-483c-acc8-a42683d62149	3	\N
9c7d9db3-d6b5-46e5-a01e-af70a296bc8d	采集			2018-01-02 17:33:10.087+08	2018-01-02 17:33:10.087+08	608c11f3-91d9-4d92-9459-a4f7eb20bf1d	3	\N
10deb250-d676-4883-bfb1-2f557ec84677	采集			2018-01-23 14:57:48.75+08	2018-01-23 14:57:48.75+08	37c046eb-9a0e-49b0-95fb-f0128338f381	3	\N
99112554-2cb9-43fc-adef-6068fdb897a7	上报	\N		2021-02-05 15:20:48.048+08	2021-02-05 15:20:48.048+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	3	\N
8b0f2cbe-d8a9-434d-a5ce-f32b591a3956	控制			2018-01-03 13:53:36.246+08	2018-01-03 13:53:36.246+08	46ad9444-1665-48d6-bb9a-37cee37d1604	2	\N
6d135882-0f59-4f07-9508-c1eac08ab6cc	能力			2018-01-03 23:08:28.587+08	2018-01-03 23:08:28.587+08	34eeec21-d4e0-4716-a88e-42267e349980	2	f99629fd-ce63-49a7-ba9b-f554f569bb4b
26034a4c-81b7-4470-a5e4-65494772f35b	采集			2018-01-04 11:19:16.726+08	2018-01-04 11:19:16.726+08	10f69514-4a4b-4ecd-a318-f8bf0c81a965	3	\N
161be263-2daf-4d9c-8a3e-5a5dfa458cf2	采集			2018-01-04 11:48:49.72+08	2018-01-04 11:48:49.72+08	d8860bee-374c-497a-a33a-258af59e3690	3	\N
f4542b67-c857-40a2-8aa7-11850aace3bd	采集			2018-01-04 11:56:59.881+08	2018-01-04 11:56:59.881+08	6a8343f7-8c07-4851-8924-f8d4f1f5ab78	3	36938573-512e-46a3-a00f-1761d76ed4b0
58ccd139-9573-44ce-84f3-b043e0841c7a	采集			2018-01-04 12:11:30.183+08	2018-01-04 12:11:30.183+08	6c0d843c-169e-49b8-8dde-188699cc3077	3	\N
3825f4a5-cc05-4d5a-860a-c277ff0c1cc6	能力		11	2018-01-26 09:39:05.315+08	2018-01-26 09:39:05.315+08	7697d048-c21e-4b28-8c88-a59de01bae96	3	317a91ad-ae05-4ce3-9b76-916a9e3103b6
5c7af394-fc34-459a-bf95-62b91eafed29	test			2018-02-06 16:34:19.403+08	2018-02-06 16:34:19.403+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	3	\N
d90c8b29-4933-4af7-9ffc-62f63cee473d	test2	\N	bbbb	2018-02-06 16:34:50.795+08	2018-02-06 16:34:50.795+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	3	\N
13d3b4ab-266d-479b-874d-d00ba71b7d6c	negl			2018-02-06 17:44:49.267+08	2018-02-06 17:44:49.267+08	edcdb4a2-9f82-46d7-bba1-3ebb4f69483e	3	\N
10fc859f-7d37-4093-99b7-b2acfdbe2c6f	控制			2018-02-09 14:00:32.969+08	2018-02-09 14:00:32.969+08	ee8205dc-c9b0-4c29-b85f-9a54216ab198	2	878d994c-6a4d-4bf2-81f2-d9ab291633d6
a31f033d-a4ca-4dd4-8e20-5180f376df79	采集			2018-02-11 16:58:21.74+08	2018-02-11 16:58:21.74+08	c98659b5-30ec-471f-9654-41f5f8df47b0	3	\N
cfd05991-7dcc-45cc-a7c3-afeef665f4c8	采集			2018-03-05 10:59:51.145+08	2018-03-05 10:59:51.145+08	f1fc4840-f3c9-4752-a703-b0bef637f3ee	3	\N
c6ff7e02-05d5-45ee-9837-f61976b9d230	采集			2018-03-07 17:15:48.181+08	2018-03-07 17:15:48.181+08	68cb03f4-a381-4eaa-9068-d375ae3500e8	3	\N
5a1c9521-1fea-46f6-82bd-3073923b164f	采集			2018-01-03 16:19:19.149+08	2018-03-27 09:46:31.264+08	4d523084-bf91-421f-bafc-f278a63c5541	3	15f78bc6-396c-4b7b-ba7c-2fcc9e9a924f
31df808d-16cc-43b3-81c4-0443d9ae6f8e	aaa			2018-01-09 21:37:46.44+08	2018-01-09 21:37:46.44+08	d08c2f42-3528-4b5f-9f34-04deac7051c1	2	\N
2be35120-6755-4238-90ea-0e20e13d079b	44	\N		2018-01-28 12:35:30.23+08	2018-01-28 12:35:30.23+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	2	\N
91bd35f0-7a4d-468f-b8f2-4023456af5ba	采集			2018-01-16 16:49:43.489+08	2018-01-17 11:53:07.269+08	2dfa1f51-0e5a-4e11-a86d-f8487d602ebf	3	1d20568b-1259-4aac-8a65-4afd295e2e1a
cb86448f-61c6-408f-9e5f-06ba94979fdd	3			2018-01-17 13:45:21.839+08	2018-01-17 13:45:21.839+08	0df6f7cc-b408-4936-8fee-d5344c2d8ae9	2	\N
bc03541b-fb13-44ff-8cc4-9419e81554f3	采集			2018-01-23 14:49:59.713+08	2018-01-23 14:49:59.713+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	3	\N
787be20b-1887-4708-a1db-c0d581a322eb	采集			2018-01-23 15:06:34.921+08	2018-01-23 15:06:34.921+08	eee64353-8241-4a69-a2ed-5e42bbf4450c	3	\N
9f562e54-5c03-4b59-89cf-d12739821be5	采集			2018-01-23 17:19:51.369+08	2018-01-23 17:19:51.369+08	ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3	3	b5bfba1d-25c8-4e8d-9a0e-a4d9be2dcd1e
a2e1b758-5210-49f0-986e-78305b6cef20	采集			2018-01-04 13:43:27.01+08	2018-01-04 13:43:27.01+08	e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	3	\N
cd26103f-0538-43bd-9bbd-a8b3b84e10ff	采集			2018-01-04 13:57:55.236+08	2018-01-04 13:57:55.236+08	660c0ba2-d714-4ad3-8166-a1fa25a9d7d1	3	\N
c08bb21f-6cdb-46c1-a8df-3ea9d92279ba	采集	\N		2018-01-04 15:33:35.053+08	2018-01-04 15:33:35.053+08	fb1119c8-c430-4066-9f02-60a558d92a68	3	\N
9c9bf6ea-e390-4af6-9eb7-64fdd8325887	采集			2018-01-05 10:51:34.751+08	2018-01-05 10:51:34.751+08	d77b7e20-7877-47dc-aef4-37a663bac660	3	\N
5e270a72-9da6-4029-98ae-eb0326ad0d97	采集			2017-11-17 09:45:45.976+08	2018-02-11 16:59:13.23+08	d87be87a-12ba-4e65-97ba-816bcb3e2e62	3	\N
2766d297-6127-449f-b73f-089b38e01267	采集			2018-01-05 11:06:57.94+08	2018-01-05 11:06:57.94+08	ba349741-3d03-49c6-a2cf-9e2156fd36c4	3	\N
57f3c9e5-43c5-42ce-92e4-a67bf6f28452	采集			2018-01-05 11:06:58.398+08	2018-01-05 11:06:58.398+08	30da8546-87f0-4a5c-bd4f-f9919c954c82	3	\N
2f00a22f-2cdc-46e5-94b8-a4c599c0618d	采集			2018-01-05 11:06:58.805+08	2018-01-05 11:06:58.805+08	17c35362-c638-46de-bea3-840893daf864	3	\N
9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735	采集			2018-01-05 11:07:00.025+08	2018-01-05 11:07:00.025+08	d14c6b02-4298-4713-b970-eba0aafee88b	3	\N
11c69c81-4c8e-49c2-bde6-92d68c3d8092	采集			2018-01-05 11:07:00.144+08	2018-01-05 11:07:00.144+08	feb1fe0d-208d-41cf-9533-596f78fa835c	3	\N
a5f188ab-9f47-44f3-a454-2b85f0aaa7ce	采集			2018-01-05 11:07:00.271+08	2018-01-05 11:07:00.271+08	35d1f34b-ccac-4110-9bb6-7e0a3327ef18	3	\N
90e33926-b804-46d8-9c62-0fad9b87edab	采集			2018-01-05 11:07:01.128+08	2018-01-05 11:07:01.128+08	0530f690-1f3c-430e-97c7-6dc82f96fd47	3	\N
0d251d94-b1b6-4772-8066-2ae317277574	采集			2018-03-13 23:09:59.907+08	2018-03-13 23:09:59.907+08	384f80e3-ad51-400e-b0aa-8a3885961cec	3	\N
9943507b-e6a7-4ed0-a44a-d71689542076	采集			2018-03-05 10:52:42.564+08	2018-03-05 10:52:42.564+08	84747787-27a7-463d-bd03-9ee55d84fea0	3	\N
5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f	采集			2018-01-05 11:07:03.192+08	2018-01-05 11:07:03.192+08	27f99320-b0dc-4b93-bc24-f5ccf9337356	3	\N
0c7ac7cb-305a-4871-9335-1e95d569358c	采集			2018-01-05 11:07:03.696+08	2018-01-05 11:07:03.696+08	ecfacbbe-037c-42cb-89ce-68a2e6170758	3	\N
571ad024-5982-4fc7-b01e-684b112a8092	采集			2018-01-05 11:07:04.199+08	2018-01-05 11:07:04.199+08	b750e865-af38-40e9-a478-16fefb4cb618	3	\N
7ca00003-ea25-4456-acad-32705e36bea1	功能1	\N		2018-03-07 14:02:37.522+08	2018-03-07 14:02:37.522+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	3	b9e32a9e-36d5-4b15-baca-567f42a0f45b
6233944d-f215-45f0-90e6-433fb8fb0735	ww	\N		2018-03-07 14:46:11.825+08	2018-03-07 14:46:11.825+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	3	b9e32a9e-36d5-4b15-baca-567f42a0f45b
f331ae21-9607-401d-b8c4-9d17e40eba9a	采集			2018-01-05 11:50:22.3+08	2018-01-05 11:50:22.3+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	3	\N
45469a20-748c-4740-9741-4c971a209601	采集			2018-01-05 11:50:25.116+08	2018-01-05 11:50:25.116+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	3	\N
a0f44ec1-49da-4ca4-83d2-323cdeeb2864	采集			2018-03-07 17:18:03.908+08	2018-03-07 17:18:03.908+08	3a8c62b6-14dc-497e-90e8-68c2160e7d08	3	\N
4412085f-1890-4b38-b715-f72085af2b7b	采集			2018-01-05 12:01:35.798+08	2018-01-05 12:01:35.798+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	3	\N
da94e805-9621-4290-b239-5ddc2e0504a7	采集			2018-01-05 14:02:09.795+08	2018-01-05 14:02:09.795+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	3	\N
77becc38-82f7-4612-83e2-10e0ebf5e6e3	采集			2018-01-05 14:02:10.791+08	2018-01-05 14:02:10.791+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	3	\N
08fbb708-7333-4f0f-b4a6-1b185f02fd34	采集			2018-01-05 14:46:16.307+08	2018-01-05 14:46:16.307+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	3	\N
5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	采集			2018-01-05 14:50:21.838+08	2018-01-05 14:50:21.838+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	3	\N
83056ece-02bc-466a-a4c2-4b916ea6e41a	采集	\N		2018-03-09 15:03:59.328+08	2018-03-09 15:18:22.407+08	21c691a7-7a5a-4262-a3fe-cedb0c37e5fe	3	\N
9c34b3cc-56f3-4463-b264-888d55002e8b	采集			2018-01-05 14:53:22.522+08	2018-01-05 14:53:22.522+08	607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e	3	\N
cc4c86bd-de99-4664-97f7-6cc8f14d9163	采集			2018-01-05 14:53:24.809+08	2018-01-05 14:53:24.809+08	49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae	3	\N
e7092d0b-709a-414e-a8ca-a1e21ef6e36c	采集			2018-01-05 14:53:53.034+08	2018-01-05 14:53:53.034+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	3	\N
7cfe14d1-5568-4d3a-abf6-b24791db9643	采集			2018-01-05 14:57:25.909+08	2018-01-05 14:57:25.909+08	e6a3a1f5-2a8f-48a0-9758-407065bae1e9	3	\N
19db0824-d40d-49ce-a3e8-b63510dcbb7a	采集	\N		2018-03-14 08:24:49.339+08	2018-03-14 08:24:49.339+08	b3da87da-9dc0-443c-960e-ccea1c35f87e	3	\N
4f08e245-f581-4570-8175-92b665bdd6c8	采集			2018-01-05 15:11:19.831+08	2018-01-05 15:11:19.831+08	c50b3ecc-a416-4991-b64f-f2c79d8d1848	3	\N
63bfc488-1cc3-4d31-a86c-0b1d49baddc6	采集			2018-01-05 15:11:20.71+08	2018-01-05 15:11:20.71+08	abfa6634-cca0-4696-b67e-1c2eb2e57c9b	3	\N
5714767a-3b97-4a8c-a5f6-abd8091e8662	采集			2018-01-05 15:18:31.291+08	2018-01-05 15:18:31.291+08	73a7b800-25d7-41ad-872d-96cc4f9430de	3	\N
39e594af-f88b-4f81-96c2-2d7a7bc27ad7	采集			2018-01-05 11:47:57.13+08	2018-01-05 15:30:02.677+08	2574b00e-2491-471c-925a-5b713afa9561	3	89d5e195-c719-48a0-8e7b-9807f8815e03
fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	采集			2018-01-05 15:33:22.334+08	2018-01-05 15:33:22.334+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	3	\N
24ea4e76-d09c-44d9-8d18-7c634e2b1b22	采集			2018-01-05 15:36:58.425+08	2018-01-05 15:36:58.425+08	d2a5375c-0240-4435-9b8f-a62372fafaca	3	\N
1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	采集			2018-01-05 15:36:59.037+08	2018-01-05 15:36:59.037+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	3	\N
6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	采集			2018-01-05 15:36:59.849+08	2018-01-05 15:36:59.849+08	780ffe7d-7369-4d2f-9184-32790466f2ba	3	\N
59674186-4b3a-4864-845c-81ba695df093	采集			2017-11-01 15:38:54.182+08	2018-01-08 14:55:11.524+08	e5b27a73-2d4c-4b53-8bcd-86583097a730	3	09cac49f-47cf-46e1-989b-87ca089ba58b
d9aa001d-6bbe-436c-89ac-c361f78f38ea	采集	\N		2018-01-05 15:12:24.79+08	2018-01-08 15:14:24.766+08	e2d93988-c0e0-4581-b406-e43e455f7864	3	2cf8a814-f993-4420-8aa3-7fa891995667
12ffe39f-e941-4496-a0af-ae5d4c1e0d29	采集	\N		2018-01-05 15:14:28.369+08	2018-01-08 16:49:09.739+08	217607ad-e8e6-4940-91ff-dc4d831cccbc	3	2a2d8e77-444a-4911-9f33-9de3b1dff1c8
ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c	采集			2018-01-05 17:40:36.05+08	2018-01-10 11:08:23.281+08	1f00228f-9138-4060-9b9b-1ae22f803af7	3	bf768303-c930-4c11-8397-4676f65152f9
bc46fbac-32c0-44aa-829d-5852b69db566	采集		主动上传	2019-12-09 10:11:18.894+08	2019-12-09 10:11:44.297+08	5e2812d0-7cbc-4f79-9723-87bec81bb0ea	3	7231d629-dac5-471d-a674-005608c54feb
6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82	采集			2019-12-09 10:15:11.892+08	2019-12-09 10:15:11.892+08	15eadcdc-9a05-4580-946b-2b722d95ba5b	3	\N
05a8211d-6e5e-4a0a-98d2-f84900bba1a5	上报	\N		2021-02-09 14:17:17.674+08	2021-02-09 14:17:17.674+08	b7dd781d-dba7-4228-b49f-8aee75e42625	3	\N
5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb	上报	\N		2021-02-09 17:31:07.323+08	2021-02-09 17:31:07.323+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	3	\N
5b2e7aad-4a66-4797-8897-7eefc972e1f9	上报	\N		2021-02-20 15:02:02.875+08	2021-02-20 15:02:02.875+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	3	\N
63b1d744-08d4-4190-9ff1-437220a51be4	采集			2018-01-05 16:48:16.714+08	2018-03-28 16:34:55.45+08	1e0d3ad9-26a9-427e-be48-685ffe3e84b7	3	d6f1dfe7-d20a-48bf-ac33-419f33048c43
ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea	采集			2018-01-05 16:18:59.241+08	2018-01-05 16:18:59.241+08	9abfc35c-6cff-489a-8257-b868954725f4	3	\N
3d7d32da-438a-4e22-8879-eb3b7b2f98d2	采集			2021-02-22 09:15:10.344+08	2021-02-23 11:01:05.855+08	c892bb1b-57aa-4b52-b1eb-79172e95a8fb	3	118e4efb-d115-4765-b805-129460d51153
487f64fc-b23f-4c0e-ac96-c610a0ff7a08	采集			2021-02-24 11:11:07.57+08	2021-02-24 14:45:18.799+08	5b625df3-f714-4971-94a8-625e9c8812fc	3	b6e60de9-b636-4381-896d-151d57a4b604
e9332808-1b40-44af-9aeb-7c21643b1e80	采集			2021-02-24 09:24:53.459+08	2021-02-24 17:32:39.433+08	f8803e24-c7c9-4089-8f06-5a00433131b1	3	\N
74dd6bb1-b532-407c-b444-e640a9ee293e	采集			2021-02-24 17:38:25.39+08	2021-02-24 17:38:25.39+08	18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd	3	31ae2751-5181-4ccf-9763-d2ddfd55726d
7721177a-8610-4836-82c5-d08d05a6be97	采集			2018-01-05 16:26:30.086+08	2018-01-05 16:26:30.086+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	3	\N
824dfcd1-4745-4087-aa8e-237d72715c4d	采集			2018-01-05 16:27:59.072+08	2018-01-05 16:27:59.072+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	3	7c734114-6fa7-41a5-8f0c-ce0940aded18
26976155-0f82-42c9-962d-6d8f206f40d1	采集	\N		2018-01-05 16:29:05.829+08	2018-01-05 16:29:05.829+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	3	6961f5ca-3d77-4944-921f-d4bf6d757bce
2fa52a8c-6ff8-4131-b74d-761173132a03	采集			2018-01-05 16:29:20.581+08	2018-01-05 16:29:20.581+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	3	e24c947d-eeba-4895-bad5-f1a03b48bfc7
e087d664-23b6-4a21-b166-ac37688c0ec0	采集			2018-01-05 16:34:08.797+08	2018-01-05 16:34:08.797+08	5eb050b5-8b57-4528-adce-b3633e613b6c	3	\N
e82e8948-89ce-4dd5-89dd-1a3d319d351d	采集			2018-01-05 16:34:09.771+08	2018-01-05 16:34:09.771+08	7802bcc3-5fdb-441d-a57a-a89ca2ec158b	3	\N
7be90de6-78ea-44a4-8896-d18f9b9ab89a	采集			2018-01-05 16:50:29.993+08	2018-01-05 16:50:29.993+08	d55af283-4d11-4eb7-8099-890d98bfcc0c	3	\N
b6166ded-aed1-4e30-a2e8-504e9e98b79e	采集		modbus振弦采集仪	2018-01-05 16:27:38.11+08	2018-06-15 09:49:12.94+08	b0a93683-5c88-4f1d-81de-5e41fed44566	3	3ba4748d-4a2e-4b5a-84ff-3e36e397671d
c66f2638-5449-4aad-b566-ffff92086b82	采集			2018-01-05 17:57:19.735+08	2018-01-05 17:57:19.735+08	0cbe0018-ac32-4dfd-ba20-7c6e9658a553	3	\N
2578ea6c-aef6-4458-b889-dc7a102143af	采集			2018-01-05 18:09:59.827+08	2018-01-05 18:09:59.827+08	9e56c900-b85f-4abd-b53f-3162016875ad	3	\N
07f54ea0-7637-4b93-ad91-d7a0987f6a1b	能力1			2018-01-05 18:21:38.323+08	2018-01-05 18:21:38.323+08	42b1e83a-cc6f-4051-8187-75dab10af0b1	3	4e9edf2e-6c74-4979-91dd-65c1c69ed8f2
8b4d52b7-47ef-4940-9b4e-7353a2a62765	采集			2018-01-08 08:03:31.847+08	2018-01-08 08:03:31.847+08	684a2261-481c-4504-9f4b-665baf97aae6	3	\N
e05b776c-d411-49c1-9775-9c02bf5dd41f	采集	\N		2018-01-05 16:28:13.401+08	2018-06-25 11:14:38.554+08	d32eacce-7db0-4c15-b17c-f1d870389c14	3	09903e18-4a03-454d-a5fe-c91275a5400f
d30c1deb-b88d-4111-a4df-6810595e0a63	采集cpu使用率		采集cpu使用率	2018-01-08 09:46:41.147+08	2018-01-08 09:46:41.147+08	078b521f-572a-48bb-b327-09f918ef1e92	3	fe8171d5-8793-470f-a5b3-83825b6fa00f
31a6e729-2f1b-4d8a-8f13-399b327f0d70	采集内存使用率		采集内存使用率	2018-01-08 09:46:41.161+08	2018-01-08 09:46:41.161+08	078b521f-572a-48bb-b327-09f918ef1e92	3	fe8171d5-8793-470f-a5b3-83825b6fa00f
e29ac2dd-147b-403e-a9a8-6737b7799100	采集			2018-01-08 10:24:01.157+08	2018-01-08 10:24:01.157+08	e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
51734448-f0f6-4268-8191-cd093e9e6e60	采集			2018-01-08 10:24:02.007+08	2018-01-08 10:24:02.007+08	4253e350-b64f-4b81-b19b-bcd45c6181ad	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
7b98954d-1ba2-4349-9f4b-26d35ab67107	采集			2018-01-08 10:24:02.581+08	2018-01-08 10:24:02.581+08	0eab3179-48cc-4e55-8ec9-b7516415aa75	3	7a9b4886-a218-4e10-b299-5a6a13496bbf
eb737450-437c-4c7c-9a72-f54364c468a8	采集	\N		2018-01-08 10:43:07.562+08	2018-01-08 11:02:08.927+08	b1c85f0b-c610-4243-83a4-3a1e87b411ad	3	\N
d0696649-4f35-48e3-b1da-79384789f28b	采集	\N		2018-01-08 11:06:18.393+08	2018-01-08 11:06:56.933+08	962c0a4a-535e-4f86-a25c-f38e3aa6f144	3	\N
09032111-4073-461a-82b6-1c193ef88077	采集	\N		2018-01-08 08:30:41.935+08	2018-01-08 11:12:03.006+08	44c42c98-a486-411a-8813-c6ba48aab00c	3	\N
cac190e9-a228-4032-afbc-2f3bf990cc82	采集	\N		2018-01-08 08:30:41.368+08	2018-01-08 11:12:13.358+08	f90de97b-b6e8-417a-b628-7b8e4bb9e335	3	\N
c20df626-7eb9-47e5-8d36-88233fff0015	采集	\N		2018-01-08 08:30:40.835+08	2018-01-08 11:12:27.177+08	9bdf8d5c-e571-4dd4-9614-0099745b0a73	3	\N
2e57f353-4b30-441f-a69e-f9e7e639e6a7	采集	\N		2018-01-08 08:30:40.253+08	2018-01-08 11:12:35.76+08	5c18688a-731b-40d0-b4dd-4ba002026bb3	3	\N
ab8b7681-8ef7-4101-9a8a-5bee37ee7510	采集	\N		2018-01-08 08:30:39.675+08	2018-01-08 11:12:44.989+08	3c8c9002-2d60-43f0-9a2c-52daa53cab54	3	\N
f2e47767-7959-4aeb-bfe0-0c07202c906c	采集	\N		2018-01-08 08:30:38.763+08	2018-01-08 11:12:56.495+08	8e812d09-7b95-4c07-ad74-d4c66104e7a7	3	\N
af9a44db-ee90-4372-87a9-b050e87791bc	采集	\N		2018-01-08 08:30:38.156+08	2018-01-08 11:13:13.219+08	e3713c95-6aa3-4a2e-ad89-579a16cb1a03	3	\N
743c44f5-480c-4c97-80ef-a03ba282ed49	采集	\N		2018-01-08 08:17:08.57+08	2018-01-08 11:13:26.732+08	223ac440-c7b0-4005-8144-f33ce926d9bf	3	\N
bbcb8570-b0c2-4fb4-ac75-c28c9bf38503	采集	\N		2018-01-08 11:40:11.76+08	2018-01-08 11:40:11.76+08	f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	3	\N
0a8e8043-1c0a-48af-b8fd-68658e1b1b61	采集	\N		2018-01-08 11:44:22.158+08	2018-01-08 11:44:22.158+08	92d06569-3e06-4ceb-91e5-d28589632145	3	\N
06fcfe9a-4b1a-4db0-897b-05746cda4814	能力1			2018-01-08 12:02:17.339+08	2018-01-08 12:02:17.339+08	b1b251a9-2555-415d-996f-88df44f4df3c	3	a5f3b3b0-2db7-446a-8642-c844f6560d52
0c0a3e16-95cf-42da-8d6c-09d28a68415d	测试能力01		测试能力01	2018-01-08 13:36:45.755+08	2018-01-08 13:36:45.755+08	a8add874-7ace-4c3b-a044-8d6da02a9257	3	fe8171d5-8793-470f-a5b3-83825b6fa00f
28cd8b3b-ce84-4ece-b281-9c46bbac045c	测试能力02		测试能力02	2018-01-08 13:36:45.772+08	2018-01-08 13:36:45.772+08	a8add874-7ace-4c3b-a044-8d6da02a9257	2	a5f3b3b0-2db7-446a-8642-c844f6560d52
5b6bf70d-354f-4930-ac36-534e1a992440	采集			2018-01-08 13:46:38.351+08	2018-01-08 13:46:38.351+08	2b6f224d-770e-41bc-b28b-5afbe3b213c4	3	\N
c68f452e-5afc-4ae3-8ffe-00828a24861c	采集			2018-01-08 15:25:13.482+08	2018-03-29 18:19:53.914+08	4866de4e-56ad-435f-a21b-0f2b00011e12	3	f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2
a8d7c27f-35f9-4a65-943b-afa42ba34e5a	采集			2018-01-08 13:55:43.519+08	2018-01-08 13:55:43.519+08	09e8eef6-6b70-4cda-84c2-a7680f7a535f	3	\N
45dc0871-e9be-4b68-bc6d-76d80581e8dc	采集			2018-01-08 14:03:13.654+08	2018-01-08 14:03:13.654+08	6a6797bd-fdda-4b37-bbab-ce377a01521b	3	\N
d2d71857-97dc-4969-92f1-e380d0ad4bf9	采集			2018-01-08 14:10:26.892+08	2018-01-08 14:10:26.892+08	c36c08c3-4f22-474e-b748-c6c32288c802	3	\N
9603914f-8d67-404f-813e-1044464c093b	采集			2018-01-08 14:19:21.243+08	2018-01-08 14:31:55.555+08	0d7661f6-5ce5-490a-9520-ad56ba769d79	3	228b069f-74d0-4863-983c-c33d126a4c02
47aba0a9-a828-4842-9ce0-4733fa6efa10	采集	\N		2018-01-08 14:45:20.93+08	2018-01-08 14:45:20.93+08	8d1d1382-984f-4aa9-8e57-c2a2c21e0c06	3	cc8a4434-b6c9-4c38-a813-90111a3625f7
58459465-409c-47c0-b73f-a8a1c2cf563c	采集	\N		2018-01-08 14:52:33.35+08	2018-01-08 14:52:33.35+08	e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
db8bf711-b26f-4e79-bc46-564fbc4f60ac	采集	\N		2018-01-08 14:56:23.7+08	2018-01-08 14:56:23.7+08	7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e	3	8eddc2aa-c465-4548-ad8a-c9f9b34c318c
a051bf54-cc33-484b-ace2-fe97c26e2ed8	采集			2018-01-08 15:50:34.803+08	2018-09-10 14:41:25.409+08	72fb9e20-7c7b-4ccb-9da1-d8600223beca	3	7aac1370-3321-4738-9717-9dbe62d413b5
7a1da717-ec87-450e-9707-47f782954311	采集	\N		2018-01-08 15:10:26.507+08	2018-01-08 15:10:26.507+08	f5f27d3f-b8fd-44ee-97e2-8a78748a424f	3	\N
dde034ce-aa0b-4c0d-bfdb-bcbb2f231808	采集			2018-01-08 15:12:21.608+08	2018-01-08 15:12:21.608+08	0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e	3	625ea754-8015-430d-afef-ca20ec2efa06
9a6a651f-0042-4ae6-af31-20d976cf4566	采集	\N		2018-01-08 15:14:58.253+08	2018-01-08 15:14:58.253+08	e2d104b1-9c57-4a16-8d05-07817bc8b785	3	\N
80b225c1-5a28-46fd-aa9c-81e77818c907	采集	\N		2018-01-08 17:03:45.952+08	2018-01-08 17:03:45.952+08	a54c400e-8b31-47ec-9820-550d04916f47	3	cc8a4434-b6c9-4c38-a813-90111a3625f7
37b9a8b6-49f3-40a5-b65e-5dcbd59a7495	控制			2018-01-08 15:32:40.771+08	2018-01-08 15:36:58.678+08	2fd2ebfb-7858-40db-91a8-d933269ccf64	2	80216459-82ea-4fd2-b8a5-a8857b794d5e
d53a176b-9c3c-46b6-8e05-37b776800b13	采集	\N		2018-01-08 17:03:46.154+08	2018-01-08 17:03:46.154+08	933a027b-e620-4a6e-8340-d10c7aa29009	3	cc8a4434-b6c9-4c38-a813-90111a3625f7
7c4993c0-3771-4ad6-a71d-2f84390f48e6	采集	\N		2019-12-10 11:41:02.767+08	2019-12-10 11:41:11.245+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	3	d35f3584-07e6-467e-8226-709572429d2d
460611f1-f603-4af6-8a6a-80290761cde0	控制			2018-01-08 16:15:24.172+08	2018-01-08 16:20:38.044+08	45aee45b-bc26-4ac7-a8ed-3dcbe187b2de	2	0e7f12e2-5208-4731-b100-1d4dd5d7bbf9
9c370a1f-67ec-4686-a7f6-da10dc99c770	采集			2018-01-08 16:22:24.856+08	2018-01-08 16:22:24.856+08	22dc1e96-f05a-4752-bebf-9d3c1285dace	3	625ea754-8015-430d-afef-ca20ec2efa06
ab8f77d8-d732-48a5-805a-07d6cde1067d	采集			2018-01-08 16:22:25.019+08	2018-01-08 16:22:25.019+08	c53d6302-b66b-40f4-b190-4d5447180ba7	3	625ea754-8015-430d-afef-ca20ec2efa06
4d545e19-172c-4acb-9183-248abe86f986	采集	\N		2018-01-08 16:27:56.745+08	2018-01-08 16:27:56.745+08	666e753c-f0b0-478d-b5f5-839117db13f9	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
477069fb-894d-4a5c-9b41-d004be827ac5	采集	\N		2018-01-08 16:27:57.45+08	2018-01-08 16:27:57.45+08	f9331a24-582f-45b8-bea8-b919ffd48516	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
68998ba3-d344-4ae4-9ada-bebb5bba6ec3	采集	\N		2018-01-08 16:27:58.087+08	2018-01-08 16:27:58.087+08	8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
ceb32ec1-625c-450d-b1c8-54be51bd97f6	采集	\N		2018-01-08 16:27:58.784+08	2018-01-08 16:27:58.784+08	03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734	采集	\N		2018-01-08 16:27:59.731+08	2018-01-08 16:27:59.731+08	d3ae39b6-419c-4d57-a353-69768f82908a	3	2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71
1377db1c-e2f6-4ac5-832d-53103233d957	采集			2018-01-08 16:40:09.756+08	2018-01-08 16:40:09.756+08	947fdddf-6d80-4972-88cc-601559ca3458	3	\N
1ec0d96c-843a-4da9-ada2-a70c23ebe8f4	采集	\N		2018-01-08 16:50:48.399+08	2018-01-08 16:50:48.399+08	80e5052f-477a-4e27-a3bc-0ec95ab3d4a2	3	2a2d8e77-444a-4911-9f33-9de3b1dff1c8
de7958de-0a8a-4492-8705-642b5c4df424	采集	\N		2018-01-08 16:50:48.896+08	2018-01-08 16:50:48.896+08	fbc83633-74fd-494b-b1b7-75d289358b27	3	2a2d8e77-444a-4911-9f33-9de3b1dff1c8
58543b3a-1b0d-44ce-a3c3-856bc133204a	采集	\N		2018-01-08 16:50:49.868+08	2018-01-08 16:50:49.868+08	64d50498-d37a-4f4a-99f8-2268e82a035e	3	2a2d8e77-444a-4911-9f33-9de3b1dff1c8
2e5b58fb-acb8-4ec6-a177-95a7a1c20745	采集	\N		2018-01-08 16:54:47.934+08	2018-01-08 16:54:47.934+08	f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b	3	2cf8a814-f993-4420-8aa3-7fa891995667
a5889f87-05f4-4786-9e66-b322f564f5f9	采集	\N		2018-01-08 16:54:48.914+08	2018-01-08 16:54:48.914+08	de0bfd26-fb8e-4f9d-8e0a-0119650952c6	3	2cf8a814-f993-4420-8aa3-7fa891995667
2bfe226a-cde2-4d95-8420-b3ba3f669aa8	采集	\N		2018-01-08 16:54:49.756+08	2018-01-08 16:54:49.756+08	bfc79caf-826f-4f9d-a709-241529e118b5	3	2cf8a814-f993-4420-8aa3-7fa891995667
546dee6f-5d8b-4572-931b-fa64627c058a	采集	\N		2018-01-08 17:03:46.474+08	2018-01-08 17:03:46.474+08	cb339f74-5895-4180-a0dc-a3cf12151b0b	3	cc8a4434-b6c9-4c38-a813-90111a3625f7
054f1a33-18e3-4476-a321-2a5482f783da	采集	\N		2018-01-08 17:10:40.672+08	2018-01-08 17:10:40.672+08	a3b4fd36-dd87-463c-84af-254647a24cc5	3	8eddc2aa-c465-4548-ad8a-c9f9b34c318c
893afc3d-9fb4-47f5-aa47-80e8321a052c	采集	\N		2018-01-08 17:10:41.153+08	2018-01-08 17:10:41.153+08	e718c1a2-1c56-4da0-8cb3-36445c6b4f26	3	8eddc2aa-c465-4548-ad8a-c9f9b34c318c
0d9f22e5-95c7-4e56-8963-6576d22b3209	采集	\N		2018-01-08 17:10:41.661+08	2018-01-08 17:10:41.661+08	c7f01571-7f09-4bef-99d3-fdc2da5fcaa2	3	8eddc2aa-c465-4548-ad8a-c9f9b34c318c
9ea4750b-b3f2-4d2b-a190-8ac310bec295	采集	\N		2018-01-08 17:19:40.38+08	2018-01-08 17:19:40.38+08	1f3f14a2-a6d4-44a5-859b-3406794e7b37	3	\N
f846e46e-f9f4-4c0f-b697-4f3fc7d64f25	采集			2018-01-08 17:33:37.631+08	2018-01-08 17:33:37.631+08	448efd11-ceec-4f64-93a0-ad7133e38b8d	3	\N
d6464eff-41e6-49fb-a8f9-7ebbe2e297e0	采集			2018-01-08 17:34:18.702+08	2018-01-08 17:34:18.702+08	5f908b85-0f3a-48c0-bc83-8e191731a754	3	32d06cb0-ba6b-44d3-90aa-a768cb50cfed
f0df6373-949a-4e30-b883-f49611315df1	采集			2018-01-08 17:35:44.857+08	2018-01-08 17:35:44.857+08	157090bc-b53c-4ae3-94fc-4b3804ed6433	3	\N
662ce139-84eb-4601-b783-3dc6503c1255	采集			2018-01-08 17:44:21.351+08	2018-01-08 17:45:25.078+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f	3	0cbce951-a9a9-4eed-b235-fad6a532803b
e2e995b6-c748-453c-a19b-86372c107168	控制			2018-01-08 18:00:05.712+08	2018-01-08 18:00:05.712+08	930f1b29-d056-40a8-9b86-62829634874c	2	b1c9853e-85b4-4c3f-8fb0-0a5e6f596fbf
be68ca54-6bb8-4d57-8db7-6acdaa05c876	采集	\N		2018-01-08 19:28:51.349+08	2018-01-08 19:28:51.349+08	2dead818-122a-42d9-8f52-3aa8d92ab0c3	3	\N
22324cd3-c5d3-4628-9499-bcf2021d5ee8	控制			2018-01-08 18:26:58.123+08	2018-01-08 18:26:58.123+08	0dcb57e3-244f-44d3-8f9c-a50fc74481a8	2	2ed40a11-7a2b-4aa7-a649-28b9d72efbf8
0b714d0d-91d6-4e91-940d-189bec077752	采集	\N		2018-01-08 18:41:35.146+08	2018-01-08 18:41:35.146+08	870242c3-963d-417d-85fa-21add06c9e0a	3	\N
bee3569d-fbcf-4c8e-809d-535e0e515921	采集	\N		2019-12-11 10:59:06.969+08	2019-12-11 10:59:06.969+08	52c7f175-bdd6-4c4c-948d-aa2a7868cd82	3	235a942c-f4b2-48dc-8c48-25d92e7832d4
978ae9f7-08b3-4e87-add1-abccd6d759d0	采集	\N		2018-01-08 19:23:48.685+08	2018-01-08 19:23:48.685+08	537cf41f-69a4-47de-81ee-63485ab8df1d	3	\N
aca808a3-91a5-43d4-9aa2-171a388266a1	01			2018-01-22 17:01:19.503+08	2018-01-22 17:01:19.503+08	b914a394-bbd8-4ff4-857e-02a2d8eb6d25	3	3fc1f94e-7054-43a4-a42d-21b63c00442c
6b9cf407-77e8-47af-b3c7-571606764785	采集	\N		2018-01-24 11:26:28.343+08	2018-01-24 11:26:28.343+08	780de52c-47eb-46cb-b77b-3d919bae5ffb	3	6961f5ca-3d77-4944-921f-d4bf6d757bce
4e508627-863b-46fa-9454-a074ef2fbe8a	采集			2018-01-24 11:33:34.509+08	2018-01-24 11:33:34.509+08	27930598-2f6e-4932-a816-9685f17969b5	3	\N
b9bb6058-9981-44a3-8688-1df4dc7f042b	采集			2018-01-24 11:05:24.809+08	2018-01-26 16:19:24.548+08	38b81b7d-bb3e-4885-aaea-6035faf20d1b	3	d35f3584-07e6-467e-8226-709572429d2d
500186ab-cb13-4844-b7d8-ed0fa7a17c9b	采集			2018-01-30 17:26:52.474+08	2018-01-30 17:26:52.474+08	67becf68-18c7-4ab3-83b2-d306f89bd25d	3	1fd5bb36-282f-48f4-bddf-3e3b780b76c3
9a25cd7a-d145-4a19-95a1-bae3a0cb0260	采集			2018-01-24 11:19:10.113+08	2018-02-02 15:40:55.951+08	76288807-186e-4444-a1ce-6be599aacfd2	3	c72e540a-8318-44ec-98ba-85e71214bd9b
a4dea266-bdd4-4ec6-8334-565d7cdc947c	采集			2018-01-24 11:19:02.107+08	2018-02-02 15:41:51.771+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	3	c72e540a-8318-44ec-98ba-85e71214bd9b
363a580c-77e4-4464-8c92-4ee9c989358f	采集			2018-02-06 17:17:32.191+08	2018-02-11 16:49:54.954+08	7fefd73e-8fd9-48a6-8d7a-76f5796a8197	3	\N
bd051793-11f0-4c75-bb85-912a2c4e022b	采集			2018-02-11 17:07:24.774+08	2018-02-11 17:07:24.774+08	fdf34922-d64e-4616-9313-96d7d94b8412	3	\N
cf2e6e9e-b046-437d-a041-4461ff0be3e3	采集			2018-02-11 17:16:18.664+08	2018-02-11 17:16:18.664+08	b53146b9-7737-46cd-a305-e2c9cb286d3d	3	\N
b38d50f8-60f9-44b9-865d-647810e416cf	采集仪			2018-03-01 14:29:42.733+08	2018-03-01 14:29:42.733+08	c69575ab-795c-45ec-8901-f370255beff1	3	04cd9536-5e39-46e9-a263-370fb4a6acd3
d05b0093-f276-418f-90d3-8e0bfe3c36ef	采集	\N		2018-03-05 13:34:31.699+08	2018-03-05 13:34:31.699+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	3	62fa51b4-81bf-46a7-9c06-607eb1b34f3d
495c7b48-59c7-4d0d-8294-c5f50e2460e4	z	\N		2018-03-07 16:03:25.194+08	2018-03-07 16:03:25.194+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	3	b9e32a9e-36d5-4b15-baca-567f42a0f45b
aca3e62f-b4ec-46cc-887a-563ce53b652a	采集2			2018-03-26 11:16:11.494+08	2018-03-26 11:22:24.2+08	02513eed-ba94-456b-86e0-89ea996b879d	3	\N
c26fbe87-b6ec-4f0d-a907-e05fddec8f41	云采集	\N		2018-03-26 13:37:56.333+08	2018-03-26 13:37:56.333+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	3	\N
b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	云采集	\N		2018-03-26 14:15:06.594+08	2018-03-26 14:16:25.787+08	d2a5375c-0240-4435-9b8f-a62372fafaca	3	\N
7b458eae-2daa-407f-8597-e3a64d0dbb65	数据	\N		2018-03-16 11:38:34.15+08	2018-03-16 11:38:34.15+08	61f09dd0-ba56-40e4-a2d1-45dab1143900	3	\N
21a71013-2a7f-46e0-8ced-77ada77b1342	云采集	\N		2018-03-26 14:26:21.001+08	2018-03-26 14:26:21.001+08	780ffe7d-7369-4d2f-9184-32790466f2ba	3	\N
ea781b14-56d0-478f-991f-05c1ed5fdf93	云采集	\N		2018-03-26 14:38:06.922+08	2018-03-26 14:38:06.922+08	90a2bc12-2214-43ff-9154-9b9212de2c10	3	\N
fca1794e-e349-42fb-aef1-59f5eb4c3efd	采集			2018-03-20 17:29:17.046+08	2018-03-20 17:29:17.046+08	b3b4f0f1-7cdc-4892-9e6a-f4936931472c	3	1285ee16-87aa-464e-9656-872ede3b16a1
798127c2-0250-443c-8627-ac234388ae50	采集2	\N		2018-03-23 17:07:09.224+08	2018-03-23 17:07:09.224+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	3	\N
7c9f78f3-049b-4f4f-86ce-ed4945136111	采集	\N		2018-03-26 11:16:11.511+08	2018-03-26 11:16:11.511+08	02513eed-ba94-456b-86e0-89ea996b879d	3	\N
153dac9d-f2e3-4e56-8402-86df0c0ae5d9	云采集	\N		2018-03-26 15:13:58.985+08	2018-03-26 15:13:58.985+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	3	\N
d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	云采集	\N		2018-03-26 15:43:13.107+08	2018-03-26 15:43:13.107+08	37c046eb-9a0e-49b0-95fb-f0128338f381	3	\N
381fa9a7-3a18-49ce-91bb-b29ebd23429f	云采集	\N		2018-03-26 15:59:07.919+08	2018-03-26 15:59:07.919+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	3	\N
9da5e8ea-d055-48f8-97e4-5e64ccb9334c	云采集	\N		2018-03-26 16:12:54.047+08	2018-03-26 16:12:54.047+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	3	\N
ac2bc3da-4bf9-435b-b48f-d06f4cabd50a	数据			2018-03-26 16:47:53.773+08	2018-03-26 16:47:53.773+08	8c2579cd-6aca-4902-a9d6-61e916a4541e	3	\N
37a8aa55-7282-4e2a-8cf5-a32e6a00c381	数据	\N		2018-03-16 16:58:05.008+08	2018-03-28 10:01:47.896+08	86cc781e-642b-40ee-b49f-1e94aec669ae	3	ea741512-cf76-4546-8b90-3cea1faf6018
72f27aba-3030-490b-9c55-ca21f1294c15	采集			2018-03-28 14:54:49.042+08	2018-03-28 14:54:49.042+08	09252236-560b-47e1-bf81-f774d303ba26	3	\N
8f63105e-6340-4d3e-8436-b564d092296a	采集			2018-01-11 10:36:37.375+08	2018-03-28 16:38:50.26+08	58647986-2640-4318-902a-5ee7d04150ef	3	85991f31-8b74-4529-98ea-bac8bef43938
ef22c0f1-7da1-47eb-915f-8ef899a1c2e0	采集	\N		2017-11-25 12:00:43.507+08	2018-03-28 23:32:12.778+08	6aa982a5-d7a3-48ee-b1dc-afe4686ce796	3	\N
5abdf680-af46-47fe-80f3-d98fa0be49e0	采集			2018-03-14 08:03:41.085+08	2018-03-29 17:28:38.909+08	77d8ba09-082d-405d-aeca-9a0d66f902c3	3	5cbb0e55-7ff3-43d3-bfce-e2e1d8ea2186
c12bb164-9c52-4a79-8210-b5c74534053a	数据			2018-04-02 16:51:42.73+08	2018-04-02 16:51:42.73+08	1e7003bf-2cd1-4dcb-9ad9-116151f49ae6	3	\N
bf250923-ab23-43ab-a4c3-0aebe72d5c84	采集	\N		2018-04-02 17:18:18.083+08	2018-04-02 17:18:18.083+08	c15c6be6-83b0-47ea-ac05-38d625eb8ac8	3	\N
ea35c8e5-60d3-46c7-a819-b0557f2be17b	采集			2018-04-03 12:41:11.894+08	2018-04-03 12:41:11.894+08	1e20c41f-4f52-4d61-94e4-ae8496163aed	3	30362f9f-8691-4ba1-8338-583ea6d80c08
e59809ab-9197-4c91-8a1b-041a187eafc0	采集			2018-04-04 16:47:18.037+08	2018-04-04 16:47:57.92+08	8185c197-338c-42e3-acfc-acba2bb1b180	3	a83e3f95-d82b-4cc6-9d57-704bc5e09ad1
72a5348d-2988-4bd5-ad2b-b46b616e70a9	采集2	\N		2018-04-08 14:06:26.076+08	2018-04-08 14:06:26.076+08	ea2cc9e5-072a-4994-a232-f79655536c64	3	\N
b689f4eb-472a-4f21-93e2-9a7c753479bd	采集			2018-04-08 14:06:26.096+08	2018-04-08 14:06:26.096+08	ea2cc9e5-072a-4994-a232-f79655536c64	3	\N
fa4989e0-0602-43e4-a5d6-3b5492e9711d	采集2	\N		2018-04-08 14:06:27.122+08	2018-04-08 14:06:27.122+08	7f76a800-a32e-483a-a948-919fc9e7d075	3	\N
5d4fd2cc-9b83-48da-80df-6dd615d69195	采集			2018-04-08 14:06:27.149+08	2018-04-08 14:06:27.149+08	7f76a800-a32e-483a-a948-919fc9e7d075	3	\N
88f8eecf-bb3b-4dbc-b003-2c28bdf07be4	采集2	\N		2018-04-08 14:06:27.658+08	2018-04-08 14:06:27.658+08	3f493145-8216-487c-b145-d58dacf9c570	3	\N
a40e7ecd-bd8d-4e58-95af-f964d8861447	采集			2018-04-08 14:06:27.667+08	2018-04-08 14:06:27.667+08	3f493145-8216-487c-b145-d58dacf9c570	3	\N
05b3e292-e599-4d57-ab16-7bff3ae393d2	采集			2018-04-09 08:03:04.744+08	2018-04-09 08:03:04.744+08	b9829d8a-9088-455a-ad16-9a814303b909	3	6b5d1a2e-2aff-4663-bec3-ea25fbafe236
0183e607-ae45-461a-84be-4b7fb9ef5951	云采集	\N		2018-03-14 09:32:03.26+08	2018-07-18 09:54:22.856+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	3	\N
dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91	采集	\N		2018-04-03 09:08:34.239+08	2019-07-09 15:28:05.91+08	6def140f-5189-490c-ab4c-57e84dfcd3bf	3	227ec3db-dca7-4164-91f6-b59aabfaf84d
9960853c-2f09-4f84-83dd-6ef785bd63d8	采集			2019-12-11 15:37:46.772+08	2019-12-11 15:37:46.772+08	7d9b7e21-42e2-4040-86d7-4bdbba095e43	3	\N
a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d	采集	\N		2018-03-23 16:12:32.69+08	2018-06-25 11:31:19.941+08	d52af3c0-c4b0-4091-96c6-ac3e97535f92	3	09903e18-4a03-454d-a5fe-c91275a5400f
699f8e7d-9985-4a05-83be-7ff6a0c7188b	采集			2019-12-12 11:29:56.735+08	2019-12-12 11:29:56.735+08	a8dd8956-f9ae-40d0-b207-8f5cf9669545	3	74d1b296-4f53-442e-84f0-f0bfbd6358af
84fc8a27-019f-4640-bbf6-466627f7c6d6	采集			2018-03-26 11:41:39.433+08	2018-03-26 11:41:39.433+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	3	\N
ef4bfc5b-4560-487e-9e27-4a3249da9ae3	采集			2018-01-18 15:22:34.515+08	2018-01-18 15:22:34.515+08	c0b0b779-cafb-4d7f-b4ff-64534e422738	3	df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
73fc848a-0c95-4953-a162-0679cf2a8586	采集			2018-01-18 15:22:34.698+08	2018-01-18 15:22:34.698+08	abefa36d-6587-4818-bb39-e14a51c26b4e	3	df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
1e00c4ae-1aa0-4767-bc51-c7b09621466d	采集			2018-01-18 15:22:34.878+08	2018-01-18 15:22:34.878+08	79ef29a0-9796-43ce-957d-952d3b16d70a	3	df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
78740935-2863-41f7-ba2b-ed0d3d55d5c5	采集			2018-01-18 15:22:35.038+08	2018-01-18 15:22:35.038+08	ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5	3	df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8
c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d	采集	\N		2019-12-12 16:54:27.269+08	2019-12-12 16:54:27.269+08	8b4d38be-2454-4d9b-a586-d894c5197362	3	f0dfe60c-b6d2-4c5d-a2de-92993726687b
70d4d474-0524-459c-9144-237922982ec3	采集			2018-01-30 17:38:49.92+08	2018-01-30 17:38:49.92+08	745e1f26-ee66-45dd-9606-052a34a944fc	3	b2f54327-7b39-41e7-b7b2-4ba258e6cf00
010ebb8f-5154-406a-a14c-cf57be327ecf	采集			2018-01-24 11:18:54.118+08	2018-02-02 15:42:09.189+08	11a0df92-8921-470b-af9c-d7593b8b1f78	3	c72e540a-8318-44ec-98ba-85e71214bd9b
dcbc00f3-d440-4b2e-b869-c6e2e602316c	采集			2018-02-06 17:32:56.521+08	2018-02-11 17:01:51.769+08	9137c92c-6de6-4b00-bafc-a995288280f7	3	\N
4763af57-7fa9-48b5-a8f2-db469fce1e1a	采集			2018-02-27 09:46:30.763+08	2018-02-27 09:46:30.763+08	a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	3	1fccedae-daf9-41b3-9577-7ce5383902a2
89941851-3e91-426b-b842-0e31d50848f5	采集			2019-12-12 17:00:31.878+08	2019-12-12 17:00:31.878+08	1d7e6445-a676-42b9-9314-837415832451	3	0ec2d3bc-8485-4a34-b820-7241990fc394
39ae566f-f125-4bb3-8f18-39fd4ace09dd	State			2019-12-16 11:28:20.059+08	2019-12-16 11:28:20.059+08	fbb11421-cbb6-435e-b9f0-4bf1e056016c	3	bbd0c618-985d-47a7-b844-e4831697168b
8d3e93e6-61dc-4f46-b610-22b88a38d41d	tt	\N	ff	2018-03-06 11:26:54.858+08	2018-03-06 11:26:54.858+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	3	0d0ea7fb-6462-43e0-a70c-559a0a3cec40
b2781342-015f-4ca3-bd80-448fcb3d4bc0	1223	\N		2018-03-07 16:18:17.096+08	2018-03-07 16:18:17.096+08	24ff3733-db3f-4d37-b90a-edd44a77e054	3	b9e32a9e-36d5-4b15-baca-567f42a0f45b
e0b566e2-b4bd-4224-9cd0-301b176bfbfa	采集			2018-01-23 10:17:42.57+08	2018-04-27 14:42:12.755+08	08ca737d-d94b-46f2-bb48-33327b7fc0eb	3	a288632d-ffc9-4246-9d60-063f43955e03
c45aed9b-1c0e-4a57-b536-f4aa49396a5c	采集	\N		2018-03-12 12:51:38.683+08	2018-03-12 12:51:38.683+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	3	\N
7d5454c7-afcf-4af8-a34c-03fd5ec820f8	采集			2018-03-14 15:32:30.96+08	2018-03-14 15:32:30.96+08	5d399cb2-7e5a-4a27-bff0-e1769f43499d	3	\N
e2e4c206-ed4b-4fae-8755-5dc970720c89	采集			2018-03-14 15:32:44.479+08	2018-03-14 15:32:44.479+08	aa6f3b0e-9bd2-41e8-801d-730aca3e32fb	3	\N
d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	采集			2018-03-14 15:54:05.903+08	2018-03-14 15:54:05.903+08	28d8942e-d1ab-40ee-878a-c3b2f60da896	3	\N
f45f4852-853f-4a66-a359-8b48c4624b75	数据同步			2018-03-15 13:45:07.091+08	2018-03-15 13:45:07.091+08	fa0123d0-7db7-4412-9670-53175d0c2c40	3	8b310a31-95ae-4f4a-bf8e-231f892b9dfe
4ee6b60b-02a2-4760-99c8-873ad7ae2475	采集			2018-03-15 13:49:32.796+08	2018-03-15 13:49:32.796+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	3	\N
540a8aa4-184a-4795-acea-025548061b8c	采集			2018-03-16 09:57:17.071+08	2018-03-16 09:57:17.071+08	c841ad96-ea6e-4050-b317-a0d79fecbead	3	9471a5e1-b72a-4a1f-ab9e-2e5c6e42b4e7
eaa55b41-7d6a-48d3-8600-2b52eaad59a4	数据			2018-03-21 09:54:46.403+08	2018-03-21 09:54:46.403+08	12a0ae21-df74-42b4-94ce-492125b941bd	3	\N
32b8c637-51b5-405c-920d-f7ae0adefafd	采集2	\N		2018-03-26 11:41:39.442+08	2018-03-26 11:41:39.442+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	3	\N
a7e720b6-f0ca-4a8d-aabd-18b8c8825303	采集			2018-01-08 19:23:06.707+08	2018-12-14 15:49:05.166+08	f55d7414-2db9-4c07-ad9b-34637318171e	3	\N
e4c071d1-afb9-4178-923b-18a37265ca86	采集	\N		2018-03-26 11:16:13.109+08	2018-03-26 11:16:13.109+08	2e0d00cd-a321-4504-b716-41813848cbdb	3	\N
bc373436-023b-41d4-9608-6a33bb926e80	采集2			2018-03-26 11:16:13.099+08	2018-03-26 11:21:35.731+08	2e0d00cd-a321-4504-b716-41813848cbdb	3	\N
363b62ae-2ccd-4c86-915d-03380bc9d89c	采集	\N		2018-03-26 11:27:35.441+08	2018-03-26 11:27:35.441+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	3	\N
8693e382-e7e6-4efa-8583-d0251cb0b360	采集2			2018-03-26 11:27:35.45+08	2018-03-26 11:27:35.45+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	3	\N
f75af319-b305-463e-a3dc-78df902b61ef	采集			2018-03-26 11:30:25.464+08	2018-03-26 11:30:25.464+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	3	\N
6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	采集2	\N		2018-03-26 11:30:25.487+08	2018-03-26 11:30:25.487+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	3	\N
d8193d74-feb5-4872-8e42-95a335cd383f	采集2	\N		2018-03-26 11:43:22.705+08	2018-03-26 11:43:22.705+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	3	\N
750c60f8-168e-4bca-acf5-df2d502915f5	采集			2018-03-26 11:43:22.721+08	2018-03-26 11:43:22.721+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	3	\N
b0488049-bfc9-40ee-8dfa-79f9233638ec	采集2	\N		2018-03-26 11:43:22.863+08	2018-03-26 11:43:22.863+08	3aba791d-d6b2-4175-bb20-109f210f4065	3	\N
08b32693-e4b0-44db-9d79-e45dff49062a	采集			2018-03-26 11:43:22.872+08	2018-03-26 11:43:22.872+08	3aba791d-d6b2-4175-bb20-109f210f4065	3	\N
c0ea2d7f-7778-47aa-af49-0119a729c741	采集2	\N		2018-03-26 11:43:23.17+08	2018-03-26 11:43:23.17+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	3	\N
228d8257-dcf7-4493-a4d4-083712716318	采集			2018-03-26 11:43:23.183+08	2018-03-26 11:43:23.183+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	3	\N
b72802e5-4982-4ba1-bd1b-15ba05d7d832	采集2	\N		2018-03-26 11:43:24.204+08	2018-03-26 11:43:24.204+08	f30482b9-b518-4048-8217-bd64158911e6	3	\N
0f684ae0-ceb8-4c6a-95c4-e83bdd79059e	采集			2018-03-26 11:43:24.219+08	2018-03-26 11:43:24.219+08	f30482b9-b518-4048-8217-bd64158911e6	3	\N
ce140baa-bcd7-4756-9d06-9591535eed2a	云采集	\N		2018-03-26 13:53:33.644+08	2018-03-26 13:53:33.644+08	73a7b800-25d7-41ad-872d-96cc4f9430de	3	\N
aca7e15e-5b9f-4595-8640-9e7c920ef810	云采集	\N		2018-03-26 14:02:43.871+08	2018-03-26 14:02:43.871+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	3	\N
f3879800-9585-4575-a261-25c1128fcaf9	云采集	\N		2018-03-26 14:29:22.849+08	2018-03-26 14:29:22.849+08	424f45f6-916c-4383-bce4-c71153f82e63	3	\N
88e6acfa-2714-4821-9ff8-c5d96a23ce68	云采集	\N		2018-03-26 15:17:46.058+08	2018-03-26 15:17:46.058+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	3	\N
0428f647-9944-415c-b6f0-93e7329d31c9	云采集	\N		2018-03-27 10:57:23.45+08	2018-03-27 10:57:23.45+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	3	\N
6ebb2c0f-06fa-4b77-b028-4818465a7019	云采集	\N		2018-03-27 11:00:35.446+08	2018-03-27 11:00:35.446+08	362018b7-e626-4eab-a6ad-214d85cfcc03	3	\N
5aeba65e-e787-4076-8e03-a33698701ff2	云采集	\N		2018-03-27 11:12:21.149+08	2018-03-27 11:12:21.149+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	3	\N
b7f4e4fa-c1a4-4f44-9c29-bab2e1b860fe	采集			2018-01-11 11:13:31.331+08	2018-03-28 16:38:35.586+08	d53887ba-c67a-4b45-a1ed-1a61fbde6c4c	3	0856b400-ee67-440c-b534-b075d2b36023
53281743-bc5c-46cf-addc-706810bcd681	采集			2019-12-11 15:50:46.311+08	2019-12-11 15:51:39.679+08	79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb	3	0f1f4851-c5be-432e-82bc-babc64646eed
8e60936a-d379-48c0-bab9-7f9d02c1a5f0	采集2	\N		2018-04-08 14:00:40.996+08	2018-04-08 14:00:40.996+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	3	\N
3fde2361-48e1-41a2-9063-28daac442f9b	采集	\N		2018-01-23 10:22:45.745+08	2018-01-23 10:22:45.745+08	219cbb09-9c49-4167-846d-00a8bdfadb9a	3	\N
1a664a1a-b5f1-4e75-916f-21bc94749d0e	采集			2018-01-24 11:30:26.759+08	2018-01-24 11:30:26.759+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	3	\N
09048659-5be8-43d3-9189-61f71c225e04	采集			2018-01-24 11:19:06.362+08	2018-02-02 15:41:28.364+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	3	c72e540a-8318-44ec-98ba-85e71214bd9b
d33d38fd-5c34-41af-864c-314b9cc326ec	rrr			2018-02-02 16:19:55.42+08	2018-02-02 16:19:55.42+08	22827d64-06e1-4752-a0b6-3cf6fb36cd21	3	9f3d7c20-ffe2-4e03-88d4-798fa7c8dcd8
511b86b5-3773-45aa-b518-9b29071357e1	采集			2018-02-07 09:45:44.214+08	2018-02-07 09:45:44.214+08	5ecfc751-afb0-4596-a6f7-85a31eca40c3	3	8f9e2bf6-e76c-4794-b3f0-1af76a216b60
c64d06e4-145c-4bbb-919c-1147dac429b9	同仁堂	\N	如若	2018-02-27 14:54:53.555+08	2018-02-27 14:54:53.555+08	7697d048-c21e-4b28-8c88-a59de01bae96	2	672258f5-8e0b-43b1-8e33-39a92693774e
537d2dc0-86ba-4f40-8da1-06a0e34795cc	配置同步	\N		2018-03-15 13:46:19.588+08	2018-03-15 13:46:19.588+08	fa0123d0-7db7-4412-9670-53175d0c2c40	2	70b1f69b-2605-42ef-a7c2-6746c1289f7c
5ce3382a-6764-4a08-8bfe-5b058e8a9017	采集			2018-03-15 16:52:12.162+08	2018-03-15 16:52:12.162+08	63429c67-5b55-4b88-998c-65d4464623c8	3	\N
5d266e86-fadf-4335-843c-a721ecb814c3	采集			2018-04-08 14:00:41.04+08	2018-04-08 14:00:41.04+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	3	\N
0226f5d5-c83d-4a9b-8448-adb854fa4336	采集2	\N		2018-03-23 17:58:37.774+08	2018-03-23 17:58:37.774+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	3	\N
43e14c1c-a425-4001-9886-f41df72945ea	采集			2018-03-26 11:35:23.09+08	2018-03-26 11:35:23.09+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	3	\N
053f72a5-5576-48de-baa6-a2732ff863cc	采集2	\N		2018-03-26 11:35:23.102+08	2018-03-26 11:35:23.102+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	3	\N
82a15a43-5463-4d67-88ea-0a816235bd70	采集			2018-03-26 11:35:23.208+08	2018-03-26 11:35:23.208+08	aab61193-270e-4d06-9bdf-9da5194c744a	3	\N
4f92b0e6-a618-4221-8c58-169247d88bd0	采集2	\N		2018-03-26 11:35:23.214+08	2018-03-26 11:35:23.214+08	aab61193-270e-4d06-9bdf-9da5194c744a	3	\N
b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	云采集	\N		2018-03-26 15:21:39.58+08	2018-03-26 15:21:39.58+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	3	\N
5c6f4070-1acc-4ac2-91d6-b7420f02a37b	云采集	\N		2018-03-26 15:36:16.543+08	2018-03-26 15:36:16.543+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	3	\N
81a87805-fc42-456d-960f-fb793999d631	云采集	\N		2018-03-26 16:24:30.181+08	2018-03-26 16:24:30.181+08	c9eacd36-38d6-48b9-9672-e76406906ea3	3	\N
f19d92bc-802e-4662-9419-3f664f0d7eba	云采集	\N		2018-03-26 16:50:56.087+08	2018-03-26 16:50:56.087+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	3	\N
a266afb7-b532-4336-b199-cb33af206062	采集2	\N		2018-03-27 10:50:38.101+08	2018-03-27 10:50:38.101+08	4d523084-bf91-421f-bafc-f278a63c5541	3	\N
7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	数据			2018-03-16 11:58:51.506+08	2018-03-28 11:26:27.861+08	c8fd3080-b416-4381-8bcc-e84c12471281	3	\N
66aa8517-e2eb-4eaa-b1aa-77db8ee96462	511		111	2018-03-28 15:40:02.864+08	2018-03-28 15:40:02.864+08	7faf119d-7804-470c-a448-516d681cce6b	2	\N
2dd2b9c9-f307-4635-98cd-0aed7043075d	采集			2018-04-02 10:37:43.663+08	2018-04-02 10:37:43.663+08	56c84083-d705-4aa0-94d2-34b731f75f97	3	\N
e23258d4-5427-479c-b19b-25ac08c4888f	采集			2018-03-19 14:57:03.368+08	2018-04-02 11:06:37.552+08	717279c9-81b5-4bfe-8dd3-906297d70e41	3	a0c8ab50-1f6a-43dd-b2e0-7e185e5c3c00
ca247144-4f2b-40e9-a2a9-de78942565e5	采集			2018-04-03 11:39:47.189+08	2018-04-03 11:39:47.189+08	cda0b115-60d6-4169-8f45-4a92d6801fb3	3	cba2303c-cdd4-477f-8bff-49ff734cfcd6
c160a4b0-d8da-4e66-ae49-305ecdd5ca48	采集2	\N		2018-04-08 14:06:24.501+08	2018-04-08 14:06:24.501+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	3	\N
b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a	采集			2018-04-08 14:06:24.525+08	2018-04-08 14:06:24.525+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	3	\N
b484a973-d8b7-4e1f-a3a1-8be21122c6fe	采集2	\N		2018-04-08 14:40:14.013+08	2018-04-08 14:40:14.013+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	3	\N
def3cc25-dff3-43d3-b77c-855e1683db60	采集			2018-04-09 08:05:14.718+08	2018-04-09 08:05:14.718+08	fbc0de18-03f7-421b-b7d4-4440a7c96791	3	\N
541024ad-b513-4adb-b4ea-9a3eb3b67f5c	采集			2018-04-10 09:58:21.457+08	2018-04-10 09:58:39.78+08	727fa9b6-b621-41cb-b084-ef3f74f7c496	3	\N
ade7450e-eb35-4424-8b11-83f4c466bef7	采集			2018-04-11 09:27:08.923+08	2018-04-11 09:27:08.923+08	d75d2473-6ed4-437c-8509-682f55d0d407	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
9f8406e9-e9ca-4ca0-ae96-258bb6917390	采集			2018-04-11 16:24:01.258+08	2018-04-11 16:24:01.258+08	6e1d3878-3ea2-4c73-9137-0ef98781be0c	3	9849a791-5487-439b-a063-f7691ed40bfc
6831367e-c4c8-407a-b2d6-3259490ee594	采集	\N		2018-03-23 16:51:24.666+08	2018-04-19 11:01:02.777+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	3	65495481-c107-49ff-98c9-2c4215b38347
3c6dfe0c-5013-4f63-9222-721718b82b24	采集2	\N		2018-04-12 11:22:18.178+08	2018-04-12 11:22:18.178+08	a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	3	\N
a85e3b5f-f279-4094-b079-07d51a243899	采集			2018-04-16 11:54:59.734+08	2018-04-16 11:54:59.734+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	3	\N
64cbf359-5e92-46a5-ac77-4ba6566e6539	云采集	\N		2018-04-16 13:52:32.77+08	2018-04-16 13:52:32.77+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	3	\N
b848da41-0b65-4b04-afdb-aedda940be03	采集			2018-04-16 14:07:58.015+08	2018-04-16 14:07:58.015+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	3	\N
02d9ea95-34c0-4d67-a8dc-755e3330cb36	云采集			2018-04-16 14:07:58.042+08	2018-04-16 14:07:58.042+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	3	\N
c76c28b1-6041-44be-9ce9-39728d5de7c6	采集			2018-04-16 15:46:07.726+08	2018-04-16 15:46:07.726+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	3	\N
b4f14b5d-82f1-4ea1-b10f-3e38e552168c	云采集	\N		2018-04-16 15:46:07.746+08	2018-04-16 15:46:07.746+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	3	\N
3a873f72-4f94-4141-94f5-023d34b61d1f	采集			2018-04-16 15:46:07.882+08	2018-04-16 15:46:07.882+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	3	\N
a5c1d727-4820-4d7b-b758-dea1af104b33	云采集	\N		2018-04-16 15:46:07.902+08	2018-04-16 15:46:07.902+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	3	\N
2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	采集			2018-04-16 15:46:12.371+08	2018-04-16 15:46:12.371+08	20ff998d-3014-4f62-ad12-37b56883c435	3	\N
8467dc74-ae70-4742-9f5e-8b44464133b3	采集	\N	主动下发采集	2018-01-10 15:59:36.198+08	2018-05-11 10:38:17.132+08	f65db984-9da0-4cef-a9ea-7de5e02ef42f	3	9c5e1617-0ca4-4ca1-aec1-dfb0bd25a0a8
d64be76d-e00e-4984-bd5e-6c6be4ccd7d3	采集	\N		2018-03-23 16:12:54.29+08	2018-06-25 11:31:01.904+08	4a0f1cd5-1e52-4ec3-8976-0b1f82031d28	3	9addbae0-b742-4fa1-9ecd-d5f0ee2b3889
8cc91875-80ee-4c35-abe4-4c64888e18fc	云采集			2018-04-09 16:11:41.565+08	2018-07-31 16:20:25.154+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	3	\N
93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d	采集			2018-04-08 14:40:13.998+08	2018-08-13 14:58:59.138+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	3	fc53b2d3-05e5-4bd9-ac41-66bfa2283dd9
da328767-f26f-4fce-967c-7dbf5af7df6f	采集	\N		2019-12-17 14:35:15.852+08	2019-12-17 14:35:15.852+08	d4476f92-5675-4de7-982e-fd914541136a	3	683ffafc-6cea-44dc-83c5-b16f5227f820
fdd4dd73-2235-45a2-98b3-c7838697717c	节点采集	\N		2018-03-26 11:35:24.366+08	2020-04-09 09:42:34.522+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	3	\N
3a66e33a-e25c-45ce-b87b-534d9d4bcaf4	当前连接数		tomcat连接信息	2018-01-09 10:35:25.64+08	2018-01-09 10:40:42.082+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	3	399b9436-81fa-4410-914b-1a860910858c
e240a124-006b-4a79-9006-c8fcb6842ef7	总连接数	\N	tomcat总连接数	2018-01-09 10:43:37.029+08	2018-01-09 10:43:37.029+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	3	0d0ea7fb-6462-43e0-a70c-559a0a3cec40
349567b6-f674-4299-89df-0d64e448a6b3	采集			2018-01-12 10:08:09.319+08	2018-01-12 10:08:09.319+08	301f43b2-e055-4169-8a27-c3d69b246a19	3	\N
1e87be3b-9782-4b75-8b62-0aa49b44daea	设备数据	\N	设备数据	2018-01-19 15:32:51.616+08	2018-01-19 15:32:51.616+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	3	0d0ea7fb-6462-43e0-a70c-559a0a3cec40
613d1519-cf1a-47b5-a44a-2397b79bee2a	采集			2018-01-23 13:54:59.279+08	2018-01-23 13:54:59.279+08	70ed36c0-d58f-482d-8337-fafed8a2e6ac	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
d36bb0ee-6c5c-4778-bc5b-5e03db483152	采集			2018-01-23 15:00:11.233+08	2018-01-23 15:00:11.233+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	3	\N
2db014d8-3273-467f-b938-8e6b9c22031e	采集			2018-01-23 15:00:12.509+08	2018-01-23 15:00:12.509+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	3	\N
028d4dfc-6b2c-40e4-9960-97c813408030	采集			2018-01-23 15:00:12.712+08	2018-01-23 15:00:12.712+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	3	\N
3d52b0e5-39ac-4e19-99b4-7bd96b15888a	采集			2018-01-23 15:00:13.316+08	2018-01-23 15:00:13.316+08	c9eacd36-38d6-48b9-9672-e76406906ea3	3	\N
b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	采集			2018-01-24 11:34:49.462+08	2018-01-24 11:34:49.462+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	3	\N
f564da79-91f3-4eff-8919-3501b7fb8046	采集			2018-01-24 11:34:50.379+08	2018-01-24 11:34:50.379+08	362018b7-e626-4eab-a6ad-214d85cfcc03	3	\N
0d2a48dd-a7d4-4752-9e64-d17ca8555ca8	采集			2018-02-05 14:54:12.669+08	2018-02-05 14:54:12.669+08	d148ae2e-c0dd-4e57-a0e8-833d32107f31	3	4551eefd-3b2e-42e4-b314-f27e5157eecc
b0ec1cec-15a9-42c0-8038-6450ab31d5c9	采集			2018-02-07 16:37:15.397+08	2018-02-07 16:37:15.397+08	36918a6c-395e-4f8c-93b1-7ca400374cf8	3	afb4357f-a11c-4278-b137-53c5042053db
af49da8c-cb29-4435-974c-d96d01e992bc	采集			2018-02-28 16:01:53.17+08	2018-02-28 16:01:53.17+08	12adcb99-432b-46f5-9240-dad30ec75ea6	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
ab5ddc7a-c116-496f-9658-12522697a1d0	采集			2018-02-28 16:48:43.05+08	2018-02-28 16:48:43.05+08	10ac4010-ff56-4d05-9e45-55f84f4292aa	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
e277560c-2da5-499d-a3eb-99ed74f642d9	采集			2018-02-28 16:48:44.786+08	2018-02-28 16:48:44.786+08	1f16c362-1f8e-4cbc-8b2c-8f43dd306390	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
ad956aa4-9d9f-414e-aa8b-d48cb81e9a60	采集			2018-02-28 16:48:45.382+08	2018-02-28 16:48:45.382+08	8571c1b0-8472-45b5-955f-5a7614a2f08c	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
1f12ae0a-fb0a-497e-af70-8e53094543a1	采集			2018-02-28 16:48:46.014+08	2018-02-28 16:48:46.014+08	a570a2de-ca66-488a-a078-6c6b14b71f2a	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
342ac320-e429-49f0-b647-e4d7e5f4b545	采集			2018-02-28 16:48:46.683+08	2018-02-28 16:48:46.683+08	d54f6d25-04dc-4847-8dda-9c54d54b2d8f	3	b3fc90d9-c68c-4e58-95a9-89311901aca4
7572058c-09cc-4eeb-a9ba-be3be9bacf77	采集			2018-03-06 16:50:09.442+08	2018-03-06 16:50:09.442+08	5dced7e6-e4c2-4e43-82a2-6b994fb790b4	3	00689b92-6403-4fae-977d-1b9c1436f133
66075081-ad5a-4acb-8bcc-77672c5d579a	配置同步	\N		2018-03-08 18:57:24.609+08	2018-03-08 19:00:09.625+08	71735c3a-2e25-40c1-81ad-df10d8792ac2	2	feb25833-7419-4779-bfc8-809195843744
08d15c9c-009a-49dd-bf90-c1c2b55a229d	数据同步	\N		2018-03-08 18:57:51.417+08	2018-03-08 19:00:18.418+08	71735c3a-2e25-40c1-81ad-df10d8792ac2	3	6fc5be55-5544-4595-8414-95be244eb503
ebcd990c-356a-4c0a-86ba-5a6fd378432e	asdf			2018-03-12 17:55:34.548+08	2018-03-12 17:55:34.548+08	ae356f39-ab83-4ac9-b847-31391780a6c5	3	\N
837d4b62-487d-40e0-892a-4c1305ebd883	采集			2017-12-29 17:15:38.775+08	2018-03-19 17:07:42.626+08	4e281788-df68-4193-bbe0-9159eee1f24e	3	4d5bd16e-9baf-464f-b930-69308501030f
ba74ef0e-3ec4-4203-9d65-17906c8f64d1	采集			2018-03-26 11:35:24.359+08	2018-03-26 11:35:24.359+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	3	\N
68518b11-55c5-4191-8116-1d27ee89268e	采集			2018-03-14 15:32:53.596+08	2018-03-14 15:32:53.596+08	4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee	3	\N
51e73aec-cdcf-4852-98fe-e6b9bae73590	采集	\N		2018-03-23 16:13:17.06+08	2018-06-29 10:31:21.381+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	3	65495481-c107-49ff-98c9-2c4215b38347
ced94dca-0afa-4ab7-b273-744ff40f6b7a	采集2	\N		2018-03-23 16:37:04.439+08	2018-03-23 16:37:04.439+08	0f4f59de-cde7-4aec-a402-703e5426bb76	3	\N
88d7fc54-bcbf-4532-839e-0dc916df537e	采集2			2018-02-05 11:21:19.477+08	2018-03-23 16:49:34.681+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	3	\N
af89ba1b-5b99-481c-a213-a2171c2e4700	数据			2018-03-25 19:20:50.002+08	2018-03-25 19:20:50.002+08	388cca81-7338-40d3-ba1f-89ec9d5aa2f7	3	\N
f4d2673b-f6ac-4be7-9068-95a68442426e	采集2			2018-03-26 11:27:33.449+08	2018-03-26 11:27:33.449+08	d31031ab-0237-41a5-adc0-867c1e9952f7	3	\N
614819ae-798a-406e-befe-fe6749ac5536	采集	\N		2018-03-26 11:27:33.459+08	2018-03-26 11:27:33.459+08	d31031ab-0237-41a5-adc0-867c1e9952f7	3	\N
f2877cda-87cc-485a-9fc6-11f7ef8b2624	云采集	\N		2018-03-26 13:44:09.13+08	2018-03-26 13:44:09.13+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	3	\N
e3bf8273-2a58-438d-b214-0fd258644ef8	云采集	\N		2018-03-26 13:48:39.27+08	2018-03-26 13:48:39.27+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	3	\N
1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad	数据			2018-03-26 13:57:13.724+08	2018-03-26 13:57:13.724+08	65b984f5-c294-49fa-8433-510d38416095	3	\N
5775692b-7acf-46f2-b924-d040fb8bd751	云采集	\N		2018-03-26 14:22:43.666+08	2018-03-26 14:22:43.666+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	3	\N
794d13af-907b-4165-bd7d-5c9d4e3410f4	云采集	\N		2018-03-26 14:45:17.767+08	2018-03-26 14:45:17.767+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	3	\N
c77f3d16-3577-4f09-9c32-cc99cbb68966	云采集	\N		2018-03-26 15:02:23.928+08	2018-03-26 15:02:23.928+08	5e7775c1-0766-436e-b701-b1102833b98d	3	\N
642663da-bc66-430b-8367-41e2ae5ed8b2	云采集	\N		2018-03-26 16:43:50.793+08	2018-03-26 16:43:50.793+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	3	\N
0e3fff68-6973-4327-9be6-6d5172b7ad80	数据			2018-03-26 17:36:26.278+08	2018-03-26 17:36:26.278+08	83d8bf62-35f8-48c5-afa2-0d454cb19f70	3	\N
50696e87-2214-4a20-b537-5530d2921ccd	云采集	\N		2018-03-27 11:04:04.511+08	2018-03-27 11:04:04.511+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	3	\N
533e4f1c-c95f-46b6-9d76-1e77bcd20732	云采集	\N		2018-03-27 11:07:17.879+08	2018-03-27 11:07:17.879+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	3	\N
b94d787d-82ad-4377-91c7-ef2e4bb9fe74	采集			2018-03-02 16:15:39.588+08	2018-03-28 16:37:40.437+08	ec223bfa-7244-4458-8180-4205fd31ac24	3	6fc8d8c6-fe8f-42ab-950d-8214817ff43a
6c1400a4-ffcc-4f86-955b-dad07fb58c17	采集			2018-02-05 11:22:03.788+08	2018-04-19 10:59:55.874+08	2e2456a6-9738-456c-abf1-94d5ebad124a	3	65495481-c107-49ff-98c9-2c4215b38347
a2fa85fa-2e1a-427e-99f2-595757cb505b	云采集	\N		2018-04-16 15:46:12.39+08	2018-04-16 15:46:12.39+08	20ff998d-3014-4f62-ad12-37b56883c435	3	\N
3987b49b-1b19-4b06-889b-b102edd2abe3	采集			2018-04-16 16:00:53.273+08	2018-04-16 16:00:53.273+08	7674c64d-e09e-4257-8726-c64a26ed309a	3	\N
c538c4cc-6b50-4a51-9706-9a112551be27	云采集			2018-04-16 16:00:53.297+08	2018-04-16 16:00:53.297+08	7674c64d-e09e-4257-8726-c64a26ed309a	3	\N
ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	采集			2018-04-16 16:00:54.78+08	2018-04-16 16:00:54.78+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	3	\N
81b14e1d-4d14-4741-b581-31e3c543a0f9	云采集			2018-04-16 16:00:54.794+08	2018-04-16 16:00:54.794+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	3	\N
ae06a9a5-6f60-4dae-9983-cc4677c08d97	采集			2018-04-16 16:01:22.138+08	2018-04-16 16:01:22.138+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	3	\N
2f72ef62-1d3b-4c4b-9308-5abb39a919d0	云采集			2018-04-16 16:01:22.155+08	2018-04-16 16:01:22.155+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	3	\N
c86b0543-8d73-4c04-95d7-aa52f68d8c67	云采集			2018-04-16 16:14:50.369+08	2018-04-16 16:14:50.369+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	3	\N
b5c9d48e-6b32-41c8-ad53-93f60da390b1	采集			2018-04-16 16:14:50.441+08	2018-04-16 16:14:50.441+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	3	\N
cf73d66e-1a91-4f17-a31b-e373c8731fb4	采集			2018-04-12 09:54:19.73+08	2018-04-18 11:28:28.082+08	3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6	3	d9b6eb86-bbee-4c4e-9007-eb566b64fba6
69df2525-998a-4f00-a7f5-857a888eb1b9	采集			2018-02-05 11:21:49.792+08	2018-04-19 11:00:20.8+08	0f4f59de-cde7-4aec-a402-703e5426bb76	3	65495481-c107-49ff-98c9-2c4215b38347
1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b	采集	\N		2018-04-24 14:38:42.692+08	2018-04-24 14:38:42.692+08	4a84b11e-7f79-47ff-b530-6cbc5615b491	3	a38f68fe-fc29-40f0-abf2-d3b10a127d9b
835d5e0e-912e-458c-a809-8634e203c0e9	jg			2018-04-24 15:29:24.945+08	2018-04-24 15:29:24.945+08	324eb312-14cd-4931-a6e0-f84880fb8ac5	3	d6c7bf35-62db-4a57-9a6f-d50ab8f37ccd
90194fd9-5400-4bda-bd8b-7ed11b598c4c	采集			2018-05-03 08:54:32.785+08	2018-05-03 08:54:32.785+08	0363c038-6fa5-4290-adaf-c9afa18f1171	3	9ee874f0-a205-421a-8249-73fd9c6b4901
51fbf199-10ab-4718-8b70-c92beea24f6a	采集			2018-05-03 10:34:23.753+08	2018-05-03 10:34:23.753+08	fbe11da9-a717-4a5e-bd90-93f394b46ccc	3	\N
6accf380-8a73-4f88-8a5c-42b3366bc358	采集			2018-05-03 10:35:59.177+08	2018-05-03 10:35:59.177+08	5efb0ea9-ca31-4a41-9389-be6c24b3ad2c	3	\N
56227677-39fd-4bfe-a59b-8c5f28682832	采集			2018-05-03 10:37:15.481+08	2018-05-03 10:37:15.481+08	ae8d62c1-09f0-4fcd-bc62-add087919ff0	3	\N
289b0a55-03e7-4154-bdd7-b7bbb15a6d28	采集			2018-05-09 10:42:20.041+08	2018-05-09 10:42:20.041+08	ed5ede03-616b-4df7-b741-eea396939ecf	3	b1bbe56d-c98c-4e51-8fc1-398fa057bf4a
fb36a342-1fe1-4756-ad83-825b5d7ac57e	传感器			2018-05-09 11:11:01.654+08	2018-05-09 11:11:01.654+08	3b03e747-cc81-4f6e-9ccf-f828a5534096	3	\N
d7460b80-d3f3-48f1-9287-d7220b1b7f3d	采集			2018-05-09 13:55:22.689+08	2018-05-09 13:55:22.689+08	1cfa35c8-129a-45eb-9304-2b105bc22380	3	8ba409b2-a129-4c05-8f32-a1445cfec3b4
33ced0d8-f342-4bc5-8c11-45dcb0304ffd	采集			2018-05-10 09:13:20.648+08	2018-05-10 09:13:20.648+08	901073b9-b411-427c-9eb6-43a935ec8c27	3	543e1e81-6131-43ec-8f7e-495bb4fa257d
60f374db-1336-4bb2-8dda-311955dca706	采集			2018-05-10 17:53:00.783+08	2018-05-10 17:53:00.783+08	fdef19ae-68f1-4ad5-937b-3cb60e20d8ce	3	\N
5d8abf22-14e4-474f-9a3a-11a4976643ee	采集			2018-05-10 17:55:50.407+08	2018-05-10 17:55:50.407+08	67b821eb-caf8-4352-a59b-360e7c9a3ad9	3	\N
ec17d151-95d9-4c87-a5c9-799089626714	采集	\N		2018-05-11 10:41:15.497+08	2018-05-11 10:41:15.497+08	077f4241-fe27-4cbc-9918-cf5b8d1c8283	3	\N
c135c6c2-af77-42b4-9fd8-a684c629383e	测量值			2018-05-11 15:45:31.13+08	2018-05-11 15:45:31.13+08	efdb6604-3283-41b2-9a30-aa532a49d897	3	\N
663eba54-78c3-4aa6-abbf-66cde27953e2	采集			2018-04-09 16:11:41.553+08	2018-05-16 17:28:00.385+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	3	8a27161a-7fe3-47bf-a269-648c94121266
2e6e8c47-b162-44b0-802f-689c0a71fb2c	采集			2018-05-16 17:44:54.911+08	2018-05-16 17:44:54.911+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	3	8a27161a-7fe3-47bf-a269-648c94121266
5590fa71-06f3-4895-9540-4996a44d0c27	tttt			2018-05-17 10:26:47.623+08	2018-05-17 10:26:47.623+08	e5c11c48-0e03-4229-b879-a487b7cda972	3	\N
957aac75-16e3-4a36-958f-bd44ca104591	采集			2018-05-17 14:43:40.147+08	2018-05-17 14:43:40.147+08	82db02f1-7f86-44cf-b9a4-d32e28672a84	3	f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2
1da4370b-ba2d-4f6a-92f0-485a163d45e2	采集			2018-05-28 10:45:28.327+08	2018-05-28 10:45:28.327+08	78540227-fdf9-47ed-841e-7b76fed0f788	3	1e3a9533-745a-4c0d-a998-256576a85cab
d314e16c-4cc2-47bc-92b5-af0639bdc7a8	采集			2018-05-28 10:50:00.172+08	2018-05-28 10:50:00.172+08	40a69ace-03f8-4acf-8cf7-6acf43ac2de8	3	\N
1d256945-ce40-4216-ba9b-2071e6e1548e	采集			2018-05-28 14:03:33.961+08	2018-05-28 14:03:33.961+08	7c2ff6f1-5bb6-4736-91cd-1bd068e760aa	3	\N
2205fdef-b595-4f0d-8268-e9d2370638aa	123456	\N		2018-05-28 17:34:37.769+08	2018-05-28 17:34:37.769+08	899dde06-bd1d-4215-963e-23596c3fda7f	2	4c032273-d5ed-46a2-b362-da219224cac5
fb8fd0c1-b11f-43cd-9710-c507dec06062	123456			2018-05-28 17:34:00.454+08	2018-05-28 17:36:20.376+08	899dde06-bd1d-4215-963e-23596c3fda7f	3	\N
d3ba7fce-1ab9-4423-8888-27fbc8244e5c	采集			2018-05-29 11:41:59.944+08	2018-05-29 11:41:59.944+08	5ac91988-c93a-4176-9f33-7c6ba110590f	3	daf77d68-0e8a-4215-94b5-fa3255e04fdc
9517f5d2-02f2-47c6-b688-35e0efa0f25f	采集			2018-05-29 14:51:48.728+08	2018-05-29 14:51:48.728+08	9d6f5e3b-2821-48f0-b5c5-997baf346f39	3	29c24e0f-e684-4875-9e8a-2d0650310192
d1f3cdb1-95b4-4970-90b8-cdb6c2201063	采集			2018-05-30 20:45:30.284+08	2018-05-30 20:45:30.284+08	35046949-3e59-43c1-8898-bfc7995c3da9	3	a75c683e-f6e3-4198-9520-4d03309584ad
642f187b-6fa0-4dad-9bb4-1ebee9558b41	采集			2018-05-31 07:52:27.754+08	2018-05-31 07:52:27.754+08	da7a3b52-f9fb-4e4c-bf41-dda355ec5585	3	83750550-f9bd-49a2-9ed1-b9c144146435
93a73320-1cb3-4b2f-a8be-f31d131ba881	采集	\N		2018-05-31 14:37:08.562+08	2018-05-31 14:38:48.445+08	563221c8-bdb4-4511-b781-25cab72585a7	3	6b6e7e0d-f078-4725-87c1-11a5a07f2565
ff3a290c-3a62-49a8-8db9-f4083f855397	采集			2018-05-28 11:45:20.158+08	2018-06-01 10:38:47.301+08	200655be-879b-4a82-8a17-1ff1ccb9f961	3	\N
1dcd37b0-1db2-401d-80d1-bef6c0f180d3	采集			2018-06-01 16:26:56.739+08	2018-06-01 16:26:56.739+08	0d00f0b6-190e-430c-a626-c3e5efd2828c	3	\N
164546bd-01df-4cb9-a0f0-27590351aa74	采集			2018-06-01 16:29:14.995+08	2018-06-01 16:29:14.995+08	c7cd0af4-425e-42e5-a5ad-cc2b9369c84b	3	\N
b94c6303-8f36-416c-9210-9a8bbeb2d8e9	采集			2018-06-04 18:00:22.401+08	2018-06-04 18:00:22.401+08	51654fb3-cd61-405e-890f-ade3931c8b7e	3	\N
9b35c521-0784-4d09-987b-7bcb189bb1c9	采集			2018-06-05 14:51:24.827+08	2018-06-05 14:51:24.827+08	34e0efb7-3081-4432-acb3-1f21d62ace7a	3	1449480d-e748-4693-8f2a-1806b6b5b930
e2359d98-6bbd-4d7e-b370-d8c81c765dc0	采集2	\N		2018-06-05 14:52:57.271+08	2018-06-05 14:52:57.271+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	3	\N
54be724a-6015-4ee4-a08d-fe8b8202cfc5	采集			2018-06-01 16:02:25.97+08	2018-12-18 11:24:08.327+08	4c79d9ed-386d-4540-bff3-82caf4d9d329	3	00ce002e-e472-4ac9-b74e-52d5c06c4ee0
5451cf1c-6aec-416c-9e9c-de8d9281110c	采集			2018-05-17 13:55:17.795+08	2019-09-20 14:50:00.954+08	83881bee-4e8c-4ad6-a11f-45810d035b3d	3	5afcddd3-ab1d-4054-a530-478860d650ec
8f4cc815-04e2-482c-afbc-e565f35e0f76	噪声			2018-06-06 18:05:16.202+08	2018-06-06 18:05:16.202+08	6a257a93-25ef-48f8-bdd7-0a4674c83a7c	3	b3254088-2d5a-4bbf-a470-a560aa50cbaf
97761a49-de35-42f5-a664-d3dd6cc82d59	温度			2019-12-17 15:53:57.603+08	2019-12-26 11:48:37.28+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	3	\N
5de3dae0-fa13-4844-9c58-c960926aa470	采集			2018-06-07 15:37:44.395+08	2018-06-07 15:37:44.395+08	fb7bb438-ec7d-41fa-b7f5-737c395901bc	3	04e02398-2db0-408b-80c3-399c705ceed7
f259b7e6-928b-4ef0-8752-bfdf1a834dc4	采集			2018-06-07 14:25:03.229+08	2018-06-07 15:49:36.335+08	e458516d-60cf-4395-8ec5-df491ae97d3e	3	540f8993-f761-48dc-9c69-00851a16a2ac
5733bc64-355b-495b-adf8-e8cbae48d357	采集	\N		2019-12-17 14:55:41.997+08	2019-12-18 13:35:43.317+08	dae07648-1adf-44d5-8a90-0519a5106a76	3	20e5b611-c9db-40df-9af4-d3a28d5958f4
7fec904c-4e25-4bf8-a250-261f21994398	采集			2019-12-20 10:02:25.435+08	2019-12-20 10:02:25.435+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86	采集			2019-12-20 18:07:22.542+08	2019-12-20 18:07:22.542+08	cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b	3	\N
b3db27cd-01dc-4f48-b241-ec576d75d6b2	采集			2019-12-23 10:30:52.209+08	2019-12-23 11:03:05.626+08	51b66c98-7a13-42ce-9b80-4df528d01234	3	070668c8-be26-4e4d-96df-d2d191f31972
b77889c8-f54c-4422-91fa-2637e86d7933	采集			2019-12-23 14:13:38.184+08	2019-12-23 14:13:38.184+08	e66b2170-dac3-4a27-b9d2-46e8fe63f0ce	3	bf8622e9-ad0d-4cad-9f25-2e601f7fdee2
dfeab740-f671-4730-9a89-f5a3311f0ec8	采集	\N		2019-12-23 14:26:26.839+08	2019-12-23 14:26:26.839+08	98ae496a-649c-4719-b18f-705b32d4f545	3	\N
86e75c8f-77b4-4197-89e5-0960b7265076	采集			2019-12-23 14:42:47.827+08	2019-12-23 14:44:54.39+08	b5973739-2377-4164-9d35-d25da04d9d05	3	adc151ff-eda9-4130-9f47-0c1adb863ae8
f7726ca7-bc14-4987-bd59-204bb7fed3a4	采集			2019-12-23 16:11:23.813+08	2019-12-23 16:11:23.813+08	42fa6a20-85bd-4f18-93f4-2349e5c1e804	3	5ed1c355-baee-4949-bc0b-e59ede0b4f85
48b6a900-281e-4335-841c-814b0bbc1078	采集			2019-12-24 09:20:36.109+08	2019-12-24 09:20:36.109+08	ce8318eb-2d27-407d-9b33-95018458d60f	3	19ed6d2e-6e0f-40ef-9930-2d5b67d89d84
659208a7-903d-4473-bc1d-581dbec9e5e7	采集			2019-12-24 10:40:55.044+08	2019-12-24 10:40:55.044+08	d38d0e7a-cf28-4180-b331-9b950cfb89fd	3	3dbcecc3-94de-4b19-b3fc-4ee1220c4e79
70f035c8-998b-445d-8f3f-c5f840151e65	采集			2019-12-24 11:15:20.06+08	2019-12-24 11:15:20.06+08	aaee1bcc-dde9-4cef-8fde-7c072b96eab5	3	f1a05ee2-3ba7-4b39-bdcb-b48d605eeb39
380f8e6c-ddbe-4c2b-90ab-89abece78fd6	采集			2019-12-24 11:48:30.844+08	2019-12-24 11:48:30.844+08	964d519d-ec1b-4a4c-8a02-01402c99d348	3	b7f5077d-347e-478e-b86a-78a1b8929d25
c46b60be-3353-4715-8783-561892271905	采集			2019-12-24 16:23:58.896+08	2019-12-24 16:23:58.896+08	aa852395-17c0-4ccf-a911-c8090dd6f578	3	\N
e9412219-df4d-4a2b-bfe1-1e81e44f7a60	RTU采集	\N		2019-12-26 11:22:53.209+08	2019-12-26 11:22:53.209+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	3	\N
906764b6-5b7f-4cf0-a4a8-915452e6acc7	湿度	\N		2019-12-26 11:48:57.57+08	2019-12-26 11:54:20.607+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	3	\N
563028c4-ce25-46d9-8dc5-f32204df7ff4	RTU采集			2019-12-26 13:50:05.504+08	2019-12-26 13:50:05.504+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	3	\N
c91efe30-d394-454c-9fd0-8e95a43e79b2	电池	\N		2019-12-26 13:42:12.46+08	2019-12-26 16:38:25.386+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	3	\N
6831e820-59fa-40be-a01a-013d4aa717a4	清除数据	\N		2019-12-27 15:04:30.603+08	2019-12-27 15:04:30.603+08	d6189068-bb18-4c68-a359-8e3139ab22e5	2	08a07e96-2fdb-40b9-aa08-b106bc3092c4
954de091-0b47-4d24-b0fe-38e707df4448	采集	\N		2019-12-30 13:31:31.13+08	2019-12-30 13:31:31.13+08	f49b431e-9069-47ec-a493-fd3c45eed27a	3	d293d9df-57d3-4156-b626-195aece1b63c
dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52	采集	\N		2019-12-30 16:35:39.893+08	2019-12-30 16:35:39.893+08	2095c53d-9927-4d63-b46b-03de0fd778e0	3	\N
0650720c-5066-417d-99a8-936fcf6406a4	采集	\N		2019-12-31 08:40:13.136+08	2019-12-31 08:40:13.136+08	58bfca53-22e0-4857-81f4-c64ce00efe67	3	\N
f454e2b5-77c5-4282-aceb-bf86690270ba	采集	\N		2019-12-31 09:03:23.522+08	2019-12-31 09:03:23.522+08	1d22d353-6d39-4a84-bd17-aef0bc6f32f8	3	\N
15046a7e-2b8d-446c-963e-0f8af7fe7475	采集	\N		2019-12-31 09:09:31.626+08	2019-12-31 09:09:31.626+08	a581eb27-4334-4d9f-b28b-2c4b1e8136d5	3	\N
83b1e284-b0e5-43d1-8881-bc7fc3317dd9	配置下发	\N		2020-01-02 14:23:23.85+08	2020-01-02 14:23:30.823+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	2	0e7050bc-bc01-4f3e-8758-23b2ba883e6a
c8044788-3713-45ab-a8f8-cd3b8b3db86f	采集			2020-01-06 15:12:33.719+08	2020-01-06 15:12:33.719+08	b1ce7bb7-4d25-468a-ab2b-22347d65b166	3	\N
65968c97-efd5-4c64-9f9c-79017790f273	采集			2020-01-07 09:52:02.054+08	2020-01-07 09:52:02.054+08	c1e63dc1-8a68-4dad-a180-c652ea587e83	3	32590ab5-aa81-4219-bb35-9529dbe852dd
32c69be1-0051-4e6c-8821-fe8b2a3f8215	采集			2020-01-07 14:23:09.073+08	2020-01-07 14:23:09.073+08	afba576d-0e5e-48cf-a9fa-18a3f986d812	3	\N
5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	RTU	\N		2020-01-10 10:53:10.595+08	2020-01-10 10:53:10.595+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
b4574024-8282-445a-b3d6-068582522d6a	采集			2020-01-14 13:53:59.833+08	2020-01-14 13:53:59.833+08	adcecf0d-2b34-4a55-abc2-78a2439b1567	3	3121ae46-41f3-451f-9995-208f16460648
4b26b77c-de95-45d0-b83b-ee0c410e20a0	采集			2020-01-14 13:57:25.419+08	2020-01-14 13:57:25.419+08	742ee585-31d3-413c-b4f0-44d175b45bf5	3	3121ae46-41f3-451f-9995-208f16460648
74475f60-31b1-44f8-b887-60013184ef38	采集			2020-01-14 14:00:56.898+08	2020-01-14 14:00:56.898+08	457137ac-994e-4445-8acf-12172464a82d	3	3121ae46-41f3-451f-9995-208f16460648
d3d60241-e4b2-445a-bde1-5e5e83bbcace	采集			2020-01-14 14:02:50.26+08	2020-01-14 14:02:50.26+08	4abe48e9-ae10-4cd4-85a6-ad3970d8b928	3	3121ae46-41f3-451f-9995-208f16460648
6aa8f789-816f-4edf-9d5f-b3a4c3a34e2c	采集	\N		2018-09-07 09:26:46.455+08	2021-01-28 15:15:41.965+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488	3	0a4cfb69-6284-4d4c-946f-994b662579b0
1e068f94-2089-43a7-89d1-f2c5be29ab86	采集			2018-06-07 15:54:22.276+08	2018-06-07 15:54:22.276+08	66717a8f-3c59-41e0-ab21-bf6bcdde55ea	3	04e02398-2db0-408b-80c3-399c705ceed7
e0fd6ac0-4c4d-4683-9227-d614184aefe2	采集	\N		2019-12-31 08:43:29.744+08	2019-12-31 08:43:29.744+08	d43df443-364f-4958-b978-cb0e9ee0e532	3	\N
f562d703-5cde-4a00-b1c8-1be54d51da9d	采集	\N		2019-12-31 09:06:25.789+08	2019-12-31 09:06:25.789+08	246ba00c-51d3-4e43-b651-4fd45ccd8ca0	3	\N
514bb698-2903-47d6-9749-67f6ead2de82	采集	\N		2019-12-31 09:12:37.786+08	2019-12-31 09:12:37.786+08	e8283251-3a4d-40f8-a7cc-581af3168aee	3	\N
ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27	采集			2020-01-14 13:59:03.969+08	2020-01-14 13:59:03.969+08	1f143b2d-d58a-4b04-bec7-8a396e900c90	3	3121ae46-41f3-451f-9995-208f16460648
9a4964ae-b88b-47d8-8007-8ddcf068d4bf	采集			2020-01-14 14:04:32.646+08	2020-01-14 14:04:32.646+08	d6aefb14-b750-4133-94f4-e51c3df7743f	3	3121ae46-41f3-451f-9995-208f16460648
dc3fee9e-0633-4af5-9ef7-39f838c935e9	采集			2018-06-07 15:54:34.226+08	2018-06-07 15:54:34.226+08	260e307b-9a7c-4f75-90cd-79710a7d0221	3	540f8993-f761-48dc-9c69-00851a16a2ac
d39ca936-5931-458b-ac6a-3afd59f67b53	采集	\N		2019-12-31 08:47:53.128+08	2019-12-31 08:47:53.128+08	ccf64c47-a5cc-46bc-92d7-0ffa046876a4	3	\N
cd9e5fa9-97a7-4494-ac8f-69c526262d6d	采集			2018-06-11 14:59:44.59+08	2018-06-11 14:59:44.59+08	c9a11ba9-fb0d-4a82-b480-7539948c9b56	3	1fb03ffc-fd93-4ea6-bf06-11311a655212
66df2f89-5584-46b3-ad9e-0d1932fcf096	采集	\N		2018-06-13 16:58:13.623+08	2018-06-13 16:58:47.56+08	2d547109-73ea-48f5-99b8-48dd9236e19b	3	65dfe3cd-075d-490f-a2b5-d5c39f4cbc05
6be3220f-3cb0-4081-8ef4-a7c51cecda48	采集			2018-06-14 10:34:18.656+08	2018-06-14 10:34:18.656+08	4efc7878-409b-4195-b3e6-ed93b829fed9	3	ea741512-cf76-4546-8b90-3cea1faf6018
a63c5547-2825-4f53-93cd-b8cc73368876	采集			2018-06-15 09:39:55.607+08	2018-06-15 09:39:55.607+08	88155a32-3321-4f89-86ba-c204d101cce7	3	3ba4748d-4a2e-4b5a-84ff-3e36e397671d
50c50ca6-2fa4-4c78-903e-78fccdee6100	1			2018-06-15 17:09:27.709+08	2018-06-15 17:09:27.709+08	279c47e7-04c2-4841-8fdd-263a5f4af93a	3	b3254088-2d5a-4bbf-a470-a560aa50cbaf
3c05da19-bd51-48e3-be16-a1b32bbadf5b	采集	\N		2018-06-15 17:10:43.244+08	2018-06-15 17:10:43.244+08	3f564278-8edf-4fe7-a35e-21b91e6d4129	3	\N
0ae8ed9d-56c2-4b07-b81a-a23a10192d1d	采集			2020-01-14 14:06:32.986+08	2020-01-14 14:06:32.986+08	23ecb98e-e536-4313-9234-07622fea082f	3	3121ae46-41f3-451f-9995-208f16460648
f05bdb3d-41b6-46f7-98f6-a1f132c38cf1	采集	\N		2018-06-19 09:47:25.819+08	2018-06-19 09:47:25.819+08	9aff4ead-342b-40e8-b365-6a53212df7dd	3	723d4fd1-f2c5-4fc1-97a9-9843cdb10693
6f11ad74-c92f-4122-8e48-31a6684e862f	采集			2018-06-19 09:48:17.022+08	2018-06-19 09:48:17.022+08	b15a4ae0-8100-4809-978d-50914fdc2f32	3	\N
d41d604d-7dba-4a66-902c-8b1257cde117	采集			2018-06-19 09:50:26.18+08	2018-06-19 09:50:26.18+08	1991c0ef-7dd2-4290-ad34-c8bc82161d2f	3	\N
e9b6e859-1dc9-499b-8656-99edd12b4157	采集			2018-07-02 10:37:28.265+08	2018-07-02 10:37:28.265+08	20e28988-ea9b-4757-9f79-22dce525207a	3	9280880b-8a43-4904-8993-ed0176d23888
23c218cd-7c9e-4ad1-bc78-2132a932fc9c	采集			2018-06-20 10:26:27.052+08	2018-06-20 10:26:34.626+08	0f179575-cae8-4888-a644-1b66be3f8de2	3	6ef7b3a4-1658-4205-ae8b-1260775da50f
7ce72daf-c0a1-4752-9e13-53fb00d348da	采集			2018-06-20 10:32:24.754+08	2018-06-20 10:32:24.754+08	cf379e04-548b-4a35-bafd-4ce52ae84b07	3	\N
d8aa757b-681c-4522-a76f-b2484a854563	采集			2018-06-20 10:35:52.509+08	2018-06-20 10:35:52.509+08	e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2	3	\N
e3ec18ee-3f12-43f2-ba02-ac370abbc877	采集			2018-06-20 10:35:53.283+08	2018-06-20 10:35:53.283+08	e2b308df-8629-49a6-ab1d-397df5ab4e45	3	\N
e98557d0-139a-4938-acfb-9870abe496bc	采集			2018-06-20 10:35:54.637+08	2018-06-20 10:35:54.637+08	d116c1db-0a8e-4cd7-a021-6dedf5987ec4	3	\N
3fe35a29-777b-4a79-a6fd-2e57e60caa11	采集			2018-06-20 11:04:00.672+08	2018-06-20 11:04:00.672+08	bfa4cd6a-f4fc-4087-8322-c0dd793cfd39	3	\N
91e8b285-92af-4ba8-a401-14561bfe4d82	采集			2018-06-20 11:04:01.397+08	2018-06-20 11:04:01.397+08	f88c2cc7-2f89-40e1-ab48-28a17b001737	3	\N
e607b37a-17fe-4e85-9316-7eed2a219c25	采集			2018-06-20 11:04:02.546+08	2018-06-20 11:04:02.546+08	4c874d9f-456e-420e-9057-3a8c7de8368c	3	\N
87fdf1e4-fdd0-44c6-9bc3-bc5651c19030	采集			2018-06-20 11:13:47.059+08	2018-06-20 11:13:47.059+08	b58bb3be-9cea-460b-b91b-0281432cc158	3	\N
0c4dd41a-453b-440b-a28b-26d7768832d5	采集			2018-06-21 13:39:44.925+08	2018-06-21 13:39:44.925+08	b2d406aa-3d16-4f6a-a0cf-201673678a8f	3	b0bb3d52-04e2-4852-9ad9-b5e8a7e4b543
934f46a0-88fb-47d5-95c9-745cdaf1c07e	采集	\N		2018-06-21 11:11:17.377+08	2018-06-21 16:34:49.847+08	9fbee940-6591-45b4-a3a9-83abc9c76e85	3	cf1d888a-fc06-4874-9bd6-246953fa248b
686bfb15-1d0d-459e-b2e4-4cf146946712	采集			2018-06-22 17:30:28.404+08	2018-06-22 17:30:28.404+08	9c410206-a22f-4b1c-b86f-32fda9f61ca2	3	c0f2f402-ab7b-40f7-ba47-a8e42e42b380
7f0bdd9e-f9d0-4739-b764-18f3c615ca79	采集			2018-06-25 09:05:33.116+08	2018-06-25 09:05:33.116+08	a045d540-6405-495e-af5f-ea705c094472	3	\N
8c6c2c54-4620-4096-8773-6a3ee2ffc168	采集仪	\N		2018-06-25 11:28:30.842+08	2018-06-25 11:28:30.842+08	d32eacce-7db0-4c15-b17c-f1d870389c14	3	\N
16b92db5-4d33-4218-a6d5-7fa7c24194b0	采集			2018-06-25 15:29:28.09+08	2018-06-25 15:29:28.09+08	d56a9be3-7a4a-4c75-91ec-f524bb273574	3	6a99d6ca-10ea-424d-a9cd-48ea93b1d1f9
400e5759-c7d2-4e45-9d7e-94363490342c	采集	\N		2018-06-26 10:53:40.182+08	2018-06-26 10:53:40.182+08	a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca	3	\N
1f491d6b-c57b-44a7-a799-a92a15e7f5e4	采集			2018-06-27 14:02:16.371+08	2018-06-27 14:02:16.371+08	847fb856-ef0a-493b-9a30-d2876243481a	3	316aaf98-e85c-4f4f-993c-d57e8252c5dd
fa9efaaf-b27b-4f77-90c3-fa0f903666ed	采集			2018-06-27 14:04:58.291+08	2018-06-27 14:04:58.291+08	948c741a-f999-4abe-ae1f-64c23e27462c	3	\N
b4e49abe-4948-4f36-978f-8804c1531ca1	采集	\N		2018-06-27 13:45:13.586+08	2018-06-27 16:44:09.527+08	0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa	3	c6ff5a63-12be-4695-87d7-bad84d211561
419116d4-4614-4d66-bc30-ce2394eed251	采集			2018-06-28 15:28:03.059+08	2018-06-28 16:24:22.557+08	ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8	3	80768b00-fc5e-4846-bcc6-6cdd0e2ec227
db66c7ee-46c0-4931-ba0e-67e0a1231256	采集			2018-07-03 19:14:02.261+08	2018-07-03 19:14:02.261+08	5838090c-ced5-4fb2-9320-53c516ee9b33	3	\N
da6a8c8f-0a98-4650-8b12-650a3e4e5914	采集			2018-07-04 12:31:15.225+08	2018-07-04 12:31:15.225+08	515030fd-3993-442a-89f7-ca844c5671c0	3	343ae175-f499-4292-8877-7f574c552f67
a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	采集			2018-07-04 16:49:20.267+08	2018-07-04 16:49:20.267+08	32349c76-d117-4331-8a10-9b7ea057c2ab	3	1e0edcee-1fb7-4601-b3ac-6f6f59593485
ead31896-f035-4ed5-8732-526210a6bfa2	采集			2018-07-05 14:21:10.26+08	2018-07-05 14:21:10.26+08	9fab42c0-0c95-4fd2-a470-08437473a2f4	3	80333e13-97f8-4502-b053-ab8fc9e0ebbc
58c2aba6-dd26-4663-8976-a0b155297d3e	2233			2018-07-06 17:14:37.674+08	2018-07-06 17:14:37.674+08	e442b9a5-066f-4cde-b5f3-9709a193c328	2	\N
3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1	采集			2018-07-09 10:14:00.84+08	2019-06-27 13:53:14.465+08	70dd7ed7-45de-4c9c-a299-7c0686775dc3	3	f4925c79-04d0-42e2-b326-cf291ed7589d
4563e22f-dc9b-4a86-a3df-5cae88d78dfa	采集			2018-07-09 11:43:50.748+08	2018-07-09 11:43:50.748+08	427e8976-edd3-4467-8900-587c12fbf6cf	3	976bf9fd-9b27-4c62-a317-915325daf8d4
e51184be-7ba9-4184-af5e-374044450523	采集			2018-07-10 11:55:47.365+08	2018-07-10 11:55:47.365+08	2bd37bef-1f44-47e9-8086-b0343328eb0c	3	5be4b8c2-7201-4565-be1d-2af8209fc3e4
7624deeb-3f22-45ff-8a6c-a588e617c17b	采集			2018-07-10 17:19:28.455+08	2018-07-10 17:19:28.455+08	d8b7d673-b192-4f7a-84d9-0946b8d30f41	3	35f2a891-7956-4b9f-b57d-4e4c5c08b286
72516f72-2faf-4bba-8e87-212b422ea7e7	采集			2018-07-11 10:25:55.125+08	2018-07-11 10:40:58.169+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	3	b5dd2450-1c6c-4323-a9aa-4e0a4d76e6e1
08e932f8-151e-489f-9035-af9518581665	采集			2018-07-11 10:25:15.541+08	2018-07-11 10:41:40.942+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	3	2777524a-37b0-433f-9702-3db783dda44a
99b24f8b-f852-48ef-954b-cf42248669af	采集	\N		2018-07-11 14:05:22.426+08	2018-07-12 09:40:10.012+08	c3455ece-210c-4203-af82-88b61e4b2584	3	81741880-ebc8-42d9-bf53-1c6def33376c
da84feba-aff0-4b51-baee-a20f8e196dfe	采集			2018-07-13 16:15:51.11+08	2018-07-13 16:15:51.11+08	cb6fd3f6-2591-4242-b0a8-dbb037543831	3	82631ec7-32ec-4daf-ba35-fcdbf2802c5d
68ac3567-5ac9-48f6-9dc3-121be2e321b0	微功耗	\N		2018-07-18 09:56:01.874+08	2018-07-18 09:56:01.874+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	3	\N
621548d2-0189-47af-9d78-c0e928b92373	微功耗			2018-07-18 09:51:58.263+08	2018-09-04 15:13:41.044+08	e32efbee-3c36-4be6-a4d3-d5058acf1fda	3	\N
8f5658b2-c72d-4918-8f4c-e23b57d193a6	微功耗	\N		2018-07-18 09:59:05.263+08	2018-07-18 09:59:05.263+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	3	\N
631fe06e-045c-4b18-b9a5-a6e18d8f3511	采集	\N		2020-01-14 14:07:48.273+08	2020-01-14 14:07:48.273+08	72c4a62b-a2d2-4e68-9686-cc325cd79f74	3	3121ae46-41f3-451f-9995-208f16460648
985c0298-b963-4823-8fdc-38feb70806e1	云采集	\N		2018-08-01 09:32:50.694+08	2018-08-01 09:32:50.694+08	76288807-186e-4444-a1ce-6be599aacfd2	3	\N
5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	采集			2018-07-19 09:35:55.151+08	2018-07-19 09:35:55.151+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	3	\N
95f120f4-02d5-454d-a848-b2749f786d6a	云采集	\N		2018-07-19 09:35:55.175+08	2018-07-19 09:35:55.175+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	3	\N
b0422984-356d-4020-ab24-9dd7cdd4d8fd	采集			2018-07-19 09:35:56.549+08	2018-07-19 09:35:56.549+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	3	\N
2858f0e6-c2cb-4a9a-9efd-46af31146b5b	云采集	\N		2018-07-19 09:35:56.568+08	2018-07-19 09:35:56.568+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	3	\N
55950607-45e9-4bdd-a586-388468bf4669	采集			2018-07-23 15:18:06.252+08	2018-07-23 15:18:06.252+08	7da8e64c-b909-4802-9639-84077cefa569	3	7f9f00f9-1b47-4a0e-a210-cd495fa0711d
b41fcafa-5351-45f4-9151-991053b2229e	采集			2018-07-23 15:29:31.274+08	2018-07-23 15:29:31.274+08	3bd37805-2e49-4fdb-8bab-d54c72112de8	3	\N
dd168476-c9b6-4bdf-802c-dd55353c4f42	采集			2018-07-23 15:31:50.03+08	2018-07-23 15:31:50.03+08	1f235ab7-7bbb-4c4a-b106-7a0a435448bf	3	\N
dafbdb25-384d-4431-b8b4-13396a4c781b	采集			2018-07-23 15:34:09.535+08	2018-07-23 15:34:09.535+08	3c312b4a-0bd1-4ee4-acf1-5a51f99ed087	3	\N
4c99b35d-021c-4e0f-a014-5516ee92a8b2	采集	\N		2018-07-23 15:23:40.529+08	2018-07-23 15:38:47.529+08	4a1c835d-1f99-4d95-8d21-ceab11c714d3	3	01ed9514-09fa-4a3a-be3e-42040e39b1eb
f6f2bffb-7103-4421-aade-21c3c696c8dc	采集			2018-07-23 15:37:15.306+08	2018-07-23 15:39:01.57+08	edfaccd5-edfd-4895-a519-541faa623db3	3	4f567512-fd50-45b1-8ffd-b635123d9749
0d993c54-d0eb-406e-beb3-422b28dd8bd2	采集			2018-07-25 09:50:10.78+08	2018-07-25 09:50:10.78+08	6d00ebcb-1976-40ff-8c6d-99e9df45035a	3	3bed9937-4292-47f9-ad0a-3f39e26791f6
0e6129b0-ae01-4822-929e-e8a93b3a63aa	微功耗采集	\N		2018-08-01 09:33:09.733+08	2018-08-01 09:33:09.733+08	76288807-186e-4444-a1ce-6be599aacfd2	3	\N
5c056ed2-d4cf-4083-82cc-8d7d0b564f4a	采集			2018-07-27 16:11:26.073+08	2018-07-27 16:11:26.073+08	75bcea50-3625-4248-9181-b8f541953270	3	09635bcc-db2c-4e5a-b933-638501dad998
6efe879d-8d3e-4968-8824-131f8afe5aa8	采集	\N		2018-07-27 17:05:47.925+08	2018-07-27 17:05:47.925+08	ab820c4a-1397-4605-b9d5-68aea01ab2b5	3	591019a9-bb7b-4e46-88f3-7da42a31edea
fe52923b-3bb6-4390-be5f-32733342b67b	采集	\N		2018-07-26 16:40:02.033+08	2018-07-28 17:30:16.806+08	039664c3-5d24-4edb-b251-7540c98dc2ce	3	\N
a59e747f-2b34-4867-bd4b-47994c6dc9b7	采集	\N		2018-08-01 16:05:37.451+08	2018-08-01 16:05:37.451+08	9f4bea7e-e18f-431e-af3b-9bac229c98c6	3	f9c35eff-dce1-418c-9286-093f797155d2
44ac981a-1670-4e29-8c35-d9adb0f84534	采集			2018-07-28 17:20:27.366+08	2018-07-30 13:55:25.981+08	d0e4432b-aeb4-4004-b728-9ef120f0e1db	3	fd174c97-b010-47ac-a9fb-9436756cac7f
0ef31610-c649-404b-849c-6a7d5a1d9d73	采集	\N		2018-07-31 09:20:37.977+08	2018-07-31 09:20:37.977+08	8d37a4fb-8add-44a4-ad5e-a8d190e87209	3	0472653c-720b-4ca7-ae8e-a16b9ed01087
4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	微功耗	\N		2018-07-31 14:23:39.296+08	2018-07-31 14:23:39.296+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	3	\N
fbeb2848-9908-4883-878a-10608a621168	微功耗采集	\N		2018-07-31 14:54:09.743+08	2018-07-31 14:54:09.743+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	3	\N
b61317eb-c793-4b2f-b680-2d15a061ec91	微功耗采集	\N		2018-07-31 15:08:50.43+08	2018-07-31 15:08:50.43+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	3	\N
d702af0d-ac2f-48c9-bef4-31f6a5659b5a	微功耗测试	\N		2018-07-31 15:13:27.656+08	2018-07-31 15:13:27.656+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	3	\N
b69bda25-731f-49db-b199-83207febe2ed	微功耗测试	\N		2018-07-31 15:16:09.266+08	2018-07-31 15:16:09.266+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	3	\N
73e248c9-5515-4482-ac0a-af10af977c95	微功耗测试	\N		2018-07-31 15:19:17.214+08	2018-07-31 15:19:17.214+08	9110f259-e269-446d-afa3-798069f4534d	3	\N
42c99fb8-8f40-4693-952f-7124b9f38cda	云采集			2018-05-16 17:44:54.893+08	2018-07-31 16:18:49.154+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	3	\N
f67c6ffc-0414-4209-85ee-74153dcddd7d	微功耗采集	\N		2018-07-31 16:19:27.204+08	2018-07-31 16:19:27.204+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	3	\N
dd1508e1-c94d-46a9-9a86-08a80d670853	微功耗采集	\N		2018-07-31 16:20:52.833+08	2018-07-31 16:20:52.833+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	3	\N
b5a575d9-25af-47ce-8a43-89a35317f2a1	云采集	\N		2018-07-31 17:08:09.203+08	2018-07-31 17:08:09.203+08	b3f251c1-ab5e-4427-8b38-9180d6544783	3	\N
292bd1e7-c27c-4437-a899-3c61485b89e3	微功耗采集	\N		2018-07-31 17:08:23.251+08	2018-07-31 17:08:23.251+08	b3f251c1-ab5e-4427-8b38-9180d6544783	3	\N
5066bc97-d314-4800-891f-b7b4031c1ffc	微功耗采集	\N		2018-07-31 17:13:47.367+08	2018-07-31 17:13:47.367+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	3	\N
49ca2a7b-0092-4889-a0ee-6146802ec384	云采集	\N		2018-07-31 17:21:42.685+08	2018-07-31 17:21:42.685+08	11a0df92-8921-470b-af9c-d7593b8b1f78	3	\N
95686247-9ee5-41d3-9cc8-08fa377da8cc	微功耗采集	\N		2018-07-31 17:21:58.145+08	2018-07-31 17:21:58.145+08	11a0df92-8921-470b-af9c-d7593b8b1f78	3	\N
273814e4-c4be-4198-9dd6-4d1f19cb0033	云采集	\N		2018-08-01 09:11:25.788+08	2018-08-01 09:11:25.788+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	3	\N
55fe806c-652f-4b2c-a677-fa5aea862762	微功耗采集	\N		2018-08-01 09:11:38.442+08	2018-08-01 09:11:38.442+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	3	\N
5d00a146-91e7-49d0-bd5e-930d092c386b	云采集	\N		2018-08-01 09:29:11.981+08	2018-08-01 09:29:11.981+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	3	\N
08b2e830-9291-4846-89e5-483cf8eca55e	微功耗采集	\N		2018-08-01 09:29:21.76+08	2018-08-01 09:29:21.76+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	3	\N
0d7a1f75-6a7c-4626-8d33-2227c919115c	采集			2018-08-01 16:20:24.312+08	2018-08-01 16:20:24.312+08	82edfa3d-c080-4212-ad83-32be43b48841	3	\N
d926943e-d400-4c4c-83c8-2c3a6fd62c1c	采集			2018-08-01 16:25:49.744+08	2018-08-01 16:25:49.744+08	915fc949-c75f-47a9-8ba5-f516f0eb6228	3	\N
48082fb5-546a-4106-9c2c-674aec2640c1	采集			2018-08-02 10:31:54.576+08	2018-08-02 10:31:54.576+08	705738a1-f330-4875-a2a0-23c30ec9f5d4	3	\N
04709fe5-6ce9-4415-99f2-f349e03992fe	采集			2018-08-02 10:33:18.535+08	2018-08-02 10:33:18.535+08	6b4905df-caae-4bcc-a8a7-c99cb7866e06	3	\N
82623747-98d9-4dfa-9a9a-08188d0311e9	采集			2018-08-02 10:35:48.083+08	2018-08-02 10:35:48.083+08	8e67e334-231e-467c-8868-c41461d9463e	3	\N
87e911f0-3894-42f6-a05a-80c30c7e565e	采集			2018-08-02 10:41:04.606+08	2018-08-02 10:41:04.606+08	77a4b2d1-adf0-4cab-be7e-5f4635e4063f	3	\N
812c58c6-4cd2-48fd-942a-2024f91035bb	采集	\N		2018-08-02 10:37:02.586+08	2018-08-02 10:45:02.544+08	e1f36777-486a-4527-a30f-61d17b7a8796	3	06fa55b0-c96c-4704-8998-ffd96d4feaa2
ad9f806b-21ed-4a46-b6fb-964f135f3efd	采集			2018-08-02 10:31:04.108+08	2018-08-02 10:45:44.047+08	2cbbf402-789b-4c54-b408-7e61934ebd4d	3	87d43c5d-15f4-462d-85d9-dae114bfa3ab
20a173c1-56c8-4576-8edc-906bdb04f749	采集			2018-08-03 07:13:57.954+08	2018-08-03 07:13:57.954+08	cd27d23f-a55d-4ce0-8c59-33675bb5ad62	3	\N
c3ed842a-d6dd-4db8-976c-2f12501159a0	采集			2018-08-03 07:28:29.458+08	2018-08-03 07:38:12.888+08	f556a96a-5649-49c8-beae-aa08f2faa752	3	\N
c5d291cd-bb26-4192-9454-e686cb8c1f9a	采集			2018-08-03 10:29:52.69+08	2018-08-03 10:29:52.69+08	777c9799-3abe-4eee-a583-f5e6fac01946	3	\N
380bb834-b2d8-495f-bccf-075375161a49	采集			2018-08-03 10:36:00.512+08	2018-08-03 10:36:00.512+08	5f65c5dc-c32f-4e64-b40e-97f907d7c0fd	3	\N
e17bf88d-d539-4c9d-9504-37c08672d5ba	采集			2018-08-03 10:41:17.485+08	2018-08-03 10:41:17.485+08	bc1228dd-0195-4fba-b21f-178b91e4cf60	3	\N
11373c99-1270-4b66-9d6d-d19c6ad95118	采集			2020-01-14 14:10:01.18+08	2020-01-14 14:10:01.18+08	1352d63c-d97b-4dd4-8289-0de6cad01db0	3	3121ae46-41f3-451f-9995-208f16460648
a0cd4a87-661c-43de-928c-22c5d63cbeee	采集			2018-08-07 15:28:19.798+08	2018-08-07 16:38:34.245+08	c8b20fe8-531f-47aa-96cd-3d48ea0bc238	3	3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2
29e946c4-e67d-4d58-aba2-a16897f4da42	采集			2018-08-07 15:28:53.905+08	2018-08-07 16:40:19.915+08	d6fe2897-a3e2-4aa8-9ba2-459831131cfa	3	f57a3855-220e-4403-961c-ffe49145a71c
201d630c-2dfb-4918-8d48-0dc931b2337d	采集			2018-08-09 14:40:15.57+08	2018-08-09 14:40:15.57+08	89ac2618-0c0c-45b5-a8a1-401e2c16189c	3	\N
73438936-0d17-4107-85bc-2348926e9746	采集			2018-08-09 14:40:18.314+08	2018-08-09 14:40:18.314+08	2975be5f-7c2a-41d3-9157-e723ecfa9120	3	\N
420c05f9-c835-4821-ac21-7cf1575dabb1	采集			2018-08-09 14:55:00.872+08	2018-08-09 14:55:00.872+08	cc6193d5-14b6-4231-a6f6-905db9c4a33c	3	\N
0e3776d4-f177-404e-90be-59cb211c9921	采集			2018-08-09 15:00:04.571+08	2018-08-09 15:00:04.571+08	793d9a65-784f-4f17-840d-51ac6a2f2ddd	3	\N
c52b1fc4-5d46-4f04-8fba-d9a9e6335b39	采集	\N		2018-08-09 16:03:13.763+08	2018-08-09 16:03:35.219+08	6dab819c-b584-4aea-bf13-c12a6a595abb	3	637e7e3d-43b9-49a5-be9b-bef0bda0ccbb
fb71513f-dc49-416f-b4d1-3dab69eaf1ac	采集			2018-08-09 16:17:22.301+08	2018-08-09 16:17:22.301+08	f698a0a5-7e2b-4c2e-a66f-c33ff5f05689	3	\N
c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c	采集			2018-08-09 16:19:28.509+08	2018-08-09 16:19:28.509+08	6bd84b2f-3226-42ea-94b6-f740a5b60878	3	\N
8b8cab39-63aa-4ef8-95d7-a42959be4592	采集			2018-08-10 09:21:02.386+08	2018-08-10 09:21:02.386+08	145b9864-56d6-41e0-9a6c-3c68394e65e7	3	\N
6c0449e2-22ab-4974-9d49-244a1ef1d08b	采集			2018-08-10 09:23:32.76+08	2018-08-10 09:23:32.76+08	05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb	3	\N
f9df0040-a2b5-442e-9fce-4787a7c308c9	采集			2018-08-10 09:33:09.091+08	2018-08-10 09:33:09.091+08	307cf077-4fd9-4e6c-a60b-33fddf42a0e4	3	\N
2528fa6d-da6e-4e88-9316-d13536a1a987	采集			2018-08-10 09:35:53.05+08	2018-08-10 09:35:53.05+08	9a9aa01c-948e-49a2-964f-cee49def906c	3	\N
cde7d76f-5843-4001-88b3-5eb18836fc8f	采集			2018-08-10 09:43:03.962+08	2018-08-10 09:43:03.962+08	f63309ff-a714-4bd7-9052-30c217fa982e	3	\N
0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83	采集			2018-08-10 09:48:55.485+08	2018-08-10 09:48:55.485+08	7789641b-3a02-4369-b80e-894bacaa5cec	3	\N
37ee5f1d-d770-4c7a-b901-3f060b88fe86	采集			2018-08-10 09:50:00.672+08	2018-08-10 09:50:00.672+08	342fde79-43b6-4d56-b5bc-37de3056e9fd	3	\N
b15c0841-8700-42f6-ad9e-cfcd0c6f5665	采集			2018-08-10 13:58:44.439+08	2018-08-10 13:58:44.439+08	290b9462-1958-4dce-a86f-a0f1c503c660	3	3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2
b0e56599-c58d-4d0a-8a80-f19855b36c80	采集			2018-08-10 14:52:45.124+08	2018-08-10 14:52:45.124+08	bbedec49-a055-4238-9e60-98ad22b84379	3	13cc59b8-9b01-4cef-88c9-40d4d9b3d798
fee66142-81ed-4cdc-8465-19d0f7acd6ec	采集			2018-08-10 16:23:43.224+08	2018-08-10 16:23:43.224+08	030c456b-e97a-42a6-93b7-a6f48fcce4a6	3	\N
4d1bca0a-fa5c-4af2-adc9-ded21aff72da	采集			2018-08-10 17:03:20.991+08	2018-08-10 17:03:20.991+08	8cb3528e-cadf-463e-9db2-003bb899ebb6	3	\N
249bf211-a7fc-4649-977a-1ba27e2fc683	采集			2018-08-13 10:56:46.616+08	2018-08-13 10:56:46.616+08	6b2b2d8d-a99b-4052-9a48-2c12125e2f41	3	67b012f5-78e5-44d1-a465-db543bdc1c00
0ad35b65-43ba-4521-bc02-63bd34be0a39	云采集			2018-08-14 14:13:28.649+08	2018-08-14 14:13:28.649+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	3	\N
f9a40c12-42a9-45fa-b780-10df712e19af	云采集			2018-08-14 15:32:39.125+08	2018-08-14 15:32:39.125+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	3	\N
251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	采集			2018-08-14 16:18:30.09+08	2018-08-14 16:18:30.09+08	ebd999bc-a789-48f2-ac00-a15049b09e50	3	\N
c7561cfc-94ff-4fcc-bdeb-63023c74839f	采集			2018-08-14 16:26:33.741+08	2018-08-14 16:26:33.741+08	3746abdd-af23-4d98-bca0-f29909e0d0c3	3	\N
b4b6ffd7-09a1-4348-a270-a89f768a51be	采集			2018-08-14 16:31:33.44+08	2018-08-14 16:31:33.44+08	e405d9f6-8b46-4089-94e2-1437036d040b	3	\N
98b425ce-50b5-4c14-98e0-c13a615cf246	采集			2018-08-14 16:36:12.218+08	2018-08-14 16:36:12.218+08	1f342dfc-9de3-4d9e-b772-416fa0bfe58a	3	915cd9ab-b893-4670-ad79-93a2c14523bd
17c83e03-bd23-47ac-ad6f-637082b66444	采集			2018-08-15 09:48:18.558+08	2018-08-15 09:48:18.558+08	4e3f8da9-5108-45ea-a042-dfab49718c5b	3	43291a09-50f1-4287-8c7c-b51503799fd1
8a367437-ef39-437a-9e88-1dc4c6c42d14	采集			2018-08-15 10:53:47.75+08	2018-08-15 10:53:47.75+08	a5da9800-2b00-4701-8793-3aaad3e140f6	3	da2dc742-e8d6-4906-9581-128b6b5f3198
3dbaa950-0bf5-4e4c-966f-8bff21df1e2f	采集			2018-08-15 14:38:59.637+08	2018-08-15 14:38:59.637+08	9f845f40-f7bf-4fe7-828e-8f488aff934e	3	\N
a46e04df-5fc2-442e-8ca0-fc7da830f183	采集			2018-08-15 14:39:57.31+08	2018-08-15 14:39:57.31+08	a99d7cc9-7afe-4415-93dd-bcdc193c5121	3	\N
39fc7575-6835-4685-a956-dbbf5987d27b	采集			2018-08-15 14:40:39.265+08	2018-08-15 14:40:39.265+08	b0c20a76-7e51-479c-9837-1516be5a1567	3	\N
bdca95f5-1a68-43cb-8bbd-0940bd4f861e	采集			2018-08-15 14:40:50.45+08	2018-08-15 14:40:50.45+08	ada233fb-1f59-4f50-991c-049331716bbf	3	\N
3f7364b2-c949-4499-a485-82f0a141968e	采集			2018-08-15 14:41:47.946+08	2018-08-15 14:41:47.946+08	b15e4068-3a0b-43cf-898a-151d9a211756	3	\N
b8376c42-2314-48d4-9cc4-34b538f2862e	采集			2018-08-15 13:45:10.786+08	2018-08-15 16:28:31.834+08	0b9ab6dc-b8e5-4f20-a507-567be8892e4f	3	aa7da275-9e58-4b7e-8fe4-7abbcb421491
face6568-949b-4dcf-a799-fec9eafe6dd5	采集			2018-08-15 17:13:27.448+08	2018-08-15 17:13:27.448+08	c1738ab8-25cd-4216-823d-0159c2d9fc82	3	\N
244b1f17-13d5-4b46-88b9-2a48538f66f4	数据			2018-08-16 15:26:39.991+08	2018-08-16 15:26:39.991+08	3553eba2-db23-4cb8-b96d-e0d443644324	3	\N
198e6298-06fe-49a7-9245-eaca7a85f263	数据			2018-08-16 16:25:36.773+08	2018-08-16 16:25:36.773+08	7bd233a3-8bb9-45d7-8298-278d0288de46	3	\N
25789235-88db-4ea7-9a8a-5d4aeb5f9532	q			2018-08-17 11:27:24.524+08	2018-08-17 11:27:24.524+08	0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b	3	6bf88814-ee3c-4c50-b47e-e60248e91670
70486f7c-d11e-4014-be32-71a2e8724359	采集			2018-08-17 11:33:00.266+08	2018-08-17 11:33:00.266+08	df1112e3-a161-4260-850f-8f6644389623	3	\N
076391b0-0f5f-44c8-8b51-cf3c894b8b88	采集	\N		2018-08-17 11:39:56.605+08	2018-08-17 11:39:56.605+08	46272932-067d-4fa2-87ac-85a866b4f691	3	\N
6105dff0-c96c-439e-8101-e0e7906834e0	采集	\N		2018-08-17 15:55:31.656+08	2018-08-17 15:57:29.841+08	ba3d723e-88ac-4e9a-976f-43d43081e621	3	c10e1f69-fac2-446b-b907-7b94e3da49ed
ce369680-ed47-4e58-8f38-4cbc786572a1	采集			2018-08-24 09:09:28.328+08	2018-08-24 09:09:28.328+08	bbcd2556-3714-4360-80d1-af1f8be94404	3	1fb03ffc-fd93-4ea6-bf06-11311a655212
042a30bb-34e1-4994-968e-af8cbfd1bd6a	采集			2018-08-24 15:26:31.712+08	2018-08-24 15:26:31.712+08	85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b	3	afb4357f-a11c-4278-b137-53c5042053db
a94fe00f-a8ea-4634-9262-e3c1ea0fa965	采集	\N		2018-08-24 15:42:01.432+08	2018-08-24 15:42:01.432+08	4e3f8da9-5108-45ea-a042-dfab49718c5b	3	\N
e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b	采集	\N		2018-08-24 15:45:25.534+08	2018-08-24 15:45:25.534+08	a5da9800-2b00-4701-8793-3aaad3e140f6	3	\N
47c11b01-fc23-4bd4-a754-f9da2ea42dec	1			2018-08-17 11:17:05.437+08	2018-11-13 13:36:20.261+08	0f069d0a-8f7e-4480-b864-201a86725331	3	55b025d7-61e9-49a5-b144-ab7c86525a66
1ce82d97-cb86-4a43-bf17-b75116cac5e9	采集	\N		2018-08-24 15:55:16.964+08	2018-08-24 15:55:16.964+08	a5766cb2-27a1-4d0a-939b-ac6aa0871a81	3	\N
8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b	采集	\N		2018-08-24 16:11:22.982+08	2018-08-24 16:11:22.982+08	6de7929d-736b-4c4e-a1c3-e7550a7b6d31	3	\N
64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d	采集	\N		2018-08-24 16:11:23.706+08	2018-08-24 16:11:23.706+08	209249f3-7316-4e7d-a3bf-df78afc260eb	3	\N
698204ef-2e94-4c91-9c1b-f1145b054f0e	采集			2020-01-14 14:12:06.475+08	2020-01-14 14:12:06.475+08	fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4	3	3121ae46-41f3-451f-9995-208f16460648
2a0639f4-2556-4682-bf61-63ab22867a18	采集	\N		2018-08-24 16:11:25.518+08	2018-08-24 16:11:25.518+08	b0493f78-0950-47ac-bf5f-27797da84f44	3	\N
360e9d0c-a402-4ab1-b120-b6323dc53ff5	采集		老版本振弦协议	2018-08-27 14:20:10.007+08	2018-08-27 14:25:44.814+08	99c61d5d-4b9d-4fca-9d8c-e6d530b15871	3	1b896530-ebfa-432d-83e9-25aa5d2177a0
3fe03489-ab89-4237-a623-60b0a9d068af	采集	\N		2018-08-28 17:57:01.571+08	2018-08-28 17:57:01.571+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	3	\N
64210070-761e-4035-97b8-f76bfe61fca5	采集			2018-08-30 16:11:13.772+08	2018-08-30 16:11:13.772+08	2425cf54-e1bc-4c75-ac7b-62b039f29548	3	\N
0b0d6db1-2a75-4d2d-a4e9-7690437a3900	采集			2018-09-26 17:10:21.452+08	2018-09-26 17:10:21.452+08	7737cd79-82ca-472e-ba8c-5ed79fde2e70	3	\N
c88b89c6-187a-4d96-aa9d-6b1ff8fce91f	采集			2018-09-26 17:10:27.043+08	2018-09-26 17:10:27.043+08	97c2157a-e4ee-41aa-b2ca-c8745fdda755	3	cd5bd311-1502-44b3-9764-4013fe62db21
433bad92-fb3c-4e0f-b28a-c82c4c85fb5d	数据同步			2018-08-28 18:06:12.426+08	2018-09-04 10:56:14.335+08	9aa93498-820e-4fc6-a288-5b2274fb9246	3	bac4bba9-6af2-401c-b42c-9f1bd2d62728
a3794dba-f03a-48b2-897e-e5f4f9c077e9	配置同步			2018-08-28 18:06:12.409+08	2018-09-04 15:12:25.824+08	9aa93498-820e-4fc6-a288-5b2274fb9246	2	feb25833-7419-4779-bfc8-809195843744
2ad7273d-8ff0-4461-b87e-01d92fe46764	数据			2018-09-05 09:55:00.351+08	2018-09-05 09:55:00.351+08	5c6b67cd-fe7a-472e-8907-63baa655cb42	3	\N
450bca7e-218d-4faa-9527-ee2f0eceb3fe	采集			2018-09-07 09:46:01.476+08	2018-09-07 09:46:01.476+08	be5be8af-c339-4f15-b2b7-0f16e1e51792	3	\N
4918bd89-601e-4f79-b31f-0aeda6062c82	采集			2018-09-07 10:55:19.8+08	2018-09-07 10:55:19.8+08	97078fa2-e944-487b-8913-e3c2c33c6ff0	3	\N
f46e1f36-2e28-4b26-950d-2e00fb0b4a03	采集			2018-09-07 11:09:31.036+08	2018-09-07 11:09:31.036+08	afb69a31-61c2-417c-b62e-c41730b3e6a1	3	\N
8e1cc471-0670-4c4f-aa30-013e6de6e3c0	采集			2018-09-07 11:18:27.99+08	2018-09-07 11:18:27.99+08	6c5b2840-b01d-4bb3-8ab1-a831b3880184	3	\N
402f6e2a-74c7-4a3b-9021-66f64352eb7c	采集			2018-09-07 11:22:10.525+08	2018-09-07 11:22:10.525+08	db345382-4b53-424d-b563-909bfe0a36cd	3	\N
54115f13-d150-41a4-8d45-05de44b8decb	采集			2018-09-10 10:22:20.296+08	2018-09-10 10:22:20.296+08	7a741fa4-a643-495d-bb49-443ec2df29b9	3	03873ea1-66d7-41ed-b78c-f41b3ba37eff
da8b12eb-4ee8-488d-a51b-25c30a677462	采集			2018-09-10 17:10:05.056+08	2018-09-10 17:11:08.8+08	1c431af0-8407-422f-8823-82fe58af024f	3	1dfd10ac-171c-407b-a931-97f89d8f31c4
7bca9e02-73e3-4462-b527-a443d6ba576b	采集	\N		2018-09-10 17:12:13.133+08	2018-09-10 17:12:13.133+08	7a741fa4-a643-495d-bb49-443ec2df29b9	3	\N
6ea1caa6-8d9e-4f83-87ed-c73c2ed5e8ec	采集			2018-09-11 14:34:02.869+08	2018-09-11 14:34:02.869+08	470fe434-e3f4-40b1-a823-12f5b6122b0a	3	c1fb3383-b4c2-40e5-a73b-d27267e2384c
df2bbcd2-bc11-48de-8307-826382959126	采集			2018-09-11 14:37:10.4+08	2018-09-11 14:37:10.4+08	098ca922-fd35-4605-abc8-f65640f8f879	3	\N
d0eba673-a21f-47b7-8c47-0368788a1b62	采集			2018-09-11 15:50:20.323+08	2018-09-11 15:50:20.323+08	1b53fdfb-8040-4fff-a045-a0bd3ac61881	3	\N
5e49818b-0a1d-453c-aa14-1979f1371690	采集	\N		2018-09-11 15:58:19.424+08	2018-09-11 15:58:19.424+08	00e107aa-a84e-4014-98e7-f0aa931b22ae	3	\N
b9007592-b65f-41bb-9c2b-e283e2b01619	采集			2018-09-13 17:12:19.022+08	2018-09-13 17:12:19.022+08	51c68d6c-029d-4a88-8802-335e6e6ddf6c	3	ccd4746c-7684-408a-941b-20b9baad024b
7bbe4206-6562-4fc4-b62c-94b500d6cc4d	采集			2018-09-13 17:17:20.643+08	2018-09-13 17:17:20.643+08	a1d2070f-926a-42a1-8bf8-a39b89eb4c92	3	\N
589f754e-ea3a-4643-9d79-234ed0834807	采集			2018-09-29 15:46:46.727+08	2018-09-29 15:46:46.727+08	d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90	3	\N
02ed6adc-d0dc-43a4-a933-da902d675146	采集			2018-09-29 15:42:42.22+08	2018-09-29 15:48:29.137+08	477ce1aa-aaae-40d3-a55e-2d3ef3a38e23	3	c0e95dc9-2a94-4b37-9176-1f911fa40781
6c510bc0-0f56-4f00-9c1c-41b619a86a28	采集			2018-09-19 17:31:06.051+08	2018-09-19 17:31:06.051+08	56e2d696-3384-449a-9072-46e2a18adbc8	3	cd5bd311-1502-44b3-9764-4013fe62db21
3b5383c8-bd1b-4f0e-bfea-1f0d746133c5	采集			2018-09-19 17:32:06.999+08	2018-09-19 17:32:06.999+08	8b635501-4320-49f5-b573-e4193d4e31b6	3	\N
16407e57-188e-42f3-b626-ac8ff7405aeb	采集			2018-09-20 13:52:41.75+08	2018-09-20 13:52:41.75+08	c1b890f6-babe-41df-b3b4-0a277ad7e1b2	3	\N
7845401a-4640-4465-987b-69f630af6b8a	采集			2019-02-25 11:44:07.889+08	2019-02-25 11:44:07.889+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	3	\N
7aa0f7e1-677e-4285-8888-33c63cf443d7	kafka设备			2018-09-21 17:53:12.731+08	2018-09-21 17:53:27.818+08	0f37be2c-4009-4079-81f8-e9c598773ea2	3	d246da1e-bc3c-4ecc-9afa-d4d0137a3e89
94fdfca3-2f0b-4003-b3fd-77dc3e522b6e	采集			2018-09-25 10:58:50.741+08	2018-09-25 10:58:50.741+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	3	\N
b9257d1a-c48e-498a-85a0-6a928f32b049	采集			2018-09-25 15:45:23.99+08	2018-09-25 15:45:23.99+08	d929c576-62dd-4f0c-a2cc-15120347b903	3	f2ec840a-2e0c-4178-91e8-8b5b44009561
131b8ec5-58de-41e6-9d48-96e59e77532e	配置下发			2018-09-25 15:45:24.01+08	2018-09-25 15:45:24.01+08	d929c576-62dd-4f0c-a2cc-15120347b903	2	fa70ca44-5363-495f-ba20-8572ecd3b398
5b2b2647-ee99-48d8-b069-f487f052a552	采集			2018-09-26 14:38:16.189+08	2018-09-26 14:38:16.189+08	7475ac58-b627-442e-b8fc-259c0c1561e7	3	e7b120d0-2c54-4acf-b8c2-af18f962c558
de94d984-9d2e-4129-8fcb-b2655ab694b3	采集			2018-10-05 09:56:54.406+08	2018-10-05 09:56:54.406+08	6ac55754-f252-4ba5-ba9c-72a158734b97	3	9addbae0-b742-4fa1-9ecd-d5f0ee2b3889
7d700433-bb05-4381-8ace-4cf1f8dbd1df	采集			2018-10-08 14:13:14.282+08	2018-10-08 14:13:14.282+08	ae5aa015-b2d1-41a8-8b49-9a3d28565e8d	3	dd84941a-2077-439f-a8c4-9696132b7664
da364ec6-34cf-4bb6-8eb8-10548f45e67a	采集			2018-10-08 16:48:22.306+08	2018-10-08 16:48:22.306+08	357c45b8-b190-4369-862c-e28530e13aa2	3	94086d83-438d-4730-9c51-771e4a2e3d12
ca8a3be8-72cf-497c-9743-e3d348c53672	采集			2018-10-09 17:02:23.462+08	2018-10-09 17:02:23.462+08	e5ed186c-f248-4b06-ae1c-8ada54d1c67d	3	65495481-c107-49ff-98c9-2c4215b38347
7c06e2c2-5e55-4116-a3f9-aae11dc742a8	采集	\N		2018-10-10 11:26:27.677+08	2018-10-10 11:26:27.677+08	7febae4c-c706-48a8-9f99-e546f48e338b	3	\N
42ff7750-3e27-4669-8018-92caf824ecd2	采集			2018-10-10 11:27:19.865+08	2018-10-10 11:27:19.865+08	d94bb4f7-d5a8-4bb0-b866-c8008e5123ab	3	\N
6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9	采集			2018-10-11 09:06:27.307+08	2018-10-11 09:06:27.307+08	cce8a8e4-cd65-4f13-a554-eb06fa2b7caa	3	\N
42aef21d-9dab-4067-bd61-4f17fa24d286	采集			2018-10-24 10:46:54.992+08	2019-03-04 09:18:37.107+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	3	e9449473-2655-42a6-9523-50f4da34bba0
9e452b06-8db9-43cf-9378-0d66ff102697	采集			2018-10-12 10:19:30.555+08	2018-10-12 10:19:30.555+08	5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a	3	8ef51f2f-b169-4e69-9a5c-d471d6c03e76
2e746e8b-7af0-488d-9e6a-6839f50952cd	采集			2018-10-18 15:18:15.148+08	2018-10-18 15:18:15.148+08	5de488a0-c8c4-4e3d-b0c7-82150f4bd79b	3	dd0197d4-7aaa-415a-b006-de6f384718ee
6a85de5f-e927-43bb-bb03-21f34d546aca	采集	\N		2018-10-24 13:35:15.427+08	2018-10-24 13:35:15.427+08	04425c48-b89c-498d-8372-b3a64d1abf1e	3	\N
8221e541-b6e9-4b4b-8b70-7e533565674f	采集			2018-10-24 15:16:44.648+08	2018-10-24 15:16:44.648+08	3ad4be85-c6f9-46b8-97dd-39d01e4ef858	3	\N
fa2e9270-f133-46bd-8403-b1438680963a	采集			2018-10-10 11:24:53.696+08	2019-01-23 17:14:10.679+08	dc4b89d8-51e0-4b94-91d7-92d61a59a696	3	cba36de4-2915-4b24-8c57-4ff0f78e202c
1c99c3da-58a7-4f9d-aa29-2a1b1c335f7a	采集			2018-10-26 14:52:49.974+08	2018-10-26 14:55:47.752+08	3805bf98-24dc-453c-a62b-a5a97633ca8b	3	ea9ac263-3f91-4260-b341-02cc1811e8b3
9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527	采集			2020-01-14 14:13:41.892+08	2020-01-14 14:13:41.892+08	cd24ff84-fef3-40d2-8397-dfa240a13d17	3	3121ae46-41f3-451f-9995-208f16460648
4caa397a-da74-42c1-b0a7-a83ba80b975e	采集			2018-10-26 16:15:49.381+08	2018-10-26 16:15:49.381+08	a5dda81c-6a85-4e7b-97f3-be45b980646e	3	\N
27f22c17-c2a9-47b7-82f9-f87716de54fa	采集			2018-10-26 16:26:05.546+08	2018-10-26 16:26:05.546+08	d5bfb91e-3d09-4068-ac33-5974e8b7f039	3	\N
9e7de9ac-68c1-48c2-bea1-751c1149407a	采集			2018-10-11 14:47:31.906+08	2018-10-29 15:10:56.434+08	177e7e33-3dae-4163-8d7d-1778e70b4a8b	3	\N
7805394e-0df6-4a46-b9f4-d62860cf6be1	http	\N		2018-10-29 16:20:53.668+08	2018-10-29 16:20:53.668+08	2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e	3	457f4d30-bbd7-4608-84f6-c6249675c7eb
a2423718-1142-4d1b-aff4-85a6f260c390	采集			2018-10-29 18:06:17.126+08	2018-10-29 18:06:17.126+08	57e52f6f-9cfd-4060-bbf4-506058f6206d	3	7dd1d023-4e38-4172-b2b4-6009de43f1a7
02e056da-0fdc-4477-bdb1-f52f28a1f6bd	采集			2018-10-30 22:17:59.325+08	2018-10-30 22:17:59.325+08	b03b1516-7e4a-41a4-9765-a1a485bb998a	3	\N
27a9d353-a3e8-4669-97b5-f467e52007c5	采集			2018-10-31 18:04:59.743+08	2018-10-31 18:04:59.743+08	c1831563-faaf-4e2a-9d49-6b483abbd040	3	ef26cc99-f1f8-4c3c-9d5a-090131dc310b
abcf8bcb-b863-4219-b7df-9f5ac18ccaf1	采集			2018-10-26 17:54:01.956+08	2018-11-01 14:34:05.139+08	4a91ace7-e5da-44c8-843d-43fb6a130847	3	37d61bde-62f1-4c1e-97f9-8546cba82d2d
7b5d05d6-c187-4e6f-97aa-9add7a42ebbc	采集			2018-11-02 11:05:43.31+08	2018-11-02 11:40:18.842+08	b440e042-3173-43c6-887c-3cf4ce8a49e4	3	d135605e-090a-44f6-844b-8c294ea13c83
383450e1-ee35-4242-86ef-f2b575b96ba0	采集			2018-11-02 17:11:56.253+08	2018-11-02 17:21:36.825+08	24946992-8d23-4862-ab23-0844e246fb46	3	85e2b97b-2221-4c86-96cb-1daf90b1118f
677a3cf9-1821-4ddf-98af-6bfef51be1d0	采集			2018-11-03 15:41:07.728+08	2018-11-03 15:41:07.728+08	2729651f-9ad2-44f0-b9cf-bfc33669f9c7	3	\N
970a19fd-31b9-4485-90d3-6394bc637a87	采集			2018-11-05 09:08:45.114+08	2018-11-05 09:08:45.114+08	a03158bb-03f2-4da6-9ef0-10b837caab9e	3	ef26cc99-f1f8-4c3c-9d5a-090131dc310b
640ca77d-7813-4304-9242-b987653bbad0	V3.1.22			2018-11-05 11:05:43.244+08	2018-11-05 11:05:43.244+08	706988da-65c8-4388-a4ab-47e553cd1085	3	\N
1ed1816a-f590-4eba-8702-c334ec7a1e1d	采集	\N		2018-03-29 13:37:27.98+08	2018-11-06 19:45:02.2+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	3	03ad066f-654d-4ca0-be8d-5260028f35e5
b5a32d0d-110f-4eba-9d54-a5a661fb55d2	采集			2018-11-07 10:56:08.266+08	2018-11-07 10:56:08.266+08	ed1a6677-30c5-4215-a128-96bbd4b46c9f	3	\N
652126ab-6853-4c3d-ad18-2b150a0a799e	采集			2018-11-09 14:39:36.877+08	2018-11-09 14:39:36.877+08	6757358d-f79f-4a71-a721-6a882b92b350	3	790ba3f8-119c-47b6-bdff-ae905ec84c60
ed0bee37-45a5-464f-aec8-5b97ee0fb1d3	采集			2018-11-09 14:49:07.699+08	2018-11-09 14:49:07.699+08	296a97ca-fbd1-4876-83b2-f40a7fa7d5c5	3	\N
3452703a-aec3-4cca-9aa7-7041c1ba236e	采集			2018-11-09 17:35:43.405+08	2018-11-09 17:46:33.102+08	5e44f909-0d21-4d00-82f5-d3502e192e18	3	e8cedb2f-f0bd-401c-bea3-abd04f01319e
bf029965-3d0b-4ca6-9426-c9aa2ea4b091	采集			2018-11-10 11:08:27.805+08	2018-11-10 11:10:38.133+08	7734e171-78b3-4a47-bccf-b812a1cf30f3	3	c3bb4463-d16f-4c26-94c3-6fa66c5766b1
d1fa6c6c-dfb0-450d-bc20-1207b2973420	采集			2018-11-12 16:40:05.53+08	2018-11-12 16:40:05.53+08	ffa967e5-e1cd-4c0d-9aff-643c16430446	3	a0ce411d-4370-4a33-88dc-7a51846cf38f
fffc843b-a9bd-474d-868c-e7482d84e823	采集	\N		2018-11-12 16:44:32.047+08	2018-11-12 16:44:32.047+08	540e29ab-87bd-4d64-9f6c-c9af1db5bbf4	3	a0ce411d-4370-4a33-88dc-7a51846cf38f
f27415f0-f6a5-43cb-bb3c-f54d94dd0930	采集			2018-11-13 15:36:10.372+08	2018-11-13 15:36:10.372+08	830b9ca6-451c-480a-8013-67108cd4173f	3	a0ce411d-4370-4a33-88dc-7a51846cf38f
18903d51-d495-45f0-8d08-6f52d8a62684	采集			2018-11-13 16:37:13.341+08	2018-11-13 16:37:13.341+08	f125a65b-639e-46f7-8b52-6d2f4f2a064a	3	\N
23587253-110b-4b12-8c74-53f5147ad189	采集			2018-11-15 15:46:09.082+08	2018-11-15 15:46:09.082+08	5f1f2736-2744-4339-b456-50c5626ea641	3	ae1f5ddf-f933-47ea-a90e-9ac5af01b15b
ec90f249-7504-4b98-93e1-8f6f39352105	采集			2018-11-16 14:10:42.796+08	2018-11-17 09:21:52.76+08	f12a248f-faab-43f2-bfbe-088da7f471dc	3	40879c58-2d96-4474-88b4-fcbda49d1ab2
92400a19-a4cc-450a-973b-f0c0aebbade8	采集			2018-11-17 14:04:21.043+08	2018-11-17 14:04:21.043+08	e689bb3a-b7ce-4502-9042-c07f89958809	3	01baa98e-542d-4c05-99d1-8f46f984e13c
6867f7aa-51dd-4f2d-acd3-ed771f2fb33b	采集	\N		2018-11-17 14:07:02.733+08	2018-11-17 14:07:02.733+08	112843b4-e834-4892-9ef3-260fe3d90c24	3	\N
067d099e-3d4d-40f5-8ca7-68383ffd5208	采集			2018-11-19 11:02:17.781+08	2018-11-19 11:02:17.781+08	d199daf3-83a4-4bcc-b23b-b6ca37fba927	3	c103cba2-1c09-493e-8db1-37394ad65637
bebf7077-da40-449d-99fc-9340c39d6231	采集			2018-11-19 16:52:15.451+08	2018-11-19 16:52:15.451+08	1a456dbb-f7f0-493c-969d-2a0c1f1698ef	3	e7fa2b54-05b9-4fb9-9036-01f292fc3ec6
9d766294-6005-4331-8071-045ac9e9c4fb	指令下发	\N		2018-11-20 11:30:55.306+08	2018-11-20 11:33:09.77+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488	2	17081615-1340-4cae-9924-f101767e7d36
99a6468c-6183-4253-bc6f-0e66fea8e3ce	采集	\N		2018-11-20 14:59:57.296+08	2018-11-20 14:59:57.296+08	800e5478-374c-4de8-ab05-d9aa4be45cdb	3	6da213f0-1d9e-48bd-ab58-364e65a0ecd5
59ea18ad-dfaf-406a-95bc-213eaff64b6b	采集			2018-11-20 15:19:51.011+08	2018-11-20 15:19:51.011+08	0209176c-7c91-4fe0-9a00-e751fe24c8f8	3	cabb8dc7-293f-4cb1-b1e9-81e637fd8faf
24aa287d-5c1b-4564-8b10-d71615d3c626	采集			2018-11-20 15:38:42.532+08	2018-11-20 15:38:42.532+08	b349f69a-d7bb-4bee-aa65-6d250e1a7ae8	3	485f00b2-c992-4eb3-8d4a-0c8d2dd07a30
41d50f61-0dd5-4761-977c-1ebf6e29b35f	采集			2018-11-22 17:12:56.416+08	2018-11-22 17:12:56.416+08	3b867352-5d0b-4016-a55f-4d68d0dcbaa4	3	b8292b20-401c-4add-9928-fbcda8b8985f
7faa8d59-78aa-493f-855c-39efc2890727	采集			2018-11-20 16:26:17.241+08	2018-11-21 14:57:39.412+08	9c5aaf1f-48c2-4293-8338-f549c223993d	3	3c8986bd-7bbb-4132-b2f0-eeb132743564
08549605-83a6-46c5-8fbc-83279c95d08e	Lora	\N		2018-11-22 15:43:17.351+08	2018-11-22 15:43:17.351+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	3	\N
b0d9fed6-e9d2-46d8-9995-4b9865155e77	采集	\N		2018-11-22 16:01:56.546+08	2018-11-22 16:01:56.546+08	b91bca75-6908-439e-9860-f0debec0bf10	3	f351ad03-a539-4ec7-8a2c-429209e9c03a
e2cb4c00-ac04-478b-afc2-eb7928bfb361	采集			2018-11-22 17:30:26.341+08	2018-11-22 17:30:26.341+08	dff02ef2-0438-415d-9327-cdd883c38c81	3	aa4e6330-665d-49b9-b91b-4d0a5099c8bb
7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8	采集	\N		2018-11-23 10:32:50.892+08	2018-11-23 10:32:50.892+08	87a47520-e1a3-474c-b8b2-b1fd5dd521a9	3	\N
d2114a8e-de22-4be9-a15c-1fa381795077	采集			2018-11-23 16:45:17.058+08	2018-11-23 16:59:56.346+08	3b796285-ef41-4963-9304-f0909623f5c7	3	fd08e5b1-9f9f-45d2-af57-13ae07de6891
07b4abb3-3cd6-43ad-80af-e256996876d7	采集			2018-11-23 17:09:42.306+08	2018-11-23 17:09:42.306+08	8c73b29c-6146-4170-9cb7-d8ead8990d60	3	\N
b081c1e5-b3f5-41e7-a15f-da42c0760ab8	simulator	\N		2018-11-23 20:49:29.524+08	2018-11-23 20:49:29.524+08	09ebfc15-19c9-4e5f-bacb-5e81ec5ef026	3	d923ce84-8f85-4e60-94c4-e91819015eeb
00da1250-a423-4a89-993d-3cacb4df488c	Lora采集	\N		2018-11-24 17:43:29.029+08	2018-11-24 17:43:29.029+08	780ffe7d-7369-4d2f-9184-32790466f2ba	3	\N
f5c02f07-5612-47c7-a0e8-2f5284f203e3	采集			2018-12-03 14:06:15.013+08	2018-12-03 14:06:15.013+08	f0229321-e654-43b1-a172-a660b74367cd	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
4f2419a5-1b3b-4929-9b0f-27d286d684a4	Lora采集	\N		2018-12-05 14:59:57.887+08	2018-12-05 14:59:57.887+08	c9eacd36-38d6-48b9-9672-e76406906ea3	3	\N
75e11f44-f4d0-45a8-b1b9-6c80ae95941e	采集			2018-11-26 11:43:09.701+08	2018-11-26 11:43:09.701+08	59f09a3b-57f2-46ee-a2c7-8bba3e704794	3	e28ad13d-52d4-4ef6-891e-82958b52ba44
59ffcd16-077d-4dcd-9e27-9b85b83b6ece	caiji			2018-11-28 10:42:00.892+08	2018-11-28 10:42:00.892+08	f0c41435-ecaf-4e42-b592-b53aaa72f721	3	\N
71301f1e-11cb-40ce-8550-770dc2877603	采集			2020-01-14 14:15:55.646+08	2020-01-14 14:15:55.646+08	28dd8b68-38c2-47ad-af2f-80cabb2e5af7	3	3121ae46-41f3-451f-9995-208f16460648
37421fe7-d68a-4eb7-a2b4-f8238e4ee63d	1	\N		2018-11-28 15:03:29.306+08	2018-11-28 15:03:29.306+08	b75d2a21-d798-498b-966f-75375c6967ff	3	\N
bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	采集			2018-10-16 11:55:50.858+08	2018-11-28 15:40:39.927+08	27503c42-1dec-4321-ad45-eab67190afb5	3	f4bb99f2-48a1-454c-8d3b-d9aa707ce857
ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a	采集	\N		2018-12-03 10:30:03.05+08	2018-12-03 10:30:03.05+08	c6a59efb-40c2-4104-9b26-7895bb8e072d	3	3cf58410-da32-4194-aca0-9adf94b1d3bf
a9a88239-bda9-4074-8162-0831dde92dd6	采集			2018-12-03 13:54:10.25+08	2018-12-03 13:59:26.712+08	7575abc3-ef50-40ce-90c4-66fb308cf20c	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
f51fa45a-b4ee-4071-a1cb-b9b7657421f5	采集			2018-12-03 15:03:56.962+08	2018-12-03 15:03:56.962+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	3	f4443305-4848-4a3e-b1bc-f5ad10a87518
cebdbb60-2d1c-4a4a-af8c-85a571d69232	采集			2018-12-18 16:53:42.374+08	2018-12-18 16:53:42.374+08	00824420-b248-4f1e-9e56-57e8573c9e35	3	\N
f944e6ec-6886-471e-b0e0-41afb54df653	Lora采集	\N		2018-12-06 10:06:22.373+08	2018-12-06 10:06:22.373+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	3	\N
f7d87585-4ebf-4d22-a1ce-05ef947311e7	Lora采集	\N		2018-12-06 10:15:14.266+08	2018-12-06 10:15:14.266+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	3	\N
0d021590-ab48-4d98-b318-458faaf5d934	Lora采集	\N		2018-12-06 10:19:12.77+08	2018-12-06 10:19:12.77+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	3	\N
cf51dafe-466c-4549-b2c3-3eb4dbf5d871	Lora采集	\N		2018-12-06 10:22:33.35+08	2018-12-06 10:22:33.35+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	3	\N
322b0741-7b10-4499-a14d-5c660bc3dadf	Lora采集	\N		2018-12-06 10:25:31.746+08	2018-12-06 10:25:31.746+08	37c046eb-9a0e-49b0-95fb-f0128338f381	3	\N
d8d994be-3cdb-4646-a06b-d2869fdbedf6	Lora采集	\N		2018-12-06 11:11:21.651+08	2018-12-06 11:11:21.651+08	424f45f6-916c-4383-bce4-c71153f82e63	3	\N
a1051359-cb72-4421-9dae-06e5cc0d8622	Lora采集	\N		2018-12-06 11:28:49.95+08	2018-12-06 11:28:49.95+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	3	\N
cba87e64-ebf2-4b4b-8fe3-8df973625a56	Lora采集	\N		2018-12-06 11:38:32.017+08	2018-12-06 11:38:32.017+08	d2a5375c-0240-4435-9b8f-a62372fafaca	3	\N
21c31597-4e3d-4568-bc38-7d53a010fe90	Lora采集	\N		2018-12-06 11:46:22.637+08	2018-12-06 11:46:22.637+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	3	\N
1f518f12-461b-4d6b-93a4-af3c317ae85b	采集			2018-12-11 10:31:53.265+08	2019-03-26 15:58:52.799+08	d8de8739-f146-41e0-877e-747f30ac59a7	3	5a0243a8-8564-4245-86a7-c477a66eeb15
b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06	采集			2018-12-07 17:12:17.184+08	2018-12-07 17:12:17.184+08	e8357fe4-05bb-4159-8a27-a46212d14544	3	\N
fecfc4c4-f65d-44d1-afdb-57d325216958	采集			2018-12-07 17:12:17.331+08	2018-12-07 17:12:17.331+08	01f1ac79-6cbb-4f77-b73f-cf8d602f11a6	3	\N
383732b4-ea54-49fb-8e63-4dd2c614e5fd	采集			2018-12-07 17:12:17.904+08	2018-12-07 17:12:17.904+08	7328323d-9f8b-435e-9d4f-f963f502dc31	3	\N
bbfe4ad2-61fd-4c9b-9a68-a0682458a01c	采集			2018-12-07 17:22:01.993+08	2018-12-07 17:22:01.993+08	65e60374-6bdf-42f8-801d-00fc50085215	3	\N
71c10c83-3856-45fb-ab38-c75aabf7d5ea	采集			2018-12-07 17:22:02.57+08	2018-12-07 17:22:02.57+08	2bbdef47-01cb-401b-ae49-c4b7bad46d36	3	\N
c8e9affc-7965-452f-af9d-db9cafc1a54f	采集			2018-12-07 17:22:03.074+08	2018-12-07 17:22:03.074+08	fac96717-3818-4839-aedc-5dbb6c1c62f2	3	\N
4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329	采集			2018-12-07 17:22:03.978+08	2018-12-07 17:22:03.978+08	326d5283-7066-4e0f-9e27-380773523f19	3	\N
1065f451-14e7-45e9-8d0e-511f274b97c4	采集			2018-12-07 17:22:04.455+08	2018-12-07 17:22:04.455+08	9dac79b5-8173-4081-abff-37f65c42b0c6	3	\N
d1c4860a-e460-4a8a-928a-0c08b2f1e408	采集			2018-12-08 15:12:26.602+08	2018-12-08 15:12:26.602+08	0747dcbe-0a49-4db1-ac06-d9a460babdd3	3	51fd07fa-e516-466b-8ca2-c4baffc0a1d2
0437f985-a7fc-497c-82ce-fda992d3a8d3	采集			2018-12-08 17:37:32.882+08	2018-12-08 17:37:32.882+08	a4cf524d-8114-4b70-b13a-a931429c4bbf	3	cbf73de3-cf1e-400f-b1b6-af60c861a09f
9e3252d0-5674-400f-813b-eaf3f07ee1ff	采集			2018-12-10 10:00:18.978+08	2018-12-10 10:00:18.978+08	1152aa27-3899-4f0f-9954-9d83cedd5aab	3	f46d22a0-54b2-47dc-8b98-6c3de609557a
2818ab68-9d7c-4254-99e5-e1edc265931c	采集			2018-12-10 11:36:18.836+08	2018-12-10 11:36:18.836+08	d4582a57-2984-4d20-94de-598f5b28a188	3	\N
a1a7e32d-9449-425a-9043-e40a835abf95	采集			2018-12-11 14:09:09.387+08	2018-12-11 14:09:09.387+08	0b4f75d6-d921-4913-a9de-cfff3b99d56e	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
8481bad4-e00b-4018-bc7f-33c5c4c800ef	采集			2020-01-17 15:31:03.147+08	2020-01-17 15:51:20.601+08	20d96ea0-8995-453b-aa12-191acb05eced	3	f9058abc-d879-4c5e-9f2d-40e8962ba5fe
227b30cf-bef6-488b-b9db-9eaaf4e2f2da	Voltage	\N		2020-02-11 14:34:08.156+08	2020-02-11 14:49:28.623+08	c7c40505-1247-43ea-a898-e767eeae6943	3	bbd0c618-985d-47a7-b844-e4831697168b
72701fdd-9595-45b1-8bed-190d4bf8ea7f	采集			2018-12-13 13:58:23.809+08	2018-12-13 13:58:23.809+08	d5ce913e-4a89-473e-b69b-bdfbc0fa6753	3	80989031-5d20-4c1f-a1ac-949bad0026c8
3373f8a0-47a6-4b6c-9df0-b21cf0883d73	采集			2018-12-13 15:31:50.778+08	2018-12-13 15:31:50.778+08	50d3cb43-638b-4833-a401-f526d1cbbc9e	3	cc379fab-18f6-4524-874c-3cf8c71188cf
61f238e3-e9dd-4c9c-a451-114ab6682354	采集			2018-12-13 15:33:20.404+08	2018-12-13 15:33:20.404+08	6d4fda56-b81c-4873-9c75-10257aaf7254	3	\N
4584d50a-bebf-4089-a9a1-adff635a4b75	采集			2018-12-14 15:48:01.107+08	2018-12-14 15:48:01.107+08	164528dd-81d3-435b-a4cd-dc328abbe3ba	3	318b2494-9869-496b-b179-399d8330f96c
7ac65a44-f581-4440-81e8-123685b15bbb	采集			2018-12-15 11:36:54.192+08	2018-12-15 11:36:54.192+08	495526a7-7701-4e9c-8dfd-bbfd7e0b163b	3	0b96499d-fce5-4592-aa19-a1df21da56c7
5e55d0a9-995a-465c-ac1d-a0253c41bc53	采集			2018-12-15 11:42:30.095+08	2018-12-15 11:42:30.095+08	74ca6540-3a33-4157-8629-f00d8750aa78	3	9371fe71-c7ed-4957-b430-606c12203969
e277a4bb-5513-4464-be88-055a50df13b0	采集			2018-12-15 16:52:13.978+08	2018-12-15 16:52:13.978+08	11c61b7f-9d36-4273-b679-898a09fe21e9	3	b8fe420d-0838-4c78-be1f-6eec1246a5c9
2fd829ec-a887-4746-91ce-1c3ad494805d	采集			2018-12-18 13:51:36.31+08	2018-12-18 13:51:36.31+08	bfd93522-374e-4c12-b203-e02ff040a821	3	0856b400-ee67-440c-b534-b075d2b36023
f8c7d826-f0aa-4b53-a793-833a2e913699	采集			2018-12-18 16:35:54.031+08	2018-12-18 16:35:54.031+08	e376bde0-8e4f-493d-a03e-98b4b27acec0	3	\N
fe292a77-3306-4e04-9708-072c060f3e74	采集			2018-12-18 16:35:55.147+08	2018-12-18 16:35:55.147+08	ae5c1f57-7ae4-4515-b6ba-51319d4599ce	3	\N
36c1deeb-653e-4326-98ac-a804fac20490	采集			2018-12-18 16:53:40.224+08	2018-12-18 16:53:40.224+08	e5b96801-9448-44f2-a175-40cc7e8466b4	3	\N
3aff704a-a328-45da-b0eb-3fee9080c603	采集			2018-12-18 16:53:40.795+08	2018-12-18 16:53:40.795+08	8580899d-741c-4cc7-a479-ccd6c0c6e22c	3	\N
9b0aed36-6906-439d-8969-4918e4e723f5	采集			2018-12-18 16:53:41.311+08	2018-12-18 16:53:41.311+08	b640a9ef-9a1c-4973-ada5-0cdab7877f55	3	\N
fda2ff9a-981a-43fb-9a27-2f74effa3e43	采集			2018-12-18 16:53:41.849+08	2018-12-18 16:53:41.849+08	b0726a2c-5c69-481f-8d2d-d8f8e17a248d	3	\N
16fd9521-16ab-499d-b342-4ed89b2fb211	采集			2018-12-18 16:53:42.85+08	2018-12-18 16:53:42.85+08	99685e46-230b-43e6-a98c-f7f472af999f	3	\N
4604ffee-b4ae-49e6-8498-281f3954e051	采集			2018-12-18 16:53:43.57+08	2018-12-18 16:53:43.57+08	66ccfb40-3e33-4b5b-a47b-be50c83473e9	3	\N
1e07f74a-8506-48c5-b76c-e179333adcdf	采集			2018-12-18 18:03:29.508+08	2018-12-18 18:03:29.508+08	6b180341-15c7-4148-89e3-b6fc10b0f7b5	3	be045345-b692-40de-8c14-3649bb3ccbbc
2399a5ab-0f4b-42c7-840e-c9331124008d	采集			2018-12-20 14:56:36.693+08	2018-12-20 14:56:36.693+08	9e3cc14a-915c-4fd2-bb82-35360798cb23	3	743ba664-1590-4481-a703-bc9dde076f67
764df0c7-c68c-47cf-827f-d2cee7802096	采集			2018-12-20 14:58:02.435+08	2018-12-20 14:58:02.435+08	f09a8627-9e84-489e-86f5-72522b126e74	3	\N
ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94	采集			2018-12-20 15:04:51.312+08	2018-12-20 15:04:51.312+08	b2e31dbc-1560-4ab9-8b57-a57a012d5022	3	\N
7f040f7c-5295-47e8-9ad0-e60c4bbb45b9	采集			2018-12-21 15:20:51.749+08	2018-12-21 15:20:51.749+08	f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2	3	c54c1a0b-dc02-4aca-99d6-466858cec28a
12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452	采集			2018-12-21 16:55:45.971+08	2018-12-21 17:01:52.148+08	3f9ded10-1974-46c6-b577-74ef70477cc1	3	0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
2ad69732-f5bc-48ff-9b70-ef6374830804	采集	\N		2018-12-22 09:58:06.297+08	2018-12-22 09:58:06.297+08	2aec4a46-de9a-40e0-ac97-bdb0d149e82d	3	e746003f-c6e3-4213-9d13-706aa552dfd2
1392402b-26fe-47c7-91d6-d380095aac9f	采集			2020-02-19 16:24:50.478+08	2020-02-19 16:24:50.478+08	1b1cc578-8839-4900-a0bf-8e8614bdbd41	3	f6ebffcf-2f2a-41fa-a36b-d997b8584c39
f50640f2-9144-4d3a-ae14-f042492a899b	采集			2018-12-24 11:48:02.124+08	2018-12-24 11:48:02.124+08	fc561f5f-92c8-4549-8e02-dd01dd276aef	3	f6817d17-36f6-41ce-ad3f-9103b236586a
fb5b0dad-7bf3-429f-a153-95ff04ef6b58	采集			2018-12-24 11:53:24.873+08	2018-12-24 11:53:24.873+08	6f051a40-1c14-47c6-8124-3077f27facc5	3	f6817d17-36f6-41ce-ad3f-9103b236586a
a20c22f5-81ae-4aa9-9a71-40fd0854d653	采集			2018-12-24 11:53:26.517+08	2018-12-24 11:53:26.517+08	b92bc45a-bf9b-425f-9747-7caedf0c2784	3	f6817d17-36f6-41ce-ad3f-9103b236586a
9bec257b-dd97-4034-ada6-eb01b7a69868	采集			2018-12-24 11:53:35.037+08	2018-12-24 11:53:35.037+08	52ae2b25-56b5-4a29-9f0b-33454ac99ff6	3	f6817d17-36f6-41ce-ad3f-9103b236586a
865d7b6a-d5c7-4c8a-915f-4350e6cbab7b	采集			2018-12-24 14:39:01.24+08	2018-12-24 14:39:01.24+08	0c6ecc38-15dc-4580-a580-aa3c39eb9064	3	3bcc969b-9e2f-4d39-9e23-4e778b30d2f4
a625037d-7d72-4479-857e-ba45ebf3a2db	采集			2018-12-24 15:31:37.904+08	2018-12-24 15:31:37.904+08	2202dd15-500f-45e8-a555-e90ddf24df13	3	f6817d17-36f6-41ce-ad3f-9103b236586a
7ab198d0-56df-4a07-9b1a-ea5c16664b5c	采集			2018-12-28 11:02:10.362+08	2018-12-28 11:02:10.362+08	e6c538b8-f82a-4e8f-9d47-529a835fc779	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
70c9304e-caaf-4c6e-aa82-b51207d7aeac	采集			2018-12-28 11:07:29.297+08	2018-12-28 11:07:29.297+08	092ae1af-65d0-45dd-a621-17fd26682e7c	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
14784dc2-a6ea-4008-acd6-bb96f3cedf1e	采集	\N		2018-12-28 11:13:18.18+08	2018-12-28 11:13:18.18+08	a300435b-3982-4694-aab4-48ba853d838e	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
b9a47230-060a-45fd-8409-4307247b8a62	采集			2018-12-28 11:17:19.429+08	2018-12-28 11:17:19.429+08	d52114b2-8ad0-42a3-989f-0650203b54c8	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
8b827cae-a928-42a2-bcd6-0071556c240f	采集			2018-12-28 11:30:29.894+08	2018-12-28 11:30:29.894+08	bc87beae-9433-42de-875d-6981e7975f21	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
37eaae27-d936-4e7d-8680-2d062ac5bb82	采集			2020-02-20 16:35:47.517+08	2020-02-20 16:35:47.517+08	62fe835f-5a83-41c7-a31e-3304fb51c5a9	3	f6ebffcf-2f2a-41fa-a36b-d997b8584c39
d83c7fb6-a62f-4cf0-9818-3df3592a0f3b	采集	\N		2020-02-21 13:07:28.529+08	2020-02-21 13:07:28.529+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	3	\N
69888b76-d5a8-4e6d-90a8-cfa968515267	Lora	\N		2020-04-03 17:23:40.98+08	2020-04-03 17:23:40.98+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	3	\N
458b31ce-11c3-4abc-aeee-3cdaa45215c2	Control		电源	2020-02-27 20:51:36.627+08	2020-02-27 21:02:55.281+08	2f966726-181d-4301-8415-5987393db114	3	bbd0c618-985d-47a7-b844-e4831697168b
39e094af-e8c9-455b-8f47-7d5b627b56c1	State	\N		2020-02-27 21:03:12.28+08	2020-02-27 21:03:12.28+08	2f966726-181d-4301-8415-5987393db114	3	bbd0c618-985d-47a7-b844-e4831697168b
34d873b8-b4cf-4313-ae19-a2fedae19eca	云采集	\N		2020-04-03 17:27:44.767+08	2020-04-03 17:27:44.767+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	3	\N
d5ca53cd-12eb-4cb5-81e0-8697934670ab	控制			2020-02-27 22:26:34.314+08	2020-03-01 20:27:14.567+08	80f33249-c402-4942-8c91-15f19638dce4	3	bbd0c618-985d-47a7-b844-e4831697168b
cb88ad52-fd36-4f48-8946-4e33300d3b1e	状态			2020-02-27 22:26:34.299+08	2020-03-01 20:27:22.716+08	80f33249-c402-4942-8c91-15f19638dce4	3	bbd0c618-985d-47a7-b844-e4831697168b
b6fbb28e-3823-4d97-8ade-baadda4ca2f2	控制			2020-03-07 16:35:47.283+08	2020-03-07 16:35:47.283+08	c82a7f0e-848f-4659-9555-8b275c33036e	3	bbd0c618-985d-47a7-b844-e4831697168b
d8a43904-24f4-496b-acd9-bc41e483b144	采集			2020-03-07 16:35:47.302+08	2020-03-07 16:35:47.302+08	c82a7f0e-848f-4659-9555-8b275c33036e	3	bbd0c618-985d-47a7-b844-e4831697168b
83e59e62-4f0e-438c-af09-6988ceca1a91	RTU	\N		2020-03-10 13:52:34.944+08	2020-03-10 13:52:34.944+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
a347cbc7-41df-43d5-96a1-0424f00954d5	RTU采集	\N		2020-03-12 15:39:58.776+08	2020-03-12 15:39:58.776+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	3	\N
dc8f2875-b635-4147-9a96-92b72ccadfef	GPRS采集	\N		2020-03-13 15:41:34.941+08	2020-03-13 15:41:34.941+08	7f76a800-a32e-483a-a948-919fc9e7d075	3	\N
27cc4200-3c65-481b-92b3-1d747cbef33b	GPRS采集	\N		2020-03-13 15:46:07.549+08	2020-03-13 15:46:07.549+08	3aba791d-d6b2-4175-bb20-109f210f4065	3	\N
f51d3996-cd2a-4ea0-9430-94c6f5b5268a	GPRS	\N		2020-03-13 17:42:56.778+08	2020-03-13 17:42:56.778+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	3	\N
974fa08a-e1e6-4e6b-b3ac-19e3863675aa	GPRS采集			2020-03-18 14:12:05.061+08	2020-03-18 14:12:05.061+08	1e4fb0f1-79a1-4246-a85c-478b55f8df95	3	\N
e5576d87-40b2-472c-88cc-78bedaddc163	采集	\N		2020-03-19 13:25:15.613+08	2020-03-19 13:26:13.613+08	00576fa4-94c0-4ef1-b26c-189142d5bdea	3	ab2d9b14-3cb2-4cde-9fce-ef4d57dd5002
8a226009-de6a-448d-8fc8-1056e5a62c7c	数据上报	\N		2020-03-20 11:16:14.049+08	2020-03-20 11:16:14.049+08	1131f328-b9a1-4361-beae-547a1acb032d	3	\N
9474176b-8d55-48c0-bd60-1bcfb6da0576	采集	\N		2020-03-23 13:05:37.714+08	2020-03-23 13:05:37.714+08	47de1028-1b35-4a17-b78e-f66178ecb4e6	3	\N
01444399-9e03-4682-bb70-3b5137cd469e	采集			2020-03-23 16:30:30.302+08	2020-03-23 16:30:30.302+08	c730d30c-6a9d-4e3e-b347-7dfbe40a217d	3	65bb5b61-48eb-4c5a-aca4-ae21893336b5
919db10d-5cbf-423f-ac9b-035d06ecf13b	采集			2020-03-23 17:25:41.995+08	2020-03-23 17:25:41.995+08	fd94699e-65db-45b8-bbe9-88c147ba1e0a	3	25647db7-386a-466c-b9a3-41ad27518265
f58d1284-4cba-47d9-b2ff-2bfeeff62797	采集			2020-03-26 11:00:05.765+08	2020-03-26 11:01:07.185+08	b78fdf56-b70c-4c49-8734-67400e9a858a	3	38b8ea7c-27c3-4c8e-b667-80bd1f78d911
a6d36e90-1e77-42f2-9d03-3852f9e5a9ed	微功耗	\N		2020-04-03 17:19:53.852+08	2020-04-03 17:20:04.159+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	3	\N
a868b3a8-85ed-4780-a0cf-9d0206e3cd58	采集	\N		2020-04-03 17:25:45.702+08	2020-04-03 17:31:33.069+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	3	e5116002-4b68-4d33-b40f-4d08dc7c46b1
8f9706bb-e71b-448c-b32d-4b4cfe420ddf	采集			2020-04-08 09:44:52.317+08	2020-04-08 09:44:52.317+08	12f885d6-8a49-4495-909e-8a938e23ec8b	3	3c318417-0111-4295-bd59-874a0a5a0cdc
8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	采集			2020-04-08 10:43:30.796+08	2020-04-08 10:43:30.796+08	a21dbc9a-38d2-4468-8149-8324e875fc8a	3	0d0916bd-221d-433b-8e40-ea4728310292
b912ee89-771c-412b-b6f1-43fd55aa3743	云采集	\N		2020-04-08 14:13:21.709+08	2020-04-08 14:13:21.709+08	0796dca5-8068-4bc2-a73f-99160576a988	3	\N
3d4528b4-3198-487f-9a4f-60b0b142f4fa	采集	\N		2020-04-08 14:18:11.335+08	2020-04-08 14:18:11.335+08	0796dca5-8068-4bc2-a73f-99160576a988	3	\N
235e50cf-8332-4752-ad90-735b21a65636	采集	\N		2020-04-08 15:29:32.158+08	2020-04-08 15:29:32.158+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	3	\N
43f54168-c6b9-4a10-af52-08fea895afd5	云采集	\N		2020-04-08 15:30:15.656+08	2020-04-08 15:30:15.656+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	3	\N
ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	Lora采集	\N		2020-04-08 15:30:30.778+08	2020-04-08 15:30:30.778+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	3	\N
ec4bef46-3f33-4abc-bc5a-fdd02804546e	采集	\N		2020-04-08 15:57:37.342+08	2020-04-08 15:57:37.342+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	3	\N
facb0a36-aad1-464a-9e62-5982e7f96038	Lora采集	\N		2020-04-08 15:57:59.95+08	2020-04-08 15:57:59.95+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	3	\N
22d12570-1067-4643-901f-035e0bedcd19	采集	\N		2020-04-08 16:12:37.536+08	2020-04-08 16:12:37.536+08	33215263-67ff-4ca8-9cec-d4c05068b412	3	2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
c118d176-8dae-46d2-af7a-637b0b4ad23f	采集	\N		2020-04-08 16:18:59.688+08	2020-04-08 16:18:59.688+08	f54c9b05-e722-4677-9e19-4fbbeeee0938	3	2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
ab5284c6-527b-497b-ad77-a59c41b4202f	采集			2020-04-08 16:23:51.255+08	2020-04-08 16:23:51.255+08	718d8823-39a8-40fd-b726-76fde0fd8094	3	2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
0070fd98-008a-4af5-b805-e81d23644df8	采集			2018-12-28 11:30:32.415+08	2018-12-28 11:30:32.415+08	21387f8b-b7bb-48c8-9972-7ff32e01f2fa	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3	采集			2018-12-28 11:30:33.808+08	2018-12-28 11:30:33.808+08	966cf4b9-f411-4764-bad3-2372cd867458	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
114001d1-f9ab-4564-b7e0-319e04d86a54	采集			2018-12-28 11:30:35.25+08	2018-12-28 11:30:35.25+08	10d33bab-421f-428f-b450-b5ee4b1c3465	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
a3e674eb-3100-4cd1-907c-b545482bce0d	采集			2020-04-01 09:55:29.071+08	2020-04-01 09:57:00.43+08	f070a6a5-406b-4567-ab70-0ba9cc204545	3	9830e7d2-be5b-4676-92da-cd5814982205
2fedcbbc-d631-410f-9dbf-9868452b711e	云采集	\N		2020-04-08 15:58:15.741+08	2020-04-08 15:58:15.741+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	3	\N
93a512ff-ed6a-423c-a66b-0a9c882a1f7c	采集			2020-04-08 16:36:50.888+08	2020-04-08 16:36:50.888+08	9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	3	1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf
becc893e-7135-41ab-8e23-10257bd06437	采集			2019-01-04 15:34:26.878+08	2019-01-04 15:34:26.878+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	3	\N
df057647-e4af-4ddb-ba5b-4f9c56f48e1d	推送			2019-01-04 18:36:21.562+08	2019-01-04 18:36:21.562+08	f90616c7-29f8-4aa3-863b-c67c6ef4ec61	3	0548ebe4-a105-461a-80e5-ade045ca89f6
b6fe084b-3bb8-4dcc-922d-b85d47f1149b	采集			2019-01-07 11:08:30.153+08	2019-01-07 11:08:30.153+08	f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e	3	6832b04d-9188-4104-99aa-7ed91c3c2391
9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7	采集			2019-01-07 17:23:55.78+08	2019-01-07 17:23:55.78+08	1824bec3-15cd-498d-b2c1-b3cc804a1021	3	\N
98c8c785-f229-4409-b2a6-a1e57af72b26	采集			2019-01-07 17:45:50.821+08	2019-01-07 17:45:50.821+08	a81c3314-06e2-428a-bede-88adf880bdd7	3	\N
7406dcb2-9b68-42e3-9178-90ac77d39703	采集			2019-01-08 15:12:49.58+08	2019-01-08 15:12:49.58+08	a9f13e6b-82bb-4a59-82b7-cf52b91642a5	3	\N
e3ba8196-3d34-4b50-9cd5-866ad57dae8e	采集			2019-01-08 16:04:57.716+08	2019-01-08 16:04:57.716+08	36f70703-df53-42ae-a8da-e001d8215fd8	3	9ad0fa84-5152-49ae-a277-01a96513528c
742624bb-c14b-4b1d-90d8-bd54ef4520ba	采集			2019-01-14 11:53:46.528+08	2019-01-14 11:53:46.528+08	969043a0-c1f9-49c2-9f36-c029a03a9c87	3	e377b8e2-0507-407d-859a-64fbc0b4af19
e37bdd04-f3eb-47f4-b174-70d573239a00	采集			2019-01-14 15:28:21.356+08	2019-01-14 15:28:21.356+08	ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3	3	\N
20e441d3-19e4-4f48-bf5a-36448db75de0	采集			2019-01-14 15:31:37.066+08	2019-01-14 15:31:37.066+08	a23e3c37-7ab4-4ed4-b73b-a791c96d596c	3	\N
ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	采集			2019-01-14 15:44:06.672+08	2019-01-14 15:44:06.672+08	a91dd10c-af61-4fcf-8294-1d200a035664	3	\N
b3f37406-863d-441d-80af-d7f79747ca0f	采集			2019-01-14 15:47:03.726+08	2019-01-14 15:47:03.726+08	4eb4d7ed-2199-4514-9411-9c12d59f72e3	3	\N
d9a190a8-343c-43a4-8ad3-2dc5ee25e283	采集			2019-01-14 15:48:47.007+08	2019-01-14 15:48:47.007+08	9db37a62-7896-4477-a3c4-7d317d28f26e	3	\N
eed60769-7fe4-4bca-87ea-2de74bb2cd88	采集			2019-01-14 15:51:12.897+08	2019-01-14 15:51:12.897+08	3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc	3	\N
b5064da1-895c-40e3-84db-b6330326f9c8	采集	\N		2019-01-14 16:35:40.03+08	2019-01-14 16:35:40.03+08	e996ef32-944e-448f-9370-862fd5ed719d	3	\N
cf950c05-2642-444a-bda7-45be85b50ddc	采集			2019-01-18 16:57:11.301+08	2019-01-18 16:57:11.301+08	0794ccbd-2a6e-49b6-9b42-abf93957b33c	3	3dc26404-5272-4fbc-97f2-8493009c06ac
b2d20518-3d22-4730-9121-735650110838	采集			2019-01-19 09:49:48.912+08	2019-01-19 09:49:48.912+08	53ff80a4-bf85-47bd-9351-ad8cbd0121e3	3	cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
e65346cf-f6d0-41a0-a1d9-e3644ea50971	采集			2019-01-19 09:53:06.271+08	2019-01-19 09:53:06.271+08	2b4affd1-2151-4632-b11a-e0176fee0a84	3	cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
c7d0b1b1-3264-4661-b682-0276be62ccdc	采集			2019-01-19 09:54:40.593+08	2019-01-19 09:54:40.593+08	75ff49e4-22d3-4777-a5a5-71f3a5fc4436	3	cc42ea9a-ff73-473a-8b2d-3b1da63c42c3
6e13b5de-10cb-42f1-ac80-b2550d25a5ea	采集			2019-01-19 14:34:12.833+08	2019-01-19 14:34:12.833+08	9eef0ea4-1634-4d46-a9fb-6613a37b9431	3	d0816bbb-7afc-4139-a930-ba8f5267c76c
d530a5b1-8f7a-49ae-b3c8-2f255589e6bf	采集			2019-01-19 14:35:13.518+08	2019-01-19 14:35:13.518+08	f5cf2b42-6efc-474b-aad5-f5614e5ec0d8	3	d0816bbb-7afc-4139-a930-ba8f5267c76c
59eccaba-e3d8-4c03-a603-6bd46db0b0a6	推送			2019-01-19 15:00:28.915+08	2019-01-19 15:00:28.915+08	e1d537c6-2a5b-4b97-91ea-a2bd94093494	3	ee33724a-0cca-49c0-b8b0-e0b979eb6527
47fbc1d7-872f-4e0d-b675-c7d51436f795	新采集	\N		2020-04-09 09:22:36.757+08	2020-04-09 09:22:36.757+08	f0443cf8-a24d-46f9-a894-7c731798736d	3	\N
fd42cfd6-747c-4ac6-a35f-ad9e510fddbb	监听采集			2019-01-18 14:06:05.486+08	2019-02-13 09:47:57.992+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522	3	95265997-3ebd-4e01-98d9-9d5a2caa3a7f
36882038-cdf2-4b13-ba96-4cc30aec58fd	新采集	\N		2020-04-09 09:29:04.014+08	2020-04-09 09:29:04.014+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	3	\N
4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b	采集			2019-01-19 17:15:44.54+08	2019-01-19 17:15:44.54+08	0a341896-3c5d-4e60-af19-fe5f645c6967	3	\N
10e4ca9b-2ded-4704-af44-5ed38e7a8254	采集2	\N		2019-01-19 17:19:28.195+08	2019-01-19 17:19:28.195+08	0a341896-3c5d-4e60-af19-fe5f645c6967	3	a0c9fba8-70ea-4fc2-a16f-b308bbf77669
4975a00d-a65f-4564-9e87-4d0e75b2b44a	微功耗	\N		2020-04-09 09:51:08.165+08	2020-04-09 09:51:08.165+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	3	\N
3b90cfc3-9011-4dac-a197-db1f1224684d	微功耗	\N		2020-04-09 09:55:16.519+08	2020-04-09 09:55:16.519+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	3	\N
0264aff4-ba22-40ca-9ef9-866e00e00fb8	采集			2019-01-22 09:31:07.199+08	2019-01-22 09:31:07.199+08	20b14a3c-9532-42df-b60c-baf4ba16865c	3	e7b120d0-2c54-4acf-b8c2-af18f962c558
e850fe28-ee2e-40bd-a8fd-c02a63f4107d	采集			2019-01-22 15:15:43.195+08	2019-01-22 15:15:43.195+08	ff9746d5-839e-46dc-aae9-ec714680e041	3	03ba9b30-1d60-4da2-b9ff-1de9b514300c
bb14be6f-ac60-4646-a8ce-c0e179c648d2	采集			2019-01-24 09:47:37.034+08	2019-01-24 09:47:37.034+08	17b4a482-830c-44e4-be09-1a9cac67c1e7	3	f6ebffcf-2f2a-41fa-a36b-d997b8584c39
3ce74ad5-66e4-40b3-b5c0-52653cbbca87	采集			2019-01-24 11:51:28.172+08	2019-01-24 11:51:28.172+08	03f53a90-43a0-47d6-9183-edfb825a09e5	3	bcd22974-e902-4447-87c0-bfba8144410b
62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	采集			2019-01-25 16:07:25.623+08	2019-01-25 16:07:25.623+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	\N
bb308c8a-f70a-4351-a6dc-aedf8612cceb	采集			2019-01-28 10:00:29.639+08	2019-01-28 10:00:29.639+08	a9f88745-32d0-4068-bcd3-6735e90b15a0	3	e99ff603-3675-43ae-a516-403cf3d1a1b1
6e91a917-6930-48a9-8a2e-69cd0a42dfde	采集			2019-01-28 10:50:57.67+08	2019-01-28 10:50:57.67+08	d0fcad31-8656-4b67-9530-1519960defec	3	e4ffc96e-8398-498d-a5f3-d1ad11efc13d
2a275bcf-4e3b-48ac-94a4-f7a77b45ab8b	采集			2019-01-29 10:56:26.787+08	2019-01-29 10:56:26.787+08	6020197b-abd9-4ef2-b674-0451a754fe68	3	fa427e87-1cdc-4ef4-95d5-4cf112506b12
ed20720d-14e7-48f1-bf4e-da3ec2ac4c46	采集			2019-01-30 11:05:38.189+08	2019-01-30 11:05:38.189+08	9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5	3	dca382da-547a-400b-8fbb-3a1bbd32b33b
85886b04-282a-40be-9b2c-8fe7aaf2d38a	采集			2019-01-31 11:35:16.837+08	2019-01-31 11:35:16.837+08	c9459443-e9d6-48eb-b37d-d25dfb8faaac	3	aa7da275-9e58-4b7e-8fe4-7abbcb421491
33cf337b-b7b3-44f0-ba1c-a4394b8b357f	微功耗	\N		2020-04-09 09:59:58.168+08	2020-04-09 09:59:58.168+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	3	\N
c90eced6-4535-4b01-88a3-047c445cb5d6	数据同步	\N		2019-02-22 10:41:23.696+08	2019-02-22 10:41:23.696+08	b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	3	6fc5be55-5544-4595-8414-95be244eb503
35ec137a-ea04-4c81-bbaf-23ddae650c0e	采集			2019-01-04 15:34:26.888+08	2019-07-02 15:41:32.303+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	3	597ac084-8a80-4f12-9a5b-73d7910331ff
1956eecf-7103-4765-af34-27974b9f3e7c	采集			2018-11-22 14:43:45.889+08	2019-02-16 12:14:37.488+08	9d5905bc-0969-4032-ad57-69d6490fbc47	3	03ba9b30-1d60-4da2-b9ff-1de9b514300c
a52e2352-c27a-4d80-85fd-aaf9967cc19f	微功耗	\N		2020-04-09 10:06:38.587+08	2020-04-09 10:06:38.587+08	bf5a92b7-59ab-429b-bce7-da858650205e	3	\N
cce19766-fd89-4a5d-926f-50ede055ec49	下发			2019-02-21 17:19:51.494+08	2019-02-21 17:19:51.494+08	b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	2	2d247587-8e44-41f5-b585-772822f1841e
ec30262f-dc01-41c2-80a3-5602fa716888	配置同步	\N		2019-02-22 10:40:53.905+08	2019-02-22 10:40:53.905+08	b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	2	feb25833-7419-4779-bfc8-809195843744
ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	采集			2019-02-22 11:35:12.146+08	2019-02-22 11:35:12.146+08	d1b35088-9410-4203-924c-75b60634c7c6	3	\N
254d4101-7301-4d4a-be79-29d0f7f616e3	下发连续采集指令	\N		2019-02-13 09:44:35.015+08	2019-04-20 17:24:55.769+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522	2	078cc06c-c4e7-4863-8a2a-7e080b162bf9
738a6ad2-95f1-403a-94a1-8f641b2ab73f	采集			2019-02-22 11:35:40.178+08	2019-02-22 11:35:40.178+08	283a3cd5-8593-4b92-a528-bbd35a07b288	3	\N
e956e4a1-49b3-46e3-b953-47c2c17a5098	采集			2019-02-22 13:27:41.882+08	2019-02-22 13:27:41.882+08	ef6476c9-709e-4afb-a4d9-57009ee3ecf5	3	\N
7620b964-ee22-4e91-bae4-86f74ff0906f	采集	\N		2019-02-22 15:14:23.585+08	2019-12-05 09:45:18.208+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	3	bdad7976-f666-4911-997a-031ebe9ccdf5
b8f7deb8-c684-47d4-b8b0-a1d66615944c	采集			2019-02-22 13:35:17.63+08	2019-02-22 13:35:17.63+08	4068ff34-b211-4386-b274-0a6b12f35b59	3	\N
64960998-d3e8-4ce1-857a-36e232a099c0	采集			2019-02-22 13:41:58.513+08	2019-02-22 13:41:58.513+08	6c6b5c79-b408-447c-b2b1-3ff7bf122a19	3	\N
b1305d43-23de-4740-a7a2-213facc63133	采集			2019-02-22 13:44:23.968+08	2019-02-22 13:44:23.968+08	c70bf363-fc19-41f9-80df-27a231a1a2bd	3	\N
4235259d-d5d3-4488-8f71-1f6ee7631fb4	指令下发	\N		2019-02-22 15:14:23.577+08	2019-10-16 14:50:46.089+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	2	9a5c7ac8-776a-4dd5-a224-c083f94292e6
9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	微功耗	\N		2020-04-09 10:11:06.271+08	2020-04-09 10:11:06.271+08	a97834b4-727b-42ad-9ce0-aede595a5727	3	\N
f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d	采集			2019-02-22 16:33:55.419+08	2019-02-22 16:33:55.419+08	b21b534c-d8f1-4caf-a405-1682a99dc1a9	3	\N
f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0	采集			2019-02-22 17:20:51.913+08	2019-02-22 17:20:51.913+08	dcac1d14-912a-4868-8be8-08d1e86d2fa5	3	f6ebffcf-2f2a-41fa-a36b-d997b8584c39
3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	采集	\N		2019-02-25 11:38:45.178+08	2019-02-25 11:38:45.178+08	ef68a37c-37fa-40d7-8537-dcbc64eaf1e1	3	06fa55b0-c96c-4704-8998-ffd96d4feaa2
4b01a62e-4b72-477a-b628-3e60ab9eba3c	采集			2019-02-25 11:41:29.897+08	2019-02-25 11:41:29.897+08	a97834b4-727b-42ad-9ce0-aede595a5727	3	\N
b0322703-c5a9-4310-a6b7-0311a4317136	云采集	\N		2019-02-25 11:41:29.934+08	2019-02-25 11:41:29.934+08	a97834b4-727b-42ad-9ce0-aede595a5727	3	\N
8ea33ec2-98a7-487c-a662-18151711a0b4	Lora采集	\N		2019-02-25 11:41:29.968+08	2019-02-25 11:41:29.968+08	a97834b4-727b-42ad-9ce0-aede595a5727	3	\N
d9cbcff2-8304-4233-80db-b582ae78540c	采集			2019-02-25 11:42:07.363+08	2019-02-25 11:42:07.363+08	bf5a92b7-59ab-429b-bce7-da858650205e	3	\N
9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	云采集	\N		2019-02-25 11:42:07.404+08	2019-02-25 11:42:07.404+08	bf5a92b7-59ab-429b-bce7-da858650205e	3	\N
2c2cd567-6eef-4304-afc9-cc14b4435240	Lora采集	\N		2019-02-25 11:42:07.432+08	2019-02-25 11:42:07.432+08	bf5a92b7-59ab-429b-bce7-da858650205e	3	\N
67a68865-ee21-4627-b68d-98ed991689ad	云采集	\N		2019-02-25 11:44:07.922+08	2019-02-25 11:44:07.922+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	3	\N
720eb976-fd1d-4947-845b-15b344e808f3	Lora采集	\N		2019-02-25 11:44:07.949+08	2019-02-25 11:44:07.949+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	3	\N
a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	采集			2019-02-25 11:46:10.798+08	2019-02-25 11:46:10.798+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	3	\N
cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	云采集	\N		2019-02-25 11:46:10.829+08	2019-02-25 11:46:10.829+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	3	\N
aea9a199-17e2-4db3-97f7-2f38de50fb90	Lora采集	\N		2019-02-25 11:46:10.857+08	2019-02-25 11:46:10.857+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	3	\N
772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	采集			2019-02-25 11:52:45.924+08	2019-02-25 11:52:45.924+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	3	\N
033a35ac-34f5-4970-871a-394dedbb920e	云采集	\N		2019-02-25 11:52:45.965+08	2019-02-25 11:52:45.965+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	3	\N
459695d2-69ab-4d25-8ea2-64c5b1884652	Lora采集	\N		2019-02-25 11:52:45.995+08	2019-02-25 11:52:45.995+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	3	\N
4af15f4e-a452-4123-8c3f-17182b707f61	采集			2019-02-25 11:55:32.889+08	2019-02-25 11:55:32.889+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	3	\N
ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	云采集	\N		2019-02-25 11:55:32.929+08	2019-02-25 11:55:32.929+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	3	\N
7c8d2cc9-631b-4ba3-81d4-30126181dc94	Lora采集	\N		2019-02-25 11:55:32.96+08	2019-02-25 11:55:32.96+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	3	\N
03afe194-fc01-4993-8f9a-ed4ca0ae6d90	采集			2019-02-25 13:30:26.996+08	2019-02-25 13:30:26.996+08	6e79c080-ecb3-4222-927e-f2dfcd85683a	3	\N
0dc2011e-5962-4366-82dd-6a326e0ddbf6	云采集	\N		2019-02-25 13:30:27.023+08	2019-02-25 13:30:27.023+08	6e79c080-ecb3-4222-927e-f2dfcd85683a	3	\N
b1acc286-422b-46a2-a2ea-4aa8c9b8256f	采集			2019-02-25 13:31:57.633+08	2019-02-25 13:31:57.633+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	3	\N
bb29ba88-ec03-44ab-ba29-00d98ccd9af1	云采集	\N		2019-02-25 13:31:57.668+08	2019-02-25 13:31:57.668+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	3	\N
4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	采集			2019-02-25 13:32:42.887+08	2019-02-25 13:32:42.887+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	3	\N
666d6810-bfe4-47ca-93bd-fa60ced4252d	云采集	\N		2019-02-25 13:32:42.927+08	2019-02-25 13:32:42.927+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	3	\N
ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	采集			2019-02-25 13:43:02.015+08	2019-02-25 13:43:02.015+08	30bfe302-d364-4325-be1f-7fef73afaf77	3	\N
998641f1-bcc9-4b88-8155-68d0cdd22f67	云采集	\N		2019-02-25 13:43:02.183+08	2019-02-25 13:43:02.183+08	30bfe302-d364-4325-be1f-7fef73afaf77	3	\N
c4126560-43a1-4c04-a7c2-182072c07e07	采集			2019-02-25 14:08:36.914+08	2019-02-25 14:08:36.914+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	3	\N
0cd9085e-abe2-4c04-9956-b0572ba81fa5	云采集	\N		2019-02-25 14:08:36.945+08	2019-02-25 14:08:36.945+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	3	\N
198c4f79-6642-4537-b774-bea491692a9e	云采集	\N		2019-02-25 14:10:58.951+08	2019-02-25 14:10:58.951+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	3	\N
2a6ffd97-9937-4a41-b19d-9e8a1932c22a	采集			2019-02-25 14:10:58.992+08	2019-02-25 14:10:58.992+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	3	\N
12671ad8-5da9-4695-abc5-8dc116c5f034	云采集	\N		2019-02-25 14:12:02.951+08	2019-02-25 14:12:02.951+08	35088e4d-f42e-4324-8237-bedb617ee489	3	\N
f076544b-acde-440a-a44f-ff4468e3cdac	采集			2019-02-25 14:12:02.984+08	2019-02-25 14:12:02.984+08	35088e4d-f42e-4324-8237-bedb617ee489	3	\N
cdf26baa-f8c9-435a-ace0-c2eff041d8c2	云采集	\N		2019-02-25 14:14:48.837+08	2019-02-25 14:14:48.837+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	3	\N
db70825c-6666-4931-b32b-5f372af95d42	采集			2019-02-25 14:14:48.883+08	2019-02-25 14:14:48.883+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	3	\N
2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	云采集	\N		2019-02-25 14:16:02.465+08	2019-02-25 14:16:02.465+08	80342a8c-db6f-40e6-b331-0ae1eca53138	3	\N
8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	采集			2019-02-25 14:16:02.486+08	2019-02-25 14:16:02.486+08	80342a8c-db6f-40e6-b331-0ae1eca53138	3	\N
af8ad166-474f-43bd-83c2-9f6082f78eae	云采集	\N		2019-02-25 14:17:43.261+08	2019-02-25 14:17:43.261+08	b345cafa-8d58-454f-a01e-e42859545b18	3	\N
e96dc802-721b-4cf2-acc4-f3fb360feaef	采集			2019-02-25 14:17:43.289+08	2019-02-25 14:17:43.289+08	b345cafa-8d58-454f-a01e-e42859545b18	3	\N
f98a9365-9230-47fd-82a1-9ba1f6908c8d	云采集	\N		2019-02-25 14:18:58.106+08	2019-02-25 14:18:58.106+08	536c5d54-6c47-4800-aecb-47219ee56fc2	3	\N
6b2d0d75-954d-476d-a920-83a0439a898b	采集			2019-02-26 16:30:15.681+08	2019-02-26 16:30:15.681+08	88bd8ad3-6ffd-4b0f-8768-085e0e59d92e	3	\N
7cad6a7a-e258-4ed6-aa59-e6b8095beaae	采集			2019-02-25 14:18:58.136+08	2019-02-25 14:18:58.136+08	536c5d54-6c47-4800-aecb-47219ee56fc2	3	\N
0119f42c-7e17-4f77-81ed-3e55f31b8e61	微功耗采集	\N		2019-02-25 14:20:41.325+08	2019-02-25 14:20:41.325+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	3	\N
5b7ef632-3a0a-470c-848a-488e63e67023	采集			2019-02-25 14:20:41.363+08	2019-02-25 14:20:41.363+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	3	\N
b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	云采集	\N		2019-02-25 14:20:41.396+08	2019-02-25 14:20:41.396+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	3	\N
7169451f-4110-4ba2-8482-b6e4a51eb459	采集			2019-02-25 14:21:57.047+08	2019-02-25 14:21:57.047+08	d26842d0-7685-4eec-869d-160b023932b9	3	\N
e2096ac1-6a10-4df5-9393-173d19fbbee0	微功耗	\N		2019-02-25 14:24:04.254+08	2019-02-25 14:24:04.254+08	f0443cf8-a24d-46f9-a894-7c731798736d	3	\N
8b567669-1458-4b89-8448-257ca3ecb15c	云采集	\N		2019-02-25 14:24:04.28+08	2019-02-25 14:24:04.28+08	f0443cf8-a24d-46f9-a894-7c731798736d	3	\N
63df0f39-75da-443e-a275-59ebd94aa3ea	采集			2019-02-25 14:24:04.307+08	2019-02-25 14:24:04.307+08	f0443cf8-a24d-46f9-a894-7c731798736d	3	\N
1c56bfde-5866-450a-9682-65dd34bc3296	采集			2019-02-25 15:51:46.876+08	2019-02-25 15:51:46.876+08	18b82e73-7501-445f-a72c-a8e20cf9da40	3	\N
7533c2be-930a-4296-bdea-f4093aabfeb1	云采集	\N		2019-02-25 15:51:46.911+08	2019-02-25 15:51:46.911+08	18b82e73-7501-445f-a72c-a8e20cf9da40	3	\N
da212a69-66d5-4870-a4f5-c49da884d914	微功耗	\N		2020-04-09 11:50:56.601+08	2020-04-09 11:50:56.601+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	3	\N
bbd01f40-d430-4d85-95ec-e91a22fab396	云采集	\N		2019-02-25 14:21:56.99+08	2019-11-15 14:29:26.232+08	d26842d0-7685-4eec-869d-160b023932b9	3	\N
80209593-8753-4642-bc14-5537e3223d75	微功耗采集	\N		2019-02-25 14:21:57.02+08	2019-11-15 14:29:41.08+08	d26842d0-7685-4eec-869d-160b023932b9	3	\N
82b95b39-2e60-4eae-9c51-1977fc3b73e9	微功耗	\N		2020-04-13 13:29:57.626+08	2020-04-13 13:29:57.626+08	cbdb48d6-afd7-4322-884a-d37d56f96176	3	\N
d39a1487-77c8-4310-88e9-e12ee46a79a7	采集	\N	复制一芯	2020-04-09 15:41:39.863+08	2020-04-09 15:43:59.523+08	939d26de-ea01-420a-95fb-9bb2398cb1c2	3	6f1a07b6-95d7-4f53-b373-fd5c75edb587
6dfd1190-97ed-46dc-aca7-921af38cdf01	采集	\N		2020-04-09 16:26:13.16+08	2020-04-09 16:26:13.16+08	0b4561c4-31a6-4737-b593-18b2b1973850	3	\N
8e1b795f-20a4-49c1-844a-6818b46743f2	新采集	\N		2020-04-09 16:47:43.468+08	2020-04-09 16:47:43.468+08	c169f72a-deae-4135-84ee-62d771722507	3	\N
e905e3ce-b6ac-4237-9590-14ee97e867fe	新采集	\N		2020-04-09 16:53:13.494+08	2020-04-09 16:53:13.494+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	3	\N
7938b967-3298-4052-b8c2-d0fd4b57adb2	新采集	\N		2020-04-09 17:04:22.01+08	2020-04-09 17:04:22.01+08	18b82e73-7501-445f-a72c-a8e20cf9da40	3	\N
44e109ee-d542-45f6-914e-6313d2ef5aee	新采集	\N		2020-04-09 17:07:54.158+08	2020-04-09 17:07:54.158+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	3	\N
7b3502a3-1fd6-467c-b66f-221cc977bcda	新采集	\N		2020-04-09 17:17:37.089+08	2020-04-09 17:17:37.089+08	536c5d54-6c47-4800-aecb-47219ee56fc2	3	\N
b51644b9-4159-40db-9599-8b080069cc65	新采集	\N		2020-04-09 17:22:39.434+08	2020-04-09 17:22:39.434+08	b345cafa-8d58-454f-a01e-e42859545b18	3	\N
de345f11-6d4a-420b-963d-0bc26a7144f1	新采集	\N		2020-04-10 10:44:44.102+08	2020-04-10 10:44:44.102+08	0796dca5-8068-4bc2-a73f-99160576a988	3	\N
22fd06d1-3028-481b-9025-f4fa0093bb6a	微功耗			2020-04-10 14:35:20.896+08	2020-04-10 14:35:20.896+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	3	\N
bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863	采集			2020-04-10 14:35:20.882+08	2020-04-10 14:52:19.571+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	3	f280eb1c-31e4-4c9e-94b7-1de7919c1855
0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f	云采集	\N		2020-04-10 15:37:56.727+08	2020-04-10 15:37:56.727+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	3	\N
ce9b72cb-67fd-4117-b485-a9443b3409e9	新采集	\N		2020-04-10 17:03:36.545+08	2020-04-10 17:03:36.545+08	80342a8c-db6f-40e6-b331-0ae1eca53138	3	\N
9aaf71fd-cc26-4738-86f0-f27fb8983581	新采集	\N		2020-04-10 17:04:48.155+08	2020-04-10 17:04:48.155+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	3	\N
e8d508fb-9ad6-4f72-bab4-552351765b49	新采集	\N		2020-04-10 17:10:11.914+08	2020-04-10 17:10:11.914+08	35088e4d-f42e-4324-8237-bedb617ee489	3	\N
09173a38-657c-4584-97f6-d5fd984c6cef	新采集	\N		2020-04-13 08:47:00.96+08	2020-04-13 08:47:00.96+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	3	\N
be4087dd-e776-49f6-a2a0-6ad64e530ac9	新采集	\N		2020-04-13 08:51:58.132+08	2020-04-13 08:51:58.132+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	3	\N
600fa9e0-1e6c-4c0f-b9df-2445d771d54f	新采集	\N		2020-04-13 08:58:10.829+08	2020-04-13 08:58:10.829+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	3	\N
c3cf2a99-570b-480e-bd03-d4218a84382d	新采集	\N		2020-04-13 09:02:01.877+08	2020-04-13 09:02:01.877+08	998a52d3-f5ee-4d52-997f-1865b390e26b	3	\N
bf5542b0-0eaf-48a7-acf5-359e608b19d0	云采集	\N		2020-04-13 10:59:41.674+08	2020-04-13 10:59:41.674+08	2f588726-18df-4ab2-b677-5c4479cef768	3	\N
74d8243e-c93f-4694-b627-27150be13541	Lora	\N		2020-04-13 11:00:52.488+08	2020-04-13 11:00:52.488+08	2f588726-18df-4ab2-b677-5c4479cef768	3	\N
ed4d092d-260f-49cc-a985-176fd50d18c9	采集	\N		2020-04-13 11:00:37.572+08	2020-04-13 11:04:26.395+08	2f588726-18df-4ab2-b677-5c4479cef768	3	f280eb1c-31e4-4c9e-94b7-1de7919c1855
ab916260-ed75-4e0b-8109-d9b164ac1f2c	新采集	\N		2020-04-13 11:27:00.942+08	2020-04-13 11:27:00.942+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	3	\N
475ef4a4-f7ad-47ca-bf47-6c02061d73f8	新采集	\N		2020-04-13 11:30:42.551+08	2020-04-13 11:30:42.551+08	9bcce139-4a57-4c96-ba1f-914569011b77	3	\N
8e6f0fd7-4b27-47b4-8e62-85c8302d8219	新采集	\N		2020-04-13 11:34:04.572+08	2020-04-13 11:34:04.572+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	3	\N
a31c164d-a581-4bda-8e94-7c41ab12cfa1	采集	\N		2020-04-13 11:48:21.296+08	2020-04-13 11:48:21.296+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	3	7fcae220-3a13-4230-947b-bb49d6b23b3d
4b648fd9-37fe-4060-b04f-70c5e351b0a4	云采集	\N		2020-04-13 11:49:37.816+08	2020-04-13 11:49:37.816+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	3	\N
ff32ae55-d999-4f10-b4fa-53ef0c69d6be	微功耗	\N		2020-04-13 11:49:49.985+08	2020-04-13 11:49:49.985+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	3	\N
d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d	采集	\N		2020-04-13 13:06:47.912+08	2020-04-13 13:06:47.912+08	71c10138-4c73-4682-af9b-a904323eeac2	3	e5116002-4b68-4d33-b40f-4d08dc7c46b1
1afc6939-be77-4cb0-b7a1-59ed529b9ee1	云采集	\N		2020-04-13 13:07:13.858+08	2020-04-13 13:07:13.858+08	71c10138-4c73-4682-af9b-a904323eeac2	3	\N
933454ed-df7e-4ca3-950b-6faf23a1a5dc	微功耗	\N		2020-04-13 13:27:00.277+08	2020-04-13 13:27:00.277+08	9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	3	\N
6cf95499-c1da-478c-918c-bc809d89feb6	采集			2020-04-13 16:31:25.295+08	2020-04-13 16:34:42.625+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	3	00d10ef2-fbec-43f8-826a-f65d31a13e3d
29b24211-38a9-4c77-9218-11d0c3939a5b	云采集			2020-04-13 16:42:59.123+08	2020-04-13 16:42:59.123+08	8fd9d375-1389-43b9-9423-654a4dd5af44	3	\N
8aef8520-904e-46b6-9223-952b50c16f52	微功耗			2020-04-13 16:42:59.145+08	2020-04-13 16:42:59.145+08	8fd9d375-1389-43b9-9423-654a4dd5af44	3	\N
b9a9f40b-2946-4b0f-abe7-10611a02fe1d	采集			2020-04-13 16:42:59.16+08	2020-04-13 16:45:01.106+08	8fd9d375-1389-43b9-9423-654a4dd5af44	3	eb847cf6-6311-40ea-85ff-6ad19edc36da
05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a	采集	\N		2020-04-13 17:26:55.021+08	2020-04-13 17:26:55.021+08	a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc	3	\N
6084f264-aec5-4a6c-be5e-028c5139dfb8	新采集	\N		2020-04-14 09:39:59.45+08	2020-04-14 09:39:59.45+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	3	\N
cb22fb01-45b8-4e12-83cd-75fb5dcf585e	新采集	\N		2020-04-14 09:46:47.13+08	2020-04-14 09:46:47.13+08	30bfe302-d364-4325-be1f-7fef73afaf77	3	\N
97be25b3-75df-4137-a479-22343213fe74	采集			2019-02-25 14:25:00.058+08	2019-02-25 14:25:00.058+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	3	\N
f2d80142-2f46-42d6-aa9e-c4e687c5690d	微功耗测试	\N		2019-02-25 14:25:00.105+08	2019-02-25 14:25:00.105+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	3	\N
49ff32ed-be50-4c87-ba73-af20b848e154	云采集	\N		2019-02-25 14:25:00.151+08	2019-02-25 14:25:00.151+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	3	\N
cf9f22ff-a972-4050-b4be-93cd43ed5463	采集			2019-02-26 16:47:57.174+08	2019-02-26 16:47:57.174+08	c809f621-a9ff-4922-aa0e-1bcadbfcb7e1	3	\N
ad8e440e-0f52-4e43-95ed-97bed0575767	Lora	\N		2020-04-09 11:51:13.812+08	2020-04-09 11:51:13.812+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	3	\N
8e1681a6-92f5-472c-a4dd-f40e16934f94	新采集	\N		2020-04-09 16:26:24.243+08	2020-04-09 16:26:24.243+08	0b4561c4-31a6-4737-b593-18b2b1973850	3	\N
bef72760-da7f-4b64-a389-b3040de2ded3	Lora	\N		2020-04-10 15:38:12.116+08	2020-04-10 15:38:12.116+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	3	\N
f018487f-55ee-4fc2-b204-738cde478d4b	新采集	\N		2020-04-10 17:13:02.98+08	2020-04-10 17:13:02.98+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	3	\N
0bf1ab3a-44c3-44d5-bcec-83c1507080c9	微功耗	\N		2020-04-13 11:00:04.933+08	2020-04-13 11:00:04.933+08	2f588726-18df-4ab2-b677-5c4479cef768	3	\N
48c0716a-ffe7-4de2-b5d6-295ebd1bef98	微功耗	\N		2020-04-13 13:07:33.75+08	2020-04-13 13:07:33.75+08	71c10138-4c73-4682-af9b-a904323eeac2	3	\N
0928966d-ed3a-4cab-9e1b-32af22f5f89b	新采集	\N		2020-04-14 10:12:44.81+08	2020-04-14 10:12:44.81+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	3	\N
c7bcd7ca-9e17-41e1-b3e4-39641d53a443	采集			2019-02-25 15:39:43.19+08	2019-02-25 15:39:43.19+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	3	\N
70454576-c9f8-4b8b-82a5-2ba414369cf1	云采集	\N		2019-02-25 15:39:43.22+08	2019-02-25 15:39:43.22+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	3	\N
fc002308-8f49-4bde-a539-028bc4a00d6d	Lora采集	\N		2019-02-25 15:39:43.245+08	2019-02-25 15:39:43.245+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	3	\N
89297513-df93-40a4-bfb4-cc2393d5128a	云采集	\N		2019-02-25 15:41:07.342+08	2019-02-25 15:41:07.342+08	c169f72a-deae-4135-84ee-62d771722507	3	\N
45284d89-2621-47e3-b5ee-e03229611e89	采集			2019-02-25 15:41:59.73+08	2019-02-25 15:41:59.73+08	9bcce139-4a57-4c96-ba1f-914569011b77	3	\N
aa350be5-e923-4961-b523-fd25c5e8445f	云采集	\N		2019-02-25 15:41:59.774+08	2019-02-25 15:41:59.774+08	9bcce139-4a57-4c96-ba1f-914569011b77	3	\N
cdc89f99-96ab-4176-a290-0cd507439722	Lora采集	\N		2019-02-25 15:41:59.809+08	2019-02-25 15:41:59.809+08	9bcce139-4a57-4c96-ba1f-914569011b77	3	\N
2fc50d79-7cc8-477d-ad02-7c457e527084	采集			2019-02-25 15:43:06.982+08	2019-02-25 15:43:06.982+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	3	\N
fe7497bd-7016-4a8c-abf8-23ec8981746c	云采集	\N		2019-02-25 15:43:07.012+08	2019-02-25 15:43:07.012+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	3	\N
b62a52ce-bcd3-4156-89d7-83ab453c3121	Lora采集	\N		2019-02-25 15:43:07.033+08	2019-02-25 15:43:07.033+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	3	\N
6db67d93-daa9-4ef0-840f-c89dfc62abdc	采集			2019-02-25 15:44:37.105+08	2019-02-25 15:44:37.105+08	998a52d3-f5ee-4d52-997f-1865b390e26b	3	\N
aab98040-a906-4f79-a6df-74df5b9849bc	云采集	\N		2019-02-25 15:44:37.139+08	2019-02-25 15:44:37.139+08	998a52d3-f5ee-4d52-997f-1865b390e26b	3	\N
0518af3d-a054-45a0-815a-8ed6c3833d46	Lora采集	\N		2019-02-25 15:44:37.169+08	2019-02-25 15:44:37.169+08	998a52d3-f5ee-4d52-997f-1865b390e26b	3	\N
99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	采集			2019-02-25 15:46:09.576+08	2019-02-25 15:46:09.576+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	3	\N
f832c684-9c7c-484e-b547-a4b717644f8a	微功耗测试	\N		2019-02-25 15:46:09.609+08	2019-02-25 15:46:09.609+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	3	\N
fbaf320c-de3d-4cdb-93f1-960973d87747	云采集	\N		2019-02-25 15:46:09.645+08	2019-02-25 15:46:09.645+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	3	\N
d87ea357-e29f-4926-8589-a3e8d7f38ca2	采集			2019-02-25 15:46:53.776+08	2019-02-25 15:46:53.776+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	3	\N
8b2b42d5-d6c3-4b76-ba91-d422163d96b6	云采集	\N		2019-02-25 15:46:53.798+08	2019-02-25 15:46:53.798+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	3	\N
88b4c158-2959-46c0-950e-aa1f77962dbc	Lora采集	\N		2019-02-25 15:46:53.828+08	2019-02-25 15:46:53.828+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	3	\N
87e561ee-2bde-476f-9d3c-193c5be9f692	采集			2019-02-25 15:47:53.719+08	2019-02-25 15:47:53.719+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	3	\N
f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	云采集	\N		2019-02-25 15:47:53.75+08	2019-02-25 15:47:53.75+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	3	\N
f8e59d17-39f9-4805-895b-be09de939091	采集	\N		2020-04-09 11:51:32.142+08	2020-04-09 11:51:49.068+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	3	e5116002-4b68-4d33-b40f-4d08dc7c46b1
62e931ef-494f-487d-b32d-d4025cfccc5b	新采集	\N		2020-04-09 16:43:40.913+08	2020-04-09 16:43:40.913+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	3	\N
002dd588-51a7-417d-9986-71cdcdc4b0b4	Lora	\N		2020-04-13 13:07:48.143+08	2020-04-13 13:07:48.143+08	71c10138-4c73-4682-af9b-a904323eeac2	3	\N
fbafe139-6003-4dff-a59a-bf51b0d5ce75	新采集	\N		2020-04-14 10:17:16.432+08	2020-04-14 10:17:16.432+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	3	\N
886912b7-fff8-4aff-84f4-04c043946eb0	采集	\N		2020-04-14 10:33:18.979+08	2020-04-14 10:33:18.979+08	2b960cb5-8b22-4a35-b811-2a74b8f47196	3	\N
17324dd0-1385-4d70-92fc-49d595c88ed8	采集	\N		2020-04-14 10:39:52.925+08	2020-04-14 10:39:52.925+08	2e98107c-2635-43a9-a89f-872152bac901	3	\N
b350cfa3-4960-4e96-ae63-0e0ab3319c29	采集	\N		2020-04-14 10:45:03.16+08	2020-04-14 10:45:03.16+08	2de0b18f-a13a-48a9-8e34-6bfeff609972	3	\N
ba9214a7-0d02-453f-ae49-912a45fd027f	采集	\N		2019-02-25 15:41:07.26+08	2020-08-17 14:07:48.147+08	c169f72a-deae-4135-84ee-62d771722507	3	\N
bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	微功耗测试			2019-02-25 15:41:07.307+08	2020-08-17 14:08:13.504+08	c169f72a-deae-4135-84ee-62d771722507	3	\N
87fb5477-8056-44e6-b0a0-5cb1e55703d8	云采集	\N		2019-02-25 17:37:04.277+08	2020-04-05 14:13:19.301+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	3	\N
9a7d0b50-af38-4c47-b314-4dbca09f5ad2	采集			2019-02-25 16:03:31.5+08	2019-02-25 16:03:31.5+08	f7cf6cc3-3067-42c4-8d9d-85df26882451	3	\N
e78b12fc-fda1-4ce1-81a7-9e63695906ec	采集			2019-02-25 16:10:34.019+08	2019-02-25 16:10:34.019+08	934104cb-a134-4796-9c3d-52f0e8266fa3	3	f2ec840a-2e0c-4178-91e8-8b5b44009561
1b1a6da7-1ad4-4afe-b61d-321cff8c222c	采集		modbus振弦采集仪	2019-02-25 16:01:22.948+08	2019-02-25 16:49:51.872+08	3c72a231-83a6-4d92-88d3-d58e0660cef9	3	2eae02f9-d98b-4ac9-b5a0-67f355eb62f4
ba31efb5-9309-493e-a3b6-e161c92e9dfa	采集			2019-02-25 17:37:04.245+08	2019-02-25 17:37:04.245+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	3	7c734114-6fa7-41a5-8f0c-ce0940aded18
6ed5b377-588a-4ba0-bbd8-f528726aa520	采集	\N		2019-02-25 17:37:56.405+08	2019-02-25 17:37:56.405+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	3	a45d8866-5e4f-48fc-a646-8462d4a516a6
fdd035c2-82b6-4d53-b138-ddb5ff38be70	云采集	\N		2019-02-25 17:37:56.437+08	2019-02-25 17:37:56.437+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	3	\N
3b999acc-dc02-4c57-ba1b-2bdd8d971f72	微功耗	\N		2019-02-25 17:37:56.463+08	2019-02-25 17:37:56.463+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	3	\N
c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1	采集			2019-02-26 16:29:15.924+08	2019-02-26 16:29:15.924+08	7ac67279-f72c-4296-ba27-9b03b8c07c05	3	\N
a945f27e-4486-498d-aa7b-2226787e0a8c	采集			2019-02-26 16:39:23.426+08	2019-02-26 16:39:23.426+08	a504d969-ffb0-42c6-9edd-529d1d61a77c	3	\N
9081728a-4ac0-47d0-bc7d-508451fd55df	采集			2019-03-04 11:20:58.187+08	2019-03-04 11:20:58.187+08	7128744b-0a8b-463f-b231-40f8862cba87	3	e7ef3612-fa92-4001-848c-57da35f5af77
d28c3b83-f55a-4a81-8513-36abc92c3b7b	采集			2019-03-05 13:25:13.305+08	2019-03-05 13:25:13.305+08	49b8d21c-3486-496b-b17b-ccf195aaeb65	3	\N
403c6c8b-f94a-43a2-bbf5-5146ac46c2c0	采集			2019-03-05 13:33:36.266+08	2019-03-05 13:33:36.266+08	9ea89d82-49ea-480a-a90a-0b99290db919	3	\N
bbfe7c35-6457-4e4f-87d0-fec36f73c28b	采集			2019-03-05 13:35:31.071+08	2019-03-05 13:35:31.071+08	06f5aa07-d8ae-4621-9db2-278fb653ddcd	3	\N
719b1f89-ba16-4e07-bcb6-f3914f8e0aca	云采集	\N		2020-04-09 11:52:17.552+08	2020-04-09 11:52:17.552+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	3	\N
dd63a0aa-71f9-4a32-9b10-0cce05dfc818	Ang_Y			2019-03-19 15:25:07.084+08	2019-03-19 15:25:07.084+08	cbd0eeaa-e06e-4933-9394-86c48eacae95	3	\N
7fe724a3-9e75-4cdf-94e3-bdd7451ff05c	Lora	\N		2019-02-25 17:37:04.326+08	2020-04-05 14:13:59.988+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	3	\N
0593d534-af19-4662-bf37-b3393cd7d706	微功耗	\N		2019-02-25 17:37:04.303+08	2020-04-05 14:14:10.182+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	3	\N
77be95d2-b89a-48b1-a68d-8af8d86899b4	采集	\N		2019-03-06 10:43:47.023+08	2019-03-06 10:43:47.023+08	3b7ca159-32d0-4c74-8f84-591774636dc5	3	28d1a5bb-346e-4a5e-8854-a0c47f8357b7
afa1f203-3267-41dd-9442-974317e28ac3	下发	\N		2019-03-05 15:11:48.091+08	2019-03-08 16:51:58.637+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	2	ff261e2f-e34f-4f1c-933a-aec8cac3b02f
1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064	采集			2019-03-08 17:17:40.598+08	2019-03-08 17:17:40.598+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	3	b45287f0-ebb9-4479-8090-b85009e199f0
2e73374e-14c1-47d9-a0ce-f6d05b317930	采集			2019-03-12 09:49:51.415+08	2019-03-12 09:49:51.415+08	7f8fac16-3dbd-4d0a-bf38-322c5818e096	3	64b4bff2-0b22-4b07-b732-9a80e5a5f8f9
935629d5-3f9e-4001-8694-cd11f39b6061	采集			2019-03-14 11:21:14.953+08	2019-03-14 11:21:14.953+08	9aa975c7-a3d4-42ec-a384-17d0425e602a	3	f6f903f9-bd32-4fa0-9305-074458402bd5
0551369c-3cb4-4613-96cd-f9677b1c6662	采集	\N		2019-03-15 11:37:24.338+08	2019-03-15 13:54:18.054+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	3	333f9eaa-379c-4293-a159-a26f133e42be
d4af9993-5dc1-4f66-bc37-fd3ab9458c18	采集			2019-03-15 14:35:35.87+08	2019-03-15 14:35:35.87+08	df22cddf-5a50-41f7-980a-0bbef6aeb763	3	\N
2bf1019d-5976-4ecf-9970-773d334f184d	采集			2019-03-15 14:36:32.765+08	2019-03-15 14:36:32.765+08	ce1e7a12-8f26-4f77-8610-4871a40cfe98	3	\N
895b9731-8518-47fc-b126-37124415845f	一体化	\N		2019-03-15 16:36:12.139+08	2019-03-15 16:36:12.139+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	3	\N
5a900cd1-fd3e-439c-b765-9829c9a61d32	一体化	\N		2019-03-15 16:40:25.018+08	2019-03-15 16:40:25.018+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	3	\N
46d29a93-ef1e-4724-a19b-8693518dfc89	一体化	\N		2019-03-15 16:44:01.37+08	2019-03-15 16:44:01.37+08	d32eacce-7db0-4c15-b17c-f1d870389c14	3	\N
dd73a8bf-daac-40fc-82c3-bb5caad67d03	一体化			2019-03-15 17:00:45.46+08	2019-03-15 17:00:45.46+08	ad1ce5b5-24d5-4aa3-9125-bbb25ea24069	3	\N
abffe5ee-8ad1-41b8-95f2-70a6d52220db	云采集	\N		2020-04-14 10:33:35.171+08	2020-04-14 10:33:35.171+08	2b960cb5-8b22-4a35-b811-2a74b8f47196	3	\N
9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f	云采集	\N		2020-04-14 10:40:07.781+08	2020-04-14 10:40:07.781+08	2e98107c-2635-43a9-a89f-872152bac901	3	\N
f331e32f-da35-4df4-80fe-50f681800a26	temp			2019-03-19 15:25:06.976+08	2019-03-19 15:25:06.976+08	cbd0eeaa-e06e-4933-9394-86c48eacae95	3	\N
856b0c3e-b6db-4332-93b2-88d4bc0e019f	Ang_X			2019-03-19 15:25:07.066+08	2019-03-19 15:25:07.066+08	cbd0eeaa-e06e-4933-9394-86c48eacae95	3	\N
43846e9c-36d2-4aad-a9ed-cc837fecec96	temp			2019-03-19 15:25:15.743+08	2019-03-19 15:25:15.743+08	4ff02b0c-e9de-4687-90b5-0e723ab835fe	3	\N
5c3255a3-17a0-4ff5-8704-351d606c322f	Ang_X			2019-03-19 15:25:15.777+08	2019-03-19 15:25:15.777+08	4ff02b0c-e9de-4687-90b5-0e723ab835fe	3	\N
09b8a9bb-2979-488d-9ada-612e0e3c8104	Ang_Y			2019-03-19 15:25:15.786+08	2019-03-19 15:25:15.786+08	4ff02b0c-e9de-4687-90b5-0e723ab835fe	3	\N
c05079d4-2c90-4409-aca1-0693e27d413e	采集			2019-03-19 16:45:17.828+08	2019-03-19 16:45:17.828+08	e4a7eb69-0c5d-4b87-b1af-913b0220dea2	3	\N
65be7317-93f4-4ae2-b211-e72d15a8cdb7	采集			2019-03-20 15:26:27.806+08	2019-03-20 15:27:52.941+08	18900e9a-1828-4d26-8966-51c1e5ebfa26	3	39322bd3-88ca-4203-8db7-60c93698aeb0
31506359-c8d3-4562-94bb-8a26912ecbdf	采集			2019-03-20 21:36:52.94+08	2019-03-20 21:36:52.94+08	fc817231-7e3d-4952-b912-0855d2e90545	3	\N
e80c3c1c-ca28-40d5-ab2e-705980583fb8	采集			2019-03-22 10:33:16.438+08	2019-03-22 10:33:16.438+08	954dabda-7fd8-456d-8d9a-bc7058d4e8ad	3	00fa01a7-10b5-4908-ac97-d08ded49b59d
02db4ff9-b55f-459b-8d70-39b8421b3879	开关门	\N		2019-03-22 14:21:25.564+08	2019-03-22 16:00:56.132+08	9aa975c7-a3d4-42ec-a384-17d0425e602a	2	cc122ffc-2080-4bde-a20b-d8b14c47e413
293fd074-905f-4d2a-94d2-a28d4b06397c	采集			2019-03-25 11:18:25.746+08	2019-03-25 11:18:25.746+08	2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d	3	\N
b131fb3f-83d4-4855-9b8c-419201f620ac	采集			2019-03-25 11:24:21.016+08	2019-03-25 11:24:21.016+08	3feb218e-5b82-496a-9f57-71be58552c0d	3	\N
b76eb9ae-1b5a-4bce-91a7-93b68845f356	采集			2019-03-25 11:32:57.582+08	2019-03-25 11:32:57.582+08	765f6712-b911-4681-9d31-ce9ee3a45702	3	\N
9c250481-ece6-48ba-a91e-5d057fdb9d5d	采集			2019-03-27 09:42:22.618+08	2019-03-27 09:42:22.618+08	360a9975-3171-4f12-b47a-6f57bdf76dfe	3	c93d239c-120b-4078-9b3e-4b0d80f6707c
77edb521-5462-437e-acdb-8ca54f858468	采集			2019-03-27 09:45:06.498+08	2019-03-27 09:45:06.498+08	248ab293-5e7c-41e5-835a-2978782081de	3	\N
9842fe65-98a7-4396-9ced-fd75761872b7	采集			2019-03-27 10:17:10.461+08	2019-03-27 10:17:10.461+08	c3eaf904-6808-4fde-a795-474b0128fe5f	3	\N
907b9fd5-a808-4f6e-acfb-f212bf6cf6b3	设备1			2019-03-19 10:11:54.29+08	2019-03-19 10:11:54.29+08	f2d1cabf-7888-4be1-9357-bf5052e5772c	3	\N
92438dc5-877a-4bef-9261-a651bc3439ac	采集			2019-03-15 16:27:38.707+08	2019-09-06 11:16:52.009+08	848b15cb-6357-48eb-979d-a6398d05bd8c	3	d6558744-85f3-42ee-8d1c-07aa74f60036
7d31224f-522e-4f6b-89f0-4802c150f9d7	采集			2019-03-27 10:19:53.297+08	2019-03-27 10:19:53.297+08	00e79982-c3d7-4bef-a27d-050dc08eaf82	3	\N
bad3bab6-cba0-402c-bcde-5fbffacfa1a8	采集			2019-03-27 10:22:14.198+08	2019-03-27 10:22:14.198+08	6d7ee2b6-ee61-4933-9f14-9378592187da	3	\N
ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7	采集			2019-03-27 16:22:34.482+08	2019-03-27 16:22:34.482+08	8ebd65bb-633a-43d4-880a-d916b11067ba	3	5afcddd3-ab1d-4054-a530-478860d650ec
9df88715-b993-46e1-bace-b79b1f787292	采集			2019-03-28 10:30:24.026+08	2019-03-28 10:30:24.026+08	9078888c-628e-4b91-94f8-caaedcc9b640	3	e9efde3c-7a62-4df8-b112-22384afc7c24
fe876237-b07a-4583-befe-1013275d47de	采集		温度	2019-03-29 17:37:11.129+08	2019-03-29 17:37:11.129+08	e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34	3	e9efde3c-7a62-4df8-b112-22384afc7c24
b31b24f1-a018-47bb-9046-c022d26cd6c7	采集			2019-03-31 14:16:47.795+08	2019-03-31 14:16:47.795+08	bb3ec092-4644-42eb-93ba-f9ae9b4b6601	3	2f0ce240-e503-4e31-8460-e1b29564c31c
52790293-e9cb-482d-a5a4-a437cfc18b3c	控制		压力变送器	2019-04-01 14:38:39.923+08	2019-04-01 14:38:39.923+08	3aef6480-e9f6-4b07-8ee4-dc0516520d72	2	17314a0b-eb69-402e-9907-19db709a84ea
2054c2dc-9c63-4fc3-ab32-be0da644efea	监控		静力水准仪	2019-04-01 15:38:01.395+08	2019-04-01 15:38:01.395+08	936ee644-5ea7-4d64-98d7-ff52cc50e113	2	8f7fdf16-7f6e-4bc7-8e4c-bd964a4a02ed
5c6b51d6-d002-49af-9496-30fc8976c446	采集			2019-04-03 16:53:56.866+08	2019-04-03 16:53:56.866+08	db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c	3	\N
39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c	采集			2019-04-03 14:48:59.289+08	2019-04-03 17:33:06.454+08	53efa30f-f738-43ef-9600-0963b6b108fd	3	c697ae48-746d-44c4-9b53-03b49de402c1
37826374-2db9-4f16-a42d-37ee9f59c3ac	控制		振动 测斜	2019-04-10 18:28:39.217+08	2019-04-10 18:28:39.217+08	74d6fefc-59a0-42a8-bd3e-aff394533e06	2	\N
c437942e-6dd8-468c-81d0-ffed012878bd	文件			2019-04-18 17:58:14.56+08	2019-04-18 17:58:14.56+08	6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a	3	\N
6ae6a109-549d-4832-b00c-b2fdd8a5a165	采集			2019-04-04 11:32:30.415+08	2019-04-04 11:32:30.415+08	cecf35d0-533a-45cd-b740-42f93c4f3df2	3	f4443305-4848-4a3e-b1bc-f5ad10a87518
016e4acd-bbed-4409-aa4d-4e410d67f9ec	下发	\N		2019-04-04 11:32:30.468+08	2019-04-04 11:32:30.468+08	cecf35d0-533a-45cd-b740-42f93c4f3df2	2	ff261e2f-e34f-4f1c-933a-aec8cac3b02f
836707a8-5a16-4674-9609-c13f9f0956ff	采集			2019-04-08 11:04:20.113+08	2019-04-08 11:04:20.113+08	b73a2e67-7654-49ce-890a-7c2dfec89a03	3	\N
edbb1563-c4ba-4090-9180-17cec3ec3ac3	采集			2019-04-08 10:06:51.207+08	2019-04-08 13:46:26.674+08	7f81d1d0-150c-49d4-9b52-4eda0387c996	3	af3b3292-072e-4839-aa5b-0096cd1b9249
9bc088e5-638b-4304-8130-ee18b2580bd8	读取	\N		2019-04-08 14:49:04.685+08	2019-04-08 14:49:04.685+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	2	fb7d7130-3184-44ab-ba19-2cb664dc102d
e44e3794-75ca-4e19-b989-396cabdff179	采集			2019-04-10 15:48:52.501+08	2019-04-10 15:48:52.501+08	420a7807-dc95-4fe3-bfff-fd1db144ed8e	3	\N
8103cab6-bf6c-489b-af09-1ba2a278042b	采集			2019-04-10 15:48:53.417+08	2019-04-10 15:48:53.417+08	87bb0352-924e-440f-abb0-2a42797d0eb0	3	\N
73b4f51d-68e2-4fb4-a8a9-162f643d1983	采集			2019-04-16 09:09:09.725+08	2019-04-16 09:09:09.725+08	3027f2cf-70b8-4ff6-92ee-7432a8b26887	3	\N
7cc4cc34-60a4-4ff0-a85e-015a11eadeac	采集			2019-04-16 09:11:47.992+08	2019-04-16 09:11:47.992+08	9922afa7-509c-4ee2-8cfa-094233cf6eb1	3	\N
cb1ad06a-023a-46da-a674-80b18513c1e4	采集			2019-04-16 09:50:05.907+08	2019-04-16 09:50:05.907+08	82e60098-d956-499c-97c8-810ba64a8589	3	\N
98161e10-b23b-4448-a389-0bd8a08fec4f	采集			2019-04-16 09:52:28.874+08	2019-04-16 09:52:28.874+08	85e05ea0-94ca-4806-9393-78780b771a4b	3	\N
51de3079-41a4-4b3b-9e3b-4d9bfb13fef8	采集			2019-04-16 10:59:31.909+08	2019-04-16 11:02:08.109+08	752edd7f-ca25-4a19-bf4a-53a700f2556a	3	fcd2a682-7043-468e-a5a4-69a4def56b94
d4965875-354b-4294-87f4-c4ba9f9260ab	采集			2019-04-17 15:07:58.436+08	2019-04-17 15:07:58.436+08	1649a4a7-d092-40c1-8217-dc2b8e2ecea0	3	0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
53e381f9-db33-430e-8304-c344985c37f6	云采集	\N		2020-04-14 10:45:14.154+08	2020-04-14 10:45:14.154+08	2de0b18f-a13a-48a9-8e34-6bfeff609972	3	\N
7fa0305f-807a-4541-8615-4ad975b73518	采集			2019-04-18 11:02:51.791+08	2019-04-18 11:02:51.791+08	89fb363a-19d1-4e23-a9af-b2a2c310eb4f	3	bcbc3e2c-937e-4348-9c55-b9516e4782de
d2add1b3-b21c-420b-82a4-e0c55ee3a019	采集			2019-04-18 11:06:31.794+08	2019-04-18 11:06:31.794+08	d5bf6f22-3d7a-4ab0-9043-1020e9516bcc	3	4ab9cad5-76ed-4cc1-99b0-9543fc1c0533
1e436fa9-3d57-441a-b498-4dc107684e1a	文件	\N		2019-04-18 13:54:17.288+08	2019-04-18 13:54:17.288+08	76288807-186e-4444-a1ce-6be599aacfd2	3	\N
0050e0d2-2d7d-4e7b-8871-1b0196ce7094	文件	\N		2019-04-18 13:55:01.759+08	2019-04-18 13:55:01.759+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	3	\N
fddf24e3-0068-448a-aee2-4b35af2a7e32	文件	\N		2019-04-18 13:55:58.608+08	2019-04-18 13:55:58.608+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	3	\N
6ea6d122-5da2-41bd-a362-912f212d294b	文件	\N		2019-04-18 13:56:34.364+08	2019-04-18 13:56:34.364+08	11a0df92-8921-470b-af9c-d7593b8b1f78	3	\N
a4c5312d-d964-4c7e-9d81-79f265acfc59	采集			2019-04-18 18:47:42.217+08	2019-04-18 18:47:42.217+08	f929d6c9-de63-4cb0-89f9-f9e7a22cbadb	3	\N
e11bffba-cbad-486c-aeea-b773cd243628	温度采集			2019-03-29 16:40:02.737+08	2019-03-29 16:40:02.737+08	044ef7b0-afed-464c-b3fb-8bbf7fa42023	3	\N
aaec2c04-55f4-4c0a-b5ba-004a8b91593a	采集			2019-04-18 15:29:50.011+08	2019-04-19 13:41:32.559+08	efdfb5bf-1488-40b5-825f-629d60ebe7f7	3	a6b0f2df-fe24-4c3c-89ec-a1768e94e07c
fc95cca4-2304-48a7-a38e-b8280e1af82d	停止连续采集	\N		2019-04-20 17:25:47.157+08	2019-04-20 17:25:47.157+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522	2	95936e79-012a-4439-87a6-0a08f6c419e5
9ec28096-280e-4a66-b130-37a5ebc05047	采集			2019-04-19 16:42:52.616+08	2019-04-19 16:42:52.616+08	43bea8b9-c871-432f-90d5-414d9d907254	3	59fbaf94-9851-45b3-ad97-ec1a8a7ff764
70909da5-46ce-4458-8129-4c34c077b2be	采集			2019-04-22 13:13:08.902+08	2019-04-22 13:13:08.902+08	5d98962d-dbd8-4688-ae48-dbebdce861f6	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
79df1a9f-c843-4cdd-806d-4492fdeac2c2	采集			2019-04-22 14:08:53.033+08	2019-04-22 14:08:53.033+08	9b0e1890-c539-43be-8907-1f2eeaa3e309	3	049512a4-e7cf-44a4-a31c-1165cfb143b9
2c644dde-9a89-4c57-b9c2-07fae59e460d	采集			2019-04-23 14:22:13.664+08	2019-04-23 14:22:13.664+08	fb1aa362-5048-47df-a1b3-89bc55bfe786	3	030de29c-d4cb-4747-9885-3a81f9cf61ba
897daa06-8487-49b5-b276-f688a5c99378	采集			2019-04-23 14:45:48.308+08	2019-04-23 14:45:48.308+08	4aac7755-6f82-41a7-adde-756a7548c7f4	3	74a206a6-e3d1-475d-8c0b-a2a3730a97d7
e3c19ece-2c10-438e-8bd1-005169fa2da8	采集			2019-04-23 15:05:42.793+08	2019-04-23 15:05:42.793+08	272894c2-dcd9-4a14-8205-f1e9a093f3cd	3	\N
d73e0c65-a8ab-492b-b6c1-1039f4630424	采集			2019-04-23 15:47:59.414+08	2019-04-23 15:47:59.414+08	2698c5d7-398d-41ad-bdea-68e26f77a6bd	3	\N
dfaa0aee-75a3-4f5f-a09c-c278b9e655ad	采集			2019-04-24 09:19:20.823+08	2019-04-24 09:19:20.823+08	29a8cde9-51c6-4647-8153-de06449e2ba2	3	\N
5bc34c90-3031-4ce7-bb12-eac34d220e11	采集			2019-04-24 09:21:38.792+08	2019-04-24 09:21:38.792+08	0ffa5291-87ea-4e05-b031-ef948c53b474	3	\N
0a9589f0-6b8d-474c-b07d-8c6da527a61c	采集			2019-04-16 16:01:34.217+08	2019-08-27 09:01:04.059+08	cbdb48d6-afd7-4322-884a-d37d56f96176	3	1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf
0448eb89-a724-4340-a079-912513a55cb8	采集			2019-04-25 15:02:30.576+08	2019-04-25 15:02:30.576+08	83960893-0d31-4f1e-a576-69a4e7bce94c	3	355f91df-bf0d-44d9-94bd-e14e89545f4d
bca45090-3023-4d55-85e0-8c5216171df5	采集			2019-04-25 15:04:01.455+08	2019-04-25 15:04:01.455+08	3a1c9f2b-76dc-4276-8e10-aba208fd1fc5	3	\N
2de26052-b602-4ad3-9690-aa841c9c3a97	微功耗	\N		2020-04-14 10:54:44.714+08	2020-04-14 10:54:44.714+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	3	\N
354393d4-5f59-436d-96a6-e7e3fb28a196	功能A			2019-04-26 13:07:35.557+08	2019-04-26 13:07:35.557+08	d59a244e-554e-478d-b874-b75dc0dff2b5	3	ce96b9f4-f3b4-437b-8011-b7bd5166300c
3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873	采集		倾角	2019-04-26 15:57:34.685+08	2019-04-26 15:57:34.685+08	3f25f8df-8a52-4d2c-b6ea-714da8be3c00	3	fb1db37d-4ca2-4e71-9b30-7ead94407adc
9cb1bdb2-4235-4ca7-bdd2-7b7719325a45	微功耗	\N		2020-04-14 10:57:58.074+08	2020-04-14 10:57:58.074+08	5b40bb69-7692-4cee-b6df-bd7871764131	3	\N
c8ea2318-d321-46b9-9333-d2679ca7a30f	采集	\N		2020-06-12 10:05:07.213+08	2020-06-12 13:40:28.802+08	5fec42a4-44a4-46e1-afba-17c79de7e09c	3	ce8ccb17-58ab-4f9d-a15e-ea4a14fb3b36
f605cba3-4024-46ad-b288-3c83568c5609	采集			2020-04-21 13:39:10.244+08	2020-04-21 13:41:09.08+08	8cee37a9-d972-4d3b-97eb-53c9a87dbe9c	3	529c4341-8afa-4589-b3af-43a087988e34
4c4009bc-3eeb-4597-8866-fc0e9f3a1691	caiji			2020-04-21 23:56:27.166+08	2020-04-21 23:56:27.166+08	f2966257-6f65-4e21-81a5-451cd5b63144	3	71fdedfb-633e-47df-b552-16c71d98a38e
d54486ff-766c-4275-bf4e-b13e58574dd7	采集			2020-05-11 09:29:12.673+08	2020-05-12 13:52:16.096+08	57b88830-72c4-4739-8d3b-3754fb371135	3	718ac0e4-8b03-4ed6-930b-937ada877aa6
428d318f-f610-4b34-8068-7a928691a7d9	采集	\N		2020-05-13 11:41:39.144+08	2020-05-13 11:41:39.144+08	310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a	3	\N
aebaf729-ad98-42f3-a375-2c40c11065cb	采集	\N		2020-05-14 11:32:48.514+08	2020-05-14 11:32:48.514+08	82d6439d-e647-44e7-ba65-2de818baea7f	3	\N
11936f12-8bb7-42ec-8d27-5e01eb5c4ba1	采集			2020-05-14 15:02:02.196+08	2020-05-14 15:02:47.397+08	ba181334-9686-42cd-b00e-7165b35e067f	3	f197324e-172a-442a-8bba-cbc3133be37b
018e289f-43b3-4cc0-a3be-2a903cef1fab	数据			2020-05-20 09:22:50.315+08	2020-05-20 09:22:50.315+08	9c12215f-afab-45e9-8341-1e487df6d020	3	\N
dac5aa29-4b9b-4dd0-9200-afc564bb32c5	采集			2020-05-20 09:26:32.525+08	2020-05-20 09:26:32.525+08	06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2	3	\N
bc9ee149-cefe-4978-99b6-9c1cec2f6b4c	采集			2020-05-20 11:50:17.615+08	2020-05-20 11:50:17.615+08	6a94d3b4-a64c-48d2-be57-dfbd7f20c530	3	24d5f318-b4a2-480f-bb83-c0d0ec08730d
67095107-c333-487e-9e12-1d69facb6297	采集			2020-05-21 15:16:19.421+08	2020-05-21 15:16:19.421+08	4d37123c-99a8-49db-b2d2-3e334f5b27e0	3	ccf5fd2e-6140-49e6-81bb-dffcb24079c4
68b2ac58-25ea-408d-a955-797ded16d57e	采集			2020-05-21 15:23:07.801+08	2020-05-21 15:23:07.801+08	39e6fe98-3dea-458b-9f64-143d18617cc4	3	\N
582512d5-3343-4f9a-bab0-0312f0f83dea	采集	\N		2020-05-25 16:36:09.251+08	2020-05-25 16:36:09.251+08	94e0657d-9d34-4baf-bac1-34cb6610e051	3	d0689c9a-907c-4c62-a5d4-2a27971aa569
5e890b4e-e5c4-406b-a48b-96ecf4963921	采集			2020-05-28 10:53:52.236+08	2020-05-28 10:53:52.236+08	e867f531-f1a3-44c8-9876-368efe947b7d	3	3aae5959-6db3-4c8b-8017-95c853c8a965
5e62be71-2e05-4eb7-b50b-233e6ad91069	采集			2020-05-28 15:02:00.607+08	2020-05-28 15:02:00.607+08	d86466d8-8892-45e2-a86a-56e283df30ac	3	96535cb0-1134-4b01-8885-34fbf6127874
9b2759fd-8c00-478b-9168-f2dc2f1bab11	采集	\N		2020-06-05 15:02:09.823+08	2020-06-05 15:02:09.823+08	ee98ef38-7fda-425a-9fae-5000c658a83e	3	0bb6a5c8-bf18-41c3-97f1-50e844da6de1
11006daf-ca33-466e-970d-48c4889b56e3	采集	\N		2020-06-08 11:22:21.301+08	2020-06-08 11:22:21.301+08	3ade0dca-d01e-4b1f-a1af-4948163e6902	3	\N
865a418e-8597-4f29-954b-6953bf8a8390	采集	\N		2020-06-08 11:42:18.117+08	2020-06-08 11:42:18.117+08	47775a01-00ef-4500-82ee-04b5536aaeea	3	\N
5cd21446-c4fc-45a2-b2d3-a2fb1ae08135	采集	\N		2020-06-08 11:45:42.731+08	2020-06-08 11:45:42.731+08	1aa0fcb2-1f26-4596-9211-f028c369fbcd	3	\N
1ab8db7c-e725-4119-9c09-6555bb04ce5d	采集			2020-06-10 11:35:22.175+08	2020-06-10 13:43:00.422+08	a2a6365d-ec0a-453a-be54-35e11b324d63	3	213fe261-1b26-496d-adb3-4f84b6f2852c
4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b	采集			2020-06-10 14:00:54.728+08	2020-06-10 14:00:54.728+08	33b14e4c-17e6-44c9-a0a1-84cfe22fa073	3	04e02398-2db0-408b-80c3-399c705ceed7
33ad2409-682f-4b09-918b-9f6f9396a1c3	采集			2020-06-10 14:05:06.787+08	2020-06-10 14:05:06.787+08	9ed59e3e-108f-4fe9-b3c0-37c11cd46d92	3	04e02398-2db0-408b-80c3-399c705ceed7
64351b5c-4b45-42d1-a60b-81f410c1d0b3	采集			2020-06-10 14:06:51.137+08	2020-06-10 14:06:51.137+08	ce34762d-8e48-4c7e-8c23-1f7810ab7884	3	04e02398-2db0-408b-80c3-399c705ceed7
fb469083-0a30-4a41-a31d-b1bc0c0ed098	采集			2020-06-10 17:07:04.278+08	2020-06-10 17:07:04.278+08	42d66a56-b0ca-400d-b41e-250d62a84878	3	04e02398-2db0-408b-80c3-399c705ceed7
71d81eb7-504a-4f9f-ad7a-1a7479fe82b3	采集			2020-06-10 17:08:53.389+08	2020-06-10 17:08:53.389+08	7d85285c-28e9-44e3-b920-793850693e3a	3	04e02398-2db0-408b-80c3-399c705ceed7
ad2045e5-d052-4689-b49f-fa1c42ccca5b	采集			2020-06-10 17:12:06.742+08	2020-06-10 17:12:06.742+08	8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea	3	04e02398-2db0-408b-80c3-399c705ceed7
d7404d08-da09-4d5c-9443-0abdf60d1a13	采集			2020-06-10 16:55:56.564+08	2020-06-10 17:40:40.51+08	59ffec5d-7c08-417e-bddc-8483466e1d66	3	84e7b49c-247b-446c-a505-0ed6ab5de6e4
38ab5b80-b75c-42f6-b9a8-cb1e96603099	采集			2020-06-11 17:08:14.288+08	2020-06-11 17:08:14.288+08	61f8ca5a-27a4-4e6e-8314-7b989dc3f178	3	4ad803b7-f013-49f7-9df4-e04967d22021
ef2a2a56-6abd-459f-8899-2756698bd997	采集			2020-06-11 17:32:44.103+08	2020-06-11 17:32:44.103+08	e3d9aa70-13e8-419c-939b-953b239eb4b0	3	f4cc72f0-1d7e-4554-8d1f-041c9f267dee
60d83c64-9bad-43d3-9920-7dad96154fd7	采集			2020-06-11 17:41:16.029+08	2020-06-11 17:41:16.029+08	30c2c04a-0810-4f90-91cf-d49b9ed855be	3	19a4d417-0852-4a3a-b445-995ba3718d47
1f3783bc-bfe9-4abe-b7da-539a0ec57e34	采集			2020-06-15 10:48:34.987+08	2020-06-15 10:48:34.987+08	537ca657-4262-4143-a1fd-7050c3795634	3	\N
ca3175c2-be00-4fd5-8738-d149df98fb25	采集			2020-06-16 14:26:24.067+08	2020-06-16 14:26:24.067+08	1a7f1970-6142-4919-a1e7-110829051ba9	3	\N
aeb4e21b-b0fd-42d0-8eef-e8d525576507	采集			2020-06-15 17:15:30.589+08	2020-06-18 15:15:41.697+08	a999f92a-a9c4-4b33-a805-9bbb221f1935	3	3b1d673f-6e08-442d-8ff3-0306f82ff257
ec37073d-d10e-4bf9-9e04-a5dbff374b3c	采集			2020-06-28 11:29:02.965+08	2020-06-29 09:47:45.477+08	c3507ba4-b2b5-45b8-aecb-84079c90649d	3	cea589dc-d05f-4f0d-839b-70599d8fbd1f
0a837b07-531e-4fea-861a-ff73f35fb9ba	采集	\N		2020-06-29 09:58:29.161+08	2020-06-29 09:58:29.161+08	d246af39-fb67-4750-8a25-d05680a359b3	3	\N
adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb	采集			2020-06-29 16:12:12.859+08	2020-06-29 16:12:12.859+08	c67f1f58-3886-4294-835b-b48db34d96e3	3	\N
43b79748-d5d2-4ff7-b9c2-4d8a115cf28f	采集			2020-07-01 13:42:35.891+08	2020-07-01 13:44:03.118+08	5865ba02-99d8-4649-a200-c40dfa917982	3	420f3efe-9304-4bb6-bdcb-d62235c8476c
e372ec30-5000-4a22-90ce-923829b2d608	采集			2020-07-02 10:28:22.764+08	2020-07-02 10:41:52.529+08	a8180277-ba74-44e1-a3bc-b408e290f742	3	7f9b871e-3291-44e5-8ba3-a9a6f7759a41
a15cd089-6db0-463f-a927-c36d1dca96a4	采集	\N		2020-07-20 09:51:34.112+08	2020-07-20 09:56:07.53+08	069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	3	72df2fd5-cf83-449e-8581-0e7860bd0e06
d600b35e-ef0a-4115-9af4-779c7bd726b9	采集	\N		2020-07-20 16:29:58.324+08	2020-07-20 16:29:58.324+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	3	c215dabb-ce81-4a73-944f-e8c239a45a80
afe13a11-ee0e-417e-a431-844bd3608ce8	雨量			2020-04-22 19:14:32.903+08	2020-04-22 19:14:32.903+08	f9304770-9fc6-4203-a75a-2759b659a4d7	2	\N
af456be9-95da-45a5-a65f-2d3cb31732ff	电流			2020-04-22 19:14:33.19+08	2020-04-22 19:14:33.19+08	f9304770-9fc6-4203-a75a-2759b659a4d7	3	\N
ff05da01-ca5c-4dbb-afb0-67ec5f513f40	采集		应变计	2019-04-28 11:24:32.859+08	2019-04-28 11:24:32.859+08	d3c271ff-22cb-4938-8c5f-c63484107a38	3	\N
55d1faba-c22b-4730-a51c-1979541f342b	采集			2019-04-28 11:25:30.655+08	2019-04-28 11:25:30.655+08	b8061f6d-fe6e-443d-bed9-8b4e7fb81a71	3	\N
cc7ab8cd-332e-48d6-9a20-2d44055c2e61	采集			2019-04-28 11:26:12.329+08	2019-04-28 11:26:12.329+08	dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83	3	\N
e5a6d57f-122f-4dac-994d-1a83a93b2440	采集			2019-04-28 11:27:08.993+08	2019-04-28 11:27:08.993+08	6daadb42-2ee7-41fa-a6bd-85d9c0d77383	3	\N
589695ad-b029-4c5e-9425-4946e80f3fb6	采集			2019-04-28 11:28:04.778+08	2019-04-28 11:28:04.778+08	3d182049-68c9-440d-adde-b62b71abee38	3	\N
833ae7ac-9c57-4cd1-a324-4b49acee1dfe	采集			2019-04-28 11:28:46.199+08	2019-04-28 11:28:46.199+08	28463128-4e0e-4167-8aa6-3c6f5accc368	3	\N
3d72c148-2e62-41d7-b0f2-528fd13952dd	采集	\N		2020-07-03 14:17:21.442+08	2020-07-21 10:26:44.2+08	9a1a0afd-566e-45a2-8286-147f760679a4	3	\N
1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	Energy			2019-04-28 17:36:59.012+08	2019-04-28 17:36:59.012+08	0a9ddd56-9373-42fc-b426-17797eeee64a	3	0e36fdd5-a0d5-4fc7-9337-906d98282bf2
a18f5309-f499-412b-9cd7-b2a84c3302fa	采集			2019-04-30 09:49:47.681+08	2019-04-30 09:49:47.681+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	3	158509e9-b030-42ba-8330-46ef28dfb38b
0c37d684-9050-4e23-9121-2749044fb378	采集			2019-04-29 15:49:13.028+08	2019-05-31 10:37:09.07+08	dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0	3	2c523c86-9933-490e-9101-55c1156606ab
cda9f386-6c1d-4477-91aa-61f2fcbf93ff	采集		压力	2019-04-28 10:50:55.208+08	2019-07-17 16:31:05.549+08	75780bad-38e2-4dde-adbd-950bd075a1d2	3	63535373-7358-4149-bb70-60bc6e4cb6f9
a8cf8420-9ce0-464d-8af7-1940466015bd	采集			2020-06-24 09:49:50.581+08	2020-06-24 09:49:50.581+08	2b1ac1f2-3501-4eb7-882b-59c5f346ad98	3	\N
47e859b1-fd7c-4d91-b482-25d7a9547047	采集	\N		2020-07-21 15:31:35.595+08	2020-07-21 15:31:35.595+08	b9092f6a-8c04-44c9-97ea-49b5389f5580	3	d7015097-9fec-4702-89ef-7453ce11b7f8
9cc08d17-9866-4da2-844e-be838245d9e3	采集			2019-06-03 11:50:03.94+08	2019-06-03 11:50:03.94+08	31c3b19c-2202-408e-ba8f-efd800be8801	3	\N
aacdb86a-92cc-47cf-a7e5-b139a96e4fbb	采集	\N		2019-05-07 11:19:26.47+08	2019-05-07 11:19:26.47+08	ef966a9a-d938-4526-af04-cee74ea9b600	3	80c16a27-2bdf-48f6-ab20-690c3926ec7a
df20f27f-9f90-4d8f-b4bb-db033628f414	采集	\N		2019-05-07 16:51:19.784+08	2019-05-07 16:51:29.084+08	e907425b-f687-45f0-9e44-798f6c00968f	3	\N
05df15fb-1c19-4077-9522-6d5f48739259	采集			2019-05-07 15:57:23.336+08	2019-05-07 17:00:31.122+08	573fb497-e583-41c4-ba6b-ecf548921eaf	3	4a3ea0f9-d431-492c-85b8-ceac278b1456
1725bd62-6500-4740-a03e-78fd4a2f4a53	Temperature			2019-05-08 17:53:13.476+08	2019-05-08 19:45:04.192+08	1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17	3	35c34a5d-993a-4493-a0b0-d8841fd4bd31
c05dd524-bff2-460c-b9b3-7fb235b2a7a8	采集			2019-05-09 09:58:07.895+08	2019-05-09 09:58:07.895+08	f753602f-9889-47cc-a42c-2905bdaab97e	3	73c4b266-e007-4f6f-88de-02c8c82b9aa4
0c3edb9b-16a6-4fed-b65c-3757a117a3bc	采集			2019-05-09 10:06:14.147+08	2019-05-09 10:06:14.147+08	54e76b93-f8ed-407b-b112-ed4a85db50db	3	d2e64245-7a53-43c4-a9a0-727155de89fe
cbcbc67f-3b4d-47e4-93db-2a85c354a213	采集			2019-06-05 10:43:13.778+08	2019-06-05 10:53:00.078+08	fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed	3	5695aa0b-5148-4985-9d9c-bffa36a39edc
fd94be74-66bc-48ba-94d0-008b6d6d5413	Door Status Report	\N		2019-05-08 18:18:25.607+08	2019-05-23 00:05:40.57+08	ecad4b77-ab58-460f-8469-b89b3c77d796	3	d6ee4985-7231-43a4-9593-d0088b1f370d
a40f85c1-a408-408b-971c-4e1c4e88d703	采集			2019-05-09 17:23:15.212+08	2019-05-09 17:48:44.322+08	7802e3d3-ffbf-4146-954f-a67f1cbfb41c	3	c3873468-2682-4721-9ed3-96219d02c017
7e35a6df-64f0-483a-8582-859548ba7fc1	采集		温度 含水率	2019-05-13 11:18:59.499+08	2019-05-13 11:18:59.499+08	0cbb0bb5-1c3c-4fc8-94a1-981c026350f8	3	c36c2c03-92b0-41b0-bcdc-9c867e0da2f7
7fa7ac4f-f693-4287-a813-9b123e633207	采集			2019-05-13 16:27:13.647+08	2019-05-13 16:27:13.647+08	6151fdf6-4bb4-466e-b727-56b68ebf43e1	3	3e489442-5b15-42ec-aa03-4a88c4c6a274
db0bf17e-625b-4003-8b57-b2db0d5e3ecc	采集			2019-06-05 10:58:32.287+08	2019-06-05 10:58:32.287+08	d9b333ed-096a-405a-9c9a-905cd04d2368	3	5695aa0b-5148-4985-9d9c-bffa36a39edc
cf8bfa0f-1e08-48ed-9041-3826fd5f5135	采集			2019-05-14 16:57:37.95+08	2019-05-14 16:57:37.95+08	ff67a769-94ed-4f3d-b944-b1f4d4468eec	3	52e623de-58b8-4c3d-a50a-5264735bda7b
e1da9a91-3e0d-4f6f-8ba2-8169b1d06305	王飞的测试应用			2019-05-06 10:14:28.459+08	2019-05-06 10:14:28.459+08	9ac9f312-0f0e-45d4-8d00-8420be016826	3	\N
f21dbd7b-867d-4273-8141-7817fa5685d8	采集			2019-05-15 10:48:06.507+08	2019-05-15 10:48:06.507+08	82c4e869-135f-466b-af92-27b7979b1fd2	3	422d3308-b4d9-4181-b705-7d81342c46a7
e35e7bae-3a9e-41bc-b63b-ee32399d64d0	采集			2019-05-15 10:32:01.145+08	2019-05-15 10:55:37.903+08	6474815f-e86c-4909-966f-5fb6efc5c674	3	317e6f80-0f02-444c-b8ef-eb079795edb5
19c9b194-eaca-4785-9698-fcba4f960a2b	配置	\N		2019-05-16 18:02:13.701+08	2019-05-16 18:02:13.701+08	ff67a769-94ed-4f3d-b944-b1f4d4468eec	2	795bc81a-cc56-4b80-93d5-7d4cacd0fc5b
99b535b3-ce4d-4950-97cc-45cd24ce64b1	采集			2019-05-22 10:38:30.971+08	2019-05-22 10:38:30.971+08	721eaa20-a7b1-457b-a5b3-f5eb9b313129	3	fda4d6b7-a716-42c7-bf9f-61a02a025878
dfb70ff4-6696-4f3c-b709-dfa5ad977714	tt			2019-05-22 16:00:03.724+08	2019-05-22 16:00:03.724+08	d93ae98f-5dbc-45c3-81cf-8f9360a11684	3	\N
df4052a0-fc2c-4120-b39c-fb5a0f719b6d	数据			2019-06-27 09:35:12.076+08	2019-06-27 09:35:12.076+08	f41380a3-bc12-4229-8b46-67472fd5d9b3	3	\N
7ec4a983-93fb-4bd4-9daa-8f916e538b59	采集			2019-05-14 14:10:38.863+08	2019-05-22 18:05:37.574+08	d634c358-000d-4c53-8c4b-0f411b4a52c3	3	60523f46-1b58-4910-8a1f-7a111e1e0ccb
639bcad3-50f1-4b66-9f50-acbb916f7d8e	Temperature Read			2019-05-08 18:17:31.6+08	2019-05-23 00:05:50.838+08	ecad4b77-ab58-460f-8469-b89b3c77d796	3	35c34a5d-993a-4493-a0b0-d8841fd4bd31
ffc66398-9927-4dc5-8fce-d0d0c87b5dd5	采集			2019-05-23 13:53:19.248+08	2019-05-23 13:53:19.248+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592	3	d0c49ede-2200-49db-bd7b-c9535e387848
8b850929-a890-4c69-898a-0388eec64db8	采集			2019-05-28 15:02:38.783+08	2019-05-28 15:02:38.783+08	290bae7d-a183-4af8-be82-963486855761	3	\N
aeea3098-6149-4f87-9a9a-474122886ef7	采集			2019-05-29 14:51:02.761+08	2019-05-29 14:51:02.761+08	82ec14e4-a0ee-4d21-9fcb-24cde7cf551b	3	103b5fb6-4f69-4647-a725-61dcaa938a17
8f2c15d1-cb4f-45fd-b217-ecbf37787ddc	采集			2019-05-29 15:57:45.375+08	2019-05-29 15:57:45.375+08	304a0d25-d131-4d28-9534-296b7df2adb3	3	\N
b1badcbe-62e0-4c45-85e8-8e3d712d3659	采集	\N		2019-05-30 10:24:12.579+08	2019-05-30 10:24:12.579+08	42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	3	\N
92799800-ca0a-48ad-a83b-c63c89b7879f	采集			2019-06-05 11:07:53.603+08	2019-06-05 11:07:53.603+08	d8d4cee4-3e1d-4d43-8861-53ccd536112e	3	5695aa0b-5148-4985-9d9c-bffa36a39edc
28904408-12e5-4569-8499-937ce3f253ef	采集	\N		2019-05-30 11:20:53.237+08	2019-05-30 11:21:18.816+08	7f382df2-35f7-4128-9276-d2a3a40d6547	3	83ea3d9a-afdf-4200-a973-6f613946df5b
cb84ad58-6983-40a3-96ad-0f001cccaf96	采集			2019-05-30 13:47:48.54+08	2019-05-30 13:47:48.54+08	104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1	3	f2c0be9e-1cf8-425f-befd-5cff3fac6fb1
8a945623-1db8-433f-8eb9-062caccb5b89	采集	\N		2019-05-31 18:03:21.295+08	2019-06-03 10:53:21.888+08	85e07675-26a2-435b-8ee9-6c790ffe7463	3	e32a4670-d2d9-4e72-bfab-ca042c491f7d
e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e	采集			2019-06-06 14:15:52.937+08	2019-06-06 14:25:39.609+08	4b8a42f4-db96-4d3d-937c-0e98cae45ea0	3	d751e738-d74f-476e-8ba3-f25bb264bea3
28c09a41-f505-4cf5-aa80-131823bd65fb	采集			2019-06-06 17:24:55.45+08	2019-06-06 17:24:55.45+08	53070eae-7839-46df-9492-f1b4c0b0b101	3	f6ebffcf-2f2a-41fa-a36b-d997b8584c39
c7963d62-908a-4e24-a229-7de180511e96	采集			2019-06-11 15:06:43.231+08	2019-06-11 15:06:43.231+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71	3	9b35efe3-e7d0-4364-b398-5a4a7d10ab20
57e7e768-2d0a-44a8-93df-21edd1f6564f	采集			2019-06-11 15:43:02.166+08	2019-06-11 15:43:02.166+08	57df002c-3fa7-4684-a2b3-f46f54b7f87b	3	\N
35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	采集			2019-06-11 15:50:05.41+08	2019-06-11 15:50:05.41+08	888fb650-543d-4141-a70e-7dff25dfffe7	3	\N
bf5ac821-5299-4099-9be9-c61c8b7d085c	采集			2019-06-11 15:55:27.361+08	2019-06-11 15:55:27.361+08	2f885022-839d-4c38-ae7a-b4c9881ca394	3	\N
7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	采集			2019-06-11 15:59:09.839+08	2019-06-11 15:59:09.839+08	c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb	3	\N
ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef	采集			2019-06-11 16:14:17.086+08	2019-06-11 16:14:17.086+08	f93393d2-0bfd-4685-b6d9-31287c466007	3	\N
5cec0e8b-58df-4473-b3d7-4d524e763830	采集			2019-06-11 16:18:28.997+08	2019-06-11 16:18:28.997+08	acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848	3	\N
370eb26a-f879-4a01-a515-1b20a92c80f6	采集			2019-06-11 16:27:10.958+08	2019-06-11 16:27:10.958+08	f70240a0-3384-4984-a854-65fe5b16dc0a	3	\N
0af3cf99-e69f-4f81-b486-9fcb5de59fd5	采集			2019-06-11 16:37:25.805+08	2019-06-11 16:37:25.805+08	2142db9e-293b-43a9-9883-3d41391ba533	3	\N
faa5fb8b-d39d-4603-be6b-e70acd114c75	采集			2019-06-11 16:41:49.144+08	2019-06-11 16:41:49.144+08	c06263f7-c818-41f4-949a-4a526770fa9b	3	\N
aabd5c05-617a-41c3-9ba6-925ec3334ff7	采集			2019-06-11 16:42:42.399+08	2019-06-11 16:42:42.399+08	7fae0d43-0664-4c19-9d35-db80a97b6da2	3	\N
b76b8c94-f6d7-43f1-9831-865a733dbeb4	采集			2019-06-11 16:47:18.531+08	2019-06-11 16:47:18.531+08	3636e235-3352-4944-8092-c0b68a659ef1	3	\N
7ca191c0-8240-4dec-95bc-26b13a55bcc6	采集			2019-06-11 17:11:17.102+08	2019-06-11 17:11:17.102+08	d52023ca-77dc-4b31-941a-5cb6d2b1a297	3	\N
79193862-5667-4861-96ed-2c239a6535c2	采集			2019-06-11 17:18:00.724+08	2019-06-11 17:18:00.724+08	67f6e3ca-2368-45ff-a678-53f942e71caa	3	\N
823e5c6d-df3b-4d9f-aea9-f9953192aabf	采集			2020-07-20 17:54:25.27+08	2020-07-20 17:56:19.068+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	3	3121e3a3-3ae3-4128-b080-5ad23d044087
601d3b7b-0a17-4c81-9200-b0be68df23c4	采集			2020-07-23 13:36:21.054+08	2020-07-23 13:38:56.153+08	ff948ead-5a62-4990-b5c9-a440be471988	3	a595a911-e18d-44ff-8e67-a303b74de84f
c75c257f-cdab-4167-a872-c06243b27f74	采集			2019-06-11 17:20:41.957+08	2019-06-11 17:20:41.957+08	4f72b98e-690d-429f-9b64-ab8de1c41a0b	3	\N
1515cbb4-bda7-45b0-84c9-dedf0de93039	采集			2019-06-11 17:24:10.306+08	2019-06-11 17:24:10.306+08	96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee	3	\N
02962d5d-c83f-4756-bc1b-b9044c4563fa	采集			2019-06-11 17:28:58.613+08	2019-06-11 17:28:58.613+08	14068f43-74c6-48e8-b004-29eefa28fd36	3	\N
59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e	采集			2019-06-11 17:32:28.569+08	2019-06-11 17:32:28.569+08	958debc4-8460-4237-a960-d51a6a866071	3	\N
f8148d64-f381-4893-8e57-854575f49d47	采集			2019-06-14 11:20:06.177+08	2020-06-12 09:23:23.123+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	3	e55f6c54-15a7-4a8e-ac30-a89edfe3d818
3e0cbd36-be46-4841-bd03-26f5540d8ceb	采集			2020-07-31 11:04:05.433+08	2020-07-31 11:07:57.655+08	8581898c-d047-4cdc-8ccc-ef33a1567435	3	665fbc53-4bab-4fc7-9bdd-aaa63fc834f7
1093449c-fdd4-4e36-9153-53b8e4be297d	采集			2020-08-03 08:43:47.597+08	2020-08-03 09:13:17.82+08	c283a48d-8843-4cb6-9c01-336738a8137a	3	73c2217f-b7c8-4bed-8cf2-21f591a19dd3
dd71ac62-451e-4f14-a231-1209612ec59d	采集			2020-08-05 16:54:52.112+08	2020-08-05 16:54:52.112+08	07977267-d666-4b82-8976-d533e9afde5b	3	dabe22ea-4084-4385-bfa3-674a09fdea02
88cb50e8-fbcc-4dd1-a18d-915017dbee86	双轴角度测量			2020-09-02 17:43:02.615+08	2020-09-03 16:18:46.742+08	d9aab088-57f5-43ba-b30b-3342219a4b75	3	10e166da-8bd4-414c-a941-312073ae8ff8
d59b49b6-2470-4652-aac0-5760f9cce697	双轴测量			2020-09-01 14:32:02.475+08	2020-09-03 16:18:53.184+08	fc096555-1b1d-4526-a6d2-a734b1d313fd	3	f617f353-687a-436b-a571-5a4af04eb61a
c1159812-0b0e-4d84-bd67-8328afd12dc6	采集			2020-08-04 11:14:39.069+08	2020-08-05 18:03:46.957+08	5b58e9d2-f305-4ded-8863-c346e916d5e7	3	3918f7c9-7aed-49f8-8e15-57015d8856ec
4dce787d-0acb-41d1-a959-a043d0546736	采集			2020-08-13 09:25:55.321+08	2020-08-13 09:48:00.037+08	11b16ed9-a251-4907-b941-5a31ea559da1	3	1f34194c-81bb-4957-927c-565b25060aa5
06350cde-bd6e-495d-8ef5-c318d3694381	采集			2020-08-14 11:53:53.183+08	2020-08-14 11:53:53.183+08	2ebd818a-1949-4633-b46d-d923cc2bec7b	3	821360a5-ada6-40f1-987f-4f9e14982c4f
dba91da4-00da-4cef-a91c-f39c97f9b45a	采集			2020-08-14 15:25:23.092+08	2020-08-14 15:25:23.092+08	8a59ee46-6582-4f9b-a696-f2025fca9eda	3	793c95c5-e27e-4a03-82a1-ed7c0df8674a
2c774eef-6573-419e-8726-e505ae3447f2	采集			2020-08-14 16:22:21.541+08	2020-08-14 16:22:21.541+08	6e1d455f-6dc1-4237-b1f2-de550f8dbd0e	3	64fdaded-b81f-4455-9e7e-6ec7b36ded18
a53c2dac-206d-44da-b18f-584b9ad1deab	采集	\N		2020-08-14 16:26:59.945+08	2020-08-14 16:26:59.945+08	7599bfb7-18fc-40c7-be52-ff9fd0d1519e	3	\N
6e72e2fc-da68-46a6-8a68-3022057b0937	采集			2020-08-18 08:53:48.599+08	2020-08-18 08:55:03.241+08	6b55f70b-4626-47f5-b8fa-10f76bf80c68	3	864fa409-f305-4965-87cf-3465fe026979
f1307ae1-f85b-4d6f-b239-eaa2c46d6b15	采集			2020-08-18 11:14:36.636+08	2020-08-18 11:14:36.636+08	e0a57272-b5e1-4160-b62d-98cc9dcd10ca	3	81741880-ebc8-42d9-bf53-1c6def33376c
9a584682-5906-4fd4-ad79-245e90061e02	采集			2020-08-21 10:26:20.003+08	2020-08-21 10:27:48.287+08	032d4203-60ef-4d64-9888-530facf358ff	3	f6592048-0f23-403e-ae55-9f80fb9155e2
847df328-4c47-460a-a6dd-cf1203e5bd27	采集	\N		2020-08-26 13:33:36.873+08	2020-08-26 13:33:36.873+08	945563fe-656a-461e-8dca-7a4b2edbf9d0	3	\N
2f22d155-cb55-42be-9323-14e5da7f8912	采集	\N		2020-08-27 16:12:04.842+08	2020-08-27 16:13:15.87+08	58f5081b-0b4e-4f26-853f-22ef0d1ea318	3	bedc480a-4a97-488a-a948-b0a7713bdf92
1caff493-5e1b-472f-a65f-502a9d9865bd	RTU采集			2020-08-27 16:22:16.985+08	2020-08-27 16:22:16.985+08	35e7c6a8-9125-4612-889d-259e09a24735	3	\N
b387422f-44fa-4d9e-a701-d6c9c57d630d	RTU采集	\N		2020-08-27 17:24:28.554+08	2020-08-27 17:24:28.554+08	899def98-516b-4c5f-a7e8-2fd48018bf12	3	\N
f2ad29ab-0075-41c4-9972-59da62b556f4	采集			2020-09-01 10:29:11.209+08	2020-09-01 10:29:11.209+08	8f3e91ce-4354-4d6a-826a-c727aaabaa58	3	dabe22ea-4084-4385-bfa3-674a09fdea02
d9afb1b0-b05b-4c6e-8805-c4eeedd19014	采集			2020-09-01 11:23:08.031+08	2020-09-01 11:26:58.01+08	d876d84c-b881-4ef4-a79d-8a60b372c964	3	0b7198e4-94bf-46f6-a467-d5d3c514267e
efd36daa-1bdb-44e0-8f90-00cf67f20abb	转发app的设备配置指令	\N	转发app 指令,即时调度	2020-09-02 16:16:56.977+08	2020-09-02 16:46:19.754+08	d876d84c-b881-4ef4-a79d-8a60b372c964	2	92c3319d-6177-4d99-a743-3391c9e1f4bf
036f8003-a82c-40bc-a175-7cb81f4da7c9	采集	\N		2020-09-04 12:05:13.597+08	2020-09-04 13:22:13.057+08	518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab	3	5f27ec35-2a3a-4e9c-9813-70525f544cd4
ed73bd4c-f957-425b-bc61-b1a49b812aba	采集			2020-09-04 14:47:20.793+08	2020-09-04 15:30:52.499+08	f922cc6e-672b-4f59-a90e-2499ecfc1d24	3	1754774a-4f79-43b6-a352-99329d760806
d04cc631-3bc1-496c-af61-fd0ff0ff3e85	采集			2020-09-07 16:10:09.075+08	2020-09-07 16:10:09.075+08	55f72e62-0922-4975-9714-058decf7a14d	3	1c891c2f-0cd5-433b-93f1-11b7f54f9ca0
f482d51a-31e4-4f0d-b32e-184d1b527094	转发app的设备配置			2020-09-07 16:10:09.083+08	2020-09-07 16:10:09.083+08	55f72e62-0922-4975-9714-058decf7a14d	2	a83bd7a7-d18e-480b-b0df-40bc78fcc3a9
2862c1ac-f3a8-45b9-88e8-abd2591928d4	采集			2020-09-10 11:15:15.542+08	2020-09-10 11:15:15.542+08	207df42a-f8cf-47d0-a4bc-d1d5d9114928	3	\N
d140758d-3441-4156-9b00-7de4589d7f9c	采集			2020-09-11 13:29:23.089+08	2020-09-11 13:29:23.089+08	33a769c0-0ef3-47dd-ab22-3e86247259eb	3	\N
f928b4a7-3c4f-42bc-aa12-32d1b835c3e6	数据			2020-09-11 14:36:39.588+08	2020-09-11 14:36:39.588+08	2a7828f8-5044-43fb-9435-9a59ec4d769a	3	\N
c438d8c1-8b99-41e6-9cc0-5339b773c3bb	采集			2020-09-15 08:40:27.832+08	2020-09-15 08:51:22.053+08	a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf	3	62d525af-9d57-4b02-a2e8-8fac8d6bc432
40df1f23-955c-462f-b233-785df1759d7f	采集			2020-09-15 08:59:09.155+08	2020-09-15 08:59:09.155+08	4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c	3	\N
0ca15a19-3a6b-42c0-8336-096b8ebcc01d	采集			2020-09-17 16:42:41.365+08	2020-09-17 16:42:41.365+08	343d74d9-fc95-40d7-930c-e0cd01536d55	3	\N
cd020968-8d12-4951-a6bb-0658b8ea6799	采集			2020-09-17 16:40:25.961+08	2020-09-17 16:56:54.463+08	92520c27-c002-4a35-84f0-dae3238662ae	3	1b5694d0-7aa9-4c7b-9fb9-893fa24676d5
2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	采集	\N		2020-09-18 11:09:34.522+08	2020-09-18 11:09:34.522+08	8523278f-0788-4ef6-8669-64d28b348c59	3	\N
1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	采集			2020-09-21 09:55:14.221+08	2020-09-21 09:55:14.221+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	3	1c891c2f-0cd5-433b-93f1-11b7f54f9ca0
ea8b2fda-2249-47bb-a0e7-eed50eb5de24	转发app的设备配置			2020-09-21 09:55:14.296+08	2020-09-21 09:55:14.296+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	2	a83bd7a7-d18e-480b-b0df-40bc78fcc3a9
3817ac1f-6e39-4157-b1af-99d143da6fbf	采集			2020-09-28 10:33:27.942+08	2020-09-28 10:33:27.942+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	3	\N
7332ce81-93c4-4c1c-b659-caa2fc92a94a	采集			2020-09-28 10:33:27.928+08	2020-09-28 10:40:08.041+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	3	03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3
7a6e0cbd-c0db-4dd6-92e7-94092fc071dc	采集			2020-09-28 10:45:02.894+08	2020-09-28 10:45:02.894+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	3	03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3
e94da122-530a-4e1b-af6f-da5b6dfb2a29	GPRS采集			2020-09-28 10:45:02.908+08	2020-09-28 10:45:02.908+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	3	\N
59e10250-dfd7-4381-8c22-cca2e7a51ccc	采集			2020-09-29 09:28:13.406+08	2020-09-29 09:40:44.562+08	e33b5ca8-307d-47dc-afbc-01098220b4ac	3	5010d82f-8dc9-4bcc-bc9c-9349a8102b24
c76bd374-4160-4615-8ba7-63a2f19f790b	采集GPRS	\N		2020-09-29 10:15:54.177+08	2020-09-29 10:15:54.177+08	e33b5ca8-307d-47dc-afbc-01098220b4ac	3	\N
fb325f67-e901-440b-a14e-2f8e04c53e9b	采集			2019-06-18 11:02:55.443+08	2019-06-18 11:02:55.443+08	9c72853f-96b7-41a6-ab9e-10eafbf22a10	3	fd763da6-2130-4510-81c8-d27986779983
8afcb657-9391-4be2-9527-fbc2142bdf64	采集			2020-07-31 11:04:47.257+08	2020-07-31 11:04:47.257+08	3bfe9ce6-f4d9-4822-968e-3649d5eee799	3	\N
c30ccd00-f637-44d0-b87a-84f158985f88	采集	\N		2020-08-26 13:33:59.346+08	2020-08-26 13:33:59.346+08	cc3c245e-aa6a-4e4e-831b-780769ec41ca	3	\N
fe84d4c4-d79f-4a80-bd65-950c4c044636	采集	\N		2020-09-29 11:19:58.827+08	2020-09-29 11:19:58.827+08	e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925	3	c10e1f69-fac2-446b-b907-7b94e3da49ed
9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	采集			2020-09-21 09:55:16.284+08	2020-11-09 14:27:57.366+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	3	2d86b406-e166-4523-941f-89ceeadbf7f7
65de659d-c7f6-4fa3-a500-a0cead6dd856	转发app的设备配置			2020-09-21 09:55:16.36+08	2020-11-16 16:17:25.582+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	2	56eeb5a2-332c-49e7-af24-4cc3649580b6
43bce07c-dfec-4867-b501-00a047455ab9	采集			2019-06-18 15:44:35.493+08	2019-06-18 15:44:35.493+08	8b3a3d99-7016-4c26-b6b6-65b742fcfc8b	3	03803ee6-5a4a-4ef6-8356-de63aef554b3
7f4871f5-ec20-43b3-aba7-1814a0dd53bf	采集			2019-06-18 15:48:02.203+08	2019-06-18 15:48:02.203+08	e8b1dd32-dd34-4923-a91d-e21f81210749	3	e62cf4a9-9e5c-434a-9a65-08ec2efd13fb
b97de8e9-82aa-492d-9c8f-5d7347a24d93	采集			2019-06-19 13:58:50.989+08	2019-06-19 13:58:50.989+08	91fc5de6-ad9d-47e3-ace2-1c2bd04979e5	3	f80e7234-e166-424d-8115-f898bb1cabfd
d7c62295-864c-44de-81e0-2cb9a03bf532	采集			2020-10-09 14:17:46.843+08	2020-10-09 14:20:04.378+08	4452ff6a-859b-45e6-9e9c-c6b59ee3667b	3	98c55c29-6b3c-417e-bf4d-f373aef4b061
7b0f6923-300e-462b-8705-223febdd9b1d	采集			2019-06-19 17:34:39.415+08	2019-06-19 17:34:39.415+08	1b795716-096c-409d-8b43-290e31a0d4d5	3	\N
26896cc1-415c-44cd-a3d0-36d3908ab014	采集			2019-06-20 09:22:50.971+08	2019-06-20 09:22:50.971+08	b10f2486-b1e8-48d6-8683-216a40bcb3bb	3	\N
deca7d64-27f6-4e88-9247-34756d2e3073	采集			2019-06-20 16:55:24.378+08	2019-06-20 16:55:24.378+08	5b797de0-bd75-4cc6-9bb7-4811869ba7d3	3	8465d25a-c85a-41a7-b383-7da1e9c0c55c
4e27a3d5-339d-47e3-9ce7-0c90068376e5	采集			2019-06-21 13:52:33.009+08	2019-06-21 13:57:20.099+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	3	83f5296c-98a1-4222-a8eb-8e65d7e459cf
69be9b12-023e-44a5-bcb9-04a192f257b7	采集			2019-06-24 16:49:45.135+08	2019-06-24 17:08:20.523+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a	3	0362b1ec-f7ee-4a7e-b0ec-612320d76bbf
a6a9bd4f-093d-4573-8511-3d805c7fbe9c	采集			2019-06-25 11:39:02.385+08	2019-06-25 11:39:02.385+08	3d52e349-bf19-46d5-bb7e-f1f533d10190	3	\N
b35434b2-55c1-4aab-a689-4919d9c56da0	采集			2019-06-26 11:57:22.684+08	2019-06-27 14:04:53.632+08	32a78a97-fea6-477a-9cfd-7f512d81b40c	3	f4925c79-04d0-42e2-b326-cf291ed7589d
75fb03c3-cdd0-48bb-8be7-db553357ef1e	财务测试			2019-06-25 15:49:19.314+08	2019-06-25 15:49:19.314+08	239fdc2a-bd0a-4cd6-b0c4-f7371f99f620	3	\N
8792ef3b-6e91-43dc-a17b-61137d8b5734	Door#2 State	\N	State of door#2	2019-07-15 13:36:37.242+08	2019-07-15 13:39:37.012+08	01da29ac-f803-4381-ae7f-28264effac4f	3	bbd0c618-985d-47a7-b844-e4831697168b
eb07419e-1090-4ef1-87af-c365af7a63d1	Temperature	\N	Temperature of chill	2019-07-15 13:40:16.517+08	2019-07-15 13:40:16.517+08	01da29ac-f803-4381-ae7f-28264effac4f	3	\N
b071ffa1-9fb5-4fac-8295-cecff8edaa95	采集	\N		2019-06-27 09:35:05.706+08	2019-06-27 09:35:05.706+08	9f8addd9-3d2e-434c-bc28-e73322276c7a	3	f351ad03-a539-4ec7-8a2c-429209e9c03a
f5661460-2f34-481a-b54b-31c212613ecf	采集			2019-06-27 09:35:21.023+08	2019-06-27 09:35:21.023+08	4b13a538-ac93-4bc0-8515-4181c57b8650	3	\N
936e35a2-2147-461d-8713-c4149317fb19	采集			2019-06-27 09:35:29.136+08	2019-06-27 09:35:29.136+08	d1d8105f-3b3d-4c89-a378-2e76afbb6f36	3	\N
e2d1416d-c8a6-43c7-ad2f-08d498e323a1	采集			2019-06-27 13:03:58.348+08	2019-06-27 13:03:58.348+08	1c182e32-a4cb-4882-991a-be791c200d73	3	cf7c40e3-05b5-4080-9814-8daf77e75127
ccf2e82b-5de5-4291-849a-390a0c957088	采集			2018-06-21 13:53:07.645+08	2019-06-27 13:53:35.187+08	aa4c3887-4040-4ac1-a908-4ae45f754c3b	3	f4925c79-04d0-42e2-b326-cf291ed7589d
02bedcab-6954-4215-aa33-80fd484bda13	采集			2019-06-27 14:07:45.235+08	2019-06-27 14:07:45.235+08	db69fe15-3a1d-46c9-9e21-5bef4ff4e964	3	f4925c79-04d0-42e2-b326-cf291ed7589d
ee3cecd5-4646-4a7d-8ade-1993d81887e4	采集			2019-06-27 14:28:06.365+08	2019-06-27 14:28:06.365+08	35ce9dd7-8476-4933-8a0a-27ada0e8ddf0	3	f4925c79-04d0-42e2-b326-cf291ed7589d
c164c829-5622-47f6-8164-a992be4b9e2a	采集			2019-06-27 15:43:13.194+08	2019-06-27 16:11:46.638+08	193aabad-c6d8-4ec6-8ca5-df2c25ae71e2	3	d873976f-2150-4a9e-8f8f-5b68dcdd0420
bf758132-c5a1-4622-a2a7-38359c9cc0c5	采集			2019-06-27 17:01:33.253+08	2019-06-27 17:17:15.044+08	65b11e66-836c-4898-bde7-46706a2f74af	3	bd2808a9-fbd4-4f04-a674-d3604806b95c
fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac	采集			2019-06-27 17:34:29.07+08	2019-06-27 17:34:29.07+08	4657f5dd-e39e-4be0-bc95-833443066096	3	bd2808a9-fbd4-4f04-a674-d3604806b95c
9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6	采集			2019-06-28 09:51:38.282+08	2019-06-28 13:51:13.399+08	f25dac37-cd4c-4f51-b8ff-1d5d051fb21e	3	d2f13e5e-dc6e-447c-b8f1-159f56c50f88
f52408eb-cc49-4576-ba3d-726ab9d6d9f5	采集			2019-06-28 14:47:16.387+08	2019-06-28 14:47:16.387+08	0df71d00-3d48-44a5-9c6f-8cceae090b0d	3	603b098f-f66e-4730-99b8-38fd8474636d
418a4cf1-2537-4f0c-ad3d-d7752a5957a8	采集	\N		2019-07-03 11:33:56.787+08	2019-07-03 11:33:56.787+08	de5f1899-8b36-4792-b34f-44a6f7748a86	3	d58ecc11-f676-48e3-b96e-1bb9f468720c
1961c932-469f-4e15-8dee-38cf1f837d35	Temperature	\N	Temperature of chill	2019-07-15 14:04:02.92+08	2019-07-15 14:04:02.92+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	3	\N
04f5706d-f963-435b-9341-68c5249dfa02	采集	\N	主动上传	2019-07-04 10:07:17.116+08	2019-07-04 10:09:53.292+08	433dc632-5b76-47eb-8a4f-eb40b4ba71bb	3	64dc7d39-4bc6-48b1-b0b3-4f7faa6dfb2f
76e98b1c-597d-456d-aee5-53d0b95466f0	Configure Sync			2019-07-06 16:53:20.947+08	2019-07-06 16:53:20.947+08	d926295e-4fda-4948-a719-bf6e04d96ddb	2	3e1d46a6-f0b7-4db2-87c7-027e6c5b65c6
2b4f0f98-d9ce-4941-8970-dd1bfed3512d	Data Handle			2019-07-06 16:53:20.958+08	2019-07-06 16:53:20.958+08	d926295e-4fda-4948-a719-bf6e04d96ddb	3	68855ea0-10d0-4ff5-bbed-98a4ae220997
bef735a7-a116-4448-8c98-c27e6f83fab2	State			2019-07-06 16:55:42.744+08	2019-07-06 16:55:42.744+08	6980d68e-b6b4-4ab2-a048-042672a46cef	3	bbd0c618-985d-47a7-b844-e4831697168b
8f23910e-3c7c-4113-b420-88df899c7a25	Temperature			2019-07-06 17:22:08.74+08	2019-07-06 17:22:08.74+08	7b879c12-2bc2-4ff7-a2ba-b730169c30c9	3	\N
2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	Basic	\N		2019-07-06 18:56:53.637+08	2019-07-06 18:56:53.637+08	6980d68e-b6b4-4ab2-a048-042672a46cef	3	\N
3c5cfd97-4900-4001-95e5-6d3b6790bec8	Power	\N		2019-07-06 19:01:23.526+08	2019-07-06 19:01:23.526+08	6980d68e-b6b4-4ab2-a048-042672a46cef	3	\N
a690c2d9-43b0-4c5d-b667-5020ef18e4ec	采集			2019-07-09 08:53:49.459+08	2019-07-09 08:55:06.293+08	df281eec-f674-4f68-bd65-ed56abf4f20c	3	\N
c61698d6-e360-4e40-a141-960ee17d0aa4	采集			2019-07-09 15:00:57.815+08	2019-07-09 15:01:31.969+08	676c48ff-13c3-426f-9871-989570d76ef9	3	46f179ce-6108-4ecd-a414-a184cb2b5de4
dbfb4fed-6353-4527-b6f7-b9af08f37fe1	数据			2019-07-09 15:05:43.549+08	2019-07-09 15:05:43.549+08	c2508e96-b2cc-4a5f-8015-aa9492a11193	3	\N
6ed9c2d8-4e87-43ed-b925-94a17a305bbf	采集			2019-07-09 15:10:11.937+08	2019-07-09 15:10:11.937+08	4fa8750d-807d-4c0c-9526-2662418f6f2f	3	\N
cf9e3897-d9bb-4d08-b13d-18e90e48a3ac	下发	\N		2019-07-11 16:57:42.22+08	2019-07-11 16:57:42.22+08	eccb6310-f340-4668-9469-3df210aa471d	2	040b16d3-afbd-46d8-bd00-71364dbbcf02
959bf8b8-23eb-48da-8362-90d4978c9406	Temperature	\N	Temperature of chill	2019-07-15 14:31:13.737+08	2019-07-15 14:31:13.737+08	7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	3	\N
e8b16798-e46b-4d0f-a93b-c03757601b0c	Door#1 State	\N	State of door#1	2019-07-15 13:28:34.588+08	2019-07-15 13:39:28.983+08	01da29ac-f803-4381-ae7f-28264effac4f	3	bbd0c618-985d-47a7-b844-e4831697168b
0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	Door#2 State	\N	State of door#2	2019-07-15 14:04:02.941+08	2019-07-15 14:04:02.941+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	3	bbd0c618-985d-47a7-b844-e4831697168b
f3177595-13d3-468c-8451-4677a7f3a0ef	Door#1 State	\N	State of door#1	2019-07-15 14:04:02.957+08	2019-07-15 14:04:02.957+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	3	bbd0c618-985d-47a7-b844-e4831697168b
cfb789ad-d761-4e5c-9f64-b9f87161c6a0	Door#3 State	\N	State of door#3	2019-07-15 14:05:53.116+08	2019-07-15 14:05:53.116+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	3	\N
69b276a3-aa72-4720-9591-cd371e95b7de	Door#1 State	\N	State of door#1	2019-07-15 14:31:13.674+08	2019-07-15 14:31:13.674+08	7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	3	bbd0c618-985d-47a7-b844-e4831697168b
578138e6-3a9c-4db2-bbf9-addfef22c072	Door#2 State	\N	State of door#2	2019-07-15 14:31:13.716+08	2019-07-15 14:31:13.716+08	7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	3	bbd0c618-985d-47a7-b844-e4831697168b
2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034	采集			2019-07-16 17:46:08.889+08	2019-07-16 17:46:08.889+08	d3d5de96-da53-4adb-b8f8-29d0e0c8209c	3	\N
c8ab31aa-0550-4b56-b062-20566f8edef5	采集			2019-07-17 14:29:44.533+08	2019-07-17 14:29:44.533+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	3	\N
7e6d0c55-7f14-4df6-b630-7e9bca15f6f3	323			2019-07-22 10:33:56.627+08	2019-07-22 10:33:56.627+08	6d2dad31-9715-4522-a382-9b1b99f9bebc	3	\N
c8050ea0-29fc-4675-9198-3a4c438aafff	采集			2019-07-22 16:03:30.01+08	2019-07-22 16:03:30.01+08	68885fd4-0280-410a-bf22-3afadec546f2	3	a92e19e7-5ed2-4b53-8bd5-781c242f27f6
e36b625f-b336-45f2-a421-47deb3ccff39	采集			2019-07-23 09:33:53.805+08	2019-07-23 09:33:53.805+08	a83dcd92-561e-40ba-b71c-b6d062d2bcb3	3	dc5d5da7-4105-4b48-9969-e9da5c70a387
7b76cdc3-1393-474a-9868-b48a35519a53	采集			2019-07-23 11:13:52.731+08	2019-07-23 11:13:52.731+08	8830f3b8-1be3-48ae-b1d0-8a9583cf4a18	3	504318da-e1b0-4c7b-b1a9-c959115c5235
911e12ca-0961-481e-bebb-0201c63f0cd2	文件传输	\N		2019-07-23 19:50:12.509+08	2019-07-23 19:50:12.509+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	3	\N
97d28bd7-4126-40cd-aff4-ba6db048ae15	文件传输	\N		2019-07-23 19:52:59.54+08	2019-07-23 19:52:59.54+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	3	\N
9f777c35-b431-4a11-aeac-979ad0a3f1ac	文件传输	\N		2019-07-23 20:06:45.194+08	2019-07-23 20:06:45.194+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	3	\N
82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958	文件传输	\N		2019-07-23 20:33:13.466+08	2019-07-23 20:33:13.466+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	3	\N
55c2a1eb-5dad-4181-86f8-9145d71e8077	采集			2019-07-26 11:18:48.467+08	2019-07-26 11:18:48.467+08	70cf173e-f529-4704-805e-193f1a6478cc	3	\N
98affd25-d0f7-47f2-abe9-5dc74bdfb02f	Energy consumption	\N		2019-07-26 13:52:18.174+08	2019-07-26 13:54:09.317+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	3	bbd0c618-985d-47a7-b844-e4831697168b
37b692f8-71bc-4741-928f-5eba35682efc	Voltage	\N		2019-07-26 16:32:46.702+08	2019-07-26 16:32:46.702+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	3	bbd0c618-985d-47a7-b844-e4831697168b
4801d3ef-12b9-41d2-bea8-f20ddeb90568	Electric Current	\N		2019-07-26 16:36:36.78+08	2019-07-26 16:38:11.729+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	3	bbd0c618-985d-47a7-b844-e4831697168b
6545a9cc-c2d6-4477-ba72-3db5a96d2ad8	GPRS	\N		2019-08-22 11:37:33.011+08	2019-08-22 11:37:33.011+08	0a341896-3c5d-4e60-af19-fe5f645c6967	3	\N
85cd155d-f611-4694-8051-4d81fbef2028	配置下发	\N		2019-08-22 11:37:44.95+08	2019-08-22 11:37:44.95+08	d6189068-bb18-4c68-a359-8e3139ab22e5	2	bc33df8d-ef27-4fa0-92cd-770a83216eee
c2632f26-f172-4ed4-bc84-48cc89b6e36a	cmd	\N		2019-07-27 11:32:00.712+08	2019-07-27 11:32:00.712+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	2	bbd0c618-985d-47a7-b844-e4831697168b
16eac313-4d5b-4b3b-960b-e3c3b7fbe450	采集			2019-07-31 10:14:14.849+08	2019-07-31 10:14:14.849+08	390e46cc-b69d-4966-89f4-d305afdd4649	3	3628b3d2-595b-4889-a7a6-8b68f2953389
e7674511-d506-492f-9321-966a9efe6971	采集			2019-07-31 16:04:11.149+08	2019-07-31 16:04:11.149+08	ce76608b-0e66-4498-b079-51aa9f03c950	3	\N
b781fb04-d60a-46c0-9081-e7ce553bb7e3	Power	\N		2019-07-24 17:44:30.79+08	2019-08-03 18:26:25.691+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	3	bbd0c618-985d-47a7-b844-e4831697168b
64576b12-36a8-4ca6-ac63-273401d692c6	文件上传	\N		2019-08-05 09:26:48.711+08	2019-08-05 09:26:48.711+08	32349c76-d117-4331-8a10-9b7ea057c2ab	3	0bd15600-333e-47d6-b4fb-c3b8b26c2dcf
616814a6-1aac-4201-b9cd-8164fd2198f0	GPRS	\N		2019-08-22 14:17:19.448+08	2020-04-05 12:09:45.44+08	6ac55754-f252-4ba5-ba9c-72a158734b97	3	\N
6ddff0ae-11d3-40f2-8e9c-2ddf160489d8	采集	\N		2019-08-22 09:15:45.957+08	2020-04-14 10:57:04.049+08	5b40bb69-7692-4cee-b6df-bd7871764131	3	12414de7-dac4-4966-aaa1-89db04cc97bf
32f98475-6b76-4723-a2f5-b0b7aed04cf7	采集			2019-08-05 18:12:12.138+08	2019-08-05 18:13:22.787+08	077e62b4-27da-47aa-846d-3d9169a8a895	3	618252ec-97d7-432a-ade1-4dac9223934c
16beb620-de9c-4137-a7cf-e63da5b0108c	采集			2019-08-05 18:14:48.66+08	2019-08-05 18:14:48.66+08	1c7ee1c6-3d99-4236-834f-6e0746c0f69f	3	\N
33bba333-0d20-43b4-a0e4-7dfaba4a9896	采集			2019-08-06 11:00:53.839+08	2019-08-06 11:00:53.839+08	df7ff0f8-b92c-4856-a1af-bf3244a8610a	3	e44f9a31-032c-40f5-9598-6ecbae372f1e
008ccbe4-2335-4ad6-98e4-57807ab4de7e	采集	\N		2019-08-07 10:27:40.172+08	2019-08-07 10:27:40.172+08	f0c82197-9e9a-42f2-a4e2-541c52deff52	3	2993963e-1c39-4e49-b5a2-b8349d634fc2
13b1b357-66cc-467f-9f25-078c46fe28b6	采集	\N		2019-08-07 10:34:16.584+08	2019-08-07 10:34:16.584+08	6fb1b711-d8c0-489d-9751-524410c27bcc	3	\N
5848ef89-cf06-481f-8044-51774b0a2694	采集			2019-08-07 10:40:39.069+08	2019-08-07 10:40:39.069+08	bfe0979a-c0e4-4430-89d3-5fbe86568640	3	81741880-ebc8-42d9-bf53-1c6def33376c
9ceb3806-c599-431c-b278-80ea9d6db7ba	调试下发	\N		2020-10-09 14:18:40.672+08	2020-10-09 14:19:56.434+08	4452ff6a-859b-45e6-9e9c-c6b59ee3667b	2	7fb4d0a4-2890-4ce3-a95d-5e4893fb7b8b
09943af3-4f49-495c-8612-c63a3a407e28	采集			2019-08-08 15:55:26.53+08	2019-08-08 16:08:27.675+08	8e44219e-9d4e-40ed-85b7-85dd24f8e821	3	1ed92105-cedf-4667-b966-db32e28771c8
75960822-83b9-4eb4-accd-bbccb4f4d139	采集	\N		2019-08-08 17:57:55.408+08	2019-08-08 17:57:55.408+08	9de2769d-cd81-43c4-ae6d-82f4cb9431de	3	d667ae82-81b1-4f2e-94ba-9e7c4741101b
1e9d3e4b-b208-4686-822c-c164a4f9cf7f	ConfigSync			2019-08-09 13:11:50.739+08	2019-08-09 13:11:50.739+08	3758c306-d352-4ff8-b9ef-470a58efa0a4	3	\N
8f177fbf-0fed-4306-a80b-6a2751f5fb9b	GPRS	\N		2019-08-22 11:41:46.105+08	2019-08-22 11:41:46.105+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	3	\N
106bec29-1b71-4f53-aab5-ad3d19c17116	DataHandle			2019-08-09 13:11:50.746+08	2019-08-09 13:16:39.31+08	3758c306-d352-4ff8-b9ef-470a58efa0a4	3	\N
f51d17c7-ad54-48ce-997c-13c1fb3ab155	采集			2019-08-12 09:55:16.28+08	2019-08-12 10:05:14.765+08	e257dc56-f70f-4ba8-b653-c5d047f9edba	3	83f972a0-ce28-4095-a775-1d9627256ed9
f31682e1-01ba-49e5-9639-886bee03cd1b	采集			2019-08-13 17:52:48.306+08	2019-08-13 17:52:48.306+08	a7c51497-66e3-4e63-aa6f-7b243fb8ea77	3	\N
eb5ec9d1-8ab7-49ea-8ced-3602ed68f445	采集			2019-08-19 10:39:47.472+08	2019-08-19 10:39:47.472+08	aa0e3416-fabe-4415-a848-d6cd84a500dd	3	e9f04fcd-34ad-4e77-919a-cce8ac4c19e9
2a244b5c-9f1b-4432-8302-2fc036a91a14	采集			2020-10-10 10:46:03.631+08	2020-10-10 10:53:58.036+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	3	f24b6f4a-a267-40b7-aca0-1971f916bd81
a717ab85-b28a-45e5-a9f2-4ed179975b6e	转发app的设备配置			2020-10-10 10:46:03.623+08	2020-10-10 10:54:56.534+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	2	f24b6f4a-a267-40b7-aca0-1971f916bd81
de5f27da-de79-4d11-a4ca-65bc1a9f178a	GPRS	\N		2019-08-22 11:04:32.31+08	2019-08-22 11:04:32.31+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	3	\N
bdcb0ea7-10de-4b76-80bd-c01f036ccd33	GPRS	\N		2019-08-22 11:27:45.891+08	2019-08-22 11:27:45.891+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	3	\N
0f06e6d2-1ad3-4cad-92a2-c3a23e36206b	采集	\N		2019-08-22 11:51:37.059+08	2019-08-22 11:51:37.059+08	d6189068-bb18-4c68-a359-8e3139ab22e5	3	2320be85-4d6f-4041-96c3-ddb2a166fbda
451d64cc-b568-44be-bace-184e24b4e827	GPRS	\N		2019-08-22 14:09:28.316+08	2019-08-22 14:09:28.316+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	3	\N
84e805aa-df66-43bf-9705-01e6b6c1e741	GPRS	\N		2019-08-22 14:20:43.393+08	2019-08-22 14:20:43.393+08	03f53a90-43a0-47d6-9183-edfb825a09e5	3	\N
9fe86237-419a-40b2-890a-00e0bb8d4af7	GPRS	\N		2019-08-22 14:28:44.635+08	2019-08-22 14:28:44.635+08	6e1d3878-3ea2-4c73-9137-0ef98781be0c	3	\N
aa7aaf91-1e54-411a-b174-22ee7c40c07e	采集	\N		2019-08-22 14:36:13.044+08	2019-08-22 14:36:13.044+08	12253047-b588-4225-9f55-e6282003788a	3	\N
ff22ed2b-4d22-47b5-b0e1-9d35c72caf99	采集			2019-08-01 15:00:23.358+08	2019-08-26 11:02:04.243+08	f75a7b9a-2288-4f05-b3ec-5f17a297e53c	3	bb65a921-da11-46bf-a625-cbeb6afd0edf
4e08e98b-f49d-4032-bade-d8145cd4bad7	采集	\N	主动上报	2019-08-27 09:54:34.297+08	2019-08-27 09:54:34.297+08	ec8018e2-1de6-4384-ac85-01405362dc83	3	789632f0-828c-4e10-992b-03b466bd7bb4
5af22086-4fb6-4d39-b439-f1bfb44b2bcf	采集			2019-08-27 15:43:12.981+08	2019-08-27 15:43:12.981+08	3bf54b2d-1623-4920-80c2-4e1f7407b318	3	\N
7d5f863e-8fad-4de4-a417-48b29d1df1de	采集			2019-08-27 16:31:15.679+08	2019-08-27 16:31:15.679+08	8c23f875-86cf-4fe7-a315-526c7a1d0187	3	\N
2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	Edge Status	\N		2019-08-30 12:05:47.854+08	2019-08-30 12:11:38.821+08	d926295e-4fda-4948-a719-bf6e04d96ddb	1	68855ea0-10d0-4ff5-bbed-98a4ae220997
5664cb08-5e57-46c1-ac71-23220613639c	采集			2019-09-04 13:53:37.956+08	2019-09-04 13:53:37.956+08	c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	3	\N
034ff83b-34b0-48a5-9ccb-774a844901f8	微功耗	\N		2019-09-04 15:12:14.199+08	2019-09-04 15:12:14.199+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	3	\N
58baaabd-502a-4f68-a62d-c0cfeddd7ec4	采集	\N		2019-09-04 15:22:34.892+08	2019-09-04 15:22:34.892+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	3	\N
e52f95e1-8fac-40af-a49a-baad70dab906	采集			2019-09-04 15:40:23.389+08	2019-09-04 15:40:23.389+08	aa630d67-b466-4f6a-9a04-fe5744954d20	3	\N
cf8445c6-e70a-419f-8a2f-ba7f44896604	采集			2019-09-04 15:48:38.137+08	2019-09-04 15:48:38.137+08	e600502e-b2ff-466a-9fa6-b9e9e554647c	3	\N
a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab	采集	\N		2019-09-04 16:08:42.921+08	2019-09-04 16:08:42.921+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	3	\N
63cf9ae9-373c-4b2c-82de-58d3172094bf	采集	\N		2019-08-22 14:36:51.812+08	2019-09-06 10:08:00.098+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	3	a9269cd1-57a8-4731-a70d-ef619cc8ee96
5dea6ab3-3969-4e41-804f-eff249d5d9ce	采集			2019-09-10 14:47:17.481+08	2019-09-10 14:47:17.481+08	70c53b9c-f7ec-48ce-b790-bd96754d2d3b	3	\N
e830e2fb-b382-4679-b8db-c7e2afeed47b	转发app的设备配置			2020-10-10 10:46:11.529+08	2020-10-10 10:55:07.353+08	f0d5077b-4260-422c-87e3-92d13d136ebf	2	f24b6f4a-a267-40b7-aca0-1971f916bd81
f1841b24-8182-4a14-ae68-c0bad62cec3f	GPRS	\N		2019-09-10 16:52:37.759+08	2019-09-10 16:52:37.759+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	3	\N
10c5b435-17c1-49f9-b45c-6a61c35f8071	采集			2019-09-10 16:52:37.768+08	2019-09-10 16:52:37.768+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	3	\N
7cb252c1-fad7-4874-bc56-417537d2d35d	采集2	\N		2019-09-10 16:52:37.746+08	2019-09-10 17:05:25.325+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	3	aa948108-11fb-414d-a182-29cbc7bf1cce
7a7c3f51-9057-44b5-b7e7-ea9b73c89a50	采集			2019-09-11 10:15:40.126+08	2019-09-11 10:29:02.876+08	f34762e6-6532-434e-93a0-74c119cfc58a	3	2f3066b9-d373-419e-9dac-5c0797ed3112
799b57ce-6f05-46b8-8d02-8b0e71997270	采集			2019-09-11 11:36:46.125+08	2019-09-11 11:36:46.125+08	798b891d-6c34-4219-bde6-a8d957643010	3	ff2477e1-9a33-4ccd-99d4-e1d703b18f39
1fdc974b-f062-45cb-910f-13b5a193e084	采集			2019-09-11 11:57:38.684+08	2019-09-11 11:57:38.684+08	36ddd8af-d58c-4496-ae9a-ce9cb9786cd5	3	3f78df73-bc71-44fb-8d74-74062d845305
b57f384f-11d7-499f-8e6f-5bcfbc054334	采集			2019-09-16 16:50:20.699+08	2019-09-16 16:50:20.699+08	c89d02cd-f052-4004-aa3e-93906248a62b	3	4f00f469-4a6a-41a1-94fa-7f669cfbed12
7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6	采集	\N		2019-09-17 09:35:57.984+08	2019-09-17 09:35:57.984+08	69f9043f-2ce4-4d39-97fe-94f6c2f6185c	3	f186407a-b804-4ce8-ac19-989d7296dba7
7cb1a32e-60d7-4241-b1aa-4a2fadd39d82	采集	\N		2019-09-19 09:41:34.181+08	2019-09-19 09:41:34.181+08	6225c8bb-1497-4354-ad28-e5eb698de9f0	3	7c5f67f4-aa30-4f95-bc24-3de551e8dc36
c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2	GPRS	\N		2019-09-19 12:42:11.933+08	2019-09-19 12:42:11.933+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	3	\N
ef5fc14d-bace-4e50-a536-81112feb65a8	GPRS采集	\N		2019-09-19 16:41:31.458+08	2019-09-19 16:41:31.458+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	3	\N
1155c110-625f-47ac-b8bb-f85733b50122	采集			2019-09-24 11:35:40.029+08	2019-09-24 11:35:40.029+08	da5f4309-1696-4853-94ef-f11b9d0602e0	3	\N
dd622fcd-0936-4ede-855b-50f5439f0fe1	采集			2019-09-24 11:35:42.569+08	2019-09-24 11:35:42.569+08	59e0e84c-3ab8-485a-a6fc-d880a79b296a	3	\N
35c6a683-69d3-43c9-af6e-ac9c72bab707	采集			2019-09-24 11:44:07.134+08	2019-09-24 11:44:07.134+08	b20e46ed-a619-476a-9c50-88e1b8ea3697	3	\N
cd84b56e-7ef8-4b5b-ab86-ebefb3e7706f	提取日志	\N		2019-09-24 11:48:21.027+08	2019-09-24 11:48:21.027+08	d929c576-62dd-4f0c-a2cc-15120347b903	2	2c405e11-e6dd-407b-b5db-edb86696ce83
d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942	采集			2019-09-24 11:49:24.127+08	2019-09-24 11:49:24.127+08	4ccb1624-a210-4672-9951-0dbf335dcdb1	3	\N
723258be-4d0f-4a3b-9e4b-da3c3dd14524	日志提取	\N		2019-09-24 11:50:48.675+08	2019-09-24 11:50:48.675+08	9aa93498-820e-4fc6-a288-5b2274fb9246	2	48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac
5dc53d97-b267-49c4-a4be-f289a2812764	日志提取	\N		2019-09-24 11:53:37.807+08	2019-09-24 11:53:37.807+08	fa0123d0-7db7-4412-9670-53175d0c2c40	2	00e607a1-c022-4399-9cd1-54d2dc2705d3
ef0dc799-e1ec-4fb3-86f7-2ac498f26f55	采集	\N		2019-09-24 13:53:48.14+08	2019-09-24 13:54:21.754+08	c209cbd1-8662-42e5-81d2-6cba239aa394	3	b9716d39-3f65-4cd7-9fb9-4214e050b117
a308f5d2-2559-4f60-8323-c243f04ce8cd	采集	\N		2019-09-25 10:41:37.033+08	2019-09-25 10:41:37.033+08	fe3a614d-329c-4b70-99ff-f95ccb28ab79	3	\N
806e534e-417f-4802-a29d-23edbe5ac02d	采集			2019-09-25 10:49:31.382+08	2019-09-25 10:49:31.382+08	37bc2c29-264c-4366-8fe1-9c2984702b94	3	\N
8dc2cfaa-524f-4b62-b655-1061f1a863ff	采集			2019-09-25 11:07:08.052+08	2019-09-25 11:07:08.052+08	d756ead6-3c0a-4d1e-be3f-dde6e031a048	3	\N
804133e0-c4a4-441e-acb9-a504734bbd62	采集			2019-09-25 11:19:02.075+08	2019-09-25 11:19:02.075+08	f7374ca5-78cb-4578-bfe3-df32eb350d05	3	\N
1bcbd000-415e-460a-a4f2-63d8f232bbf6	采集			2019-09-25 11:24:05.373+08	2019-09-25 11:24:05.373+08	50fc0df9-2b02-445b-b04e-17209e8c69ee	3	\N
d9ea813b-d066-472d-b08e-2436f6520e9f	采集			2019-09-25 11:32:47.407+08	2019-09-25 11:32:47.407+08	005826c9-dd60-4013-99bc-da28bc0d9c93	3	\N
88ec5756-da5e-4fa0-b882-39727baf501b	采集			2019-09-25 11:38:34.945+08	2019-09-25 11:38:34.945+08	8392cdb0-52c7-4fee-8ace-a64e5cf86240	3	\N
a58243c4-2874-46f4-86b9-bc864f203eec	采集			2019-09-25 11:51:56.961+08	2019-09-25 11:51:56.961+08	5102e0bc-4778-43b6-80d3-fd71e4032088	3	\N
3d535ccc-ec09-44f8-b278-5e93d4ff79ae	采集			2019-09-25 11:54:59.65+08	2019-09-25 11:54:59.65+08	73ac8e46-173b-4f23-bb89-edd506496e34	3	\N
22da5422-3017-46d1-b154-701f9a128e3c	采集	\N		2019-09-25 17:13:20.306+08	2019-09-25 17:13:20.306+08	f535897b-dc69-4835-b0d7-b4a6062db938	3	\N
f12659ce-b28d-4602-a33a-879eedbbbcaa	采集			2019-09-25 17:25:19.274+08	2019-09-25 17:25:19.274+08	f29e4bb2-0e42-4016-b27e-f2377c115ff1	3	\N
c1c93d31-aef7-48fb-bccc-f3f76ec1689a	采集	\N		2019-09-29 11:25:24.018+08	2019-09-29 11:26:30.118+08	a47565e1-92e5-41e9-ba98-79a93065f0ee	3	60b3c120-3fc4-4e3f-b5ec-85d4a53b72af
3f518643-909e-45c6-b816-3cabb1fd8af9	采集	\N		2019-09-29 11:32:07.985+08	2019-09-29 11:32:07.985+08	dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c	3	4930470c-205d-414f-aa01-bf60c835c3c9
f3923edc-71cc-43bd-a3a5-48894181f917	采集	\N		2019-09-29 13:32:12.557+08	2019-09-29 13:32:12.557+08	594ffc3d-f245-4a5e-8843-9448105cb86d	3	dfa3967f-3c30-459f-82f0-7d8efa88fb05
8a578a79-fd96-4c69-8069-99e4e77dbbf9	采集	\N		2019-09-29 13:35:44.789+08	2019-09-29 13:35:44.789+08	a4e6dddc-930c-4704-9c93-9a8d78da81cb	3	4de81ee8-2530-4c2b-82ee-aa3fa3a8b381
b9a786ad-b6be-4aa7-9aca-43b903852ad0	采集			2019-09-29 14:37:47.023+08	2019-09-29 14:37:47.023+08	569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448	3	53dcd683-cb5d-4ac5-9c53-d5305893edd5
b58daded-2fb1-4ea1-a68d-bdb20b492fdf	采集			2019-09-29 15:43:10.889+08	2019-09-29 15:43:10.889+08	c96dced7-2915-4087-9ba5-b6f9bdc35f89	3	a5fa6229-dace-45db-8d8b-0268e2c892b2
acc72050-2df9-4098-81f2-863eeb756ff8	采集	\N		2019-09-29 16:28:26.958+08	2019-09-29 16:28:26.958+08	f190bf5a-78ab-4963-aac1-2fda921f2507	3	0b43e37d-9ca2-428c-b636-ea381d1645e3
15e2a325-246a-4e43-8bea-784596788377	采集	\N		2019-09-29 17:52:28.811+08	2019-09-29 17:52:28.811+08	0edf8e7f-0f5f-440a-a83a-333e5d90a2ef	3	\N
f34514f6-cca7-4baa-89e2-d57be4bd26e2	采集	\N		2019-09-29 17:57:27.736+08	2019-09-29 17:57:27.736+08	7eee6239-5a81-4979-ab6f-43a1b3e8d570	3	408b3be5-3a50-4c01-8432-9de0ecd0607a
284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe	采集	\N		2019-09-29 17:59:29.403+08	2019-09-29 17:59:29.403+08	83759876-3d92-4218-8efb-ea36dc6d81ef	3	\N
5daa9060-cbbb-4736-ba79-7440d7d8178a	采集			2019-10-08 13:42:51.585+08	2019-10-08 13:42:51.585+08	f19f1e04-8739-4652-9869-5fe16698e82e	3	19b75009-14b8-45df-8924-0cc8d5a5ea89
c509c8e0-06ea-469a-9004-68542a1617e7	采集	\N		2019-10-08 17:04:35.736+08	2019-10-08 17:04:35.736+08	150f2029-8823-45cf-813a-4a6a3e427d2f	3	c181aae9-13e2-43f6-b18b-8de08bcb6181
c996ba97-9aa2-4102-9c84-4020cfe7bd30	采集			2019-10-09 13:09:24.416+08	2019-10-09 13:09:24.416+08	8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471	3	\N
6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4	采集			2019-10-09 13:11:20.976+08	2019-10-09 13:11:20.976+08	7ce5e1fb-e335-4fa0-928d-9b1032350ab8	3	\N
0a495f63-803f-4145-a48d-f54fa7f66d22	采集			2019-10-09 14:19:59.811+08	2019-10-09 14:19:59.811+08	6cb2c0f8-0c45-42e6-97ca-56d97a4a3484	3	\N
35547185-29e1-45d9-ac07-1c22c2166d0e	采集			2019-09-30 09:56:31.673+08	2019-10-09 16:10:35.067+08	01a43d23-84c6-4e78-bf39-7ed3a6383a88	3	9de4617d-9968-4e94-9982-75e55cba6adf
d34cb069-c7b8-4dd5-95f7-ec88197b9650	采集			2019-10-10 09:55:12.734+08	2019-10-10 10:05:09.783+08	eaca25fa-f0bb-45cc-a5e0-59ba71654987	3	77db0016-b199-4659-8d88-718b7c6f5f12
4b89bcb9-ce24-4016-b105-5d950bd997b0	采集			2019-10-10 10:48:36.505+08	2019-10-10 10:48:36.505+08	673195ba-381a-4dea-93e1-4f65f4d84079	3	9376f5bd-295c-489d-a21a-5bb68e15392e
ec1d8582-b39b-4e28-a13d-0d8db91976b0	采集	\N		2019-10-11 13:23:21.187+08	2019-10-11 13:23:21.187+08	66d2c15b-394a-4b84-b7d3-b991be41d9b0	3	\N
46632020-7139-44de-a5e8-1fa4f067df7c	采集			2019-10-11 14:16:26.985+08	2019-10-11 14:16:26.985+08	1fff247a-6494-4752-91b7-74565fa1f314	3	\N
1e915828-7914-48e0-88bf-33430c62fd36	采集			2019-10-14 09:24:23.059+08	2019-10-14 09:31:41.052+08	6b90f580-9b05-42a8-ba6a-113143823d44	3	7edb13cb-08e0-4c27-91cc-153a1af8a708
185c3316-9ed2-4a9c-b365-0691b303600f	采集			2020-10-10 10:46:11.468+08	2020-10-10 10:53:31.426+08	f0d5077b-4260-422c-87e3-92d13d136ebf	3	8565ec35-5b7e-4dde-8536-dd450d4c26a0
bfcf9463-f865-4f10-9aff-33066bd6f245	采集			2019-10-14 09:45:26.524+08	2019-10-14 09:45:26.524+08	274929f9-024a-40b8-8856-eb145c334b9a	3	\N
15c74504-c3c8-4739-8b58-10b0bcd0e83d	采集			2019-10-14 09:47:26.065+08	2019-10-14 09:47:26.065+08	c560df92-8e02-480d-8646-a66f98cc2aff	3	\N
d3206948-c73c-49b5-a593-473e8a6bc209	采集			2019-10-14 09:49:18.029+08	2019-10-14 09:49:18.029+08	cc82fda3-8669-4810-a87a-ff57a55a3de6	3	\N
0d6f1736-a3a0-4a8b-97dd-2cafc52767b4	采集			2019-10-14 09:52:24.123+08	2019-10-14 09:52:24.123+08	fb91aca2-dc9a-4cbb-8ece-54a5e04d6566	3	\N
dc4ab80b-3b8a-4088-a468-06a078637a45	采集			2019-10-14 11:39:40.991+08	2019-10-14 11:39:40.991+08	b7bea944-ae59-4ec4-85cc-345e98006e52	3	\N
e8620f1d-ab05-40a9-ba5f-197894c20a49	采集			2019-10-14 16:03:45.927+08	2019-10-14 16:03:45.927+08	1dcd0084-9a2d-43ef-9b10-1e8305ce8b06	3	d7580de5-0d54-4658-b81f-48ed26745fb4
42d7c213-aa9e-4263-9e97-e57ed97f4342	采集			2020-10-13 10:08:39.389+08	2020-10-13 10:08:39.389+08	04ffee3d-0572-491c-9291-82dbbf14e7d4	3	\N
8006946a-43de-49dc-b665-3603da448dec	RTU			2020-10-16 11:41:30.088+08	2020-10-16 11:41:30.088+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	3	\N
15237a2c-3030-4ece-9901-f8c9c3d5e158	采集			2019-10-16 15:16:12.219+08	2019-10-16 15:16:12.219+08	30cf2191-2a9e-40dd-a83f-969d2f053e1e	3	b3a939d8-6a64-4588-afe5-6a949ce71644
ff5ffe96-ab0f-4368-af0c-52020e8d2188	采集			2019-10-16 15:20:46.749+08	2019-10-16 15:20:46.749+08	213e2ff2-285b-445d-8661-24f6f91bf7b8	3	\N
2ec89b60-f2d5-4458-bcc7-de0050ff50f1	采集上报	\N		2019-10-16 14:51:34.454+08	2019-10-17 14:30:36.567+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	3	9b35efe3-e7d0-4364-b398-5a4a7d10ab20
1ff1e182-a5de-4d2f-bf40-72a40dbc29e6	采集			2019-10-18 16:29:31.406+08	2019-10-18 16:29:31.406+08	b13c8811-3051-46d5-87e2-d1bbbc7853f2	3	\N
15e1b52d-2e21-410c-a442-b7c480cc07bb	采集	\N		2019-10-20 16:11:22.497+08	2019-10-20 16:11:22.497+08	a8607ea4-e6db-4dc6-9e64-3e8db3628ba0	3	\N
a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8	采集			2019-10-22 13:45:08.969+08	2019-10-22 13:45:08.969+08	b0c1da1a-0945-4edb-9f17-e9b845030888	3	\N
8d553a41-0d8b-46ae-8329-ff94e6009958	采集			2019-10-22 13:48:51.938+08	2019-10-22 13:48:51.938+08	109b7349-2bb0-4859-8c1a-0c7630cbd11f	3	\N
592da43b-5c27-401b-9118-c0519ecbc5b3	采集	\N		2019-10-22 14:58:00.161+08	2019-10-22 14:58:00.161+08	f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35	3	07acceff-18ad-4f11-97b8-894121af0622
2997a6da-3093-40f9-b0e3-00b1f8c383b1	RTU			2020-10-16 13:52:59.057+08	2020-10-16 13:52:59.057+08	b7dd781d-dba7-4228-b49f-8aee75e42625	3	\N
b28c3db2-7ea7-4311-9b60-ccd4af997bcd	采集			2019-10-28 17:22:11.036+08	2019-10-28 17:22:11.036+08	ed459df4-d57c-430e-878b-37b61111d133	3	\N
3da2f371-f622-4f8b-b700-52af31eaa6b1	采集			2019-10-23 10:16:21.722+08	2019-10-23 10:16:21.722+08	2ea41890-89c4-4569-89ab-df3b02dc16eb	3	\N
5b0c875e-50cb-493a-bb89-af4d008cc6e2	采集			2019-10-24 11:23:42.799+08	2019-10-24 11:26:51.32+08	cc938850-0b9a-4ab3-9712-dbf35ff157d9	3	b6893aa5-1010-4f9e-b20e-32084e9115e8
ee19f59c-9bf5-436f-b3e9-3298da57448f	采集			2019-10-24 11:47:52.694+08	2019-10-24 11:47:52.694+08	a64fdbc7-36d7-49d9-8969-9040111aee6a	3	\N
c12bfa47-96c4-4d82-b508-7a8dc380df18	采集			2019-10-24 11:51:03.274+08	2019-10-24 11:51:03.274+08	389a8b42-097c-411c-b534-0666e61c7842	3	\N
249d472d-1470-4d8e-b629-3e1c3fcd772e	RTU			2020-10-16 14:22:53.591+08	2020-10-16 14:22:53.591+08	1450b04e-214d-47b0-8e32-def5a361cc48	3	\N
b8b3091d-39a3-4ad0-9c49-ba4a7b85538d	采集			2019-10-28 17:20:38.034+08	2019-10-28 17:20:38.034+08	8a550a15-96be-455e-8c81-b9e7efcc2b30	3	\N
98d04a09-cee2-4b6f-8250-160a824e6e27	采集	\N		2019-10-30 09:09:12.593+08	2019-10-30 09:09:12.593+08	88c7c5c5-561d-4193-9cf0-91aceec9f79a	3	\N
d4227f5a-828a-4fe2-80c5-bb09da246b47	采集	\N		2019-10-29 11:00:04.414+08	2019-10-29 11:00:04.414+08	b86fdc56-591d-40c5-b4f8-cb5b2a265be8	3	ea8db328-6c73-45bd-ae5e-07dc714dab2c
d07816f1-06b9-4acc-b33c-16928982cde6	采集	\N		2019-10-28 17:17:29.261+08	2019-10-29 11:32:32.709+08	e2fb2ed6-6d1c-41da-9f07-ab5866dd8940	3	81808c6c-3007-4832-b2e0-bf51d0c3bf14
39cebd11-af5b-47ac-abfa-db8cef103a38	采集	\N		2019-10-29 13:17:07.578+08	2019-10-29 13:17:07.578+08	2e9595c1-ff54-4c5f-953e-f61a7837200e	3	\N
9df36e4a-3670-47fb-b965-41c2704b6fd1	采集	\N		2019-10-30 09:06:58.259+08	2019-10-30 09:06:58.259+08	613e22b3-00d5-4036-b4de-8988e8a25b02	3	6ad511e5-d6e0-49dc-81ad-934729e589bb
7aee0c4c-edb0-43e3-a3bc-9fbff9871499	采集			2020-10-19 14:20:08.555+08	2020-10-19 14:46:21.27+08	eefc80f3-265d-475f-b00b-d44016522eab	3	9e3473be-51a7-4bba-917b-2a7813354caa
24a8c155-8275-4e27-8355-01550cda1374	采集			2019-10-31 16:01:05.962+08	2019-10-31 16:01:05.962+08	0f20644c-1893-49f9-bc83-6b66a9ead892	3	90c896b2-bf34-4005-91e2-de3860809bc2
0a0eef97-0c71-486a-a1ed-fc6ff48005ec	采集			2019-11-01 14:59:07.355+08	2019-11-01 14:59:07.355+08	50e00d9f-f07e-4a17-96bc-c74a2aab4d71	3	\N
093428eb-fcd3-4adf-aad8-db3423f78c60	采集			2019-11-01 14:03:28.029+08	2019-11-01 15:01:02.825+08	86561a5b-04f5-4b5f-8bc7-6b002b4b6c68	3	73ea7fd7-c191-4b58-8bb3-ea0177dc8e95
75eb8303-ca9c-4afd-9f82-e4aaab2ed119	采集	\N		2019-11-04 09:56:01.81+08	2019-11-04 09:56:01.81+08	40c3cf7a-91d6-4c0e-aa48-4839dd6815cc	3	66a372b9-f1df-4802-9cf7-e522c85dbbf6
7979ff13-c8b1-4bee-986a-094e12da9553	采集	\N		2019-11-04 16:33:47.708+08	2019-11-04 16:33:47.708+08	f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6	3	\N
5f39116e-f4a1-499e-85da-b67e0f93a044	采集	\N		2019-11-04 16:36:01.167+08	2019-11-04 16:36:01.167+08	53ea01cf-1ce2-4b41-b725-974426affa48	3	\N
5ffc3472-8381-4000-a185-1f3a8d4ed263	采集	\N		2019-11-04 16:36:44.224+08	2019-11-04 16:36:44.224+08	e62db430-948a-4311-996f-38348811807a	3	\N
aef1a81a-27fd-4648-9208-00b719cea8b9	采集	\N		2019-11-04 16:37:23.034+08	2019-11-04 16:37:23.034+08	23b49cdb-2f9b-4170-9c38-2941c2341d00	3	\N
4b24c098-2d80-49b0-89b6-9092c52053bd	采集	\N		2019-11-04 16:37:55.459+08	2019-11-04 16:37:55.459+08	28f92d45-2a16-4768-bc97-e9acc713b231	3	\N
ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51	采集	\N		2019-11-04 16:38:29.867+08	2019-11-04 16:38:29.867+08	d325832b-3b9a-4f92-9b08-0984c6b81599	3	\N
d17ee4be-2675-4d98-aab6-4b6ec7c271a6	采集	\N		2019-11-04 16:42:05.509+08	2019-11-04 16:42:05.509+08	863ffb4f-8b5f-4a67-b93e-fa4f92f2464a	3	\N
0475dd0e-b02f-4a19-a933-dee73c76ef6a	采集	\N		2019-11-04 16:42:40.925+08	2019-11-04 16:42:40.925+08	9199194c-49d8-4c20-8b52-67e469c30838	3	\N
2943a420-80a5-4d38-a6fe-68807623c20d	采集			2019-11-05 09:12:10.053+08	2019-11-05 13:22:53.371+08	a9dea92c-5afa-40b9-b1f3-197e9b0f82be	3	f54ae30e-c52b-4a68-92a6-87a72741467a
ee5dd742-7370-4a06-89b6-d40b3c6a0446	采集			2019-11-05 14:06:15.041+08	2019-11-05 14:06:15.041+08	6431292f-5b95-41f0-8291-ff902e58b376	3	\N
7a954891-860b-4321-ab9b-290a023d288f	采集			2020-10-19 14:17:50.547+08	2020-10-19 14:44:51.525+08	8da5aeab-4a1e-4bb5-afe2-67cadfc4700a	3	4f321706-bd7a-449d-bdb1-45b1985db560
26634fa3-2b25-4428-8b50-8d4e899a0304	采集			2019-11-07 10:06:59.587+08	2019-11-07 10:41:02.204+08	0758748a-7706-4392-ba7e-e47526251acb	3	ccc136ea-7d44-4529-9bf0-7dfae8e1f59d
7beea55a-7613-4d26-9003-485f6ae91791	采集			2019-11-08 13:12:19.615+08	2019-11-08 13:12:19.615+08	8e254f7b-1da7-4912-8b0d-467770662365	3	\N
b4b08250-12e5-4346-99a6-64df0c58487b	采集			2019-11-08 13:18:41.597+08	2019-11-08 13:18:41.597+08	c659433c-cfd8-4b1a-a9d3-5664beb39ed9	3	73ea7fd7-c191-4b58-8bb3-ea0177dc8e95
2cfd28c0-bd76-4a55-af3e-d21b921263cc	采集			2019-11-08 13:43:46.057+08	2019-11-08 13:43:46.057+08	1f0ce463-872a-406b-bdbe-a469b45f9e9a	3	\N
19d3b12a-ef96-4053-b50b-004075527249	采集	\N	复制工讯	2019-11-08 17:23:25.363+08	2019-11-08 17:23:25.363+08	894ab7ef-b84f-420c-b2f0-cfdc5c00b826	3	3c239466-6ce0-435b-869e-715dc10c3c69
e76e23fb-b7d4-4991-8687-a3a31084ce60	微功耗	\N		2019-11-09 10:07:15.871+08	2019-11-09 10:07:15.871+08	c9eacd36-38d6-48b9-9672-e76406906ea3	3	\N
a556c96d-7976-48d5-9bb0-de9f1661654d	微功耗	\N		2019-11-09 10:13:20.225+08	2019-11-09 10:13:20.225+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	3	\N
8ef82507-140e-4675-8de3-21d0d91759a0	微功耗	\N		2019-11-09 10:17:13.378+08	2019-11-09 10:17:13.378+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	3	\N
ae758eae-e892-4168-a8c1-4ec7ceb81e5e	微功耗	\N		2019-11-09 10:23:17.64+08	2019-11-09 10:23:17.64+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	3	\N
fd40883e-bc42-4776-b631-e353c0761303	微功耗	\N		2019-11-09 10:28:16.28+08	2019-11-09 10:28:16.28+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	3	\N
1535b2bf-3149-430e-97d6-32972b838167	微功耗	\N		2019-11-09 10:32:45.074+08	2019-11-09 10:32:45.074+08	37c046eb-9a0e-49b0-95fb-f0128338f381	3	\N
db875fbb-2c21-49f8-bac0-342276dec8ce	微功耗	\N		2019-11-09 10:38:35.811+08	2019-11-09 10:38:35.811+08	73a7b800-25d7-41ad-872d-96cc4f9430de	3	\N
956b5d84-5687-4405-803b-c9d1790c6ceb	微功耗	\N		2019-11-09 10:42:27.941+08	2019-11-09 10:42:27.941+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	3	\N
3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	微功耗	\N		2019-11-09 10:46:16.062+08	2019-11-09 10:46:16.062+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	3	\N
2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	微功耗	\N		2019-11-09 10:50:51.693+08	2019-11-09 10:50:51.693+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	3	\N
a1b787fe-741a-4eef-a65b-531baff33f6e	采集			2019-11-11 11:43:37.465+08	2019-11-11 11:43:37.465+08	9a331e7d-9429-4f58-8d30-a2fde39a80f3	3	\N
578e459e-ee49-4fa5-88cc-9d2edcfbdcac	采集	\N		2019-11-11 14:53:57.082+08	2019-11-11 14:53:57.082+08	c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77	3	1a7ebe09-0b00-4bb6-834e-2e0a6899f3d2
f7ccec63-ff80-4c16-8c21-8a5f7c3cc971	采集	\N		2019-11-13 11:48:20.487+08	2019-11-13 11:48:20.487+08	ac632873-d5e1-42fa-9343-6962d16bb547	3	\N
6fac5183-d1d7-4dcd-9507-e29c2eb60419	微功耗	\N		2019-11-13 16:49:53.572+08	2019-11-13 16:49:53.572+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	3	\N
354d4c65-0d09-4272-8748-3e53d2c1668f	采集			2019-11-14 13:09:15.676+08	2019-11-14 14:06:18.52+08	c150497e-123d-4ce0-bc80-9a537ee84489	3	a99f3fb6-8165-411c-a072-0615cbffe55b
aef915e1-110e-44cc-8425-3532b1566b78	采集	\N		2019-11-14 14:48:50.989+08	2019-11-14 14:48:50.989+08	6e32b4dd-c257-4c55-922f-1d62e21220c9	3	84196675-5121-45c9-999a-65cddab21183
553043f1-1489-49e7-8685-476b53719b37	采集	\N		2019-11-14 14:56:28.576+08	2019-11-14 14:56:28.576+08	5375e7c0-4ad5-4fcb-93df-82c9140ba075	3	\N
c6e9864f-e7aa-46c6-bc38-7cf89f82005b	采集	\N		2019-11-14 15:03:17.498+08	2019-11-14 15:03:17.498+08	70457bad-88aa-4b95-ba35-4d42f4c3ac9d	3	\N
7e54985e-4293-452f-bd1e-27d54e8c9259	采集	\N		2019-11-14 15:07:44.246+08	2019-11-14 15:07:44.246+08	9ef26f61-19a9-4990-83f4-b0c81d348eeb	3	\N
52567547-16d9-4a75-b748-d64c0a0b01cf	新采集	\N		2019-11-15 14:30:33.945+08	2019-11-15 14:30:33.945+08	d26842d0-7685-4eec-869d-160b023932b9	3	\N
b4cd49a5-53df-4791-aece-50f8fe3be0e3	采集			2019-11-18 09:58:17.656+08	2019-11-18 09:58:17.656+08	5b2e8307-69da-445f-a1a5-6f04cfd7cd8f	3	\N
ef56e794-df70-42a3-a2f4-e69f4621981a	采集			2019-11-15 10:29:23.439+08	2019-11-21 10:23:20.849+08	e95109a9-cf5a-4e13-b52b-1f85101fd99a	3	e717a755-bd92-4ee0-877c-d12780487661
7257f8df-a9ef-4358-9754-228732a8953b	摄像			2020-10-19 17:25:27.866+08	2020-10-21 16:15:38.424+08	f89c588a-f68a-4208-857b-555022da9f9e	3	d2931056-a908-4f70-af66-8ba3a1cfc6d7
95a38af8-bdb9-4f10-ad6a-f3cccec12f59	采集			2020-10-23 17:03:59.954+08	2020-10-23 17:03:59.954+08	d26881e7-f69e-4b7d-9041-47009bd2c298	3	\N
4200d327-7520-40f5-a476-fdb18a6c0e3e	采集			2020-10-26 13:25:34.106+08	2020-10-26 13:25:34.106+08	f9f36adc-75b4-4140-a14e-73f8172228d7	3	d33fb432-a9e5-4bc3-9758-ff853f405c10
ba00d9a2-f064-49eb-918c-0924558607bc	采集			2020-10-28 10:07:56.839+08	2020-10-28 13:30:29.628+08	ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2	3	e9f68832-4caa-4bbb-a61d-29e1e6b33016
e7114e7a-a8cd-4265-93bd-3d86a0ab5864	采集			2020-10-29 16:40:40.002+08	2020-10-29 16:45:15.936+08	f84896ea-8908-41e9-9e30-371a39cd4261	3	dd9d12d0-a0ee-44d4-9ba5-9887b1057881
77f66a9f-48f4-4970-b406-a8abc2aa39f9	采集			2020-10-30 14:32:49.87+08	2020-10-30 14:32:49.87+08	ec7fa28a-0898-4cb3-a5d0-098d568c1e69	3	\N
f2b6d5a0-114e-4c45-9066-5a938d4f620a	采集			2020-11-02 10:05:36.141+08	2020-11-02 10:08:20.463+08	b6f7c250-9eeb-4225-8c5e-68b766f03649	3	3a675e96-bee4-48ae-85c8-643b40bb29fd
5bffec18-538b-4422-8cfa-c602ce69cb7e	采集			2020-11-02 13:44:41.983+08	2020-11-02 13:44:41.983+08	30d005dd-93a1-4c1a-ac10-8bdedf26bab4	3	8c517f8e-8e35-46fa-94c5-e97f1c6ced70
bdbf00d7-ac36-4768-947b-32347dec4054	控制	\N		2020-11-03 11:31:50.879+08	2020-11-03 11:31:50.879+08	30d005dd-93a1-4c1a-ac10-8bdedf26bab4	2	451da24b-91ad-43ba-8980-317b9aa1f9bf
dd00727c-90ae-49ec-b8a5-9a89497b7d8c	采集			2020-11-04 09:48:42.72+08	2020-11-04 09:48:42.72+08	f3a9238e-8d1c-4876-a81d-f2bb05755585	3	5923b1b8-42ae-4618-a4b7-7b994f29e69b
f4d0c081-5014-42df-8154-c7c3b4657cfb	采集			2020-11-04 09:56:29.869+08	2020-11-04 09:56:29.869+08	e3e8ca1e-1676-4b76-96ed-131ba8516599	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa	采集			2020-11-04 10:06:19.411+08	2020-11-04 10:06:19.411+08	2d0ff832-a7e0-4029-94bf-d7203c1fa793	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
ce6a00e6-475a-4ecd-8890-b523c3c65e53	采集			2020-11-10 09:01:05.488+08	2020-11-10 14:36:02.933+08	fb922722-9262-470f-8064-4b78234fa802	3	c413c8f4-fa5b-4e63-94e2-eb857285fcb1
468aada9-eeb5-4174-a21f-73f4ac420d78	采集			2020-11-11 17:46:31.995+08	2020-11-11 17:47:47.749+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	3	544ff068-a704-41f2-aebc-72d263f455a1
dee5d110-9c34-4382-a725-42cf5d298587	转发app的设备配置			2020-11-11 17:46:32.106+08	2020-11-11 17:47:58.927+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	2	d0aa19d7-1742-41cb-a707-9feea04afda0
eaa7d913-e972-4a8b-9bb6-870673b450a2	RTU采集			2020-11-16 09:26:32.447+08	2020-11-16 09:26:32.447+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	3	a07a4bf8-c1c2-49da-b8dc-e2f2825764a1
3a1eee94-6d31-4cfe-a9cf-c2522302fa16	微功耗采集	\N		2020-11-16 13:57:56.729+08	2020-11-16 13:57:56.729+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	3	81741880-ebc8-42d9-bf53-1c6def33376c
cfcac206-4e6f-41f2-b40c-a9294cb606d7	采集			2020-11-19 09:19:24.246+08	2020-11-19 09:19:24.246+08	af9ec966-1c73-4e23-bae8-5ffcb4661942	3	\N
ad7a78bd-4769-4409-90d0-955998f1b916	采集			2020-11-24 11:13:14.75+08	2020-11-24 11:14:02.684+08	f963b588-8c55-4b9b-b455-8e7302d88408	3	68f82401-bc7d-4e16-8f53-5c8e2c3850b7
ec43a63c-84a3-4a0a-964e-79fa8af558e7	采集	\N		2020-11-26 10:49:09.494+08	2020-11-26 10:49:09.494+08	c02e4b7c-e6b7-4d83-969c-34059f84af1f	3	\N
6c6317e7-c5c4-4ef8-ab38-3da0e4824f91	采集			2020-11-26 10:57:51.665+08	2020-11-26 10:57:51.665+08	86aa83da-35f2-4247-8660-4d23b9c30a1c	3	\N
830b53c4-b4d6-4d85-9776-3b448ee62c5e	采集	\N		2020-11-27 10:01:58.016+08	2020-11-27 10:01:58.016+08	75ab7fed-fb74-48c5-8cf9-898b3fc62358	3	cedac832-df05-4b4d-bec7-05664a01574a
aa8f7231-23cf-47e0-a8cb-f045759a3304	采集			2020-12-03 17:40:46.306+08	2020-12-03 17:40:46.306+08	085307b7-181b-4059-9e81-1cbfff8fa061	3	65918029-7aa5-44f6-aefb-0f2d55470e9b
82830f9f-f318-4308-babc-79341cb03954	采集			2020-12-08 17:06:14.286+08	2020-12-08 17:06:14.286+08	403dcab2-df50-4fda-a92e-c2100bb9a242	3	057c429b-10f7-4447-b6ad-d4cf05e6346d
d09dc928-d5c0-4723-b23f-863fbb56c56f	采集	\N		2020-12-09 13:48:51.706+08	2020-12-09 13:48:51.706+08	8001366f-40a9-4e0c-affa-d050c5eacf17	2	08e016e1-21f3-4a45-a960-89e5d91211d9
47875511-0ac0-4938-a38b-277669f302e9	采集			2020-12-09 13:58:20.461+08	2020-12-09 13:58:20.461+08	5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c	3	\N
08d7f8f5-45fb-4a61-8b6f-04c0710b09c3	采集	\N		2020-12-10 15:58:36.447+08	2020-12-10 15:59:20.585+08	8c5826bc-d7e6-4506-9dab-ded01f4c2346	3	7f6d7a19-6752-4542-9a34-7baec15394d5
dbbe4022-fbd5-42cc-9e58-233046723571	采集			2020-12-11 08:53:07.237+08	2020-12-11 09:50:36.493+08	19edfd93-0bd4-4c71-85c0-647971fa008a	3	778be798-daba-48ac-acb5-7107c728189c
bf13586b-7b53-4c49-8131-f81bb6128330	采集			2020-12-11 08:56:50.566+08	2020-12-11 10:22:16.035+08	6d6210bc-a5e7-439d-b731-e6efdeada2f7	3	1f1ee91e-0fdf-4bed-a761-937743c6a82a
cfb7053c-3698-4308-9245-c7fdfb84a202	采集			2020-12-11 08:53:58.634+08	2020-12-15 09:15:14.376+08	7737f9b3-195f-465e-b563-1a4f509e38ce	3	1d9bdf0c-3623-425f-9d86-cb286fd007f0
4b302156-72de-4f74-a828-06b1e47938a3	采集			2020-12-16 15:29:32.372+08	2020-12-16 15:29:32.372+08	19f735aa-e557-4795-93bf-fc5e8c57b47a	3	\N
9acc6ecb-52ee-4070-8fe5-6e893642d30e	采集			2020-12-16 15:35:33.662+08	2020-12-16 15:35:33.662+08	aeced422-061a-4b9f-bf4c-1e9597f5b016	3	\N
bd26c9fd-802a-4cca-8f55-3a27e7bfb026	采集			2020-12-16 15:38:50.378+08	2020-12-16 15:38:50.378+08	35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9	3	\N
09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc	采集			2020-12-21 17:00:24.189+08	2020-12-21 17:00:24.189+08	167e3709-030c-4724-bbad-4060c61870bc	3	82a3c5f5-d951-4702-9359-77faffd51db3
a75b6e21-4348-4fb7-802c-ee2ecc56f7ea	采集			2020-12-16 17:00:14.094+08	2020-12-16 17:27:08.959+08	4f041931-dc1f-4868-985b-e5f1d27b1d38	3	4b0fa613-30cd-4b22-b50e-87974bd2ba1a
31ecb271-8866-4680-add6-52e257911749	采集	\N		2020-12-22 08:40:50.159+08	2020-12-22 08:40:50.159+08	90f77fb4-1b78-4f30-b558-8026aa10f6db	3	113b841e-f66a-4020-a065-95c8de705e15
198ba586-24af-4e12-9eff-7c35453816b6	采集			2020-12-16 15:27:44.528+08	2020-12-24 12:36:44.271+08	1a190e1d-27a0-4b3a-8635-8737f24de024	3	ba7f2cc2-0e6e-47f7-913b-feccd613654e
b7a0ef5f-adce-4d74-808d-e8cb24d7955b	采集			2020-12-24 14:19:13.36+08	2020-12-24 14:37:40.314+08	d67fea40-a63c-4087-b5fd-5e5f0c387893	3	d40397c6-b9b9-46ff-b3c5-535d14068a52
ce14d28b-bad7-4d5e-b418-d40663dceaec	配置下发	\N		2020-12-24 14:38:04.633+08	2020-12-24 14:38:04.633+08	d67fea40-a63c-4087-b5fd-5e5f0c387893	2	ef6ef551-0434-444e-aa94-12a2c6cfe513
cce324d2-9c6a-4637-a928-b6a40648a114	采集			2020-12-23 16:00:33.994+08	2020-12-25 12:07:30.093+08	7b536454-20a7-4c1b-bfeb-4a0f018d2673	3	aaaefada-5903-40c6-96d7-98e2aae78d81
6680d7d5-905b-4311-8a63-a8c11b0c765a	采集			2020-12-29 14:11:13.126+08	2020-12-29 14:11:13.126+08	7c054865-5f77-4df5-9d1b-ed2c6f1bb27e	3	\N
403ed6b4-3b5f-464a-8da3-51142a22d535	采集	\N		2019-11-20 09:11:51.877+08	2019-11-20 09:12:06.555+08	9278fee5-3705-4e76-a8a6-1cf10956a376	3	bcca6d57-3df9-4b61-8c7a-71402f47b612
84e785f0-1280-4066-ac32-66fc93019612	采集			2019-11-19 16:14:21.595+08	2019-11-20 09:27:50.786+08	407a002b-de7c-4a76-9732-e4e8aaaafec3	3	f82eec29-fd92-496d-a98e-02dc2e22cf9d
42a0ae36-f70b-40f3-8883-e04b90d177b1	采集			2019-11-21 09:33:12.26+08	2019-11-21 09:33:12.26+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	3	4f00f469-4a6a-41a1-94fa-7f669cfbed12
0666d951-058b-4519-ba87-4889fda65f5d	云采集	\N		2019-11-21 11:47:17.607+08	2019-11-21 11:47:17.607+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	3	\N
3d75f1d4-c46d-443a-ba67-ea09c7642e11	采集			2019-11-21 11:47:17.627+08	2019-11-21 11:47:17.627+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	3	7c734114-6fa7-41a5-8f0c-ce0940aded18
746f3ce2-5918-4156-bee1-cf4e3a0c51ca	Lora	\N		2019-11-21 11:47:17.643+08	2019-11-21 11:47:17.643+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	3	\N
a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395	微功耗	\N		2019-11-21 11:47:17.657+08	2019-11-21 11:47:17.657+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	3	\N
f745e8e9-041e-4578-8568-38fec10b69c1	云采集	\N		2019-11-21 11:47:19.139+08	2019-11-21 11:47:19.139+08	868f47ed-fe83-49c4-be2c-70731b436220	3	\N
202ac1b5-9f83-4de2-b423-a27607b53f28	采集			2019-11-21 11:47:19.166+08	2019-11-21 11:47:19.166+08	868f47ed-fe83-49c4-be2c-70731b436220	3	7c734114-6fa7-41a5-8f0c-ce0940aded18
7afd8b52-1811-40be-88ec-64173b08f522	Lora	\N		2019-11-21 11:47:19.194+08	2019-11-21 11:47:19.194+08	868f47ed-fe83-49c4-be2c-70731b436220	3	\N
8b29ca1c-631b-4899-b819-7fb1a9d8cd63	微功耗	\N		2019-11-21 11:47:19.221+08	2019-11-21 11:47:19.221+08	868f47ed-fe83-49c4-be2c-70731b436220	3	\N
299ea989-d531-4a5c-9371-aa3ae165c2da	采集			2019-11-14 15:48:42.028+08	2019-11-21 11:48:21.873+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	3	34770cf0-cf46-4ba9-870d-5c2e73ffe8ac
4b017286-f61b-4777-bbdd-aa7cab984440	采集			2019-11-21 14:01:06.936+08	2019-11-21 14:01:06.936+08	43060aae-0e85-4ec6-9fc9-b05216b11e13	3	94b82699-1d71-4853-aecc-891554e0b963
c7eb65e8-262a-42fe-a9a2-3a77e07a84c9	采集			2019-11-21 15:13:15.434+08	2019-11-21 15:13:15.434+08	e1118b87-bfea-42be-b365-1c99d35511cc	3	5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
b3db1020-2db0-4931-ab2e-2661c6b459ff	采集			2019-11-21 15:17:49.688+08	2019-11-21 15:17:49.688+08	ee878563-3f80-4c7d-8888-319c875c8a5e	3	5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
22a573d1-d13d-447f-9984-1335ac15e1be	采集			2019-11-21 15:17:51.648+08	2019-11-21 15:17:51.648+08	b1353bed-cda0-44a5-b1e9-94cb166962a5	3	5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508
bcb2585f-9765-4795-8033-eaf0d467ab1c	采集			2019-11-21 16:06:37.691+08	2019-11-21 16:06:37.691+08	446a08d7-c237-4f0b-acfb-3d9310da742d	3	f01703db-289c-4463-a196-f8487c24252b
5fa7d170-eda6-4d15-a767-25fc37a090bc	采集			2019-11-21 16:15:06.516+08	2019-11-21 16:15:06.516+08	4698f1de-2051-4283-9fe5-2c62b1687239	3	f01703db-289c-4463-a196-f8487c24252b
61e1f659-3d27-4958-8881-d4e6103c309b	采集			2019-11-21 16:15:07.782+08	2019-11-21 16:15:07.782+08	5b338441-75c4-4186-9fc3-23aa8d614e19	3	f01703db-289c-4463-a196-f8487c24252b
6dd33289-d530-4c8b-a41c-aa946291a7df	GPRS采集	\N		2019-11-22 15:35:28.383+08	2019-11-22 15:35:28.383+08	d31031ab-0237-41a5-adc0-867c1e9952f7	3	\N
fc0dc028-86e5-4a74-a75b-15c2d9b30d63	采集			2020-11-10 09:02:26.695+08	2020-11-10 15:56:24.108+08	c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5	3	15d206c2-cc6e-46f4-ba70-f8d642edcea1
5fd6dff1-680f-410f-9631-e645a33bddda	RTU采集			2020-11-11 09:55:32.292+08	2020-11-11 09:55:32.292+08	c991c138-3b47-4a21-af81-9ba1df554176	3	\N
5bf561bf-7398-4a8f-aaaf-4f7b695d0020	采集			2020-12-11 08:54:51.201+08	2020-12-11 10:22:24.72+08	dac7cbf1-b98a-4c95-9ff7-14b1602c494f	3	1f1ee91e-0fdf-4bed-a761-937743c6a82a
9b051f3e-8ded-40e9-bdce-c5b5723b3858	采集			2020-12-28 14:09:52.548+08	2020-12-28 14:13:55.613+08	cce5d34b-3464-4566-81e6-3ff2540af13e	3	a544b432-a82e-49b3-8f33-1f6e36703a9e
7ce42d82-9728-4463-afd2-906136b87ad7	采集	\N		2020-12-31 13:46:30.839+08	2020-12-31 13:46:30.839+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	3	32333345-3fd9-4150-8f8e-27418047f280
e673c024-edd4-495c-a9a9-c5c6306ed6d0	采集			2020-12-31 14:28:18.774+08	2020-12-31 14:28:18.774+08	c251c010-afd1-42d0-9d85-e044a6d51a8a	3	\N
ab533430-50a9-42f0-be2d-3f49990cd470	采集			2019-11-21 16:17:19.733+08	2019-11-21 16:17:19.733+08	0e96ddaf-1acc-419b-afca-18854f8c25d8	3	f01703db-289c-4463-a196-f8487c24252b
4ea55c69-435f-40ec-b8fd-6ba3cbb45b6c	采集	\N		2019-11-22 14:54:33.455+08	2019-11-22 14:54:33.455+08	123b24f1-ba7c-42e1-b742-afdc5bf8620b	3	882d3fe2-780a-4da9-adaf-8d1395b022cd
8cb0c7e1-fe83-4b63-9f7f-7598487ef57a	采集			2020-12-31 14:25:20.549+08	2020-12-31 14:25:20.549+08	7da4f815-e889-4b79-8b69-8fda271a954f	3	\N
cfbc93ae-34de-4b5c-b78f-393d80e6be1e	GPRS采集	\N		2019-11-22 15:31:42.033+08	2019-11-22 15:31:51.644+08	1bda935e-56de-4365-b60e-f02d19299795	3	\N
00d1f8ae-26c7-4fde-93ee-415598dab3dd	GPRS采集	\N		2019-11-22 15:25:55.227+08	2019-11-22 15:35:00.199+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	3	\N
61e2ddde-025e-4a3a-b03e-49cddfe2c09c	GPRS采集	\N		2019-11-22 15:38:27.574+08	2019-11-22 15:38:27.574+08	2e0d00cd-a321-4504-b716-41813848cbdb	3	\N
c3035443-22e8-4067-b775-2be4cf81939e	采集			2019-11-25 13:10:42.702+08	2019-11-25 13:10:42.702+08	5e052852-cf91-4092-8497-41556a0c10b8	3	ae1fb024-ff8b-4af2-9931-7a20585b8234
03a86ebd-9100-429c-a1a2-edacea7380c3	采集			2019-11-25 13:12:43.519+08	2019-11-25 13:12:43.519+08	3b4d2618-c6ec-4efc-a159-501ad68fd36e	3	\N
e6b1563f-dafa-47e5-bb75-fa29d3388298	采集			2019-11-05 14:15:48.118+08	2019-11-25 14:21:27.98+08	1e6fc551-3ad9-4963-9754-142f9c470c9c	3	72c2b126-5e58-47eb-89ee-fe0b05c628b6
e0856580-9791-4d76-8d0a-4673e9e7f1bd	采集			2021-01-04 09:20:07.813+08	2021-01-04 09:20:07.813+08	b44eeccf-0eed-4785-a539-0122bcd2a99f	3	59a4437d-8333-47be-9f2a-72705db84885
e95f9ff7-5a7c-495d-87c9-993463fb3945	采集			2019-11-25 17:26:40.003+08	2019-11-25 17:26:40.003+08	7e5507c8-b21b-47c0-b9de-f79f09875fc7	3	85e2b97b-2221-4c86-96cb-1daf90b1118f
169af4ea-ded9-488d-8a88-96e79e1526b0	GPRS采集	\N		2019-11-26 10:03:08.896+08	2019-11-26 10:03:08.896+08	90a2bc12-2214-43ff-9154-9b9212de2c10	3	\N
3081c848-b498-42a0-9887-5fba5a8eb28f	GPRS采集	\N		2019-11-26 10:07:42.407+08	2019-11-26 10:07:42.407+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	3	\N
94787d41-6353-4a20-a84b-848d79e1e209	GPRS采集	\N		2019-11-26 10:13:25.788+08	2019-11-26 10:13:25.788+08	5e7775c1-0766-436e-b701-b1102833b98d	3	\N
c4ae4615-1bce-476b-96bb-827de9a9a3f5	GPRS采集	\N		2019-11-26 10:16:09.271+08	2019-11-26 10:16:09.271+08	099c6283-519f-4946-aa9d-f0059a76b832	3	\N
a68a5258-d2d1-40df-beb0-710a190c1175	采集	\N		2021-01-07 10:06:02.483+08	2021-01-07 10:06:02.483+08	daaea98a-a1a5-40c5-b34f-108d16d94b12	3	\N
9e616b46-c079-4ea8-a379-71bc5fa74f42	采集	\N		2019-11-26 16:27:03.637+08	2019-11-26 16:27:03.637+08	2663fcb4-832b-4bd9-ac6e-4a58835355cb	3	\N
9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	采集	\N		2021-01-08 17:49:15.375+08	2021-01-08 17:49:15.375+08	2d2bb5aa-7dae-4123-bf05-5cdc08d7480f	3	\N
047b4ec5-9aa9-44cd-8410-9484195bcc5b	采集			2019-11-27 14:14:55.499+08	2019-11-27 14:16:07.376+08	ba311e19-eea2-4eff-8674-1a146dab66c3	3	81f86e48-a3c7-4867-8e7f-cd9b620bf7af
fd38a31b-ae19-46d2-87ab-29c622bb6c41	指令下发			2019-06-11 15:06:43.245+08	2019-12-04 11:31:14.735+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71	2	9a5c7ac8-776a-4dd5-a224-c083f94292e6
6447edf7-84a6-451a-b207-a3714c23e9c1	采集			2019-12-04 17:52:08.251+08	2019-12-04 17:52:08.251+08	e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d	3	9ef827cd-6659-4099-b834-218954121f3e
68049b31-8deb-465e-a468-2cbafc9b8023	采集	\N		2021-01-07 13:13:24.299+08	2021-01-11 13:06:59.467+08	2d4d2d3b-44b4-43ac-bb98-7c02fcf76152	3	028bfee5-e1d0-4126-bc16-cb9cb13f7cb2
a9e161b5-80ac-44f8-b7e3-eab4baaab9d8	超声波风速风向FM-C-SX			2021-01-14 14:24:33.373+08	2021-01-14 14:36:35.517+08	27e93aa0-1ec0-40df-aa0e-de4152459a66	3	9143cf8f-4fb3-4e7c-9a9c-c674d088d655
b0ddaaab-3ad2-4674-a102-dc2459657a7d	采集			2021-01-18 12:37:46.527+08	2021-01-18 12:37:46.527+08	7d999707-8940-47f8-995e-f50b44e48ede	3	\N
d1124662-5294-40cf-a8cb-6cac92776c40	采集			2021-01-18 14:02:07.851+08	2021-01-18 14:02:07.851+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	3	\N
1de99810-efe3-468a-a89b-0d42d5933634	采集			2021-01-18 14:04:59.391+08	2021-01-18 14:04:59.391+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	3	\N
cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a	采集			2021-01-18 14:09:49.695+08	2021-01-18 14:09:49.695+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	3	\N
cff46266-6321-44f0-a893-0a66249826b1	采集			2021-01-18 14:14:29.64+08	2021-01-18 14:14:29.64+08	e2ad2fb6-75a3-490f-82ae-eac117102885	3	\N
2df0457d-dcdc-43a8-b9be-cde18d3e3f6f	采集	\N		2021-01-26 15:42:15.151+08	2021-01-26 15:42:15.151+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	3	\N
b781e844-b4da-4a6b-9420-bd6796c7188b	文件传输			2021-01-26 15:59:08.531+08	2021-01-26 15:59:08.531+08	dadaf677-ed6c-4f61-ba61-d030f157dd14	3	\N
ad519e49-e9a4-46e1-8166-c56e97bac6d5	采集			2021-01-27 13:50:41.426+08	2021-01-27 13:52:00.546+08	9baef129-7240-456d-819f-081ed682b6c6	3	8b4200a6-9a48-45e4-8fc2-5e1fe6f756c1
4f43df6e-9984-45bb-9ec3-62e789fb6b72	采集			2021-01-27 13:54:55.094+08	2021-01-27 13:54:55.094+08	1738d5bc-6a00-4ec6-813b-1ecd8ed014bd	3	2a36b97c-3cf6-4a5e-a331-d00b21babbac
c9b1921e-62db-4dc5-b15b-663afe09388e	采集	\N		2021-01-28 08:50:30.357+08	2021-01-28 08:50:30.357+08	b4836295-511d-4752-99b6-099f9e59ec54	3	795ac977-d4b1-4743-bfe1-ae7830419b5e
7dbd6789-715f-43ad-94d2-ca3ede2c52e2	采集			2021-01-28 09:32:46.664+08	2021-01-28 09:37:35.491+08	998e19a5-71a8-484e-a7af-5ffe30f99e87	3	21edfabe-f147-4b03-8f4f-11b3c2c7ca9b
40e24053-00bb-4c0d-9d0d-6b44178ab0f2	采集			2021-01-27 16:52:16.896+08	2021-01-28 09:41:22.855+08	c948c019-e1f5-4a3d-a348-de60051d3e2e	3	8f65f84a-9034-41ca-a6ea-dba981e7f031
d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87	采集			2021-01-28 09:45:57.602+08	2021-01-28 09:48:47.839+08	aad44a46-f5ad-4b1c-b6a4-cff40950cfba	3	210c09d0-3125-4f4a-964c-c9889116f99e
532e0ecd-69b7-4dc4-945e-e4503cb4f4de	采集			2021-01-28 09:58:52.857+08	2021-01-28 09:58:52.857+08	10652dfa-31f2-41fa-b997-d6162cb01901	3	37f02599-3f46-4f8a-ba94-dc6515a792d4
4af6c519-ea08-4b4b-a19e-ca0574265fdc	采集			2021-01-29 10:12:04.673+08	2021-01-29 10:12:04.673+08	c51a8eb3-9068-456f-9922-5934de559a71	3	a544b432-a82e-49b3-8f33-1f6e36703a9e
e983c3bb-0606-43f3-ad7a-0a1c80bf1df4	采集	\N		2021-01-29 10:41:27.974+08	2021-01-29 10:41:27.974+08	5ab5659c-c875-43de-a5cb-c2c09a6b738d	3	\N
fc3a3026-9e74-4e31-9927-3936778248b5	采集	\N		2021-01-29 11:00:43.45+08	2021-01-29 11:00:43.45+08	a7e6bd92-16dd-49b0-a4c1-115a6c8b272f	3	\N
074a59c4-fb97-4bb9-9835-8c6463a9dd8a	数据上报	\N		2021-02-04 15:51:02.029+08	2021-02-04 15:51:02.029+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	3	\N
0ae9cc6b-99ae-4795-a8c3-b31ff5b2e7d2	采集			2021-02-04 16:04:59.959+08	2021-02-04 16:04:59.959+08	408d0732-eb70-4420-89b3-8f5ab433528f	3	30e579ff-ba81-471e-9de7-6f0063c049c4
5cecb8ee-3d0b-41dd-8293-4108719a7e08	采集	\N		2021-02-04 16:07:35.009+08	2021-02-04 16:07:35.009+08	ff8195ce-78e0-4668-81bb-8f26e83411a9	3	\N
2940ee26-449d-4390-8707-b8e0b150faad	上报	\N		2021-02-04 16:16:51.941+08	2021-02-04 16:16:51.941+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	3	\N
bf24a684-40ba-4a05-9745-dfad12c4a4a2	上报	\N		2021-02-05 15:01:15.422+08	2021-02-05 15:01:15.422+08	e2ad2fb6-75a3-490f-82ae-eac117102885	3	\N
8ebf5c23-cb3c-4f9f-a506-a3d125575921	采集	\N		2021-02-05 15:02:09.632+08	2021-02-05 15:02:09.632+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	3	\N
68beb8e6-51d2-40db-8cae-5ba79d4cf5c6	上报	\N		2021-02-05 15:04:22.729+08	2021-02-05 15:04:22.729+08	7d999707-8940-47f8-995e-f50b44e48ede	3	\N
915fe37c-0682-4390-8b9c-06edc2294532	上报	\N		2021-02-05 15:08:44.93+08	2021-02-05 15:08:44.93+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	3	\N
257470bc-2299-4185-a68b-b194c1b926ad	采集			2020-11-04 10:10:46.535+08	2021-02-05 15:18:10.067+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	3	\N
\.


--
-- Data for Name: CapabilityMetaInterface; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CapabilityMetaInterface" (id, "createdAt", "updatedAt", "capabilityMetaId", "deviceMetaInterfaceId") FROM stdin;
4d73b23a-96ed-434f-a6d1-999f90a4166e	2019-12-20 10:02:25.442+08	2019-12-20 10:02:25.442+08	7fec904c-4e25-4bf8-a250-261f21994398	8d019347-0d6d-435e-a798-e7dba9b83e94
3318c67b-7f3f-4314-beab-6c1c6474ca08	2018-11-05 11:05:43.247+08	2018-11-05 11:05:43.247+08	640ca77d-7813-4304-9242-b987653bbad0	8aa2ad50-9740-4add-9d62-327eed1b920d
cab6949a-a1f7-4e4f-b107-4ce6bde05190	2018-11-09 14:49:08.45+08	2018-11-09 14:49:08.45+08	ed0bee37-45a5-464f-aec8-5b97ee0fb1d3	4dd766ed-6f42-4028-8d71-180701484513
1d051412-7a76-4f26-bc4b-17abdc116794	2018-11-21 14:57:39.421+08	2018-11-21 14:57:39.421+08	7faa8d59-78aa-493f-855c-39efc2890727	22b97f71-1db8-48f7-9ee4-85adcd617e0c
710c6598-ae78-4ea1-926c-4e5b75f0866d	2018-01-05 16:26:30.124+08	2018-01-05 16:26:30.124+08	7721177a-8610-4836-82c5-d08d05a6be97	a8da373f-295d-41c8-8370-38f54425b4ae
07dc2dae-45db-41c2-9f02-410bceb00bbe	2018-01-05 16:27:59.09+08	2018-01-05 16:27:59.09+08	824dfcd1-4745-4087-aa8e-237d72715c4d	57caac26-053a-415f-839e-d361e644ee3e
71a8f5d0-266f-41e3-9f03-481118afa2df	2018-12-03 10:30:03.056+08	2018-12-03 10:30:03.056+08	ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a	1842a81b-e5de-4835-a800-e8ad4353ff87
a19d9f46-8b10-4072-b711-d4de6d9613a0	2018-03-15 13:45:07.095+08	2018-03-15 13:45:07.095+08	f45f4852-853f-4a66-a359-8b48c4624b75	8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
cf5aee9f-0a86-4ea7-84a4-99094310b8f1	2018-03-15 13:49:32.802+08	2018-03-15 13:49:32.802+08	4ee6b60b-02a2-4760-99c8-873ad7ae2475	66d2ff10-fea7-4539-873e-c5be6ca52424
e4a3e679-06bf-4fde-b6d3-c4ce5cd24be2	2017-08-24 20:03:54.308+08	2017-08-24 20:03:54.308+08	86b95247-634a-44af-8af0-b047a5f10f5d	93027b4e-7dc8-45ad-9bd2-d2f83f5da14b
33072c2b-8f68-4fa1-997c-4de35c51cfd3	2018-01-05 16:29:20.593+08	2018-01-05 16:29:20.593+08	2fa52a8c-6ff8-4131-b74d-761173132a03	967080e3-98af-4159-b73b-83fbe1adc1ef
f3af7235-0bbd-487f-ae15-63893a10484e	2017-08-26 15:45:06.847+08	2017-08-26 15:45:06.847+08	e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	8699fd4b-ba62-4d57-865d-9ad6f15997e2
3213ac96-266e-45a2-8c1a-bc50de09166b	2017-08-26 15:51:32.565+08	2017-08-26 15:51:32.565+08	aa48a11a-b276-4670-bc85-8c69368a7def	7ae238e5-3972-416b-9889-5388c3889fea
93cfd6b6-20b2-4a54-976e-c815c778a518	2018-01-08 09:46:41.158+08	2018-01-08 09:46:41.158+08	d30c1deb-b88d-4111-a4df-6810595e0a63	ec1cec29-b96c-45ed-bc2d-36cd2dc990db
b67b78ed-2b81-48b4-852a-82d80bf089d8	2018-01-08 09:46:41.165+08	2018-01-08 09:46:41.165+08	31a6e729-2f1b-4d8a-8f13-399b327f0d70	ec1cec29-b96c-45ed-bc2d-36cd2dc990db
fd0fe17e-1cc2-404e-a521-436b52c6d7bb	2017-08-28 19:16:22.987+08	2017-08-28 19:16:22.987+08	7fab5981-f265-41b6-b77c-36ac36a17a85	eb975f2c-94f0-4073-a10f-08e05c10b8d2
0fe376f5-6f78-4d6e-a41f-4c7bd8c219f2	2018-12-03 13:59:26.718+08	2018-12-03 13:59:26.718+08	a9a88239-bda9-4074-8162-0831dde92dd6	7812e889-d184-4f4c-be6d-ce2a956aa747
7dc902fb-801c-448c-a485-a6dc4281e5c0	2018-03-16 09:57:17.074+08	2018-03-16 09:57:17.074+08	540a8aa4-184a-4795-acea-025548061b8c	6590317a-c6c4-4555-98f7-096aef3d4edc
1508a9d0-aa7f-4909-a774-79b75c823eea	2017-08-28 20:28:53.776+08	2017-08-28 20:28:53.776+08	e232591d-9a18-42c9-a7a4-dad82336325d	cf1b2fb7-1992-4e93-b636-f7c81b1cf722
6501955b-fa01-4453-9b4a-ee280b85c881	2018-12-06 10:06:22.377+08	2018-12-06 10:06:22.377+08	f944e6ec-6886-471e-b0e0-41afb54df653	ce55f3f5-68bc-446b-a42b-9d589c6a1917
b5bf4c02-eaac-4b56-960d-56d4bc4d9eee	2017-08-28 20:54:17.764+08	2017-08-28 20:54:17.764+08	a5866031-3267-4c41-97d2-0c8eeff1baab	a9419541-f580-469a-9faf-549b75863b52
2b417caa-d564-4c4b-b332-bd5d04200b43	2018-12-06 10:15:14.269+08	2018-12-06 10:15:14.269+08	f7d87585-4ebf-4d22-a1ce-05ef947311e7	827f748e-7f46-44dc-908b-4f30a556d488
c5171148-b864-4b78-b0b1-68373e9d76e5	2018-12-18 16:53:42.391+08	2018-12-18 16:53:42.391+08	cebdbb60-2d1c-4a4a-af8c-85a571d69232	0edf5985-412a-448a-891a-5f89db140c8a
85433a3e-eb2e-4f74-b3f4-29b8d702b1bf	2017-08-28 21:24:55.045+08	2017-08-28 21:24:55.045+08	11450ef7-f0d4-4947-acd3-d1f7afd85e0d	f9c931f2-268b-4bae-b97a-47cde5e60eae
6f3521b1-510c-4645-971c-e8bce7315261	2018-12-24 11:53:35.05+08	2018-12-24 11:53:35.05+08	9bec257b-dd97-4034-ada6-eb01b7a69868	e13e14c3-6fe2-4040-b3f8-423eae5a91af
e59e3389-ca0c-40da-922e-ecd5d83488f7	2017-08-29 11:49:32.546+08	2017-08-29 11:49:32.546+08	06cd5938-5a30-4ca3-910e-b174b900daff	eb975f2c-94f0-4073-a10f-08e05c10b8d2
283afaed-b21b-496d-a0ea-458baf7519a5	2017-08-31 17:09:14.402+08	2017-08-31 17:09:14.402+08	38b407d6-2d46-46be-bb4d-9d0c6e673051	db55d5aa-a374-4095-8420-55d6b1129f4a
16b774cc-e083-47d4-b5ba-a327d16851f9	2017-09-02 14:47:06.96+08	2017-09-02 14:47:06.96+08	753c5c99-5da6-4172-9173-492353bb0533	7666945f-7f67-4996-9f31-f2e6d57daf3b
3a91668b-ad7e-43ef-9489-45269a594a57	2017-09-02 14:59:34.594+08	2017-09-02 14:59:34.594+08	3c90cbd4-1398-4e10-b930-11e414495e2f	08d16d99-4102-4efc-935f-5ec573bc7d2c
f73d7461-fbdd-497c-b3b9-904061fc0101	2017-09-04 09:36:21.658+08	2017-09-04 09:36:21.658+08	cbca938f-e317-4e23-a721-4f2b7b54a827	4fc29cb4-5cc5-4470-b36d-fca10dfb4fe3
dddb1a39-c0e2-4da2-ad25-46227e5126e7	2017-09-04 19:04:13.37+08	2017-09-04 19:04:13.37+08	2f698b72-9c05-42fe-a0e9-3224917239aa	252c23b3-3c8d-408c-a694-5b27600daa69
6f41f9d7-3e0c-4c37-b01a-947b5e458e33	2017-09-04 20:41:51.212+08	2017-09-04 20:41:51.212+08	8f438749-6713-4139-86ef-08d02243f962	a074e70e-ee4c-46c8-a87c-fd2abb07bb98
3c697c32-a0e7-4e74-903e-f028f45e85d9	2017-09-05 11:07:01.222+08	2017-09-05 11:07:01.222+08	12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	ffa49fe5-f400-4a48-82a2-cf6dc26328c2
b25c17c0-0082-4bf1-bfbf-1a6899e5cec9	2017-09-06 18:47:27.065+08	2017-09-06 18:47:27.065+08	abcd5e24-44d0-47ba-95db-9bdfab8d2d92	cc5158b9-1eb4-4313-90e6-e3de0d17b31a
40464c01-4748-4ed3-a772-9891bc748ebd	2017-09-06 19:35:19.126+08	2017-09-06 19:35:19.126+08	f02e6117-3fda-43f0-b465-8f5961e08bed	36572834-2379-48b7-ba25-7c69aaee0bea
3fcb96d7-aa50-4c71-85b7-8622cbf65978	2017-09-06 20:01:37.372+08	2017-09-06 20:01:37.372+08	1637283e-980c-4ed8-8cf3-71e794c45bb2	74fa134b-dffd-45e9-975a-8d2b64a5d1b7
bb5111da-e03b-4936-ab3c-7cef0f1dc087	2017-09-07 14:40:21.35+08	2017-09-07 14:40:21.35+08	eea54bd1-3ede-4ab6-b07d-8b1f58292efc	8198cafd-1e4d-4b68-bb6c-d75fd90059fd
f1afce9e-8243-474e-aa26-33436d311c0a	2017-09-07 20:32:02.671+08	2017-09-07 20:32:02.671+08	12de1b06-528f-42a2-8174-daa14d29506d	3b22f46a-d6ad-4cb6-ab8a-7266056a5f46
5d61de41-23f7-4d92-a999-3b598cb1a0f6	2017-09-08 09:20:57.97+08	2017-09-08 09:20:57.97+08	394f3594-52f4-472a-9078-081172abaaae	e4418a0e-75b1-49b1-b2e7-081f5515c9e8
d8f61ec5-c2c0-4d21-b4d1-48a271cf6329	2017-09-08 17:28:38.395+08	2017-09-08 17:28:38.395+08	62a1a275-a6d3-44b4-b472-901f274afaaa	4aa4a735-9dff-49e1-8ff2-296efe68a305
419b2537-98e9-484d-90a2-1ea38262e643	2017-09-09 14:39:09.828+08	2017-09-09 14:39:09.828+08	bda64c7e-58cc-4668-8f46-8d08be815f1a	8cdbe324-b7a2-4bb4-8353-bb3beaee80e4
bd5cfa90-9a85-479b-bb01-1a91666f36eb	2017-09-11 20:33:20.859+08	2017-09-11 20:33:20.859+08	368cf5ab-5455-422a-a659-ba613b272684	8a918454-cdf7-442a-8181-8b92abebfdd8
b31c1a93-4ec2-4268-a97f-a85c7abd6f5e	2017-09-12 17:44:24.695+08	2017-09-12 17:44:24.695+08	6e5f9207-905d-4732-bb07-89e21da54dd1	3810fe74-db24-4553-87b1-ca5f1c9adaf7
4a1256ec-e341-4a64-9a66-f399ca2dad53	2017-09-12 17:44:48.581+08	2017-09-12 17:44:48.581+08	b71b35e9-7756-46e1-84c8-d8c092029638	6b0f9f27-9cee-42f5-ba21-60413843980e
a9a8ad96-203b-47be-8577-87260aa2464f	2017-09-12 17:57:39.296+08	2017-09-12 17:57:39.296+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	1a40d489-5c03-4f60-8665-4b24279aedc6
ac6a6660-72f9-480e-a44a-d3ab55bd5592	2017-09-12 19:48:22.319+08	2017-09-12 19:48:22.319+08	548cf988-bee3-40cd-b3b9-5d7d2da91605	64cb0706-4c3a-406d-886e-8cbdd636207e
0786c9f1-0bb4-4d35-afc0-328d33c19461	2017-09-12 20:28:42.06+08	2017-09-12 20:28:42.06+08	d4a43ecd-43b6-4232-a482-16e675aadb59	7bb4f089-2a73-4a73-aaff-81066efbde67
dbe5a4d2-1811-44bc-9583-7138c7e72a79	2017-09-05 10:54:48.272+08	2017-09-27 16:44:25.805+08	0e235516-0320-49a5-91e7-a70282c3bb70	71ac1749-1c32-4014-a496-8507cf5be772
815c0483-f278-47d6-a532-3667fe2631cf	2017-09-13 09:13:35.781+08	2017-09-13 09:13:35.781+08	d0fd7335-0b93-4716-9793-e95ae31f1765	ab11e177-0282-4aac-a84b-df19e34d4320
06635de7-b982-43ca-bb90-1cac8c33f8cf	2017-09-13 10:00:10.89+08	2017-09-13 10:00:10.89+08	1108a01e-cf7e-4407-be7a-85cf6851ca6d	c9738a60-d623-45c0-9ede-1701eff4703c
82e9e832-8247-4c1f-bf0f-a3e39df0e296	2018-09-21 17:53:27.827+08	2018-09-21 17:53:27.827+08	7aa0f7e1-677e-4285-8888-33c63cf443d7	9f047473-1e30-4e60-93f0-85781d1bfbd5
daf5a855-ebdb-447e-8e71-9585db37a4a9	2018-11-06 19:45:02.207+08	2018-11-06 19:45:02.207+08	1ed1816a-f590-4eba-8702-c334ec7a1e1d	5b88117b-02ea-488f-98d0-0a3a9bbccaa7
9cd99c73-9df2-48db-913b-2a6ef02e41ef	2017-09-14 14:36:06.217+08	2017-09-14 14:36:06.217+08	31983eec-ccfb-4540-8ab1-12b5b3c8eeb2	3da6f3aa-036e-4f89-a50b-9fa2081ec912
8a488df0-9e42-4766-9d25-b6229127b17a	2017-09-14 14:41:42.386+08	2017-09-14 14:41:42.386+08	32d914f1-c9e2-402c-b81f-3805e8f60e60	83d49ed0-5f75-4c4e-bda6-f6c6662ea8e0
3d10203e-5430-4daa-aa71-daf0030721a1	2017-09-14 14:47:52.175+08	2017-09-14 14:47:52.175+08	bbb36e1c-2e68-4274-881d-77618b327419	d4908512-bbfa-4243-a285-3edfbdb18441
ada77537-4616-4a28-a5da-acde373b4ac8	2017-09-14 14:53:06.114+08	2017-09-14 14:53:06.114+08	b640dd61-c4cb-4b47-af2d-fc9a2284f407	f16fa6ae-e48c-44d0-a906-8fe92d621c22
d22925b9-8d60-481a-80ad-0f9080bd9ae0	2017-09-14 17:27:01.224+08	2017-09-14 17:27:01.224+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	f57f7c1b-549f-4af4-8914-447d7c461e5f
f504e85e-ee97-4a47-96ef-a54c831372f1	2017-09-14 19:37:28.756+08	2017-09-14 19:37:28.756+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	102b9d0f-de06-4a70-92fd-fadf63194b79
8c572d99-376d-481e-b4b0-378c1131c84b	2017-09-14 20:24:32.023+08	2017-09-14 20:24:32.023+08	64bf5540-28ff-480e-9225-c13af83a12bc	9081165a-8470-49d3-887b-1cc9e43fe06d
401d7352-b80d-47e8-912d-d4596cfa3bad	2017-09-14 20:36:40.109+08	2017-09-14 20:36:40.109+08	7e142a42-bfc3-472c-8c56-ef90d2964c67	e96f9d8d-b89d-40ec-86f4-8dd32c040a7b
eb7cfb22-1e6f-45cf-b6b8-fa2201f30244	2018-01-05 16:29:05.842+08	2018-01-05 16:29:05.842+08	26976155-0f82-42c9-962d-6d8f206f40d1	f15a40b2-b1ac-4035-9cf1-5c48fe64862c
741dac57-49b2-4b78-9957-666929059d9a	2017-09-16 12:22:16.734+08	2017-09-16 12:22:16.734+08	cb38bec9-e2e2-4a58-8bf5-b730c85910b3	a02c7304-9b7e-497d-9d53-00667d47295b
49aaac66-682b-4de8-87d5-6ce3a519b7ea	2017-09-16 14:19:05.251+08	2017-09-16 14:19:05.251+08	c9f6eadb-715b-4ad3-9354-fcfe2735ba5a	90bd0c79-4d69-4a80-be30-5c6425891dab
8864c0b8-ea6e-46ba-9943-48f6748080ad	2017-09-16 15:21:21.458+08	2017-09-16 15:21:21.458+08	33bc9e2c-5131-4c06-836f-79051ffccb1e	e631ef74-cc0b-4ab0-90bb-8ae9a37294dd
0a6df1d6-3fbb-444b-ae29-4a3ef6617e19	2017-09-16 16:10:09.778+08	2017-09-16 16:10:09.778+08	797175f9-4873-4010-8299-cb4ce6a3e386	ad0b4164-972d-458e-8f63-d16b24582168
3c9a4f39-59a3-4898-a771-198a5564d3b6	2018-03-15 13:46:19.594+08	2018-03-15 13:46:19.594+08	537d2dc0-86ba-4f40-8da1-06a0e34795cc	8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
9c7b3152-d290-4653-92ab-65733e9d12f1	2017-09-18 21:06:35.756+08	2017-09-18 21:06:35.756+08	30898650-f0f5-46dc-adad-62e86317d96b	7d3d6aa9-710d-4dde-bcdb-77baa08e3973
16ed5616-0f8d-4958-b9ae-6499913bcbf5	2017-09-19 16:23:55.255+08	2017-09-19 16:23:55.255+08	153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0	8c7a5c1d-30b5-4c7c-92a9-75eeb60fea98
ac04fbf6-c192-4f78-bf60-30f5e2e8aed8	2017-09-19 20:20:53.759+08	2017-09-19 20:20:53.759+08	66c8cd90-726f-42dd-afd8-2aa08f68a71f	7c467342-5c75-43f3-b949-139162c808ae
1a3ec72e-56b5-4455-bb49-88b0ab4a7323	2018-03-15 16:52:12.177+08	2018-03-15 16:52:12.177+08	5ce3382a-6764-4a08-8bfe-5b058e8a9017	553c1f7f-1497-4a65-be6b-9cbf4debda54
9d9829cd-cfb2-4226-b8d0-510715cdb1ca	2018-01-08 11:12:27.18+08	2018-01-08 11:12:27.18+08	c20df626-7eb9-47e5-8d36-88233fff0015	0721f93b-cc19-4dd7-96e6-4794005f481c
c8ea419c-9b62-46cf-9f7f-2774bdf9f3a5	2017-09-20 16:26:18.736+08	2017-09-20 16:26:18.736+08	c0659a78-00c3-480d-a385-21a57e7eba37	cf7d6928-ce06-4e99-aaa0-4fc4c011ce61
0ea5c351-2f49-4fe9-9d14-81c6ca496849	2017-09-21 10:57:18.47+08	2017-09-21 10:57:18.47+08	523d0a38-7b6b-4808-94b0-63bb477e7ead	2750266f-7ee5-48c7-9278-f14032923026
af8b052f-ed31-4864-9169-53f46d72eda4	2017-09-22 17:34:24.783+08	2017-09-22 17:34:24.783+08	9e159552-fb77-4196-aea1-d7e9f88fcbbc	bb39dea7-0de5-4844-8e66-c702f05081e4
2637ca97-e6d8-441c-b28b-12060952834f	2017-09-25 10:44:21.686+08	2017-09-25 10:44:21.686+08	13cc9f05-5d98-4778-93a9-a423b70250a7	e56064f3-665a-4f5d-ac50-b6f31faa26a2
6a7ec83d-1036-45da-8c3e-a3f41e83d74c	2017-09-25 10:54:34.192+08	2017-09-25 10:54:34.192+08	8092619d-978e-402a-9aa1-897cb718a39b	a9fc8480-541f-4a49-9a5f-f4934866728f
b82b1ad4-ac3c-4d73-aa68-1cdaec7bb633	2017-09-25 19:45:57.224+08	2017-09-25 19:45:57.224+08	05c849f0-63f3-4d19-97bf-f22e655c0852	7f3b1220-a5f6-4c2d-bc6e-efec711079c7
bb384bc1-9316-4aa9-a5dd-ab63cf9b0b7a	2019-12-20 18:07:22.562+08	2019-12-20 18:07:22.562+08	d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86	6695fd40-827e-4ca8-8a19-4e91636751f5
74b6cb86-a127-4370-b9f4-d6e64b7cbeab	2017-09-26 10:30:13.292+08	2017-09-26 10:30:13.292+08	46e0602d-85be-45f3-99cd-4a9a0ec8c3f0	b815e8bd-a927-4120-81ee-53ba19468f9a
a97f3e6e-9258-453a-b87b-2607bbf1e855	2017-09-12 18:08:25.12+08	2017-09-27 15:52:22.442+08	c59b78f5-1913-43de-8355-67d4c34b662a	8ccca344-fbcd-45ad-bcfc-eb97278fba39
f23b89b5-55a0-41c4-a828-175fecf098a9	2017-09-27 15:57:43.979+08	2017-09-27 15:57:43.979+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	ecc801b1-0517-4722-aa98-e20d2c9b2fb7
4b621bdb-f9a9-4463-9ded-7ee1d0fa37d7	2017-09-14 14:50:50.815+08	2017-09-27 16:41:57.469+08	806a1583-b6da-4e6d-89f9-419fad701d56	9e5ed7e4-08fd-407c-a34c-6c293ae720cf
0710ba3a-c505-40fc-aa2f-ae310dd06264	2017-09-14 19:08:55.15+08	2017-09-27 16:42:50.731+08	4a08b319-23f2-4854-ad86-755792e575d4	474d1a8b-734f-47c6-b26c-c51ff6353237
1be73c8e-2c3a-42f4-947a-3bdb96de49fc	2017-09-27 16:52:45.168+08	2017-09-27 16:52:45.168+08	2b50fea6-1651-43d8-8e42-2faca6f3d3ac	5d90bc3b-2691-4841-9f9a-787ce4b681a5
ebfd85a6-3b63-4ba6-817a-a0f42ab9c2d1	2017-09-29 15:08:42.963+08	2017-09-29 15:08:42.963+08	72037569-7638-4b93-9212-ba15109f9afb	0e4a346a-3921-43ad-8ea5-1168af781862
321c4be6-2087-42d2-87a4-7eb8884d6d2d	2017-09-30 11:43:04.336+08	2017-09-30 11:43:04.336+08	755904b4-158d-413b-bc84-ad489380caf2	3dfee4c8-a046-4751-b2c1-dc037b69943b
74eecdfb-dfb7-4855-a27e-368f7d0bf38d	2017-10-07 20:50:21.627+08	2017-10-07 20:50:21.627+08	d54fb237-1da2-40a1-9a83-e4a2dc8eecff	884698d5-ed56-4613-85fd-cc02d313ae2c
edc3c578-25c5-493a-a50d-32998645e670	2017-10-23 10:40:53.511+08	2017-10-23 10:40:53.511+08	40c5fafd-6377-439c-bc26-6e7eb069f3c1	63ccdc3f-2ef3-49e7-915f-ff80e09bac85
389da17a-9f47-4deb-bd3f-8c8e5c800505	2017-10-31 18:02:48.606+08	2017-10-31 18:02:48.606+08	cbd4f0c1-9be1-4123-8fff-9d16d6f163a3	fa62c56e-a9b8-4fa5-81c0-2ab96f5764bb
7ad0b3d4-b2c6-4bbe-b255-179a65399fd9	2017-11-02 16:14:07.422+08	2017-11-02 16:14:07.422+08	9b5c5f27-ebad-42e1-8586-405066f03c1d	767c921b-d375-475f-bec1-d5a11464e86d
6f0d66a3-cb27-4561-8272-017feb096b12	2017-11-06 10:15:17.86+08	2017-11-06 10:15:17.86+08	32ccecbf-6cc2-4076-9f31-9541382b444a	23557cc0-60a0-46fe-8e09-8a48afff76df
dcef8d40-0434-493a-a3e1-7eedba1f5824	2017-11-06 11:16:45.214+08	2017-11-06 11:16:45.214+08	62f4f7c3-95a8-49d9-a5d1-c8f432c8d598	0850698e-6c98-44ce-a664-9f4e257d8650
1949614c-403e-49bc-ac13-74c61c3fd9aa	2017-11-06 15:04:16.83+08	2017-11-06 15:04:16.83+08	8e034647-583f-43a4-9aa1-1291e5bd3b0d	c79eeb0d-55cb-4508-b1be-f9f1c4282293
d6e69b78-3255-40c2-ae49-f17c91e7c3ed	2017-11-10 14:15:21.218+08	2017-11-10 14:15:21.218+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	472e6c9f-a3b3-4345-ba17-96aebcbc7306
3fe48d93-2c95-4591-bffc-f6d2d20ca5d3	2017-11-15 11:18:38.564+08	2017-11-15 11:18:38.564+08	e8a19dbd-26d3-49a0-87b6-8248ceb6fc53	95376b40-306e-4012-be53-636ef41d2c77
ea0149c9-f107-416e-a001-306506913221	2017-11-16 13:50:55.935+08	2017-11-16 13:50:55.935+08	96c5d707-f87c-4a33-a34e-4094c74b8cea	6c369fae-95c7-4986-a439-1a2b511a6d71
92653bd4-1b18-4cbb-8961-fb333671af10	2017-11-16 17:03:23.926+08	2017-11-16 17:03:23.926+08	80773b73-3653-4506-8298-8dfcb4865a90	a7ad819c-a67e-4173-a2a9-0ad7dde3582f
33632ba7-c612-4105-b8f5-c9c59d19b45d	2017-11-20 16:42:59.981+08	2017-11-20 16:42:59.981+08	5e0f1662-8477-42af-9c5a-ae89e5c992c1	9e689319-009e-4809-846f-dc4a98ad40a6
50780819-ecaa-4cc5-b247-8a1ebb16c0d0	2017-11-21 15:57:22.497+08	2017-11-21 15:57:22.497+08	3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2	aee5e701-48db-49cb-a3a4-fb45007cc060
7c2e41ba-d42c-471e-bb3f-c86e7d7d3886	2017-11-23 10:44:01.195+08	2017-11-23 10:44:01.195+08	eb818780-0ef4-4fd6-9b77-64d3c96493c4	579fbaf1-9b81-42e4-b9e9-528296ba6e32
9feea938-187e-433b-b4c4-c1638c16d81d	2018-09-25 10:58:51.079+08	2018-09-25 10:58:51.079+08	94fdfca3-2f0b-4003-b3fd-77dc3e522b6e	8e64aea7-1579-42bf-ac93-406314fe9b30
459f4434-06a7-488f-9dc3-a58650a79fff	2017-11-28 16:55:37.914+08	2017-11-28 16:55:37.914+08	7fa794ae-2b82-40df-9084-5d7b66236d50	ba54a277-84a9-4908-8137-33a4a0c12281
faa5bc0b-d4ad-4dfb-9ab5-b21d6d2589ee	2017-11-28 16:59:16.915+08	2017-11-28 16:59:16.915+08	f8a92db3-4b55-47ec-a466-2d3c44e8b97d	5d581d09-0fd7-4ea3-9752-4af4aabf1796
59157ca6-99bc-4d8a-9d24-281e6cbc1c92	2017-11-29 09:23:59.561+08	2017-11-29 09:23:59.561+08	25fa942f-2929-4429-85e1-e3deb8f728b0	45750a64-368f-422d-b2b2-cf71d63aee33
7db78089-5e10-4553-82aa-9c9f20c5c48a	2017-11-29 11:50:29.748+08	2017-11-29 11:50:29.748+08	4bf64044-476d-4d5a-933e-5a493f1ee2e4	ee8acfbd-2198-46ae-a522-1e9d5cadc4c7
76f04c33-6003-4291-9b07-3b0f20cdc3a5	2017-11-29 11:50:41.73+08	2017-11-29 11:50:41.73+08	3dad677f-3582-41e5-a77c-ea629f6974fe	d2adaa01-0e99-40c5-bb35-60983fbf30e2
d48e8713-6504-4c93-9e78-958b83cd89b2	2017-11-29 11:51:02.634+08	2017-11-29 11:51:02.634+08	7224902a-6cd1-4877-a92f-d8cb544d36ce	034d576e-32da-4ab2-8b1f-309e1eddf10d
193bef64-a59a-449c-8227-55e282c9d1cd	2017-11-29 11:51:14.153+08	2017-11-29 11:51:14.153+08	06beef64-e140-4b7c-865d-64d043fcecc1	523f6570-a896-46be-b31d-58b0dd5c3fc6
503d02c0-c5e6-4e1b-829f-089d1a7cf3d7	2017-11-29 11:51:33.182+08	2017-11-29 11:51:33.182+08	8275461f-e7c3-4595-ae09-36a4288c65fd	ae393b36-8ca0-4235-8eea-478dd008d7b8
e511653a-6013-44a9-b721-b60faeec6ab8	2019-12-23 11:03:05.631+08	2019-12-23 11:03:05.631+08	b3db27cd-01dc-4f48-b241-ec576d75d6b2	104a4a5d-21c7-47d5-ac48-13724cdcb437
3db12289-1640-4366-8b0f-efd265d40c58	2017-11-29 11:51:59.054+08	2017-11-29 11:51:59.054+08	71f3c15e-91d9-4044-ba95-66957d312dc8	ce1060ac-eb0a-43d0-85c7-7e63523b057f
b9793a46-4c65-4c44-bb09-b587f788c4fd	2017-11-29 11:52:13.543+08	2017-11-29 11:52:13.543+08	857d5408-8cb5-4084-a7a3-ab0f9d3dd1da	58804dd8-5a61-42a0-9ca5-a9ad436b163a
8ab8e15c-1812-48b6-adb3-52081e8eec4a	2017-11-29 11:52:24.003+08	2017-11-29 11:52:24.003+08	29f596e9-1ed7-49db-b932-0d436bef0d59	274e14b3-fb65-4b24-8a1e-104a29ca88af
fe984f52-06de-4598-ba9e-3a9e21883da0	2017-11-29 15:29:19.962+08	2017-11-29 15:29:19.962+08	90706e3b-13d8-4862-a1d4-3ace7d4a7b6e	d999e924-2f01-4d79-9c09-be9e50d4d94b
b57375b4-4a86-4f54-8b18-a181bb7cb37a	2017-11-29 15:37:12.762+08	2017-11-29 15:37:12.762+08	c49b63f0-5fc2-41bb-ad27-231510dde4c0	93c8f248-e1bb-40d5-8f58-7008e4f6706b
ecf366d7-ca68-4dd0-9e43-71350e17931b	2018-01-05 16:18:59.705+08	2018-01-05 16:18:59.705+08	ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea	2d2e69b2-0032-4057-859e-b1ebf354ed31
4f7c8982-2590-4850-ae88-b65ae353f01d	2017-11-29 15:43:22.301+08	2017-11-29 15:43:22.301+08	e6cd110e-7720-4d98-bf4b-655e7d545791	fb241343-d509-4147-a2b9-94ebe362c90b
c4c55ae7-672a-4298-96a8-2c358ebf7998	2017-11-29 15:47:36.256+08	2017-11-29 15:47:36.256+08	dd89b226-58f4-4509-9eb9-cf119be26a80	6f71d673-6cb0-435d-8813-4bae2641569e
47c126cd-d875-4de0-bb0c-632dcdf0163f	2017-11-29 15:52:10.674+08	2017-11-29 15:52:10.674+08	0c5f1ed6-626c-4903-ba56-b99bb676bfc1	768a6d53-6450-45ee-9c11-e9a943a1f0b5
8f31ac8f-3c4a-468e-b4cd-55c43326c848	2017-11-29 15:56:44.954+08	2017-11-29 15:56:44.954+08	f124fe60-87de-429a-ae17-249d22ce2005	53e68c57-c31b-42ce-ad23-1662e9824e46
0aadf15c-fa4b-488e-8e0c-8706789ee465	2017-11-29 16:58:58.196+08	2017-11-29 16:58:58.196+08	4211c278-30f5-4c53-ad81-d296e391b8db	5a345bee-327b-4873-b40c-d87f79a605fb
019ac9a3-1389-4191-84d7-33ccada031de	2017-11-29 17:38:18.638+08	2017-11-29 17:38:18.638+08	d3ea47f8-1472-484d-a6fc-411e6637a71b	94c168e2-c0e7-4294-b4c2-d919008c1d10
61407609-e827-4801-9532-424ab78f22a0	2017-11-29 17:38:30.285+08	2017-11-29 17:38:30.285+08	5aa08735-2f16-4ca2-b9a3-dfbf95e1153d	2f5fb5c5-0ef5-4557-a585-dd622f2b10b8
7d2839b2-a17c-4167-8c56-39586c20b978	2017-11-29 17:40:19.269+08	2017-11-29 17:40:19.269+08	c71648f4-8926-4408-b731-937ce2b9db90	1ffa653d-c6c7-4dea-81d1-c794e428e2d3
a079e3d8-9390-4b0e-a886-d29fecf65363	2017-11-29 17:43:55.67+08	2017-11-29 17:43:55.67+08	19e68163-a7e9-4be7-b9ae-6966035ac671	d5fcc72b-859b-490b-b112-4d7025ef4ae8
06a390a6-d1a4-41d4-872d-638a6995f3aa	2017-11-29 17:46:58.808+08	2017-11-29 17:46:58.808+08	9bf06fea-f0b0-492f-9d2f-5ea749264883	8c05ad44-f5cf-4459-96bb-2a15d9a21bac
1705c4c6-f3ed-4e93-bb24-1536f9eb37c4	2017-11-29 17:49:21.405+08	2017-11-29 17:49:21.405+08	8096b88c-dc64-4f26-8f04-6ac919d70447	92890ffa-93a4-4ae2-b4d0-8cf778724f5e
e509ae45-1e43-4c4b-b227-c9b7de6b7a77	2017-11-29 17:52:19.037+08	2017-11-29 17:52:19.037+08	67806ef3-539e-4cfc-932c-2b9fd5d49329	c02aab36-aa63-44cd-94d1-75ef3f190771
b5b7d876-ca58-4815-8b20-e3c62fa613c5	2017-11-29 17:55:29.416+08	2017-11-29 17:55:29.416+08	17077adc-cfaa-428d-a6e5-346aa75678d9	e2e6e717-5b3d-49d1-b3aa-89a6989840a8
ac8aceb1-f4d7-4150-8892-c1e7f701d158	2017-11-29 17:57:56.262+08	2017-11-29 17:57:56.262+08	af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2	c43bc2c6-bb86-4b96-912d-989da5e84a08
144f62b1-1a86-4a4f-8868-6f649423dd66	2017-11-29 18:00:44.76+08	2017-11-29 18:00:44.76+08	979e7ae3-520f-4bf4-b641-7451c30378c6	21226244-5465-439b-9ec6-7facf0f96d67
51b92a61-d8f8-4747-a4ed-95529e16757c	2017-11-30 13:55:54.586+08	2017-11-30 13:55:54.586+08	06a3c28a-b1d4-41cc-b291-aa2cd6682d60	61ab412b-58c2-4f61-878d-52a0ac420011
135f6815-5054-4ef0-892d-d8f48682e057	2017-11-30 15:01:46.324+08	2017-11-30 15:01:46.324+08	d864e964-72fe-43e7-96a5-8e0a2079b731	1c92852a-e4b2-4ce4-824b-123f7fe284de
e8181c08-c475-4d85-bc88-fede2e1bf3bd	2017-11-30 15:14:59.47+08	2017-11-30 15:14:59.47+08	acb1f3e2-048a-4eb3-a01f-36e1f1968b4a	d8cb1d69-e11d-452a-b054-21e315f403bb
dd128205-9fd4-479a-a651-fc8c3ce4294c	2017-11-30 15:18:38.823+08	2017-11-30 15:18:38.823+08	2de4150f-19f7-4fff-9cb5-9d97226ded24	1494ec33-f0e1-497e-8b34-1b50f00b2903
414f6443-62e1-4c46-8596-3ae04e95f6df	2017-11-30 15:25:27.921+08	2017-11-30 15:25:27.921+08	689910ff-378c-4467-b95b-22907c3076e5	1d61610c-7715-4c72-9273-2a0eecae239c
4a669941-ca7c-4c7b-aac4-cfb6eb6fdef5	2017-12-01 09:59:04.607+08	2017-12-01 09:59:04.607+08	8c4a1dc0-f42b-4a5b-9267-e447615a1821	573ebd83-8539-4533-9c4a-8b05403e6817
5bf75458-3699-4fb0-a880-43fe1adb8a36	2018-11-07 10:56:08.269+08	2018-11-07 10:56:08.269+08	b5a32d0d-110f-4eba-9d54-a5a661fb55d2	0b84eeb5-9a45-4d3c-819f-dd4875c00720
0fd48abd-ae87-4155-b349-a98d4319a482	2018-01-05 16:50:30.012+08	2018-01-05 16:50:30.012+08	7be90de6-78ea-44a4-8896-d18f9b9ab89a	809a86cd-7765-4faf-9b2e-10dfda10b756
59a73872-e00c-421b-a043-7e46f68255b4	2018-01-08 11:12:03.014+08	2018-01-08 11:12:03.014+08	09032111-4073-461a-82b6-1c193ef88077	25ec78fa-7f89-4c56-8145-82ca10f3c478
c77355e3-a35a-48c5-bd11-45f7fd2e8355	2017-12-01 15:00:04.236+08	2017-12-01 15:00:04.236+08	d28e689e-1bcd-4f9e-81ac-a0bfc56667e3	41a2d44b-73a6-477f-af22-b0275ba0ab7a
e0badebb-710b-427d-8efb-00e7deeff5a6	2017-12-01 15:05:58.36+08	2017-12-01 15:05:58.36+08	95a5b30a-5159-471a-810a-14e31c3a868c	680fcf75-2aab-47c5-99da-5fa692c9e2d0
513ebbe7-f876-48f4-91cb-7f0f8b7bd960	2017-12-04 12:57:41.964+08	2017-12-04 12:57:41.964+08	176efcfa-0544-41c5-8aef-5821cb43a0e3	12b9717b-35bd-439a-bb17-2733b58ad3b7
c8a73642-2dff-4cee-ab0b-eb766ab76d9d	2017-12-04 13:47:01.148+08	2017-12-04 13:47:01.148+08	06d28e3e-8a80-4110-bf18-a06cadc13e9b	b8a87627-8374-4059-bf7c-33d7ab066bf6
ee867b3f-7f20-4755-bc47-30540b0b9565	2018-01-08 11:12:13.364+08	2018-01-08 11:12:13.364+08	cac190e9-a228-4032-afbc-2f3bf990cc82	15f1ad0b-d19d-4cb4-a970-7fa756d3531d
3f075cbc-233d-48a2-b64e-cd474a0edc46	2017-12-04 14:33:34.393+08	2017-12-04 14:33:34.393+08	50cd4d61-29c8-4d36-b143-85fcda3f99e5	105a2dd0-4901-4b59-aac0-5610876a7fd8
e2352f08-1207-4867-ad75-2bc14062badb	2018-09-25 15:45:24.003+08	2018-09-25 15:45:24.003+08	b9257d1a-c48e-498a-85a0-6a928f32b049	a6b46729-f63a-42c7-946c-2f308b7e169a
0fcbb06e-93af-44e8-961d-70710b5a6231	2018-09-25 15:45:24.012+08	2018-09-25 15:45:24.012+08	131b8ec5-58de-41e6-9d48-96e59e77532e	a6b46729-f63a-42c7-946c-2f308b7e169a
cea489b0-5f66-46cd-8f18-a2ac61a007a9	2018-10-24 13:35:15.431+08	2018-10-24 13:35:15.431+08	6a85de5f-e927-43bb-bb03-21f34d546aca	37f86573-bda4-4eaf-a404-b11edab30fd5
b4ace03b-fa6b-4e74-8e27-43fa8399fac2	2018-10-26 14:55:47.757+08	2018-10-26 14:55:47.757+08	1c99c3da-58a7-4f9d-aa29-2a1b1c335f7a	a54c026d-8570-4920-b0aa-4ca6984bc48c
0a6ed855-fc7b-4c4e-a467-e156a9979c46	2018-11-09 17:46:33.108+08	2018-11-09 17:46:33.108+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	d7bb4068-12cd-41d5-ab05-2b61891b4c76
7d71d23d-4233-434b-80c0-892c4198a1fc	2018-01-08 10:24:01.168+08	2018-01-08 10:24:01.168+08	e29ac2dd-147b-403e-a9a8-6737b7799100	12e0e3ef-2263-40d2-9b29-6e796130a147
607b5fcc-2a4d-4d70-9499-47a03df2af06	2018-01-08 10:24:02.015+08	2018-01-08 10:24:02.015+08	51734448-f0f6-4268-8191-cd093e9e6e60	ac14ec8a-bec7-46a5-9434-50605169d7be
f55664a0-5f4d-45ca-9a4b-6aa2647ad4ab	2018-01-08 10:24:02.59+08	2018-01-08 10:24:02.59+08	7b98954d-1ba2-4349-9f4b-26d35ab67107	89b0829e-cf41-4017-827f-b70b602fc33c
db0002d2-3063-49c2-bee6-a3a49180a4b4	2018-11-22 15:43:17.355+08	2018-11-22 15:43:17.355+08	08549605-83a6-46c5-8fbc-83279c95d08e	eac95355-2c8c-43cb-88d7-e5d18905bb5a
d5dec873-e4e5-42b2-8e92-823913e32102	2018-01-08 11:02:08.935+08	2018-01-08 11:02:08.935+08	eb737450-437c-4c7c-9a72-f54364c468a8	e7560d3b-9857-407b-a6ec-0b184dd34a22
4c32fb55-5e68-44aa-9be9-1f77d6875673	2018-01-08 11:12:44.995+08	2018-01-08 11:12:44.995+08	ab8b7681-8ef7-4101-9a8a-5bee37ee7510	3d498b9b-a878-4a48-8e88-8991154f9267
bcad1f13-7f8d-44fe-af35-a6be90947824	2018-01-08 13:55:43.526+08	2018-01-08 13:55:43.526+08	a8d7c27f-35f9-4a65-943b-afa42ba34e5a	f009ce71-ac99-4a14-bbfd-a69d39863d7a
bc5abcc9-9b4f-4a08-888f-4f9cf6c84588	2018-01-08 14:03:13.664+08	2018-01-08 14:03:13.664+08	45dc0871-e9be-4b68-bc6d-76d80581e8dc	ca79e288-7a88-4d43-a59c-09a227ed2a87
239a3abe-7c01-4979-bb91-9c102f9e017d	2018-01-08 14:10:26.907+08	2018-01-08 14:10:26.907+08	d2d71857-97dc-4969-92f1-e380d0ad4bf9	5f6c2fa6-075e-4c97-b0b1-ce4b945b700d
2c827f4d-e96e-420f-bf99-68fb81a7a542	2018-01-08 16:27:57.46+08	2018-01-08 16:27:57.46+08	477069fb-894d-4a5c-9b41-d004be827ac5	4763216c-0b7d-46d6-afa8-14beb251473c
5fbe4bbe-7c4c-49cd-a370-d825e8c76aea	2018-01-08 16:50:49.893+08	2018-01-08 16:50:49.893+08	58543b3a-1b0d-44ce-a3c3-856bc133204a	a4327012-21f7-4f4c-8a08-aa84df8df368
8d582bda-3e02-4e10-b5ad-eeb016c1cc3d	2018-01-08 17:33:37.641+08	2018-01-08 17:33:37.641+08	f846e46e-f9f4-4c0f-b697-4f3fc7d64f25	46b4f9e9-23e4-4818-a438-dc1e704d09eb
0c43c5e7-c0b5-47d6-9cd5-a33d0d77a794	2018-01-08 17:35:44.868+08	2018-01-08 17:35:44.868+08	f0df6373-949a-4e30-b883-f49611315df1	fbcaf825-7175-4d83-8e74-120e4cf95efa
a4c1edb9-ebea-4452-9c7a-2eaf74c4f10e	2018-01-08 19:14:02.097+08	2018-01-08 19:14:02.097+08	f07e4888-28ea-482b-bbe3-a61929f52026	5a23459f-6ede-47d4-ae3d-8fe9cf62792d
70bf1125-4233-48bd-aa74-d0de1e9a4e7e	2018-01-09 11:04:36.187+08	2018-01-09 11:04:36.187+08	a318fba6-92d9-4d50-8a3a-1662c9b24fb9	50e8fea1-6428-4ded-be3b-647ef512c5e2
aacc4941-11b3-4770-bb05-d7448a6e8073	2018-01-16 09:44:42.443+08	2018-01-16 09:44:42.443+08	01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5	5cec0d32-95e1-40e2-a0a7-67fadc9b7383
3f7a7102-1917-4a61-a412-03817082a7e1	2018-01-16 10:33:58.416+08	2018-01-16 10:33:58.416+08	e146e8c0-39b3-4922-b153-21492123982d	3254cbda-a637-4b1f-b967-7e683097a03c
7bc62f6f-7ede-4597-863e-09812efc4129	2018-01-16 10:33:59.659+08	2018-01-16 10:33:59.659+08	8d3ad66f-9a24-4adb-99de-1b86ae3e5d46	13bc605d-4733-4db8-967d-52c227283bd0
93c3acbc-e991-4514-a872-5898dab9e8cf	2018-01-16 10:34:00.739+08	2018-01-16 10:34:00.739+08	2b18c0fd-b077-4d22-92b0-c38896c4d150	3a2334c7-6f52-4204-a8a9-9784890e5a18
f9abbdd3-d931-4424-b07a-d0e75a53271f	2018-01-18 15:22:34.532+08	2018-01-18 15:22:34.532+08	ef4bfc5b-4560-487e-9e27-4a3249da9ae3	4c350113-8ea9-4493-93e4-7654d1660884
4750b46d-4bb0-4737-9859-3d851d18f9d2	2018-01-18 15:22:34.713+08	2018-01-18 15:22:34.713+08	73fc848a-0c95-4953-a162-0679cf2a8586	45976e2a-feb0-4aee-ad80-88a47ef3d19f
e6e5017f-a7a0-410e-9a9c-998d448b8b03	2018-01-18 15:22:34.891+08	2018-01-18 15:22:34.891+08	1e00c4ae-1aa0-4767-bc51-c7b09621466d	1b7394e3-aac9-4412-8fb3-67337c27b101
1f43ae2c-3f15-4b35-aa3e-f2f2c038b133	2018-01-18 15:22:35.055+08	2018-01-18 15:22:35.055+08	78740935-2863-41f7-ba2b-ed0d3d55d5c5	3aa8b22a-2569-4c0b-921d-4b27c1a84d0b
9d36853e-888d-4b2a-af39-57afee520628	2018-01-23 14:05:00.668+08	2018-01-23 14:05:00.668+08	c0392392-9da8-4232-8535-3962a4b88b7a	75425dc5-fcf1-43f4-bc13-848b5e95398e
d3e69597-1988-4403-a78d-2fa55e49dd92	2018-01-23 14:46:19.009+08	2018-01-23 14:46:19.009+08	3436c379-cac3-4baf-8a3f-7fa4b1fe6188	56508426-48f6-4536-bf0c-71d92a66c933
4c8c3d5c-6c8e-4d7a-91a6-e01bd6c8fe75	2018-01-23 14:46:19.208+08	2018-01-23 14:46:19.208+08	f1ab939a-33ee-4a01-8373-13c941cbce03	c1df54c0-e342-43de-9e78-d5d703748fc7
25557291-fdcd-4e49-baf4-973dfe0c49c9	2018-01-23 14:46:19.433+08	2018-01-23 14:46:19.433+08	53649022-343c-4129-b626-9dbf8c660e28	21122d09-b2bc-4b76-b38d-473767b1ebd0
bd43c2a3-5223-4626-8c81-378dd7be5b5d	2018-01-23 14:46:19.638+08	2018-01-23 14:46:19.638+08	4f360434-b54d-41c3-8163-4df050a68350	65e46736-aed4-4225-8017-5940e005a2a0
4bf272ca-c383-4005-8b22-cd726d39c696	2018-01-23 14:53:15.208+08	2018-01-23 14:53:15.208+08	cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	2551687c-91fa-4545-869c-819ef1f78726
dd4d3124-5d62-4d8a-b433-42ee9309b86b	2018-01-23 14:53:15.417+08	2018-01-23 14:53:15.417+08	fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	6d05cb1a-e0cf-4c12-91b2-c6a2e260b0aa
90cd0984-023c-4af4-9905-b81c984948ca	2018-01-23 14:53:15.803+08	2018-01-23 14:53:15.803+08	069cdfbe-2463-40a3-a677-fa3564d06956	197ed34d-9547-42fc-98b6-5693147ed4ca
9b02189f-3d18-42fd-ae87-2f4af81a89fc	2018-01-23 14:53:16.004+08	2018-01-23 14:53:16.004+08	1933583a-00cd-4d11-99f5-76e7dbeaa81c	4a2e0b1d-a5ac-4fd4-bbe4-624746bb62d7
323556a9-1332-49db-a4eb-46eb514a944c	2018-01-24 11:32:25.013+08	2018-01-24 11:32:25.013+08	6fbdae8b-7c5b-4125-8df3-4d9bef10997a	6cc60b33-5d89-453b-ba31-d38482a9ce89
5b817d30-d44a-44b0-b68d-857d124cf874	2018-02-02 15:40:55.957+08	2018-02-02 15:40:55.957+08	9a25cd7a-d145-4a19-95a1-bae3a0cb0260	52b9b684-34b1-433c-b728-80e91cc5a76d
72e76798-ee99-413b-8a4a-f1a0d06bb463	2018-02-02 15:41:51.776+08	2018-02-02 15:41:51.776+08	a4dea266-bdd4-4ec6-8334-565d7cdc947c	f7df5401-dc58-4a7b-9b2e-0ffa66914834
616c41db-d8cc-4784-9441-346a40e53359	2018-02-02 15:42:09.192+08	2018-02-02 15:42:09.192+08	010ebb8f-5154-406a-a14c-cf57be327ecf	f9895680-9637-43e0-bdd0-c150adacf551
0ef9fdde-f3b6-468d-acfe-5546ddf65353	2018-02-02 16:19:55.425+08	2018-02-02 16:19:55.425+08	d33d38fd-5c34-41af-864c-314b9cc326ec	07150fe0-c0a7-45f8-884e-3e1b58d916c3
84e49c48-c786-425c-8aa6-c532474b5008	2018-02-28 16:01:53.181+08	2018-02-28 16:01:53.181+08	af49da8c-cb29-4435-974c-d96d01e992bc	8ef229f4-04af-4e0b-bfc7-da2e9789de05
9ddb1074-c2a1-403c-b971-a316098fabc3	2018-02-28 16:48:43.061+08	2018-02-28 16:48:43.061+08	ab5ddc7a-c116-496f-9658-12522697a1d0	4e1694d1-bc78-4e41-96d4-779ec95762de
5abc39fc-20f9-407b-a34e-334640f311f9	2018-02-28 16:48:44.796+08	2018-02-28 16:48:44.796+08	e277560c-2da5-499d-a3eb-99ed74f642d9	94a4c225-557a-417b-b7c8-6289c88e290e
a5a99631-0793-464d-8df7-8a7491c2de0f	2018-02-28 16:48:45.391+08	2018-02-28 16:48:45.391+08	ad956aa4-9d9f-414e-aa8b-d48cb81e9a60	48fa9380-745a-4968-8733-f9c0d3f6517c
8ef8f368-f7fd-43fd-97e6-9fc069a02d9c	2018-02-28 16:48:46.025+08	2018-02-28 16:48:46.025+08	1f12ae0a-fb0a-497e-af70-8e53094543a1	8f6ed7c4-a717-4834-a1b5-781e5169d708
ae79bc52-74b2-425f-8656-ce4d0e4470ed	2017-12-05 10:50:36.383+08	2017-12-05 10:50:36.383+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	f307bfc4-068e-472e-9ac2-e384185a2575
69a99265-977c-48db-8766-bd13d4b370af	2017-12-06 10:37:27.497+08	2017-12-06 10:37:27.497+08	514c15fe-e538-4824-9e48-1d3a83a560c1	3c11e69c-226b-499b-92d3-e157f8767c7a
d1fb050c-9745-4a79-96dc-0e09313f2d9c	2019-12-23 14:13:38.187+08	2019-12-23 14:13:38.187+08	b77889c8-f54c-4422-91fa-2637e86d7933	5fc7aef0-e1e9-4359-840b-c238a57cb395
e0d6b5e5-3d79-4fc2-9260-e1cb751c9361	2018-10-24 15:16:44.652+08	2018-10-24 15:16:44.652+08	8221e541-b6e9-4b4b-8b70-7e533565674f	99d2be00-995d-4591-92d5-68cfedb384d4
ba0c703d-fd45-4665-a37b-c7b49c6072ba	2020-04-13 13:07:33.754+08	2020-04-13 13:07:33.754+08	48c0716a-ffe7-4de2-b5d6-295ebd1bef98	4a85bf4b-445d-44cd-ba39-cb6a79e93f30
5a5c4ad7-1317-46ce-a462-bfa454fcb1d8	2018-01-05 16:34:08.818+08	2018-01-05 16:34:08.818+08	e087d664-23b6-4a21-b166-ac37688c0ec0	ec42e98a-1667-41f4-9f58-e02af9e496c2
185a91cc-903c-40d8-a121-b243015303d9	2018-01-05 16:34:09.784+08	2018-01-05 16:34:09.784+08	e82e8948-89ce-4dd5-89dd-1a3d319d351d	091a6fc9-5dda-4cea-a5e1-03f2174e3a8c
c5157a74-116c-4a46-8a1f-af60a3f14639	2018-03-15 16:51:58.449+08	2018-03-15 16:51:58.449+08	8ceadb1a-8f3b-42df-848d-523f3f16aaf2	eceb18c6-6b90-4ab3-9cb4-c4e198751362
11dbb672-15ed-49b7-bab5-e084d9a72d52	2018-01-08 11:06:56.942+08	2018-01-08 11:06:56.942+08	d0696649-4f35-48e3-b1da-79384789f28b	d4512b58-88c7-4ee7-b18e-2e027dad3add
128f105f-22b8-4658-8301-18fb3ef226df	2018-01-08 11:13:13.222+08	2018-01-08 11:13:13.222+08	af9a44db-ee90-4372-87a9-b050e87791bc	9cdf4777-a545-4674-ba15-51ab000ae7d1
e49aad69-f697-4b56-a6ef-a4a5792651e8	2018-11-22 16:01:56.55+08	2018-11-22 16:01:56.55+08	b0d9fed6-e9d2-46d8-9995-4b9865155e77	0688d076-74f7-443a-8642-8ad412fbf1c6
e0f674a6-8dad-48cb-b492-cde6562ee70e	2018-01-08 14:45:20.938+08	2018-01-08 14:45:20.938+08	47aba0a9-a828-4842-9ce0-4733fa6efa10	cb8e9d12-039b-4e4b-8167-0d8ec7dbdb9e
5b13acd8-85c8-43ec-9c7e-31673fc6d9ec	2018-01-08 14:52:33.354+08	2018-01-08 14:52:33.354+08	58459465-409c-47c0-b73f-a8a1c2cf563c	9cff67f3-9cda-47a2-b5d2-099a504b726f
769eaa65-0a4b-481b-be5a-1d795659fdbe	2018-03-19 17:10:32.002+08	2018-03-19 17:10:32.002+08	afcc8d5f-3e9e-4ee3-a93e-135a41569846	2595061b-5754-47db-bc80-c72c62ad229c
2598ce21-3260-4ae0-ad8b-062f7652a89b	2018-01-08 15:36:58.687+08	2018-01-08 15:41:03.82+08	37b9a8b6-49f3-40a5-b65e-5dcbd59a7495	fe3a2636-729f-4895-a031-9cb72c9c49a3
3553ebe7-67bc-4b22-acef-765ef76e3c87	2018-03-23 16:37:04.443+08	2018-03-23 16:37:04.443+08	ced94dca-0afa-4ab7-b273-744ff40f6b7a	b53dabf5-8d79-4003-ac2f-05cb858dda67
bb6ea086-bf31-43c3-956f-7c7ad0ef563a	2018-01-08 16:22:24.861+08	2018-01-08 16:22:24.861+08	9c370a1f-67ec-4686-a7f6-da10dc99c770	7300e18c-24a8-4c69-9e39-e4cab75d99f8
2b987b49-850c-4996-879e-e24e0d567ada	2018-01-08 16:22:25.029+08	2018-01-08 16:22:25.029+08	ab8f77d8-d732-48a5-805a-07d6cde1067d	cf3cdaf4-edfb-49e6-aced-889665fb8cad
148b2b3f-8664-4a6a-b268-8fed2c58415d	2018-01-08 16:27:58.104+08	2018-01-08 16:27:58.104+08	68998ba3-d344-4ae4-9ada-bebb5bba6ec3	85f438f1-4779-4cba-890f-22fb871e1b89
73cc3521-ac58-4e43-a8b2-81d06cc7722e	2018-01-08 16:27:58.792+08	2018-01-08 16:27:58.792+08	ceb32ec1-625c-450d-b1c8-54be51bd97f6	436b1289-e9c0-4f43-a72a-d95727c270b1
00e9d1a5-734d-4d95-82b8-1ee2fefa8add	2018-01-08 16:54:47.942+08	2018-01-08 16:54:47.942+08	2e5b58fb-acb8-4ec6-a177-95a7a1c20745	e50861fc-edb7-44be-90fe-99332d32beb7
afc9980d-bb30-46a5-a0b0-c80920ed0336	2018-01-08 16:54:48.923+08	2018-01-08 16:54:48.923+08	a5889f87-05f4-4786-9e66-b322f564f5f9	684cc47b-0907-403f-b4f3-1f1fb9980677
d0500317-6a2d-4f6a-8c1d-355c3506698c	2018-01-08 17:34:18.706+08	2018-01-08 17:34:18.706+08	d6464eff-41e6-49fb-a8f9-7ebbe2e297e0	0b31dbb2-11b4-4343-817f-1a16f215d86e
02ef6f77-99cf-4187-a987-9e9ef71870bd	2018-12-06 10:19:12.775+08	2018-12-06 10:19:12.775+08	0d021590-ab48-4d98-b318-458faaf5d934	85c7634a-334b-4eed-a93c-c3192e743bcd
310e0aa3-4a9b-4836-8c33-47dd18745354	2018-01-08 18:26:58.127+08	2018-01-08 18:26:58.127+08	22324cd3-c5d3-4628-9499-bcf2021d5ee8	0f2e2fa8-e41b-4c8d-acaf-7a437bd18025
5cfa2ef9-032d-4398-abd0-f474b3520a11	2018-01-08 18:41:35.152+08	2018-01-08 18:41:35.152+08	0b714d0d-91d6-4e91-940d-189bec077752	3ee7d849-8437-4af9-be58-2de548f11313
3989f060-80f5-4b01-9dbe-1a7220c3406b	2018-12-18 16:53:42.86+08	2018-12-18 16:53:42.86+08	16fd9521-16ab-499d-b342-4ed89b2fb211	9cde36af-7898-4aa0-b0cf-3ae8a9d1222e
f169a43b-3103-4c40-b68d-2f25b1f08d46	2018-01-08 19:23:48.708+08	2018-01-08 19:23:48.708+08	978ae9f7-08b3-4e87-add1-abccd6d759d0	4117168c-01f4-4abd-a520-cd618a77957b
e30a9502-5bf0-4e93-8e2b-d694e725636c	2018-01-09 11:31:58.847+08	2018-01-09 11:31:58.847+08	f4bf34ce-15d4-402f-a4d4-8e307936393d	0e1840a7-4883-4b25-bc8b-c8a7ce3c4ba7
85173e8f-0b97-4fb1-bf64-307b532b1baa	2018-12-24 14:39:01.248+08	2018-12-24 14:39:01.248+08	865d7b6a-d5c7-4c8a-915f-4350e6cbab7b	9d7a8978-3d54-4242-b04e-be1eff619aec
e18ebf2a-72b5-4d48-afa0-a925b9492b84	2018-01-16 10:21:41.74+08	2018-01-16 10:21:41.74+08	7ef9f068-1ac5-4c5a-802a-3b3a1bb55191	5d6297b1-c23b-4584-bb92-3c973d54d009
dfa79403-4a7f-470d-af5d-574bd3b1087b	2018-12-28 11:30:29.903+08	2018-12-28 11:30:29.903+08	8b827cae-a928-42a2-bcd6-0071556c240f	84b3c3bd-bbc6-4ce1-ba57-02c4d7bc86a6
c7eb21a9-9d37-4dbb-ae73-bdb4dc3f1901	2019-01-19 17:15:44.549+08	2019-01-19 17:15:44.549+08	4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b	790b37a9-d105-48fd-86ae-edc501b75246
83b35283-1b26-4036-b6a3-abfb7e832bb0	2018-01-23 14:10:45.52+08	2018-01-23 14:10:45.52+08	986f4655-aea5-4e28-8507-f17ce74073cb	a011b6b6-4034-42d5-90c6-615d17724ecd
3e608c32-12d0-4363-a90f-f6b625c1a11f	2018-01-23 14:57:48.81+08	2018-01-23 14:57:48.81+08	10deb250-d676-4883-bfb1-2f557ec84677	06b640bf-bd95-419d-8ca9-a5cabe7f1060
383ee8f5-d926-41a2-a11c-6c6ff1abeb20	2018-02-02 15:41:28.368+08	2018-02-02 15:41:28.368+08	09048659-5be8-43d3-9189-61f71c225e04	8f911a46-bbe2-4a38-9447-568a060116d6
8ea2cc60-43b9-435a-953b-d1f52fbd9590	2018-02-09 14:00:33.259+08	2018-02-09 14:00:33.259+08	10fc859f-7d37-4093-99b7-b2acfdbe2c6f	6cdbb4ff-49e8-4e38-ace2-ac518eddd372
fd1fed9e-bbb2-447a-a1de-2209799ad38b	2018-02-11 16:49:54.959+08	2018-02-11 16:49:54.959+08	363a580c-77e4-4464-8c92-4ee9c989358f	7bb18ac9-38a5-4f43-9d10-eb169b0d6e86
3a78ffa8-bb28-4b86-a2ee-96b930b43e7c	2018-02-11 17:07:24.782+08	2018-02-11 17:07:24.782+08	bd051793-11f0-4c75-bb85-912a2c4e022b	39f37687-7532-4541-846f-6c2cfc7610b9
ece5b2e1-6864-43af-817a-b2b82985bb26	2018-02-11 17:16:18.67+08	2018-02-11 17:16:18.67+08	cf2e6e9e-b046-437d-a041-4461ff0be3e3	11349b6e-9105-48ec-a093-00e780913f1b
3483f057-f919-4eb2-80c9-36ecd4556e5c	2018-02-28 16:21:12.183+08	2018-02-28 16:21:12.183+08	9fb57bf4-6e35-4918-ac61-3f04bf81e691	967dd284-9632-4e8b-8e72-f97ef221a8c8
16726836-7b49-47f7-a5c2-dc9b6d2a1ff0	2018-02-28 16:21:13.129+08	2018-02-28 16:21:13.129+08	d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33	1531aa66-e652-42fa-8ec2-ce8a21b3bf12
a66225e1-95e2-4286-9187-e27f8bf2a8d8	2018-02-28 16:21:13.7+08	2018-02-28 16:21:13.7+08	c73c5915-cc27-425f-b6e9-288aa74c6fd4	bf72e889-6d3e-4b1b-96d0-109c4bf11c1f
3a53bafd-a841-4f03-9e89-e289ecac7286	2018-02-28 16:21:14.333+08	2018-02-28 16:21:14.333+08	479ab844-11f3-43d2-b8da-1b5e32abf466	54a5200d-95df-40fd-a03f-232696f3166a
a1de73a4-0c76-494b-ac63-b2fbb3ca254a	2018-03-05 10:59:51.149+08	2018-03-05 10:59:51.149+08	cfd05991-7dcc-45cc-a7c3-afeef665f4c8	03c06c61-5dd6-4065-a2cd-c3e003f08119
93aa95ec-dcaf-4f91-b6a6-c7f3b8a4e920	2018-03-06 16:50:09.594+08	2018-03-06 16:50:09.594+08	7572058c-09cc-4eeb-a9ba-be3be9bacf77	60c4219d-07b1-4793-8eb8-776528db5395
1bf0b211-82d6-4c5d-bab1-06c7874a3aba	2018-03-07 16:03:25.198+08	2018-03-07 16:03:25.198+08	495c7b48-59c7-4d0d-8294-c5f50e2460e4	7587a4d4-7375-4dee-a174-e0f3718a566a
66df30aa-434f-422e-a066-b76acf44a420	2018-03-08 20:20:24.437+08	2018-03-08 20:20:24.437+08	99a6c9c1-0f57-45bc-a1ff-e98a56faef46	a054b20a-1687-45aa-b27b-8a004a4c819d
08a07ec1-7e53-4621-b7db-9e2fb33b8142	2018-03-14 15:32:53.618+08	2018-03-14 15:32:53.618+08	68518b11-55c5-4191-8116-1d27ee89268e	cf1e81d7-8fd6-4a0a-925e-c4a3bd9f2db4
3bb025fa-88f6-4c4d-b3c0-ddf3858f0b54	2018-01-05 17:57:19.746+08	2018-01-05 17:57:19.746+08	c66f2638-5449-4aad-b566-ffff92086b82	f59483d2-abe8-4d36-b982-2192e91aad16
5ea90dd0-102c-4cd9-b470-62c4d2e2cd35	2018-01-05 18:09:59.836+08	2018-01-05 18:09:59.836+08	2578ea6c-aef6-4458-b889-dc7a102143af	0a59c44a-1c6e-41df-852a-4c8ae147bb2c
0e3cb0b1-bbfa-4e0a-9c00-8320e94564f6	2018-01-05 18:21:38.327+08	2018-01-05 18:21:38.327+08	07f54ea0-7637-4b93-ad91-d7a0987f6a1b	cd48b5aa-3933-4fab-a764-bfdb95fa86bf
63adc161-ca07-4912-99c0-3bc87890cd78	2018-01-08 11:12:35.766+08	2018-01-08 11:12:35.766+08	2e57f353-4b30-441f-a69e-f9e7e639e6a7	a0ac7cfb-2fc0-4e5e-ac37-37a5e1effe3e
b76af8fd-de98-4d1f-969c-11d598d74588	2018-01-08 11:13:26.738+08	2018-01-08 11:13:26.738+08	743c44f5-480c-4c97-80ef-a03ba282ed49	d77c5aa7-cc69-4efb-9360-d8c00f1e6b6c
14659f79-1db7-4774-bb8a-0c57d5d7fb6c	2018-01-08 11:40:11.791+08	2018-01-08 11:40:11.791+08	bbcb8570-b0c2-4fb4-ac75-c28c9bf38503	ba7ceb0e-f6b7-4698-8ef3-ef352df0d199
4bcaf755-b155-41f1-a5e1-a783029b97bc	2018-01-08 14:55:11.53+08	2018-01-08 14:55:11.53+08	59674186-4b3a-4864-845c-81ba695df093	c4c2344a-fb89-4bfa-90fd-c8eb322eb2f2
d957ac07-ee3f-4597-85af-53f1843b91e3	2018-01-08 14:56:23.705+08	2018-01-08 14:56:23.705+08	db8bf711-b26f-4e79-bc46-564fbc4f60ac	2675dfb4-47bb-46f4-a12c-5072f787a0c9
9d590cd6-4d9a-476b-9e51-4326b2a34cc5	2018-09-26 14:38:16.194+08	2018-09-26 14:38:16.194+08	5b2b2647-ee99-48d8-b069-f487f052a552	5c3e5d1b-6ebd-4f19-96ff-58ebf7b73141
7cb82d0b-5255-4d16-998b-f00737770017	2018-10-26 16:15:49.385+08	2018-10-26 16:15:49.385+08	4caa397a-da74-42c1-b0a7-a83ba80b975e	f95f5c4f-4338-4022-927f-72cb45e4b786
06872533-513b-46b6-99e7-bd152091ee3d	2018-03-07 16:18:56.408+08	2018-03-07 16:18:56.408+08	b2781342-015f-4ca3-bd80-448fcb3d4bc0	d8f7cc71-3dff-4f7b-b19c-768e3499f822
81ff5985-bffd-4171-8761-ea2a7e55b17c	2018-11-10 11:10:38.141+08	2018-11-10 11:10:38.141+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	0231c7bd-309b-4f78-9936-d012a427497f
079cd932-d2c5-4390-abeb-d8af23f3eee4	2018-01-08 16:27:59.737+08	2018-01-08 16:27:59.737+08	b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734	914fd203-e2e0-4db3-a311-773637fc7b59
b087fdb6-f8e0-48f9-9e8e-ea02151c79c4	2018-11-22 17:12:56.419+08	2018-11-22 17:12:56.419+08	41d50f61-0dd5-4761-977c-1ebf6e29b35f	2b007e18-5525-47fc-9a41-fd337b33dbbf
c262bcd2-d107-4c3f-b375-24806e6e2788	2018-01-08 17:03:45.962+08	2018-01-08 17:03:45.962+08	80b225c1-5a28-46fd-aa9c-81e77818c907	441659ff-1370-4415-8a6b-93255b902186
ddbc9fab-7bf4-4c7d-9a3f-8cfcdcd09b1b	2018-01-08 17:03:46.16+08	2018-01-08 17:03:46.16+08	d53a176b-9c3c-46b6-8e05-37b776800b13	cac0b8ec-a645-475a-bcee-9ae7a8d570bc
d5303900-0b83-4a3e-aa7c-8005180ff622	2018-03-20 09:46:35.557+08	2018-03-20 09:46:35.557+08	e3742e72-d9c4-44b2-86aa-e90a5fa8255a	0a10f2ad-1873-4c11-82dd-98004c3690fe
22e8a1da-8723-47bc-b953-80a9ceecf3f3	2018-01-08 17:45:25.087+08	2018-01-08 17:45:29.812+08	662ce139-84eb-4601-b783-3dc6503c1255	dd1657fc-d96a-4700-840d-c7af9da9dda5
2c823e15-de53-410e-b7bb-147344ac5355	2018-03-21 16:05:10.223+08	2018-03-21 16:05:10.223+08	e7076b85-5fa8-4f26-bd92-35fd6a802b26	6a369ae7-2703-4918-a144-59072ef59862
73309870-5e56-4476-8e8a-0bdb1af8d079	2018-03-26 11:16:13.113+08	2018-03-26 11:16:13.113+08	e4c071d1-afb9-4178-923b-18a37265ca86	41f16658-3046-4a0a-bdc1-9e3052e8d392
958defa0-6392-4165-be17-3d535baca2e3	2018-01-09 14:07:31.221+08	2018-01-09 14:07:31.221+08	b1683813-a1e0-4d50-969b-1bad76311398	93a423e2-42b3-4b7d-8854-842293efc6eb
a5c7ee33-6c65-4f23-bc0d-c0aea73840f5	2018-01-09 14:14:58.47+08	2018-01-09 14:14:58.47+08	b69afb69-84fd-4273-be31-9727323de2e0	20a77cce-e455-4a31-afd7-6f10510aa0cb
48aa58d5-cf6a-4233-97a6-2e15b7a250f2	2018-03-26 11:27:33.465+08	2018-03-26 11:27:33.465+08	614819ae-798a-406e-befe-fe6749ac5536	41996fc6-d698-4c07-a88a-b124494e1469
a2b74be1-f607-4640-bf89-ee11570b83f2	2018-01-19 15:32:51.621+08	2018-01-19 15:32:51.621+08	1e87be3b-9782-4b75-8b62-0aa49b44daea	13905484-5d79-4146-96b5-a78aa427fcc6
3d337856-8901-477f-9030-fac385a5d7d1	2018-01-22 17:01:19.507+08	2018-01-22 17:01:19.507+08	aca808a3-91a5-43d4-9aa2-171a388266a1	99aef2b1-befb-42c6-9b81-9ba05a5ef139
776240b6-03b0-492b-8a54-cd4934f73325	2018-01-22 17:01:19.509+08	2018-01-22 17:01:19.509+08	aca808a3-91a5-43d4-9aa2-171a388266a1	8f0908e3-40a5-4b67-8bec-6e317871a94e
c528241d-ec00-40ab-b1f2-3a431e13c500	2018-01-22 17:23:14.65+08	2018-01-22 17:23:14.65+08	3d303bbc-0f1a-4105-b7a6-9db99aefb409	ceab8566-19c7-407c-8e29-a2f7b5abd5ae
44d686b9-a9f3-4e4f-a070-2fbb4a8c1387	2018-01-23 14:49:59.753+08	2018-01-23 14:49:59.753+08	bc03541b-fb13-44ff-8cc4-9419e81554f3	8e298dad-1062-4012-8fb3-1b05adb415d3
c09162d2-4bd1-4b10-bac4-bc393e1ac9eb	2018-01-23 15:06:34.962+08	2018-01-23 15:06:34.962+08	787be20b-1887-4708-a1db-c0d581a322eb	c04952c0-e6f4-419d-abd6-134b7e5eb1e7
449030bd-895e-461e-9935-a240d2a66990	2018-01-23 17:19:51.381+08	2018-01-23 17:19:51.381+08	9f562e54-5c03-4b59-89cf-d12739821be5	f000b352-038c-4802-b9bd-4f10773f351a
8339e613-e32f-4261-a59e-3472452b2d82	2018-03-26 11:27:35.447+08	2018-03-26 11:27:35.447+08	363b62ae-2ccd-4c86-915d-03380bc9d89c	f45c1c35-7bfc-430b-b02c-101650805f41
0dd0f96c-7e92-4af3-a772-d6c6b6fc3911	2018-02-05 14:54:12.68+08	2018-02-05 14:54:12.68+08	0d2a48dd-a7d4-4752-9e64-d17ca8555ca8	6e3a148f-8824-4508-9f7a-6d2accaae772
c0953371-cd82-4903-a241-fc84231eaca0	2018-02-07 16:37:15.403+08	2018-02-07 16:37:15.403+08	b0ec1cec-15a9-42c0-8038-6450ab31d5c9	6b72b53f-367d-4eb7-8f07-1e32ea89bf72
2e9049e3-6713-4839-b0a9-3b3deb34583f	2018-02-11 16:58:22.024+08	2018-02-11 16:58:22.024+08	a31f033d-a4ca-4dd4-8e20-5180f376df79	ead506c4-61b1-4848-8939-d40490b53d73
64179889-67de-414e-8e34-f59bff0f54fe	2018-02-28 16:48:46.692+08	2018-02-28 16:48:46.692+08	342ac320-e429-49f0-b647-e4d7e5f4b545	60e4ae40-e9c9-427e-87e3-a59b6ee6939e
4ecffef5-2cbf-4eac-9250-bf6f20bd9dc1	2018-03-05 10:52:42.568+08	2018-03-05 10:52:42.568+08	9943507b-e6a7-4ed0-a44a-d71689542076	11740afe-14dd-41c7-819a-2764c0f02321
0b536344-d64f-4faa-9f94-2c9117aea18f	2018-03-06 17:42:09.495+08	2018-03-06 17:42:09.495+08	8d3e93e6-61dc-4f46-b610-22b88a38d41d	fdbdba4e-0427-4f25-8971-7b3ce5f817f3
090b50c9-4c99-4578-ae66-466d6b4b77cf	2018-03-07 16:18:17.1+08	2018-03-07 16:18:17.1+08	b2781342-015f-4ca3-bd80-448fcb3d4bc0	ddc7f984-593c-43ac-9597-bc98218b8b09
051817ad-f649-4866-9c53-7ad52c5c467c	2018-03-26 11:27:35.457+08	2018-03-26 11:28:45.515+08	8693e382-e7e6-4efa-8583-d0251cb0b360	d5069096-9653-4d8f-a0dc-6dece2a96ea2
8773a14d-ea22-423a-bc5f-a77e742f7601	2018-03-26 11:27:33.455+08	2018-03-26 11:29:00.417+08	f4d2673b-f6ac-4be7-9068-95a68442426e	afa7245c-e631-45a5-b115-35e2ca8c2727
0fe2975d-8e04-4c73-804b-73104a258f22	2018-03-26 11:30:25.479+08	2018-03-26 11:30:25.479+08	f75af319-b305-463e-a3dc-78df902b61ef	b3591c45-4238-49e6-9467-c68e0013140e
eac12360-7a4e-4f66-82b3-22f4e5be9d6b	2018-03-12 12:51:38.686+08	2018-03-12 12:52:06.52+08	c45aed9b-1c0e-4a57-b536-f4aa49396a5c	59f129f4-a877-43c8-b7a2-538663b3926c
eb2d29e8-d922-4de2-853f-46eb1a9eff5a	2018-03-13 15:11:17.544+08	2018-03-13 15:11:17.544+08	06dc98b1-f6a1-4494-9519-48f5dce361b4	c65c23ff-c9d1-4b80-b949-4dd251cd23a0
2d4817dd-80b0-4066-b023-85653c64ebfd	2018-03-13 23:09:59.912+08	2018-03-13 23:09:59.912+08	0d251d94-b1b6-4772-8066-2ae317277574	c8db06d8-ccaa-4330-bbbe-b005900e16ef
e9e15e4c-4d39-4c60-ad3b-be2446e675da	2018-03-14 08:24:49.354+08	2018-03-14 08:24:49.354+08	19db0824-d40d-49ce-a3e8-b63510dcbb7a	e0b42b21-df2e-4e86-9230-79d1b39ce3c5
6fad371f-5b4f-469b-8dad-246baff4c702	2018-03-14 15:53:54.021+08	2018-03-14 15:53:54.021+08	146da222-f300-4109-b71f-337ad767c336	7161b852-38ad-46db-aee9-b3a2363e4d65
cd882ad0-0cba-42ef-aaa8-3626b0ec8bd3	2018-03-14 16:17:20.833+08	2018-03-14 16:17:20.833+08	5bab107f-be1b-4c0d-a2cf-207aae73d273	efe06b26-7f9a-4057-801e-7748498a459e
075f99ce-d4c6-4ded-9346-818490b77106	2018-03-26 11:30:25.496+08	2018-03-26 11:33:19.452+08	6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	f0a71c11-60b9-4c93-a634-379547afa6e9
b2d08486-d460-40a3-87f3-a65c444e0bdc	2018-03-26 11:35:24.365+08	2018-03-26 11:35:24.365+08	ba74ef0e-3ec4-4203-9d65-17906c8f64d1	ac8f829d-2206-4e4a-a6b8-5277c03b2c1a
8d5d0a37-26f3-49a4-b7db-c49092f3ab03	2017-12-06 12:00:43.637+08	2017-12-06 12:00:43.637+08	8929f60c-f9d6-4a0f-a19b-0a57b7025b43	927ba5cb-747d-4cd7-8e17-63cef84ba3f4
39443702-98c8-43b6-92b5-1956de9d1139	2017-12-06 14:12:59.656+08	2017-12-06 14:12:59.656+08	49be5f93-ae43-4fc7-89f9-58581a1f495e	2106de0f-be01-4d02-8193-e5937a85bf6d
38435e17-9312-4519-9377-1ed25ec6a684	2018-01-08 08:03:31.86+08	2018-01-08 08:03:31.86+08	8b4d52b7-47ef-4940-9b4e-7353a2a62765	8db063a3-b808-4355-bcdd-82afe11c5dbc
be92c0bd-de68-40ca-bd6f-9682bbc77c8e	2018-01-08 11:12:56.502+08	2018-01-08 11:12:56.502+08	f2e47767-7959-4aeb-bfe0-0c07202c906c	ae25354c-f866-42d2-bd43-9ec059f2c260
a2070212-8b2a-4491-a5b8-d64e68c261aa	2018-01-08 11:44:22.244+08	2018-01-08 11:44:22.244+08	0a8e8043-1c0a-48af-b8fd-68658e1b1b61	89e11345-37d4-4990-ab56-0c8b992ca12d
b80ea594-3d9c-4d39-a65f-77171f7f4bcc	2018-01-08 15:10:26.556+08	2018-01-08 15:10:26.556+08	7a1da717-ec87-450e-9707-47f782954311	3bf63ed3-8ad5-4ac4-9fff-227a8abd7be2
78b348ec-f822-483f-97ed-fcfdce5560d3	2018-01-08 15:14:58.287+08	2018-01-08 15:14:58.287+08	9a6a651f-0042-4ae6-af31-20d976cf4566	ee8cac2b-69c4-4de0-ae4f-605dd6615b5a
b132527f-f6e7-4c69-b115-1ff7c496148d	2018-03-16 11:38:34.155+08	2018-03-16 11:38:34.155+08	7b458eae-2daa-407f-8597-e3a64d0dbb65	858ff33f-056f-4229-a01f-23fa0fb2cf1e
485d0625-e7f3-47a7-a1f5-f316dd3d5c28	2018-09-26 17:10:21.46+08	2018-09-26 17:10:21.46+08	0b0d6db1-2a75-4d2d-a4e9-7690437a3900	41221de5-8b11-41f5-a41f-d050ea705626
f72f4c9f-4a51-4fc7-b0e6-400dcc4cc2bc	2018-01-08 16:20:38.054+08	2018-01-08 16:20:38.054+08	460611f1-f603-4af6-8a6a-80290761cde0	3cee7abf-90d6-426b-b864-a3bf42ecee67
95f3cb04-7666-432d-ba84-8ad4e4701abd	2018-01-08 16:27:56.754+08	2018-01-08 16:27:56.754+08	4d545e19-172c-4acb-9183-248abe86f986	830ef5ad-6a3a-424f-85ad-738d2d56dd0b
56a355f6-5b11-4b14-8aaf-196540222a16	2018-01-08 16:40:09.762+08	2018-01-08 16:40:09.762+08	1377db1c-e2f6-4ac5-832d-53103233d957	767dbc44-602f-4917-b86d-efba3577b917
f7266222-c1ab-4c6e-8a9d-ced12b22a79c	2018-01-08 17:03:46.483+08	2018-01-08 17:03:46.483+08	546dee6f-5d8b-4572-931b-fa64627c058a	e9f5d29f-4a74-4605-b6a6-e54423e4ec5d
ce2d0cae-f982-489e-877e-c80b12c7eee7	2018-01-08 18:00:05.716+08	2018-01-08 18:00:05.716+08	e2e995b6-c748-453c-a19b-86372c107168	e0fc5b6e-c095-463a-a8bf-9d1d817a0c2c
1c70c4bd-9437-43e1-999e-c3fcdc352ff0	2019-12-23 14:26:26.847+08	2019-12-23 14:26:26.847+08	dfeab740-f671-4730-9a89-f5a3311f0ec8	3650d738-737b-4c16-8918-5cd22ba6dc88
b004e23d-601d-4d77-a69a-11e96f672cee	2018-11-12 16:40:05.537+08	2018-11-12 16:40:05.537+08	d1fa6c6c-dfb0-450d-bc20-1207b2973420	3d35566b-919f-4f62-85b3-aec523ba926a
77e270c1-5373-4304-bb24-37cda4f90d84	2018-11-22 17:30:26.345+08	2018-11-22 17:30:26.345+08	e2cb4c00-ac04-478b-afc2-eb7928bfb361	74693392-a0a7-4214-9a28-7e36b761542e
22cf87af-0098-40bf-b4bb-48d55098b80c	2018-01-09 15:01:35.222+08	2018-01-09 15:01:35.222+08	84e943aa-b142-4142-89f4-5db0cc8e5233	22009d34-ff60-4346-ad0b-d918f374a221
fb9b9b7f-7d99-427e-a1bc-b6e3bba0b234	2018-01-19 15:36:26.646+08	2018-01-19 15:36:26.646+08	1e87be3b-9782-4b75-8b62-0aa49b44daea	fdbdba4e-0427-4f25-8971-7b3ce5f817f3
383745aa-837c-426b-8407-14b23ad4ffeb	2018-01-22 18:07:07.043+08	2018-01-22 18:07:33.378+08	aca808a3-91a5-43d4-9aa2-171a388266a1	91d65629-6006-40b8-ae3b-626f6e477dcf
39847829-df06-4abd-af6e-26ff87c499d6	2018-12-06 10:25:31.751+08	2018-12-06 10:25:31.751+08	322b0741-7b10-4499-a14d-5c660bc3dadf	e19d2117-7307-4824-87c6-2db0a176fd23
ba3ea514-823d-4fed-9df1-988d6791c8d5	2018-03-23 16:36:36.627+08	2018-03-23 16:36:36.627+08	95211a4e-66c1-46be-b7cd-9edc8ac63621	fa4b84e2-60d6-4d39-8ec2-be9eae52a7f7
59fa147f-2f9d-4b15-a3c5-bb987c9996ae	2018-03-23 16:49:34.686+08	2018-03-23 16:49:34.686+08	88d7fc54-bcbf-4532-839e-0dc916df537e	92f24f51-71d8-4518-9321-cffca08d97fb
d13f2de5-c690-40bd-809a-78e79dfd393b	2018-01-24 11:26:28.352+08	2018-01-24 11:26:28.352+08	6b9cf407-77e8-47af-b3c7-571606764785	ce18c57f-a082-4417-a65f-4aacc7f5e09b
22806653-4867-4bad-ae65-4dd945cb1c0a	2018-01-24 11:33:34.538+08	2018-01-24 11:33:34.538+08	4e508627-863b-46fa-9454-a074ef2fbe8a	237f87be-73fd-42c7-8045-a3b3e98cdadc
a8bf79d6-ff06-4bec-b8a1-64ea234e60db	2018-01-26 16:19:24.553+08	2018-01-26 16:19:24.553+08	b9bb6058-9981-44a3-8688-1df4dc7f042b	a2e60556-d41e-450c-a30d-fcef21de8a6a
3c559690-404f-49b2-bddc-e17e8408d1ba	2018-12-18 16:53:43.602+08	2018-12-18 16:53:43.602+08	4604ffee-b4ae-49e6-8498-281f3954e051	4abe4198-cdbd-4d72-8e9f-cc92ffede877
01757736-3a9c-4836-8392-5c06af5303dd	2018-12-24 15:31:37.92+08	2018-12-24 15:31:37.92+08	a625037d-7d72-4479-857e-ba45ebf3a2db	26daa22f-efbc-421c-8600-042b16026119
83069e25-7f69-47c2-b8ab-15552fe72856	2018-02-07 16:40:02.719+08	2018-02-07 16:40:02.719+08	b767a3ea-663e-402a-82c0-ee964abae581	b372116b-3e75-4e51-a202-28609f8c6bb1
1cb108ba-52f5-42b0-84bf-e6e8a4a838f9	2018-02-11 16:59:13.236+08	2018-02-11 16:59:13.236+08	5e270a72-9da6-4029-98ae-eb0326ad0d97	880d26e0-1562-4456-ae4a-6809dfb1885a
edc25dd2-948e-487e-946e-2fb6690c5d2d	2018-12-28 11:30:33.821+08	2018-12-28 11:30:33.821+08	4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3	da539a47-a027-4fdf-9036-10adb8dffa99
fda80aac-ed0c-40aa-af5e-17acbe687cc5	2018-03-23 17:58:37.779+08	2018-03-23 17:58:37.779+08	0226f5d5-c83d-4a9b-8448-adb854fa4336	63dd0fd9-2dad-4755-93df-c2ade460af7a
e7dea3e2-133d-466d-bbd9-c4b4d0c3f23e	2019-02-22 17:20:51.94+08	2019-02-22 17:20:51.94+08	f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0	b6c88e58-4911-4b0b-8735-247bd7b4c383
afbda5d2-0da8-4485-96bd-3a3deb896dfe	2019-02-25 13:43:02.177+08	2019-02-25 13:43:02.177+08	ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	babf1792-c944-4e08-b747-a70be2981c9e
6ffe996b-5079-40df-a35e-51d110ef0b5f	2018-03-05 13:34:31.705+08	2018-03-05 13:34:31.705+08	d05b0093-f276-418f-90d3-8e0bfe3c36ef	ed2433d4-7df9-40e4-8b3c-ef56522294af
d4ca5ca2-a277-4f0f-82c7-43e05aff94df	2018-03-06 18:29:41.165+08	2018-03-06 18:29:41.165+08	a831cdfa-52a9-49aa-8f41-2568b3f853de	7bf32190-691e-4aa0-9b58-c4768a6993c8
d09c1603-197f-4f0d-bfb1-151af5038ee6	2018-03-07 17:15:48.202+08	2018-03-07 17:15:48.202+08	c6ff7e02-05d5-45ee-9837-f61976b9d230	f97a1d41-06aa-4929-9229-ceb6ca403947
bb3f6bd8-6eb4-442c-a769-cf6f90159416	2018-03-26 11:21:35.736+08	2018-03-26 11:21:35.736+08	bc373436-023b-41d4-9608-6a33bb926e80	71c9ba8a-8861-4e8a-b47b-be8a862551c8
fd04dcf2-4735-4f3f-a6b1-dde57b3ba204	2018-03-26 11:22:24.21+08	2018-03-26 11:22:24.21+08	aca3e62f-b4ec-46cc-887a-563ce53b652a	0b7eb99a-e67b-405c-969b-5930963ded34
2c80784d-c2c5-4547-a2ae-2e9238404596	2018-03-26 11:35:23.097+08	2018-03-26 11:35:23.097+08	43e14c1c-a425-4001-9886-f41df72945ea	da1ba9f2-1f71-49d3-8aa5-9f5b8b82758b
77cb4eaf-8311-4ccf-b1c4-2346e4c648cb	2019-02-25 13:43:02.803+08	2019-02-25 13:43:02.803+08	998641f1-bcc9-4b88-8155-68d0cdd22f67	babf1792-c944-4e08-b747-a70be2981c9e
b9840c30-24eb-4a75-9e8e-46e764d0792b	2018-03-09 15:18:22.41+08	2018-03-09 15:18:22.41+08	83056ece-02bc-466a-a4c2-4b916ea6e41a	2e4a0dfd-e4ed-4606-b682-f07f9af83752
d031bb30-5b5b-4b46-aea7-193277f987f8	2018-03-26 11:35:23.212+08	2018-03-26 11:35:23.212+08	82a15a43-5463-4d67-88ea-0a816235bd70	43434057-77b8-47ae-998b-5a49df399d30
f8a76966-e92e-45e9-a649-c5dd468ad11f	2018-03-26 11:35:23.218+08	2018-03-26 11:37:44.318+08	4f92b0e6-a618-4221-8c58-169247d88bd0	80da1e72-1b76-4cf7-9318-ad8995f278c0
40ff3ad3-f07d-4d2d-a808-98aac102d30f	2018-01-17 11:53:07.279+08	2018-03-27 11:10:41.532+08	91bd35f0-7a4d-468f-b8f2-4023456af5ba	4147f31c-2a52-43de-9601-20f4142d96d8
342d8ad5-66ca-42ed-b5b7-9ba615832134	2017-12-06 15:17:54.543+08	2017-12-06 15:17:54.543+08	fcbff74f-610d-4dc8-b2a8-d5c54792fc7c	a0737f04-cdba-41ff-8879-1145f93cc280
358a57a8-36a3-4510-a304-7cf76272e1c4	2017-12-07 10:22:18.582+08	2017-12-07 10:22:18.582+08	df01da11-6cbc-4a10-b62d-dba26d636f74	93019638-64f8-4245-bdb4-0ce42493ad68
87f5952c-579c-48a7-a47b-c7e0be7dc1e2	2017-12-07 11:43:58.703+08	2017-12-07 11:43:58.703+08	13268453-da66-4d7a-a972-e67bd897b1a9	3fd1641e-ba73-46b1-97d8-45877841ebb4
36b5766b-64fd-4f58-8b4d-6ad71de5dc5d	2017-12-07 14:20:25.167+08	2017-12-07 14:20:25.167+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	c96da240-7b15-4c50-97a4-8a01116bf267
119eb7e6-24e6-4a61-bd04-38f21341bdfc	2017-12-07 15:20:39.55+08	2017-12-07 15:20:39.55+08	05aa0ad1-dcc0-40c2-80cc-198e8e1a6511	f9a91641-6ecd-4bc6-a379-c525fd61df56
2c239053-b8c8-4107-8758-65352985162d	2017-12-08 08:40:33.685+08	2017-12-08 08:40:33.685+08	2e7a1db8-dd48-47e0-87d0-023cd2b9ff08	89797dc1-14f9-42c0-8db0-e6a802c0a024
8dcfb432-1bb8-4699-b0a1-38f619a96c3a	2017-12-08 09:55:09.548+08	2017-12-08 09:55:09.548+08	096efcee-8caa-4bf3-9f0b-b8ce92ace83c	7a2eaf7b-ff5c-4b89-b57c-badd6f4043d0
493aa821-9161-46cc-b73f-573ed38844fe	2017-12-08 10:08:19.242+08	2017-12-08 10:08:19.242+08	e87c4f0a-877a-4865-98c6-bca08f38164b	25110c4b-809d-4dff-82fa-1eb8eb53c4c5
338c183d-2646-4080-88ba-f07cf1996b63	2017-12-08 14:40:29.031+08	2017-12-08 14:40:29.031+08	e905978b-35fd-48b2-8dca-d3af8020841e	5e00aef4-c162-4abe-a4ba-e73bfb991c9d
6b0a31f6-4757-469f-b9e5-cb18f2e74c9a	2017-12-08 14:49:12.901+08	2017-12-08 14:49:12.901+08	e9b00fde-a1f2-4167-af71-7fc7862cc867	4f3234e1-d6ac-4927-8224-469d14ab9a0a
7a265a11-c768-4507-8b7c-ca325eaa14fd	2017-12-08 14:54:02.547+08	2017-12-08 14:54:02.547+08	a5e1cd4e-fda7-425f-970e-ad4449eb546c	bd0e6c4c-edb9-4c6e-b543-ed83223b0fc7
2a35bfa8-ba25-4ebf-bc30-0007694e9ce0	2017-12-08 14:57:54.021+08	2017-12-08 14:57:54.021+08	22f8366a-f855-462a-ab4d-6f140e075584	60baad2a-7ec0-4b24-8c76-5bed2e2b8485
56b7ca2d-d868-4b7c-8211-8450f97cd8fd	2017-12-08 15:02:49.632+08	2017-12-08 15:02:49.632+08	e4d8894c-78bb-485f-a691-8288a65c6967	15d630ab-45de-4087-9cb9-4a3998b52dfb
5f3daba6-99f5-4042-9e36-e9da164e5c2c	2017-12-08 15:09:50.794+08	2017-12-08 15:09:50.794+08	20231ffb-4f57-4ebc-bef1-cfd72e18d550	1580ee6a-cc2a-4abf-8c6d-08b3a85e814c
4aa75b15-cdba-4515-b8ae-69c999eb433c	2017-12-08 15:16:37.897+08	2017-12-08 15:16:37.897+08	88876216-b879-4524-bada-01f39ed17c93	d2c71261-eb6c-4d2d-ad95-4078c8cbeaee
6c88758a-0031-4b10-a14d-d0a7e6fe76c3	2017-12-08 15:23:44.919+08	2017-12-08 15:23:44.919+08	16b2379a-313c-434d-8eb3-56120068c40a	f5479f61-a20e-4b8b-a4c6-6f7a7dab7c84
75e5f05d-3f6e-4798-8cd1-4ca9406128c3	2017-12-08 15:30:34.585+08	2017-12-08 15:30:34.585+08	ed796d50-66db-40b1-be39-62728b8d5fdc	75f3270e-7bc7-4e14-8fbe-2f5685daf59b
eccf33d8-f61e-42d2-a1b8-94eb8cf60c05	2017-12-08 15:40:02.62+08	2017-12-08 15:40:02.62+08	1bbadeee-62da-4062-bcf4-f0f18757aead	8d7c54ed-ecd8-41ca-b7ee-4196ff1dea3e
14ce87ef-5d99-402a-81f9-a8e09af1a57f	2017-12-11 15:27:03.014+08	2017-12-11 15:27:03.014+08	6bc1aa05-f9ce-4f21-92f8-d1464535b0c2	578d0261-a4ad-495a-94a4-8c4e72ade2aa
f5fc4682-84f1-4200-a5fa-3670c0e2949e	2017-12-12 10:23:59.558+08	2017-12-12 10:23:59.558+08	8c9d6aac-81ca-48cb-b67c-6916c734bf63	ed327a11-684a-4b1f-b9e0-e8639c8fff33
457f3bac-0118-44a6-84fb-50ac58da9575	2017-12-12 11:55:07.95+08	2017-12-12 11:55:07.95+08	7563b8d0-13b1-42d9-91dd-b7a48a97089f	b096c0ed-860a-4bbf-8644-ad85dba1d41e
b06a0268-4776-4f29-a01d-8113f196d8bb	2017-12-12 14:08:56.835+08	2017-12-12 14:08:56.835+08	48838bfb-174e-42ac-a6c4-1c694dbf569b	9be10a92-e718-4210-8afe-aec7ee423e5a
e2f8c2a5-2e47-4968-98ea-3c166ee81515	2017-12-12 14:41:03.876+08	2017-12-12 14:41:03.876+08	9b5c64a1-06b3-48e2-83d2-92d0278e050c	0f3fcf12-23aa-4be6-a8cd-a7a5112f4a4c
c9653f15-709f-4c62-81a0-3a6fe9cc8e42	2017-12-13 13:09:16.246+08	2017-12-13 13:09:16.246+08	e5550e74-9d03-440d-b9a8-0175cec5ed42	b6b2d1d5-264c-4c8b-b508-68431ebc7a8c
9864d2bc-b303-4c30-be70-db5f99107bcd	2017-12-13 13:21:56.927+08	2017-12-13 13:21:56.927+08	cd2059de-7aca-4f60-9b28-90d4aec7dfcc	aa1bc88f-7dc8-46b6-bb24-c1acfc4bd4d6
b9458a54-735b-44ca-be15-5dadffd06b73	2017-12-13 13:27:21.373+08	2017-12-13 13:27:21.373+08	8409a1f6-b5f7-46c7-98e8-e8ed92f8113a	27e905b4-22e6-473c-bf18-8d3432dbff64
044b9556-acfd-4c09-9230-2f45fa4300d9	2017-12-13 13:40:15.836+08	2017-12-13 13:40:15.836+08	d6ba5199-32e3-4c9c-a69c-1317e15f21a6	2e6a94ec-808d-4cd5-9a31-53dfd946e157
ec136996-73cd-4657-8ba2-acf96682c4d1	2017-12-13 13:46:22.562+08	2017-12-13 13:46:22.562+08	03c5dd3d-859b-41e6-89df-ca3000a46e14	dc9efb66-a50d-4c10-b3f5-54700dec4c11
f6cfc3c7-5df3-4b12-9ca3-0d6a0e4d8672	2017-12-14 14:22:34.614+08	2017-12-14 14:22:34.614+08	846fe925-eaae-47c8-91a4-b1d3d7fc3bc7	8f688434-d219-45e8-b902-e02cef3958cb
21962fad-8c13-4370-8749-08f77209805c	2018-09-26 17:10:27.046+08	2018-09-26 17:10:27.046+08	c88b89c6-187a-4d96-aa9d-6b1ff8fce91f	ff6cf1e7-02fb-4238-a169-4eeae1daf382
429bb411-ff4e-44c8-8a5f-50b8313b58fe	2017-12-14 16:49:47.955+08	2017-12-14 16:49:47.955+08	9f1dab20-8943-4d5f-9c48-e25d55a8a3d3	2a43bd9c-32ec-47a3-91ec-bf2d150bf048
69401bf0-792a-4cf5-8085-92a3983c3e6b	2017-12-14 16:55:58.284+08	2017-12-14 16:55:58.284+08	ec181902-8df8-4d46-9c16-a1deefd286e5	9f3ab602-8c33-4b85-bc82-6f28cc991a1f
ad88e097-051f-4cc7-a4ff-61eaab93bc6b	2017-12-13 13:59:30.944+08	2017-12-14 20:28:11.336+08	95683aa7-b094-4883-a2a1-bdabe2c7d59f	cebb317f-fa5b-4ea3-88f7-f395a949ecad
c7dc7338-cc50-4150-aa8e-0cdbf6f6f7df	2017-12-18 10:57:40.229+08	2017-12-18 10:57:40.229+08	63010e3e-4783-485c-a5dc-4f26a1153ece	6f410018-5357-4499-876e-bfaa7f87a6b1
9a0d1094-73c3-4e6b-9a90-6b1040c97bf0	2017-12-18 17:23:33.749+08	2017-12-18 17:23:33.749+08	235950eb-8bd2-40b5-945f-6ba95c40892d	22c54ed0-f2e1-45be-a8db-e2b05a6c5141
61ab6f51-1b68-49bb-80af-67e3a34ba112	2017-12-19 14:21:59.025+08	2017-12-19 14:21:59.025+08	53e4c42b-3996-45c2-9631-73b200cb840c	7acc67cd-6f9c-4a4d-b25c-7c7c5285754b
dc7a5d5a-a0a9-43a3-b2b7-3ea294f1f868	2020-04-13 13:07:48.172+08	2020-04-13 13:07:48.172+08	002dd588-51a7-417d-9986-71cdcdc4b0b4	ffb1c108-4ff0-4445-96a1-e0dfa049ab08
79f9272d-fde4-45e8-997f-bd06d92aa36f	2017-12-20 10:35:01.156+08	2017-12-20 10:35:01.156+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	037a040a-ffda-4a16-ae2f-0b156eeaf375
a72085b3-fc74-4607-93e1-24a6c1b980e5	2017-12-20 13:51:02.584+08	2017-12-20 13:51:02.584+08	b55ffd52-9693-40dd-a732-e5271f0d5fb5	ee390c37-e447-4248-9449-1c05e898295f
e8ef2222-c72e-4676-a1a6-d5fc967e3711	2017-12-20 13:59:41.266+08	2017-12-20 13:59:41.266+08	ab03ba4c-6102-471a-a570-87b77683dcc3	7a857685-2f05-4568-83cf-742b00cc4268
0a87fbd9-46cb-467d-8948-0731ff7d6479	2017-12-20 14:03:22.692+08	2017-12-20 14:03:22.692+08	60ae0347-0874-4d6c-b39a-e0bc3fd616c9	cd9de59e-d636-4334-bfb0-d4bfdf7d0815
f426f9b0-e263-42af-b174-9707c800aa3e	2017-12-20 14:30:07.215+08	2017-12-20 14:30:07.215+08	f0e35d78-efe9-4656-ae6a-5116d547772f	cf4a1774-7235-439d-be10-5c18236dea1e
5062a3ca-d475-4c43-8e85-52ad45f6c943	2017-12-20 15:25:01.235+08	2017-12-20 15:25:01.235+08	5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0	b04f28f1-c62f-444a-9171-3bca433956ce
39e36bad-563a-4eef-98f6-3325d52ed764	2017-12-20 15:39:19.356+08	2017-12-20 15:39:19.356+08	f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5	f82bd316-9158-47bc-9023-7fbade31d7de
a22d137c-bea8-4cbd-83a5-689dd47836be	2017-12-20 15:39:27.002+08	2017-12-20 15:39:27.002+08	9476a386-f250-4250-a852-90fedab8ea49	a7a4d4cf-2511-4248-b6f3-233c55453827
a70248b5-8ea7-4fe3-b605-9ec12bab1ab7	2017-12-20 15:44:31.431+08	2017-12-20 15:44:31.431+08	b9dd081e-69bc-46c3-a372-d46269234b57	7d57ef52-60e4-4f3f-92d4-a098de6b3c7f
e52feccc-b4fe-4b93-ba40-bd0e6491f778	2017-12-20 15:48:48.784+08	2017-12-20 15:48:48.784+08	1adc0b25-92ae-4d60-9c59-b001fc8b8120	2228b7c8-ddf7-4340-877d-e535750783b9
c10beea6-e98c-4ca6-bbfc-d68ebbbca436	2018-03-23 17:07:09.227+08	2018-03-23 17:07:09.227+08	798127c2-0250-443c-8627-ac234388ae50	52772d68-c0f8-4950-88c2-87fe5c350736
f0ffac33-d7d9-4874-af41-9ff7ae5ad47a	2018-03-25 19:20:50.025+08	2018-03-25 19:20:50.025+08	af89ba1b-5b99-481c-a213-a2171c2e4700	b3a896a0-6180-448e-996e-5cc3d9775f7e
11e07056-e672-4f74-b604-6e26b9376ad6	2019-12-23 14:44:54.402+08	2019-12-23 14:44:54.402+08	86e75c8f-77b4-4197-89e5-0960b7265076	ce4680ae-0c4a-44e9-9376-af4ce8f2cf86
ec44eb53-1ec3-4083-a617-8017cf7be228	2017-12-21 11:15:16.286+08	2017-12-21 11:15:16.286+08	ef29b89e-1964-40d7-b8c8-489d9562ce9d	9d9688a4-56c4-46fc-8cfe-f7bdb2abf8bb
ae760bf7-3510-40ed-90c6-b450b4b47dc1	2017-12-21 16:37:36.69+08	2017-12-21 16:37:36.69+08	b17563d4-fe75-4b40-9fb8-97fedae3abce	47a783ba-cb5b-4939-b416-3fc9345cce28
1e0f3836-06d5-4ff4-b4c3-6bd357c0b535	2018-10-26 16:26:05.549+08	2018-10-26 16:26:05.549+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	8cb76a98-9a11-4237-abb7-d6ef25643d0a
bdee0b56-d7bc-479f-b3bb-16260c540361	2018-01-08 12:02:17.344+08	2018-01-08 12:02:17.344+08	06fcfe9a-4b1a-4db0-897b-05746cda4814	b98aec75-4636-4312-ba9b-06433a59ae92
4004ce34-3542-4ab8-8019-14e410bc290e	2018-11-12 16:44:32.05+08	2018-11-12 16:44:32.05+08	fffc843b-a9bd-474d-868c-e7482d84e823	69cf7444-fdc6-4f98-b3e0-2d11f4125b00
8b5388e3-1864-4860-8fc0-e1eb7515a557	2018-01-08 15:12:21.621+08	2018-01-08 15:12:21.621+08	dde034ce-aa0b-4c0d-bfdb-bcbb2f231808	af8ac3f8-0501-42e7-b64d-e48ce5a657c6
5eaf54b5-030a-46fc-9bf2-ea9c0dd4920d	2018-01-08 16:49:09.747+08	2018-01-08 16:49:09.747+08	12ffe39f-e941-4496-a0af-ae5d4c1e0d29	d28e2d95-3e15-4c82-a89e-fc92b24eeb16
6517938c-165e-445e-be1c-fe18f5132183	2018-01-08 16:50:48.417+08	2018-01-08 16:50:48.417+08	1ec0d96c-843a-4da9-ada2-a70c23ebe8f4	189c2f2b-1d0a-4b3c-94b1-33bebff36ab4
bebff9fe-fa68-49a6-9042-e508a6d4a232	2018-11-17 14:07:02.739+08	2018-11-17 14:07:02.739+08	6867f7aa-51dd-4f2d-acd3-ed771f2fb33b	477bfb00-3a30-4991-8bfa-858e9523eb97
51fd7dc9-40e8-441f-82c3-ccac0c399990	2017-12-28 20:13:20.35+08	2017-12-28 20:13:20.35+08	02eb3150-86c4-4e4f-933e-9adadf378910	64443ff3-fd39-4b61-9322-175d16adaad5
4a8e741e-7c07-447c-a3cb-8d36578fc4bf	2018-11-23 10:32:50.909+08	2018-11-23 10:32:50.909+08	7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8	50f0137c-73fb-4190-8d2a-20119eb43a23
eff3db82-5e99-4854-8c5c-00824283e263	2017-12-29 17:40:41.159+08	2017-12-29 17:40:41.159+08	d6b914e8-a4e6-443c-a9f4-7fb5eb5148be	83a57b71-e45c-4f38-b95d-210b993d67b1
72df5983-5d85-49f3-bb94-e07b26453cba	2018-01-02 17:33:10.098+08	2018-01-02 17:33:10.098+08	9c7d9db3-d6b5-46e5-a01e-af70a296bc8d	ccd8487f-a6c3-4906-80b8-55373af26c7c
547ed787-071d-42d6-b749-00ff016c6b1a	2018-01-08 16:50:48.914+08	2018-01-08 16:50:48.914+08	de7958de-0a8a-4492-8705-642b5c4df424	719b3dba-bba1-4f87-b495-4edec4572d91
53854900-f3e3-4c54-88ad-123deef4640d	2018-12-06 11:11:21.656+08	2018-12-06 11:11:21.656+08	d8d994be-3cdb-4646-a06b-d2869fdbedf6	c2c7492f-5032-46e8-a136-2eca48b246f8
7d3b3d05-935c-4b5e-b672-00ce68f092cd	2018-01-03 13:53:36.256+08	2018-01-03 13:53:36.256+08	8b0f2cbe-d8a9-434d-a5ce-f32b591a3956	99cb3ad7-81d5-41da-8bd6-1ac995024668
8d1bb77f-87a3-490f-8219-5cd779278414	2018-03-26 11:21:00.267+08	2018-03-26 11:21:00.267+08	8bc60164-fa52-4d68-a3b0-2c63af3113c0	3a9e7afb-b301-4ca5-b24c-a8625767cb5c
ce798edc-e57b-4d80-87b7-2a5ae97bb1d9	2018-12-07 17:12:17.202+08	2018-12-07 17:12:17.202+08	b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06	0f251392-a8a4-43c5-97d9-30744aa0b17f
8da2ad8f-8a3f-48c4-90b6-688697946a3e	2018-12-07 17:12:17.922+08	2018-12-07 17:12:17.922+08	383732b4-ea54-49fb-8e63-4dd2c614e5fd	92bdce01-7eae-4842-8ce6-a0bf3f4a6ae3
bb576e2c-e0c1-47bc-80cd-9cd9da949af7	2018-01-03 23:08:28.59+08	2018-01-03 23:08:28.59+08	6d135882-0f59-4f07-9508-c1eac08ab6cc	4b8727cd-03c8-43f9-998d-bdf67fc5a979
ebe7a20b-e007-4a0b-a238-32f4a0ca305a	2018-01-04 11:19:16.73+08	2018-01-04 11:19:16.73+08	26034a4c-81b7-4470-a5e4-65494772f35b	10d111ab-0eab-4d87-82e5-1bbbefb8d00b
e2e4387a-1e73-4253-8856-a183ca320656	2018-01-08 16:54:49.761+08	2018-01-08 16:54:49.761+08	2bfe226a-cde2-4d95-8420-b3ba3f669aa8	7283403b-2780-411f-a674-f5aea930ddbb
c5c90a85-f54e-438a-8e07-28ef495fdc90	2018-01-04 11:48:49.723+08	2018-01-04 11:48:49.723+08	161be263-2daf-4d9c-8a3e-5a5dfa458cf2	ca6f3bdd-34c4-45e3-89bc-e26e10dafe40
47aa8d4c-26be-4246-92d5-8e5258f1ea4e	2018-01-04 11:56:59.89+08	2018-01-04 11:56:59.89+08	f4542b67-c857-40a2-8aa7-11850aace3bd	fb39a5a4-ef13-46f2-af59-34b56c3f6e46
dbb77216-181d-4b63-a5af-7f0a3c8c8e2f	2018-01-04 12:11:30.187+08	2018-01-04 12:11:30.187+08	58ccd139-9573-44ce-84f3-b043e0841c7a	93343c0d-6372-4047-8668-1ffcd2061d4f
42ca7c56-fe26-40dc-8d07-e3b9fb844712	2018-03-26 11:24:13.137+08	2018-03-26 11:24:13.137+08	921508aa-21fc-41c6-b609-b6df5206ea7b	7d240885-b6aa-4476-8a55-30746fc1b69c
01bfe5fa-a09a-4c07-910f-b305b5bc1112	2018-12-18 18:03:29.512+08	2018-12-18 18:03:29.512+08	1e07f74a-8506-48c5-b76c-e179333adcdf	bcbf41b5-d713-46b4-a1e8-bd6f2e1d4c62
f66f68b2-e193-474f-b1e2-d37ecadcf117	2018-03-26 11:24:13.145+08	2018-03-26 11:29:13.505+08	8e3f282e-7428-497b-baa8-0ca8fd248e36	29f74d0b-7785-443e-856b-9d094d302afd
5d970c7d-163c-4586-b37a-b4c6f8a39a86	2018-01-17 13:45:21.849+08	2018-01-17 13:45:21.849+08	cb86448f-61c6-408f-9e5f-06ba94979fdd	06ff4979-ef6c-42b8-bda5-74c797384d80
3c7f4e33-1b50-41b7-8130-da38e083f717	2018-01-19 16:19:33.304+08	2018-01-19 16:19:33.304+08	cffeb47c-0a8b-48d4-974a-d3d12d22a5f9	13905484-5d79-4146-96b5-a78aa427fcc6
1bc8d481-ca11-4f31-86d8-ff24b1bcc7ac	2018-01-23 10:22:45.752+08	2018-01-23 10:22:45.752+08	3fde2361-48e1-41a2-9063-28daac442f9b	ce22b934-d5c0-406d-89f7-faf00663dc05
d4d66e90-03a6-4240-9431-9b5e03d26977	2018-02-06 16:34:19.42+08	2018-02-06 16:34:19.42+08	5c7af394-fc34-459a-bf95-62b91eafed29	72182529-ac2d-4ecc-8afd-7a001f8981e2
c34570fa-d49d-4625-918f-0eb15e172a65	2018-02-06 16:34:50.799+08	2018-02-06 16:34:50.799+08	d90c8b29-4933-4af7-9ffc-62f63cee473d	72182529-ac2d-4ecc-8afd-7a001f8981e2
cc3288ce-b678-43d3-bae8-e88a1a89970e	2018-02-06 17:36:23.334+08	2018-02-06 17:36:23.334+08	5c7af394-fc34-459a-bf95-62b91eafed29	72182529-ac2d-4ecc-8afd-7a001f8981e2
71763f5a-4e32-4bd1-89b1-54d5758527f1	2018-02-06 17:44:49.27+08	2018-02-06 17:44:49.27+08	13d3b4ab-266d-479b-874d-d00ba71b7d6c	ac1a4739-f1d2-4e18-b9b8-e98f87522977
93c485c7-1182-4684-803f-63be621802f7	2018-02-11 17:01:51.776+08	2018-02-11 17:01:51.776+08	dcbc00f3-d440-4b2e-b869-c6e2e602316c	056c0cb1-35e1-4602-8d5a-b5afac2fa309
a75c4a5a-c4c9-44fd-a01c-ef12f82bc3ca	2018-01-04 13:43:27.014+08	2018-01-04 13:43:27.014+08	a2e1b758-5210-49f0-986e-78305b6cef20	53dff476-de0a-4f48-8cf2-68d3a110f884
8f461c1b-f505-4065-a4e0-aec685cbadfe	2018-01-04 13:57:55.24+08	2018-01-04 13:57:55.24+08	cd26103f-0538-43bd-9bbd-a8b3b84e10ff	4b8fc505-6590-416b-b3f9-e658931e9a86
6a339ab2-cdb7-4cde-a103-9ba2070b5eed	2018-01-04 15:33:35.103+08	2018-01-04 15:33:35.103+08	c08bb21f-6cdb-46c1-a8df-3ea9d92279ba	6a1943df-2897-4d48-a088-90522fc34601
06b90018-813e-4663-8498-9ba37ab292c8	2018-01-05 10:51:34.771+08	2018-01-05 10:51:34.771+08	9c9bf6ea-e390-4af6-9eb7-64fdd8325887	5d1e6a40-b6e8-46e1-8f1a-25c985ad62eb
14903ff8-5df7-4d89-8a24-b2ff1364408c	2018-01-05 11:06:57.958+08	2018-01-05 11:06:57.958+08	2766d297-6127-449f-b73f-089b38e01267	718ba26c-0638-4b39-b2e2-db452908c052
1af71da1-1abd-45a2-ba09-afb25e68a620	2018-03-06 11:26:54.863+08	2018-03-06 11:26:54.863+08	8d3e93e6-61dc-4f46-b610-22b88a38d41d	13905484-5d79-4146-96b5-a78aa427fcc6
abf139fc-2f00-4256-895d-cbf92252a0e9	2018-03-07 17:18:03.925+08	2018-03-07 17:18:03.925+08	a0f44ec1-49da-4ca4-83d2-323cdeeb2864	b1195b35-3e64-4d7d-bf10-4cdba0dc0876
8d60fc6a-ae92-46f2-a78a-70be06ff6779	2018-03-08 19:00:09.633+08	2018-03-08 19:00:09.633+08	66075081-ad5a-4acb-8bcc-77672c5d579a	00d429fe-3521-43bd-82c5-27c3701da1b1
aaad5195-eafb-4b7c-a0af-db4a9c7da7b8	2018-03-12 17:55:34.551+08	2018-03-12 17:55:34.551+08	ebcd990c-356a-4c0a-86ba-5a6fd378432e	bcb5dc91-e7b9-465f-86e7-f92b319cde98
66c9a1ae-9c0a-456b-b5ac-367cba9217a5	2018-03-14 15:32:30.976+08	2018-03-14 15:32:30.976+08	7d5454c7-afcf-4af8-a34c-03fd5ec820f8	235c1960-ae8c-4a50-b7c9-99a5bbfac71f
fd6c1cc4-61f1-4980-859d-9059e867f71d	2018-03-14 15:32:44.49+08	2018-03-14 15:32:44.49+08	e2e4c206-ed4b-4fae-8755-5dc970720c89	3696cf22-f9b3-4cb9-9b56-bd074a7d5e89
5b1fcc65-b565-4f25-b5d1-8b7cef234d45	2018-03-14 15:54:05.916+08	2018-03-14 15:54:05.916+08	d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	beca9f91-8832-47fa-aa7f-ef70d8d241ac
7ef3fe0a-71c4-43f3-8808-1bbf9207a0ce	2018-01-05 11:06:58.415+08	2018-01-05 11:06:58.415+08	57f3c9e5-43c5-42ce-92e4-a67bf6f28452	cf11c000-7c1a-4247-b85b-5fa6e911c28f
b30b44f6-01cc-4aa2-a21f-39adee6e514c	2018-01-05 11:06:58.821+08	2018-01-05 11:06:58.821+08	2f00a22f-2cdc-46e5-94b8-a4c599c0618d	5e6182d7-7d90-40a6-a020-c598a2945429
2e11e06c-1b55-4096-88a5-1f7935c7050a	2018-01-05 11:07:00.033+08	2018-01-05 11:07:00.033+08	9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735	cbe12e3b-0f5e-4aa0-8dbc-35fed3a80ad8
3c7e76ce-9f9f-4de9-833c-6a593bf52386	2018-01-05 11:07:00.156+08	2018-01-05 11:07:00.156+08	11c69c81-4c8e-49c2-bde6-92d68c3d8092	0887c6ad-38d4-4eeb-a696-37a8e8bfcf3a
09747846-bb5d-4aa9-9827-20b499934caf	2018-01-05 11:07:00.287+08	2018-01-05 11:07:00.287+08	a5f188ab-9f47-44f3-a454-2b85f0aaa7ce	f4206b10-b245-48ab-8763-a3ce3fc2f8c6
53d3b00c-81db-41f7-b95f-1ae96b8a342d	2018-01-05 11:07:01.145+08	2018-01-05 11:07:01.145+08	90e33926-b804-46d8-9c62-0fad9b87edab	9fc202d6-1860-47e6-92de-f7aec26cb174
491ecb9f-921f-4122-aa6e-2c4498b67513	2018-09-29 15:46:46.744+08	2018-09-29 15:46:46.744+08	589f754e-ea3a-4643-9d79-234ed0834807	31b6984c-82fa-4104-9e7d-50bd5a2a3501
81ceada7-db06-4a2b-8adf-7fcfdb4666e6	2018-01-05 11:07:03.216+08	2018-01-05 11:07:03.216+08	5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f	ff2262ff-8083-46b4-963a-715c1a2a7eae
a5f0417d-8221-4b14-be6e-287a18ec571f	2018-01-05 11:07:04.226+08	2018-01-05 11:07:04.226+08	571ad024-5982-4fc7-b01e-684b112a8092	8ac2e35e-7863-4a5d-ad18-7d1893b129da
edc522a0-52a4-4971-871b-5546e5f3d296	2018-03-20 16:10:22.331+08	2018-03-20 16:10:22.331+08	af8660db-af7f-4f8a-ad12-70bb18f62638	0dc52b0a-0c56-4a29-962e-7298204c60d5
7005951f-d91c-4233-b71d-c990d770ff3d	2018-01-05 11:50:22.341+08	2018-01-05 11:50:22.341+08	f331ae21-9607-401d-b8c4-9d17e40eba9a	2885a62d-12f1-4301-941a-3ee5d1e4eeeb
db9a6b6f-0f3a-4333-9cbf-36fff2e36a09	2018-03-20 17:29:17.048+08	2018-03-20 17:29:17.048+08	fca1794e-e349-42fb-aef1-59f5eb4c3efd	183d4894-be30-4daa-9cf6-a257ec40bf3f
b72e8365-3d25-443d-935f-459d8f9d2073	2019-12-23 16:11:23.857+08	2019-12-23 16:11:23.857+08	f7726ca7-bc14-4987-bd59-204bb7fed3a4	e43545b3-6909-475c-85a5-ee3536a08b9f
b9cc4a49-e195-4f33-bc36-57e904649cb9	2018-11-13 13:36:20.267+08	2018-11-13 13:36:20.267+08	47c11b01-fc23-4bd4-a754-f9da2ea42dec	b58e5131-ff68-4dff-a8f8-e7dd0eac6e45
65c3d06a-b82f-4873-8f86-b202c3819ce2	2018-01-08 13:36:45.77+08	2018-01-08 13:36:45.77+08	0c0a3e16-95cf-42da-8d6c-09d28a68415d	f14c354e-4160-4dea-a3c8-9ad3129d817c
2363de91-65a5-4f4b-b7ff-19149f8fa111	2018-01-08 13:36:46.066+08	2018-01-08 13:36:46.066+08	28cd8b3b-ce84-4ece-b281-9c46bbac045c	7bf32190-691e-4aa0-9b58-c4768a6993c8
5a4a694f-d612-4684-97f9-97f80e39af04	2018-01-08 15:14:24.771+08	2018-01-08 15:14:24.771+08	d9aa001d-6bbe-436c-89ac-c361f78f38ea	4f858fc5-73b6-4028-a706-dc1261246286
e9d7aa73-1715-4471-b78b-8e5d6d9270bb	2018-03-23 17:02:48.952+08	2018-03-23 17:02:48.952+08	4ad74d57-806a-4fc6-82ec-37d782d99cab	87361a2b-a3b3-4fea-97ba-1cc719e1125f
1ea56f6b-260d-4b7a-89e9-94fbf2126555	2018-03-26 11:16:11.52+08	2018-03-26 11:16:11.52+08	7c9f78f3-049b-4f4f-86ce-ed4945136111	b2c5c319-5966-4d2d-a607-a73e9fa97317
eaf794cd-cbc3-4c25-82ee-dd33f8e1ea11	2018-12-03 15:03:56.966+08	2018-12-03 15:03:56.966+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	30367b45-ab92-4ddf-ba29-1625b347c30a
e55a105a-20f6-4fe9-9c8a-11907fe482a0	2018-03-26 14:16:25.795+08	2018-12-06 11:38:10.073+08	b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	d365d25c-5fbf-4a51-8e0a-7a46b052daf3
6590547b-4c7b-45c9-8101-fee1bac06f58	2018-01-09 10:40:42.1+08	2018-01-09 10:40:42.1+08	3a66e33a-e25c-45ce-b87b-534d9d4bcaf4	13905484-5d79-4146-96b5-a78aa427fcc6
175b72fb-bc7b-43d4-a81c-d332c4e393a8	2018-01-09 10:43:37.036+08	2018-01-09 10:43:37.036+08	e240a124-006b-4a79-9006-c8fcb6842ef7	fdbdba4e-0427-4f25-8971-7b3ce5f817f3
11de9355-2cb5-40bf-91e4-9e76ca87a7a3	2018-01-09 11:03:32.978+08	2018-01-09 11:03:32.978+08	488ca4a1-e5d4-4905-ac99-a63bf4b4e98c	81851968-bb35-43ab-a0fd-c9f922484d6b
2a352256-c893-429d-bcfa-05f4689154f4	2018-01-09 11:10:39.807+08	2018-01-09 11:10:39.807+08	926a081e-9ed3-4bab-a8d1-c556a8be9404	a95cdc2e-5ed2-4d6d-9346-8a87c54e3c60
d23a4fbb-9204-460f-ba58-b1c731a05a3b	2018-01-09 21:37:46.444+08	2018-01-09 21:37:46.444+08	31df808d-16cc-43b3-81c4-0443d9ae6f8e	110d0b44-a52c-40a7-93d7-c2c0a186d3a0
b0828804-934c-4ff4-8814-ad6a94267ea4	2018-01-09 21:37:46.447+08	2018-01-09 21:37:46.447+08	31df808d-16cc-43b3-81c4-0443d9ae6f8e	42f2b43c-9dc0-4cdb-9b56-39957948609e
993224fa-1bd5-41a2-a153-d27a085ccfbb	2018-01-12 10:08:09.357+08	2018-01-12 10:08:09.357+08	349567b6-f674-4299-89df-0d64e448a6b3	939fefae-55d4-4666-b93d-2b2986560287
100b0e72-20fb-43d3-83db-10e51cac7602	2018-03-26 11:35:23.112+08	2018-03-26 11:36:37.782+08	053f72a5-5576-48de-baa6-a2732ff863cc	6e103548-19ee-4fec-a3fc-48f0c30b7a0d
f615be0d-b0f6-4c19-8989-adb036332f69	2018-01-17 17:52:43.817+08	2018-01-17 17:52:43.817+08	a84db97e-114a-4cbe-8e97-a18f398857a7	4ca813f3-cc80-4c82-8802-ce37a1aff0af
315ebd1d-130e-4292-8423-98b89822e1ee	2018-01-22 10:21:25.602+08	2018-01-22 17:22:26.668+08	3d303bbc-0f1a-4105-b7a6-9db99aefb409	ceab8566-19c7-407c-8e29-a2f7b5abd5ae
25a1481e-ace5-4d27-841c-1237b4d28985	2018-01-23 13:54:59.287+08	2018-01-23 13:54:59.287+08	613d1519-cf1a-47b5-a44a-2397b79bee2a	d7ef1dd4-a6c1-4505-a0d1-ce37cd4d09b7
7d073683-fa2d-4d54-90f7-7962aad3e00d	2018-03-26 11:41:39.44+08	2018-03-26 11:41:39.44+08	84fc8a27-019f-4640-bbf6-466627f7c6d6	84220059-ac10-4c5b-968f-bf30f3447838
8be1a10a-ddea-4ee2-ab41-e1d19d1a1166	2018-01-23 15:00:11.264+08	2018-01-23 15:00:11.264+08	d36bb0ee-6c5c-4778-bc5b-5e03db483152	51927eb9-21dd-42bf-9856-1496680e3524
98002510-1c02-48e5-ab2a-46b0dba34a24	2018-01-23 15:00:12.54+08	2018-01-23 15:00:12.54+08	2db014d8-3273-467f-b938-8e6b9c22031e	a40ea34c-f9f7-4672-b969-adec1dff887b
e8405333-72b9-4000-8836-1d43ece5548a	2018-01-23 15:00:12.733+08	2018-01-23 15:00:12.733+08	028d4dfc-6b2c-40e4-9960-97c813408030	8982fb04-33e0-4ee7-9bb0-7ff5fbc13785
173f063d-65bc-4772-8071-4a0c0b762685	2018-01-23 15:00:13.371+08	2018-01-23 15:00:13.371+08	3d52b0e5-39ac-4e19-99b4-7bd96b15888a	0b63e426-d86a-4edc-9c7c-398421fd5828
47329e90-fc54-4379-9927-6fdee35d7511	2018-01-24 11:30:26.783+08	2018-01-24 11:30:26.783+08	1a664a1a-b5f1-4e75-916f-21bc94749d0e	11d6a8b0-4da2-472b-9ef4-85df5e9a547f
cafd2d0f-5428-428e-a2fc-7882f5a06e09	2018-03-26 11:41:39.458+08	2018-03-26 11:42:27.069+08	32b8c637-51b5-405c-920d-f7ae0adefafd	d13d97cf-bbb8-40d4-83df-7665c341ff35
60160764-41ef-4b84-b3e0-4a38b6fd7e9a	2018-01-30 17:26:52.485+08	2018-01-30 17:26:52.485+08	500186ab-cb13-4844-b7d8-ed0fa7a17c9b	0c9f7cef-31cb-4539-8104-92c9a1c25262
441b9ea1-57d9-42df-9119-a9dd2de38d76	2018-01-30 17:38:49.93+08	2018-01-30 17:38:49.93+08	70d4d474-0524-459c-9144-237922982ec3	813adfd8-3295-4724-ae8a-42761cfdf2b6
db3b6314-cef6-4338-8141-36220ba4d905	2018-02-27 09:46:30.775+08	2018-02-27 09:46:30.775+08	4763af57-7fa9-48b5-a8f2-db469fce1e1a	72e1d52e-cf44-4123-aebb-b3ea312b4d54
98eb1efc-026d-4c1b-942f-6b22289b426f	2018-03-26 11:43:22.732+08	2018-03-26 11:43:22.732+08	750c60f8-168e-4bca-acf5-df2d502915f5	a141085c-a860-4f4f-adb1-9df8136501bc
1563a9ed-ee25-48df-bd58-68c8af4eb7b6	2018-03-01 14:29:42.736+08	2018-03-01 14:29:42.736+08	b38d50f8-60f9-44b9-865d-647810e416cf	be1600c4-af01-4849-9099-c10dba51edc9
6832e46b-1bca-4819-9744-b153240d0c27	2018-03-05 09:35:14.845+08	2018-03-05 09:35:14.845+08	405db392-c820-4892-b209-c01d5f2d0724	88827513-9301-4dcb-84c5-f531c188097a
fb7d5694-80f2-493b-ad40-958acd8bb7e7	2018-03-07 14:02:37.526+08	2018-03-07 14:02:37.526+08	7ca00003-ea25-4456-acad-32705e36bea1	33551006-d4b1-487b-b77f-f8472a7e463c
ec154567-352a-4110-8e12-8c3451f1025b	2018-03-07 14:02:37.529+08	2018-03-07 14:02:37.529+08	7ca00003-ea25-4456-acad-32705e36bea1	6d4c23a3-4f3e-4f58-8f7d-ef6893dc2077
8f8d21db-4622-4280-8d58-ceb686946f0e	2018-03-07 14:46:11.829+08	2018-03-07 14:46:11.829+08	6233944d-f215-45f0-90e6-433fb8fb0735	7587a4d4-7375-4dee-a174-e0f3718a566a
c58eaed2-f15f-49f4-952b-28ba37fb220f	2018-03-08 19:00:18.425+08	2018-03-08 19:00:18.425+08	08d15c9c-009a-49dd-bf90-c1c2b55a229d	00d429fe-3521-43bd-82c5-27c3701da1b1
11723fa9-ce37-41aa-9dac-a04003288e1a	2018-03-19 17:07:42.636+08	2018-03-19 17:07:42.636+08	837d4b62-487d-40e0-892a-4c1305ebd883	d97b73dd-c95d-48aa-9631-4e9242fa6d4a
5bd75140-2967-4459-99a7-deff2013c948	2018-03-21 09:54:46.409+08	2018-03-21 09:54:46.409+08	eaa55b41-7d6a-48d3-8600-2b52eaad59a4	9aa12a3b-8017-406f-8a88-289e1e1aa27c
0bbbd500-80ef-405b-b2fb-1b5f6bf6d5bf	2018-01-05 11:07:03.717+08	2018-01-05 11:07:03.717+08	0c7ac7cb-305a-4871-9335-1e95d569358c	fdedf646-c4fd-453e-806d-aa33b7054d19
e00e3a1a-eeb9-4277-9e66-3eb7812bd6e3	2018-01-08 13:46:38.388+08	2018-01-08 13:46:38.388+08	5b6bf70d-354f-4930-ac36-534e1a992440	ff1b877f-3711-444a-9f7e-ce0345695228
f88a8aee-ec95-4bb1-8473-e0632d8ef641	2018-09-29 15:48:29.142+08	2018-09-29 15:48:29.142+08	02ed6adc-d0dc-43a4-a933-da902d675146	265f9d4d-51cf-436b-9d43-166ad66c7080
98a43f81-de7e-4d4b-9418-5ed9ef07557e	2018-10-29 15:10:56.442+08	2018-10-29 15:10:56.442+08	9e7de9ac-68c1-48c2-bea1-751c1149407a	39b76697-28f1-47dd-a54a-3d2b850b7d70
bc4b83dc-601b-48ec-88db-c0986846fdc5	2018-01-05 11:50:25.163+08	2018-01-05 11:50:25.163+08	45469a20-748c-4740-9741-4c971a209601	da5ea9b6-c1f1-40c6-9bc6-5c7920e05d5d
f1fd649f-570d-4171-891b-0f99e98288e1	2018-01-08 14:31:55.569+08	2018-01-08 14:31:55.569+08	9603914f-8d67-404f-813e-1044464c093b	57a25025-b2f1-4e40-8fc2-52309d5e99c3
c080a5ef-2cf1-4116-96a7-2474bbbe02bd	2018-01-05 12:01:35.843+08	2018-01-05 12:01:35.843+08	4412085f-1890-4b38-b715-f72085af2b7b	3b3b9d0a-f929-4f7a-8fcd-61d951203f7c
1bf5d067-f962-4998-a1ac-60019428fad6	2018-01-05 14:02:09.821+08	2018-01-05 14:02:09.821+08	da94e805-9621-4290-b239-5ddc2e0504a7	3ddcd5c9-5483-405f-92e4-ed146ec893c3
55049f28-5c53-4244-b516-de5ab24b1bba	2018-01-05 14:02:10.839+08	2018-01-05 14:02:10.839+08	77becc38-82f7-4612-83e2-10e0ebf5e6e3	21e13ca2-f774-417a-a4a6-85f366d078ee
f709642c-6d03-48ab-b435-6d86e0b83c8d	2018-01-05 14:46:16.358+08	2018-01-05 14:46:16.358+08	08fbb708-7333-4f0f-b4a6-1b185f02fd34	ba597375-c17f-4caa-9134-f7fa11ea1b30
a6c7faa4-94bb-4e4c-aa82-0acddbbdc023	2018-01-05 14:50:21.888+08	2018-01-05 14:50:21.888+08	5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	3214fe7b-6a2c-4666-8964-506d0c3b80a6
8785f5b6-3c81-4ddf-9cce-468bf8d17fb7	2018-11-13 15:36:10.389+08	2018-11-13 15:36:10.389+08	f27415f0-f6a5-43cb-bb3c-f54d94dd0930	238b4b73-1be3-4467-b185-3717e1cb1c68
0a61412d-196c-45ea-b291-42188678d596	2018-11-13 16:37:13.354+08	2018-11-13 16:37:13.354+08	18903d51-d495-45f0-8d08-6f52d8a62684	3868a833-ef41-49f6-bdc1-524f920f3694
7ba2dabc-cc0a-4ceb-9a4c-3c59222e0045	2018-01-05 14:53:22.539+08	2018-01-05 14:53:22.539+08	9c34b3cc-56f3-4463-b264-888d55002e8b	0df21243-96db-416f-890b-b77d40c36943
8d2a022d-6fe8-470f-a4d1-6d43a0a7e04d	2018-01-05 14:53:24.819+08	2018-01-05 14:53:24.819+08	cc4c86bd-de99-4664-97f7-6cc8f14d9163	533044f9-17b6-4537-932e-4211a4578be6
6f3de90d-69d2-4617-936b-a9b6b71c2ea8	2018-01-05 14:53:53.073+08	2018-01-05 14:53:53.073+08	e7092d0b-709a-414e-a8ca-a1e21ef6e36c	eba5f751-2548-4ca9-90ff-8e1860315669
77bb21e5-584e-4589-a6cb-d80f76c7c93f	2018-01-05 14:57:25.928+08	2018-01-05 14:57:25.928+08	7cfe14d1-5568-4d3a-abf6-b24791db9643	908acd8a-6cea-4af0-b7a5-1695246237bc
ef35de08-cfa9-44aa-859c-2ee1733aa1c7	2018-12-06 11:38:32.021+08	2018-12-06 11:38:32.021+08	cba87e64-ebf2-4b4b-8fe3-8df973625a56	0ef9c682-3630-4317-8dc4-0b6fa49142d1
a0d3cff0-d0bc-4a10-a03f-6774ade2362d	2018-01-05 15:11:19.84+08	2018-01-05 15:11:19.84+08	4f08e245-f581-4570-8175-92b665bdd6c8	714e146a-7bbc-4062-b58d-cd90a577f3d4
299b5770-820b-42f2-9db7-c0f9c9deb73c	2018-01-05 15:11:20.728+08	2018-01-05 15:11:20.728+08	63bfc488-1cc3-4d31-a86c-0b1d49baddc6	70e72c6a-9cbd-44ce-95d9-cfa2b58e115b
2d4b093b-8acf-4adc-b704-4380da388351	2018-01-05 15:18:31.343+08	2018-01-05 15:18:31.343+08	5714767a-3b97-4a8c-a5f6-abd8091e8662	92a1e4f8-e1fe-47ad-a20b-aa94951d0375
4b458172-92e6-44b3-8791-5efc18a578f8	2018-01-08 17:10:40.687+08	2018-01-08 17:10:40.687+08	054f1a33-18e3-4476-a321-2a5482f783da	683de5ab-224e-409d-8d87-924293e1f557
428cfcad-c615-4102-8f5d-814ffca559cd	2018-01-05 15:30:02.693+08	2018-01-05 15:30:02.693+08	39e594af-f88b-4f81-96c2-2d7a7bc27ad7	6cae1335-dcaf-4478-8b14-e2427cb57569
ca8f3097-7377-4ff5-9861-d8db36b7a234	2018-01-05 15:33:22.374+08	2018-01-05 15:33:22.374+08	fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	9c619f6a-6a64-4dbb-a4e0-75bdd13fc992
28545a71-8964-454d-aab0-c95ab2656091	2018-01-05 15:36:58.47+08	2018-01-05 15:36:58.47+08	24ea4e76-d09c-44d9-8d18-7c634e2b1b22	c8e12bbb-a4c2-4cda-acde-719d40978d99
b3d5fb61-a444-40c8-aea5-f3576f68c829	2018-01-05 15:36:59.075+08	2018-01-05 15:36:59.075+08	1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	36b0f90f-99b8-4543-8f97-118b79bf0572
f075b2c7-60c2-478e-9a4f-e0e4e631f2fc	2018-01-05 15:36:59.872+08	2018-01-05 15:36:59.872+08	6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	bd34bbe2-ca15-48e0-b350-ccc08a87cfb7
052de0f7-7508-4435-9567-e1a9e1556561	2018-01-08 17:10:41.168+08	2018-01-08 17:10:41.168+08	893afc3d-9fb4-47f5-aa47-80e8321a052c	ea60971e-6c2c-4863-b5ae-ef74b224e054
09600fc9-0bcd-44b0-bd39-a3b1f5953f0d	2018-01-05 15:48:51.394+08	2018-01-05 15:48:51.394+08	028ff831-cfab-43f0-a757-fe8933b46002	b853cd3e-e1fa-4ef3-b714-ade49476bff2
5ad5489e-4827-4fae-a5d0-7467b3fca230	2018-01-08 17:10:41.675+08	2018-01-08 17:10:41.675+08	0d9f22e5-95c7-4e56-8963-6576d22b3209	39bbcb01-7a84-4835-9646-a8a70dea04ab
0422aa49-0c9e-4d0d-aa54-105176377629	2018-01-08 17:19:40.417+08	2018-01-08 17:19:40.417+08	9ea4750b-b3f2-4d2b-a190-8ac310bec295	f56c8027-8dd3-412f-956f-21ad3082f2ea
8e0bdedf-df0f-4aed-921b-73c9a74db422	2018-01-08 19:28:51.38+08	2018-01-08 19:28:51.38+08	be68ca54-6bb8-4d57-8db7-6acdaa05c876	d685f8ef-8318-418b-990b-5c0b7aaa7e2c
dc75063e-49c7-4839-8a9b-d4d5486dd68d	2018-01-09 11:03:05.682+08	2018-01-09 11:03:05.682+08	b6bff26c-a89e-4fd7-85db-adb7ff80af6c	9950fe4a-165d-4b00-899f-c145ca03a1a8
090101a3-b493-4e1c-b6da-118bd361a163	2018-01-10 11:08:23.29+08	2018-01-10 11:08:23.29+08	ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c	e4070f8f-14f7-42b3-b0cf-d7981072cb90
776ae9e3-4e12-4d0e-9d2f-5d092a8898b7	2018-01-16 10:34:03.665+08	2018-01-16 10:34:03.665+08	9a5459f7-7499-41f5-87d2-e55b430a9134	493e88a6-85ce-437e-a724-335dee6baf6d
7fcd86d0-a0c3-49db-9124-40f21949aca4	2018-01-16 10:34:03.999+08	2018-01-16 10:34:03.999+08	efab5ad9-0126-4a8f-a0b1-35e21e77c0f1	afc4461e-21e8-48f5-998b-e9f2d2d51892
da7ce1c7-9efe-4c49-ab69-eab26b90891f	2018-01-16 10:34:04.405+08	2018-01-16 10:34:04.405+08	9cbbc8b3-67dd-400f-95c4-31f2f9814062	fc85fde7-32df-4a08-bf0a-5dc35079ab6f
8b74b71c-6f6f-4a07-a161-c66dabd4d90d	2018-01-16 11:50:37.248+08	2018-01-16 11:50:37.248+08	79df301c-8707-4e42-8546-2b6a77f017f8	f87dd261-6de4-496d-9825-f1879888d6a3
b5adf5b9-f9fb-43ce-a7d3-4d0c93d1e560	2018-01-22 11:12:08.481+08	2018-01-22 11:12:08.481+08	ed8fd71f-44b5-4e41-bf91-f2e5ee66e8ce	5a51894a-4fc3-4c9f-b0af-2fe7a3e2ed6c
cca144da-b303-441e-844e-b5f0d120a0d4	2018-01-23 14:02:27.124+08	2018-01-23 14:02:27.124+08	558e2b4d-a2dc-443a-98e5-142e99791b74	c44d908b-d931-4e1e-ae6f-8336dec968f3
694a94da-71c7-46ee-beb9-91c7953ad21b	2018-01-23 15:00:11.873+08	2018-01-23 15:00:11.873+08	c631534f-fef5-4db4-b5c2-e7cb081db305	71babe9d-868f-4e77-ab53-c83cae3de9d9
5695ab3c-d905-46bd-896b-c74391d08f56	2018-01-23 15:32:11.059+08	2018-01-23 15:32:11.059+08	9486f04c-16ee-42bb-9f4b-485632a1857e	cb2c078e-72b0-47e3-bb1b-a9498ba5650f
0c7017e7-d80b-4f87-8473-00ba0c0dad75	2018-01-24 11:34:49.488+08	2018-01-24 11:34:49.488+08	b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	7c07bcb8-40eb-4b12-a566-ffc8c4a1252a
3a5d813d-d1a6-4010-9d92-8b398c59df47	2018-01-24 11:34:50.403+08	2018-01-24 11:34:50.403+08	f564da79-91f3-4eff-8919-3501b7fb8046	f91278d4-3571-4028-8205-df9d7eabd9f5
b05d7cad-9b33-47b5-92ad-1f482f5eb1bf	2018-02-01 15:46:43.323+08	2018-02-01 15:46:43.323+08	3825f4a5-cc05-4d5a-860a-c277ff0c1cc6	eac22ea1-cdd7-45c9-90b1-79c6dc066cc0
f21ce9f4-c15f-495d-bd28-c39c9fc90a60	2018-02-07 09:49:51.691+08	2018-02-07 09:49:51.691+08	511b86b5-3773-45aa-b518-9b29071357e1	2d04c70c-59f5-4a33-86d8-5f57fe213fc1
114a656d-7f61-404d-b370-f03d8204cff1	2018-02-27 14:54:53.56+08	2018-02-27 14:54:53.56+08	c64d06e4-145c-4bbb-919c-1147dac429b9	eac22ea1-cdd7-45c9-90b1-79c6dc066cc0
d4bd4c7b-e233-402c-b4ca-46352086c0bf	2018-03-26 11:43:22.878+08	2018-03-26 11:43:22.878+08	08b32693-e4b0-44db-9d79-e45dff49062a	3ae76e58-0d33-43cb-b3f0-37be15bc52c8
e0761b2b-0f6b-41b1-aee7-8f17e3e3f1eb	2018-03-26 11:43:23.192+08	2018-03-26 11:43:23.192+08	228d8257-dcf7-4493-a4d4-083712716318	4bfd9afa-c491-4a9d-86a1-80152e284ed7
6d7216d6-6bc8-4389-97c7-928ec8cefebd	2018-03-26 11:43:24.214+08	2018-03-26 11:43:24.214+08	b72802e5-4982-4ba1-bd1b-15ba05d7d832	6f37f0c9-1488-4c4f-a340-c1b9b060f47f
7294640f-de8f-4fba-ba19-60a8d90746cf	2018-03-26 11:43:24.228+08	2018-03-26 11:43:24.228+08	0f684ae0-ceb8-4c6a-95c4-e83bdd79059e	6f37f0c9-1488-4c4f-a340-c1b9b060f47f
c951cd8d-aa9b-4ebd-ac11-fdba43caa2bd	2018-03-26 11:43:22.716+08	2018-03-26 11:44:15.072+08	d8193d74-feb5-4872-8e42-95a335cd383f	44118f25-8b14-49d7-9f1c-ad1ab08e3f31
1f785700-e8d3-4bd5-bdfa-364524bd1c19	2018-03-26 11:43:22.87+08	2018-03-26 11:44:59.5+08	b0488049-bfc9-40ee-8dfa-79f9233638ec	1c6314fe-a3cf-4334-b57a-c95efa23fc1b
2ac72d09-694b-4080-a933-8cc21aeaec6b	2018-03-26 11:46:38.223+08	2018-03-26 11:46:38.223+08	afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	91981670-d364-4217-8bd4-d5771fbdf651
6774371d-f27a-433d-9aae-d9dc445e90e1	2018-03-26 11:43:23.179+08	2018-03-26 11:46:58.83+08	c0ea2d7f-7778-47aa-af49-0119a729c741	f669551b-cade-498e-bc5e-e1af210678ae
03c1fe54-c7b6-4ca2-9c25-5069fcd592c9	2018-03-26 13:37:56.336+08	2018-03-26 13:37:56.336+08	c26fbe87-b6ec-4f0d-a907-e05fddec8f41	3cf4d4c7-c487-43bb-bb7d-65fc6e366033
6c408bc7-0e85-4043-9399-37c56a8a01b6	2018-03-26 13:44:09.134+08	2018-03-26 13:44:09.134+08	f2877cda-87cc-485a-9fc6-11f7ef8b2624	0b032124-e602-47ce-9feb-4ea8d7b76be4
70ea6e71-a902-4269-973c-85d675d90b80	2018-03-26 13:48:39.274+08	2018-03-26 13:48:39.274+08	e3bf8273-2a58-438d-b214-0fd258644ef8	f13135a3-2817-4988-8939-af1c5a2ac321
b571842c-5f3c-43d5-a213-d959722699f7	2018-03-26 13:53:33.648+08	2018-03-26 13:53:33.648+08	ce140baa-bcd7-4756-9d06-9591535eed2a	0a6471bd-8bf4-4f55-9bff-7d257cd5543c
08606cae-3ff1-454c-b93f-e5dcb05a1cd9	2018-03-26 13:57:13.737+08	2018-03-26 13:57:13.737+08	1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad	2b3f9f56-bc0b-4d13-a4cc-cfd5d6681f54
c89e6d4b-54e5-4e2f-970a-960b44d25703	2018-03-26 14:02:43.877+08	2018-03-26 14:02:43.877+08	aca7e15e-5b9f-4595-8640-9e7c920ef810	92868b2d-fe4e-4e52-89bc-f0e458bd731b
1ce3bd23-ec9b-4e47-b11f-a8351a550620	2018-10-05 09:56:54.417+08	2018-10-05 09:56:54.417+08	de94d984-9d2e-4129-8fcb-b2655ab694b3	9ef9e4d8-cb52-46c2-b527-50bbdeeb6b4b
2f213ce8-7ba3-4a82-bbee-34a824d66314	2019-12-24 09:20:36.196+08	2019-12-24 09:20:36.196+08	48b6a900-281e-4335-841c-814b0bbc1078	7af23b3c-a97c-43f2-9d11-aafbb962b650
dde5da5d-2c23-4f28-94db-71c052a6c015	2018-03-26 14:22:43.674+08	2018-03-26 14:22:43.674+08	5775692b-7acf-46f2-b924-d040fb8bd751	eb1ac1bd-5461-42b2-90a1-98bc094d7978
265192d2-8e8f-4142-8901-6230ebd91363	2018-03-26 14:26:21.004+08	2018-03-26 14:26:21.004+08	21a71013-2a7f-46e0-8ced-77ada77b1342	e4525921-3f8f-49cb-b1a1-b289cfbce822
040100b4-0382-4f92-a7ef-d92debdac650	2018-03-26 14:29:22.854+08	2018-03-26 14:29:22.854+08	f3879800-9585-4575-a261-25c1128fcaf9	0f8321e1-4979-4096-a680-84283ae510be
01f2830f-8166-41ee-a32e-b5ef3fe35eaf	2018-03-26 14:38:06.927+08	2018-03-26 14:38:06.927+08	ea781b14-56d0-478f-991f-05c1ed5fdf93	cb53c59b-db7b-4784-bf0c-3904b516ea73
e479eecc-d19f-4717-8cc5-6e4446805949	2018-03-26 14:45:17.772+08	2018-03-26 14:45:17.772+08	794d13af-907b-4165-bd7d-5c9d4e3410f4	545ab4bf-df32-4df2-9299-1749c51dc520
4fa53bda-3734-410f-8ad3-85212117601c	2018-03-26 15:02:23.933+08	2018-03-26 15:02:23.933+08	c77f3d16-3577-4f09-9c32-cc99cbb68966	83bfc264-e916-44cd-af22-18decbd771c6
688824b8-80af-451e-938b-4a8fd0a01f11	2018-03-26 15:08:56.863+08	2018-03-26 15:08:56.863+08	15598365-4401-4d31-9ebe-d0e46f6d4ce5	d376a52a-bd48-42a2-9c78-23f1eac3eddc
76d01255-2c94-4c91-9628-e15d171109a2	2018-03-26 15:13:58.99+08	2018-03-26 15:13:58.99+08	153dac9d-f2e3-4e56-8402-86df0c0ae5d9	6f54391e-0bbe-457c-b9bb-700e9a6cd79f
a9cff24e-95a0-4101-82c8-3d34fd6193b9	2018-03-26 15:17:46.072+08	2018-03-26 15:17:46.072+08	88e6acfa-2714-4821-9ff8-c5d96a23ce68	6578b6e8-7c36-4811-bc98-a87c85516f01
8711ac71-57f0-44c9-8cf4-929b7f6a361b	2018-03-26 15:21:39.584+08	2018-03-26 15:21:39.584+08	b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	89ed11de-42f6-469b-8110-777ef53bf7d8
030d6647-dd10-41a3-974a-93c2b1cffb40	2018-03-26 15:26:40.946+08	2018-03-26 15:26:40.946+08	79fa3616-07da-47da-a26c-0faac333d89d	a107c8da-4237-4bd1-b410-0c94480f3380
bd35949a-c486-4a65-85af-422e6ff1810a	2018-03-26 15:36:16.549+08	2018-03-26 15:36:16.549+08	5c6f4070-1acc-4ac2-91d6-b7420f02a37b	7b4d2a79-2754-45ab-ba53-06061ccd349a
decb944c-33b2-4b17-8c69-3ad02e1772f4	2018-03-26 15:43:13.112+08	2018-03-26 15:43:13.112+08	d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	93af1d8f-28a8-4416-bebc-69aff080224f
0b0ad0d4-e690-4220-9e9e-c98297455a56	2018-03-26 15:48:31.746+08	2018-03-26 15:48:31.746+08	8e638b0a-bbf4-4856-add9-c4db9b55b032	cfb376d0-5f56-4641-a00e-49d6b761588c
136522cf-e680-4064-b6f2-ad88104d8002	2018-03-26 15:59:07.923+08	2018-03-26 15:59:07.923+08	381fa9a7-3a18-49ce-91bb-b29ebd23429f	08e96e61-ca23-485e-bb15-7d4680b93c2a
ade0b85f-7e75-42a9-945e-cabbfe59bfd2	2018-03-26 16:12:54.051+08	2018-03-26 16:12:54.051+08	9da5e8ea-d055-48f8-97e4-5e64ccb9334c	d86b7f4e-33b9-493f-a96e-c6dc2a23ab25
019a8df2-840b-4753-913e-c58563c6913a	2018-03-26 16:18:00.048+08	2018-03-26 16:18:00.048+08	9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	52d35c64-df91-4a35-a8af-064108a83edf
368349fc-1b61-4a64-9bbb-debe5d0f39b2	2018-03-26 16:24:30.185+08	2018-03-26 16:24:30.185+08	81a87805-fc42-456d-960f-fb793999d631	f694a273-d028-40e3-977c-cc05a87e4682
ea8eb26f-0797-43fb-99b8-2b0afa6e5be8	2018-03-26 16:43:50.798+08	2018-03-26 16:43:50.798+08	642663da-bc66-430b-8367-41e2ae5ed8b2	39f9a215-438d-4632-8279-1bd1b2f3bf67
807f1044-4fdf-4a32-94f9-b62003031947	2018-03-26 16:47:53.792+08	2018-03-26 16:47:53.792+08	ac2bc3da-4bf9-435b-b48f-d06f4cabd50a	b1fef6a3-82b1-482f-a84f-563abd6544b9
304dce72-b713-4f4c-8ad0-8ff57309495c	2018-03-26 16:50:56.091+08	2018-03-26 16:50:56.091+08	f19d92bc-802e-4662-9419-3f664f0d7eba	fdd5f1ac-6973-487e-82ad-9024c7c0a1a0
b7c57c53-eb07-43f4-9eb4-6e73e2ae2298	2018-03-26 17:00:46.976+08	2018-03-26 17:00:46.976+08	606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	00ee24d8-ef44-4ff2-8733-303cf1445fc0
a4e17c93-9125-43e4-a89b-8d8a17a3e9d8	2018-03-26 17:36:26.284+08	2018-03-26 17:36:26.284+08	0e3fff68-6973-4327-9be6-6d5172b7ad80	875ae240-20b8-449b-9630-295f35bdd0e0
ca611c1c-0903-4e9f-aa92-0367101716b9	2018-03-27 09:46:31.268+08	2018-03-27 09:46:31.268+08	5a1c9521-1fea-46f6-82bd-3073923b164f	0ca97a38-3a05-434a-9fc6-90d00e83f7d1
e48d94a7-9cc1-48ae-b9bc-21a8542f4e3f	2018-03-27 10:50:38.105+08	2018-03-27 10:50:38.105+08	a266afb7-b532-4336-b199-cb33af206062	a9558f80-d4df-444f-92c9-70616683c45e
2cf607a3-c331-4681-90e6-fd0478ea3170	2018-03-27 10:57:23.453+08	2018-03-27 10:57:23.453+08	0428f647-9944-415c-b6f0-93e7329d31c9	c5e83eac-d67a-4d06-9f09-17f58b88b5bf
fbaaa1cd-f6a5-4066-b8d2-0e856c0d23df	2018-03-27 11:00:35.452+08	2018-03-27 11:00:35.452+08	6ebb2c0f-06fa-4b77-b028-4818465a7019	31f521d5-23c2-4ba1-87c8-f5dbf3f015ce
190b8325-04bb-41d7-86d6-17ff45c72543	2018-03-27 11:04:04.515+08	2018-03-27 11:04:04.515+08	50696e87-2214-4a20-b537-5530d2921ccd	cdec673e-1ba8-433e-9eb7-6d4f2d695fb3
9440e09e-d8e4-4136-abaf-6ab0c1749fac	2018-03-27 11:07:17.883+08	2018-03-27 11:07:17.883+08	533e4f1c-c95f-46b6-9d76-1e77bcd20732	5a36aa3d-31f1-43ac-916d-fa194e5de4eb
a407c9b9-651b-4064-88ec-d9255d115f9b	2018-03-27 11:12:21.157+08	2018-03-27 11:12:21.157+08	5aeba65e-e787-4076-8e03-a33698701ff2	067d54bd-4310-47e8-a3a2-e7c9972d5987
e03ebc8a-de7f-491a-8653-d71de401eacb	2018-03-27 11:23:46.176+08	2018-03-27 11:23:46.176+08	fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a	d87458cf-1db9-4c12-9670-549ad5eefa05
3c54bc97-f0e6-4e03-8e28-180767f640e8	2018-03-27 11:28:33.891+08	2018-03-27 11:28:33.891+08	79cc1497-99b7-4eb4-bbb5-b69192903d18	ff31a727-8a78-4e10-99e9-ec9c374288ef
1056e3f0-b0be-464a-a3c4-bfda6e9985f7	2018-03-27 16:50:40.547+08	2018-03-27 16:50:40.547+08	0100a56f-6c0b-48ff-9f7d-391a4eaa1bd8	f0a6aa85-d578-4445-88a6-a7b5b0f01743
92f5ec7d-0441-4f33-98ac-7cb209de665a	2018-10-08 14:13:14.298+08	2018-10-08 14:13:14.298+08	7d700433-bb05-4381-8ace-4cf1f8dbd1df	1bb48193-4a33-48f8-a4e2-b3b7555ff324
8f44eeda-8fef-41f0-914c-544aaac7451d	2018-10-29 16:20:53.673+08	2018-10-29 16:20:53.673+08	7805394e-0df6-4a46-b9f4-d62860cf6be1	bd67bdfa-24f2-4384-82a7-00d8ac84a0e3
b709630c-661e-473d-91e4-42da53584005	2018-11-15 15:46:09.086+08	2018-11-15 15:46:09.086+08	23587253-110b-4b12-8c74-53f5147ad189	f4429bb2-1a4f-46c3-90aa-d3ca911e484e
02110a48-8668-4fd8-8a27-1e021d276145	2018-11-23 16:59:56.355+08	2018-11-23 16:59:56.355+08	d2114a8e-de22-4be9-a15c-1fa381795077	bd3dc3ee-3bc7-4248-9fd3-bf20b08dfa02
5783d808-60d5-4787-b740-92bea7059673	2018-12-03 14:06:15.019+08	2018-12-03 14:06:15.019+08	f5c02f07-5612-47c7-a0e8-2f5284f203e3	2517e18c-8012-4694-84f2-59146317e9f0
302b7b04-a37f-4555-8fe9-6d87b251cfc0	2018-12-06 11:46:22.642+08	2018-12-06 11:46:22.642+08	21c31597-4e3d-4568-bc38-7d53a010fe90	599630a4-4928-4a64-8f90-159d011fd29a
6d45b5c7-8cf0-4cc1-b2f0-79db9218af15	2018-12-07 17:12:17.356+08	2018-12-07 17:12:17.356+08	fecfc4c4-f65d-44d1-afdb-57d325216958	49f198b3-5c31-4f2d-b625-265c66993722
e0f29790-19e4-4d6a-b644-9cd0b35a5e09	2019-12-24 10:40:55.069+08	2019-12-24 10:40:55.069+08	659208a7-903d-4473-bc1d-581dbec9e5e7	17f0019c-fa99-4caa-a15e-0a370f412436
e9d86f52-e57b-4330-92ae-fe639e968be3	2018-12-20 14:56:36.697+08	2018-12-20 14:56:36.697+08	2399a5ab-0f4b-42c7-840e-c9331124008d	16b8f107-2281-418f-8ca7-72bce6fb7b63
b23ca78f-b58c-46b6-a7b7-b381574ef73e	2018-12-28 11:30:35.26+08	2018-12-28 11:30:35.26+08	114001d1-f9ab-4564-b7e0-319e04d86a54	ae984788-d3eb-48a5-b115-a1a9f0888473
7c51bbd6-f7f5-4b9b-a029-fc20282a1cb0	2019-12-24 11:15:20.168+08	2019-12-24 11:15:20.168+08	70f035c8-998b-445d-8f3f-c5f840151e65	f78f1d5e-3516-4f92-acdd-03be971a578e
f6b0f31f-3d8c-4428-8b13-03e5721a4484	2019-02-25 14:08:36.94+08	2019-02-25 14:08:36.94+08	c4126560-43a1-4c04-a7c2-182072c07e07	996cc1ec-1a12-46d2-8e73-4ef3e4c8a224
988e5890-0d9b-4d06-afcc-d3fd3f17e17b	2019-02-25 14:08:36.965+08	2019-02-25 14:08:36.965+08	0cd9085e-abe2-4c04-9956-b0572ba81fa5	996cc1ec-1a12-46d2-8e73-4ef3e4c8a224
e8267293-e0a0-4911-b12b-2f5fff2f6281	2019-02-25 16:10:34.033+08	2019-02-25 16:10:34.033+08	e78b12fc-fda1-4ce1-81a7-9e63695906ec	8b21d718-3d6d-4eb6-b9cd-f9090d48f121
ed2ad899-42f0-42f2-a2a4-26562c94a18e	2019-02-26 16:30:15.708+08	2019-02-26 16:30:15.708+08	6b2d0d75-954d-476d-a920-83a0439a898b	ae51a29d-22f2-4f81-ae18-a59f55bc742d
05f092d3-0971-476a-b73e-1e3f46caa453	2019-03-15 16:40:25.022+08	2019-03-15 16:40:25.022+08	5a900cd1-fd3e-439c-b765-9829c9a61d32	94ddf32c-b093-417c-a1d7-42381d290092
d6176512-1d8d-4857-af97-d65e19aa8e32	2019-04-28 11:28:04.781+08	2019-04-28 11:28:04.781+08	589695ad-b029-4c5e-9425-4946e80f3fb6	d6efa4d1-c65e-45c2-bd65-45a4a3a9eb5d
c01598bf-99db-4f02-8d99-6dc7ec42fc5d	2019-05-07 17:00:31.13+08	2019-05-07 17:00:31.13+08	05df15fb-1c19-4077-9522-6d5f48739259	684cc240-1b5d-4df2-9609-f00de3ca4fcc
c6f1715a-4f41-470f-9c0c-97795d96df42	2019-05-09 10:06:14.16+08	2019-05-09 10:06:14.16+08	0c3edb9b-16a6-4fed-b65c-3757a117a3bc	a0c4221e-b5ca-486b-8f8d-f98ec84e87f9
3c3e6ccb-f61d-4311-97bd-6e41ade92688	2019-05-09 17:48:44.328+08	2019-05-09 17:48:44.328+08	a40f85c1-a408-408b-971c-4e1c4e88d703	405c8685-171a-43e9-8b38-09c82435cba1
096f6891-9631-4deb-8e4c-c7e779530e20	2019-05-15 10:55:37.913+08	2019-05-15 10:55:37.913+08	e35e7bae-3a9e-41bc-b63b-ee32399d64d0	1d0404d7-be40-4099-b270-b86b7952435c
7dee23ce-b03a-4e74-9b63-e817eab2db85	2019-05-23 00:05:50.848+08	2019-05-23 00:05:50.848+08	639bcad3-50f1-4b66-9f50-acbb916f7d8e	d66fa059-5b42-428c-9c83-65b31ec08a45
addcddd8-5fd8-42e5-97e1-69239195d9a2	2019-05-31 16:21:32.692+08	2019-05-31 16:21:32.692+08	e5a6d57f-122f-4dac-994d-1a83a93b2440	307c2a2a-d933-42bc-910e-ad6019053f9b
50ee493c-abed-4696-94c4-e4651520278a	2019-05-31 16:25:45.428+08	2019-05-31 16:25:45.428+08	ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	73d79c2e-3ea0-42b1-ae44-65de9a5631c2
935e8fca-c351-4592-9a3e-a8d5e30e8f22	2019-06-05 10:53:00.086+08	2019-06-05 10:53:00.086+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	79f916f0-c25b-499a-986d-64311324c671
96ef5375-937a-4317-ba4d-a848ea45bf53	2019-06-05 10:53:00.093+08	2019-06-05 10:53:00.093+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	0e2b1a40-1445-41d3-bdfa-e4f5da1cf92a
4e57c4f8-961f-42bb-9185-52c0fe128306	2019-06-11 17:28:58.632+08	2019-06-11 17:28:58.632+08	02962d5d-c83f-4756-bc1b-b9044c4563fa	73d602d6-5deb-4c31-93ed-14ce2e0ba09e
2c20881b-9f5e-411c-9b9e-d809328f4db7	2019-06-18 15:48:02.225+08	2019-06-18 15:48:02.225+08	7f4871f5-ec20-43b3-aba7-1814a0dd53bf	87e3b279-9de3-4649-9936-4d255890f9e9
212e5f76-e746-40ca-9ba0-9b5da0614eb0	2019-06-27 13:03:58.358+08	2019-06-27 13:03:58.358+08	e2d1416d-c8a6-43c7-ad2f-08d498e323a1	f6523358-73a3-44a6-8f22-21d34be28fea
d89186b1-0497-40e4-b7ff-8d728af83a89	2019-06-21 13:57:20.109+08	2019-06-21 13:57:20.109+08	4e27a3d5-339d-47e3-9ce7-0c90068376e5	5c5d9637-e662-4957-aff8-a2c4004f2fd4
19fbe1e0-b26d-4cf9-8d59-c121fba811a4	2019-06-27 09:35:12.08+08	2019-06-27 09:35:12.08+08	df4052a0-fc2c-4120-b39c-fb5a0f719b6d	e52dbdd8-6a51-4429-b070-a5b11884694a
8e695521-3bee-456e-923c-d2c6adecf5c7	2019-07-06 17:22:08.751+08	2019-07-06 17:22:08.751+08	8f23910e-3c7c-4113-b420-88df899c7a25	4193e471-7176-4c42-bb41-e59636bf8d32
f0231f75-af61-4dec-a075-66230d91b959	2019-07-15 14:05:53.12+08	2019-07-15 14:05:53.12+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	4085b18f-dd96-4757-a9c9-baa3f2b6a431
f552e5ec-c7a9-4cca-90be-2063f6e1c487	2019-07-15 14:31:13.708+08	2019-07-15 14:31:13.708+08	69b276a3-aa72-4720-9591-cd371e95b7de	036cfbb1-ba1f-4ba0-b79d-eae5a887301d
e073299a-8fb1-4591-bd31-a253dec8cc58	2019-07-15 14:31:13.733+08	2019-07-15 14:31:13.733+08	578138e6-3a9c-4db2-bbf9-addfef22c072	036cfbb1-ba1f-4ba0-b79d-eae5a887301d
aa6e5e7c-de3c-4be8-bedc-19afb5f6aca3	2019-07-15 14:31:13.754+08	2019-07-15 14:31:13.754+08	959bf8b8-23eb-48da-8362-90d4978c9406	036cfbb1-ba1f-4ba0-b79d-eae5a887301d
b1ec358a-afdc-42ca-8535-5b88eba0d0c6	2019-07-16 17:46:08.902+08	2019-07-16 17:46:08.902+08	2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034	7eb81fa0-516a-4904-83d6-eb999a1561c4
9093b33a-978e-459d-954e-331068e13a13	2019-07-17 14:29:44.536+08	2019-07-17 14:29:44.536+08	c8ab31aa-0550-4b56-b062-20566f8edef5	9c899e73-1ae7-4049-8fc6-1299a4471683
2f2e9bd8-619e-4956-8896-c929088ceddc	2019-07-17 14:29:44.541+08	2019-07-17 14:29:44.541+08	c8ab31aa-0550-4b56-b062-20566f8edef5	44e24e0e-8518-425f-a76c-4c0cc9b2e09a
ac0e1ca6-28ad-4122-b336-152d2076d40e	2019-07-17 16:31:05.844+08	2019-07-17 16:31:05.844+08	cda9f386-6c1d-4477-91aa-61f2fcbf93ff	16889bf4-74d5-4c72-bfa9-4cde4b691cca
37973fa9-611d-4bb8-8869-fb225e31a86c	2019-07-22 10:33:56.633+08	2019-07-22 10:33:56.633+08	7e6d0c55-7f14-4df6-b630-7e9bca15f6f3	24f0b253-b144-44db-bb05-9f7a23a6af04
6e78ce6d-f3b9-454f-9f93-d46dfea50f2a	2019-07-22 16:03:30.014+08	2019-07-22 16:03:30.014+08	c8050ea0-29fc-4675-9198-3a4c438aafff	9bed84a7-4d4e-4198-9bb4-2660d0fac4af
e749fca1-208b-4fc7-a35a-06fe0f2227b6	2019-07-23 09:33:53.808+08	2019-07-23 09:33:53.808+08	e36b625f-b336-45f2-a421-47deb3ccff39	3e0f6804-6e7b-4de6-bb21-8f12309fd10e
5c1ac17a-37c2-424c-b141-850d76a834f0	2019-07-23 11:13:52.733+08	2019-07-23 11:13:52.733+08	7b76cdc3-1393-474a-9868-b48a35519a53	13cd7a9a-72bf-45d5-bc31-29a2ffd319ee
f6c54092-581b-4ec4-b442-abe123ae39c5	2019-07-23 19:50:12.514+08	2019-07-23 19:50:12.514+08	911e12ca-0961-481e-bebb-0201c63f0cd2	e6b7a194-c779-4946-bf01-10b2337bb8c0
d4fe5ee2-5200-4c71-a927-9c29903fd9e6	2019-07-23 19:52:59.545+08	2019-07-23 19:52:59.545+08	97d28bd7-4126-40cd-aff4-ba6db048ae15	720e6f6d-551b-4c1d-95ea-497b8a0c5495
527b4fe9-0f33-4ab0-8e5b-1d2dfb93e44a	2019-07-23 20:06:45.198+08	2019-07-23 20:06:45.198+08	9f777c35-b431-4a11-aeac-979ad0a3f1ac	d0ef103e-0f08-4d7e-bfb0-5d83d5fe6229
58784a51-1364-407b-b9da-48996f530631	2019-07-23 20:33:13.47+08	2019-07-23 20:33:13.47+08	82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958	ad4ff171-1622-4d98-be68-31ccc47670ce
0729829d-8436-4ea9-ab67-d09198827018	2018-10-08 16:48:22.323+08	2018-10-08 16:48:22.323+08	da364ec6-34cf-4bb6-8eb8-10548f45e67a	cc115119-d1b9-48e4-af00-1f2408d73eb0
56e5008e-c6da-4e82-a9d4-b2a72741aa2e	2018-03-28 10:01:47.911+08	2018-03-28 10:01:47.911+08	37a8aa55-7282-4e2a-8cf5-a32e6a00c381	32834f4d-6653-478f-8917-40df0f0706ab
6ea84bfc-39fd-4ba3-bd45-e011de9bddd2	2018-03-28 10:56:04.954+08	2018-03-28 10:56:04.954+08	cd1e30cf-8d0c-457d-b7d4-a773af3c17f9	98efd1b8-ba29-41ac-8022-8e5fcdae47d7
c6d0f381-207e-4efc-b520-f4ab3c38aa51	2018-03-28 11:26:27.871+08	2018-03-28 11:26:27.871+08	7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	73c755a0-b4de-4f3b-95de-a4d13d1b5bbe
7a208362-a369-4bdf-b002-47e725c5c9c5	2018-10-29 18:06:17.129+08	2018-10-29 18:06:17.129+08	a2423718-1142-4d1b-aff4-85a6f260c390	b5d5d84f-ee8b-4fb6-bf89-cae02af804b8
07208d6d-145b-4ed1-97b5-c6aa98cbb0f9	2019-12-24 11:48:31.449+08	2019-12-24 11:48:31.449+08	380f8e6c-ddbe-4c2b-90ab-89abece78fd6	ae0461df-12bb-4b97-9083-2388cc19fb64
fc5fd21f-57e4-4abd-bb0e-29f6d37e83c2	2018-03-28 14:54:49.052+08	2018-03-28 14:54:49.052+08	72f27aba-3030-490b-9c55-ca21f1294c15	4535e17c-bdc5-46c2-81e7-b8a7aa506e89
8b54994a-7854-4e52-b1f6-f46b86a5df7f	2018-03-28 15:40:02.872+08	2018-03-28 15:40:02.872+08	66aa8517-e2eb-4eaa-b1aa-77db8ee96462	c3d7c202-6499-4b43-85bf-d79e51629771
aa6fed19-7200-4a47-a963-9595302fd04c	2018-03-28 16:34:55.454+08	2018-03-28 16:34:55.454+08	63b1d744-08d4-4190-9ff1-437220a51be4	466bc6e3-375f-46a0-8698-ba5a45d8b5aa
a0adbc4b-b2c3-4941-8531-845de95705c6	2018-03-28 16:37:25.871+08	2018-03-28 16:37:25.871+08	a3aeb56c-762d-4329-8fc8-0309335e489e	c799837b-448d-46a8-bc2e-abecbeaaddf0
54b74d21-15ac-4043-aaeb-b0435e4bdcc8	2018-03-28 16:37:40.443+08	2018-03-28 16:37:40.443+08	b94d787d-82ad-4377-91c7-ef2e4bb9fe74	e4a15813-aaff-4012-b84e-538d4af261e6
123380f4-4c89-4d25-8052-384e5bc22faf	2018-03-28 16:38:35.593+08	2018-03-28 16:38:35.593+08	b7f4e4fa-c1a4-4f44-9c29-bab2e1b860fe	c857c441-8c1a-4156-84c7-a647e3f7cafb
baf2e11d-5c56-4147-bd3e-e97772641695	2018-03-28 16:38:50.266+08	2018-03-28 16:38:50.266+08	8f63105e-6340-4d3e-8436-b564d092296a	1de94af4-bdba-4d78-9427-208c421a9052
c957a109-de5a-4750-b524-3bbb91aaa00a	2018-03-28 23:32:12.782+08	2018-03-28 23:32:12.782+08	ef22c0f1-7da1-47eb-915f-8ef899a1c2e0	70a8ddba-e9cc-4b23-afef-f6f751a0181c
0dbc1669-0205-4fa7-b7e8-b7dc491fba4b	2018-03-29 17:28:38.917+08	2018-03-29 17:28:38.917+08	5abdf680-af46-47fe-80f3-d98fa0be49e0	a53ca2e5-bb91-4e04-8ee5-dd80dc1ec6d1
cbe3972d-fbfc-41b1-be71-7ca1b3a39a03	2018-03-29 18:19:53.923+08	2018-03-29 18:19:53.923+08	c68f452e-5afc-4ae3-8ffe-00828a24861c	6d7ae59b-52da-43e9-8888-fa8068f45ee7
46c38031-addc-40e9-a2d6-ed6786847e6c	2018-04-02 10:37:43.68+08	2018-04-02 10:37:43.68+08	2dd2b9c9-f307-4635-98cd-0aed7043075d	c7932a1f-6a4b-4511-81fd-6285af951b9c
0ce87755-84c5-4ef3-8677-edcbb5523193	2018-04-02 11:06:37.559+08	2018-04-02 11:06:37.559+08	e23258d4-5427-479c-b19b-25ac08c4888f	c34a2dbd-4a84-497c-9ca7-026687a37717
11ff2dd2-e90e-4ce5-9a8f-e2a5ca7bbe21	2018-04-02 15:54:14.348+08	2018-04-02 15:54:14.348+08	c4424e56-9f35-4bdd-b7c1-66836e3ba1cb	ff37fdc7-53f6-481d-84ce-1e6e6676701d
ad9e6ac7-3a75-4a96-bff2-072b3f2f4e0f	2018-04-02 16:51:42.751+08	2018-04-02 16:51:42.751+08	c12bb164-9c52-4a79-8210-b5c74534053a	1c3775ff-0ed7-4741-a82d-5551cc860061
01083a88-d9fc-4dae-9ba6-9c93637efdf1	2018-12-05 14:59:57.89+08	2018-12-05 14:59:57.89+08	4f2419a5-1b3b-4929-9b0f-27d286d684a4	bafbbebe-8667-44d4-9543-18ac43ad4d21
9249793a-563d-4932-bc98-473806508300	2018-04-02 17:18:18.085+08	2018-04-02 17:18:18.085+08	bf250923-ab23-43ab-a4c3-0aebe72d5c84	cbc1dbb0-6dc8-4cc4-9d0f-162bd1e5cbe6
06346f9c-5118-437c-a1a0-a98d0bfabbb5	2018-12-06 11:28:49.955+08	2018-12-06 11:28:49.955+08	a1051359-cb72-4421-9dae-06e5cc0d8622	eaf50efd-3be3-4815-ab62-cfd1e2d77bed
8afcfd2d-2e06-49bf-8079-e8c8bd7e1e1d	2018-12-07 17:22:02.013+08	2018-12-07 17:22:02.013+08	bbfe4ad2-61fd-4c9b-9a68-a0682458a01c	19151d32-ffd7-4ad1-80cb-b6173adaf11f
3201f17b-3628-4af2-a61a-9635941125bf	2018-04-02 17:22:17.517+08	2018-04-02 17:22:17.517+08	a4e76a90-da0e-45f5-a2bf-540d04090e35	dcb774f0-6fc6-430d-9486-48e03b653032
8c3576c8-fb2e-4d87-944c-61557ea25959	2018-12-13 13:58:23.834+08	2018-12-13 13:58:23.834+08	72701fdd-9595-45b1-8bed-190d4bf8ea7f	5e8cad65-f4b8-440f-8c7d-ff360c05699e
a32a0959-d558-4c12-b13f-04ce210ed976	2018-04-03 11:39:47.193+08	2018-04-03 11:39:47.193+08	ca247144-4f2b-40e9-a2a9-de78942565e5	d37be38e-381a-472d-88e9-29be91869584
698fc55f-8563-4217-be7c-a1bf8e2cf72c	2018-04-03 11:52:10.95+08	2018-04-03 11:52:10.95+08	61625131-a37b-4478-a0dc-f7c55d54f34e	4443e795-6d04-4648-9997-a93862565b3e
ec0ec375-1485-424e-8874-a9a8fdda1140	2018-04-03 11:53:08.712+08	2018-04-03 11:53:08.712+08	855e5472-f1f9-4119-818a-337b5f302028	99244d8c-d0ce-4963-b0ba-efbaaef5f50a
82acfccf-c688-4134-a371-126ad62c95e5	2018-04-03 12:41:11.901+08	2018-04-03 12:41:11.901+08	ea35c8e5-60d3-46c7-a819-b0557f2be17b	8fbaa90c-9998-424e-82fe-948c7a948332
78e2d45b-8360-4758-bb8c-1d4e0241794b	2018-04-04 16:47:57.926+08	2018-04-04 16:47:57.926+08	e59809ab-9197-4c91-8a1b-041a187eafc0	553d0d89-b8b2-4900-a17c-19fc50269001
0824b32e-3f62-4028-859e-cffb652d9508	2018-04-08 14:00:41.055+08	2018-04-08 14:00:41.055+08	5d266e86-fadf-4335-843c-a721ecb814c3	a6450058-743b-460a-829c-c7a9442535a6
f3626b72-514f-4871-81f4-522fd57cae0a	2018-04-08 14:00:41.036+08	2018-04-08 14:01:24.958+08	8e60936a-d379-48c0-bab9-7f9d02c1a5f0	37a47128-0a76-4bbb-89ef-26b27932254b
dc7ff2b4-acd8-42f5-9c85-7a94adf955b7	2018-04-08 14:06:24.534+08	2018-04-08 14:06:24.534+08	b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a	506a40fe-aa97-4845-b2e7-0986aeab2b76
f9085908-8505-4262-9bd9-f8ade8c5f4ef	2018-04-08 14:06:25.455+08	2018-04-08 14:06:25.455+08	c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5	28cfe943-004f-4549-aba4-26bfbbf65e97
6c524d59-5547-40c1-bcee-1d4c47f6612c	2018-04-08 14:06:25.477+08	2018-04-08 14:06:25.477+08	8b5d7571-fbed-4a64-8ae5-158979e259d4	28cfe943-004f-4549-aba4-26bfbbf65e97
3aae2c4f-ba79-47bc-80ee-26f8877919d9	2018-04-08 14:06:26.113+08	2018-04-08 14:06:26.113+08	b689f4eb-472a-4f21-93e2-9a7c753479bd	82731511-63b1-4afd-9fc4-5eed20a7e13f
6c6c9d12-76e3-4206-a2ed-83acd1958a5b	2018-04-08 14:06:27.168+08	2018-04-08 14:06:27.168+08	5d4fd2cc-9b83-48da-80df-6dd615d69195	e1fd616b-edce-488d-8065-8cd901709aca
4e681cc6-7615-4830-a431-8feae3d97fd8	2018-04-08 14:06:27.696+08	2018-04-08 14:06:27.696+08	a40e7ecd-bd8d-4e58-95af-f964d8861447	c57824af-5b3c-4c9b-b719-2fcdf41e5c93
61025f4f-21dd-475d-9569-e06ff204ff80	2018-04-08 14:06:24.523+08	2018-04-08 14:06:55.081+08	c160a4b0-d8da-4e66-ae49-305ecdd5ca48	88f66ce8-8107-4f37-bc64-152ecee7006f
a7fb2670-1b11-4ee8-92b4-3400cbe27362	2018-04-08 14:06:26.092+08	2018-04-08 14:10:59.286+08	72a5348d-2988-4bd5-ad2b-b46b616e70a9	a471484c-32ed-4224-9451-8506afa95ee8
a344ed48-cd28-4fa9-842b-dc4773efec94	2018-04-08 14:06:27.143+08	2018-04-08 14:13:04.33+08	fa4989e0-0602-43e4-a5d6-3b5492e9711d	3b86da52-5af8-4866-8b37-daf269b580c9
2f3a241c-5092-4ea5-8ba8-27faa9da8fa4	2018-04-08 14:06:27.666+08	2018-04-08 14:14:22.541+08	88f8eecf-bb3b-4dbc-b003-2c28bdf07be4	fae9d93e-eb25-4486-bf75-43b5d9093060
842178e3-53e2-4e63-a4cf-84cb81391b66	2018-04-08 14:40:14.026+08	2018-04-08 15:47:11.743+08	b484a973-d8b7-4e1f-a3a1-8be21122c6fe	74e3ee05-6f81-434d-89d5-409b3c3c3028
331a8eb5-fc13-40af-8906-4e7ac815a85c	2018-04-09 08:03:04.747+08	2018-04-09 08:03:04.747+08	05b3e292-e599-4d57-ab16-7bff3ae393d2	57f5d115-e89e-430c-a5a9-541aacafb488
8b39145a-5d84-44ad-9dcb-63f6165b1d3e	2018-04-09 08:05:14.723+08	2018-04-09 08:05:14.723+08	def3cc25-dff3-43d3-b77c-855e1683db60	dc05a0f7-5d8f-4d5e-80f9-a68d6601c488
e308d5a8-828f-458f-9f2e-66aa3973352c	2018-04-10 09:58:39.787+08	2018-04-10 09:58:39.787+08	541024ad-b513-4adb-b4ea-9a3eb3b67f5c	bf00840f-93e5-4f6d-be3e-b449e2d92051
c14cd7e3-464e-4081-a2da-29621741ecae	2018-04-11 09:27:08.933+08	2018-04-11 09:27:08.933+08	ade7450e-eb35-4424-8b11-83f4c466bef7	307ae878-46e3-44a7-8603-67b38cfdf570
29010bc2-9d46-42a7-8eac-421939ca70e8	2018-04-11 16:24:01.27+08	2018-04-11 16:24:01.27+08	9f8406e9-e9ca-4ca0-ae96-258bb6917390	acb64f0a-30d4-4146-a608-43cd4f2a20cd
0c617e8f-4729-4348-b2b8-d9e971a7d96d	2018-10-09 17:02:23.473+08	2018-10-09 17:02:23.473+08	ca8a3be8-72cf-497c-9743-e3d348c53672	7cd0e434-1b19-4991-a8dd-b5507ce83d8c
f157b758-94de-43c5-89e6-7fd7b87cbf7f	2019-12-24 16:23:58.9+08	2019-12-24 16:23:58.9+08	c46b60be-3353-4715-8783-561892271905	4373a223-fea3-4229-af15-847a2236af08
3fc1b917-0226-418c-877a-d2a43cc26198	2018-04-12 11:22:18.186+08	2018-04-12 11:22:18.186+08	3c6dfe0c-5013-4f63-9222-721718b82b24	1a7d98ac-27fa-49bb-bd82-df050812f8e6
5a6bfbd0-f813-45b5-b1ee-8817ef9914b6	2018-04-16 11:54:59.776+08	2018-04-16 11:54:59.776+08	a85e3b5f-f279-4094-b079-07d51a243899	83e3df67-8f00-466e-acdf-d7441b033a73
d8ddd40e-4283-4a31-8cfa-a4918c460d85	2018-04-16 13:52:32.775+08	2018-04-16 13:52:32.775+08	64cbf359-5e92-46a5-ac77-4ba6566e6539	cedcda73-60da-4a75-a229-bec319bd9757
8f49be09-bbd3-4b75-8194-afad1def9140	2018-04-16 14:07:58.039+08	2018-04-16 14:07:58.039+08	b848da41-0b65-4b04-afdb-aedda940be03	bbe094dd-4c59-4a44-9a56-cd5676418107
2c001b3d-0095-488b-b803-c46c3c770248	2018-04-16 14:07:58.06+08	2018-04-16 14:07:58.06+08	02d9ea95-34c0-4d67-a8dc-755e3330cb36	e34d9d96-f878-4896-ae3e-55d492c4ba33
43943a6c-7de9-4657-a674-069aa0317746	2018-04-16 15:46:07.762+08	2018-04-16 15:46:07.762+08	b4f14b5d-82f1-4ea1-b10f-3e38e552168c	9e709c26-1099-40b7-88b3-482e26e9df23
54e86fc9-909d-4d32-9577-7797be42f23f	2018-04-16 15:46:07.917+08	2018-04-16 15:46:07.917+08	a5c1d727-4820-4d7b-b758-dea1af104b33	0af9f7d2-c08a-4441-93d7-2eb703f0e941
59690abe-7ce4-45d5-89d3-2c33a16acd6b	2018-04-16 15:46:12.41+08	2018-04-16 15:46:12.41+08	a2fa85fa-2e1a-427e-99f2-595757cb505b	0261a452-9e7a-4fad-b07c-2d6fce0561bd
bde48f0f-db39-4741-ae7d-bd247e3250f2	2018-05-03 10:35:59.19+08	2018-05-03 10:35:59.19+08	6accf380-8a73-4f88-8a5c-42b3366bc358	1da75911-667d-4484-8cc8-3d05eb06e404
354deffc-6536-4033-a11a-9f22b8fb99d9	2018-04-16 15:46:07.744+08	2018-04-16 15:46:53.741+08	c76c28b1-6041-44be-9ce9-39728d5de7c6	5ebfd140-8067-4b51-b1da-bb357c7c8e4d
ab909767-1be8-4e56-89b7-de08709c6310	2018-05-03 10:37:15.494+08	2018-05-03 10:37:15.494+08	56227677-39fd-4bfe-a59b-8c5f28682832	64036170-2629-430f-9f56-56f2f645bfd0
1780e55c-f0a5-464c-8dc7-7d86342d17fb	2018-04-16 15:46:12.388+08	2018-04-16 15:51:59.779+08	2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	fc8399b0-54ca-4ea8-8615-d61da7fdb2e4
e2b7282e-019c-4639-ac83-abc3fdf1a970	2018-05-09 10:42:20.056+08	2018-05-09 10:42:20.056+08	289b0a55-03e7-4154-bdd7-b7bbb15a6d28	a9612792-cc30-4b80-bfbb-97c0fdeecf45
300f5604-667e-498b-bd33-d8341330b580	2018-04-16 15:46:07.899+08	2018-04-16 15:52:20.677+08	3a873f72-4f94-4141-94f5-023d34b61d1f	b80de95b-ab1a-4b9b-b64a-61eb47118f77
06abec6d-179c-4e42-a72d-766bf6604035	2018-04-16 16:00:53.32+08	2018-04-16 16:00:53.32+08	c538c4cc-6b50-4a51-9706-9a112551be27	9273a392-a552-4099-ada8-143bd6e3e6bb
f988bf1b-2fb9-4d59-bb24-34438f6a1c74	2018-04-16 16:00:54.808+08	2018-04-16 16:00:54.808+08	81b14e1d-4d14-4741-b581-31e3c543a0f9	9c326fdb-af9f-4b0c-aa19-41010e7f0915
aaa4f31d-b352-48db-85eb-5c79ee77fb5b	2019-12-26 11:22:53.214+08	2019-12-26 11:22:53.214+08	e9412219-df4d-4a2b-bfe1-1e81e44f7a60	de7228a6-d2a4-4308-8125-c25a5e80caf2
33dc417b-958f-4c71-b054-d6c8df6fb239	2018-04-16 16:01:22.17+08	2018-04-16 16:01:22.17+08	2f72ef62-1d3b-4c4b-9308-5abb39a919d0	3aff7db1-0f77-40b3-9228-13d6519ef209
df0dfced-588f-411d-a50a-d8b9359cff60	2018-04-16 16:00:53.294+08	2018-04-16 16:07:00.025+08	3987b49b-1b19-4b06-889b-b102edd2abe3	7541951a-fc00-49e0-953a-ac2547dd63b9
d85242b7-6617-4acc-9812-9d53ed4a84d4	2018-04-16 16:00:54.792+08	2018-04-16 16:12:18.255+08	ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	c8861318-798d-40fc-b51c-c9ce2a59bcd9
037231be-2240-42a5-8e5d-c5e612edbadc	2018-04-16 16:14:51.128+08	2018-04-16 16:14:51.128+08	b5c9d48e-6b32-41c8-ad53-93f60da390b1	6472b729-0e05-4a8e-846a-d74b97e3c4ee
59acfda1-6448-48ee-943f-d92626e1c366	2018-11-23 17:09:42.481+08	2018-11-23 17:09:42.481+08	07b4abb3-3cd6-43ad-80af-e256996876d7	2550cb4b-a31e-4560-bed0-8325a2fea057
b6bcc505-b08e-474a-9c21-39a3f04132aa	2018-04-16 16:14:50.41+08	2018-04-16 16:22:14.964+08	c86b0543-8d73-4c04-95d7-aa52f68d8c67	9c2fb1e3-599f-48e6-9e9b-6c3613275199
b6a1c2fc-2c18-44e8-b64e-a54a940b9601	2018-04-18 11:28:28.09+08	2018-04-18 11:28:28.09+08	cf73d66e-1a91-4f17-a31b-e373c8731fb4	27472fa9-3075-47d0-9c88-7accc4386103
ed283bc3-7704-4e13-bce2-042eaffdd82f	2018-04-19 10:59:55.879+08	2018-04-19 10:59:55.879+08	6c1400a4-ffcc-4f86-955b-dad07fb58c17	5137058a-3c36-49fe-b29e-460166a4017e
ff1adce1-9365-4702-9e51-90f629a29211	2018-04-19 11:00:20.817+08	2018-04-19 11:00:20.817+08	69df2525-998a-4f00-a7f5-857a888eb1b9	e9b06093-70f9-404c-9ee9-c056cb62226a
fe71684d-813d-45e8-b71b-d7c7a8adcd73	2018-04-19 11:01:02.813+08	2018-04-19 11:01:02.813+08	6831367e-c4c8-407a-b2d6-3259490ee594	3a59ba8f-dcaa-4276-808f-3f6244455278
5f99d757-ee39-43f1-8553-3675000835b3	2018-04-24 14:38:42.703+08	2018-04-24 14:38:42.703+08	1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b	66731701-c15e-49a4-9eb9-4e13de5dc80d
d1a4b471-9500-4cca-b482-ed6f3cd3fd6e	2018-04-24 15:29:24.95+08	2018-04-24 15:29:24.95+08	835d5e0e-912e-458c-a809-8634e203c0e9	70bfe3ff-fb57-474c-80c3-d9fd580896f2
0ce22569-218d-4a6a-8eb2-04e99d660084	2018-12-07 17:22:02.591+08	2018-12-07 17:22:02.591+08	71c10c83-3856-45fb-ab38-c75aabf7d5ea	76902a4e-8831-4253-ac3c-9a7be5c855b1
3accf0dd-f3bf-4d10-b26c-77735f59e9f2	2018-04-27 14:42:12.759+08	2018-04-27 14:42:12.759+08	e0b566e2-b4bd-4224-9cd0-301b176bfbfa	d3aeb7df-fcd7-4fba-b003-6c0ee98bc33a
f013c876-0787-49cd-a56e-215d36f155ea	2018-05-03 08:54:32.788+08	2018-05-03 09:59:08.799+08	90194fd9-5400-4bda-bd8b-7ed11b598c4c	a8cf3a82-d9cf-49ef-b2a8-36689b772016
0bf85021-6840-410d-bd7a-2ba1e1005a7c	2018-05-03 10:34:23.767+08	2018-05-03 10:34:23.767+08	51fbf199-10ab-4718-8b70-c92beea24f6a	34e0cc1a-2e8b-40d3-a85c-4762ac05a1e9
ae991cdf-5c83-4fa7-821a-43477fdaa331	2018-05-09 11:11:01.657+08	2018-05-09 11:11:01.657+08	fb36a342-1fe1-4756-ad83-825b5d7ac57e	67f02e4a-e979-44d2-b17d-849ba3ba1eb6
4be9a97b-e982-4128-a94b-cadd990a354b	2018-05-09 13:55:22.704+08	2018-05-09 13:55:22.704+08	d7460b80-d3f3-48f1-9287-d7220b1b7f3d	e6adceba-3e63-4d8c-81f9-0733ce80b9e9
4ce89397-d48f-4759-91b0-d0f6d63f6a9a	2018-05-10 09:13:20.652+08	2018-05-10 09:13:20.652+08	33ced0d8-f342-4bc5-8c11-45dcb0304ffd	238b18df-6349-4e01-bea7-c785f5754543
3b4a8bde-a2b8-4e15-bc36-4d43a8e277c3	2018-05-10 17:53:00.792+08	2018-05-10 17:53:00.792+08	60f374db-1336-4bb2-8dda-311955dca706	4c99b328-de6c-4929-a512-82cf921fc74d
9fbbe720-373d-465b-a196-769f70723d7c	2018-05-10 17:55:50.415+08	2018-05-10 17:55:50.415+08	5d8abf22-14e4-474f-9a3a-11a4976643ee	b53ef639-7171-4c8a-88ee-fff2e88a2a20
583f56a5-91c4-4ae3-89f1-038b8e7213c6	2018-05-11 10:38:17.14+08	2018-05-11 10:38:17.14+08	8467dc74-ae70-4742-9f5e-8b44464133b3	a5c68c4f-124e-4860-b68c-b0a78cc4bcd0
421718ae-40c9-4da2-9ba6-7cac716eab06	2018-05-11 10:41:15.504+08	2018-05-11 10:41:15.504+08	ec17d151-95d9-4c87-a5c9-799089626714	f437f173-ee82-423a-b2cd-6e1672f6887e
9ff514a4-16dc-4143-bc20-b688d9404477	2018-05-11 15:45:31.14+08	2018-05-11 15:45:31.14+08	c135c6c2-af77-42b4-9fd8-a684c629383e	fbb1bac9-c0b4-4340-bea2-035eef7cc9ca
f753e447-956d-4f08-802c-a8bc688779a5	2018-05-16 17:28:00.392+08	2018-05-16 17:28:00.392+08	663eba54-78c3-4aa6-abbf-66cde27953e2	33a6e9a2-e5b2-4b6f-814e-fc678e4bfc52
a1136aea-8fd5-4cff-aa36-f04c3b8badb2	2018-05-17 10:26:47.702+08	2018-05-17 10:26:47.702+08	5590fa71-06f3-4895-9540-4996a44d0c27	6dfea180-3bab-434b-b4d9-01f484b55b2c
03fcefe4-3baa-47ff-abd9-c34edfbcb35a	2018-05-17 14:43:40.153+08	2018-05-17 15:14:37.502+08	957aac75-16e3-4a36-958f-bd44ca104591	d6bcc8eb-4906-4bd5-b207-3e62af569320
49299c21-9b55-4e43-ac05-bc9f0fb14292	2018-05-28 10:45:28.358+08	2018-05-28 10:45:28.358+08	1da4370b-ba2d-4f6a-92f0-485a163d45e2	5fa9177f-e430-46e8-b0fa-a824b5c39c36
12c5a980-7d60-4935-943f-be81d238dc38	2018-05-28 10:50:00.222+08	2018-05-28 10:50:00.222+08	d314e16c-4cc2-47bc-92b5-af0639bdc7a8	6eb5ae32-1f75-44e5-9436-c7f6f0af18b6
2ead05ad-69ae-4e96-9d43-da75c5c563c4	2018-05-16 17:44:54.919+08	2018-06-05 11:15:46.455+08	2e6e8c47-b162-44b0-802f-689c0a71fb2c	358a0539-4815-456c-90f6-2f5313b54f0a
e5a57e48-8a92-4686-8acc-ec61fd9344e6	2018-05-28 14:03:33.966+08	2018-05-28 14:03:33.966+08	1d256945-ce40-4216-ba9b-2071e6e1548e	ba38e139-3c67-4179-975d-6a1b29c08aa6
5ef1f4a9-be22-4395-bac9-dc1cbb9f309d	2018-05-28 17:34:37.774+08	2018-05-28 17:34:37.774+08	2205fdef-b595-4f0d-8268-e9d2370638aa	e6366125-1358-42e4-926f-0d6344002fb8
010fd69b-5c68-4e6b-874e-1417c69e74f0	2020-02-21 13:07:28.533+08	2020-02-21 13:07:28.533+08	d83c7fb6-a62f-4cf0-9818-3df3592a0f3b	80c6d23b-6c8d-438c-a5b5-dfec268349ad
69ff9800-b2bf-4cea-b3aa-7c21c36a2ffe	2018-11-17 09:21:52.768+08	2018-11-17 09:21:52.768+08	ec90f249-7504-4b98-93e1-8f6f39352105	939cd5ef-673f-4683-9dea-55ac0af56393
33a09ec9-11b5-4579-9b76-1a2efd6bcea2	2018-11-24 15:49:36.146+08	2018-11-24 15:49:36.146+08	b081c1e5-b3f5-41e7-a15f-da42c0760ab8	38f9bd20-5149-47ed-90bb-43740eda51d2
40e70bdc-9ade-4d95-95b7-956e726e9c8d	2019-02-25 14:10:58.985+08	2020-04-08 14:32:11.108+08	198c4f79-6642-4537-b774-bea491692a9e	2db0bca2-23d9-4090-8ca8-30ff8699b103
5df51da4-fc99-4fca-b1f3-c9e42a7d63f5	2018-12-07 17:22:03.095+08	2018-12-07 17:22:03.095+08	c8e9affc-7965-452f-af9d-db9cafc1a54f	2cadb449-7dfc-4c3c-a468-c568c8ea7e62
2e319b59-c360-49c1-84fe-b1724c7d011b	2018-12-13 15:31:50.781+08	2018-12-13 15:31:50.781+08	3373f8a0-47a6-4b6c-9df0-b21cf0883d73	3d62206d-c8ae-4dde-9474-0e6b2786f684
9344f3bc-7e83-4d4c-9086-db3f55584413	2018-12-20 14:58:02.439+08	2018-12-20 14:58:02.439+08	764df0c7-c68c-47cf-827f-d2cee7802096	b6ec7cc4-efa7-4c35-a8ab-968845f3da43
dee1fd62-d2a3-4918-9fb5-3f655ba912e5	2019-01-04 15:34:26.882+08	2019-01-04 15:34:26.882+08	becc893e-7135-41ab-8e23-10257bd06437	bb9bad8b-bb99-4fcd-bfe1-d6d85cf31b47
ac253bed-8d7b-4f02-9d9f-3048d1934b32	2019-02-25 15:41:59.838+08	2020-04-08 15:05:02.575+08	cdc89f99-96ab-4176-a290-0cd507439722	c884a293-b09e-480e-9af0-e67c8ae442da
d6376725-75f6-4595-95cc-dca74c0b40f7	2019-01-04 18:36:21.565+08	2019-01-04 18:36:21.565+08	df057647-e4af-4ddb-ba5b-4f9c56f48e1d	615c536b-700b-4b98-beac-b0bda377b4bd
f4d9b2c9-9518-4183-83ef-375b9b49451f	2019-01-07 11:08:30.156+08	2019-01-07 11:08:30.156+08	b6fe084b-3bb8-4dcc-922d-b85d47f1149b	8f6bb3ed-e811-4069-8476-45fa0cfc6f17
847ccfe9-acf6-4cc0-a50f-7c67db0e6170	2019-01-14 11:53:46.533+08	2019-01-14 11:53:46.533+08	742624bb-c14b-4b1d-90d8-bd54ef4520ba	fe3b0041-aabf-4046-b8be-3b05ee46de20
bb3004fe-249e-4563-925b-69387e9ce6c7	2019-02-25 15:41:59.803+08	2020-04-08 15:05:10.818+08	aa350be5-e923-4961-b523-fd25c5e8445f	63095003-a279-4564-bf48-0f3f7ca2db97
ec29b7b5-1b96-434f-a067-8d494deb9a0f	2019-02-25 15:39:43.263+08	2020-04-08 15:09:24.51+08	fc002308-8f49-4bde-a539-028bc4a00d6d	7d9f19cb-ea57-440b-9651-dbf601f1f3a1
9ea398c4-b706-4e8e-96ed-04c6f74e0fdb	2019-01-23 17:14:10.686+08	2019-01-23 17:14:10.686+08	fa2e9270-f133-46bd-8403-b1438680963a	c652dfcc-2815-482e-92fa-d71e3647a73d
9d89f0e4-14e3-4441-b42b-bebe25484a21	2019-01-24 09:47:37.037+08	2019-01-24 09:47:37.037+08	bb14be6f-ac60-4646-a8ce-c0e179c648d2	d948a2a9-74a8-46e1-963e-bf0f6134764f
02774d4d-3b8d-4e14-871d-78c0f86de725	2019-01-25 16:07:25.635+08	2019-01-25 16:07:25.635+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	c1fd9e76-3d2c-4150-919c-c529a57581c0
82b75613-ab0f-43bb-a6ac-8609f3b5af4f	2019-01-25 16:07:25.641+08	2019-01-25 16:07:25.641+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	b338dcdb-b7bd-4265-a7fc-63bcae5b5597
87fa8a31-9f42-4be3-871a-0cdae24c4166	2019-01-28 10:00:29.643+08	2019-01-28 10:00:29.643+08	bb308c8a-f70a-4351-a6dc-aedf8612cceb	1cd1cb16-1d8a-4d20-be3f-548f7b177b1b
60f81b03-4aaf-4b26-a005-4ef96d617f92	2019-01-29 10:56:26.791+08	2019-01-29 10:56:26.791+08	2a275bcf-4e3b-48ac-94a4-f7a77b45ab8b	fcfbd781-138a-4298-a573-df9082d9914e
d16a9dd5-3d7a-4bb1-b0e6-ececc648397f	2019-01-30 11:05:38.192+08	2019-01-30 11:05:38.192+08	ed20720d-14e7-48f1-bf4e-da3ec2ac4c46	768b5117-e123-4f47-adb9-eaf62dbf3d6c
55f24172-50f7-4fd9-8a0b-618b7f05ef81	2019-01-31 11:35:16.841+08	2019-01-31 11:35:16.841+08	85886b04-282a-40be-9b2c-8fe7aaf2d38a	4d9db838-043f-4513-8e70-c976017fc1f7
2c5ee693-a737-4858-a98c-2f0b005b2af6	2019-02-25 15:39:43.241+08	2020-04-08 15:09:38.021+08	70454576-c9f8-4b8b-82a5-2ba414369cf1	504e3c9b-603d-4118-a370-217347a4324c
09672b3f-9819-45f1-a93d-b1952b9f2ea5	2020-04-13 13:27:00.282+08	2020-04-13 13:27:00.282+08	933454ed-df7e-4ca3-950b-6faf23a1a5dc	5b58c3e3-eca9-479c-9eb5-e75f67f97d57
f2db63fc-b79d-4231-96b7-280bc0124be9	2019-02-16 12:14:37.494+08	2019-02-16 12:14:37.494+08	1956eecf-7103-4765-af34-27974b9f3e7c	110ef22a-73d0-44dd-ad6f-6a45ceb40cc6
bfa6a6a4-be27-4aef-89bf-feab4c1a4674	2020-10-09 14:20:04.384+08	2020-10-09 14:20:04.384+08	d7c62295-864c-44de-81e0-2cb9a03bf532	d225ef09-9a28-4c68-9bc5-b9856e4b9af6
d51e2596-92eb-41b2-9672-fa1a49665303	2019-02-22 10:40:53.909+08	2019-02-22 10:40:53.909+08	ec30262f-dc01-41c2-80a3-5602fa716888	90721552-469c-47cb-a77e-4d3bfffbf6c5
f9d63ec7-0672-41e6-af6a-67fb7c20b97a	2020-10-10 10:55:07.36+08	2020-10-10 10:55:07.36+08	e830e2fb-b382-4679-b8db-c7e2afeed47b	77da0a6f-3db6-4714-8add-a2e306bf06ac
e1c373e6-b00d-438e-b295-deef946cb43d	2019-02-25 11:38:45.231+08	2019-02-25 11:38:45.231+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	5f6f7e78-e8a6-411e-8c41-b7cc3fec8898
18df3af5-b32d-4f01-9cac-bba59505e3da	2019-02-25 13:31:57.662+08	2019-02-25 13:31:57.662+08	b1acc286-422b-46a2-a2ea-4aa8c9b8256f	5ded3a70-6e94-40c4-8d91-9661b286feff
672c2b99-6a16-4da2-8c25-6b9fbc3b23b4	2019-02-25 13:31:57.692+08	2019-02-25 13:31:57.692+08	bb29ba88-ec03-44ab-ba29-00d98ccd9af1	5ded3a70-6e94-40c4-8d91-9661b286feff
8e626b67-e596-4dbd-a5f2-e05ca96160b6	2019-02-25 14:10:59.017+08	2019-02-25 14:10:59.017+08	2a6ffd97-9937-4a41-b19d-9e8a1932c22a	4babe510-4919-4c08-9d00-c2fbbb5743c1
d8d04c4e-de31-4b10-9a88-d04a9eae55ce	2019-02-25 15:39:43.215+08	2019-02-25 15:39:43.215+08	c7bcd7ca-9e17-41e1-b3e4-39641d53a443	434907cf-7398-4d18-bdb8-7649660e6511
ee385610-54f6-476b-834f-5c7b64052086	2019-02-25 15:41:59.764+08	2019-02-25 15:41:59.764+08	45284d89-2621-47e3-b5ee-e03229611e89	5d39348c-b190-404c-bcdb-c1ac2b3b1a42
b6be86d3-c98e-47ea-8c9f-6c48d35cba92	2019-02-25 17:37:04.271+08	2019-02-25 17:37:04.271+08	ba31efb5-9309-493e-a3b6-e161c92e9dfa	2e756ed4-27ad-4581-b18c-50e26ecfaa35
8c35b607-06ac-46ad-a9dd-b3cd38d9a3ad	2019-03-15 16:44:01.373+08	2019-03-15 16:44:01.373+08	46d29a93-ef1e-4724-a19b-8693518dfc89	16702ac4-e42c-428b-ac0f-2deddffbf2b5
b7c41eac-2dca-4158-848b-61efa0c7ea01	2019-05-31 16:22:15.485+08	2019-05-31 16:22:15.485+08	cc7ab8cd-332e-48d6-9a20-2d44055c2e61	579d559b-7c0e-46ef-9c84-77bc1da70da9
d0232422-d415-420f-aa56-7f9f86293dde	2019-06-05 10:58:32.308+08	2019-06-05 10:58:32.308+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	73e7150f-daff-4342-a1db-41e7eaa4a812
e7e49ff8-9d69-40a6-96c2-532b6f05f3c1	2019-06-05 10:58:32.312+08	2019-06-05 10:58:32.312+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	9bf83d9e-9729-4c07-953c-1f5e58760c26
541a00d2-40fd-4df1-b8e8-689c2cff79ce	2019-06-11 16:14:17.095+08	2019-06-11 16:14:17.095+08	ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef	8e07b05a-7ca0-4958-bd13-4e85847f4b81
b321e029-e028-4d61-b5fd-8a9fe0a1bbdb	2019-06-11 17:32:28.582+08	2019-06-11 17:32:28.582+08	59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e	1f2484a1-2aec-45e0-82a9-21c642800c35
8d3a2d37-e434-4550-8ca7-87a48f47a7da	2019-06-19 17:34:39.417+08	2019-06-19 17:34:39.417+08	7b0f6923-300e-462b-8705-223febdd9b1d	add2ae46-f882-4fef-8a49-3bceea7fed6c
0f4bd1f4-9c12-4a13-a7fe-3f133650c8bd	2020-12-11 10:22:24.731+08	2020-12-11 10:22:24.731+08	5bf561bf-7398-4a8f-aaaf-4f7b695d0020	4a234362-4626-4b36-81d4-0caa1f7c3a2c
dc5e059e-e5aa-4ace-ae17-a9df5a3101ff	2019-06-27 09:35:21.038+08	2019-06-27 09:35:21.038+08	f5661460-2f34-481a-b54b-31c212613ecf	a0a487d5-b5b6-4602-91fc-41239e82d20b
fa3891ac-b066-4cbe-99f0-542b80bb9c2d	2019-06-27 13:53:14.474+08	2019-06-27 13:53:14.474+08	3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1	617a40b1-cf86-47a8-81a1-0276ddbc2d17
fb228dba-ec96-4057-8c54-a4448a06dfe7	2019-06-27 14:04:53.638+08	2019-06-27 14:04:53.638+08	b35434b2-55c1-4aab-a689-4919d9c56da0	c416461c-d178-40d0-8285-9b9c160d0065
d62eccf7-a0b1-486f-abe4-34736c54bf39	2020-12-16 17:27:08.967+08	2020-12-16 17:27:08.967+08	a75b6e21-4348-4fb7-802c-ee2ecc56f7ea	00648dca-b439-4247-b1cc-ad416b169db5
1ec4fde0-bf32-41ce-925f-588695c3b1ca	2018-05-28 17:36:20.383+08	2018-05-28 17:36:20.383+08	fb8fd0c1-b11f-43cd-9710-c507dec06062	c1633898-dfbd-45a4-a28a-1cfaabcf74e5
8a24594a-9e7f-4d28-b957-4d8ca3bdf469	2018-05-29 11:41:59.948+08	2018-05-29 11:41:59.948+08	d3ba7fce-1ab9-4423-8888-27fbc8244e5c	65b9c79b-8e8a-4dc5-897f-bd7bf3960cfc
1a5da3e3-ddfd-4561-94fb-e7720c5f88c5	2018-05-29 14:51:49.411+08	2018-05-29 14:51:49.411+08	9517f5d2-02f2-47c6-b688-35e0efa0f25f	51ea2c79-c5a6-42b8-a2ce-e50601d22364
35d02297-539d-4c76-aebd-b9183a2bd17d	2018-10-10 11:26:27.681+08	2018-10-10 11:26:27.681+08	7c06e2c2-5e55-4116-a3f9-aae11dc742a8	80c119de-eb55-4e71-b726-4bd7554c9cab
fc2ce552-c00b-4c2e-a489-85d916ee5500	2018-05-30 20:45:30.286+08	2018-05-30 20:45:30.286+08	d1f3cdb1-95b4-4970-90b8-cdb6c2201063	ee9ea11b-cc74-4556-97a2-6092409e08ae
44439a83-7202-4230-8ef6-918f7253eb14	2018-05-31 07:52:27.757+08	2018-05-31 07:52:27.757+08	642f187b-6fa0-4dad-9bb4-1ebee9558b41	09dd6500-ec1e-4917-9481-2a0ab7fcd30c
b5bc4d46-81f3-40b1-bcf8-8e6f2151bbc5	2019-12-26 11:48:37.286+08	2019-12-26 11:48:37.286+08	97761a49-de35-42f5-a664-d3dd6cc82d59	accde3c5-22d1-4547-8075-3f5316563e05
124d700b-e279-471a-bb08-d5f2da06817f	2018-05-31 14:38:48.452+08	2018-05-31 14:38:48.452+08	93a73320-1cb3-4b2f-a8be-f31d131ba881	fa05e5c1-ce60-4618-8a06-493a8a6a3c86
5c9b6d98-df69-4fae-8eb0-fe002163ae27	2018-06-01 10:38:47.307+08	2018-06-01 10:38:47.307+08	ff3a290c-3a62-49a8-8db9-f4083f855397	d2d06ac7-74e5-445e-a927-dd699b74e323
28398864-afe0-45f3-9a52-6ef93c9ee86b	2018-06-01 16:26:56.753+08	2018-06-01 16:26:56.753+08	1dcd37b0-1db2-401d-80d1-bef6c0f180d3	e2016e01-e19d-4477-8714-4fa61c267d4e
949aafd5-244f-4edb-878a-daf0dbca458d	2018-06-01 16:29:15.015+08	2018-06-01 16:29:15.015+08	164546bd-01df-4cb9-a0f0-27590351aa74	6dcdb2e5-0e72-493d-9280-9cf6973b94f6
3a48af8a-cee3-479f-8b2d-99c3605f14a1	2018-06-04 18:00:22.41+08	2018-06-04 18:00:22.41+08	b94c6303-8f36-416c-9210-9a8bbeb2d8e9	10f11161-b15f-4c43-ac76-c4e7f3409ecf
0e2f1751-beb9-46ba-bbad-2fd8d0b67525	2018-06-05 14:51:24.834+08	2018-06-05 14:51:24.834+08	9b35c521-0784-4d09-987b-7bcb189bb1c9	22ff2aa0-57f7-4213-8174-bae34ce95af4
b4c7c906-a143-46f0-98ac-81f5087613ee	2018-06-05 14:52:57.276+08	2018-06-05 14:52:57.276+08	e2359d98-6bbd-4d7e-b370-d8c81c765dc0	e350552a-0a4f-42f5-846a-57031931982b
57e2f113-4af6-4604-a563-400452c67922	2018-06-06 18:05:17.107+08	2018-06-06 18:05:17.107+08	8f4cc815-04e2-482c-afbc-e565f35e0f76	3cc3b230-37eb-4ac1-83aa-c5b7427a1d28
94f394e7-ba79-4c3e-8ebc-4062518f32cb	2018-06-07 15:37:44.407+08	2018-06-07 15:37:44.407+08	5de3dae0-fa13-4844-9c58-c960926aa470	0fa018d2-0369-40aa-8c3e-932340593506
86ce021a-b99d-433b-acd9-d44a6f272980	2018-06-07 15:49:36.343+08	2018-06-07 15:49:36.343+08	f259b7e6-928b-4ef0-8752-bfdf1a834dc4	38dea75a-8548-4b80-94a9-90496afdfe57
1f2d9615-6253-433d-9e7a-5fe6a7bfff55	2018-06-07 15:54:22.285+08	2018-06-07 15:54:22.285+08	1e068f94-2089-43a7-89d1-f2c5be29ab86	6e54ae36-3233-48fa-bcd3-c9253cdb0966
ef1bbb1f-571e-4aa4-acbc-d263590a7bb6	2018-06-07 15:54:34.233+08	2018-06-07 15:54:34.233+08	dc3fee9e-0633-4af5-9ef7-39f838c935e9	fafd2a42-8f24-4ce7-9b46-c5942b2540b2
615f2e26-f14b-4761-8261-1d70102c0824	2018-06-11 14:59:44.603+08	2018-06-11 14:59:44.603+08	cd9e5fa9-97a7-4494-ac8f-69c526262d6d	55442875-ceff-489d-9392-180aaa5afbb4
0ff8d221-394f-41a3-b0f2-d1ae9ae441ed	2018-06-13 16:58:47.566+08	2018-06-13 16:58:47.566+08	66df2f89-5584-46b3-ad9e-0d1932fcf096	eb54bfe2-32cb-4251-a44d-6c5d6b2aefdf
fbc84b7a-60bb-44b6-8b70-92438fc4b8ce	2018-06-14 10:34:18.658+08	2018-06-14 10:34:18.658+08	6be3220f-3cb0-4081-8ef4-a7c51cecda48	6c6a8485-fbd1-4808-b826-93f84b441e66
cc0d72ea-3e81-4b39-b507-bfde447e9ddf	2018-06-15 09:39:55.612+08	2018-06-15 09:39:55.612+08	a63c5547-2825-4f53-93cd-b8cc73368876	129a1f20-b51f-4419-9084-917b09d4d3c6
149e0d0a-9092-4836-a3b3-fcfc84c45780	2018-06-15 09:49:12.945+08	2018-06-15 09:49:12.945+08	b6166ded-aed1-4e30-a2e8-504e9e98b79e	e0b7b313-76bc-4f6b-8094-1cbe8f086ff9
bda30fbc-efe9-48cd-bdc7-f0bd72540950	2018-06-15 17:09:27.744+08	2018-06-15 17:09:27.744+08	50c50ca6-2fa4-4c78-903e-78fccdee6100	5809d1c2-97e1-4f57-917f-479a0d09aa3e
63ca3362-ffed-4a00-a31d-99bf9d6a693c	2018-06-15 17:10:43.247+08	2018-06-15 17:10:43.247+08	3c05da19-bd51-48e3-be16-a1b32bbadf5b	2c66b5f5-27ea-4406-85c1-b5772e200df5
30856eb2-ef46-4010-842e-50563dc062c8	2018-06-19 09:47:25.824+08	2018-06-19 09:47:25.824+08	f05bdb3d-41b6-46f7-98f6-a1f132c38cf1	da3d498e-2955-4d5a-a208-c3d2d91cff67
b55ed6ea-07fc-440b-be3b-86c6ad93f784	2018-06-19 09:48:17.029+08	2018-06-19 09:48:17.029+08	6f11ad74-c92f-4122-8e48-31a6684e862f	4d2419e0-8da8-4f11-b5f0-90ea093a9c81
abbae30f-2cee-4c01-b2a7-ee0074063424	2018-06-19 09:50:26.184+08	2018-06-19 09:50:26.184+08	d41d604d-7dba-4a66-902c-8b1257cde117	83e19aff-382e-4792-8cb0-acdb2a3a817a
2a06efbb-b2f6-4b64-a9c8-8a5af0b75d8e	2018-06-20 10:32:24.758+08	2018-06-20 10:32:24.758+08	7ce72daf-c0a1-4752-9e13-53fb00d348da	78e404b9-c5d6-4030-b6b9-487b8bfb35e8
745f1091-046b-49dc-822e-8dea884b2aff	2018-06-20 10:35:52.523+08	2018-06-20 10:35:52.523+08	d8aa757b-681c-4522-a76f-b2484a854563	95efa533-8d6d-45c4-92fb-695d5cc9861f
c252ff85-89a3-4a94-b81d-44340a44e477	2018-06-20 10:35:53.293+08	2018-06-20 10:35:53.293+08	e3ec18ee-3f12-43f2-ba02-ac370abbc877	9811d477-4cca-4ecd-842a-cb4836b135b9
470cfdc3-b285-405d-8805-493cac045f27	2018-06-20 10:35:54.644+08	2018-06-20 10:35:54.644+08	e98557d0-139a-4938-acfb-9870abe496bc	5c8492ac-2d38-4c54-9d6e-b48b46542248
087b4b9c-c37e-4667-aceb-0605dd2f51db	2018-06-20 11:04:00.683+08	2018-06-20 11:04:00.683+08	3fe35a29-777b-4a79-a6fd-2e57e60caa11	0e09f170-aae1-4349-9595-f658c99bb411
4b5ac84f-472e-4861-81e0-4bd235113e05	2018-06-20 11:04:01.41+08	2018-06-20 11:04:01.41+08	91e8b285-92af-4ba8-a401-14561bfe4d82	989a0f1b-313b-4e5d-955f-27aac6f36e8f
37ff70b5-9d26-434e-b87b-1bb4fb789825	2018-06-20 11:04:02.553+08	2018-06-20 11:04:02.553+08	e607b37a-17fe-4e85-9316-7eed2a219c25	3552b9bd-63d3-4a74-bea0-aadf816dc48f
7b39fbd3-56f0-4313-8d3c-f2177984cf20	2018-06-20 11:13:47.068+08	2018-06-20 11:13:47.068+08	87fdf1e4-fdd0-44c6-9bc3-bc5651c19030	d124430c-8240-44e0-8828-7d67755c691e
e6af5eca-4c71-4c74-97e5-4c8a3f37a2bd	2018-06-21 13:39:44.927+08	2018-06-21 13:39:44.927+08	0c4dd41a-453b-440b-a28b-26d7768832d5	6c2951ba-8402-475a-a4cb-6180a8cd0b29
775e1e13-1870-4af3-90b0-2d2b921d8417	2018-06-21 16:34:49.858+08	2018-06-21 16:34:49.858+08	934f46a0-88fb-47d5-95c9-745cdaf1c07e	054ceec6-745d-4f31-844f-eb436787b2b8
c706c6c9-d21e-442c-ad4d-7c4c7981cae9	2018-06-22 17:30:28.407+08	2018-06-22 17:30:28.407+08	686bfb15-1d0d-459e-b2e4-4cf146946712	8c16c60d-36f2-4f22-bb99-f9403f0e5f71
05286c66-1e58-4f84-9fb0-2a136956dcb9	2018-06-25 09:05:33.123+08	2018-06-25 09:05:33.123+08	7f0bdd9e-f9d0-4739-b764-18f3c615ca79	8efcbe1c-3797-4980-b49a-9285bfbfecc7
068ef707-3b58-4dd5-8cf9-f0a354f8769b	2018-06-25 11:14:38.56+08	2018-06-25 11:14:38.56+08	e05b776c-d411-49c1-9775-9c02bf5dd41f	e216deb2-87c1-4ce8-b05d-bb8fc10be4fa
da44bbf2-55e2-4460-b3fc-a51fb76dfe2e	2018-06-25 11:28:30.855+08	2018-06-25 11:28:30.855+08	8c6c2c54-4620-4096-8773-6a3ee2ffc168	995b760a-4d99-4884-8690-2857fea3bc13
527b096a-46f5-4980-a343-855d9fe8d39a	2018-06-25 11:31:01.913+08	2018-06-25 11:31:01.913+08	d64be76d-e00e-4984-bd5e-6c6be4ccd7d3	40734640-74c6-40b2-9646-2c1f7a876997
9bbf06c7-ce25-4281-ad4b-c2a2ddf8e308	2018-06-25 11:31:19.949+08	2018-06-25 11:31:19.949+08	a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d	f9ae88f7-8101-48ad-88d2-89005d53f830
f0261deb-01ef-44f4-8bc0-977040a29703	2018-06-25 15:29:28.097+08	2018-06-25 15:29:28.097+08	16b92db5-4d33-4218-a6d5-7fa7c24194b0	3f0c11f0-a928-4f1d-b9d6-cdfc9ecad7b6
783b6664-2480-44da-b020-7717bf6c71f4	2018-06-26 10:53:40.187+08	2018-06-26 10:53:40.187+08	400e5759-c7d2-4e45-9d7e-94363490342c	ff18de5c-e5f4-4c95-9419-60e369173067
075f9cf4-9002-41b8-8978-f21021cad337	2018-10-10 11:27:19.869+08	2018-10-10 11:27:19.869+08	42ff7750-3e27-4669-8018-92caf824ecd2	1f7f0dab-85e1-4534-9cbb-7ef2233bb7e1
046da09c-c86b-4f59-8c7b-53a6dadf243b	2018-06-27 14:02:16.382+08	2018-06-27 14:02:16.382+08	1f491d6b-c57b-44a7-a799-a92a15e7f5e4	b16adb70-fe65-4609-a7fd-923e42da0e38
031c59c9-a278-4a92-8f18-8d1525bc0dfc	2018-06-27 14:04:58.302+08	2018-06-27 14:04:58.302+08	fa9efaaf-b27b-4f77-90c3-fa0f903666ed	f2308778-87af-4b2b-8892-031d77a4fdb2
5a8a229c-bed1-4572-a59a-2964f2e4c832	2018-11-17 14:04:21.047+08	2018-11-17 14:04:21.047+08	92400a19-a4cc-450a-973b-f0c0aebbade8	df977518-6bfe-4ae3-85f8-7c41d81bad29
38a2d7bf-51c1-4c13-9837-4cf4a1b397cc	2019-02-25 14:12:02.978+08	2020-04-08 14:31:46.277+08	12671ad8-5da9-4695-abc5-8dc116c5f034	5328d9ca-9004-4ad3-a806-62b8f0b5b82b
f1015fe5-1366-42b1-a73d-8af91a3be18f	2018-11-24 17:43:29.033+08	2018-11-24 17:43:29.033+08	00da1250-a423-4a89-993d-3cacb4df488c	9585b3c2-bb23-4cd5-8f4e-684ecdb933f2
b00dd3ad-ad4b-4a35-8c8a-927511e266ea	2018-12-07 17:22:03.992+08	2018-12-07 17:22:03.992+08	4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329	2e606b06-2574-4c66-807b-3c1c74604834
5d4d387e-659d-463d-9fe1-87cd27729de5	2018-12-13 15:33:20.407+08	2018-12-13 15:33:20.407+08	61f238e3-e9dd-4c9c-a451-114ab6682354	5ac785dd-b1d2-4072-ba26-4177d113aaaf
4d09fea8-3831-49ec-bd7a-08749f8262b7	2018-12-18 11:24:08.337+08	2018-12-18 11:24:08.337+08	54be724a-6015-4ee4-a08d-fe8b8202cfc5	81dc439b-c906-46bf-83db-a7fa8b7e3aa6
5d382def-0340-439e-a1d5-9949800e48bb	2018-12-20 15:04:51.316+08	2018-12-20 15:04:51.316+08	ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94	f671f747-5450-4d50-a757-fc74e75fe965
d79e677e-2e89-439d-ade8-7eba430f990b	2019-01-07 17:23:55.796+08	2019-01-07 17:23:55.796+08	9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7	7e40c49c-634a-47a1-bfb4-5d363af2cae4
7b41a758-ed3a-448b-b7bb-43ac3c39c915	2019-01-14 15:28:21.368+08	2019-01-14 15:28:21.368+08	e37bdd04-f3eb-47f4-b174-70d573239a00	a7b23026-3fec-406a-a8a7-66ad91e531bb
70cfeb0d-a1a1-4ddf-8663-1d71951e7da5	2019-01-18 16:57:11.317+08	2019-01-18 16:57:11.317+08	cf950c05-2642-444a-bda7-45be85b50ddc	a09fea95-bdee-4b25-b46d-ae2352c44000
d4d114b7-d240-4f78-96b9-338adc053f15	2019-01-19 17:19:28.199+08	2019-01-19 17:19:28.199+08	10e4ca9b-2ded-4704-af44-5ed38e7a8254	d1951ebd-96f2-470e-bacb-b01b6fbfc5e6
d46b5647-aae3-4c37-b144-bca1cf2b1273	2019-02-25 15:43:07.05+08	2020-04-08 15:04:15.878+08	b62a52ce-bcd3-4156-89d7-83ab453c3121	ca7f0328-2a8d-4c73-b9ea-bd1565e548e4
b974c11e-c77b-4be2-a2e8-d944e3125d05	2019-01-24 11:51:28.176+08	2019-01-24 11:51:28.176+08	3ce74ad5-66e4-40b3-b5c0-52653cbbca87	d407820e-e638-40cc-ba07-3175574f34f7
9734d8cf-3a32-4bc1-829a-549a7cc6daf2	2019-01-28 10:50:57.674+08	2019-01-28 10:50:57.674+08	6e91a917-6930-48a9-8a2e-69cd0a42dfde	a30ffb26-d605-495a-9e8b-00a0c6b534ad
66fbfbbf-e1cc-4376-b774-6120dd7be435	2019-02-25 15:43:07.029+08	2020-04-08 15:04:25.191+08	fe7497bd-7016-4a8c-abf8-23ec8981746c	b00d5e02-4a5f-4617-a233-3c6951697271
9a6636ce-0c14-4a13-a547-ce1f7905c6c4	2019-02-25 17:37:56.457+08	2020-04-13 11:49:11.15+08	fdd035c2-82b6-4d53-b138-ddb5ff38be70	460c8158-6935-498e-bf3e-3cf869867fdc
875aeb12-64ed-4b4b-a91a-e4d3b03f06c6	2019-02-22 10:41:23.7+08	2019-02-22 10:41:23.7+08	c90eced6-4535-4b01-88a3-047c445cb5d6	90721552-469c-47cb-a77e-4d3bfffbf6c5
466c9db6-6d8a-4283-9a49-0b669d954a0e	2019-02-22 16:33:55.431+08	2019-02-22 16:33:55.431+08	f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d	b5e97809-0399-4ad9-8b8d-340b9d23a997
4a9c8a2f-8acc-4d9f-b908-456cd447bd0b	2019-02-25 11:41:29.928+08	2019-02-25 11:41:29.928+08	4b01a62e-4b72-477a-b628-3e60ab9eba3c	33472f2d-14b8-4de5-9b74-435c692ec885
9f794a2a-0593-48e9-84a6-9c2ca6aac4d0	2019-02-25 11:41:29.961+08	2019-02-25 11:41:29.961+08	b0322703-c5a9-4310-a6b7-0311a4317136	33472f2d-14b8-4de5-9b74-435c692ec885
05870ece-eee9-4382-b924-f0aa0834579f	2019-02-25 11:41:29.992+08	2019-02-25 11:41:29.992+08	8ea33ec2-98a7-487c-a662-18151711a0b4	33472f2d-14b8-4de5-9b74-435c692ec885
c58af01f-7f7e-4dd8-b8c2-adb0bfe17bfa	2019-02-25 14:12:03.008+08	2019-02-25 14:12:03.008+08	f076544b-acde-440a-a44f-ff4468e3cdac	87b6ed6d-58cf-4afa-ab03-be2ebce8c7fb
f5737ef6-e9ef-4cef-8354-17b0f94064b3	2019-02-25 15:43:07.007+08	2019-02-25 15:43:07.007+08	2fc50d79-7cc8-477d-ad02-7c457e527084	e508cf8c-eafe-4269-a3e4-64fc8707d942
88eddd9c-9888-4d3c-8321-b71c36933836	2019-02-25 17:37:56.431+08	2019-02-25 17:37:56.431+08	6ed5b377-588a-4ba0-bbd8-f528726aa520	26cf03db-09ec-481c-a58e-60b4deebfa0b
0edc830d-5a7f-4f04-9ba7-a3ecbcac12c2	2019-03-15 17:00:45.464+08	2019-03-15 17:00:45.464+08	dd73a8bf-daac-40fc-82c3-bb5caad67d03	3ddbbbb3-9d0d-4cac-8f44-8b395cd26afa
e428e62c-7564-48a7-8896-2ddee51ac0b2	2019-02-25 17:37:56.484+08	2020-04-13 11:49:19.166+08	3b999acc-dc02-4c57-ba1b-2bdd8d971f72	3b2a1939-ab5a-4ecd-99f3-6f48b3cf1b1e
a713a4ac-32e0-4097-89c5-749b98e9431b	2019-03-25 11:32:57.585+08	2019-03-25 11:32:57.585+08	b76eb9ae-1b5a-4bce-91a7-93b68845f356	31c10c64-1f65-4f48-83c9-36df059d2801
10b50b5e-ba9f-4397-88f1-4e8d451a7ad6	2019-05-31 16:22:45.621+08	2019-05-31 16:22:45.621+08	55d1faba-c22b-4730-a51c-1979541f342b	f204c0b8-74ab-42e2-a6fd-57944219dc48
cc097f82-9659-4149-9a2b-8bc4eb5e22dd	2019-06-05 11:07:53.625+08	2019-06-05 11:07:53.625+08	92799800-ca0a-48ad-a83b-c63c89b7879f	31c55214-5327-487e-8633-a4c329e1a312
c86064a3-baa7-4fed-9d86-2623f613e990	2019-06-11 16:18:29.007+08	2019-06-11 16:18:29.007+08	5cec0e8b-58df-4473-b3d7-4d524e763830	d6b7c19f-46c8-4909-b997-d9ccec20f591
7de3b6fd-700c-4a61-aaa7-a612f901d2e2	2019-06-27 09:35:29.151+08	2019-06-27 09:35:29.151+08	936e35a2-2147-461d-8713-c4149317fb19	1541e9b2-2463-4eb4-afab-8f459c685039
2547b3bd-5183-4ec3-a28c-6c0ae1efd073	2019-06-27 13:53:35.196+08	2019-06-27 13:53:35.196+08	ccf2e82b-5de5-4291-849a-390a0c957088	d0f0f4de-46ac-4e07-8456-f468a54c9924
cfabbc40-5c38-479b-95aa-522a80c573f7	2019-06-27 14:07:45.245+08	2019-06-27 14:07:45.245+08	02bedcab-6954-4215-aa33-80fd484bda13	a3ab42f1-102e-48f9-a2f4-2909dfc0a17e
688b9ad5-8d49-48df-87de-13546f0a24fb	2019-06-27 14:28:06.375+08	2019-06-27 14:28:06.375+08	ee3cecd5-4646-4a7d-8ade-1993d81887e4	044e1eb3-8c5a-4dc8-9614-dd62a06cc150
6213f4e4-0d71-4dbb-a3b4-7209575ad10e	2019-07-04 10:09:53.3+08	2019-07-04 10:09:53.3+08	04f5706d-f963-435b-9341-68c5249dfa02	713325ff-e2f9-46b9-bab4-b34d6b901fa9
06703d43-365e-4a63-a1c9-d7a9c148c6cf	2019-07-06 16:53:20.952+08	2019-07-06 16:53:20.952+08	76e98b1c-597d-456d-aee5-53d0b95466f0	0821e034-0233-4466-97ad-13ab408fabcf
8692e32c-a5ba-4ec6-9c7d-00a170987c85	2019-07-06 16:53:20.962+08	2019-07-06 16:53:20.962+08	2b4f0f98-d9ce-4941-8970-dd1bfed3512d	0821e034-0233-4466-97ad-13ab408fabcf
d99bf106-f7ac-4e69-969d-ed34604d6a27	2019-07-06 18:56:53.642+08	2019-07-06 18:56:53.642+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	5b242533-ee4b-4858-b1fa-3a64373c8be3
e2a0bbd5-eeee-4697-a74d-10c379ee1f63	2019-07-09 15:01:31.98+08	2019-07-09 15:01:31.98+08	c61698d6-e360-4e40-a141-960ee17d0aa4	f406feb9-ffd0-4a31-9014-b8556f83b6df
8685a81f-e783-456c-a1a2-a44d22c8c521	2019-07-09 15:10:12.104+08	2019-07-09 15:10:12.104+08	6ed9c2d8-4e87-43ed-b925-94a17a305bbf	a5793abe-68ce-4ca1-8f10-4a1361eab80a
9f24dba3-32da-493d-8fd1-f00e1dd8ce16	2019-07-09 15:28:05.918+08	2019-07-09 15:28:05.918+08	dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91	4373927e-eeba-4ddd-8060-3ce22d76a092
3a3110dd-1de3-463b-a9d3-62fbd85bd040	2019-07-11 16:57:42.225+08	2019-07-11 16:57:42.225+08	cf9e3897-d9bb-4d08-b13d-18e90e48a3ac	3da6f3aa-036e-4f89-a50b-9fa2081ec912
062730c5-1d94-42e4-89c4-79ad57a4389f	2019-07-15 13:39:28.99+08	2019-07-15 13:39:28.99+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	a806dc77-31eb-4de2-8dee-3003478abefb
3ac36f01-0555-4785-b90c-1e343b14e6f7	2019-07-15 13:39:37.018+08	2019-07-15 13:39:37.018+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	a806dc77-31eb-4de2-8dee-3003478abefb
747ee321-c4eb-460d-bed9-81ce8ab5b73b	2019-07-15 14:04:02.938+08	2019-07-15 14:04:02.938+08	1961c932-469f-4e15-8dee-38cf1f837d35	4085b18f-dd96-4757-a9c9-baa3f2b6a431
4dd6a4d0-9819-4455-8a4b-48756b77af3e	2018-10-11 09:06:27.309+08	2018-10-11 09:06:27.309+08	6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9	7943dd9a-0f5b-44d8-a527-2aa409ceb961
dec45f01-17d0-4de8-b79f-b3a6eb4363a1	2018-06-29 10:32:43.663+08	2018-06-29 10:32:43.663+08	cc7aaee4-9939-40cc-b584-234221061c01	3ea1c8da-5416-457d-8303-88e25c7b1c37
3e5f9c3e-4a16-49d7-9299-2c8e082e81de	2018-10-30 22:17:59.348+08	2018-10-30 22:17:59.348+08	02e056da-0fdc-4477-bdb1-f52f28a1f6bd	ba2ba9d0-be95-455b-b670-307aef99bbc5
3bd27954-7429-4a36-a815-1caaaa5a83d3	2018-11-19 11:02:17.787+08	2018-11-19 11:02:17.787+08	067d099e-3d4d-40f5-8ca7-68383ffd5208	3f011ef9-77bb-401b-8290-643d74f1684a
85343d04-4d65-43f4-878d-3ef7801e392b	2019-12-26 11:54:20.616+08	2019-12-26 11:54:20.616+08	906764b6-5b7f-4cf0-a4a8-915452e6acc7	accde3c5-22d1-4547-8075-3f5316563e05
d71f5381-3730-4f45-9c09-b4750487e5fa	2019-02-25 15:44:37.208+08	2020-04-08 15:01:12.251+08	0518af3d-a054-45a0-815a-8ed6c3833d46	96af8bbe-5a34-4604-83e1-99d7e098b3a7
84b8ddb7-5797-4458-b6f7-d5fff4aec9db	2018-12-07 17:22:04.469+08	2018-12-07 17:22:04.469+08	1065f451-14e7-45e9-8d0e-511f274b97c4	2df285e9-afc2-451a-94b0-6d7435d7005a
3c1b8ca8-d3cf-4b08-bb98-5c5dc81a7cc7	2018-12-14 15:48:01.109+08	2018-12-14 15:48:01.109+08	4584d50a-bebf-4089-a9a1-adff635a4b75	b0d8fcf8-afdf-4196-88de-97ac045c0f54
9f86058a-4c2f-415c-a059-e6d67b565dba	2018-12-18 13:51:36.315+08	2018-12-18 13:51:36.315+08	2fd829ec-a887-4746-91ce-1c3ad494805d	44af48ad-3421-4c1f-8bca-d1d7d5e70909
4aa0fddd-1410-4f07-80a5-4c971dd1b3cd	2018-12-21 15:20:51.752+08	2018-12-21 15:20:51.752+08	7f040f7c-5295-47e8-9ad0-e60c4bbb45b9	d3eaab75-aa06-4cab-95ac-328dbab44be9
d5755583-845c-4ecc-bc9e-03f24278e1fe	2018-12-24 11:48:02.128+08	2018-12-24 11:48:02.128+08	f50640f2-9144-4d3a-ae14-f042492a899b	85ec3e83-333d-44b7-8261-b91e9606e9d5
72c98b67-4433-40a3-a020-6f4ddad1067a	2019-01-07 17:45:50.873+08	2019-01-07 17:45:50.873+08	98c8c785-f229-4409-b2a6-a1e57af72b26	0caf32b7-082e-4aa6-bd8a-f6a177eaae26
fb13da79-a514-46ed-af3a-548e8bdb62d8	2019-01-14 15:31:37.076+08	2019-01-14 15:31:37.076+08	20e441d3-19e4-4f48-bf5a-36448db75de0	6ad120cf-00c3-4c2a-a056-5ea5ab387e2d
b37b74fc-2693-4fe8-a8cd-5cdce49b1f76	2019-01-19 09:49:48.916+08	2019-01-19 09:49:48.916+08	b2d20518-3d22-4730-9121-735650110838	8bdc1373-d05c-4dec-a5b5-eeaeded2b8a0
e7ce8a3b-6b72-4a37-b8f6-d346d739831a	2019-02-13 09:47:57.999+08	2019-02-13 09:47:57.999+08	fd42cfd6-747c-4ac6-a35f-ad9e510fddbb	25d28c61-1984-41c9-9543-be1517393c6e
dcd3bb0f-f93e-42b5-9187-8bdc6345d453	2019-02-21 17:19:51.497+08	2019-02-21 17:19:51.497+08	cce19766-fd89-4a5d-926f-50ede055ec49	90721552-469c-47cb-a77e-4d3bfffbf6c5
97c0371d-1028-4a9e-894e-a3743b52f318	2019-02-25 15:44:37.164+08	2020-04-08 15:01:19.935+08	aab98040-a906-4f79-a6df-74df5b9849bc	1ff7c3fe-925a-4554-9f06-dee7dfd80357
28522d6e-51db-4ca9-b2c5-562453a60a50	2019-02-25 11:42:07.397+08	2019-02-25 11:42:07.397+08	d9cbcff2-8304-4233-80db-b582ae78540c	26574d0f-9eca-4448-8d80-2dfb803e770e
5dd65546-ba20-483e-9516-4b473b008e3c	2019-02-25 11:42:07.427+08	2019-02-25 11:42:07.427+08	9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	26574d0f-9eca-4448-8d80-2dfb803e770e
d46ad06d-3a20-41d7-baa3-936a60284d44	2019-02-25 11:42:07.453+08	2019-02-25 11:42:07.453+08	2c2cd567-6eef-4304-afc9-cc14b4435240	26574d0f-9eca-4448-8d80-2dfb803e770e
391b1cff-565d-4fba-8f0a-a6c5569afe75	2019-02-25 14:14:48.91+08	2019-02-25 14:14:48.91+08	db70825c-6666-4931-b32b-5f372af95d42	7c448417-3b77-447c-8f48-85c3554d4e49
6d78933e-7b54-4803-a0c7-85cfbb5a522b	2019-02-25 15:44:37.132+08	2019-02-25 15:44:37.132+08	6db67d93-daa9-4ef0-840f-c89dfc62abdc	b4d4a7fc-ee80-47cb-941c-661474fa55d9
8fb90ad3-d4d0-471c-a762-c7be6f9b3633	2019-02-25 16:49:51.883+08	2019-02-25 16:49:51.883+08	1b1a6da7-1ad4-4afe-b61d-321cff8c222c	437f278c-a4b7-4b5f-aa56-bd31c07374d3
e651f42c-193e-421a-bf7e-e1a0c099d971	2019-03-19 16:45:17.831+08	2019-03-19 16:45:17.831+08	c05079d4-2c90-4409-aca1-0693e27d413e	102c5517-619e-4b9f-9e4c-7cbf4437765d
8d894678-962c-406c-b6a6-361fd724638a	2019-05-31 16:23:06.846+08	2019-05-31 16:23:06.846+08	ff05da01-ca5c-4dbb-afb0-67ec5f513f40	f6b6a799-5ea9-411c-ab15-eed85c3363e7
fdc16e7d-c6ff-4da7-b83e-002759cd3e79	2019-06-06 17:24:55.453+08	2019-06-06 17:24:55.453+08	28c09a41-f505-4cf5-aa80-131823bd65fb	c7a4e95a-ab30-40b7-9706-97af9fd565f8
8c16f07e-b262-4841-bdbd-97d2cb24124e	2019-06-11 15:06:43.24+08	2019-06-11 15:06:43.24+08	c7963d62-908a-4e24-a229-7de180511e96	8f62138e-2ba9-42e6-960f-0c9996e6bb32
2fd51fd9-087f-4abf-84ec-e335303b48b5	2019-06-11 15:43:02.192+08	2019-06-11 15:43:02.192+08	57e7e768-2d0a-44a8-93df-21edd1f6564f	f0f85539-ea18-4c2e-b967-245a0d7fadca
204668b3-584a-4e01-b27c-eed0ca0e55f6	2019-06-11 15:43:02.197+08	2019-06-11 15:43:02.197+08	57e7e768-2d0a-44a8-93df-21edd1f6564f	b3e99a42-2843-488a-9745-1be8cd4250d9
3f094300-7ef4-419e-844b-c36ee4a6256b	2019-06-11 16:27:10.97+08	2019-06-11 16:27:10.97+08	370eb26a-f879-4a01-a515-1b20a92c80f6	ad1e9529-19f6-4407-b675-4625883988ef
ba80f23f-4229-4856-a16d-b17383c197cc	2019-06-11 16:27:10.976+08	2019-06-11 16:27:10.976+08	370eb26a-f879-4a01-a515-1b20a92c80f6	d3b80e8a-111b-400d-8894-0b4ea74fc09b
e78320d9-e5b4-4076-84ad-afab3556a6b1	2019-06-11 16:41:49.147+08	2019-06-11 16:41:49.147+08	faa5fb8b-d39d-4603-be6b-e70acd114c75	9a007f5b-80af-443f-ad5e-b2b897b8caf9
4854ceb3-e905-46f3-bc98-8d5ea904e06c	2019-06-11 16:41:49.152+08	2019-06-11 16:41:49.152+08	faa5fb8b-d39d-4603-be6b-e70acd114c75	83ada60d-d85e-488c-930a-b8b5e6a10aa4
362335b1-37f9-49dc-874b-a40d75d45a07	2019-06-11 16:47:18.534+08	2019-06-11 16:47:18.534+08	b76b8c94-f6d7-43f1-9831-865a733dbeb4	9b003e5b-94a2-403d-bafe-8da8d349c4a0
61147b3b-a855-4874-96d2-387cda241fb5	2019-06-11 16:47:18.539+08	2019-06-11 16:47:18.539+08	b76b8c94-f6d7-43f1-9831-865a733dbeb4	f84dd7a8-a8a7-457d-9e2f-a80a0f866200
36235314-a65e-4d52-bd78-2d354b59b96e	2019-06-11 17:11:17.122+08	2019-06-11 17:11:17.122+08	7ca191c0-8240-4dec-95bc-26b13a55bcc6	f5729179-77d7-43ba-b619-fdbffd719155
1f6ec166-c5f0-40d3-809a-ef56cc9cd309	2019-06-11 17:20:41.973+08	2019-06-11 17:20:41.973+08	c75c257f-cdab-4167-a872-c06243b27f74	50837f7d-3037-44e0-a8c4-99aa7c6c6d24
b4604971-ac63-4d8f-adc0-6f27c4f638c6	2019-06-11 17:20:41.977+08	2019-06-11 17:20:41.977+08	c75c257f-cdab-4167-a872-c06243b27f74	d755e19b-5182-44e4-8053-3c670552773f
723efb62-97a5-4754-af31-38d98fc43e57	2019-06-18 11:02:55.452+08	2019-06-18 11:02:55.452+08	fb325f67-e901-440b-a14e-2f8e04c53e9b	7d40d4ad-ac31-4eb1-b9d8-c7fc8844ded5
ee17d823-37f2-4430-9992-febc31a675b7	2019-06-24 17:08:20.53+08	2019-06-24 17:08:20.53+08	69be9b12-023e-44a5-bcb9-04a192f257b7	5aae81c0-30fe-4213-a681-58a6233419b9
3e72a2a1-d28e-4f78-800e-d69518681e95	2019-06-25 15:49:19.316+08	2019-06-25 15:49:19.316+08	75fb03c3-cdd0-48bb-8be7-db553357ef1e	8781643d-2409-419a-bef2-9fc163b064c4
bdef857d-9dbc-4b67-b176-f125c7b97dcd	2019-06-27 16:11:46.646+08	2019-06-27 16:11:46.646+08	c164c829-5622-47f6-8164-a992be4b9e2a	84c28951-d376-4903-86d6-3bc2c3418056
f22d6687-1e99-43a3-a81d-6a4e022788a6	2019-06-27 17:17:15.054+08	2019-06-27 17:17:15.054+08	bf758132-c5a1-4622-a2a7-38359c9cc0c5	8fecc0b1-a948-400f-bcf4-af4cddf275a7
702fd64f-499d-4b5f-b32e-372a3e6748a5	2019-06-27 17:34:29.083+08	2019-06-27 17:34:29.083+08	fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac	cefad036-368d-4a98-8734-002ed67fc3a1
198159d0-bca7-4cb0-b19f-235e24a5b1b0	2019-06-28 13:51:13.412+08	2019-06-28 13:51:13.412+08	9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6	ae5df136-4e9a-4d47-8da8-203c182bd2ea
f94df4bd-062f-49b4-927b-50b0faf65ea6	2019-06-28 14:47:16.412+08	2019-06-28 14:47:16.412+08	f52408eb-cc49-4576-ba3d-726ab9d6d9f5	43b0b89f-672b-4eba-b75c-7b79070559a3
7830daf4-3d55-47e0-8bc5-6783e32b1e94	2019-07-02 15:41:32.31+08	2019-07-02 15:41:32.31+08	35ec137a-ea04-4c81-bbaf-23ddae650c0e	a0c5947b-4714-4987-84d5-da7399f0e29d
058fdab1-f858-495c-ad1c-f76d046449b1	2019-07-03 11:33:56.791+08	2019-07-03 11:33:56.791+08	418a4cf1-2537-4f0c-ad3d-d7752a5957a8	798f8501-1446-455c-82cb-c27ad5f882ff
57b09677-e609-4aae-96fd-90aa6cac51ec	2018-06-27 16:44:09.54+08	2018-06-27 16:44:09.54+08	b4e49abe-4948-4f36-978f-8804c1531ca1	cfba0786-e932-437a-8f2a-c15bde9b3e1d
4c978244-1651-49b2-ab1c-47eb313f305d	2018-06-28 16:24:22.565+08	2018-06-28 16:24:22.565+08	419116d4-4614-4d66-bc30-ce2394eed251	6924cdf6-5d7c-4a36-a9b0-cdb858d60861
9bcc7a85-0ce2-4227-8d04-e99251b1aece	2018-10-31 18:04:59.747+08	2018-10-31 18:04:59.747+08	27a9d353-a3e8-4669-97b5-f467e52007c5	3836aef4-bcdf-4260-948b-77c48608f2d5
769cffb6-4816-499c-bf6a-bab67030c4e7	2018-11-19 16:52:15.454+08	2018-11-19 16:52:15.454+08	bebf7077-da40-449d-99fc-9340c39d6231	7a9d917f-ec9a-4777-aa07-456ef2d00ae3
d20d25d2-b750-44d8-9d1c-71d088c9c064	2019-12-26 13:50:05.516+08	2019-12-26 13:50:05.516+08	563028c4-ce25-46d9-8dc5-f32204df7ff4	d76ad255-098e-43b4-b776-49cae3872d7e
c2adc805-56f8-4e2e-bb19-a9dde59da965	2018-12-08 15:12:26.605+08	2018-12-08 15:12:26.605+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	278e2327-057d-40cf-8780-7cd3af707ed1
56f87147-73c4-4c6d-86d3-68d411c26792	2018-12-14 15:49:05.178+08	2018-12-14 15:49:05.178+08	a7e720b6-f0ca-4a8d-aabd-18b8c8825303	2bd76fa8-aefd-4e77-a1cf-e5f65232555e
0335de47-fc12-48fa-8141-3fa5b5884c00	2018-12-18 16:35:54.047+08	2018-12-18 16:35:54.047+08	f8c7d826-f0aa-4b53-a793-833a2e913699	de0e5741-ccb8-4de2-b764-fba43324662c
55c0afd8-23a8-47ce-86f5-38a8822bce14	2019-12-26 16:38:25.395+08	2019-12-26 16:38:25.395+08	c91efe30-d394-454c-9fd0-8e95a43e79b2	accde3c5-22d1-4547-8075-3f5316563e05
4d61eb6a-bfee-4596-91e6-8c8852d66354	2019-01-08 15:12:49.583+08	2019-01-08 15:12:49.583+08	7406dcb2-9b68-42e3-9178-90ac77d39703	5f4173ab-b59f-4fa7-9f55-9e0a66adf6c7
0d2668ae-9bfc-4d2b-a9b3-41f7e36f3e69	2019-01-14 15:44:06.692+08	2019-01-14 15:44:06.692+08	ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	2fcf52d0-80b8-4b81-9bed-b0a86eb903a8
6c68e67f-2202-41a6-a88a-5df65a791a6a	2019-01-19 09:53:06.274+08	2019-01-19 09:53:06.274+08	e65346cf-f6d0-41a0-a1d9-e3644ea50971	04deffaf-f121-45f9-bea1-d4723e651eed
036b1a0a-2829-4dff-a396-f6a05b71f3bf	2019-12-27 15:04:30.641+08	2019-12-27 15:04:30.641+08	6831e820-59fa-40be-a01a-013d4aa717a4	3375723c-28e2-4d43-a5c2-e10974373d01
63016d3c-b32a-425a-9e40-965b2696d01f	2019-02-22 11:35:12.165+08	2019-02-22 11:35:12.165+08	ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	b2586eb2-81e4-45d5-8232-b6d874663056
86728778-277b-4fcd-a0d7-d09f0924c566	2019-02-25 14:16:02.483+08	2020-04-08 14:30:35.808+08	2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	d176a150-ed6d-4e82-9ae0-cabede0f9d86
5c063c59-b4f8-4c2b-bd79-02fbc6eb1a4c	2019-02-25 11:44:07.917+08	2019-02-25 11:44:07.917+08	7845401a-4640-4465-987b-69f630af6b8a	cf726343-afa9-490a-8e8d-3b41dc1b77a6
c8a746cf-5478-441e-9258-4e079654eb56	2019-02-25 11:44:07.945+08	2019-02-25 11:44:07.945+08	67a68865-ee21-4627-b68d-98ed991689ad	cf726343-afa9-490a-8e8d-3b41dc1b77a6
df90c72b-c082-4296-9c0b-54b021b23f30	2019-02-25 11:44:07.97+08	2019-02-25 11:44:07.97+08	720eb976-fd1d-4947-845b-15b344e808f3	cf726343-afa9-490a-8e8d-3b41dc1b77a6
a96e96a4-ac77-4b25-ab76-495261e513d3	2019-02-25 14:16:02.502+08	2019-02-25 14:16:02.502+08	8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	03420b4e-17dc-4a2b-a3be-fec86c8912ce
6cea7ff7-aaea-4e0f-887a-65d63c149b31	2019-02-25 15:46:09.603+08	2019-02-25 15:46:09.603+08	99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	d410a566-edaa-4fd8-9f08-2b167893d872
ee3b612f-dd3b-4da9-9f0a-c651f545afaa	2019-02-26 16:29:15.947+08	2019-02-26 16:29:15.947+08	c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1	afdc9171-1256-4338-9615-016dd33a24cb
17b887b5-2e9c-4843-839b-6c47f68abff0	2019-03-04 09:18:37.122+08	2019-03-04 09:18:37.122+08	42aef21d-9dab-4067-bd61-4f17fa24d286	aef73585-33cc-40f1-8f4d-6d1d09e59434
8a5da295-cab4-4e0c-a506-36fba603e90a	2019-03-05 13:25:13.307+08	2019-03-05 13:25:13.307+08	d28c3b83-f55a-4a81-8513-36abc92c3b7b	0fd4d11c-fd8a-4e3d-8957-41e4c1690319
44dc746e-d5d4-4abd-a4f6-9a48ede3bbf6	2019-02-25 15:46:09.669+08	2020-08-17 14:08:54.39+08	fbaf320c-de3d-4cdb-93f1-960973d87747	5f07c93b-7d9d-4756-b1ee-849b6a29cc1a
f02875f7-b2d2-4458-aa48-241facf67337	2019-03-08 16:51:58.645+08	2019-03-08 16:51:58.645+08	afa1f203-3267-41dd-9442-974317e28ac3	30367b45-ab92-4ddf-ba29-1625b347c30a
8a216a3c-6a77-45ae-9031-488991593c88	2019-03-12 09:49:51.418+08	2019-03-12 09:49:51.418+08	2e73374e-14c1-47d9-a0ce-f6d05b317930	786724c1-acde-4ce1-99b0-44ffb417add2
8f4292cf-6b0b-47d0-a900-bc113b9bb9b6	2019-03-14 11:21:14.956+08	2019-03-14 11:21:14.956+08	935629d5-3f9e-4001-8694-cd11f39b6061	8530041f-38d8-47a4-b52f-4fc03a11bd29
c323b4ac-3a8f-43f4-b852-ffb5a876d694	2019-02-25 15:46:09.64+08	2020-08-17 14:09:27.345+08	f832c684-9c7c-484e-b547-a4b717644f8a	be6b7a73-02b2-4e03-8438-1d2851265d3d
f86e10c7-3e15-495c-a57a-a78ba9f6f7ba	2019-03-22 10:33:16.443+08	2019-03-22 10:33:16.443+08	e80c3c1c-ca28-40d5-ab2e-705980583fb8	2ff60b54-bc1a-4c20-8396-07b7312fe984
eb032a75-994f-49e3-935a-5923c129d459	2019-03-25 11:18:25.748+08	2019-03-25 11:18:25.748+08	293fd074-905f-4d2a-94d2-a28d4b06397c	80628eea-49ed-4c2f-959d-2deb4b670627
5a062369-f544-4630-b83b-aff90a734907	2019-03-26 15:58:52.808+08	2019-03-26 15:58:52.808+08	1f518f12-461b-4d6b-93a4-af3c317ae85b	6ff79b88-32b8-4293-b82e-ce1e9c1102df
5ee867bd-894a-4e57-8b55-79d530893ba4	2019-03-27 09:42:22.623+08	2019-03-27 09:42:22.623+08	9c250481-ece6-48ba-a91e-5d057fdb9d5d	ec1af40e-00ed-4917-b74a-8e36bc87adcd
a31682a7-6eca-4ec3-942a-0b1e70982d1a	2019-03-27 10:17:10.464+08	2019-03-27 10:17:10.464+08	9842fe65-98a7-4396-9ced-fd75761872b7	b5f9869d-556b-4c1e-a022-5e1dc1538144
d533a9ce-28db-4c57-897d-a62d18eccfc9	2019-03-27 16:22:34.485+08	2019-03-27 16:22:34.485+08	ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7	9f417292-8eda-4d81-99da-f675b85d8d39
d2ca3832-7505-40d6-9fb9-66c94d4bcb09	2019-03-28 10:30:24.031+08	2019-03-28 10:30:24.031+08	9df88715-b993-46e1-bace-b79b1f787292	499a2ec5-f993-4fdd-b651-0be24400e324
687a13d7-7079-44f2-8ae6-100f4e350092	2019-03-28 10:30:24.036+08	2019-03-28 10:30:24.036+08	9df88715-b993-46e1-bace-b79b1f787292	4ab52a1f-1563-45ce-8b15-583cd47faaa5
60d7ae8b-5614-49a4-a150-1580d97b8323	2019-03-29 16:40:02.74+08	2019-03-29 16:40:02.74+08	e11bffba-cbad-486c-aeea-b773cd243628	919a897f-db8b-44da-b80a-4a74d14f6bbb
068ebe5d-1b34-4019-80fe-e2ab1c97b38e	2019-03-31 14:16:47.8+08	2019-03-31 14:16:47.8+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	7c90e6f3-06b9-4f03-b54e-bd1fa5f4f85f
8d19ac38-949d-4be3-bc66-b9e2579f5ecd	2019-04-01 14:38:39.936+08	2019-04-01 14:38:39.936+08	52790293-e9cb-482d-a5a4-a437cfc18b3c	a1670826-5255-49b6-b248-67de89c66086
97b954c4-f97c-4d80-9c04-2f9229ff759f	2019-04-08 14:49:04.689+08	2019-04-08 14:49:04.689+08	9bc088e5-638b-4304-8130-ee18b2580bd8	30367b45-ab92-4ddf-ba29-1625b347c30a
1469f768-0ee0-46e3-878e-6834ca7565db	2019-04-10 15:48:52.516+08	2019-04-10 15:48:52.516+08	e44e3794-75ca-4e19-b989-396cabdff179	4065ce5a-e702-4f13-83aa-02243875fa79
6aee11e8-88a3-4b14-97d2-9082a2705df0	2019-04-10 18:28:39.262+08	2019-04-10 18:28:39.262+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	50cf0eba-6f77-456b-b29c-50f90e252f71
8a9ca6a7-7dbe-49b9-896d-ff3e9cc4613b	2019-04-10 18:28:39.266+08	2019-04-10 18:28:39.266+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	005dea14-47b9-4c44-9e04-4ea66c336968
e1f900f5-7b84-4615-ac0b-b571d239007e	2019-04-16 09:09:09.745+08	2019-04-16 09:09:09.745+08	73b4f51d-68e2-4fb4-a8a9-162f643d1983	1cd100fe-470d-4bbc-a445-ec257fdaedb5
2b08c50b-e5e0-4d77-b38f-d22cbb5a1a9e	2019-04-17 15:07:58.44+08	2019-04-17 15:07:58.44+08	d4965875-354b-4294-87f4-c4ba9f9260ab	f1e557ba-74ac-46bc-b1b2-5f117af385d3
29e74436-9c19-412e-bb7e-0b14d0a4390b	2019-04-18 11:02:51.801+08	2019-04-18 11:02:51.801+08	7fa0305f-807a-4541-8615-4ad975b73518	1c2ce94f-c296-45d7-90e9-4ae2cfad5aee
1dd7b211-0c17-49cc-b408-c82d644b2a59	2019-04-18 13:54:17.292+08	2019-04-18 13:54:17.292+08	1e436fa9-3d57-441a-b498-4dc107684e1a	4467d9de-7f7e-4ba0-85e1-9f1e821fad35
aeef348d-2a6d-4efd-a43c-8cdb79e94f55	2019-04-18 17:58:14.594+08	2019-04-18 17:58:14.594+08	c437942e-6dd8-468c-81d0-ffed012878bd	c63367b4-3f00-479d-acb9-63374d61e0ef
aeefd120-7b38-4678-a65c-6bf9ce3ae462	2019-02-25 15:46:53.814+08	2020-04-08 15:00:13.704+08	8b2b42d5-d6c3-4b76-ba91-d422163d96b6	26672437-afc7-40c2-9f69-bb2ff009e0da
4d3809f3-bf25-4afd-ac84-144004287a06	2018-11-01 14:34:05.148+08	2018-11-01 14:34:05.148+08	abcf8bcb-b863-4219-b7df-9f5ac18ccaf1	545579d9-9935-4629-a62a-a6dc09848c44
5e5837d3-316b-4183-87f2-c9a6e6465ee5	2018-11-19 16:52:58.188+08	2018-11-19 16:52:58.188+08	6b13c027-dfe8-4dd3-ae23-c5266b03d77b	533b75af-c0a0-4e4a-bdba-630ed0c9fa4f
f960f482-f6af-4251-b245-91afa2b07800	2018-11-26 11:43:09.706+08	2018-11-26 11:43:09.706+08	75e11f44-f4d0-45a8-b1b9-6c80ae95941e	ae1ec7b9-1bfa-47d0-b4f9-7f1f90dab416
790cfadf-3b93-4e63-b8d2-81bbf1a12675	2018-11-28 10:42:00.899+08	2018-11-28 10:42:00.899+08	59ffcd16-077d-4dcd-9e27-9b85b83b6ece	a1fd0bc0-392b-4ffa-9460-997e6df4a464
ea26ba98-9f1a-41cb-bcc2-a342912f33ca	2019-02-25 14:17:43.285+08	2020-08-17 15:07:31.4+08	af8ad166-474f-43bd-83c2-9f6082f78eae	4248df69-024d-448e-ad68-9699e2a2f826
4a50576b-7bab-4540-8363-61c6a1d1a92a	2018-12-08 17:37:32.884+08	2018-12-08 17:37:32.884+08	0437f985-a7fc-497c-82ce-fda992d3a8d3	3c3d09f2-74ae-4f10-89ed-7936e63c1757
93275aa1-509b-43a0-808e-b5d191e09e40	2018-12-18 16:35:55.168+08	2018-12-18 16:35:55.168+08	fe292a77-3306-4e04-9708-072c060f3e74	5baa86e2-f207-486e-a510-137b3b367704
51299adf-0521-4d7c-8eba-917dc092beb5	2018-12-21 17:01:52.156+08	2018-12-21 17:01:52.156+08	12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452	06120084-e5b4-4810-a74f-44f86005fad1
71566b41-d55a-4a49-a704-186de486c7fd	2019-01-08 16:04:57.719+08	2019-01-08 16:04:57.719+08	e3ba8196-3d34-4b50-9cd5-866ad57dae8e	b194ce55-ccc1-4265-8dab-a705947e6817
25fa2ebe-e2a5-4bdb-af30-3f6c15a84b4a	2019-01-14 15:47:03.746+08	2019-01-14 15:47:03.746+08	b3f37406-863d-441d-80af-d7f79747ca0f	f10cf6e2-3599-438c-9f98-8fa73bfecd62
23faeab5-a6eb-4838-9141-ad24bda0bc28	2019-01-19 09:54:40.597+08	2019-01-19 09:54:40.597+08	c7d0b1b1-3264-4661-b682-0276be62ccdc	d8634a38-8284-4196-9a3f-ab3d6d1af934
3aa93983-49fa-45e9-80d0-b385481de563	2019-02-22 11:35:40.495+08	2019-02-22 11:35:40.495+08	738a6ad2-95f1-403a-94a1-8f641b2ab73f	bc1c265d-4934-4a19-9b3b-b3894639c532
e9664e26-7a2f-4064-8e31-76d49a6b0a36	2019-02-25 11:46:10.824+08	2019-02-25 11:46:10.824+08	a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	66b50554-6427-482d-9a1f-b31cace75305
063b251d-6783-406d-a7f5-91490a3131e4	2019-02-25 11:46:10.852+08	2019-02-25 11:46:10.852+08	cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	66b50554-6427-482d-9a1f-b31cace75305
c811afca-2db9-44f2-9fb3-bef958b5950e	2019-02-25 11:46:10.876+08	2019-02-25 11:46:10.876+08	aea9a199-17e2-4db3-97f7-2f38de50fb90	66b50554-6427-482d-9a1f-b31cace75305
0c36ba52-d06d-46e2-b166-828566b975c6	2019-02-25 14:17:43.309+08	2019-02-25 14:17:43.309+08	e96dc802-721b-4cf2-acc4-f3fb360feaef	5b1fc7aa-2569-4fb3-b5bb-87e91878e52a
e05e615c-fcb6-4e74-97b8-04329f102b69	2019-02-25 15:46:53.794+08	2019-02-25 15:46:53.794+08	d87ea357-e29f-4926-8589-a3e8d7f38ca2	d775256b-39e7-4c7b-843b-b040a4a8cb3f
7a9703a8-fd16-448e-9788-803442fdfe17	2019-02-26 16:39:23.451+08	2019-02-26 16:39:23.451+08	a945f27e-4486-498d-aa7b-2226787e0a8c	8a14a4a6-fd46-4d3a-a9cc-6a27d9c930c0
0a4a94a9-7366-4ae2-ac8c-b556af29d6a8	2019-03-04 11:20:58.192+08	2019-03-04 11:20:58.192+08	9081728a-4ac0-47d0-bc7d-508451fd55df	0746543a-bb5d-4868-80ca-c4469861f7c5
486c895a-b1b8-49b1-94f4-8a539f150829	2019-03-05 13:33:36.27+08	2019-03-05 13:33:36.27+08	403c6c8b-f94a-43a2-bbf5-5146ac46c2c0	811fb16f-c188-47a2-9b1e-bad008e375a3
f60b53c8-3b1a-4850-ab1b-d30c8cc71134	2019-03-06 10:43:47.029+08	2019-03-06 10:43:47.029+08	77be95d2-b89a-48b1-a68d-8af8d86899b4	f0d93d00-26d0-4031-ae2c-d9f951d701da
dce0ba3c-b6b0-4f86-9da9-8023c248c92e	2019-03-08 17:17:40.602+08	2019-03-08 17:17:40.602+08	1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064	3bfea365-a06c-4aad-95b2-33dce750cdbb
0e2a792c-f31e-47c8-9479-44910222fffe	2019-03-15 13:54:18.062+08	2019-03-15 13:54:18.062+08	0551369c-3cb4-4613-96cd-f9677b1c6662	fc258178-b85a-4632-b5f6-c6b4290556f6
b83124db-81a1-48c0-a96c-1f6359653e12	2019-03-19 10:11:54.294+08	2019-03-19 10:11:54.294+08	907b9fd5-a808-4f6e-acfb-f212bf6cf6b3	c7f56265-3127-4b55-b485-95134998bcd4
34f787f5-fba1-422d-9d8f-119c39ebe152	2019-03-20 15:27:52.948+08	2019-03-20 15:27:52.948+08	65be7317-93f4-4ae2-b211-e72d15a8cdb7	c7582cca-84ee-4bae-8b85-05c423f792b4
c6fa5959-0fbe-4fef-a0e9-d4f78662bf03	2019-03-22 16:00:56.139+08	2019-03-22 16:00:56.139+08	02db4ff9-b55f-459b-8d70-39b8421b3879	8530041f-38d8-47a4-b52f-4fc03a11bd29
910375cc-6642-4275-8dfb-41ff741aedc0	2019-03-25 11:24:21.019+08	2019-03-25 11:24:21.019+08	b131fb3f-83d4-4855-9b8c-419201f620ac	05eb00de-228e-42e3-8fba-4540b8a83436
91e69209-c1c2-4fa7-84e2-ea9f71b884bf	2019-03-27 09:45:06.501+08	2019-03-27 09:45:06.501+08	77edb521-5462-437e-acdb-8ca54f858468	45053113-3040-4e3f-8f51-26ce5428e17f
73856f8d-910e-42c5-9ac3-124a10e55bbe	2019-03-29 17:37:11.134+08	2019-03-29 17:37:11.134+08	fe876237-b07a-4583-befe-1013275d47de	563aa63f-70d2-47f8-b69b-5a836865f2ad
c55b7e17-917d-45ed-8905-d08cba86cbbc	2019-03-29 17:37:11.142+08	2019-03-29 17:37:11.142+08	fe876237-b07a-4583-befe-1013275d47de	6b037c2a-3f6b-4ad9-97a9-0cf50758d610
c3a49dc0-63e5-4deb-84fc-8d465679e7c2	2019-04-01 15:38:01.404+08	2019-04-01 15:38:01.404+08	2054c2dc-9c63-4fc3-ab32-be0da644efea	32465ca8-9d2e-4f6d-91df-aadc7ba1619e
6935e518-7457-43b3-a409-0aab962d5b28	2019-04-03 16:53:56.87+08	2019-04-03 16:53:56.87+08	5c6b51d6-d002-49af-9496-30fc8976c446	d830e326-46e8-46d1-8ef1-0b40a29c0a14
7cab9eef-6fea-4e3b-97c5-74db10c65b16	2019-04-08 11:04:20.116+08	2019-04-08 11:04:20.116+08	836707a8-5a16-4674-9609-c13f9f0956ff	1b35e5c9-e4c7-49dc-a957-87cf135a7271
7c747639-a395-4eb6-b68d-3f240decb8c7	2019-04-10 15:48:53.436+08	2019-04-10 15:48:53.436+08	8103cab6-bf6c-489b-af09-1ba2a278042b	12a4e096-faea-4a88-93ab-27a42d813c80
0c25ffd2-91d9-4fb8-99ae-084a203a28df	2019-04-16 09:11:48.004+08	2019-04-16 09:11:48.004+08	7cc4cc34-60a4-4ff0-a85e-015a11eadeac	610d6acd-999b-4ad8-a4e2-476a1fb53d20
055993fb-e608-49af-84d1-547b9f4ea4e4	2019-04-18 11:06:31.809+08	2019-04-18 11:06:31.809+08	d2add1b3-b21c-420b-82a4-e0c55ee3a019	332f021d-a41a-4385-8efa-6e17a2f538ee
36b69a29-d5d1-49be-ac9d-06b526129b50	2019-04-18 13:55:01.765+08	2019-04-18 13:55:01.765+08	0050e0d2-2d7d-4e7b-8871-1b0196ce7094	aca44562-f9b0-4c7c-8c90-43f8a3b57de8
74b368b1-37c6-4a9b-b580-91380187f5d2	2019-04-18 13:55:58.615+08	2019-04-18 13:55:58.615+08	fddf24e3-0068-448a-aee2-4b35af2a7e32	ba500390-3f34-454c-a11c-46a503db2d3e
f94deca2-f038-47d0-a502-d8ec7b932ef9	2019-04-18 18:47:42.234+08	2019-04-18 18:47:42.234+08	a4c5312d-d964-4c7e-9d81-79f265acfc59	ce509d06-76f1-49ac-93d5-477b9705a395
99c78a81-499e-439c-a57a-fa0c1c358561	2019-04-19 13:41:32.58+08	2019-04-19 13:41:32.58+08	aaec2c04-55f4-4c0a-b5ba-004a8b91593a	782ef934-e5fc-4964-a768-d435efa11399
c57c4efb-1a83-405a-b740-4a79b6ccd6ce	2019-04-19 13:41:32.588+08	2019-04-19 13:41:32.588+08	aaec2c04-55f4-4c0a-b5ba-004a8b91593a	a952ffd5-c302-4fa3-a7b5-475be69c08ed
5f14d7f3-e601-4c63-8167-7ea6b17c8cec	2019-05-08 19:45:04.201+08	2019-05-08 19:45:04.201+08	1725bd62-6500-4740-a03e-78fd4a2f4a53	67e8079a-e342-4c82-96d0-5519b7d172eb
b6878ae8-14a0-4a66-ad43-84bc7a0c4f33	2019-05-31 16:23:56.138+08	2019-05-31 16:23:56.138+08	64960998-d3e8-4ce1-857a-36e232a099c0	3499e091-c394-497f-bd44-36b866260f82
6ee5d959-06a9-49c8-8e58-86e8f66a6774	2019-06-11 15:50:05.429+08	2019-06-11 15:50:05.429+08	35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	4c7d09a5-8842-4f74-bc03-6b720fbbceef
a71581a4-1226-4d3a-be8a-816b5e636b97	2019-06-11 15:50:05.433+08	2019-06-11 15:50:05.433+08	35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	2a1269b0-1a5e-4abe-a183-bfd4ee301351
489cd3cc-67ba-4651-a7cb-6441e1785667	2019-06-11 16:37:25.808+08	2019-06-11 16:37:25.808+08	0af3cf99-e69f-4f81-b486-9fcb5de59fd5	fb0a2107-aa2b-450a-b87e-534e8281eec9
7ccdc88b-57c6-4a14-b84c-0d13a357e590	2019-06-11 16:37:25.814+08	2019-06-11 16:37:25.814+08	0af3cf99-e69f-4f81-b486-9fcb5de59fd5	0c9c30de-3021-42b5-845f-d418fa88b181
12d3a2e2-04a1-41e8-93cb-695a181ef4f0	2018-06-29 10:31:21.387+08	2018-06-29 10:31:21.387+08	51e73aec-cdcf-4852-98fe-e6b9bae73590	b3e74ddf-2759-46b8-ba37-a944d5a83851
9e43fdc0-04a4-4bc6-8500-fb48fc62edf2	2018-07-02 10:37:28.276+08	2018-07-02 10:37:28.276+08	e9b6e859-1dc9-499b-8656-99edd12b4157	35aaf533-2deb-46cb-b33e-0409c36b18e4
6e6b43f1-5bbb-4d68-bcd5-e5b7b6f4e428	2018-10-12 10:19:30.583+08	2018-10-12 10:19:30.583+08	9e452b06-8db9-43cf-9378-0d66ff102697	ecca3930-fdb8-4e18-8da2-448131e548b7
dc6f106b-55e0-4571-93b4-ef2363cb7fe9	2018-07-03 19:14:02.275+08	2018-07-03 19:14:02.275+08	db66c7ee-46c0-4931-ba0e-67e0a1231256	4e34c724-73e6-4bb6-8dfc-59443e627031
ef924324-c0d9-4b14-9a8e-fcdcc8bb9181	2019-12-30 13:31:31.132+08	2019-12-30 13:31:31.132+08	954de091-0b47-4d24-b0fe-38e707df4448	e9bff5bc-8f70-41bb-bb95-baeb9e055634
39f2a990-b686-48c3-8318-61eec439eb0d	2018-07-04 12:31:15.243+08	2018-07-04 12:31:15.243+08	da6a8c8f-0a98-4650-8b12-650a3e4e5914	b78cd8f6-60bd-42ad-8ee9-2fcc5603394d
5b068875-60fe-4b69-9e19-1ef447d57d18	2018-07-04 12:32:25.276+08	2018-07-04 12:32:25.276+08	27235845-4d19-4dfa-adc8-4f7b84233022	8b671122-6145-4f8e-82f6-5294af6806a1
f1691a39-21e2-46b6-96e9-c0428bddbbe1	2018-07-04 16:49:20.27+08	2018-07-04 16:49:20.27+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	c64d5f1b-a524-4a66-af36-52c23666d617
f2867735-592c-4d0e-b1d1-48623bda635a	2018-07-05 14:21:10.318+08	2018-07-05 14:21:10.318+08	ead31896-f035-4ed5-8732-526210a6bfa2	173acc1a-9b79-4918-9ea8-2f9559e65794
9b5f6f52-2497-4ac1-80cf-58cd694fb417	2018-07-06 17:14:37.677+08	2018-07-06 17:14:37.677+08	58c2aba6-dd26-4663-8976-a0b155297d3e	05f0ac13-f119-4b73-9254-18f6a4ebb3d4
46d7a300-5499-48e3-b829-5d1bb76043d1	2018-07-09 11:43:50.752+08	2018-07-09 11:43:50.752+08	4563e22f-dc9b-4a86-a3df-5cae88d78dfa	087bb313-bb27-423b-bb51-c5970d80a61d
9bab7441-9753-408b-b1bb-7995ff8495af	2018-07-09 15:29:50.001+08	2018-07-09 15:29:50.001+08	8b897f24-accb-4630-b1fa-e408e358fd35	3fc485df-6741-431d-a892-9ea00c094999
8a2d11ca-9921-4756-9da6-744e6d5fd357	2018-07-10 11:55:47.367+08	2018-07-10 11:55:47.367+08	e51184be-7ba9-4184-af5e-374044450523	43afd7e5-c38f-4263-9508-b8e06098c954
48d2a9ff-05a9-4d80-b928-7cfebcfedb77	2018-07-10 17:19:28.459+08	2018-07-10 17:19:28.459+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	d20564a8-5902-4ba7-a199-ee9c3800792a
a5c5c64b-015e-4734-ba0a-d84d1b5cd801	2018-11-26 11:44:27.334+08	2018-11-26 11:44:27.334+08	2580380e-6175-4c59-829a-f4f2c36d4af2	d24f5460-15a0-4f18-9f2e-9e9b235bf27d
0c4cfbad-8fe9-43c4-886c-97c2f315cb8d	2018-07-11 10:40:58.173+08	2018-07-11 10:40:58.173+08	72516f72-2faf-4bba-8e87-212b422ea7e7	c09c2619-45df-4f25-a765-58b559af0ea3
71946b70-9b96-4153-81f0-54eff1a59fe3	2018-07-11 10:41:40.949+08	2018-07-11 10:41:40.949+08	08e932f8-151e-489f-9035-af9518581665	29f1ee6e-8283-419a-bbab-46ea0a54a6b5
209f9f53-03ad-4c6d-b46d-6cca8e927f3b	2018-07-12 09:40:10.024+08	2018-07-12 09:40:10.024+08	99b24f8b-f852-48ef-954b-cf42248669af	18a4fb1d-a113-4ae3-81d7-405348e26869
fb60c03f-e7dc-4080-91ab-8b3ce54fa436	2018-07-13 16:15:51.114+08	2018-07-13 16:15:51.114+08	da84feba-aff0-4b51-baee-a20f8e196dfe	00b03660-427a-4ce0-a8ef-abd2cd65ac31
d75e8c25-72f4-4fc0-a149-e9f0253cedbd	2018-07-18 09:54:22.861+08	2018-07-18 09:54:22.861+08	0183e607-ae45-461a-84be-4b7fb9ef5951	291ecf10-1628-41fb-b42e-c7410d5cb72e
07e35a2d-3a45-41d9-84fb-938c8d7037d9	2018-07-18 09:56:01.878+08	2018-07-18 09:56:01.878+08	68ac3567-5ac9-48f6-9dc3-121be2e321b0	a516724a-2214-48ba-abbd-287bf60d42ed
d5d377ce-be15-431f-8da4-c8015e370cf3	2018-07-18 09:58:33.275+08	2018-07-18 09:58:33.275+08	6d7fdfc9-5735-4b35-85f6-238e34c241a0	b2835fca-b4e0-4ba4-9f6b-99f78ab6375c
29745664-a8be-491e-b31f-13c2f55497c8	2018-07-18 09:59:05.543+08	2018-07-18 09:59:05.543+08	8f5658b2-c72d-4918-8f4c-e23b57d193a6	a615e317-7a24-4c74-9d3a-5ab19299559f
b82dedd6-26e9-43ce-b376-ed914db7a297	2018-07-19 09:35:55.172+08	2018-07-19 09:35:55.172+08	5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	9a43f07c-ca17-46c9-89dc-765e4df66475
f4bb7335-e824-449b-bee5-13a5ca48fd52	2018-07-19 09:35:55.192+08	2018-07-19 09:35:55.192+08	95f120f4-02d5-454d-a848-b2749f786d6a	9a43f07c-ca17-46c9-89dc-765e4df66475
ae2d4fba-f9d3-4608-9969-295bdfeb04d5	2018-07-19 09:35:56.566+08	2018-07-19 09:35:56.566+08	b0422984-356d-4020-ab24-9dd7cdd4d8fd	b39dbca9-dd75-4ef1-901a-759dba6f3de7
e915288e-ac99-4b2c-880d-0de3ecb2ed1f	2018-07-19 09:35:56.583+08	2018-07-19 09:35:56.583+08	2858f0e6-c2cb-4a9a-9efd-46af31146b5b	b39dbca9-dd75-4ef1-901a-759dba6f3de7
7c2d9312-984d-4ee4-b0f4-1500ba3a6333	2018-07-23 15:18:06.257+08	2018-07-23 15:18:06.257+08	55950607-45e9-4bdd-a586-388468bf4669	166bc1cb-32cb-4163-987b-19b1c9b35f66
5fd4f1a5-8f34-44aa-86b6-3df9db9718a6	2018-07-23 15:29:31.283+08	2018-07-23 15:29:31.283+08	b41fcafa-5351-45f4-9151-991053b2229e	606698dd-2cbb-4401-8d88-78715c282b84
6ee820c2-3407-43ff-979c-3fda814068c3	2018-07-23 15:31:50.033+08	2018-07-23 15:31:50.033+08	dd168476-c9b6-4bdf-802c-dd55353c4f42	8a7450fa-c8f0-4edb-a4bc-f7551f4d0971
defa3079-81e5-44d4-82b4-9f2236eefc59	2018-07-23 15:34:09.537+08	2018-07-23 15:34:09.537+08	dafbdb25-384d-4431-b8b4-13396a4c781b	453c3722-5749-445a-9d0f-12b3f13c5f16
57c72f83-fd3f-44ed-b15d-4b5bf9c70bb6	2018-07-23 15:38:47.534+08	2018-07-23 15:38:47.534+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	7956fe10-dfc9-4716-9118-d3f4e8880bb5
06fe4df1-adba-42ee-8811-8c3eccd4a13e	2018-07-23 15:39:01.576+08	2018-07-23 15:39:01.576+08	f6f2bffb-7103-4421-aade-21c3c696c8dc	892f447b-ed6f-4eaa-8547-93100b1bdcf9
05cb4c26-4f09-4472-bcd9-fc6860d3b1b1	2018-07-25 09:50:10.784+08	2018-07-25 09:50:10.784+08	0d993c54-d0eb-406e-beb3-422b28dd8bd2	7deeff92-08bd-495a-9d0c-6be8709457ed
24ca982b-8118-4291-a324-69661fe3aa3b	2018-07-27 11:52:03.888+08	2018-07-27 11:52:03.888+08	56b4000a-2a4d-454a-9134-7499ca4e859b	f229b1fc-3f30-4e7a-8909-9d75182c5b3d
9a9f9d55-1505-44c6-ad00-143a2602311f	2018-07-27 16:11:26.078+08	2018-07-27 16:11:26.078+08	5c056ed2-d4cf-4083-82cc-8d7d0b564f4a	e9c82794-1f38-45a6-abee-3f54b3894669
37ad714f-18ff-49ad-9383-83262df51759	2018-07-27 17:05:47.929+08	2018-07-27 17:05:47.929+08	6efe879d-8d3e-4968-8824-131f8afe5aa8	51ddec14-349a-4066-af32-e3870d29b3b2
c366b58d-7724-449f-bde0-7bc27e734d6d	2018-07-28 17:30:16.812+08	2018-07-28 17:30:16.812+08	fe52923b-3bb6-4390-be5f-32733342b67b	167a9888-36c3-4f8f-9b23-06f3f7751c23
1a359225-211a-4491-afca-dcad42ff36c3	2018-07-30 13:55:25.99+08	2018-07-30 13:55:25.99+08	44ac981a-1670-4e29-8c35-d9adb0f84534	7f331791-d57f-4760-8a73-869a52dc89c1
1caa1d47-f80e-4c24-b04f-75cdbdfcc922	2018-07-31 09:20:37.99+08	2018-07-31 09:20:37.99+08	0ef31610-c649-404b-849c-6a7d5a1d9d73	ead1ab34-9fee-42d7-af72-e553327035b9
ad1b4e4e-19aa-47aa-bbb2-aeca52133e10	2018-07-31 14:23:39.303+08	2018-07-31 14:23:39.303+08	4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	45845af8-6001-40d8-9c80-a62cd1c498b2
72e5ee39-a98c-4262-ba9f-c5430680fab7	2018-07-31 14:54:09.759+08	2018-07-31 14:54:09.759+08	fbeb2848-9908-4883-878a-10608a621168	f56a4f85-44cc-4ea7-970e-858dd9150566
e1abb654-d320-4198-9a77-e79f381f612b	2018-07-31 15:08:50.433+08	2018-07-31 15:08:50.433+08	b61317eb-c793-4b2f-b680-2d15a061ec91	66642664-b51f-4599-a75a-963d32a18ca7
b86ba852-24e5-41e2-aa38-586a1086115b	2018-07-31 15:13:27.662+08	2018-07-31 15:13:27.662+08	d702af0d-ac2f-48c9-bef4-31f6a5659b5a	9c2bfc48-4d7b-477f-8a2a-f0fd329da5bf
55376c22-6010-4d4d-9ca6-35f320cb5bb6	2018-07-31 15:16:09.271+08	2018-07-31 15:16:09.271+08	b69bda25-731f-49db-b199-83207febe2ed	90b3d65e-5aec-420b-948e-4bb6cd546963
7f22e4e8-2132-44e6-82f7-802b9723dfad	2018-07-31 15:19:17.219+08	2018-07-31 15:19:17.219+08	73e248c9-5515-4482-ac0a-af10af977c95	4b2e8fe7-8d33-4c61-b54a-62caea9e3947
2bcc829a-9eec-41c6-a8d2-391486bc1cd8	2018-07-31 16:18:49.175+08	2018-07-31 16:18:49.175+08	42c99fb8-8f40-4693-952f-7124b9f38cda	9c330608-e096-4bc0-9c59-0036a16a2296
b41180fc-ad37-44cf-a388-d91425775700	2018-07-31 16:19:27.207+08	2018-07-31 16:19:27.207+08	f67c6ffc-0414-4209-85ee-74153dcddd7d	f62fb242-cddb-4387-ae70-7b27fcd161af
6a0aec64-747e-4170-b0a6-96b71bbc0aca	2018-07-31 16:20:25.163+08	2018-07-31 16:20:25.163+08	8cc91875-80ee-4c35-abe4-4c64888e18fc	2237acf6-6dd9-4bb2-9dc4-72457562917d
bd2062e6-4d51-4474-8914-f13af3a4d561	2018-07-31 16:20:52.837+08	2018-07-31 16:20:52.837+08	dd1508e1-c94d-46a9-9a86-08a80d670853	7cf8f57e-36fa-47e1-9c4f-eadd2c5a6f58
44e33a7f-e017-42a3-b78f-cd6e936d634a	2018-07-31 17:08:23.258+08	2018-07-31 17:08:23.258+08	292bd1e7-c27c-4437-a899-3c61485b89e3	caf61f62-b229-4355-8d3f-dcf42c8a32eb
b5bf155e-c024-4bb0-8086-90448ebc5c2b	2018-07-31 17:21:58.149+08	2018-07-31 17:21:58.149+08	95686247-9ee5-41d3-9cc8-08fa377da8cc	b3e5ceec-9730-4ea1-a4ae-5e8e3082f718
e622531a-234f-49dc-999b-753626489450	2019-12-30 16:35:39.9+08	2019-12-30 16:35:39.9+08	dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52	507cca20-7447-4e32-b93f-7056f2964bb6
7e91b491-11b7-4d73-aa67-14c476853caa	2018-10-18 15:18:15.164+08	2018-10-18 15:18:15.164+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	cfafdaea-f33d-431b-a4d9-44341366d0e8
1ea68e7b-87d1-4bc9-ac98-2cef4d63fd0d	2018-11-02 11:40:18.856+08	2018-11-02 11:40:18.856+08	7b5d05d6-c187-4e6f-97aa-9add7a42ebbc	84c1cb7e-d5ff-428d-9382-a27e2284a946
a6e1de79-f0d4-4463-adfa-f28ab2f503e1	2018-11-20 11:33:10.058+08	2018-11-20 11:33:10.058+08	9d766294-6005-4331-8071-045ac9e9c4fb	e3114646-dc4d-48a2-bdf9-24ac4cee2e68
454e7bb0-2c0e-4871-803c-8de9b0c8bee7	2019-12-31 08:40:13.14+08	2019-12-31 08:40:13.14+08	0650720c-5066-417d-99a8-936fcf6406a4	bfab9b6a-eb12-4dc4-b8c0-6d4de28b44b7
63c9740c-353c-43b5-a86a-6fc48a15c4cf	2018-12-10 10:00:18.981+08	2018-12-10 10:00:18.981+08	9e3252d0-5674-400f-813b-eaf3f07ee1ff	790def09-4560-4246-b2e1-3ef7b9817c42
35710e02-d5ec-4f3f-894a-b437d65b3cd7	2018-12-15 11:42:30.111+08	2018-12-15 11:42:30.111+08	5e55d0a9-995a-465c-ac1d-a0253c41bc53	90a7baa6-3124-4a2c-ad12-9415ae86f051
ff92bad6-3367-4fec-901b-06429f0e30d7	2018-12-18 16:53:40.237+08	2018-12-18 16:53:40.237+08	36c1deeb-653e-4326-98ac-a804fac20490	c58f5dc3-27a5-4282-a3f8-94f9b3d16c6e
f9a74254-30e3-4e11-afad-70b2221cc5f2	2018-12-21 17:02:44.819+08	2018-12-21 17:02:44.819+08	7ac65a44-f581-4440-81e8-123685b15bbb	225a2a41-62a1-4c65-b64b-a017f4e5ccd5
1d3b26c8-5433-4446-b281-985084f7e741	2018-12-28 11:02:10.366+08	2018-12-28 11:02:10.366+08	7ab198d0-56df-4a07-9b1a-ea5c16664b5c	63041b9e-d1bc-4876-b127-ae8d3470301d
787d0f07-ef7d-4974-ab7a-a002f7671659	2019-01-14 15:48:47.016+08	2019-01-14 15:48:47.016+08	d9a190a8-343c-43a4-8ad3-2dc5ee25e283	3ec66b5d-883c-4ae8-a7ae-2977a544c5ab
755407a8-4c08-45e2-a682-7ffae9a2aaa8	2019-01-19 14:34:12.836+08	2019-01-19 14:34:12.836+08	6e13b5de-10cb-42f1-ac80-b2550d25a5ea	10ac1a73-d796-4fba-a87d-78f1352e2e13
198ce1df-0bce-4d53-8578-62bb69519559	2019-01-19 14:35:13.521+08	2019-01-19 14:35:13.521+08	d530a5b1-8f7a-49ae-b3c8-2f255589e6bf	bc561d59-77ee-4011-8762-39608d6b9c5a
4658ec0c-36e1-425f-a7f0-80c4789783fb	2019-01-22 15:15:43.197+08	2019-01-22 15:15:43.197+08	e850fe28-ee2e-40bd-a8fd-c02a63f4107d	2c6a3261-9129-46ad-969b-1d0f360dc9a3
fc9bc34d-6729-44d1-884f-ff3fc86fb0cd	2019-12-31 09:03:23.526+08	2019-12-31 09:03:23.526+08	f454e2b5-77c5-4282-aceb-bf86690270ba	a12ba566-e9dd-49c6-b817-9e44e2efd96a
5d93990d-3651-4f0d-84f1-6140dd2e842a	2019-02-22 13:27:41.908+08	2019-02-22 13:27:41.908+08	e956e4a1-49b3-46e3-b953-47c2c17a5098	1f96c713-b157-490a-87ef-75903faeec82
2b557018-095f-4b78-8b98-38bc15f5e5be	2019-02-22 13:41:58.533+08	2019-02-22 13:41:58.533+08	64960998-d3e8-4ce1-857a-36e232a099c0	ca73c002-2faf-44ae-b3f6-44d42c0558c0
a79e9dc3-2991-4c7f-94d8-3e5acfd65cd6	2019-02-25 11:52:45.959+08	2019-02-25 11:52:45.959+08	772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
7908c7e4-a402-464f-b57a-bedb355192aa	2019-02-25 11:52:45.99+08	2019-02-25 11:52:45.99+08	033a35ac-34f5-4970-871a-394dedbb920e	a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
919c1de1-2e8d-46cb-af5b-e08e7c68c65b	2019-02-25 11:52:46.02+08	2019-02-25 11:52:46.02+08	459695d2-69ab-4d25-8ea2-64c5b1884652	a4a803d0-a15c-4d5c-9c5f-c93e13505c5f
16ae172f-f687-4edb-8f8b-b1cbb6f28b3d	2019-02-25 14:18:58.153+08	2019-02-25 14:18:58.153+08	7cad6a7a-e258-4ed6-aa59-e6b8095beaae	15eb120d-af1f-4b2a-997d-aebb756c4244
2de88956-055c-48a5-97b1-4365d3128c79	2019-02-25 15:47:53.745+08	2019-02-25 15:47:53.745+08	87e561ee-2bde-476f-9d3c-193c5be9f692	87a08465-e5ea-4be3-a7a3-4d802b029d0f
ebff9638-02b7-4072-9b02-17b7944b831a	2019-03-05 13:35:31.074+08	2019-03-05 13:35:31.074+08	bbfe7c35-6457-4e4f-87d0-fec36f73c28b	95bb977a-fef4-4236-b1df-71ec5e232327
8a4dd9f5-6b21-4623-89a8-804a11960533	2020-04-13 13:29:57.63+08	2020-04-13 13:29:57.63+08	82b95b39-2e60-4eae-9c51-1977fc3b73e9	7b391eac-4a16-4a35-88e7-c158c50a0f68
97a6eeb4-4517-4e14-a95d-fdc7b3e7a2ea	2019-03-15 14:35:35.884+08	2019-03-15 14:35:35.884+08	d4af9993-5dc1-4f66-bc37-fd3ab9458c18	749bc501-a3f2-4fa2-be05-e916ef8ff484
84d1917c-4a01-40b8-a7b7-1837c5302084	2019-02-25 14:18:58.131+08	2020-08-17 15:06:56.634+08	f98a9365-9230-47fd-82a1-9ba1f6908c8d	ad16f71a-68b6-4014-bf6a-bcee4d3a60d5
20f97c8d-aac9-48e3-bc43-eb0099909e71	2019-03-20 21:36:52.943+08	2019-03-20 21:36:52.943+08	31506359-c8d3-4562-94bb-8a26912ecbdf	ff287390-6653-404a-ae72-c9c39e8ef4bd
9f096d22-f9de-47c3-9514-e862241ac513	2019-03-27 10:19:53.3+08	2019-03-27 10:19:53.3+08	7d31224f-522e-4f6b-89f0-4802c150f9d7	8a7b5668-623e-4563-a0a1-1ed55b88e481
3b48511d-193b-4f0a-b175-04e80a46b9d9	2019-04-03 17:33:06.462+08	2019-04-03 17:33:06.462+08	39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c	6b91b9ed-0c0e-4566-95ff-1203866a2c57
019d1bc4-4cff-480a-bbcd-e10b904d6c2b	2019-04-08 13:46:26.685+08	2019-04-08 13:46:26.685+08	edbb1563-c4ba-4090-9180-17cec3ec3ac3	936feab3-0e16-4bf8-8f9e-6c52df7a75af
b4c4c934-7692-45ab-bd6a-b67aedd2ffbc	2019-04-18 13:56:34.369+08	2019-04-18 13:56:34.369+08	6ea6d122-5da2-41bd-a362-912f212d294b	d02c8816-621a-49f2-85c0-3271f96748b5
b4bf3f54-9f52-4213-8ba4-6c64378b70ce	2019-04-16 09:50:05.919+08	2019-04-19 10:44:10.908+08	cb1ad06a-023a-46da-a674-80b18513c1e4	81c78d91-7706-4922-82bd-38444ca9b046
3db3f0f4-f9be-4db2-85c6-a265a30e606f	2019-04-19 16:42:52.625+08	2019-04-19 16:42:52.625+08	9ec28096-280e-4a66-b130-37a5ebc05047	f1484a98-4d8f-486e-836a-8dd14ccd1823
c8e6b7a2-fb37-4f0c-a425-e1e44e94f8e5	2019-04-20 17:24:55.776+08	2019-04-20 17:24:55.776+08	254d4101-7301-4d4a-be79-29d0f7f616e3	25d28c61-1984-41c9-9543-be1517393c6e
8331929f-5444-47f2-8a51-d2f783f7e13c	2019-04-22 13:13:08.918+08	2019-04-22 13:13:08.918+08	70909da5-46ce-4458-8129-4c34c077b2be	11985a9b-36a7-47e7-9f3e-188816953f32
43081fcc-4dd0-4f0b-af4a-d681d062f274	2019-04-22 14:08:53.037+08	2019-04-22 14:08:53.037+08	79df1a9f-c843-4cdd-806d-4492fdeac2c2	8aa49ad7-2fe1-41c5-a102-a3c6784019f9
0e99d44a-7a16-476d-a861-49f2b6132a2f	2019-04-23 14:22:13.672+08	2019-04-23 14:22:13.672+08	2c644dde-9a89-4c57-b9c2-07fae59e460d	0cf029a6-b198-4afc-abcf-a7279db56ba7
6c81f0c6-9996-4543-b0ad-46c1ca12d4d0	2019-04-23 14:45:48.31+08	2019-04-23 14:45:48.31+08	897daa06-8487-49b5-b276-f688a5c99378	f547f965-5d5f-4aea-811e-8057633bc374
b8189380-8c70-4c5f-ac43-e8e36606d005	2019-04-23 15:47:59.417+08	2019-04-23 15:47:59.417+08	d73e0c65-a8ab-492b-b6c1-1039f4630424	3e2852ce-43b1-46ff-bb32-dfcf92650dd0
a257abad-d3fa-4594-b755-38cd416266ef	2019-04-24 09:19:20.826+08	2019-04-24 09:19:20.826+08	dfaa0aee-75a3-4f5f-a09c-c278b9e655ad	54db998e-43ed-46da-9c44-ff738728ed07
2fb02dd6-e07c-40af-8d7d-be5903bf5551	2019-04-25 15:02:30.582+08	2019-04-25 15:02:30.582+08	0448eb89-a724-4340-a079-912513a55cb8	8e90f68c-0a42-4565-a0a0-734b5b4bd99c
f4c60de6-141b-4933-aba3-66fafa7c02df	2019-04-26 13:07:35.565+08	2019-04-26 13:07:35.565+08	354393d4-5f59-436d-96a6-e7e3fb28a196	91476c9a-6eb5-46a2-9206-01b186e4e6fa
ed637f88-36d2-4123-8cc3-ec36d98ac706	2019-04-26 15:57:34.702+08	2019-04-26 15:57:34.702+08	3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873	ed76d0c6-f7a4-46fa-b322-90a6ac76fe30
68ae3b4b-3710-478c-bccf-5d1f81587b98	2019-04-28 17:36:59.052+08	2019-04-28 17:36:59.052+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	cfdc691c-18ca-4ece-a05a-61c433381df8
4ccd24b7-a939-4b59-a3a0-71b7eadc09f8	2018-07-31 17:08:09.207+08	2018-07-31 17:08:09.207+08	b5a575d9-25af-47ce-8a43-89a35317f2a1	0511247f-0b74-49af-9ec1-81899d8c1024
edf0d7f9-cb29-4c36-ad44-0d508882d211	2018-07-31 17:13:47.371+08	2018-07-31 17:14:10.896+08	5066bc97-d314-4800-891f-b7b4031c1ffc	762e55a6-c0c8-4444-8a74-24102e58cccd
afded347-6ab2-44fd-9a98-d1761efa0e43	2019-12-31 08:43:30.024+08	2019-12-31 08:43:30.024+08	e0fd6ac0-4c4d-4683-9227-d614184aefe2	303fa19d-d73c-4e58-b8bc-9b74464f1dbd
4f9d8241-ac77-4e69-84ef-bfd07ead1e37	2019-02-25 14:20:41.416+08	2020-05-09 09:28:21.128+08	b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	2b780bf5-2292-4dbe-ad9e-dcf41181f5d9
a0bf932b-3d79-4ab7-9291-1fb94cc47dcb	2018-11-20 14:59:57.3+08	2018-11-20 14:59:57.3+08	99a6468c-6183-4253-bc6f-0e66fea8e3ce	3b79c6c2-39da-4c8e-9b85-df2a31cf822f
8249bf93-14b7-4a7a-81af-a35692d59991	2019-02-25 15:51:46.932+08	2020-08-17 15:05:27.541+08	7533c2be-930a-4296-bdea-f4093aabfeb1	ecbc8c0a-03af-480d-9141-1943fbb35ab1
d9de547c-4260-4fd7-ba44-c0754279e3e2	2018-12-06 10:22:33.354+08	2018-12-06 10:22:33.354+08	cf51dafe-466c-4549-b2c3-3eb4dbf5d871	9a265b2b-7300-4ceb-bba1-48150a012b88
48aa06f1-88d1-4323-93b3-d1f3cbd67bcd	2018-12-10 11:36:18.839+08	2018-12-10 11:36:18.839+08	2818ab68-9d7c-4254-99e5-e1edc265931c	f0c7e12e-dbe8-4c3e-9b01-cf184c7eef29
b630dfba-9e1f-43dd-ad19-caf97b8d5c8c	2018-12-18 16:53:40.812+08	2018-12-18 16:53:40.812+08	3aff704a-a328-45da-b0eb-3fee9080c603	78099f25-c4b6-40ae-b659-7eaf416ca5a9
400f0273-b0c0-438b-8c1b-7c5ae2b44b36	2018-12-15 16:52:13.996+08	2018-12-21 17:02:56.666+08	e277a4bb-5513-4464-be88-055a50df13b0	04562f37-0ed2-4adc-bebc-4221b5a5e8a4
c84fb836-fc41-4a2e-b80e-174b944366a0	2018-12-22 09:58:06.301+08	2018-12-22 09:58:06.301+08	2ad69732-f5bc-48ff-9b70-ef6374830804	0139ef61-9f17-416c-ad0f-70f24fe921e8
28d42e43-fcfc-4ea8-9b2b-5baea9b7d2ce	2018-12-28 11:07:29.3+08	2018-12-28 11:07:29.3+08	70c9304e-caaf-4c6e-aa82-b51207d7aeac	614b3b1e-fe7f-4ad3-a9d1-3a40b2cdc1fc
b77c04c7-3e81-4315-b46d-7dd14edda704	2018-12-28 11:30:32.423+08	2018-12-28 11:30:32.423+08	0070fd98-008a-4af5-b805-e81d23644df8	1bdc5e70-82a2-4784-85fc-3dfa298e5d35
411978ba-0504-4ff1-a82c-a6a313cda664	2019-01-14 15:51:12.931+08	2019-01-14 15:51:12.931+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	77558afc-920c-4316-9a55-b31c4ee1df61
b2a23f5d-3cf5-407d-9e1d-ee06a4119009	2019-01-19 15:00:28.919+08	2019-01-19 15:00:28.919+08	59eccaba-e3d8-4c03-a603-6bd46db0b0a6	3eccadd7-08d3-44e8-b1b4-e23b646bd03b
1a308822-a647-4491-8737-afd505463b08	2019-02-25 11:55:32.923+08	2019-02-25 11:55:32.923+08	4af15f4e-a452-4123-8c3f-17182b707f61	f7568e77-c6a6-4c03-8484-16c935134b2b
4f85e41a-cbb0-4b6e-9321-665c2ebf0ecf	2019-02-25 11:55:32.955+08	2019-02-25 11:55:32.955+08	ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	f7568e77-c6a6-4c03-8484-16c935134b2b
7a43b56d-1d12-4b60-8f6d-07132bdd04a5	2019-02-25 11:55:32.981+08	2019-02-25 11:55:32.981+08	7c8d2cc9-631b-4ba3-81d4-30126181dc94	f7568e77-c6a6-4c03-8484-16c935134b2b
6e2c8121-d5d9-4f41-ae46-f51e51f0952f	2019-02-25 14:20:41.391+08	2019-02-25 14:20:41.391+08	5b7ef632-3a0a-470c-848a-488e63e67023	e3216636-9763-4b64-a0f3-a5d7f9fb40f0
84f6ff3d-2907-45d0-9901-5438389469ca	2019-02-25 15:51:46.906+08	2019-02-25 15:51:46.906+08	1c56bfde-5866-450a-9682-65dd34bc3296	c627dfb1-eb49-4687-929a-9e02683846ff
d72f6e19-ef74-46d4-aecf-da4996b5baf6	2019-03-15 14:36:33.054+08	2019-03-15 14:36:33.054+08	2bf1019d-5976-4ecf-9970-773d334f184d	2905fd0c-f857-4da4-871f-de9a6be87f04
2ed23356-c71c-4752-9e53-cdf652c40b01	2019-03-19 15:25:07.009+08	2019-03-19 15:25:07.009+08	f331e32f-da35-4df4-80fe-50f681800a26	dd784afa-bc27-44c3-b5b1-3c2fe92b868f
d50821bd-1da4-4abf-9cd6-063d79cb800e	2019-03-19 15:25:07.08+08	2019-03-19 15:25:07.08+08	856b0c3e-b6db-4332-93b2-88d4bc0e019f	dd784afa-bc27-44c3-b5b1-3c2fe92b868f
fbcbf37a-0d8b-4698-9484-f333f282afbe	2019-03-19 15:25:07.09+08	2019-03-19 15:25:07.09+08	dd63a0aa-71f9-4a32-9b10-0cce05dfc818	dd784afa-bc27-44c3-b5b1-3c2fe92b868f
16aeb9ab-920c-4f96-949e-b68e6b21ec83	2019-03-27 10:22:14.2+08	2019-03-27 10:22:14.2+08	bad3bab6-cba0-402c-bcde-5fbffacfa1a8	9e907320-86e4-4bf3-b588-927cf6d6b615
fbbadde3-6c8e-4f20-a057-07ace9536513	2019-04-04 11:32:30.464+08	2019-04-04 11:32:30.464+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	32435b8b-f100-4ed8-abc1-8fe485c14861
45582e82-e625-4f44-b975-bad496e24329	2019-04-04 11:32:30.471+08	2019-04-04 11:32:30.471+08	016e4acd-bbed-4409-aa4d-4e410d67f9ec	32435b8b-f100-4ed8-abc1-8fe485c14861
ab10c479-854b-4c68-a28c-ad3147790b2c	2019-04-16 09:52:28.891+08	2019-04-19 10:43:53.434+08	98161e10-b23b-4448-a389-0bd8a08fec4f	734c9298-f1e1-491d-a8b6-8642e1a0a0dc
2729b931-6960-4c50-aec8-6500bd8ce0b0	2019-04-20 17:25:47.164+08	2019-04-20 17:25:47.164+08	fc95cca4-2304-48a7-a38e-b8280e1af82d	25d28c61-1984-41c9-9543-be1517393c6e
dc13a358-08e9-48c1-9284-042b225a177d	2019-04-23 15:05:42.795+08	2019-04-23 15:05:42.795+08	e3c19ece-2c10-438e-8bd1-005169fa2da8	91a56b17-bd72-425a-b6fd-0c58a143058a
b7e5684f-56fc-421e-ad6c-57e7bc75bdec	2019-04-24 09:21:38.795+08	2019-04-24 09:21:38.795+08	5bc34c90-3031-4ce7-bb12-eac34d220e11	13eecc28-7330-407f-9903-09b4dc78240a
89f09eba-1b64-45c7-a6b5-a2e616cd90af	2019-04-25 15:04:01.465+08	2019-04-25 15:04:01.465+08	bca45090-3023-4d55-85e0-8c5216171df5	ad654f88-5e0b-41e4-bbaa-82af8fd16f95
d8e21a5c-9624-4b59-abd5-d4506e125b8c	2019-04-28 11:24:32.862+08	2019-04-28 11:24:32.862+08	ff05da01-ca5c-4dbb-afb0-67ec5f513f40	35e02a89-9c94-4426-aeb2-86d112f36942
6a4b5a8e-f0e1-4a9e-b7db-0cf6e5de48b8	2019-05-31 16:24:23.22+08	2019-05-31 16:24:23.22+08	b8f7deb8-c684-47d4-b8b0-a1d66615944c	17a5fc51-7701-471a-9ed2-22b64877374a
7240f08a-75dc-4eb0-a27b-a903685c6c55	2019-06-11 15:55:27.381+08	2019-06-11 15:55:27.381+08	bf5ac821-5299-4099-9be9-c61c8b7d085c	b9595344-32b0-4fa3-9516-545d002add5f
8129ab95-6d57-478c-9d0f-205b7d832f6e	2019-06-11 15:55:27.386+08	2019-06-11 15:55:27.386+08	bf5ac821-5299-4099-9be9-c61c8b7d085c	933f6013-a45d-4373-b637-bdf66de02c3a
136af7d8-455a-485f-9ead-c3dafd3a9a84	2019-06-11 17:18:00.735+08	2019-06-11 17:18:00.735+08	79193862-5667-4861-96ed-2c239a6535c2	f1622883-4682-42a2-b06f-85d0f35881e9
f3cc31cb-efe5-4f6f-944e-96c95955f02f	2019-06-11 17:18:00.738+08	2019-06-11 17:18:00.738+08	79193862-5667-4861-96ed-2c239a6535c2	7d00bdfc-22b4-4369-aee0-bffe91fe1e52
10046373-56d3-440d-b939-5da7b975e26c	2019-07-06 16:55:42.764+08	2019-07-06 16:55:42.764+08	bef735a7-a116-4448-8c98-c27e6f83fab2	5b242533-ee4b-4858-b1fa-3a64373c8be3
b1e3d79c-caeb-49df-ac62-f005e5bff16c	2019-07-06 19:01:23.531+08	2019-07-06 19:01:23.531+08	3c5cfd97-4900-4001-95e5-6d3b6790bec8	5b242533-ee4b-4858-b1fa-3a64373c8be3
273c9609-7c99-4fef-bd69-ac28bb15f648	2019-07-09 08:55:06.306+08	2019-07-09 08:55:06.306+08	a690c2d9-43b0-4c5d-b667-5020ef18e4ec	cbad1c10-70d1-4f59-b5cb-6896f2134b6e
4f262ee5-83bc-4068-aa2f-e32baceec59d	2019-07-09 15:05:43.555+08	2019-07-09 15:05:43.555+08	dbfb4fed-6353-4527-b6f7-b9af08f37fe1	77f2a844-f5a5-4fd5-93cc-2213ad29136e
7e231794-1fd7-49db-833b-56695ba219f7	2019-07-15 13:40:16.53+08	2019-07-15 13:40:16.53+08	eb07419e-1090-4ef1-87af-c365af7a63d1	a806dc77-31eb-4de2-8dee-3003478abefb
0b190bae-e314-4138-8287-72d343148393	2019-07-15 14:04:02.954+08	2019-07-15 14:04:02.954+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	4085b18f-dd96-4757-a9c9-baa3f2b6a431
69e6e1b9-e309-4335-a090-a84e7024303a	2019-07-15 14:04:02.971+08	2019-07-15 14:04:02.971+08	f3177595-13d3-468c-8451-4677a7f3a0ef	4085b18f-dd96-4757-a9c9-baa3f2b6a431
a3fdf771-775c-4fef-91a1-7bf0b71efc78	2019-07-26 11:18:48.47+08	2019-07-26 11:18:48.47+08	55c2a1eb-5dad-4181-86f8-9145d71e8077	55e7472f-14ef-49f5-a5bf-e9883ab12aaa
e88e6aa6-4601-4c99-9707-f192f0c08e34	2019-07-26 13:54:09.323+08	2019-07-26 13:54:09.323+08	98affd25-d0f7-47f2-abe9-5dc74bdfb02f	a5fe8095-bd72-41c5-adeb-cfda5c403460
7b24d599-55de-46f9-85cc-f9d3fed06243	2019-07-26 16:32:46.707+08	2019-07-26 16:32:46.707+08	37b692f8-71bc-4741-928f-5eba35682efc	a5fe8095-bd72-41c5-adeb-cfda5c403460
90063e51-b6c9-4afa-8e0d-21703b4acc83	2018-07-31 17:21:42.69+08	2018-07-31 17:21:42.69+08	49ca2a7b-0092-4889-a0ee-6146802ec384	3ac73307-9df7-4d10-a3be-af55d9bf116b
e35dcefb-e4e9-4171-895b-d91e4e76c913	2018-08-01 09:11:25.792+08	2018-08-01 09:11:25.792+08	273814e4-c4be-4198-9dd6-4d1f19cb0033	b1688753-3e48-4e22-a4dd-3acb689792bb
4a9fa94f-d3b4-4ede-9295-c4cbf59485ce	2018-08-01 09:11:38.447+08	2018-08-01 09:11:38.447+08	55fe806c-652f-4b2c-a677-fa5aea862762	820be4de-7ec1-46b8-a364-0b98e4111d9d
c5d221b4-a07a-4ec2-8bf2-489c715f28ee	2018-08-01 09:29:11.986+08	2018-08-01 09:29:11.986+08	5d00a146-91e7-49d0-bd5e-930d092c386b	15d6e1c6-40bd-42c1-8038-7a60a99a22ac
fd37fc35-1046-40f0-ae71-a9804c93b47d	2018-08-01 09:29:21.763+08	2018-08-01 09:29:21.763+08	08b2e830-9291-4846-89e5-483cf8eca55e	72477d9c-fe9f-4047-a008-32bd34c54fd4
8e9b8b73-2e08-4056-bf1f-8e1d22c68a22	2018-08-01 09:32:50.699+08	2018-08-01 09:32:50.699+08	985c0298-b963-4823-8fdc-38feb70806e1	4c4c16be-53e5-4082-b62a-71cf80609053
acfa96b3-f069-4880-8630-8fa606e636ea	2018-08-01 09:33:09.743+08	2018-08-01 09:33:09.743+08	0e6129b0-ae01-4822-929e-e8a93b3a63aa	e6b914ee-1893-44c7-bb8e-ebf12fce3747
334e5708-c6b9-436c-80ae-3cdee1d938ec	2018-08-01 16:20:24.315+08	2018-08-01 16:20:24.315+08	0d7a1f75-6a7c-4626-8d33-2227c919115c	99bb5c58-f2bd-437a-bcf3-e1376792d2b5
101070af-e606-4396-8680-395485afeb5f	2018-08-01 16:25:49.747+08	2018-08-01 16:25:49.747+08	d926943e-d400-4c4c-83c8-2c3a6fd62c1c	bab8da8a-0a49-44f2-ade7-d8b741b2e868
4bfe26fa-d00f-459b-b9c5-13c931522b4e	2019-12-31 08:47:53.132+08	2019-12-31 08:47:53.132+08	d39ca936-5931-458b-ac6a-3afd59f67b53	c614b8c0-2914-4cae-b78c-5101b78834fc
0b09a3fb-8263-46cf-9656-53986b80a942	2018-08-02 10:31:54.606+08	2018-08-02 10:31:54.606+08	48082fb5-546a-4106-9c2c-674aec2640c1	fe0c5930-84b8-445c-9665-59f2c880f8a4
f4d66a62-2239-4532-a1b7-27c16b005572	2018-08-02 10:33:18.564+08	2018-08-02 10:33:18.564+08	04709fe5-6ce9-4415-99f2-f349e03992fe	767752a2-9e11-4345-9b42-df1d3a202742
7c09de83-3340-4b44-9147-0a3b35c7ea40	2018-08-02 10:35:48.104+08	2018-08-02 10:35:48.104+08	82623747-98d9-4dfa-9a9a-08188d0311e9	4e563302-f20e-4001-855b-d9cb1b56ad64
20a0807f-6d28-4729-a770-be2714e337aa	2018-08-02 10:41:04.628+08	2018-08-02 10:41:04.628+08	87e911f0-3894-42f6-a05a-80c30c7e565e	fabc7925-e9e4-408c-90fe-338bff871125
6d0189e7-2b65-413b-b29c-8fc6782f9de8	2018-08-02 10:45:02.562+08	2018-08-02 10:45:02.562+08	812c58c6-4cd2-48fd-942a-2024f91035bb	549b472a-04f4-4df6-b246-2c324c122e2c
7ce94b2d-f626-43fa-9e41-1d5be1dfbc90	2018-08-02 10:45:44.053+08	2018-08-02 10:45:44.053+08	ad9f806b-21ed-4a46-b6fb-964f135f3efd	1d497ad7-f56a-4e73-959f-29424bb92a2c
791d95cd-6cb6-4ad6-94d0-5a35612f86a8	2018-08-10 09:35:53.059+08	2018-08-10 09:35:53.059+08	2528fa6d-da6e-4e88-9316-d13536a1a987	4e6dfa0f-e74c-4559-aedc-7c84e8545a87
103559c7-9b76-4800-85dc-912ee1edea84	2018-08-01 16:05:37.459+08	2018-08-02 17:34:42.092+08	a59e747f-2b34-4867-bd4b-47994c6dc9b7	d6f3f5ec-f72e-417f-9d32-834f93d9f54e
87e60fdb-80d8-40a9-bf77-8239dfa82f16	2018-08-10 09:43:03.969+08	2018-08-10 09:43:03.969+08	cde7d76f-5843-4001-88b3-5eb18836fc8f	fc18a218-68fb-442b-ab28-cb0c1a7ed52c
366967f2-1221-4924-9e8f-df8667a58d63	2018-08-03 07:13:57.971+08	2018-08-03 07:13:57.971+08	20a173c1-56c8-4576-8edc-906bdb04f749	2768cdc7-6232-43bc-a8f0-dd8bd3be5b29
31c5afa1-9c8a-45e2-832a-067f0cfc8d4e	2018-08-03 07:38:12.899+08	2018-08-03 07:38:12.899+08	c3ed842a-d6dd-4db8-976c-2f12501159a0	301a49ab-6faf-4a1b-8080-2bf10037f0ca
4e9984a4-96a3-4b0b-a2a9-a0c8f7218ba4	2018-08-03 10:29:52.7+08	2018-08-03 10:29:52.7+08	c5d291cd-bb26-4192-9454-e686cb8c1f9a	d4fa3b20-5cd6-4baa-a7e2-0df8ddd2dfd8
b0e8503a-7788-47d1-b5c3-82ec97ad1f32	2018-08-03 10:36:00.52+08	2018-08-03 10:36:00.52+08	380bb834-b2d8-495f-bccf-075375161a49	1e05a174-7435-4ab9-95dc-77a4fae8f42c
4f901cc3-bd18-4342-b797-c0b97c2507a9	2018-08-03 10:41:17.512+08	2018-08-03 10:41:17.512+08	e17bf88d-d539-4c9d-9504-37c08672d5ba	bc13f6ad-4c38-4542-bb2b-acadf895ab86
e4fc9dc4-d40d-4bf7-9039-a95575a0b685	2018-08-07 16:38:34.256+08	2018-08-07 16:38:34.256+08	a0cd4a87-661c-43de-928c-22c5d63cbeee	5957e111-c3a4-4000-8948-6d1a7d17a7aa
f215ddaa-1525-4393-9b8d-0066a84a9c03	2018-08-07 16:40:19.922+08	2018-08-07 16:40:19.922+08	29e946c4-e67d-4d58-aba2-a16897f4da42	5581361e-e00e-4621-b14d-ab5ffb4ec262
b7fb9bcb-b17b-47cd-8b8c-0348c8cfb808	2018-08-09 14:40:15.585+08	2018-08-09 14:40:15.585+08	201d630c-2dfb-4918-8d48-0dc931b2337d	f3eb0b34-26c7-4f24-9771-7a55f39cc3c9
0241b3ea-939c-4b02-b220-90b6e57d86df	2018-08-09 14:40:18.336+08	2018-08-09 14:40:18.336+08	73438936-0d17-4107-85bc-2348926e9746	62796f44-b914-45f5-93a9-731b794d28c8
8c296519-ef8e-4cbf-a162-72e75041ac2d	2018-08-09 14:55:00.891+08	2018-08-09 14:55:00.891+08	420c05f9-c835-4821-ac21-7cf1575dabb1	b18e471e-bbbd-43c1-b2bc-d83883e0967e
987cbc3b-7250-4d0e-82d2-959855579707	2018-08-09 15:00:04.582+08	2018-08-09 15:00:04.582+08	0e3776d4-f177-404e-90be-59cb211c9921	9261925a-95b4-4602-9111-b6178b6ab599
9d6514ee-b123-4fcc-8f11-5de06d3f5487	2018-08-09 16:03:35.227+08	2018-08-09 16:03:35.227+08	c52b1fc4-5d46-4f04-8fba-d9a9e6335b39	cac26ff8-0020-4e6c-8bdd-95c3c6cfccdb
6245de3a-bb02-43c9-b14a-2e54c5d75b30	2018-08-09 16:17:22.32+08	2018-08-09 16:17:22.32+08	fb71513f-dc49-416f-b4d1-3dab69eaf1ac	32cde6c6-f27b-42fc-bd86-6b137168099e
ff15936f-3448-4f00-9236-4a2263ddd40a	2018-08-09 16:19:28.519+08	2018-08-09 16:19:28.519+08	c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c	94e7b97c-4024-4c29-90f1-244939526615
fec25675-80c4-4492-84e8-dbf2f5c1fa43	2018-08-10 09:21:02.4+08	2018-08-10 09:21:02.4+08	8b8cab39-63aa-4ef8-95d7-a42959be4592	a695613e-cdcb-45bf-bc42-f569c998d922
9bd0d077-a91f-478f-a0e3-ae6a6d3afd86	2018-08-10 09:23:32.767+08	2018-08-10 09:23:32.767+08	6c0449e2-22ab-4974-9d49-244a1ef1d08b	29459873-dfc4-4a81-acfb-927d10b96504
d07b2a9f-041f-4f0e-af66-7a0995de7d5e	2018-08-10 09:33:09.104+08	2018-08-10 09:33:09.104+08	f9df0040-a2b5-442e-9fce-4787a7c308c9	0676a9c6-2a67-4f1f-adab-f4938e3a11aa
fdd157cc-51d9-4549-986c-dde089bf54e9	2018-08-10 09:48:55.497+08	2018-08-10 09:48:55.497+08	0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83	9bbc6377-d6cd-44ea-a123-fca513a10203
ba846982-e9e2-4155-9c1a-0b50b9d636f5	2018-08-10 09:50:00.681+08	2018-08-10 09:50:00.681+08	37ee5f1d-d770-4c7a-b901-3f060b88fe86	91be2158-bafa-4eb4-863b-d32efa4de0bb
58a68bef-074f-49e9-bf72-befda42b4d6c	2018-08-10 13:58:44.445+08	2018-08-10 13:58:44.445+08	b15c0841-8700-42f6-ad9e-cfcd0c6f5665	18e18a33-9f35-424b-b400-6ede2c984aef
9feeefb1-8248-49bc-a460-afc9ce23b229	2018-08-10 14:52:45.141+08	2018-08-10 14:52:45.141+08	b0e56599-c58d-4d0a-8a80-f19855b36c80	e4838c48-621f-497f-8fd5-c49c9ca1b4cb
c8b02274-2d4a-41a1-88aa-420001cf8828	2018-08-10 16:23:43.245+08	2018-08-10 16:23:43.245+08	fee66142-81ed-4cdc-8465-19d0f7acd6ec	50e9b4d1-2dc0-4ffc-bf5d-f1945b0f012b
48869e56-0a04-46be-9aa2-c48bcc371390	2018-06-20 10:26:34.632+08	2018-08-10 16:46:17.091+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	5c3be7dc-ab33-4131-854b-3a252f41281a
1e33c1d0-4415-46d3-b071-6e7fc2ed79b1	2018-08-10 17:03:21.009+08	2018-08-10 17:03:21.009+08	4d1bca0a-fa5c-4af2-adc9-ded21aff72da	f872ce6c-3df6-4a1d-922a-00a70b1c1af2
f8a11b5b-2798-49a3-bd60-74d0e3b0b756	2018-08-13 10:56:46.619+08	2018-08-13 10:56:46.619+08	249bf211-a7fc-4649-977a-1ba27e2fc683	e3aa6165-6e76-4852-bcca-389784ae48f9
50585f90-7631-4928-833b-bd554a124a86	2018-08-13 14:58:59.147+08	2018-08-13 14:58:59.147+08	93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d	e780352b-7e88-436a-a05c-6cc0b2ad1d51
dbaaa44f-82cd-4fc7-9bae-b2a2bc498400	2018-08-14 14:13:28.657+08	2018-08-14 14:13:28.657+08	0ad35b65-43ba-4521-bc02-63bd34be0a39	15e7c745-7a6a-4fcc-9856-2964e2fa817b
81baca5d-2519-4198-8faa-e64e187c57d2	2018-08-14 15:32:39.137+08	2018-08-14 15:32:39.137+08	f9a40c12-42a9-45fa-b780-10df712e19af	3cd692df-6f92-4583-b5d9-c984d06ff486
a7c78a02-9a06-48b4-92ef-2dc26b52ae16	2018-08-14 16:18:30.093+08	2018-08-14 16:18:30.093+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	d3748bc0-b7f0-4ea1-b32e-8446ddae9b67
ce0b9f83-ddaa-437d-b88e-d07c77d8cbf1	2018-08-14 16:26:33.745+08	2018-08-14 16:26:33.745+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	71472f06-593e-411b-adc2-4b3eb520a1a1
d77d1e72-312f-426a-b3b5-154c083a4510	2018-08-14 16:31:33.445+08	2018-08-14 16:31:33.445+08	b4b6ffd7-09a1-4348-a270-a89f768a51be	686bd36b-e28a-435e-9568-0f256b5086e3
008b0d2d-06cc-4cce-9d40-b29ac610d43c	2018-11-02 17:21:36.832+08	2018-11-02 17:21:36.832+08	383450e1-ee35-4242-86ef-f2b575b96ba0	59c6964a-3590-4ec3-8c18-9f58d2583cb9
7eee3025-c77d-49ce-92fa-41fd40b5e48b	2018-11-20 15:19:51.014+08	2018-11-20 15:19:51.014+08	59ea18ad-dfaf-406a-95bc-213eaff64b6b	b5c94690-f48a-4b07-92d3-78ff4c72866a
1d2d65cf-586d-407e-8ee3-30cfa8bd49e9	2018-11-28 15:03:29.312+08	2018-11-28 15:03:29.312+08	37421fe7-d68a-4eb7-a2b4-f8238e4ee63d	8ee3c94e-fc38-4a55-a21d-00efe99c3575
81e52085-658c-446f-aca5-ae1532f0b94e	2019-12-31 09:06:25.801+08	2019-12-31 09:06:25.801+08	f562d703-5cde-4a00-b1c8-1be54d51da9d	e8d38f56-e9e3-422d-a7f3-ea901d8522e5
9b6be3d7-d0e2-494a-9a1a-d94bf7a17c24	2018-12-18 16:53:41.328+08	2018-12-18 16:53:41.328+08	9b0aed36-6906-439d-8969-4918e4e723f5	d4a10687-30a5-42f2-bfba-bd833a11152b
89ddee7b-7b0c-4f87-9820-0196c23ed8b8	2018-12-24 11:53:24.89+08	2018-12-24 11:53:24.89+08	fb5b0dad-7bf3-429f-a153-95ff04ef6b58	0560b094-8bc0-4d1e-9495-466f241e7391
95e102cd-99ba-4811-86d7-ef4f80861148	2018-12-28 11:13:18.184+08	2018-12-28 11:13:18.184+08	14784dc2-a6ea-4008-acd6-bb96f3cedf1e	b012ebe8-a730-40aa-87f3-82e77cfb599d
d6655efb-a48f-48aa-8a22-4aae5ec7286d	2019-01-14 16:35:40.033+08	2019-01-14 16:35:40.033+08	b5064da1-895c-40e3-84db-b6330326f9c8	ad92b98f-514c-42f9-b387-3e963cf9410c
90c0bff0-8022-4439-9ec7-42b981b02501	2019-01-22 09:31:07.203+08	2019-01-22 09:31:07.203+08	0264aff4-ba22-40ca-9ef9-866e00e00fb8	0767af83-f061-4628-8cce-76a442d4b998
e57438b5-6e79-47ee-af7c-b9373fee97b5	2019-02-22 13:35:17.65+08	2019-02-22 13:35:17.65+08	b8f7deb8-c684-47d4-b8b0-a1d66615944c	b9704e98-04a2-4552-b0aa-d0ca02c0bc51
f9b1fd74-85ab-43af-ab00-825c2c502bd5	2019-02-25 13:30:27.019+08	2019-02-25 13:30:27.019+08	03afe194-fc01-4993-8f9a-ed4ca0ae6d90	2229186b-2e5b-4d19-8175-44c2bc060c0c
e5b27cb6-5589-424a-97e7-11a4915f4224	2019-02-25 14:21:57.066+08	2019-02-25 14:21:57.066+08	7169451f-4110-4ba2-8482-b6e4a51eb459	3b4a9a5f-f359-465f-8082-cd95b32b6c73
fe49db7b-437c-4b3d-9b3f-73f2b31a6cac	2019-02-25 14:25:00.101+08	2019-02-25 14:25:00.101+08	97be25b3-75df-4137-a479-22343213fe74	a6703faa-aa9d-4b91-a785-cfcbd58e52db
0b9c7814-1f46-424c-bcd6-bdc01437b035	2020-04-13 16:34:42.636+08	2020-04-13 16:34:42.636+08	6cf95499-c1da-478c-918c-bc809d89feb6	986ece2d-6b6e-4c34-a78c-6f144d632f28
158cd4ad-6fe1-4b77-82f8-0fc24c804826	2019-02-26 16:47:57.181+08	2019-02-26 16:47:57.181+08	cf9f22ff-a972-4050-b4be-93cd43ed5463	cbedc498-a7e7-4d15-a577-c4199e4590fe
c339565a-23ec-4935-8a09-ee747021efed	2020-04-13 16:42:59.139+08	2020-04-13 16:42:59.139+08	29b24211-38a9-4c77-9218-11d0c3939a5b	3c8bf7ce-3934-4bbc-8d08-640b6937e7aa
55465931-c7da-476e-8deb-0d6ef1ef8acb	2020-04-13 16:42:59.156+08	2020-04-13 16:42:59.156+08	8aef8520-904e-46b6-9223-952b50c16f52	9148c4e7-ccfc-457f-9523-76fb8eddb5a1
a9fe9d16-639c-4be2-9fbf-7ab01906a2a0	2019-02-25 13:30:27.039+08	2020-04-14 10:27:14.801+08	0dc2011e-5962-4366-82dd-6a326e0ddbf6	89933af4-5fcc-4055-b42c-4f6ba258dae3
65f4d222-fa55-4bc0-a16a-a7e0189eaa12	2019-02-25 14:25:00.146+08	2020-08-17 12:42:22.053+08	f2d80142-2f46-42d6-aa9e-c4e687c5690d	21e62032-777f-4643-a1f7-de24c0099e71
b275d699-5a80-4bb1-983d-3f5f5d8dbe65	2019-02-25 14:25:00.172+08	2020-08-17 12:42:13.62+08	49ff32ed-be50-4c87-ba73-af20b848e154	6af6e7b8-a166-4eb9-b326-b70b47acc94e
42beabbf-dcab-417a-ac3c-cd3b8c66fa7c	2019-04-28 11:26:12.335+08	2019-04-28 11:26:12.335+08	cc7ab8cd-332e-48d6-9a20-2d44055c2e61	d9fb92f0-acdc-4294-bf1b-bd3449d569ea
8b1bf7f5-cb7b-42ea-ba1b-da7b289dc921	2019-04-30 09:49:47.7+08	2019-04-30 09:49:47.7+08	a18f5309-f499-412b-9cd7-b2a84c3302fa	c1ae7a2c-395e-47ee-a6c7-1789ac8e0720
48bb8be7-835f-4525-870e-2f7f2cb9b535	2019-05-06 10:14:28.462+08	2019-05-06 10:14:28.462+08	e1da9a91-3e0d-4f6f-8ba2-8169b1d06305	5ad2026e-5c8b-4567-bfb6-858e613b3d42
5be03b26-95ca-4b3d-a82c-89c571705ca1	2019-05-07 11:19:26.474+08	2019-05-07 11:19:26.474+08	aacdb86a-92cc-47cf-a7e5-b139a96e4fbb	b342d887-3839-4ce0-9314-4cdf7c9e7895
a3902cae-3a1d-4ac5-9ca8-cf5c6ba48b8d	2019-05-09 09:58:07.906+08	2019-05-09 09:58:07.906+08	c05dd524-bff2-460c-b9b3-7fb235b2a7a8	3ced8ff2-50b3-487c-9d04-92a3ba8716c6
632b72f4-067b-4aa2-b884-dde710647511	2019-05-13 11:18:59.512+08	2019-05-13 11:18:59.512+08	7e35a6df-64f0-483a-8582-859548ba7fc1	758e0b8e-cb3b-47b5-90f1-27debcd07c7a
7f0264bb-29c2-4971-b3c7-5f62bf060635	2019-05-13 16:27:13.716+08	2019-05-13 16:27:13.716+08	7fa7ac4f-f693-4287-a813-9b123e633207	4699c34f-7862-41fe-bbe3-b86681abd493
3f24b7c1-5e5c-4f7b-9614-ccf8e3155907	2019-05-14 16:57:37.964+08	2019-05-14 16:57:37.964+08	cf8bfa0f-1e08-48ed-9041-3826fd5f5135	a3f8ee67-dc1d-42dc-b7c8-19418d949d49
3c7a3a72-c685-4252-9274-09138310a281	2019-05-16 18:02:13.706+08	2019-05-16 18:02:13.706+08	19c9b194-eaca-4785-9698-fcba4f960a2b	a3f8ee67-dc1d-42dc-b7c8-19418d949d49
fd20587e-e837-4f84-82dc-1452e997b917	2019-05-22 10:38:30.974+08	2019-05-22 10:38:30.974+08	99b535b3-ce4d-4950-97cc-45cd24ce64b1	d6faad75-a8a6-4eaf-85ed-30c0d9992e12
dc5bf8a5-0815-4e41-bfb3-3a8d1c288706	2019-05-22 16:00:03.735+08	2019-05-22 16:00:03.735+08	dfb70ff4-6696-4f3c-b709-dfa5ad977714	e4b2eb17-1aa6-425b-8ed3-b6eb62ee862c
ce0dca20-6221-404e-a259-23e46caae108	2019-05-22 18:05:37.582+08	2019-05-22 18:05:37.582+08	7ec4a983-93fb-4bd4-9daa-8f916e538b59	e94758b3-a6a6-4116-921c-8b7050cbada3
d50394d8-7604-40fb-8bad-245710bb9a50	2019-05-23 13:53:19.26+08	2019-05-23 13:53:19.26+08	ffc66398-9927-4dc5-8fce-d0d0c87b5dd5	07ea4428-ccd3-428f-a85b-1c8460c545fa
9bf5c842-fc80-474e-a50c-b8d2b0fb0260	2019-05-28 15:02:38.793+08	2019-05-28 15:02:38.793+08	8b850929-a890-4c69-898a-0388eec64db8	c6686a13-535d-4320-8b33-c625dbcbe77a
21523c5f-261d-4995-9c5d-1731e71a1f8f	2019-05-29 14:51:02.766+08	2019-05-29 14:51:02.766+08	aeea3098-6149-4f87-9a9a-474122886ef7	19f133c9-6f68-4f24-87fd-14d6fdf4120d
8061767a-f27a-428b-aac1-5c06476305c8	2019-05-29 15:57:45.392+08	2019-05-29 15:57:45.392+08	8f2c15d1-cb4f-45fd-b217-ecbf37787ddc	6629488f-b160-48aa-9b7f-842db418fbf6
440180b6-851a-4a5a-b76f-6377ff7e938d	2019-05-30 10:24:12.583+08	2019-05-30 10:24:12.583+08	b1badcbe-62e0-4c45-85e8-8e3d712d3659	f684ae18-0aac-4dcb-aef8-d641277b7295
3b40459e-dade-42cb-b8f6-bdbe26cdbc40	2019-05-30 14:29:19.861+08	2019-05-30 14:29:19.861+08	cb84ad58-6983-40a3-96ad-0f001cccaf96	774b9665-0093-406d-82a5-0876622a38b5
0e895a9b-0702-4653-8538-6e5ea6e5eea3	2019-05-31 10:37:09.081+08	2019-05-31 10:37:09.081+08	0c37d684-9050-4e23-9121-2749044fb378	481e9d5e-986b-4e38-897f-dcbadfddd0b2
f0124ed6-a013-42d1-9e53-34f2c20ca803	2019-05-31 10:37:09.089+08	2019-05-31 10:37:09.089+08	0c37d684-9050-4e23-9121-2749044fb378	e93fe806-fdc8-4e26-bb4b-9bfb860328e4
a912a8bc-8a56-43e8-913a-9b520f7e204f	2019-05-31 16:20:37.158+08	2019-05-31 16:20:37.158+08	833ae7ac-9c57-4cd1-a324-4b49acee1dfe	64b42834-88da-4052-9a4b-d54d2ded8159
69939fc7-4fe5-4f70-8b97-0ffba5860b2a	2019-05-31 16:23:31.62+08	2019-05-31 16:23:31.62+08	b1305d43-23de-4740-a7a2-213facc63133	4deee1cf-e422-45dc-ae21-00b253538032
745362fe-3607-41af-ae5b-90de52813e3c	2019-05-31 16:24:53.452+08	2019-05-31 16:24:53.452+08	e956e4a1-49b3-46e3-b953-47c2c17a5098	68b64022-0338-4ea5-8724-b23e112b8606
6a568263-9a93-4d5c-8257-900b242d8083	2019-06-03 10:53:21.895+08	2019-06-03 10:53:21.895+08	8a945623-1db8-433f-8eb9-062caccb5b89	a7fb1de1-1c96-4e0c-ab41-c24a6cc6fd79
4c1c63d1-ddcd-4695-ab95-40bff177ca43	2019-06-03 10:53:21.902+08	2019-06-03 10:53:21.902+08	8a945623-1db8-433f-8eb9-062caccb5b89	231ec281-245a-42c4-a57c-118fc0c16011
c161f59f-5b77-4941-85c6-d264d9cc3d2f	2019-06-03 11:50:03.944+08	2019-06-03 11:50:03.944+08	9cc08d17-9866-4da2-844e-be838245d9e3	7cb70a27-5f67-494d-aea7-976fceabd55e
59b2fcf8-6e67-4968-88c9-04f5a65fd5d0	2018-08-14 16:36:12.22+08	2018-08-14 16:36:12.22+08	98b425ce-50b5-4c14-98e0-c13a615cf246	4b427bc9-84b9-4440-aff2-645c64601260
425896b8-9571-4e31-bfe6-f9d03bf9d532	2018-08-15 09:48:18.561+08	2018-08-15 09:48:18.561+08	17c83e03-bd23-47ac-ad6f-637082b66444	27b6c83c-8a53-487a-a8f2-cde18a5da18e
a445aeda-63ca-45bf-a81f-95215b25cdd8	2018-08-15 10:53:47.753+08	2018-08-15 10:53:47.753+08	8a367437-ef39-437a-9e88-1dc4c6c42d14	c04eaad9-2d31-4bb1-bf18-63f3caa29a71
bc5e721d-af43-43c2-ab83-5362d3ad68e4	2018-11-03 15:41:07.73+08	2018-11-03 15:41:07.73+08	677a3cf9-1821-4ddf-98af-6bfef51be1d0	91f6f550-8306-4e10-8099-9b323d57edb1
77fd5ea5-b894-47cb-8a44-d70f08f7dca7	2018-08-15 14:38:59.65+08	2018-08-15 14:38:59.65+08	3dbaa950-0bf5-4e4c-966f-8bff21df1e2f	28d0290a-7423-4c1d-8164-7b8762604543
1969d4da-aa5c-4d4d-8f3c-d5df438615bd	2018-08-15 14:39:57.331+08	2018-08-15 14:39:57.331+08	a46e04df-5fc2-442e-8ca0-fc7da830f183	41073dc9-3180-4266-ae64-ef1d14e174f2
2decf56e-badc-4ed7-a200-fa334abc47bf	2018-08-15 14:40:39.287+08	2018-08-15 14:40:39.287+08	39fc7575-6835-4685-a956-dbbf5987d27b	2ebb555f-57dc-4dcc-9b91-730615b6ca61
a913397a-a6d8-440d-a684-65978f23c8cf	2018-08-15 14:40:50.469+08	2018-08-15 14:40:50.469+08	bdca95f5-1a68-43cb-8bbd-0940bd4f861e	47bbaf8a-77eb-47fa-8d8e-ebc01555ea5e
dd80eb82-f488-420c-ab23-f5f29414b7b9	2018-08-15 14:41:47.962+08	2018-08-15 14:41:47.962+08	3f7364b2-c949-4499-a485-82f0a141968e	1af2457f-8ccf-4acb-9445-4e81b3c91225
a4a90036-b70b-4531-ab8d-e4be33bc119e	2018-08-15 16:28:31.84+08	2018-08-15 16:28:31.84+08	b8376c42-2314-48d4-9cc4-34b538f2862e	b18ce679-ba55-48e9-a324-7b90a90f5f99
521c5fbe-7239-4915-b917-46ad204807a6	2018-08-15 17:13:27.466+08	2018-08-15 17:13:27.466+08	face6568-949b-4dcf-a799-fec9eafe6dd5	b4cb33dc-55b9-4b8f-86cb-ed164802a931
89121c0d-b427-43a2-983c-fab6176e69f4	2018-11-09 14:39:37.225+08	2018-11-09 14:39:37.225+08	652126ab-6853-4c3d-ad18-2b150a0a799e	b7fa7727-83e0-46f3-b9c6-de4800fb5451
0124208c-9b08-4221-a13d-00e16dc6730c	2018-11-20 15:38:42.535+08	2018-11-20 15:38:42.535+08	24aa287d-5c1b-4564-8b10-d71615d3c626	f3fadba7-5ddb-4dcd-94d1-5b2d5f01125f
319951c5-acc6-4a40-93e1-bab56dd0d1f8	2018-08-16 15:26:40.005+08	2018-08-16 15:30:52.941+08	244b1f17-13d5-4b46-88b9-2a48538f66f4	5127c2ad-f91e-4619-9edf-973a09cd81b9
f6a43b18-fe15-443e-996e-910e6daf00b0	2018-08-16 16:25:36.785+08	2018-08-16 16:25:36.785+08	198e6298-06fe-49a7-9245-eaca7a85f263	703a3444-277d-4e97-8a24-d2cea6881997
223b272f-817a-407b-94ff-ba72bd38fdda	2018-08-17 11:27:24.53+08	2018-08-17 11:27:24.53+08	25789235-88db-4ea7-9a8a-5d4aeb5f9532	e2ecd847-3032-449a-9cc9-ce707443625a
6ca22186-8016-4bd7-b57e-add3e8bdf95f	2018-08-17 11:33:00.285+08	2018-08-17 11:33:00.285+08	70486f7c-d11e-4014-be32-71a2e8724359	e3cc63f3-b29f-48f1-ada2-3ccd62b1411e
17ad0d86-dda4-4ba9-a8bd-065223260903	2018-08-17 11:39:56.622+08	2018-08-17 11:39:56.622+08	076391b0-0f5f-44c8-8b51-cf3c894b8b88	ed20e575-26ef-46bf-93a3-c9a1d7d099ce
026da83c-8909-411d-9dd4-d5fa3ae4f518	2018-08-17 15:57:29.848+08	2018-08-17 15:57:29.848+08	6105dff0-c96c-439e-8101-e0e7906834e0	69c54d0d-fcb5-4607-8266-dd978f93f713
2490f5ed-74b2-43ce-90a9-9259ab12486e	2018-08-24 09:09:28.366+08	2018-08-24 09:09:28.366+08	ce369680-ed47-4e58-8f38-4cbc786572a1	4ba2d703-2e5c-466e-8cc8-04bc992eb93c
67866c8c-092b-4206-9a31-2ff8ff8fd67d	2018-08-24 15:42:01.436+08	2018-08-24 15:42:01.436+08	a94fe00f-a8ea-4634-9262-e3c1ea0fa965	ee21c1d7-3c43-4cf6-ae0f-a037134f1851
c2a73850-dd77-4ce1-b93a-ae154b46a54b	2018-08-24 15:45:25.54+08	2018-08-24 15:45:25.54+08	e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b	fbdf2755-cb94-48e6-823f-a7a4b9cd9355
caf80cb3-a1e7-45c9-8eb5-0a5a5ca2b8b1	2018-08-24 15:55:16.989+08	2018-08-24 15:55:16.989+08	1ce82d97-cb86-4a43-bf17-b75116cac5e9	b6991bd8-7da3-4eb2-ba43-907ea1ae054b
a698e90e-d682-491f-9035-ec9266e1916b	2018-08-24 16:11:23.008+08	2018-08-24 16:11:23.008+08	8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b	988ad232-d103-4cbe-a8fa-f7447da0cc47
9befb243-7654-4e4a-b4be-c81679451b04	2018-08-24 16:11:23.732+08	2018-08-24 16:11:23.732+08	64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d	6c3b58fc-ffb5-4370-8878-ebe1ff3956b6
ba18e3b8-d036-435a-8877-d495ec3402e0	2018-08-24 16:11:25.601+08	2018-08-24 16:11:25.601+08	2a0639f4-2556-4682-bf61-63ab22867a18	d839dbcb-4ca1-49cf-8bad-7927d56ef8c2
922f507f-6536-4e86-ab34-769e564650d6	2018-08-27 14:25:44.823+08	2018-08-27 16:01:21.462+08	360e9d0c-a402-4ab1-b120-b6323dc53ff5	2fa1d9b0-bc30-497a-a46d-d3d70c750edf
347497da-b5e4-44ea-ab96-e02bdfef8d6c	2018-08-28 17:57:01.576+08	2018-08-28 17:57:01.576+08	3fe03489-ab89-4237-a623-60b0a9d068af	9a4f5022-d830-4559-bff6-a5b6e6b6393f
03a4133f-1c15-44a1-87b9-603b58134eed	2018-08-30 16:11:13.782+08	2018-08-30 16:11:13.782+08	64210070-761e-4035-97b8-f76bfe61fca5	d2078c90-429d-4446-998d-d43e6ccd4b77
c1286496-c73a-4155-876a-9c630a0335ab	2018-09-04 10:56:14.341+08	2018-09-04 10:56:14.341+08	433bad92-fb3c-4e0f-b28a-c82c4c85fb5d	6ac020e9-abb5-4bb3-bbef-a3b930f21731
29d35fbf-992b-4780-99c2-7eeda087b23b	2018-09-04 15:12:25.834+08	2018-09-04 15:12:25.834+08	a3794dba-f03a-48b2-897e-e5f4f9c077e9	6ac020e9-abb5-4bb3-bbef-a3b930f21731
3ee5d404-c1d1-4c48-be0b-531f42fecd47	2018-09-04 15:13:41.05+08	2018-09-04 15:13:41.05+08	621548d2-0189-47af-9d78-c0e928b92373	869aebb5-9093-4651-b0ff-eb3835c3e88d
2728f9d9-72c7-45b7-aa0a-2a27814d7146	2018-09-05 09:55:00.358+08	2018-09-05 09:55:00.358+08	2ad7273d-8ff0-4461-b87e-01d92fe46764	d0212fe3-5814-4546-8b3a-de355f207a2a
af91d83d-b1c9-4847-a99f-4b67a53fd1be	2018-09-07 09:46:01.479+08	2018-09-07 09:46:01.479+08	450bca7e-218d-4faa-9527-ee2f0eceb3fe	71a44ffa-c49f-4c12-8112-50ba20100e20
fa60dbbb-b3bc-4c9c-93a2-7ccf688ca7f6	2018-09-07 10:55:19.828+08	2018-09-07 10:55:19.828+08	4918bd89-601e-4f79-b31f-0aeda6062c82	c0e552fb-ad46-451e-a33c-adc8fd3a7f24
80c38f5a-d0ab-43a0-b4e0-de5338ce5249	2018-09-07 11:09:31.05+08	2018-09-07 11:09:31.05+08	f46e1f36-2e28-4b26-950d-2e00fb0b4a03	0bdad9e1-ec85-44fd-850e-954954381313
d03cf059-b7dc-43ae-bdfb-43c5ebbf47a0	2018-09-07 11:18:28.042+08	2018-09-07 11:18:28.042+08	8e1cc471-0670-4c4f-aa30-013e6de6e3c0	c8bfa700-20bc-46d4-b876-a46a392e04a6
cec80494-d1d0-4c17-b5fe-22305b99b2d1	2018-09-07 11:22:10.553+08	2018-09-07 11:22:10.553+08	402f6e2a-74c7-4a3b-9021-66f64352eb7c	a088573a-f033-41a8-acb0-6670bcfac941
d32a58fe-c623-4188-a231-976fb0fc7af1	2018-09-10 10:22:20.299+08	2018-09-10 10:22:20.299+08	54115f13-d150-41a4-8d45-05de44b8decb	dd20c30f-b6c1-48bd-8033-6a74226db443
9c4c59d7-d12e-4af9-920f-8395a979fc5a	2018-09-10 14:41:25.419+08	2018-09-10 14:41:25.419+08	a051bf54-cc33-484b-ace2-fe97c26e2ed8	10cd3331-634c-424d-bbbd-8722d7b57780
c390d353-663b-4d92-a639-193305bd8bb6	2018-09-10 17:11:08.809+08	2018-09-10 17:11:08.809+08	da8b12eb-4ee8-488d-a51b-25c30a677462	d185b76d-f67c-45e7-a3ea-acaef9c07ec6
db5a9e8f-94ce-4182-b68c-5121b9fae17f	2018-09-10 17:12:13.136+08	2018-09-10 17:12:13.136+08	7bca9e02-73e3-4462-b527-a443d6ba576b	01d7db4f-1d4f-48ad-9a55-f99c88c7d993
4e9b5cd4-81ab-4e8d-b1ba-79ac82e9330f	2018-09-11 14:34:02.871+08	2018-09-11 14:34:02.871+08	6ea1caa6-8d9e-4f83-87ed-c73c2ed5e8ec	6ce95b94-a0b7-49cf-94c7-b61f921a526f
aa249a85-7a7c-474a-9cd8-bfb0cc10ac77	2018-09-11 14:37:10.404+08	2018-09-11 14:37:10.404+08	df2bbcd2-bc11-48de-8307-826382959126	79718b5e-8dd9-4ae7-b11e-c17173b4793d
a6dd5f5b-8b8c-4f5e-b16a-cb4cbde8048f	2018-09-11 15:50:20.326+08	2018-09-11 15:50:20.326+08	d0eba673-a21f-47b7-8c47-0368788a1b62	2c2b9e64-45cb-4df2-b0eb-aa6968c9ee08
6839293a-da00-4f6f-be22-7ae7df9b09d1	2018-09-11 15:58:19.428+08	2018-09-11 15:58:19.428+08	5e49818b-0a1d-453c-aa14-1979f1371690	a964c6c9-365f-4c63-b62b-cdb064a34695
0c006804-32be-4ff2-878d-cb5d0542d228	2018-09-13 17:12:19.027+08	2018-09-13 17:12:19.027+08	b9007592-b65f-41bb-9c2b-e283e2b01619	7f1dd7af-ebee-486f-9ead-aed01fb9cf19
6b75c097-f196-454c-8c8e-94f4c0f05789	2018-09-13 17:17:20.664+08	2018-09-13 17:17:20.664+08	7bbe4206-6562-4fc4-b62c-94b500d6cc4d	b7b5df77-bbf5-4850-a327-7ef397695976
4f9ed9ae-51f3-45ec-80a3-6c592cf8fbe5	2018-11-05 09:08:45.143+08	2018-11-05 09:08:45.143+08	970a19fd-31b9-4485-90d3-6394bc637a87	bcce5a40-25ee-4628-81ec-ddb2ba172bbc
a3406ee7-5682-4c72-b388-382b14dda76b	2019-12-31 09:09:31.629+08	2019-12-31 09:09:31.629+08	15046a7e-2b8d-446c-963e-0f8af7fe7475	8cd796d2-bdea-4fee-94fe-af39216acd9c
ac469c2c-01e3-4607-ae13-bcec177f5ddc	2018-11-28 15:40:39.937+08	2018-11-28 15:40:39.937+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2d72e310-41e8-48b3-8589-e1fdc02234a1
565fdd7b-71d4-4469-85ea-fe71f6c504cf	2018-09-19 17:31:06.054+08	2018-09-19 17:31:06.054+08	6c510bc0-0f56-4f00-9c1c-41b619a86a28	c7ac0d00-dcd4-4dc1-ae3d-1ae943392ad1
bfbba727-b454-4203-85fb-cea83f51ef85	2018-09-19 17:32:07.001+08	2018-09-19 17:32:07.001+08	3b5383c8-bd1b-4f0e-bfea-1f0d746133c5	161d57d4-a9b7-44a5-a6b0-90ea6c5a2121
cd89b300-b405-4cc9-b560-146c8ab9795c	2018-09-20 13:52:41.754+08	2018-09-20 13:52:41.754+08	16407e57-188e-42f3-b626-ac8ff7405aeb	a5d45d20-8865-47eb-9bc3-3982af96ed65
9ae184c2-a545-4acb-bbc0-3014540d9fe2	2018-08-24 15:26:31.715+08	2018-09-21 11:23:25.187+08	042a30bb-34e1-4994-968e-af8cbfd1bd6a	dc210dff-ef4a-4e64-adab-59655d775a74
efa6e67a-3c28-4a99-b852-afdf1b5e8d22	2018-12-11 14:09:09.39+08	2018-12-11 14:09:09.39+08	a1a7e32d-9449-425a-9043-e40a835abf95	26ad1933-4049-40dc-8b89-c9122a6d58af
b7be8634-1f7d-4665-8e64-918c8fedfb64	2018-12-18 16:53:41.862+08	2018-12-18 16:53:41.862+08	fda2ff9a-981a-43fb-9a27-2f74effa3e43	6aae0b51-ec60-4612-a5bf-bfb15e46401a
6d607ce5-c835-436d-ba67-17057865470d	2018-12-24 11:53:26.531+08	2018-12-24 11:53:26.531+08	a20c22f5-81ae-4aa9-9a71-40fd0854d653	5de53d90-f7f0-4a31-b82b-f6582e38cc39
b6c3b56c-030f-43d1-9f4a-2fffc3e43b96	2018-12-28 11:17:19.431+08	2018-12-28 11:17:19.431+08	b9a47230-060a-45fd-8409-4307247b8a62	a76e6a76-e9bd-462a-a916-27797d6febff
87078ffe-51f4-4c7b-8667-6cf14d1e8019	2019-02-25 14:24:04.302+08	2020-05-09 09:29:10.89+08	8b567669-1458-4b89-8448-257ca3ecb15c	a71d3565-92e0-406e-93f6-9a5b9edb1917
fa408d5e-55d2-4ec3-ba04-78f1e2875984	2019-02-22 13:44:23.987+08	2019-02-22 13:44:23.987+08	b1305d43-23de-4740-a7a2-213facc63133	bb576050-eafc-4b48-80fd-4efee1d5db5d
c6e95ed1-b13b-4b78-afb7-bda879781ea8	2019-02-25 13:32:42.921+08	2019-02-25 13:32:42.921+08	4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	8489e217-3c86-459f-9fbf-33d6efcdc58e
170225c8-2695-48d2-b665-274a1abc495d	2019-02-25 13:32:42.949+08	2019-02-25 13:32:42.949+08	666d6810-bfe4-47ca-93bd-fa60ced4252d	8489e217-3c86-459f-9fbf-33d6efcdc58e
3e064406-873e-47ca-9334-ab67ffbe50a1	2019-02-25 14:24:04.325+08	2019-02-25 14:24:04.325+08	63df0f39-75da-443e-a275-59ebd94aa3ea	6e6be4e9-0c8a-4281-97d5-d61407a645f5
99b6da3a-e798-480d-8ba9-bec1c1943b6c	2019-02-25 16:03:31.521+08	2019-02-25 16:03:31.521+08	9a7d0b50-af38-4c47-b314-4dbca09f5ad2	688625b2-bc87-49e2-8183-5ea065fe988c
ace9ee4f-9f84-4289-81ca-cb46d6e67600	2019-03-15 16:36:12.145+08	2019-03-15 16:36:12.145+08	895b9731-8518-47fc-b126-37124415845f	5602db39-4448-48d0-bd83-5f5c7d153ee9
f94c82a7-651c-4aba-9e05-d57e06962352	2019-03-19 15:25:15.768+08	2019-03-19 15:25:15.768+08	43846e9c-36d2-4aad-a9ed-cc837fecec96	c3311b93-b9ed-4269-93d7-b0ad072e57d5
22c6a3ef-3f0d-4b14-9459-62a6288233d5	2019-03-19 15:25:15.783+08	2019-03-19 15:25:15.783+08	5c3255a3-17a0-4ff5-8704-351d606c322f	c3311b93-b9ed-4269-93d7-b0ad072e57d5
6fc8682d-9b95-4d0a-90e9-e6bca6f147a4	2019-03-19 15:25:15.797+08	2019-03-19 15:25:15.797+08	09b8a9bb-2979-488d-9ada-612e0e3c8104	c3311b93-b9ed-4269-93d7-b0ad072e57d5
a13f40bf-148b-43a9-84a9-5caf593d36c9	2019-04-16 11:02:08.118+08	2019-04-16 11:02:08.118+08	51de3079-41a4-4b3b-9e3b-4d9bfb13fef8	cb44766d-6328-46a6-a1e2-dccbc8abf7ce
c5ad3c3d-c626-4c50-9e95-40545c014d69	2019-02-25 14:24:04.276+08	2020-05-09 09:29:23.039+08	e2096ac1-6a10-4df5-9393-173d19fbbee0	3b7f8cc7-cdfb-433c-b2b1-3e94e0bb57af
09eed98f-83e9-45ae-bb37-a0a78325ab11	2019-04-28 11:25:30.658+08	2019-04-28 11:25:30.658+08	55d1faba-c22b-4730-a51c-1979541f342b	443e2148-f4da-43ee-b65d-7871425558a6
c0957965-eec5-4c2c-ab8a-650c2743336d	2019-04-28 11:27:08.995+08	2019-04-28 11:27:08.995+08	e5a6d57f-122f-4dac-994d-1a83a93b2440	ab6325d5-dbae-449e-8c76-86b82e488771
53abf4a9-bd6c-46d8-8941-326ebabca895	2019-04-28 11:28:46.202+08	2019-04-28 11:28:46.202+08	833ae7ac-9c57-4cd1-a324-4b49acee1dfe	385ce4ca-9613-40dc-b62b-b939a0f49f24
9f833b05-cd3a-45e0-adc9-57fb04397995	2019-05-07 16:51:29.091+08	2019-05-07 16:51:29.091+08	df20f27f-9f90-4d8f-b4bb-db033628f414	2c43bbd4-cbae-41b9-974f-84297e8d9e16
4203bb19-614c-4a12-b495-41075ed75cb7	2019-05-30 11:21:18.834+08	2019-05-30 11:21:18.834+08	28904408-12e5-4569-8499-937ce3f253ef	29410758-574b-472b-86c3-7d1cf0e76b91
866cdb2f-aac5-4a43-91d5-b3c9988b9db5	2019-05-15 10:48:06.52+08	2019-05-15 10:48:06.52+08	f21dbd7b-867d-4273-8141-7817fa5685d8	6721bd30-fd2e-446e-b46c-2d301c9bd8a6
67d68d53-92c4-4ac0-bbcf-e2e4c53ba574	2019-05-23 00:05:40.576+08	2019-05-23 00:05:40.576+08	fd94be74-66bc-48ba-94d0-008b6d6d5413	d66fa059-5b42-428c-9c83-65b31ec08a45
ea6f43f5-4576-4a76-8ed3-3c90b51fab43	2019-05-31 16:21:05.076+08	2019-05-31 16:21:05.076+08	589695ad-b029-4c5e-9425-4946e80f3fb6	d2bcc066-99d6-44a5-89b5-f3263bc219c0
279662e5-8598-40b6-87c8-d49e95758a76	2019-05-31 16:25:19.631+08	2019-05-31 16:25:19.631+08	738a6ad2-95f1-403a-94a1-8f641b2ab73f	947b9222-20af-4c12-a0e3-b2ac87fe9f2a
382ff159-dcd0-4a6b-9332-fecb801c69d3	2019-06-06 14:25:39.615+08	2019-06-06 14:25:39.615+08	e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e	cefce46e-a10e-4588-a7b1-c6b5e0454e31
7ee052ca-eb55-43b9-b8b1-6eaa4d0ff3b5	2019-06-11 15:59:09.861+08	2019-06-11 15:59:09.861+08	7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	3363d9e0-2735-405a-bdb3-d15c36520807
9ace84eb-5912-4ca3-bdc8-fb0961c1a94d	2019-06-11 15:59:09.866+08	2019-06-11 15:59:09.866+08	7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	0d24fa6d-e98f-46b5-a3f9-67b3e859cb96
53105f07-2f57-4197-8780-1978faa23a98	2019-06-11 16:42:42.402+08	2019-06-11 16:42:42.402+08	aabd5c05-617a-41c3-9ba6-925ec3334ff7	9da50509-5f5e-41f3-b078-2be4bc483f28
9caae2f1-c6c9-4d59-a07a-4689cca125c1	2019-06-11 16:42:42.408+08	2019-06-11 16:42:42.408+08	aabd5c05-617a-41c3-9ba6-925ec3334ff7	93585b8f-19ad-4e59-a78d-a9b4db270b0f
531d8088-83d5-4815-b417-cbc865d2b531	2019-06-11 17:24:10.318+08	2019-06-11 17:24:10.318+08	1515cbb4-bda7-45b0-84c9-dedf0de93039	a8f79317-c98e-4a7e-8b54-5135e22f7e37
47a87d0f-ddd0-4702-9652-3142062769ef	2019-06-11 17:24:10.322+08	2019-06-11 17:24:10.322+08	1515cbb4-bda7-45b0-84c9-dedf0de93039	0cff1454-261b-4273-aced-f792a7e564cf
a696013e-5b54-4568-a711-d75504f9259b	2019-06-18 15:44:35.522+08	2019-06-18 15:44:35.522+08	43bce07c-dfec-4867-b501-00a047455ab9	f89b5fe4-284c-47da-9883-f515e6d73929
ff4a18e9-1e4d-4a06-9640-9c05eccfddef	2019-06-19 13:58:50.992+08	2019-06-19 13:58:50.992+08	b97de8e9-82aa-492d-9c8f-5d7347a24d93	99f48679-0083-474b-a125-a3c4f4180626
b3a2a84d-41b6-4553-936f-fc675d8a9cdd	2019-06-20 09:22:50.974+08	2019-06-20 09:22:50.974+08	26896cc1-415c-44cd-a3d0-36d3908ab014	009461bc-fccf-4311-a769-a2d7dc5e05fa
34734e55-43e5-495e-9e86-75f328043d1f	2019-06-20 16:55:24.382+08	2019-06-20 16:55:24.382+08	deca7d64-27f6-4e88-9247-34756d2e3073	559c9c33-544e-421d-ae15-3a68d3a2c6a3
b60f696d-63fb-4070-be25-3ca1067be0a1	2019-06-25 11:39:02.437+08	2019-06-25 11:39:02.437+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	f4e5cb7a-c6da-4082-a9e6-7ce7fa47cc20
d6a4840b-bfbf-4884-b036-fd74c0e4a51c	2019-06-27 09:35:05.718+08	2019-06-27 09:35:05.718+08	b071ffa1-9fb5-4fac-8295-cecff8edaa95	6d14cdaf-b1e2-431a-8696-9509d87aee1b
3c706b3a-ba81-4a92-944e-46f7b097afef	2019-12-31 09:12:37.789+08	2019-12-31 09:12:37.789+08	514bb698-2903-47d6-9749-67f6ead2de82	261b6b65-18f2-4652-8cad-489527158a97
238ebf03-79b1-4095-b2d8-6acded61f20f	2019-07-26 16:38:11.742+08	2019-07-26 16:38:11.742+08	4801d3ef-12b9-41d2-bea8-f20ddeb90568	a5fe8095-bd72-41c5-adeb-cfda5c403460
d4d26ae6-af80-4e83-b438-91ebeaf2bb4e	2020-01-02 14:23:30.869+08	2020-01-02 14:23:30.869+08	83b1e284-b0e5-43d1-8881-bc7fc3317dd9	8d019347-0d6d-435e-a798-e7dba9b83e94
bb24be94-b44c-4f69-a434-97adc9e02d15	2019-07-27 11:32:00.718+08	2019-07-27 11:32:00.718+08	c2632f26-f172-4ed4-bc84-48cc89b6e36a	a5fe8095-bd72-41c5-adeb-cfda5c403460
c8a20255-9dcc-4f26-9cc8-078871ced66e	2019-07-31 10:14:14.853+08	2019-07-31 10:14:14.853+08	16eac313-4d5b-4b3b-960b-e3c3b7fbe450	577193c0-1b0d-478b-9564-5e4fbdeb93a7
9756295a-f202-4f90-8973-e64671e6b729	2019-07-31 16:04:11.153+08	2019-07-31 16:04:11.153+08	e7674511-d506-492f-9321-966a9efe6971	77cd6691-869c-430a-963f-76d142e0fc59
b80a8014-7e88-40b2-a438-803851989c80	2019-08-03 18:26:25.698+08	2019-08-03 18:26:25.698+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	a5fe8095-bd72-41c5-adeb-cfda5c403460
f59bf8d4-0846-406a-aa02-cd55b2d3e1bd	2019-08-05 09:26:48.716+08	2019-08-05 09:26:48.716+08	64576b12-36a8-4ca6-ac63-273401d692c6	5db05fad-c8d0-49d4-b1b4-fdc4d103a4f2
63b85297-3111-458e-971b-9349a2942e75	2020-03-01 20:27:14.573+08	2020-03-01 20:27:14.573+08	d5ca53cd-12eb-4cb5-81e0-8697934670ab	e95096f3-3c08-4f2c-a05d-474bc1c21b61
52edd12f-67f8-4d1b-95d2-60fdafbbf1d7	2020-04-13 16:45:01.118+08	2020-04-13 16:45:01.118+08	b9a9f40b-2946-4b0f-abe7-10611a02fe1d	c244de67-ab93-4d9f-94a3-7965dfdd1554
843c2c3d-70b9-4879-8efb-c0207f4a8c9a	2019-08-05 18:13:22.794+08	2019-08-05 18:13:22.794+08	32f98475-6b76-4723-a2f5-b0b7aed04cf7	c68e5d05-a0df-41b4-a083-bf39676b5f16
b4806fc9-550c-4fb7-8a47-b5d446b1e444	2019-08-05 18:14:48.663+08	2019-08-05 18:14:48.663+08	16beb620-de9c-4137-a7cf-e63da5b0108c	755738d1-45b6-4543-9264-338035fde289
7d3e1504-8a91-4b78-911a-fb6e96fd9e54	2019-08-06 11:00:53.843+08	2019-08-06 11:00:53.843+08	33bba333-0d20-43b4-a0e4-7dfaba4a9896	ac6b47f4-f4e5-4116-9ecb-ea3a596d6c87
ee8ae698-a715-46da-8e63-cbab61c8ac4b	2019-08-07 10:27:40.176+08	2019-08-07 10:27:40.176+08	008ccbe4-2335-4ad6-98e4-57807ab4de7e	9ca0fc98-cca7-4941-9663-845bae9ea161
36c85fd2-c10b-47fa-9417-dcd1265a6b52	2019-08-07 10:34:16.599+08	2019-08-07 10:34:16.599+08	13b1b357-66cc-467f-9f25-078c46fe28b6	651fa16d-db86-4bc6-ab8b-b897d720abda
53a6f578-516d-4aec-ba9a-9f11384291c2	2019-08-07 10:40:39.075+08	2019-08-07 10:40:39.075+08	5848ef89-cf06-481f-8044-51774b0a2694	4bc02775-53a6-4460-b702-ad1052ca5d16
0e832400-d381-4203-a217-7471a6354d6e	2020-12-24 14:38:04.639+08	2020-12-24 14:38:04.639+08	ce14d28b-bad7-4d5e-b418-d40663dceaec	30181893-36ba-45e6-b87f-8d8cac3d3b37
0ed3daa7-5923-425c-b415-c90094115f20	2019-08-22 14:28:44.638+08	2019-08-22 14:28:44.638+08	9fe86237-419a-40b2-890a-00e0bb8d4af7	880b9fcc-cf91-4493-8a91-62eff6c334c5
5f823c0b-ee33-493c-806e-1ef8025b541a	2019-08-08 16:08:27.681+08	2019-08-08 16:08:27.681+08	09943af3-4f49-495c-8612-c63a3a407e28	5988c18f-590f-492e-a15b-dedb507026b5
43ddd6c4-04ba-433e-8415-3e3438c4fcd6	2019-08-08 17:57:55.414+08	2019-08-08 17:57:55.414+08	75960822-83b9-4eb4-accd-bbccb4f4d139	f2304d99-4332-428d-bb9b-c9114a9920d2
f8d5c2ff-02bb-46c8-a0d7-3cbbe64b11b0	2019-08-09 13:11:50.741+08	2019-08-09 13:11:50.741+08	1e9d3e4b-b208-4686-822c-c164a4f9cf7f	3272414d-9f0c-4b06-8b0a-a795eb6efd7b
93983d23-28eb-40b7-9605-cd471591f67a	2019-08-09 13:16:39.316+08	2019-08-09 13:16:39.316+08	106bec29-1b71-4f53-aab5-ad3d19c17116	b6842940-36df-42a2-88c5-b23821666a3b
b8412865-06e3-40bc-81f8-8addb2dfadc6	2019-08-12 10:05:14.774+08	2019-08-12 10:05:14.774+08	f51d17c7-ad54-48ce-997c-13c1fb3ab155	2d14a681-e0d3-4bdd-baa9-55d66f12a7e7
87a6fd84-2aa4-45c5-9736-df7d40445303	2019-08-13 17:52:48.316+08	2019-08-13 17:52:48.316+08	f31682e1-01ba-49e5-9639-886bee03cd1b	e04f7d4c-fa14-4062-9c51-d6b0339fa07b
9241ca3e-a8f1-4674-8e57-712eecfbd55e	2019-08-19 10:39:47.475+08	2019-08-19 10:39:47.475+08	eb5ec9d1-8ab7-49ea-8ced-3602ed68f445	89c979fe-c1e6-4f97-bb91-23de053d3180
40ce4705-f8ba-454a-9b75-3f0bef7a6ece	2019-08-22 11:04:32.313+08	2019-08-22 11:04:32.313+08	de5f27da-de79-4d11-a4ca-65bc1a9f178a	c989c701-e938-4278-b25a-c8e62760f036
c9afe19f-ea93-4ab0-9771-9822dfdec2d3	2019-08-22 11:27:45.896+08	2019-08-22 11:27:45.896+08	bdcb0ea7-10de-4b76-80bd-c01f036ccd33	cbbb0c0f-8a80-4df3-87cb-d80512c19639
2172f832-f3f1-484c-9156-0d3fe51b3f2c	2019-08-22 11:37:33.016+08	2019-08-22 11:37:33.016+08	6545a9cc-c2d6-4477-ba72-3db5a96d2ad8	29c6d92b-4c71-4826-a921-8ceb10b7560d
fb31c7b6-4361-4a7a-979e-4d9b71a23c8a	2019-08-22 11:37:44.957+08	2019-08-22 11:37:44.957+08	85cd155d-f611-4694-8051-4d81fbef2028	3375723c-28e2-4d43-a5c2-e10974373d01
1908983e-6418-44f9-9957-04c6f5d2a948	2019-08-22 11:41:46.109+08	2019-08-22 11:41:46.109+08	8f177fbf-0fed-4306-a80b-6a2751f5fb9b	eecdc85d-85a0-4dca-aae0-dec7fd23b8a7
dddb8f95-534f-48b6-9340-1e7e65d1b633	2019-08-22 11:51:37.065+08	2019-08-22 11:51:37.065+08	0f06e6d2-1ad3-4cad-92a2-c3a23e36206b	3375723c-28e2-4d43-a5c2-e10974373d01
7fe4ffab-e366-4004-b65e-5c64108d9584	2019-08-22 14:09:28.32+08	2019-08-22 14:09:28.32+08	451d64cc-b568-44be-bace-184e24b4e827	2ce5d834-0933-4b80-92a1-0f8e07c12cae
a13f91d8-3da7-482b-977f-81a4cb1637c0	2019-08-22 14:20:43.396+08	2019-08-22 14:20:43.396+08	84e805aa-df66-43bf-9705-01e6b6c1e741	a4f761da-30fe-4ab6-9723-15ddfee5a122
a4b8ba4e-373c-4b47-ab20-22db3f7b8971	2019-08-26 11:02:04.251+08	2019-08-26 11:02:04.251+08	ff22ed2b-4d22-47b5-b0e1-9d35c72caf99	443334e7-e33b-42a5-a28b-c6d5236a3bdc
00e057f9-0551-4833-bf0f-709c27eca4ca	2019-08-27 09:01:04.07+08	2019-08-27 09:01:04.07+08	0a9589f0-6b8d-474c-b07d-8c6da527a61c	2a35435c-8310-4106-8f81-62cd9e5ff419
fd8cd9e5-f679-4ca7-83bb-7f99671b951a	2019-08-27 09:54:34.305+08	2019-08-27 09:54:59.477+08	4e08e98b-f49d-4032-bade-d8145cd4bad7	191ea0f6-1f56-4d21-afd5-79e38a293bed
4e28ee47-8ece-415b-9294-77bdb2b2b6e6	2019-08-27 15:43:13.017+08	2019-08-27 15:43:13.017+08	5af22086-4fb6-4d39-b439-f1bfb44b2bcf	3538712f-979f-4a0b-8023-88d67e679dd2
62186140-a0c9-4550-b449-14b9e691d4e9	2019-08-27 16:31:15.683+08	2019-08-27 16:31:15.683+08	7d5f863e-8fad-4de4-a417-48b29d1df1de	e7bc168f-4187-4d39-826a-117d253cb165
905ca5d0-67c8-40fd-9b5f-d8b6fa109cf5	2019-08-29 09:13:21.322+08	2019-08-29 09:13:21.322+08	aa7aaf91-1e54-411a-b174-22ee7c40c07e	8edb15e2-2c8d-4166-907c-65607aee4f74
2928b185-9e7d-43fe-81d4-c2e9c355a87b	2019-08-30 12:11:38.828+08	2019-08-30 12:11:38.828+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	0821e034-0233-4466-97ad-13ab408fabcf
1703ad21-463f-4b0e-8025-789d08ea6438	2019-09-04 13:53:37.979+08	2019-09-04 13:53:37.979+08	5664cb08-5e57-46c1-ac71-23220613639c	4fdf90fe-1ffa-4099-96ac-7f29ac3d8c02
518c4d04-922f-4c5b-b41d-2114f98008fa	2019-09-04 15:12:14.205+08	2019-09-04 15:12:14.205+08	034ff83b-34b0-48a5-9ccb-774a844901f8	ad4ff171-1622-4d98-be68-31ccc47670ce
7d113507-2c94-4d0b-be33-dbbc6d3c81d7	2019-09-04 15:22:34.905+08	2019-09-04 15:22:34.905+08	58baaabd-502a-4f68-a62d-c0cfeddd7ec4	94a57fd5-7132-46a4-bd02-c8bf82b23612
81c0a534-bd53-4614-bdca-f34abdc0bf3b	2019-09-04 15:40:23.398+08	2019-09-04 15:40:23.398+08	e52f95e1-8fac-40af-a49a-baad70dab906	b0fab7ce-8158-48ad-8adc-7afd0fd05b6f
74154e25-be47-412b-8ec8-596a2a7c84d7	2019-09-04 15:48:38.146+08	2019-09-04 15:48:38.146+08	cf8445c6-e70a-419f-8a2f-ba7f44896604	e45fe22a-617a-4c7b-81bc-fab457214014
d56e2db3-1075-456b-9be3-4c03d8772c35	2019-09-04 16:08:42.927+08	2019-09-04 16:08:42.927+08	a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab	656a3518-d900-4a80-8f78-1ddd189e4a99
9d40730e-8c29-4553-a220-a02b12964a8f	2019-09-06 10:08:00.11+08	2019-09-06 10:08:00.11+08	63cf9ae9-373c-4b2c-82de-58d3172094bf	3a45f740-c977-47f3-adee-712981f14584
8b66fe3a-20d7-499b-bb1b-28e3f295f759	2019-09-06 11:16:52.02+08	2019-09-06 11:16:52.02+08	92438dc5-877a-4bef-9261-a651bc3439ac	c0ff77a6-4d80-413c-a71b-842314237d20
bc76ba63-aff1-4fdc-98b0-5d2dd610f6f0	2019-09-10 14:47:17.503+08	2019-09-10 14:47:17.503+08	5dea6ab3-3969-4e41-804f-eff249d5d9ce	03bbaf0f-a95e-4fc3-8be0-f1bb133e6c59
f76a8915-b150-4a3a-b557-5e9f76e1fe6e	2018-04-16 16:01:22.153+08	2019-09-10 15:44:53.915+08	ae06a9a5-6f60-4dae-9983-cc4677c08d97	f3f91a46-2eb7-4c1c-a364-2af8856c8e67
a970556f-3d66-483c-ae93-ed95ebe92f87	2019-09-10 16:52:37.764+08	2019-09-10 16:52:37.764+08	f1841b24-8182-4a14-ae68-c0bad62cec3f	1c6fff73-3ce7-4ad2-9d35-9d56b4546354
f109667e-40e1-4009-89de-1485287518a8	2019-09-25 11:24:05.401+08	2019-09-25 11:24:05.401+08	1bcbd000-415e-460a-a4f2-63d8f232bbf6	0219f24f-25b9-4546-9d81-8367349d0277
59c2e8c0-af9f-454e-980d-e30087d04d3d	2019-09-10 16:52:37.773+08	2019-09-10 16:59:00.066+08	10c5b435-17c1-49f9-b45c-6a61c35f8071	a901b930-3d22-42d7-a4c5-fa642e4d6d6a
f48486d2-81bc-4d39-9b42-3764e4886599	2019-09-10 17:05:25.335+08	2019-09-10 17:05:25.335+08	7cb252c1-fad7-4874-bc56-417537d2d35d	c9a6c01a-1560-452d-9a35-679537571bf2
24c18590-d5c5-41a8-b1e3-22ac99fd1d2f	2019-09-11 10:29:02.885+08	2019-09-11 10:29:02.885+08	7a7c3f51-9057-44b5-b7e7-ea9b73c89a50	0b4f22fa-ae6a-4447-885d-35c6ef622b78
07c3066b-391b-4b5f-8063-fc40cf4ca835	2019-09-11 11:36:46.924+08	2019-09-11 11:36:46.924+08	799b57ce-6f05-46b8-8d02-8b0e71997270	618e7f9f-11ec-480e-8851-e26d099ea06c
fedbdbe3-235d-4426-8a8f-dc9e69541b53	2019-09-11 11:57:38.703+08	2019-09-11 11:57:38.703+08	1fdc974b-f062-45cb-910f-13b5a193e084	dcee217a-22ab-4996-9ad1-03c62a6b4902
dc2a8458-fd3b-4866-b677-18d7971696ee	2019-09-16 16:50:20.702+08	2019-09-16 16:50:20.702+08	b57f384f-11d7-499f-8e6f-5bcfbc054334	405f26fd-abc1-46d4-8f41-3a60c6765ed4
b994283b-91bb-4d0b-9010-d514a33c37a9	2019-09-17 09:35:57.991+08	2019-09-17 09:35:57.991+08	7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6	b65ec323-0509-46fe-9d0c-52e8330fb545
41bd1e5c-d9fa-42ae-8255-ca03b10cc0dc	2019-09-19 09:41:34.185+08	2019-09-19 09:41:34.185+08	7cb1a32e-60d7-4241-b1aa-4a2fadd39d82	7e256ea6-aa85-4094-a615-21f74404888d
1d6caa1d-7854-498d-bafa-8500b5b237e0	2019-09-19 12:42:11.939+08	2019-09-19 12:42:11.939+08	c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2	cd348cb5-97c6-4981-8022-26e74e9d0b35
c773c04e-c4a1-4a8e-a63f-9d7eb4d56483	2019-09-19 16:41:31.462+08	2019-09-19 16:41:31.462+08	ef5fc14d-bace-4e50-a536-81112feb65a8	5e03d125-7525-421a-9697-995ac40df8f5
27cf2992-7a1e-451a-800f-e54904eeda14	2019-09-20 14:50:00.961+08	2019-09-20 14:50:00.961+08	5451cf1c-6aec-416c-9e9c-de8d9281110c	3634cea3-6aed-48c2-8d2e-90ddacf28317
db927157-5a91-4218-86df-e24e91ae6d0f	2019-09-24 11:35:40.963+08	2019-09-24 11:35:40.963+08	1155c110-625f-47ac-b8bb-f85733b50122	5e16458b-b726-48c0-b781-96f28b18ecc4
45c0879e-4a5f-4bcd-886a-e3b80995250c	2019-09-24 11:35:43.257+08	2019-09-24 11:35:43.257+08	dd622fcd-0936-4ede-855b-50f5439f0fe1	24ad6c87-e81b-45f9-b240-fddaba5e2b44
17ff4679-8879-4326-9c36-4cad2b0f8710	2019-09-24 11:44:07.149+08	2019-09-24 11:44:07.149+08	35c6a683-69d3-43c9-af6e-ac9c72bab707	e8db6360-e3df-44ba-b4d7-270b6b3fccbd
956daba0-95e1-4ae6-8f81-a2f699551022	2019-09-24 11:48:21.03+08	2019-09-24 11:48:21.03+08	cd84b56e-7ef8-4b5b-ab86-ebefb3e7706f	a6b46729-f63a-42c7-946c-2f308b7e169a
de2895d9-0291-43d9-bc4b-4f720e517c0d	2019-09-24 11:49:24.143+08	2019-09-24 11:49:24.143+08	d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942	033a8ac7-85bb-4a73-bf58-df30fe677bef
f35402da-a3cc-496f-a450-f917d72e8b97	2019-09-24 11:50:48.679+08	2019-09-24 11:50:48.679+08	723258be-4d0f-4a3b-9e4b-da3c3dd14524	6ac020e9-abb5-4bb3-bbef-a3b930f21731
2ddd3a97-60d9-4eb8-8137-02c920ddea53	2019-09-24 11:53:37.812+08	2019-09-24 11:53:37.812+08	5dc53d97-b267-49c4-a4be-f289a2812764	8ec909d3-5d38-410c-8e0c-ef9e2d5d3417
d723f186-ca5c-466a-b175-6b0fcc6acb84	2019-09-24 13:54:21.767+08	2019-09-24 13:54:21.767+08	ef0dc799-e1ec-4fb3-86f7-2ac498f26f55	c38840bc-94d7-4887-9f97-2851fd59423d
4ea00e47-c9eb-4141-b9eb-7b0e680ddcc5	2019-09-25 10:41:37.043+08	2019-09-25 10:41:37.043+08	a308f5d2-2559-4f60-8323-c243f04ce8cd	4c016552-7e6a-402f-b5cc-d4cf2644cef4
1469fde6-e1ab-49ab-8c0d-583175f11051	2019-09-25 10:49:31.398+08	2019-09-25 10:49:31.398+08	806e534e-417f-4802-a29d-23edbe5ac02d	6e2c64c6-e0f9-4454-bebe-cc6b592c47d9
a5ad7a20-2bec-4fcf-ab2d-51e155f1eeea	2019-09-25 11:07:08.074+08	2019-09-25 11:07:08.074+08	8dc2cfaa-524f-4b62-b655-1061f1a863ff	23530c8d-f685-42cb-94a9-f36a8966b2f8
618d639f-d616-480e-a586-459d7b67c3f8	2019-09-25 11:19:02.088+08	2019-09-25 11:19:02.088+08	804133e0-c4a4-441e-acb9-a504734bbd62	741fd631-a364-419a-9231-7283a28cb242
a4b80875-cffc-4abd-85df-0c2c899cb34a	2019-09-25 11:32:47.418+08	2019-09-25 11:32:47.418+08	d9ea813b-d066-472d-b08e-2436f6520e9f	137361e0-8a77-40bf-9f25-5f47f6b6a564
b9178017-54bf-4119-9ad6-2de62cd993af	2019-09-25 11:38:34.955+08	2019-09-25 11:38:34.955+08	88ec5756-da5e-4fa0-b882-39727baf501b	9990bd9a-102b-4275-9a68-0667708bbd65
020da3a5-56b9-41f8-9a94-c0f66309eb7d	2019-09-25 11:51:56.985+08	2019-09-25 11:51:56.985+08	a58243c4-2874-46f4-86b9-bc864f203eec	0002c6d3-ef7c-43f5-964e-395a2626910f
ba5d1317-00df-459a-8718-3410e8ef6ae6	2019-09-25 11:54:59.67+08	2019-09-25 11:54:59.67+08	3d535ccc-ec09-44f8-b278-5e93d4ff79ae	cb4a020c-164a-411c-8fd4-4d91dfe12240
9d7c8cc8-b631-4e62-883d-41e1b59ab040	2019-09-25 17:13:20.31+08	2019-09-25 17:13:20.31+08	22da5422-3017-46d1-b154-701f9a128e3c	788ffd0b-a898-4e60-99fd-2f47e5499d19
e7438028-d55b-4d24-b5ab-d6d7607ca2cb	2019-09-25 17:25:19.288+08	2019-09-25 17:25:19.288+08	f12659ce-b28d-4602-a33a-879eedbbbcaa	7cb0143f-d2d1-48e4-a7c2-29a61b4692a0
6e505e80-71c3-408e-8b03-c580d5f65a30	2019-09-29 11:26:30.148+08	2019-09-29 11:26:30.148+08	c1c93d31-aef7-48fb-bccc-f3f76ec1689a	67e89a04-ffdb-41e7-be13-eb8a1db4e66c
3bffcb57-57b7-4d56-9855-da014edcd84b	2019-09-29 11:32:07.989+08	2019-09-29 11:32:07.989+08	3f518643-909e-45c6-b816-3cabb1fd8af9	67141178-8db8-4460-bf60-95b8a6172236
b09e516e-8775-4634-9e08-37a96dd67c5c	2019-09-29 13:32:12.565+08	2019-09-29 13:32:12.565+08	f3923edc-71cc-43bd-a3a5-48894181f917	3c8be1a4-ce5e-424b-a96b-0fbd0cd338dd
991ed472-722d-4eb6-90d0-19f200015026	2019-09-29 13:35:44.794+08	2019-09-29 13:35:44.794+08	8a578a79-fd96-4c69-8069-99e4e77dbbf9	9796f4dc-0b66-4078-9c9f-88c1fb840d70
599ae706-b35c-4b54-bab3-a5c4d5499198	2019-09-29 14:37:47.04+08	2019-09-29 14:37:47.04+08	b9a786ad-b6be-4aa7-9aca-43b903852ad0	4f6b51e2-0f80-4681-9aa0-f27d25b55ab1
1ed9f6a9-5f89-4291-acec-18c3f0eab883	2019-09-29 15:43:10.893+08	2019-09-29 15:43:10.893+08	b58daded-2fb1-4ea1-a68d-bdb20b492fdf	f9c188d1-ab33-4041-b345-e308b3175a65
a238981c-92ca-41c1-98d3-91a9df9947f5	2019-09-29 16:28:26.965+08	2019-09-29 16:28:26.965+08	acc72050-2df9-4098-81f2-863eeb756ff8	e05d5580-4166-4bca-9526-883e221fa201
143e7306-4c31-4f95-be38-de7f000ce2e4	2019-09-29 17:52:28.815+08	2019-09-29 17:52:28.815+08	15e2a325-246a-4e43-8bea-784596788377	36459c6d-944a-4893-8184-4e285b638e81
41fde45f-e214-4de2-b748-c404b0460dde	2019-09-29 17:57:27.741+08	2019-09-29 17:57:27.741+08	f34514f6-cca7-4baa-89e2-d57be4bd26e2	542252d8-f28d-4f94-82f6-1158b3bc4931
1a5efe12-9b3b-467f-abd9-d7123596b6d9	2019-09-29 17:59:29.408+08	2019-09-29 17:59:29.408+08	284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe	80cbdfcf-cba2-40ac-b382-0b54536d6b8c
f61464ef-e1a2-4e04-baa9-85a85490bbea	2019-10-08 17:04:35.741+08	2019-10-08 17:04:35.741+08	c509c8e0-06ea-469a-9004-68542a1617e7	5fdabe6f-6d78-44ea-97cd-0b6a4c56a315
78de3623-c717-4c8b-af02-b8a9d44efaaa	2019-10-09 13:09:24.427+08	2019-10-09 13:09:24.427+08	c996ba97-9aa2-4102-9c84-4020cfe7bd30	d387901e-2390-4c45-9f74-a63d0f38caa9
3c8ed8db-da12-4f03-af58-c2081e906a7d	2019-10-09 13:11:20.988+08	2019-10-09 13:11:20.988+08	6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4	923951b5-1a1f-450f-b565-8466f343b98f
a0bd7846-8723-4111-baa1-791fef4cf26b	2019-10-09 14:19:59.814+08	2019-10-09 14:19:59.814+08	0a495f63-803f-4145-a48d-f54fa7f66d22	564ac3e4-e029-464a-8895-44f162d8c138
6b9bdb45-4b96-49d1-9570-80ab3e02a829	2019-10-08 13:42:51.588+08	2019-10-09 14:33:06.414+08	5daa9060-cbbb-4736-ba79-7440d7d8178a	f943fc11-0ad9-44b0-8183-4887c3fd064a
fde77311-51a5-4fa9-b9f2-756cd1237648	2019-10-09 16:10:35.073+08	2019-10-09 16:10:35.073+08	35547185-29e1-45d9-ac07-1c22c2166d0e	f39343aa-3c12-4106-b5ae-da2b8b4ec719
fb9830e5-6ee1-46a0-9e9c-c5ce31d5e8d9	2019-10-10 10:05:09.793+08	2019-10-10 10:05:09.793+08	d34cb069-c7b8-4dd5-95f7-ec88197b9650	9ec55f06-3e5b-4df9-908f-f00fc616ad7b
2f1bdeff-8e15-49d6-8853-3cdb3aa927dc	2019-10-10 10:48:36.509+08	2019-10-10 10:48:36.509+08	4b89bcb9-ce24-4016-b105-5d950bd997b0	7d85244f-1491-4309-89c6-16e33effa749
54b06b60-9fda-40f5-a7e4-fc5650876445	2019-10-11 13:23:21.193+08	2019-10-11 13:23:21.193+08	ec1d8582-b39b-4e28-a13d-0d8db91976b0	4490ab7d-0201-4309-a7a3-bf6dd143e3c5
be83ce72-b4d5-4eac-aece-1ce52f32326c	2019-10-11 14:16:27.001+08	2019-10-11 14:16:27.001+08	46632020-7139-44de-a5e8-1fa4f067df7c	55195d48-baa7-42e9-a307-ac8489ccbf9e
ebef594d-5009-4b91-929b-697c9db1e104	2019-10-14 09:31:41.059+08	2019-10-14 09:31:41.059+08	1e915828-7914-48e0-88bf-33430c62fd36	7897ad5c-fcaf-4864-a5f5-258372b978fa
6e84a293-69bb-4c1b-a264-ef6a618305ad	2019-10-14 09:45:26.553+08	2019-10-14 09:45:26.553+08	bfcf9463-f865-4f10-9aff-33066bd6f245	5c58447a-84f4-4abc-9f85-3e82e4969387
ae77a4bf-6e7e-4513-9966-5a32ecf8d514	2019-10-14 09:47:26.077+08	2019-10-14 09:47:26.077+08	15c74504-c3c8-4739-8b58-10b0bcd0e83d	2eb916f8-e824-4ba9-bbda-1359554271ec
6f98449f-f7af-47c0-bc30-e08345dfc202	2019-10-14 09:49:18.039+08	2019-10-14 09:49:18.039+08	d3206948-c73c-49b5-a593-473e8a6bc209	106e9686-2a44-4515-af18-aea0986c51dc
6c622e49-abd1-4e3e-b78b-d6ba41ef3d88	2019-10-14 09:52:24.135+08	2019-10-14 09:52:24.135+08	0d6f1736-a3a0-4a8b-97dd-2cafc52767b4	8607b060-3791-4b77-8f50-7da488d58697
c102d68a-aef0-4fcb-b532-e5b5993adf15	2019-10-14 11:39:41.991+08	2019-10-14 11:39:41.991+08	dc4ab80b-3b8a-4088-a468-06a078637a45	277fe60c-a017-4add-9b87-167f51155998
66b0c42f-6603-4625-8d61-35a175facaf0	2019-10-14 16:03:45.931+08	2019-10-14 16:03:45.931+08	e8620f1d-ab05-40a9-ba5f-197894c20a49	fa4a0ad2-684d-4ede-9f8a-83995f13e4fe
5148b796-c67f-40a2-b4e9-e66006e95da5	2019-10-16 14:50:46.104+08	2019-10-16 14:50:46.104+08	4235259d-d5d3-4488-8f71-1f6ee7631fb4	5dbf1e88-6875-442e-b049-c57705ec9fa3
0157d624-177c-48aa-bf87-bbdb712571b2	2019-10-16 15:16:12.222+08	2019-10-16 15:16:12.222+08	15237a2c-3030-4ece-9901-f8c9c3d5e158	505c92e0-5a51-4372-8454-68c46eb977c8
c86957f5-530c-4ac5-b512-5365d19eb260	2019-10-16 15:20:46.752+08	2019-10-16 15:20:46.752+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	e4f8f6a5-ebc5-4ad3-8ac2-9603b40fa7c5
9111905a-0d4c-4bcc-ac79-7684bc5f4cac	2019-10-17 14:30:36.574+08	2019-10-17 14:30:36.574+08	2ec89b60-f2d5-4458-bcc7-de0050ff50f1	5dbf1e88-6875-442e-b049-c57705ec9fa3
83e3a06b-04e7-43e4-8fa7-4be490b3c7cc	2019-10-18 16:29:31.409+08	2019-10-18 16:29:31.409+08	1ff1e182-a5de-4d2f-bf40-72a40dbc29e6	81bb8383-2e76-4a53-a51c-2b1a470edb68
c07729f2-d361-4dfb-b4a4-f446e1c357c2	2019-10-20 16:11:22.51+08	2019-10-20 16:11:22.51+08	15e1b52d-2e21-410c-a442-b7c480cc07bb	1d228765-f4bd-489f-8f0f-ad293ef4aee5
d7ac773d-42c4-4351-8082-67800faec129	2019-10-22 13:45:08.972+08	2019-10-22 13:45:08.972+08	a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8	2b56d499-313a-4124-bef4-5c54154fae56
30835641-2765-4865-81f7-eb6be1141373	2019-10-22 13:48:51.946+08	2019-10-22 13:48:51.946+08	8d553a41-0d8b-46ae-8329-ff94e6009958	3d84e10f-88bb-494c-b470-47da743c23b1
9fed7b1b-d231-4887-bb58-96496651e88f	2019-10-22 14:58:00.165+08	2019-10-22 14:58:00.165+08	592da43b-5c27-401b-9118-c0519ecbc5b3	c7e29b9d-b8af-49f4-ad15-1141c32eb37a
8d3c94f2-8a40-4580-8d20-e72ad0bfc5ab	2019-10-23 10:16:21.735+08	2019-10-23 10:16:21.735+08	3da2f371-f622-4f8b-b700-52af31eaa6b1	58b22fe8-94ac-4030-b318-2f63d5240416
335e3e3f-4e3b-4b0a-8eb8-23b5ba9c347d	2019-10-24 11:26:51.327+08	2019-10-24 11:26:51.327+08	5b0c875e-50cb-493a-bb89-af4d008cc6e2	051f7494-ede4-4cdb-8ce2-bc6bf14edd23
0d962a55-13fa-4e00-8661-6b7b26a416d8	2019-10-24 11:47:52.709+08	2019-10-24 11:47:52.709+08	ee19f59c-9bf5-436f-b3e9-3298da57448f	c06ef9be-c07d-40ee-b1f5-87dd61bd518a
f17f75ed-8b06-412d-935d-bf03730db5b8	2019-10-24 11:51:03.289+08	2019-10-24 11:51:03.289+08	c12bfa47-96c4-4d82-b508-7a8dc380df18	e9693610-a8bc-42df-80d1-fb9b1fd442dc
74b71de8-f215-4803-9ad6-6c07780d11f3	2019-10-28 17:20:38.037+08	2019-10-28 17:20:38.037+08	b8b3091d-39a3-4ad0-9c49-ba4a7b85538d	33547e16-e9bf-4aec-b932-3725456e99b1
4eb933f9-5fd4-4548-80e0-a83031709dd2	2019-10-28 17:22:11.038+08	2019-10-28 17:22:11.038+08	b28c3db2-7ea7-4311-9b60-ccd4af997bcd	93728943-47a0-4721-9eb2-51a320bd66a7
69cf2ede-ec3f-4d4c-825c-27092174220d	2019-10-30 09:09:12.597+08	2019-10-30 09:09:12.597+08	98d04a09-cee2-4b6f-8250-160a824e6e27	d00b1e09-e4ec-4b38-827c-347361e24502
93d01d27-df45-4312-91be-1f757836b9ea	2019-10-29 11:00:04.417+08	2019-10-29 11:00:04.417+08	d4227f5a-828a-4fe2-80c5-bb09da246b47	dbff7247-f39b-49bd-9564-df24d4a0b2b2
c628561b-e971-49c3-9a14-dbc97c28d102	2019-10-29 11:32:32.718+08	2019-10-29 11:32:32.718+08	d07816f1-06b9-4acc-b33c-16928982cde6	cf03bc4a-827f-4f5c-acc5-a4652f32035e
478abd6c-e511-4106-a66d-e651c135d532	2019-10-29 13:17:07.59+08	2019-10-29 13:17:07.59+08	39cebd11-af5b-47ac-abfa-db8cef103a38	221c0192-d454-4fea-a71c-6880c041c43a
732b77db-a91a-476a-b5ee-1a203768ae18	2019-10-30 09:06:58.262+08	2019-10-30 09:06:58.262+08	9df36e4a-3670-47fb-b965-41c2704b6fd1	924170fb-d5be-4ae0-b90f-657bed50a717
ba8ad74a-f9cf-49fb-bb70-2cda79140948	2019-10-31 16:01:05.965+08	2019-10-31 16:01:05.965+08	24a8c155-8275-4e27-8355-01550cda1374	94ddbc11-b96c-4382-ba8e-dce7be2f6cd8
ac140cdf-d31d-493a-85e3-caf2d216b9f9	2019-11-01 14:59:07.358+08	2019-11-01 14:59:07.358+08	0a0eef97-0c71-486a-a1ed-fc6ff48005ec	289f79f9-8c66-46c4-8104-ea6f1e48269a
1871004f-9d0d-4c51-90fb-de973da1fdd6	2019-11-01 15:01:02.831+08	2019-11-01 15:01:02.831+08	093428eb-fcd3-4adf-aad8-db3423f78c60	fd7c5e83-595f-417c-add3-4b8dc0a130f4
4a96d5bc-8c45-41e0-8305-2b067699d7cd	2019-11-04 09:56:01.816+08	2019-11-04 09:56:01.816+08	75eb8303-ca9c-4afd-9f82-e4aaab2ed119	13d98625-2934-4747-964c-406642bf41ca
b9ddca2a-7e9d-4ab0-85cc-b69740310a97	2019-11-04 16:33:47.711+08	2019-11-04 16:33:47.711+08	7979ff13-c8b1-4bee-986a-094e12da9553	8a86ac72-72e7-41dc-9e39-c7aaa351c922
aab2109e-eeec-4dce-913d-4244eac1a814	2019-11-04 16:36:01.174+08	2019-11-04 16:36:01.174+08	5f39116e-f4a1-499e-85da-b67e0f93a044	a0385cff-9bf0-4b10-9d67-830883a5f188
213d2431-fb03-417a-a9de-a79108b0513a	2019-11-04 16:36:44.229+08	2019-11-04 16:36:44.229+08	5ffc3472-8381-4000-a185-1f3a8d4ed263	363c087f-59a5-4790-9e0a-495fc46ee52d
32ef7b0c-b5f4-40d5-b1e1-8da36f3bd444	2019-11-04 16:37:23.037+08	2019-11-04 16:37:23.037+08	aef1a81a-27fd-4648-9208-00b719cea8b9	de074497-49de-49e5-bde0-d7ff72a7abdf
00a3b308-4597-4d60-8719-1875294b6396	2019-11-04 16:37:55.464+08	2019-11-04 16:37:55.464+08	4b24c098-2d80-49b0-89b6-9092c52053bd	c2d79e3e-ee77-44fd-b514-47b315a14d29
0f475dd2-de44-4cba-919d-9e78ffd07e2b	2019-11-04 16:38:29.872+08	2019-11-04 16:38:29.872+08	ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51	3ab162fd-2116-4967-94a7-c7e3f684d505
023455ef-f8c6-43a4-8ea1-dc282fee9dc9	2019-11-04 16:42:05.512+08	2019-11-04 16:42:05.512+08	d17ee4be-2675-4d98-aab6-4b6ec7c271a6	c7ad8552-d9c1-48e6-af24-2cbe475048ec
a11a7ec1-9313-48d6-b380-55f5d7aac021	2019-11-04 16:42:40.929+08	2019-11-04 16:42:40.929+08	0475dd0e-b02f-4a19-a933-dee73c76ef6a	f6585a69-7dba-4119-b987-45b41298bd72
48309318-b8ae-4d4b-a3a8-48126de2d7e1	2019-11-05 13:22:53.733+08	2019-11-05 13:22:53.733+08	2943a420-80a5-4d38-a6fe-68807623c20d	0691fd52-f558-4788-8131-c93e5021efa1
20d339df-16bf-4781-ae00-5c008d56da1e	2019-11-05 14:06:15.043+08	2019-11-05 14:06:15.043+08	ee5dd742-7370-4a06-89b6-d40b3c6a0446	c787e7f9-4888-41b4-9ab2-6b1d3c1ade0b
495d1787-1af7-48a0-8b31-183ee4855cce	2019-11-07 10:41:02.21+08	2019-11-07 10:41:02.21+08	26634fa3-2b25-4428-8b50-8d4e899a0304	cdb78dd5-791d-41a1-b977-135b319f643a
46c7d0c2-1ee1-485e-a296-a1f3e08a1e36	2019-11-08 13:12:19.633+08	2019-11-08 13:12:19.633+08	7beea55a-7613-4d26-9003-485f6ae91791	98de9979-ee3f-49fd-a24e-6ffd754f32a1
67b29973-8051-462e-9ce1-942daf4fd280	2019-11-08 13:18:41.6+08	2019-11-08 13:18:41.6+08	b4b08250-12e5-4346-99a6-64df0c58487b	b4ae6323-5ad7-4484-a8dc-f3436e18620b
3a1e8140-9754-4f16-8b4d-4cfc880d6700	2019-11-08 13:43:46.068+08	2019-11-08 13:43:46.068+08	2cfd28c0-bd76-4a55-af3e-d21b921263cc	827b0843-a207-4dc8-86ed-167435ebacda
f5a2c142-ec68-46e6-9df3-1142955a033e	2019-11-08 17:23:25.366+08	2019-11-08 17:23:25.366+08	19d3b12a-ef96-4053-b50b-004075527249	626ee6c5-4367-4f3b-90b1-928ee5ae72c7
36e31069-a07c-421a-816a-8580ed7091ff	2019-11-09 10:07:15.875+08	2019-11-09 10:07:15.875+08	e76e23fb-b7d4-4991-8687-a3a31084ce60	430c515c-04d4-442d-a803-1be1e55aa3f7
d8d779d3-4080-4e26-8ab0-44ab4397e8e8	2019-11-09 10:13:20.23+08	2019-11-09 10:13:20.23+08	a556c96d-7976-48d5-9bb0-de9f1661654d	b14b27af-b110-465e-a3c1-173d7135681d
414c4ed2-7abe-4d21-9ac3-0fa9c0d422f8	2019-11-09 10:17:13.381+08	2019-11-09 10:17:13.381+08	8ef82507-140e-4675-8de3-21d0d91759a0	ea5bcd28-e40e-4d77-a512-57cbc5fd9230
b36f97d2-1039-4d43-98b9-9e47cfc55f4a	2019-11-09 10:23:17.644+08	2019-11-09 10:23:17.644+08	ae758eae-e892-4168-a8c1-4ec7ceb81e5e	c1425aa3-869c-4b30-bd57-1f2a3da95b2d
7288d8dc-af73-4db3-9bdd-e36e7f81a24c	2019-11-09 10:28:16.284+08	2019-11-09 10:28:16.284+08	fd40883e-bc42-4776-b631-e353c0761303	1d6724bb-cabf-47af-a23f-4bedef2b0e4e
415ea343-c757-491d-834f-5fde97036020	2019-11-09 10:32:45.08+08	2019-11-09 10:32:45.08+08	1535b2bf-3149-430e-97d6-32972b838167	12ccb6a2-95a8-4477-b07d-68d4ce5986d8
fa4d16ea-0140-4fbf-9628-c742bb502d08	2019-11-09 10:38:35.815+08	2019-11-09 10:38:35.815+08	db875fbb-2c21-49f8-bac0-342276dec8ce	71a25702-d398-4011-bf1c-a0c2e7883dc5
30463687-4b66-4f2a-892b-fedb5be0491f	2019-11-09 10:42:27.945+08	2019-11-09 10:42:27.945+08	956b5d84-5687-4405-803b-c9d1790c6ceb	ffd786df-1c50-4887-8975-b4b7842bbf23
6c0bd287-631f-412f-bb81-53c1055661b8	2019-11-09 10:46:16.067+08	2019-11-09 10:46:16.067+08	3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	67704247-d8a7-4587-b27f-3c1559f7be34
748b2d0c-c2c7-406d-a20d-71b20797d7ac	2019-11-09 10:50:51.697+08	2019-11-09 10:50:51.697+08	2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	c0a9e5b7-2af9-45b9-a22a-b6a4a8b160e7
bf4b35fb-cbf0-4a15-89ca-16fbf33dbed8	2019-11-11 11:43:37.468+08	2019-11-11 11:43:37.468+08	a1b787fe-741a-4eef-a65b-531baff33f6e	58fd4d47-a02f-4e6b-a495-106b88467e5d
9f40ed05-2b17-4903-bb16-d326c363a3c4	2019-11-11 14:53:57.087+08	2019-11-11 14:53:57.087+08	578e459e-ee49-4fa5-88cc-9d2edcfbdcac	ea642d87-00bb-4060-aa1f-d13a1aecd8a1
d89e1e82-56f0-4563-8a46-a9dcc9cddcb5	2019-11-13 11:48:20.489+08	2019-11-13 11:48:20.489+08	f7ccec63-ff80-4c16-8c21-8a5f7c3cc971	ee36577d-5afe-491b-894b-8b398e24c706
c3761819-59e3-4698-8b8b-f2c3bfea1c25	2019-11-13 16:49:53.576+08	2019-11-13 16:49:53.576+08	6fac5183-d1d7-4dcd-9507-e29c2eb60419	b6bfe859-8459-4311-82a6-7b1e4dbc7538
f8e54074-66c4-42bf-b278-691607012c06	2019-11-14 14:06:18.526+08	2019-11-14 14:06:18.526+08	354d4c65-0d09-4272-8748-3e53d2c1668f	0fe6cf40-6755-4974-be51-0a77071794d6
98985f7a-952d-4b42-b6a0-05bcf8d3caac	2019-11-14 14:48:50.994+08	2019-11-14 14:48:50.994+08	aef915e1-110e-44cc-8425-3532b1566b78	2479723b-feda-46f2-99bb-5ffd4ec390ff
2aa305e0-9051-470f-80d2-733a83a90587	2019-11-14 14:56:28.579+08	2019-11-14 14:56:28.579+08	553043f1-1489-49e7-8685-476b53719b37	34114f6f-3b62-486d-9556-ed4bf17476f6
db1abc9f-b347-4712-82eb-2838bbc84924	2019-11-14 15:03:17.501+08	2019-11-14 15:03:17.501+08	c6e9864f-e7aa-46c6-bc38-7cf89f82005b	d00476da-54b8-4d71-b94e-c8a547f8baee
e4349e83-dbd4-4f4c-86ce-14e054c08c6a	2020-04-13 17:26:55.03+08	2020-04-13 17:26:55.03+08	05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a	8aa9e896-0f9a-4897-97ea-b698b71a1b56
ad9e013d-80ca-4a83-a66e-4e721741e2c3	2020-04-14 09:46:47.134+08	2020-04-14 09:46:47.134+08	cb22fb01-45b8-4e12-83cd-75fb5dcf585e	1545c9d8-07e6-45eb-859c-71e14c99d100
90de7369-90db-4d5d-9090-de0d1add1936	2020-04-14 10:12:44.818+08	2020-04-14 10:12:44.818+08	0928966d-ed3a-4cab-9e1b-32af22f5f89b	0a42cef2-35fb-41bd-88f3-884b49a30967
80fb9378-7c2e-4921-8767-6b4e9b431266	2020-04-14 10:17:16.441+08	2020-04-14 10:17:16.441+08	fbafe139-6003-4dff-a59a-bf51b0d5ce75	bdfb666a-8123-4601-8533-db0a9b92ea55
4e4be714-8921-4b2d-8569-8c295721967f	2020-04-14 10:33:18.984+08	2020-04-14 10:33:18.984+08	886912b7-fff8-4aff-84f4-04c043946eb0	2f9705c2-7b35-4829-ac02-aad5df643695
7a45aa69-2566-45b0-a4e1-eecf2e8feaec	2020-04-14 10:39:52.929+08	2020-04-14 10:39:52.929+08	17324dd0-1385-4d70-92fc-49d595c88ed8	5525ac80-6984-4305-a58c-fdcdea1edfb7
627cb5a7-9ae5-4926-9d6b-3fde7e16ecc6	2020-04-14 10:45:03.165+08	2020-04-14 10:45:03.165+08	b350cfa3-4960-4e96-ae63-0e0ab3319c29	d844ea04-2ebd-4f69-a1c8-f58b2da3d757
edaa14f0-f9d0-4561-8231-4af5abbee4a6	2020-04-14 10:54:44.719+08	2020-04-14 10:54:44.719+08	2de26052-b602-4ad3-9690-aa841c9c3a97	756a5045-b519-4794-b341-6f0e9a8c63a2
8a6f51d2-89f0-491c-9507-141c5474558e	2020-04-14 10:57:04.058+08	2020-04-14 10:57:04.058+08	6ddff0ae-11d3-40f2-8e9c-2ddf160489d8	e421f6ea-3b1e-496b-a895-4b7b541647f3
c1e41651-975b-4232-964a-4a4604ebbeec	2020-04-14 10:57:58.086+08	2020-04-14 10:57:58.086+08	9cb1bdb2-4235-4ca7-bdd2-7b7719325a45	acbc087a-cff1-4103-ab5d-5a1b270a5b22
8eb2cb64-ad28-4937-bd83-b42fd74e48f0	2020-04-21 13:41:09.091+08	2020-04-21 13:41:09.091+08	f605cba3-4024-46ad-b288-3c83568c5609	fb0ac975-a15e-47d2-accf-814c412ad5e8
c0357d10-c663-4631-9c77-336ee774a2cf	2019-11-15 14:29:26.238+08	2020-05-09 09:23:56.038+08	bbd01f40-d430-4d85-95ec-e91a22fab396	bc09c546-2858-43b3-9a27-880b1601f475
74dae663-879d-4ecd-a6df-1a4efb9bbe3e	2019-02-25 14:20:41.356+08	2020-05-09 09:28:11.542+08	0119f42c-7e17-4f77-81ed-3e55f31b8e61	da3c65bd-1c3b-4e2d-9c93-df7bc942e10f
bc7d4c59-bebc-42f9-b284-8f8fcf7c132d	2020-05-12 13:52:16.104+08	2020-05-12 13:52:16.104+08	d54486ff-766c-4275-bf4e-b13e58574dd7	5b9e38a0-3fc3-4165-866d-fb5259c29c99
04718253-0c0e-40e5-a35e-b7d975f7c0ab	2020-05-13 11:41:39.158+08	2020-05-13 11:41:39.158+08	428d318f-f610-4b34-8068-7a928691a7d9	328d73ca-efc8-4070-96bc-e219a26ebe70
6888c0bb-b674-4d93-a1e6-36cd22ec37a8	2020-05-14 11:32:48.521+08	2020-05-14 11:32:48.521+08	aebaf729-ad98-42f3-a375-2c40c11065cb	9a7a64d6-cf0a-4182-9feb-1b5032169823
8904a959-becc-4faa-bf35-4ca7f5e96ebb	2020-05-20 11:50:17.623+08	2020-05-20 11:50:17.623+08	bc9ee149-cefe-4978-99b6-9c1cec2f6b4c	79718313-a599-4e1a-ac4f-dae5017e2e64
9d7026e6-0188-41bb-9e93-50ecdd2a2690	2020-05-21 15:16:20.175+08	2020-05-21 15:16:20.175+08	67095107-c333-487e-9e12-1d69facb6297	21c89044-25ad-4df8-aebe-8032f531f59f
e0b75446-d8f9-4319-9093-e0f77d25793d	2020-05-21 15:23:07.822+08	2020-05-21 15:23:07.822+08	68b2ac58-25ea-408d-a955-797ded16d57e	2b2d768b-6b55-406a-8f2b-0e8d55efbd38
408596b4-8710-4e66-8140-4e9ce3dc4d8c	2020-05-25 16:36:09.254+08	2020-05-25 16:36:09.254+08	582512d5-3343-4f9a-bab0-0312f0f83dea	c5962a60-67df-47e7-9113-00cac921d0fe
a0c19aac-9de1-4baf-951e-caf9fee535d2	2020-05-28 10:53:52.239+08	2020-05-28 10:53:52.239+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	cdb61000-c726-4791-ac57-c3d79b4c32b6
2ed415d2-65bb-4dc9-99b8-8c43239e40d3	2020-05-28 15:02:00.611+08	2020-05-28 15:02:00.611+08	5e62be71-2e05-4eb7-b50b-233e6ad91069	cc32c566-291c-4843-acdc-abe10b99aa75
11138483-9f0c-488f-b441-5e5019b386f0	2020-06-05 15:02:09.834+08	2020-06-05 15:02:09.834+08	9b2759fd-8c00-478b-9168-f2dc2f1bab11	4c99cb74-82ae-4966-b8e9-db1a39ffd3d7
2e0111d3-eec0-4bd7-a219-721e5b26ef94	2020-06-08 11:22:21.312+08	2020-06-08 11:22:21.312+08	11006daf-ca33-466e-970d-48c4889b56e3	16069271-c678-4ab0-830d-b550eb698a87
b9f58426-988b-4f59-a904-771196d35110	2020-06-08 11:42:18.121+08	2020-06-08 11:42:18.121+08	865a418e-8597-4f29-954b-6953bf8a8390	901af8f9-5176-44d1-bdcc-ce352e485320
83f46825-af0b-4cc1-a4f4-3b4aac770dfc	2020-06-08 11:45:42.735+08	2020-06-08 11:45:42.735+08	5cd21446-c4fc-45a2-b2d3-a2fb1ae08135	7e9a75d3-78b2-4190-af48-917872395dff
76d38c8c-e797-4336-8fc2-615c2140e268	2020-06-10 13:43:00.452+08	2020-06-10 13:43:00.452+08	1ab8db7c-e725-4119-9c09-6555bb04ce5d	8877a5c7-25c7-43aa-9131-b6361c0a06e8
ab59ef8a-edb7-4f43-b59f-6e154d4041f2	2020-06-10 14:00:54.731+08	2020-06-10 14:00:54.731+08	4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b	daac9c39-afad-4886-86c6-363bd5785bff
3ec949e7-e336-46f6-b06b-6fa3ff54272e	2020-06-10 14:05:06.802+08	2020-06-10 14:05:06.802+08	33ad2409-682f-4b09-918b-9f6f9396a1c3	76e17746-b712-4967-a506-ecd13d7f0ecd
2a386996-e20b-45fc-912d-78e6f198eabc	2020-06-10 14:06:51.15+08	2020-06-10 14:06:51.15+08	64351b5c-4b45-42d1-a60b-81f410c1d0b3	5a9d971b-ad1f-4360-966e-b7d83d502bf1
e0d6f725-1817-4686-88ef-095f14218578	2020-06-10 17:07:04.29+08	2020-06-10 17:07:04.29+08	fb469083-0a30-4a41-a31d-b1bc0c0ed098	6d4212fe-6acc-407d-a5c1-10642accea1a
92c5e468-7327-4451-bdff-892e0ceef8c9	2020-06-10 17:08:53.409+08	2020-06-10 17:08:53.409+08	71d81eb7-504a-4f9f-ad7a-1a7479fe82b3	55ca4f63-083f-4fdb-9406-bf94466cd4b6
7362e37f-6109-46b3-8471-db379c5f9a8d	2020-06-10 17:12:06.754+08	2020-06-10 17:12:06.754+08	ad2045e5-d052-4689-b49f-fa1c42ccca5b	d7b5d330-bd98-4e0b-8fe2-ed6c6241bd16
a2a51561-6362-44b7-9681-9bacc78391a1	2020-06-10 17:40:40.521+08	2020-06-10 17:40:40.521+08	d7404d08-da09-4d5c-9443-0abdf60d1a13	f5c0e7a5-4bcb-4876-9cc6-f4d753afcbfe
422e56c7-ef73-44d4-ad8a-3ebb5e3f32c8	2020-06-11 17:32:44.162+08	2020-06-11 17:32:44.162+08	ef2a2a56-6abd-459f-8899-2756698bd997	ff5565a0-4e66-4477-bd2f-9d481073129f
a5489d97-75c1-4d8d-9957-252e53d14dcf	2020-06-11 17:41:16.038+08	2020-06-11 17:41:16.038+08	60d83c64-9bad-43d3-9920-7dad96154fd7	5f2cb212-f147-41f7-b054-13f9b47f7392
6411f9b7-d265-400c-9d9d-9ce19eda43eb	2020-06-12 09:23:23.131+08	2020-06-12 09:23:23.131+08	f8148d64-f381-4893-8e57-854575f49d47	bc4fa7e9-4d2c-43da-ad06-0870638b5c4e
d43e755d-b5cf-4b09-9c2e-f6ddffde75ef	2020-06-12 13:40:28.813+08	2020-06-12 13:40:28.813+08	c8ea2318-d321-46b9-9333-d2679ca7a30f	976c4e88-8f14-44be-9572-6cfcfe029da9
d786fb8d-bee3-419f-8427-c9beaf5af80b	2020-06-15 10:48:35.013+08	2020-06-15 10:48:35.013+08	1f3783bc-bfe9-4abe-b7da-539a0ec57e34	0ab42106-9c70-43f0-8a3a-74694d0af133
fdf64d39-243e-4afc-9f5c-ad6736f45e2a	2020-06-16 14:26:24.069+08	2020-06-16 14:26:24.069+08	ca3175c2-be00-4fd5-8738-d149df98fb25	0063aaea-c921-45c0-8ff5-ae08b21f3590
1e096f87-8c3d-4f82-aba0-61c38ff55919	2020-06-18 15:15:41.705+08	2020-06-18 15:15:41.705+08	aeb4e21b-b0fd-42d0-8eef-e8d525576507	6b71bb33-2824-48ba-b989-a52719e86916
2c2d2865-e06f-4dfd-a4bd-4e0a1805b876	2020-06-24 15:20:50.949+08	2020-06-24 15:20:50.949+08	018e289f-43b3-4cc0-a3be-2a903cef1fab	14a69a88-1670-4519-b2e7-b000cc9b26c6
b59a7110-3c5e-4501-9c71-f21d2e5e1c76	2020-06-29 09:47:45.486+08	2020-06-29 09:47:45.486+08	ec37073d-d10e-4bf9-9e04-a5dbff374b3c	be17d735-b121-426e-ad77-0c9ee0207d44
293887cb-e6a5-4211-abcc-352231d06143	2020-06-29 09:58:29.166+08	2020-06-29 09:58:29.166+08	0a837b07-531e-4fea-861a-ff73f35fb9ba	779efde0-4e70-4765-857a-9b96bdcfc08e
bbd8b4ee-e9a4-4f25-b9ad-a1e50cc7ebbd	2020-06-29 16:12:12.876+08	2020-06-29 16:12:12.876+08	adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb	c6d00d85-cb05-405a-b910-289bded0649c
60f2d3ae-2c6e-43cc-9bdc-69be694cc682	2020-07-01 13:44:03.124+08	2020-07-01 13:44:03.124+08	43b79748-d5d2-4ff7-b9c2-4d8a115cf28f	5bd10d7a-1049-40dd-baa7-61fcf9a02b07
7ddc2594-5beb-4089-9222-ea44e4870aa8	2019-11-14 15:07:44.249+08	2019-11-14 15:07:44.249+08	7e54985e-4293-452f-bd1e-27d54e8c9259	8ba5c52a-3159-41ff-99c3-f356a2442d1b
e1b47129-aee6-4352-9d17-a0c342072ab7	2020-01-06 15:12:33.836+08	2020-01-06 15:12:33.836+08	c8044788-3713-45ab-a8f8-cd3b8b3db86f	1ccfad69-bfd5-4a03-b03e-42541ba41172
041c6fcd-08f3-4b91-a595-c800859f5838	2020-01-06 15:12:33.853+08	2020-01-06 15:12:33.853+08	c8044788-3713-45ab-a8f8-cd3b8b3db86f	e3dc2dd7-b809-423c-875d-fd4e8f551348
9cfb4558-ba74-4474-9e0c-4fdf2abaac24	2020-01-07 09:52:02.058+08	2020-01-07 09:52:02.058+08	65968c97-efd5-4c64-9f9c-79017790f273	88d5b4cf-1f0c-4875-a5dd-6dee39e6505b
063b437f-f903-467a-9512-373bffe846d4	2020-01-07 14:23:09.076+08	2020-01-07 14:23:09.076+08	32c69be1-0051-4e6c-8821-fe8b2a3f8215	a7735a3f-1762-45ba-80c2-79f16186e3a2
26e90dc0-f5a9-485c-bf8e-2e941469cc2c	2020-01-10 10:53:10.6+08	2020-01-10 10:53:10.6+08	5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	3f092ecf-4e4f-428d-9bee-add7cf19355a
ac63eb18-0c55-40c7-a677-91d55929a19a	2020-01-14 13:53:59.882+08	2020-01-14 13:53:59.882+08	b4574024-8282-445a-b3d6-068582522d6a	af7320c8-2821-44d5-8022-cb77f1d34195
0d1b686b-85ca-4980-8620-a4ddd4eef3d2	2020-01-14 13:57:25.427+08	2020-01-14 13:57:25.427+08	4b26b77c-de95-45d0-b83b-ee0c410e20a0	d321d917-c48b-4c9d-a6b5-b12201ea05ba
ea54ba6c-d61e-4c07-9eb5-4bc6ac32d31f	2020-01-14 14:00:56.911+08	2020-01-14 14:00:56.911+08	74475f60-31b1-44f8-b887-60013184ef38	458f1eb8-9e88-4975-b79d-55b0674ef142
2f1a1a42-0e91-4c6b-bc99-9e067fe154e8	2020-01-14 14:02:50.269+08	2020-01-14 14:02:50.269+08	d3d60241-e4b2-445a-bde1-5e5e83bbcace	2c1aa332-b340-4d0b-b1e4-a88d533a9e65
34fc48ff-27fa-4848-b4eb-c750bdeb9d96	2020-01-14 14:10:01.189+08	2020-01-14 14:10:01.189+08	11373c99-1270-4b66-9d6d-d19c6ad95118	16dfc6ce-8611-47f9-ae69-d9fa44e19138
5e0577fb-a520-411f-b9cb-077a7aacefbc	2020-01-17 15:51:20.626+08	2020-01-17 15:51:20.626+08	8481bad4-e00b-4018-bc7f-33c5c4c800ef	019051cd-3f9b-4557-b417-ff2853ac7152
74e8fb2f-f3ce-4ba7-aa3d-8bc46e1b76df	2020-02-11 14:49:28.631+08	2020-02-11 14:49:28.631+08	227b30cf-bef6-488b-b9db-9eaaf4e2f2da	73ebc60b-ecd7-4a5c-9bc3-977dba7d3d85
2b4a3207-5449-4d35-8648-2a8a934f552a	2020-02-19 16:24:50.754+08	2020-02-19 16:24:50.754+08	1392402b-26fe-47c7-91d6-d380095aac9f	6cd932f6-1535-49bc-a14a-d30cef2b6cd5
917da57f-ebdb-4df0-a483-6e99f414ac3f	2020-02-20 16:35:47.52+08	2020-02-20 16:35:47.52+08	37eaae27-d936-4e7d-8680-2d062ac5bb82	983de5ed-36e6-4031-a1f4-2eed91e1e680
7270d07e-7be9-4343-ae73-fe1ba5f33be4	2020-04-14 10:33:35.175+08	2020-04-14 10:33:35.175+08	abffe5ee-8ad1-41b8-95f2-70a6d52220db	8c7dcb9d-43de-45f7-b210-5ace75e5ab7b
2d0379be-b380-420d-b411-11101400e3ff	2020-04-14 10:40:07.799+08	2020-04-14 10:40:07.799+08	9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f	3fa86c58-864f-4ace-ac19-a7c2e63273d8
9113f51b-7dec-4169-949b-2275b1cfe05f	2020-04-14 10:45:14.158+08	2020-04-14 10:45:14.158+08	53e381f9-db33-430e-8304-c344985c37f6	bb16892a-4da0-4e00-b9c7-20b2e528b980
f34850be-44fe-4545-b7ce-eef23a32361a	2020-05-14 15:02:47.409+08	2020-05-14 15:02:47.409+08	11936f12-8bb7-42ec-8d27-5e01eb5c4ba1	e982a7aa-e38e-45b3-a537-bdcfe35d468a
45216782-7ea3-4afb-ab13-2480db30991f	2020-06-11 17:08:14.322+08	2020-06-11 17:08:14.322+08	38ab5b80-b75c-42f6-b9a8-cb1e96603099	1052e946-4d2a-4d30-8789-5f05eb88e1a8
fc232803-13da-421b-b6db-dab0ee764254	2020-06-24 15:21:21.124+08	2020-06-24 15:21:21.124+08	dac5aa29-4b9b-4dd0-9200-afc564bb32c5	a7a8865e-320e-45c0-b1a3-09d036a338ae
2a60d63b-dfff-48ac-8ec9-a8b25a794fca	2020-07-02 10:41:52.555+08	2020-07-02 10:41:52.555+08	e372ec30-5000-4a22-90ce-923829b2d608	3ce62d6a-067d-4a2f-8a05-34e60b35bc4b
c3783c5c-5788-44d3-b962-d86292245d13	2020-12-25 12:07:30.11+08	2020-12-25 12:07:30.11+08	cce324d2-9c6a-4637-a928-b6a40648a114	1feaeb31-f479-466f-9219-95eae1bd10a5
fb06d9ff-32e8-442b-85b7-6c6290989819	2020-12-28 14:13:55.62+08	2020-12-28 14:13:55.62+08	9b051f3e-8ded-40e9-bdce-c5b5723b3858	7d84ff9a-1a34-4ad9-8aea-b297a9ed6ef5
22cf6e0c-e01a-4c3d-a66d-9e7a07c8e744	2020-12-31 13:46:30.846+08	2020-12-31 13:46:30.846+08	7ce42d82-9728-4463-afd2-906136b87ad7	c99292ce-b061-45bd-9b6e-e8b245d590dc
80f70aa3-47da-4d37-960b-eefb37793ffb	2020-12-31 14:25:20.961+08	2020-12-31 14:25:20.961+08	8cb0c7e1-fe83-4b63-9f7f-7598487ef57a	a9da4397-40d0-4c10-8344-38b3959d6b40
183030a2-de2e-4f1c-9e59-9ab67f8a09f0	2020-12-31 14:28:18.784+08	2020-12-31 14:28:18.784+08	e673c024-edd4-495c-a9a9-c5c6306ed6d0	7db61a3a-b4fd-491b-a05a-e4f380f2a393
fd26ccab-128f-4f0b-8bb0-46ed9085e54a	2021-01-04 09:20:07.817+08	2021-01-04 09:20:07.817+08	e0856580-9791-4d76-8d0a-4673e9e7f1bd	6aa6d215-9d88-4b12-bddf-55f7df1a9f8c
4340a7e8-e4b6-4405-aa91-d027d837d692	2021-01-07 10:06:02.499+08	2021-01-07 10:06:02.499+08	a68a5258-d2d1-40df-beb0-710a190c1175	5eae67bd-91d8-4f16-a91d-5c3131acc7f6
004c88de-2e68-40b3-9551-ca923ccfa3ab	2021-01-08 17:49:15.381+08	2021-01-08 17:49:15.381+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	318cfca2-7541-4831-898e-e01728bbd146
3d6be0a3-e93c-47a4-93ee-21bcbc2dd65b	2021-01-11 13:06:59.479+08	2021-01-11 13:06:59.479+08	68049b31-8deb-465e-a468-2cbafc9b8023	353a977d-4e30-402d-b68d-fdc968f0ecfd
f6ba7c72-b7a2-494b-98b3-fe6f1e5cc5f0	2021-01-14 14:36:35.524+08	2021-01-14 14:36:35.524+08	a9e161b5-80ac-44f8-b7e3-eab4baaab9d8	3ed67224-6373-43aa-88bb-5525f307f389
9dd2a8d5-3354-4d18-a0ed-83e6cf196c8f	2021-01-18 12:37:46.543+08	2021-01-18 12:37:46.543+08	b0ddaaab-3ad2-4674-a102-dc2459657a7d	5ce61c17-343b-40d0-bf89-b0f98ec0655b
d3e15535-e73a-4aa3-a69a-1baeb19e6763	2021-01-18 14:02:08.26+08	2021-01-18 14:02:08.26+08	d1124662-5294-40cf-a8cb-6cac92776c40	d10c20a7-bf0e-431f-8b46-af16b2dc3493
72076068-6a59-4b9c-bb5f-c51ac07d0d26	2021-01-18 14:04:59.4+08	2021-01-18 14:04:59.4+08	1de99810-efe3-468a-a89b-0d42d5933634	ac89a7c8-8b35-4dea-ae35-7083555aa058
09b98a15-11b4-488c-927c-ed0cebd5edb3	2021-01-18 14:09:49.702+08	2021-01-18 14:09:49.702+08	cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a	25177421-56bd-4526-bb61-80bfbdac6734
945f3544-5e32-4c67-95bc-63e68db0da39	2021-01-18 14:14:29.667+08	2021-01-18 14:14:29.667+08	cff46266-6321-44f0-a893-0a66249826b1	37b35270-ef60-478e-86b9-af7505a103a9
a72ecaf9-d102-44d0-824e-c7b36036539c	2021-01-26 15:42:15.156+08	2021-01-26 15:42:15.156+08	2df0457d-dcdc-43a8-b9be-cde18d3e3f6f	bcd81306-0c52-4917-9f4e-1f12b2aba1f1
88bef009-2f5d-4ff0-8492-fe94c9640f04	2021-01-26 15:59:08.549+08	2021-01-26 15:59:08.549+08	b781e844-b4da-4a6b-9420-bd6796c7188b	e1bc079f-babd-4346-85d1-114dbaa2c21d
7c3a01de-9e5b-4d81-b638-3ed148bed5af	2021-01-27 13:52:00.552+08	2021-01-27 13:52:00.552+08	ad519e49-e9a4-46e1-8166-c56e97bac6d5	638f0588-b801-4d2b-8670-ca4fdec60d41
ec52dcba-227c-419e-8a99-b3ff3c4ee7ab	2021-01-27 13:54:55.098+08	2021-01-27 13:54:55.098+08	4f43df6e-9984-45bb-9ec3-62e789fb6b72	9a540453-32cf-40af-adda-95642eb383a7
40105a80-4d89-4df7-a208-a86d276b7898	2021-01-28 08:50:30.366+08	2021-01-28 08:50:30.366+08	c9b1921e-62db-4dc5-b15b-663afe09388e	90588043-412c-498f-9155-0685988d8bd0
36c0f2cf-6bb0-4094-a979-6f85d52e16e7	2021-01-28 09:37:35.501+08	2021-01-28 09:37:35.501+08	7dbd6789-715f-43ad-94d2-ca3ede2c52e2	fab87677-888e-4518-8659-53b5dfd3c6a3
96455559-fc63-4faa-9630-1c7710da4e71	2021-01-28 09:41:22.898+08	2021-01-28 09:41:22.898+08	40e24053-00bb-4c0d-9d0d-6b44178ab0f2	65efe93f-1a17-4eb4-a179-ce76ab6c17e9
c4005b7b-0e5b-469c-8bd0-14a00d2fa010	2020-12-29 14:11:13.815+08	2021-01-29 10:21:07.577+08	6680d7d5-905b-4311-8a63-a8c11b0c765a	01bcec7f-94a6-4e4b-aa40-0bfbc6e7a7cd
91eeae41-4cdc-42a0-88b2-65da68a675a4	2020-01-14 13:59:03.98+08	2020-01-14 13:59:03.98+08	ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27	3a9c27e9-df8e-4ad0-875d-c9de6327dce2
3e30bbb1-9ca6-47c7-bdbb-e633e484a496	2020-01-14 14:04:32.658+08	2020-01-14 14:04:32.658+08	9a4964ae-b88b-47d8-8007-8ddcf068d4bf	179fa641-a8ed-484f-a6e9-72b1f93e0391
41ad8a54-3e34-4ccf-9109-89f1ab041b8d	2020-06-24 09:49:50.6+08	2020-06-24 09:49:50.6+08	a8cf8420-9ce0-464d-8af7-1940466015bd	fc33cf83-21e1-4e98-ad5e-2389e836de21
fece2113-5fa5-45c5-bbf8-dd770d3aec3d	2020-07-20 09:56:07.54+08	2020-07-20 09:56:07.54+08	a15cd089-6db0-463f-a927-c36d1dca96a4	45f68805-d64d-425b-834f-f6944a46c9b2
2d2eb102-f9f7-4b23-a1a4-deaaecf0855b	2020-07-20 16:29:58.327+08	2020-07-20 16:29:58.327+08	d600b35e-ef0a-4115-9af4-779c7bd726b9	66a6b0b4-56e0-4f0e-8850-c776a629c121
34f10dc1-d702-40da-89ec-359a4fcaf9b2	2020-07-21 10:26:44.218+08	2020-07-21 10:26:44.218+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	a40c154f-9e69-436b-9d23-e0fc39b97725
386bb330-7909-44f4-8c5c-c54b86bb4001	2020-07-21 15:31:35.598+08	2020-07-21 15:31:35.598+08	47e859b1-fd7c-4d91-b482-25d7a9547047	e14de5eb-d92b-4081-aa14-3c3849bef9ca
4a3dec9c-0ae5-4a09-a6e0-44f350986583	2020-07-23 13:38:56.16+08	2020-07-23 13:38:56.16+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	efe8225f-4482-4c27-8139-9b81ffd35456
4fb822e1-8f00-45d5-9aa6-ef910d5dbe29	2020-07-31 11:07:57.665+08	2020-07-31 11:07:57.665+08	3e0cbd36-be46-4841-bd03-26f5540d8ceb	db3e4e5b-f023-40df-862c-4d8d0c48d0c2
964d4c85-a0d9-49e1-8a99-5da7d569b36d	2020-08-03 09:13:17.83+08	2020-08-03 09:13:17.83+08	1093449c-fdd4-4e36-9153-53b8e4be297d	2a70f392-6f2c-405a-a65f-7e4491610af2
f596421d-9f0a-4588-a133-2df0bc7e3129	2020-08-05 16:54:52.116+08	2020-08-05 16:54:52.116+08	dd71ac62-451e-4f14-a231-1209612ec59d	38f5fb03-c53d-42c6-9a3b-b18d127d383e
9dd4b3d1-e337-4066-a45c-1696e124ba35	2020-08-05 18:03:46.965+08	2020-08-05 18:03:46.965+08	c1159812-0b0e-4d84-bd67-8328afd12dc6	fa16930b-9773-4678-86e7-3918128f1dc9
4c0b899e-1e7a-4a65-af29-a0301652b08e	2020-08-13 09:48:00.044+08	2020-08-13 09:48:00.044+08	4dce787d-0acb-41d1-a959-a043d0546736	a1657550-326d-4cc0-8c1c-d0aa2a208d37
c1e86ce4-b5a1-458f-a9b1-b691a963ce3c	2020-08-14 11:53:53.195+08	2020-08-14 11:53:53.195+08	06350cde-bd6e-495d-8ef5-c318d3694381	bb9ca53f-ddab-44b1-838b-f1edc018fb6d
d5a33cc4-1ae7-47d0-88f9-0c5aede3de03	2020-08-14 15:25:23.096+08	2020-08-14 15:25:23.096+08	dba91da4-00da-4cef-a91c-f39c97f9b45a	fb637416-6bbd-4ce3-8785-55c7a1e1993f
3ef0ed82-f4ee-43bc-972e-c61bd242c140	2020-08-14 16:22:21.551+08	2020-08-14 16:22:21.551+08	2c774eef-6573-419e-8726-e505ae3447f2	0a996db6-1ea0-4869-9d7e-7d4f42055999
ac82bb78-1cf5-4fba-8494-10e4f42bfbd1	2020-08-14 16:26:59.95+08	2020-08-14 16:26:59.95+08	a53c2dac-206d-44da-b18f-584b9ad1deab	0fbee95d-d04d-4eb4-96f8-5b7a88a695b1
a9d56b5f-f8f0-4296-82fc-9f70f9f00342	2020-08-17 14:07:48.154+08	2020-08-17 14:07:48.154+08	ba9214a7-0d02-453f-ae49-912a45fd027f	88d4cda9-f09e-4941-b443-9dc8a4436f90
b9949db8-4e27-4735-89a2-17cbf96b3164	2019-02-25 15:47:53.77+08	2020-08-17 15:06:13.568+08	f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	2c650f14-4abe-465c-a46e-a58b61e31607
0a417921-09a7-4acb-ada1-92a4720a51eb	2020-08-18 11:14:36.639+08	2020-08-18 11:14:36.639+08	f1307ae1-f85b-4d6f-b239-eaa2c46d6b15	89c95ea2-6cca-47b2-aee1-cab6eed0e1a6
baa8c03a-09d2-4e0f-a2e8-d6985d6d2be7	2020-08-26 13:33:36.877+08	2020-08-26 13:33:36.877+08	847df328-4c47-460a-a6dd-cf1203e5bd27	9ddf05ea-8a4e-4c98-bb4d-ce137ddfcfbd
dc308039-1cfc-40da-8c4d-9d62db82c192	2020-08-27 16:13:15.876+08	2020-08-27 16:13:15.876+08	2f22d155-cb55-42be-9323-14e5da7f8912	e95b219e-b28a-47be-a720-4a8bdd1cc484
bec2ff0d-3e3e-4b09-9844-3ec13872e891	2020-08-27 16:22:16.994+08	2020-08-27 16:22:16.994+08	1caff493-5e1b-472f-a65f-502a9d9865bd	718f3c5c-ef47-408e-9eda-38e1c3bbdd2a
437faa48-d770-409e-a8ea-1c2579dddc60	2020-08-27 17:24:28.557+08	2020-08-27 17:24:28.557+08	b387422f-44fa-4d9e-a701-d6c9c57d630d	2c9fd49a-e60f-4df2-9ba6-bccf7891b1e6
bab6f76a-cd7c-424e-a5ad-99b694fed116	2020-09-01 10:29:11.214+08	2020-09-01 10:29:11.214+08	f2ad29ab-0075-41c4-9972-59da62b556f4	4107b08d-9406-4946-bd4e-bb974e47732a
f47b61ec-c9a8-4b31-a0a0-9fbbb67cf61b	2020-09-01 11:26:58.016+08	2020-09-01 11:26:58.016+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	c512274c-ac24-4850-af88-419cb4f76e9e
1973746a-3ead-4f41-afa4-e91f35af5ebd	2020-09-02 16:46:19.763+08	2020-09-02 16:46:19.763+08	efd36daa-1bdb-44e0-8f90-00cf67f20abb	c512274c-ac24-4850-af88-419cb4f76e9e
6a91feb2-0180-482c-bab0-d6774da77f71	2020-09-03 16:18:46.748+08	2020-09-03 16:18:46.748+08	88cb50e8-fbcc-4dd1-a18d-915017dbee86	ceafa9d0-f201-4545-93a4-f683b05ac5a4
c8b3d37e-17f4-4fe8-bf49-937a2e8785b5	2020-09-04 13:22:13.079+08	2020-09-04 13:22:13.079+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	0874fdd8-f0a4-49e1-9529-25857531ab35
a4bf532e-0eff-4e63-9742-a2877e10dc81	2020-09-04 15:30:52.504+08	2020-09-04 15:30:52.504+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	30c49a1a-f920-4de0-b130-43a7c2e55e37
8318cbd2-2136-4e5e-888b-9eda9d40e5a3	2020-09-07 16:10:09.078+08	2020-09-07 16:10:09.078+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6
30dc440a-0c1e-4b31-b068-ddebd522c0bf	2020-09-07 16:10:09.086+08	2020-09-07 16:10:09.086+08	f482d51a-31e4-4f0d-b32e-184d1b527094	500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6
04605992-21dc-4f1f-ab54-13d1c776238b	2020-09-10 11:15:15.552+08	2020-09-10 11:15:15.552+08	2862c1ac-f3a8-45b9-88e8-abd2591928d4	4609913f-cc94-4682-a556-127da768b954
0c1ca356-ca84-411d-baa7-a0d8b7688db2	2020-09-11 13:29:23.128+08	2020-09-11 13:29:23.128+08	d140758d-3441-4156-9b00-7de4589d7f9c	9f8055cb-759b-4594-b5ac-09653a838120
6084e775-3d6e-4551-86be-0ae68342ded7	2020-09-11 14:36:39.604+08	2020-09-11 14:36:39.604+08	f928b4a7-3c4f-42bc-aa12-32d1b835c3e6	ff49683c-d0d3-4fb4-a3cb-e79dbedbff42
95ea5872-d2f7-4fe5-8011-d489f31b13ea	2020-09-15 08:51:22.062+08	2020-09-15 08:51:22.062+08	c438d8c1-8b99-41e6-9cc0-5339b773c3bb	3e449c37-d3bd-43ae-a79f-bd187b76007e
06d5de1f-c7d8-40bb-9385-8ffa80788402	2020-09-15 08:59:09.165+08	2020-09-15 08:59:09.165+08	40df1f23-955c-462f-b233-785df1759d7f	a43e41e5-da9a-4f68-be1b-d5e69dd4735b
0001d9ac-8793-4380-a3ef-1424d4256283	2020-09-17 16:56:54.47+08	2020-09-17 16:56:54.47+08	cd020968-8d12-4951-a6bb-0658b8ea6799	30d0291e-acce-4511-a468-7b15a87262e2
77e318b4-cf12-4532-81d5-796e1ce863e6	2020-09-18 11:09:37.82+08	2020-09-18 11:09:37.82+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	c48b7e59-f422-4b80-a712-b414a713240d
375a9a58-069b-4a8f-ad47-7a5f5c654c2a	2020-09-21 09:55:14.291+08	2020-09-21 09:55:14.291+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	6b32a15d-6fa0-4856-bf23-2bbd8355ab79
10372fa6-f504-47e7-957a-8410494ebc34	2020-09-21 09:55:14.298+08	2020-09-21 09:55:14.298+08	ea8b2fda-2249-47bb-a0e7-eed50eb5de24	6b32a15d-6fa0-4856-bf23-2bbd8355ab79
e0f75fd1-dda4-4be7-a302-375d7503e364	2020-09-25 08:57:42.853+08	2020-09-25 08:57:42.853+08	0ca15a19-3a6b-42c0-8336-096b8ebcc01d	6caf6a7c-66cc-4a2d-96f0-ffe8f989d427
5f617b46-3850-4e5e-b2c5-c99129f75dbb	2020-09-28 10:33:27.948+08	2020-09-28 10:33:27.948+08	3817ac1f-6e39-4157-b1af-99d143da6fbf	c852dc68-be4c-4e55-abe9-657778e17115
8d4f80f6-610f-45a5-aca3-7cf36b33ae5c	2020-09-28 10:40:08.048+08	2020-09-28 10:40:08.048+08	7332ce81-93c4-4c1c-b659-caa2fc92a94a	ffa3ceac-455f-4f77-a6ff-9672588c611f
c9ee6685-a588-4a6e-9119-078f6ded9752	2020-09-28 10:45:02.903+08	2020-09-28 10:45:02.903+08	7a6e0cbd-c0db-4dd6-92e7-94092fc071dc	83f56f79-81e4-4274-9385-6ad10247f3f4
a10dbc87-a975-42c9-8a87-c944c443d900	2020-09-28 10:45:02.915+08	2020-09-28 10:45:02.915+08	e94da122-530a-4e1b-af6f-da5b6dfb2a29	e86b43e7-33da-4bd2-8984-7d4a79397349
9a795c1d-4d9b-428f-a934-36e4843dd778	2020-09-29 09:40:44.569+08	2020-09-29 09:40:44.569+08	59e10250-dfd7-4381-8c22-cca2e7a51ccc	2c6aef25-4dec-40f3-9c11-0d31971ba699
5993be4c-de02-41be-8c89-cfb14c693cfc	2020-09-29 10:15:54.181+08	2020-09-29 10:15:54.181+08	c76bd374-4160-4615-8ba7-63a2f19f790b	0164eb27-0f0d-485f-a6fe-aabce5f65b3a
2d2cdef8-b7d8-442a-b376-e27e00fc7578	2020-01-14 14:06:32.994+08	2020-01-14 14:06:32.994+08	0ae8ed9d-56c2-4b07-b81a-a23a10192d1d	30f53c73-6ccb-4c44-b639-6100f39a6df2
b2b736c1-d35f-4995-bb3e-c89751676889	2020-02-27 21:02:55.287+08	2020-02-27 21:02:55.287+08	458b31ce-11c3-4abc-aeee-3cdaa45215c2	e5a65814-7d06-41cd-b77e-4efcda706d73
61a5293a-c1e2-48b1-a508-e0c269c2f3a6	2020-03-01 20:27:22.725+08	2020-03-01 20:27:22.725+08	cb88ad52-fd36-4f48-8946-4e33300d3b1e	e95096f3-3c08-4f2c-a05d-474bc1c21b61
c81cbf4c-8f42-4fdf-82e0-2bce93080c53	2020-03-07 16:35:47.296+08	2020-03-07 16:35:47.296+08	b6fbb28e-3823-4d97-8ade-baadda4ca2f2	61a7cfea-bccf-4f67-83f4-d08707f2e363
3e11a3c0-194f-4647-8493-8fddb10a1906	2020-03-07 16:35:47.32+08	2020-03-07 16:35:47.32+08	d8a43904-24f4-496b-acd9-bc41e483b144	61a7cfea-bccf-4f67-83f4-d08707f2e363
e8170cbf-064b-4b03-9d18-4cf95fe89215	2020-03-10 13:52:34.951+08	2020-03-10 13:52:34.951+08	83e59e62-4f0e-438c-af09-6988ceca1a91	c45ebf7a-994c-4eea-b3f6-45a94048d9ce
4a4d5a00-b9cc-4f36-b003-cf938cf866c6	2019-02-25 15:46:53.847+08	2020-04-08 15:00:03.087+08	88b4c158-2959-46c0-950e-aa1f77962dbc	0fd6829f-47b8-4f06-8d61-7819cf367cb9
18a13ad8-448a-49da-9d17-83bdf471f976	2020-03-12 15:39:58.779+08	2020-03-12 15:39:58.779+08	a347cbc7-41df-43d5-96a1-0424f00954d5	4722c16e-a855-4eb0-97d9-e99c47c9ef72
13410138-9f60-43d9-b5ae-c76574761d5e	2020-03-13 15:41:34.944+08	2020-03-13 18:38:58.063+08	dc8f2875-b635-4147-9a96-92b72ccadfef	e852da81-b1c4-4d47-b3ef-39e64cbce075
561eec37-4bf4-4e79-b1a5-9903087b07a5	2020-03-13 15:46:07.553+08	2020-03-13 18:40:35.248+08	27cc4200-3c65-481b-92b3-1d747cbef33b	0dad32d1-e9ac-4632-8096-80bb0f46aa03
cd1a6812-b5c1-45ad-8ee3-0fdee5d5264d	2020-03-13 17:42:56.783+08	2020-03-13 19:09:27.636+08	f51d3996-cd2a-4ea0-9430-94c6f5b5268a	4d41141b-c17b-42a1-89f4-4fadda5a662b
c59c15b9-0042-4373-8c07-48f07ae98914	2020-03-19 13:26:13.657+08	2020-03-19 13:26:13.657+08	e5576d87-40b2-472c-88cc-78bedaddc163	4c440444-0e57-456c-8f11-981d32662ddb
30ae9291-109d-4ddf-834b-73f8a8ea66ea	2020-03-20 11:16:14.053+08	2020-03-20 11:16:14.053+08	8a226009-de6a-448d-8fc8-1056e5a62c7c	ab673ce3-dfbe-44b9-9694-bb3d71016009
f8b9c61d-4338-4f6a-98be-cfecac3e2c69	2020-03-23 13:05:37.719+08	2020-03-23 13:05:37.719+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	f5be1c9b-cf89-4857-b349-a43edf06b737
17a1ce66-0d6a-4bf5-8389-0f57ff7c365c	2020-03-23 16:30:30.305+08	2020-03-23 16:30:30.305+08	01444399-9e03-4682-bb70-3b5137cd469e	5db618dd-db52-4c2f-9ced-6b16d708ddae
a093e79c-bb47-456f-b283-5927c67edd85	2020-03-23 17:25:42+08	2020-03-23 17:25:42+08	919db10d-5cbf-423f-ac9b-035d06ecf13b	9ddb1044-aa3f-41ad-a145-d7b53882597c
893f311f-a2a7-4811-8ee3-b3cb1a9a7ab1	2020-03-18 14:12:05.064+08	2020-03-27 17:04:15.016+08	974fa08a-e1e6-4e6b-b3ac-19e3863675aa	73a9ac3e-6c5a-446d-b67f-911d54f5301c
cf3cf279-5d2c-4921-b65c-ce72eb2cc9cb	2020-04-03 17:27:44.773+08	2020-04-03 17:27:44.773+08	34d873b8-b4cf-4313-ae19-a2fedae19eca	ecf245cf-eb1c-424e-87de-581473dee579
377843ee-19c3-4707-a03e-68d506e84439	2020-04-03 17:31:33.078+08	2020-04-03 17:31:33.078+08	a868b3a8-85ed-4780-a0cf-9d0206e3cd58	7190cc29-33df-48c4-b5fb-f67674d4b819
0318ed51-aae4-4e29-a0ef-751c26a313fc	2020-04-05 12:09:45.45+08	2020-04-05 12:09:45.45+08	616814a6-1aac-4201-b9cd-8164fd2198f0	9631f2f6-6210-42e2-a6de-6bba2aab0c84
2aaa366d-19ba-4133-933f-e91b9293df15	2020-04-05 14:13:19.308+08	2020-04-05 14:13:19.308+08	87fb5477-8056-44e6-b0a0-5cb1e55703d8	00b7975b-2a18-4146-9e51-b8d8b71550d8
c1d9eaca-1fdc-4d4c-8976-18543f1d6bf3	2020-04-08 09:44:52.322+08	2020-04-08 09:44:52.322+08	8f9706bb-e71b-448c-b32d-4b4cfe420ddf	50b8d95e-d224-4c41-ad37-affb54641460
96efa9bd-7a70-46b1-afa0-f566345cfe72	2020-04-08 10:43:30.799+08	2020-04-08 10:43:30.799+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	1fee9b9a-9944-41aa-928a-c015f61bb511
ac018bfb-3922-4269-bc64-7eaa5c70f6e5	2020-04-08 14:13:21.718+08	2020-04-08 14:23:47.278+08	b912ee89-771c-412b-b6f1-43fd55aa3743	e7a92768-7533-4715-afc6-80476f5f2389
53a9baf5-3ae5-4594-b45b-debce240b698	2020-04-08 14:18:11.339+08	2020-04-08 14:24:17.929+08	3d4528b4-3198-487f-9a4f-60b0b142f4fa	ceff386a-bc6e-46c5-a13a-d7380cc60803
61afecbe-490d-48bc-8823-5581565b9dbd	2019-02-25 14:14:48.877+08	2020-04-08 14:31:20.865+08	cdf26baa-f8c9-435a-ace0-c2eff041d8c2	c9e0d0f5-9c30-4188-a161-a46d017455d0
8f821884-3347-4674-ac5a-9fdf5e1eb0bf	2020-04-08 15:29:32.164+08	2020-04-08 15:29:32.164+08	235e50cf-8332-4752-ad90-735b21a65636	f9c22bc0-1320-4f70-91b8-20cb8bcb6993
df8da39a-bfdd-4635-a524-c578e81d1caa	2020-04-08 15:30:15.66+08	2020-04-08 15:30:15.66+08	43f54168-c6b9-4a10-af52-08fea895afd5	46c82a52-a4f0-4d35-8358-d9c757f40187
f95e2252-9fae-4696-93a8-672932c0d32e	2020-04-08 15:30:30.781+08	2020-04-08 15:30:30.781+08	ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	df8f6580-c6ce-4fc4-92d7-819c27dcdb40
afa842f4-4d64-4b73-9133-0a4de7a1af08	2020-04-08 15:57:37.346+08	2020-04-08 15:57:37.346+08	ec4bef46-3f33-4abc-bc5a-fdd02804546e	dbd1879f-ee6f-490b-95a2-179458f48a30
587ad961-bc11-4d2d-9a21-1ff39b4dcf7a	2020-04-08 15:57:59.956+08	2020-04-08 15:57:59.956+08	facb0a36-aad1-464a-9e62-5982e7f96038	4ec9c481-f55b-41a8-bf3d-617f0d62fbd8
6acdb817-e61a-4f6d-a597-30970b439ccd	2020-04-08 16:12:37.543+08	2020-04-08 16:12:37.543+08	22d12570-1067-4643-901f-035e0bedcd19	86328969-acb0-4364-940b-b059ee66f415
8db1044b-6074-4326-9e82-fb815e9f79a7	2020-04-08 16:18:59.692+08	2020-04-08 16:18:59.692+08	c118d176-8dae-46d2-af7a-637b0b4ad23f	83da887c-5273-42ad-b513-502c3e584888
a333b61f-483b-4eb2-8e07-51b088c1750d	2020-04-08 16:23:51.262+08	2020-04-08 16:23:51.262+08	ab5284c6-527b-497b-ad77-a59c41b4202f	41b65cf5-a40e-4714-9539-cde9205d35c0
49faa7d5-30b4-4b26-916d-5682fba0cf65	2020-04-08 16:36:50.895+08	2020-04-08 16:36:50.895+08	93a512ff-ed6a-423c-a66b-0a9c882a1f7c	4bd7b385-1d5b-434d-954d-a0f51efdc4de
ffd54d54-3143-46ce-99eb-760dcb981f9b	2020-04-09 09:22:36.761+08	2020-04-09 09:22:36.761+08	47fbc1d7-872f-4e0d-b675-c7d51436f795	64a1e2bd-ed3c-4512-a373-e461b1c50059
2b408d77-ec9c-479e-a9df-0633c4149ce5	2020-04-09 09:29:04.026+08	2020-04-09 09:29:04.026+08	36882038-cdf2-4b13-ba96-4cc30aec58fd	e9bffaa3-62a5-4116-90ad-ec2f64398bf7
8ea1b60c-fc49-41d8-96e1-9a5bf6159786	2020-04-09 09:51:08.169+08	2020-04-09 09:51:08.169+08	4975a00d-a65f-4564-9e87-4d0e75b2b44a	c65cc7aa-c86b-4e79-923a-0d06f60d610c
d2efd39f-c98b-4e31-a39e-6ee9cbc75476	2020-04-09 09:55:16.525+08	2020-04-09 09:55:16.525+08	3b90cfc3-9011-4dac-a197-db1f1224684d	dca64f43-08c5-413c-8ad9-5417bb512881
b2bd76f8-1676-4245-ac2c-08fb434b046f	2020-04-09 09:59:58.172+08	2020-04-09 09:59:58.172+08	33cf337b-b7b3-44f0-ba1c-a4394b8b357f	e7dde14b-e17a-42e9-89a9-a3c23524bb1a
c550b194-a37f-4dac-87df-6254347a2f7b	2020-04-09 10:11:06.275+08	2020-04-09 10:11:06.275+08	9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	d30c7f75-8f53-40c6-938b-fca23eea3726
74ebec5d-2d03-41e9-8f36-a45b027584ed	2020-04-09 11:50:56.604+08	2020-04-09 11:50:56.604+08	da212a69-66d5-4870-a4f5-c49da884d914	25b5c305-5424-403f-a687-5391a90c53e1
928986ef-106b-49b9-b142-e031c7677a08	2020-04-09 11:51:13.817+08	2020-04-09 11:51:13.817+08	ad8e440e-0f52-4e43-95ed-97bed0575767	b0122d06-52ab-4363-a518-9dee079e5566
052fdfc7-3bc6-44a5-ab25-a04dc14b4307	2020-04-09 11:51:49.075+08	2020-04-09 11:51:49.075+08	f8e59d17-39f9-4805-895b-be09de939091	c2dd8e73-5c33-4c6b-a015-37abf3a4bf7d
3f76cc2a-a814-488d-84ca-535bfa6df576	2020-04-09 11:52:17.557+08	2020-04-09 11:52:17.557+08	719b1f89-ba16-4e07-bcb6-f3914f8e0aca	3ee3e6ae-95c3-4076-bdc0-580e90fbe94d
601923bf-8fdd-476a-9c95-2c91620ac6fe	2020-04-09 15:43:59.532+08	2020-04-09 15:43:59.532+08	d39a1487-77c8-4310-88e9-e12ee46a79a7	ca4f7fbb-cedf-4805-a5e6-f7ab3dcaf58a
26d1110e-2876-45a3-973e-f80b84630219	2020-04-09 16:26:13.177+08	2020-04-09 16:26:13.177+08	6dfd1190-97ed-46dc-aca7-921af38cdf01	5960f593-fe7a-49d6-be3b-1c0529ab8e03
c163f214-6da8-4396-86cc-71481c79c5be	2020-04-09 16:43:40.931+08	2020-04-09 16:43:40.931+08	62e931ef-494f-487d-b32d-d4025cfccc5b	dd9c6ddd-01ca-4750-b867-f985cf0bbe35
ffcde91c-bf03-4259-b418-309ca41ef448	2019-11-15 14:30:33.948+08	2019-11-15 14:30:33.948+08	52567547-16d9-4a75-b748-d64c0a0b01cf	cfed20f0-05de-4d94-8f58-7beea29927e4
b8f532a0-4238-42a9-9a59-8a3e25961269	2019-11-18 09:58:17.667+08	2019-11-18 09:58:17.667+08	b4cd49a5-53df-4791-aece-50f8fe3be0e3	37e489f6-f1ea-4a99-9473-26b1f24af25d
df62dd83-609e-43a4-8094-2857feef7082	2020-01-14 14:07:48.557+08	2020-01-14 14:07:48.557+08	631fe06e-045c-4b18-b9a5-a6e18d8f3511	a0b7f6d4-66fb-4a0c-8ef7-636676479bd6
ef0abd36-2328-46c1-aa7b-3d545b377bd9	2020-02-27 21:03:12.283+08	2020-02-27 21:03:12.283+08	39e094af-e8c9-455b-8f47-7d5b627b56c1	e5a65814-7d06-41cd-b77e-4efcda706d73
d8a57177-7161-469a-a5af-9fe251006d45	2020-03-26 11:01:07.196+08	2020-03-26 11:01:07.196+08	f58d1284-4cba-47d9-b2ff-2bfeeff62797	c0f06645-ac54-4ee7-8a18-d2da4cf349e3
98aedbab-82ea-480f-82fe-052c46a33faf	2020-04-03 17:20:04.177+08	2020-04-03 17:20:04.177+08	a6d36e90-1e77-42f2-9d03-3852f9e5a9ed	fe902161-ccf0-4f4e-9087-6118bfeecd9e
e1779f66-665d-47c9-a378-1fdbcca75ac9	2020-04-08 15:58:15.747+08	2020-04-08 15:58:15.747+08	2fedcbbc-d631-410f-9dbf-9868452b711e	3ca948fd-694f-4d59-a491-05081b807271
32b46e0c-b87c-4427-8a60-e470e72808fc	2020-04-09 09:42:34.527+08	2020-04-09 09:42:34.527+08	fdd4dd73-2235-45a2-98b3-c7838697717c	174d5f4f-1823-4d8a-977f-39f7b1ace156
bf1a1f9d-e28b-4377-a2bc-9b9a3a957a25	2020-04-09 16:47:43.474+08	2020-04-09 16:47:43.474+08	8e1b795f-20a4-49c1-844a-6818b46743f2	32e92b0e-4d21-4986-865c-842ca4573ec3
03c1a6db-103d-4515-a106-d664b6c712a6	2020-04-13 11:00:04.938+08	2020-04-13 11:00:20.063+08	0bf1ab3a-44c3-44d5-bcec-83c1507080c9	8238c7ec-b9d9-4ea6-aa1d-17bdef1c9d8c
e130fb49-f595-415b-aa26-f880806bb0a0	2020-04-14 09:39:59.483+08	2020-04-14 09:39:59.483+08	6084f264-aec5-4a6c-be5e-028c5139dfb8	38f5f75e-8918-4148-94a3-355f97ff0a4e
7c584a1b-e079-4f4e-9b47-044251779660	2020-04-21 23:56:27.171+08	2020-04-21 23:56:27.171+08	4c4009bc-3eeb-4597-8866-fc0e9f3a1691	0e443d95-5d0e-4aac-b1e4-a1adaff332da
b08c06bb-370b-46e3-86b1-1c8e5deba0f4	2020-04-22 19:14:33.179+08	2020-04-22 19:21:27.621+08	afe13a11-ee0e-417e-a431-844bd3608ce8	4844ea23-31c6-4752-a17b-b2f72320575e
4b1a5421-6973-4740-8770-03cbe3d639a9	2020-04-22 19:14:33.271+08	2020-04-22 19:21:35.505+08	af456be9-95da-45a5-a65f-2d3cb31732ff	4844ea23-31c6-4752-a17b-b2f72320575e
3c614369-f01f-47bd-8e01-e1b8567e9201	2019-11-15 14:29:41.086+08	2020-05-09 09:24:20.209+08	80209593-8753-4642-bc14-5537e3223d75	bbc1ddfa-9e1f-4ff2-bee6-a0b2720f41ff
441c7e27-35db-4cd8-9a29-a580ba7aa54d	2020-07-20 17:56:19.36+08	2020-07-20 17:56:19.36+08	823e5c6d-df3b-4d9f-aea9-f9953192aabf	67882d64-f018-48ae-84a2-ca763a66b972
d32eac3c-829d-425d-8d07-d2f4dc2a2593	2020-07-31 11:04:47.26+08	2020-07-31 11:04:47.26+08	8afcb657-9391-4be2-9527-fbc2142bdf64	3a666cf1-c5e9-47ad-83a2-f28e8d3e68ec
8a68105f-667c-4d2d-9c8b-7c6b87c7373e	2019-02-25 15:41:07.365+08	2020-08-17 14:08:06.777+08	89297513-df93-40a4-bfb4-cc2393d5128a	c872b023-f403-4046-a167-4a9865399e6d
41ed0ca9-61f8-4a0f-a59b-08318c05c867	2020-08-18 08:55:03.249+08	2020-08-18 08:55:03.249+08	6e72e2fc-da68-46a6-8a68-3022057b0937	4d250038-b2e2-43a6-86b6-8b47920bcf86
7d706a48-9dba-460d-a88d-3752b93c15f2	2020-08-21 10:27:48.295+08	2020-08-21 10:27:48.295+08	9a584682-5906-4fd4-ad79-245e90061e02	e509deea-5eb4-42e2-a446-937ace3243a6
ee4cacfa-df73-4289-8495-2f12b541bb58	2020-09-03 16:18:53.19+08	2020-09-03 16:18:53.19+08	d59b49b6-2470-4652-aac0-5760f9cce697	a55bdb42-e095-43be-ab7a-5c026a49008b
65136d8a-bf59-403c-87fd-b6b957773a53	2020-09-29 11:19:59.062+08	2020-09-29 11:19:59.062+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	f0653362-f4de-4461-a2ed-7c75c32e2474
1f43a8df-a57d-4afd-b2bd-0d7ffafd7398	2020-10-10 10:53:31.434+08	2020-10-10 10:53:31.434+08	185c3316-9ed2-4a9c-b365-0691b303600f	77da0a6f-3db6-4714-8add-a2e306bf06ac
207bc4f1-ada2-4501-a01d-37987419591f	2020-10-13 10:08:39.393+08	2020-10-13 10:08:39.393+08	42d7c213-aa9e-4263-9e97-e57ed97f4342	36d81901-6ca4-41f4-912a-9088650f7d78
a39c34fc-c164-4d68-b15b-fe4c249aa8bc	2020-10-16 11:41:30.092+08	2020-10-16 11:41:30.092+08	8006946a-43de-49dc-b665-3603da448dec	8bed1966-b73c-4195-a86b-8eccc6181611
c21925a9-23c5-44ef-bfa6-29cc9d004578	2020-10-16 13:52:59.061+08	2020-10-16 13:52:59.061+08	2997a6da-3093-40f9-b0e3-00b1f8c383b1	238c0049-a09c-40cb-bf15-77e8e1158751
b54682ad-e5ff-4bf5-87a6-ed3b3339bb80	2020-10-16 14:22:53.594+08	2020-10-16 14:22:53.594+08	249d472d-1470-4d8e-b629-3e1c3fcd772e	8e649d83-aaba-4c63-9f92-02946a92fff1
13e0ea64-d97c-400a-a82b-04dfb408ca3c	2020-10-19 14:44:51.534+08	2020-10-19 14:44:51.534+08	7a954891-860b-4321-ab9b-290a023d288f	a0fc7ae8-d89f-479c-a454-f21088237c6d
9521d0d9-4e44-4ffd-8080-b3a76fe60399	2020-10-19 14:46:21.277+08	2020-10-19 14:46:21.277+08	7aee0c4c-edb0-43e3-a3bc-9fbff9871499	f20ac868-25d7-4f6d-b54d-e068948a7310
42aa6d64-66bd-4408-87e7-e1d4552c8489	2020-10-21 16:15:38.43+08	2020-10-21 16:15:38.43+08	7257f8df-a9ef-4358-9754-228732a8953b	ae721f2e-dfd5-4d2a-9b62-85033317b741
565cd238-1d2d-4621-8c84-b8311259df90	2020-10-23 17:03:59.967+08	2020-10-23 17:03:59.967+08	95a38af8-bdb9-4f10-ad6a-f3cccec12f59	0c5bc927-e4bd-4894-aa69-ddc2f9e9b60b
bb87c4ed-6649-4350-953e-cf87be1e8100	2020-10-26 13:25:34.231+08	2020-10-26 13:25:34.231+08	4200d327-7520-40f5-a476-fdb18a6c0e3e	95143a7c-bbd9-4b58-a1e5-acf118cb793d
4aebba5c-b4b4-4996-8cc3-9b56fc438555	2020-10-28 13:30:29.636+08	2020-10-28 13:30:29.636+08	ba00d9a2-f064-49eb-918c-0924558607bc	96438e38-60bd-4a77-a047-8c1a15df5f20
a4f7e6c1-7a1c-4d99-9c29-54ca8d16e021	2020-10-30 14:32:49.875+08	2020-10-30 14:32:49.875+08	77f66a9f-48f4-4970-b406-a8abc2aa39f9	dee1c7ea-3f0b-4008-a84f-d6ac39dc26bf
1e4d3ab5-2911-4a07-8473-11b549e28574	2020-11-02 10:08:20.471+08	2020-11-02 10:08:20.471+08	f2b6d5a0-114e-4c45-9066-5a938d4f620a	4665d5ce-a0fb-461c-863c-7da4cce84972
2ce84b4b-1b3e-4ae6-bda1-1bdcf7394c56	2020-11-02 13:44:41.987+08	2020-11-02 13:44:41.987+08	5bffec18-538b-4422-8cfa-c602ce69cb7e	51e7373e-8b18-4003-824f-c0a386f73332
a07c5d4f-1efd-4992-a7ad-06358e17b02e	2020-11-03 11:31:50.883+08	2020-11-03 11:31:50.883+08	bdbf00d7-ac36-4768-947b-32347dec4054	51e7373e-8b18-4003-824f-c0a386f73332
54792fa2-8870-40e3-be2c-493ed82c7c23	2020-11-04 09:48:42.726+08	2020-11-04 09:48:42.726+08	dd00727c-90ae-49ec-b8a5-9a89497b7d8c	74b044d5-7f85-47df-ac2d-6d7530f04770
54f0958f-1dfc-4810-92ee-af67d02d7e7c	2020-11-04 09:56:29.875+08	2020-11-04 09:56:29.875+08	f4d0c081-5014-42df-8154-c7c3b4657cfb	210fdd62-59d0-40a2-822d-edc9f6615021
57e56347-ee5b-4450-bfe3-d18157c95c15	2020-11-04 10:06:19.422+08	2020-11-04 10:06:19.422+08	e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa	b0475fd4-5fc9-4e6d-992c-533c82f7f804
a87a7be3-5d01-4e81-88e3-38876c2733e3	2020-11-09 14:27:57.372+08	2020-11-09 14:27:57.372+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	324f2d71-3a50-4146-9aae-e363bd12206d
f0c0a2a5-5e10-49d3-ace3-5b8138282522	2020-11-10 14:36:02.94+08	2020-11-10 14:36:02.94+08	ce6a00e6-475a-4ecd-8890-b523c3c65e53	8ff777a4-d7db-4151-8495-ab0a86d08eb0
1516cb14-8951-4e79-8ebe-b8572a585ef7	2020-11-10 15:56:24.116+08	2020-11-10 15:56:24.116+08	fc0dc028-86e5-4a74-a75b-15c2d9b30d63	07eec80e-4e25-40b1-b117-021f32f3af0f
7b0b1277-6b13-4db9-9ade-c51a8e59d14d	2020-11-11 17:47:58.934+08	2020-11-11 17:47:58.934+08	dee5d110-9c34-4382-a725-42cf5d298587	fa8be449-f162-49ab-808d-7be4700b888a
5026232c-dbd6-4db8-9f8d-69f05171b137	2020-11-16 09:26:32.466+08	2020-11-16 09:26:32.466+08	eaa7d913-e972-4a8b-9bb6-870673b450a2	5959f7bf-e2f7-4596-82f1-1857bf097444
4ca5d050-5970-450f-b04e-b8bccf1e5a35	2020-11-16 13:57:56.736+08	2020-11-16 13:57:56.736+08	3a1eee94-6d31-4cfe-a9cf-c2522302fa16	e3b0d12c-5881-4284-9c16-a0c396f04b67
6f3fe8f4-ac59-448b-a6f8-95bab0933586	2020-11-16 16:17:25.588+08	2020-11-16 16:17:25.588+08	65de659d-c7f6-4fa3-a500-a0cead6dd856	324f2d71-3a50-4146-9aae-e363bd12206d
11e04367-aca6-4d4f-9113-b8d4e45a040a	2020-11-19 09:19:24.25+08	2020-11-19 09:19:24.25+08	cfcac206-4e6f-41f2-b40c-a9294cb606d7	ba1ad632-f452-47b6-93cb-c52336b35e05
e354ab30-24f9-427b-bc40-52c3f2bfdd1f	2019-11-20 09:12:06.564+08	2019-11-20 09:12:06.564+08	403ed6b4-3b5f-464a-8da3-51142a22d535	a28365f2-ea6b-4780-a957-fff124cbf738
ca70ce3f-5baa-4bec-9aec-cd8e902d4bc1	2019-11-20 09:27:50.799+08	2019-11-20 09:27:50.799+08	84e785f0-1280-4066-ac32-66fc93019612	7e07fddc-00e8-4b54-bf75-2ad0f837571c
9c97dabb-a0a8-4a81-8949-df9aee69c17c	2019-11-21 09:33:12.263+08	2019-11-21 09:33:12.263+08	42a0ae36-f70b-40f3-8883-e04b90d177b1	056ddac9-ad99-4ed4-9287-756b0c637166
dd23f94f-5d42-4658-8c7e-2e6b8bf7b9bf	2019-11-21 10:23:20.858+08	2019-11-21 10:23:20.858+08	ef56e794-df70-42a3-a2f4-e69f4621981a	58b4ce37-0691-4cff-95bc-df60aeb79a41
1ba1557c-0823-4134-aaa8-0466e24d891b	2019-11-21 11:47:17.669+08	2019-11-21 11:47:17.669+08	a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395	2b2090b3-6b7f-4134-9f51-c061f980f02b
6087bbfc-f4d4-46e6-868b-88514f261f6a	2019-11-21 11:47:19.239+08	2019-11-21 11:47:19.239+08	8b29ca1c-631b-4899-b819-7fb1a9d8cd63	a5c0c2dd-2568-4e65-a7ec-cf06d9f743c7
ef43a351-73d8-4652-92a0-a0d3eeba748c	2019-11-21 11:48:21.879+08	2019-11-21 11:48:21.879+08	299ea989-d531-4a5c-9371-aa3ae165c2da	be19acbd-14ed-4e4a-927a-19534e17b02b
c13f2098-7d19-40db-a912-4ad96d71ab98	2019-11-21 14:01:06.94+08	2019-11-21 14:01:06.94+08	4b017286-f61b-4777-bbdd-aa7cab984440	c12324f7-d9d8-4772-8c47-90741c404d70
c5020666-7066-4b5a-8ac4-8dbaa8a68111	2019-11-21 15:13:15.437+08	2019-11-21 15:13:15.437+08	c7eb65e8-262a-42fe-a9a2-3a77e07a84c9	c23f8e42-87d0-419b-857b-35b8cbb12678
37e93b93-945b-4fbd-9d11-38d343d43abd	2019-11-21 15:17:49.697+08	2019-11-21 15:17:49.697+08	b3db1020-2db0-4931-ab2e-2661c6b459ff	ef56b00e-603c-4c26-b132-037795bab2ce
1f6715d7-b25c-4f92-a29e-35f00ba06c10	2019-11-21 15:17:51.655+08	2019-11-21 15:17:51.655+08	22a573d1-d13d-447f-9984-1335ac15e1be	5d4044c7-40c8-46e5-a5f6-7d7172a69bc9
44ac5421-1302-4d1a-aae3-80ae6894be00	2019-11-21 16:06:37.694+08	2019-11-21 16:06:37.694+08	bcb2585f-9765-4795-8033-eaf0d467ab1c	6bb6e4a7-0f87-4a93-8126-d22831a7b915
7d31f6d9-d297-47ae-bcbc-43279b9fe473	2019-11-21 16:15:06.566+08	2019-11-21 16:15:06.566+08	5fa7d170-eda6-4d15-a767-25fc37a090bc	2877880f-2974-4163-96e4-f48a1aae4387
70a28584-77a0-4b5c-bdbf-c8ca24190b38	2019-11-21 16:15:07.79+08	2019-11-21 16:15:07.79+08	61e1f659-3d27-4958-8881-d4e6103c309b	23bc92df-57b9-4222-a6b3-7cb4fbdd87f5
e30a7b42-3ec8-4060-8986-669ddf14a6fb	2019-11-22 15:35:28.386+08	2019-11-22 15:35:28.386+08	6dd33289-d530-4c8b-a41c-aa946291a7df	7fce98bf-5b42-4847-8d54-bc1f0e54a61e
323572cd-24f5-4a4c-8f1d-70f1fde683d8	2019-11-21 11:47:19.213+08	2020-01-07 14:23:38.685+08	7afd8b52-1811-40be-88ec-64173b08f522	157eca28-0baa-4b0e-9b28-1015cbe6430d
8557cf42-779b-4a2a-b0bd-13b4848490b9	2019-11-21 11:47:19.188+08	2020-01-07 14:23:48.858+08	202ac1b5-9f83-4de2-b423-a27607b53f28	0f01d510-ea86-4324-937a-baa805d53f2c
9fa8162b-3d5a-4728-aaf0-6989a84f2f61	2019-11-21 11:47:19.161+08	2020-01-07 14:23:58.516+08	f745e8e9-041e-4578-8568-38fec10b69c1	724f7a46-0ccf-42cd-a991-1b0479907152
65176ef2-983a-4226-8a28-c4e58b8a4ceb	2019-11-21 11:47:17.654+08	2020-01-07 14:24:28.906+08	746f3ce2-5918-4156-bee1-cf4e3a0c51ca	a08d0dff-ea22-4b65-b24d-9422e9b8c7a8
726f8c02-7e4a-4ef6-b8b8-426573e3b821	2019-11-21 11:47:17.639+08	2020-01-07 14:24:52.06+08	3d75f1d4-c46d-443a-ba67-ea09c7642e11	223ca791-daeb-4b6e-a828-7b17b443839d
3e287a73-1169-443e-870b-77cd4c720974	2019-11-21 11:47:17.623+08	2020-01-07 14:24:59.092+08	0666d951-058b-4519-ba87-4889fda65f5d	4a6f99f4-e082-4a55-9f0b-601ec2131409
67ec0edc-f803-4712-a820-41d3a8dee601	2020-01-14 14:12:06.483+08	2020-01-14 14:12:06.483+08	698204ef-2e94-4c91-9c1b-f1145b054f0e	5174769f-c646-48c6-a882-98c9ada82dc4
261526fb-2a59-4513-a754-b58ec85edfe1	2020-04-01 09:57:00.442+08	2020-04-01 09:57:00.442+08	a3e674eb-3100-4cd1-907c-b545482bce0d	530325fb-4018-4055-ac6f-06af5e9ef92b
d0641720-e91a-471a-a5b8-6617d3a76943	2020-04-03 17:23:40.985+08	2020-04-03 17:23:40.985+08	69888b76-d5a8-4e6d-90a8-cfa968515267	cb8c1117-720e-4ecc-bf73-94387c4d9883
85a66d3d-e4eb-49f9-a29d-d4b83ce4924e	2020-04-05 14:13:59.996+08	2020-04-05 14:13:59.996+08	7fe724a3-9e75-4cdf-94e3-bdd7451ff05c	9bc994ef-a76e-46fb-82c4-60946018fa97
b1d8f4ca-a426-4d3d-b328-8c7b025edaab	2020-04-09 10:06:38.593+08	2020-04-09 10:06:38.593+08	a52e2352-c27a-4d80-85fd-aaf9967cc19f	04eb0c8a-7900-4291-bb44-31bbeb4fd7ab
1d064f52-7ba1-431b-89d2-4c21507026f1	2020-04-09 16:26:24.256+08	2020-04-09 16:26:24.256+08	8e1681a6-92f5-472c-a4dd-f40e16934f94	8cb986c9-a790-43ec-903e-0f2af0dccd72
b8f571fa-e358-4161-a8c8-08145a54d420	2020-04-09 16:53:13.499+08	2020-04-09 16:53:13.499+08	e905e3ce-b6ac-4237-9590-14ee97e867fe	b5a7e307-8a67-407b-8360-5c4d86168f55
5c55585e-cf5c-41a7-aeeb-36ba3f95eff2	2020-04-09 17:04:22.014+08	2020-04-09 17:04:22.014+08	7938b967-3298-4052-b8c2-d0fd4b57adb2	c4c769f4-1eb6-4060-90e0-6ab56634cada
4ec7fbfd-7918-43fa-9317-70a4799508c3	2020-04-09 17:07:54.161+08	2020-04-09 17:07:54.161+08	44e109ee-d542-45f6-914e-6313d2ef5aee	fd9283db-69e1-463f-b61e-d3ce9876e6dc
6f6c74c3-251b-44c7-a9b2-0f6ac5d6fd98	2020-04-09 17:17:37.098+08	2020-04-09 17:17:37.098+08	7b3502a3-1fd6-467c-b66f-221cc977bcda	0b0187d8-96d9-45cd-bb7f-0f4d14744210
3390c6cb-42a2-41c8-84bc-08f9ddf1f060	2020-04-09 17:22:39.438+08	2020-04-09 17:22:39.438+08	b51644b9-4159-40db-9599-8b080069cc65	cb6e2488-674d-4a24-a326-2524e76d1435
4a7e149d-efc5-4001-bbfa-5725ab78813b	2020-04-10 10:44:44.122+08	2020-04-10 10:44:44.122+08	de345f11-6d4a-420b-963d-0bc26a7144f1	00d2a316-5cd5-4f82-bf3c-5d87cf208506
a467b755-f48d-4830-836f-0c424646bed8	2020-04-10 14:35:20.905+08	2020-04-10 14:35:20.905+08	22fd06d1-3028-481b-9025-f4fa0093bb6a	338a761e-e215-4402-9c5e-91bdba47beba
ff822625-0e30-4ab1-af1d-54ccb5fe444d	2020-04-13 10:59:41.679+08	2020-04-13 10:59:41.679+08	bf5542b0-0eaf-48a7-acf5-359e608b19d0	7a4c06da-1e5b-4464-b1a7-54778e3a62a4
6e467307-5124-4043-9a2c-78a23207d1cd	2020-04-10 14:52:19.58+08	2020-04-10 14:52:19.58+08	bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863	954f6b1d-f314-4d0d-aee1-d9e0d846261b
13275af2-b1d2-4341-909f-0ba39023a614	2020-04-10 15:37:56.732+08	2020-04-10 15:37:56.732+08	0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f	eeb39967-06ae-4270-8441-e6a248cd6c88
0477ec2e-ea2c-496e-a586-0b4d358393d8	2020-04-10 17:03:36.551+08	2020-04-10 17:03:36.551+08	ce9b72cb-67fd-4117-b485-a9443b3409e9	dbc01469-d28b-493e-b1bf-5996ac187e6d
6112f06e-5349-4ae4-8175-e40669689518	2020-04-10 17:04:48.16+08	2020-04-10 17:04:48.16+08	9aaf71fd-cc26-4738-86f0-f27fb8983581	38df0be1-f399-437f-b72a-17ebcb9d0cdb
8925523f-191f-4f9c-a29c-bfb16656a110	2020-04-10 17:10:11.919+08	2020-04-10 17:10:11.919+08	e8d508fb-9ad6-4f72-bab4-552351765b49	c4d3eac7-dfda-4e6a-b84a-5fa59f3b5a19
d6933d9e-3b71-4eea-810a-79ad63bc572d	2020-04-13 08:47:00.977+08	2020-04-13 08:47:00.977+08	09173a38-657c-4584-97f6-d5fd984c6cef	ee0d80c9-097b-4ef3-96b8-f24576e09e68
30557180-71eb-457a-b984-66ac91485f59	2020-04-13 08:51:58.154+08	2020-04-13 08:51:58.154+08	be4087dd-e776-49f6-a2a0-6ad64e530ac9	a1e9ade4-6412-4226-acea-eeb400ea6253
14033b75-1c36-4a45-b68a-88f664e87267	2020-04-13 08:58:10.84+08	2020-04-13 08:58:10.84+08	600fa9e0-1e6c-4c0f-b9df-2445d771d54f	b8b81a41-de19-46b3-95e6-dc715e1c56d9
a47bb98f-ba4a-430a-b6a9-6453bf51f7b0	2020-04-13 09:02:01.881+08	2020-04-13 09:02:01.881+08	c3cf2a99-570b-480e-bd03-d4218a84382d	94b900d2-4db5-4562-9a6d-a747d706985c
a042242d-f65a-4bea-8a69-f5939b78ebe6	2020-04-13 11:00:52.493+08	2020-04-13 11:00:52.493+08	74d8243e-c93f-4694-b627-27150be13541	d7d75ad3-725f-4605-b594-c107f7ac2ef9
56a94aa0-00dd-4f34-ab57-e9cdd7a06b33	2020-04-13 11:04:26.402+08	2020-04-13 11:04:26.402+08	ed4d092d-260f-49cc-a985-176fd50d18c9	a67019ee-1b5e-4b6f-b38e-2e81ffb6dfed
8493a4a1-c4aa-428f-845e-f85e2bec7881	2020-04-13 11:27:00.948+08	2020-04-13 11:27:00.948+08	ab916260-ed75-4e0b-8109-d9b164ac1f2c	25cfb943-c37a-4bd9-ac3b-ca76bb92a135
262bd6e0-3e1b-49c8-87a5-e0caaf1576cc	2020-04-13 11:30:42.555+08	2020-04-13 11:30:42.555+08	475ef4a4-f7ad-47ca-bf47-6c02061d73f8	bc3a1277-e947-4a62-b9ff-a9f4884680b0
92461e36-53e3-4d3f-960a-d620e191a8ee	2020-04-13 11:34:04.591+08	2020-04-13 11:34:04.591+08	8e6f0fd7-4b27-47b4-8e62-85c8302d8219	bc518004-4d3b-4979-b2b2-0ce1c530ad4f
16462c10-6006-4bfd-8045-e2d031cb0632	2019-11-21 16:17:19.741+08	2019-11-21 16:17:19.741+08	ab533430-50a9-42f0-be2d-3f49990cd470	07191c46-d74c-4c0b-9401-dc53e34f0d5a
c5744210-21fe-43a6-bcf7-1311e4fc7097	2019-11-22 14:54:33.461+08	2019-11-22 14:54:33.461+08	4ea55c69-435f-40ec-b8fd-6ba3cbb45b6c	eab9bb3c-ae22-4574-b211-e3fce64aa313
ed9fb8fe-92b7-4a9e-a09e-a2752488169f	2019-11-22 15:31:51.651+08	2019-11-22 15:31:51.651+08	cfbc93ae-34de-4b5c-b78f-393d80e6be1e	e4c9283f-3609-4df0-abe4-92d822218a2f
74697cda-7666-4af5-a3d9-546c5ccba03c	2019-11-22 15:35:00.206+08	2019-11-22 15:35:00.206+08	00d1f8ae-26c7-4fde-93ee-415598dab3dd	0e411585-691d-43e4-b153-df45634de70d
42bab2ab-757a-4e94-b1c1-47d8e6ab9fe1	2019-11-22 15:38:27.579+08	2019-11-22 15:38:27.579+08	61e2ddde-025e-4a3a-b03e-49cddfe2c09c	591529fd-732e-4ad9-b1ce-71cb137fb31b
cc29c2ec-02fd-44ec-a228-8be39ef27296	2019-11-25 13:10:42.706+08	2019-11-25 13:10:42.706+08	c3035443-22e8-4067-b775-2be4cf81939e	5e4753f7-d79b-4ac3-a1a5-fc299c91f9e4
abad3039-7ef4-46d7-a52f-f4469aa9df4e	2019-11-25 13:12:43.527+08	2019-11-25 13:12:43.527+08	03a86ebd-9100-429c-a1a2-edacea7380c3	86bfce2a-faa5-42e9-a1c6-4ffb22a4e09f
c6259dfb-fb78-4895-9222-494eb884f41e	2019-11-25 14:21:27.99+08	2019-11-25 14:21:27.99+08	e6b1563f-dafa-47e5-bb75-fa29d3388298	694e8b8f-9239-4d5d-8cdc-bc5b715e6afa
66ee108f-26f9-4134-bd66-16676cf2d855	2019-11-25 17:26:40.033+08	2019-11-25 17:26:40.033+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	34ff37dd-975e-4fa8-a5ab-487b5cb6e1df
78834134-2cc2-42bb-9e75-570e309c3599	2019-11-26 10:03:08.903+08	2019-11-26 10:03:08.903+08	169af4ea-ded9-488d-8a88-96e79e1526b0	45a3dabe-e080-4fc9-ba6f-01200690facd
8a7a73cc-15f0-4f24-89e0-d3bafe32c8e7	2019-11-26 10:07:42.41+08	2019-11-26 10:07:42.41+08	3081c848-b498-42a0-9887-5fba5a8eb28f	3377f9e3-709d-4cf5-9f5c-ac0e47f0a28c
023ce537-ad3f-402e-8abd-84b4d0bd7c56	2019-11-26 10:13:25.792+08	2019-11-26 10:13:25.792+08	94787d41-6353-4a20-a84b-848d79e1e209	fd0f002e-7ec1-491e-9ff7-3e2781000f30
6d33840f-8034-4d46-a12d-facd68487f55	2019-11-26 10:16:09.414+08	2019-11-26 10:16:09.414+08	c4ae4615-1bce-476b-96bb-827de9a9a3f5	bb97ef77-9c29-40b3-9e93-72eb26d9f67e
fec9a8f6-b6c4-4bc9-916e-b3f0f9050415	2019-11-26 16:27:03.641+08	2019-11-26 16:27:03.641+08	9e616b46-c079-4ea8-a379-71bc5fa74f42	0b1f985c-862f-4fed-9064-73f092421e8c
b255d0f0-7799-4c07-87d5-806f87105132	2019-11-27 14:16:07.382+08	2019-11-27 14:16:26.873+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	d3c5a98f-b595-4635-9033-eef1233cca38
bdf07eda-c05c-4dbf-a1a1-dbbf33df1057	2019-12-04 11:31:15.017+08	2019-12-04 11:31:15.017+08	fd38a31b-ae19-46d2-87ab-29c622bb6c41	8f62138e-2ba9-42e6-960f-0c9996e6bb32
461c972b-159d-4ba0-961d-01d02e17a649	2019-12-04 17:52:08.262+08	2019-12-04 17:52:08.262+08	6447edf7-84a6-451a-b207-a3714c23e9c1	e916fe27-5463-44f6-82dd-3430cd5213c0
df24cada-f603-4d01-8e7c-92207b7ca542	2019-12-05 09:45:18.216+08	2019-12-05 09:45:18.216+08	7620b964-ee22-4e91-bae4-86f74ff0906f	5dbf1e88-6875-442e-b049-c57705ec9fa3
221f84c5-4fd7-432e-acb3-a78348506c04	2019-12-05 15:45:15.356+08	2019-12-05 17:42:34.086+08	c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e	4c4ef3cf-f1b5-4aef-9d5b-94fe66ddb957
32610968-b2a7-45af-ba73-cfc5d7241b11	2019-12-06 10:18:48.78+08	2019-12-06 10:18:48.78+08	28802bd7-d538-4d62-8a84-87a3e3f5c9d3	6c25fbca-0d16-41c8-b1b7-ff724d5d9a76
9176d406-83fc-45bc-8acd-8ed9380dabe8	2019-12-06 10:23:27.693+08	2019-12-06 10:23:27.693+08	3f322286-3072-444d-8d6b-06f433f2f5aa	00d429fe-3521-43bd-82c5-27c3701da1b1
7928c73d-b2de-4041-98ee-2e3380646cb5	2019-12-06 11:33:26.537+08	2019-12-06 11:33:26.537+08	6d7906b4-b1de-4c3c-b100-bcdf039094f2	1795a06d-3a75-4151-9dd1-347cf67c803d
81f72171-54ca-48a9-80d4-d2b8386bf718	2019-12-06 15:16:13.065+08	2019-12-06 15:16:13.065+08	5fb83056-bcb5-4ed3-8b11-5d2233522941	fa0cbbe4-447f-408d-8ecf-7904f0ea8ff8
82269eb2-8dc9-41ef-a716-d39db149cd04	2019-12-09 10:11:44.306+08	2019-12-09 10:11:44.306+08	bc46fbac-32c0-44aa-829d-5852b69db566	05b98b4f-78c3-4a40-8efc-e36fb6debb58
21bf2ed2-d826-4d91-8964-40b68f04e8c9	2019-12-09 10:15:11.895+08	2019-12-09 10:15:11.895+08	6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82	1357595c-1801-4b05-a42d-1ca21020c433
42ca7a4b-db3a-469e-8d82-f587cbf62e91	2019-12-10 11:41:11.252+08	2019-12-10 11:41:11.252+08	7c4993c0-3771-4ad6-a71d-2f84390f48e6	78e16739-e9e2-425d-934a-bcf3104e1eaa
510ef4a3-8426-4c51-8915-68f23fa542cf	2019-12-11 10:59:06.974+08	2019-12-11 10:59:06.974+08	bee3569d-fbcf-4c8e-809d-535e0e515921	f667f85f-5b6b-488d-b771-4a991eca38ac
48ee8ca9-de96-4dfd-a3c6-969ca7cc238c	2019-12-11 15:37:46.774+08	2019-12-11 15:37:46.774+08	9960853c-2f09-4f84-83dd-6ef785bd63d8	9eb1b073-e915-4c9e-b7cc-13d1b6f6c4f9
c1c3b375-075d-4ff5-a74b-0d6c4a12e013	2019-12-11 15:51:39.686+08	2019-12-11 15:51:39.686+08	53281743-bc5c-46cf-addc-706810bcd681	1df8930c-6467-4c9a-8494-5a2beef7d031
e51fe796-9fe4-4cb2-8dea-a43660bd84f2	2019-12-12 11:29:56.737+08	2019-12-12 11:29:56.737+08	699f8e7d-9985-4a05-83be-7ff6a0c7188b	1a7515b2-0caa-48b3-a171-af2232a46152
58c10e8e-22d8-42e3-acf9-1eaa773f38f3	2019-12-12 16:54:27.273+08	2019-12-12 16:54:27.273+08	c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d	69ddd5cc-db94-4a65-9ea0-e7592350d708
ef7cdcf7-3173-4829-9bf5-0c22a7e204c1	2019-12-12 17:00:31.882+08	2019-12-12 17:00:31.882+08	89941851-3e91-426b-b842-0e31d50848f5	b0a927bb-109d-4f9f-b32c-b5b6b0dd3e54
11b6c50e-3bd3-441d-a31f-683111f54ff8	2020-01-14 14:13:41.908+08	2020-01-14 14:13:41.908+08	9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527	3a0e9308-533e-424a-812d-3f13e104da57
d78d32a1-1400-4e44-9e66-32211437ebb7	2020-04-05 14:14:10.187+08	2020-04-05 14:14:10.187+08	0593d534-af19-4662-bf37-b3393cd7d706	4232eb85-d2fb-435e-a1fa-3896c591fcf2
07f71da8-ab78-441b-9f61-9e218499afb3	2020-04-10 15:38:12.121+08	2020-04-10 15:38:12.121+08	bef72760-da7f-4b64-a389-b3040de2ded3	d4ee7b16-0e6e-44f8-ac05-439cb2e04ff9
3b923a2b-cc7b-4f65-a2e2-88d0c689747d	2020-04-10 17:13:02.984+08	2020-04-10 17:13:02.984+08	f018487f-55ee-4fc2-b204-738cde478d4b	bd9cee05-9bbc-426f-a969-96c02256895b
3942f678-ebb7-49c5-999b-1f713f9966d4	2020-04-13 11:48:21.35+08	2020-04-13 11:48:21.35+08	a31c164d-a581-4bda-8e94-7c41ab12cfa1	d9fe2336-3f05-4f8b-9fd4-61d917ccae4f
da3c2231-65f8-4476-8d53-ff715899d110	2020-08-17 14:08:13.511+08	2020-08-17 14:08:22.618+08	bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	55d0479b-e79d-439f-9c46-4f49f203ac5c
2ac71cdd-e2ff-4186-a818-27f3a9161994	2020-08-26 13:33:59.35+08	2020-08-26 13:33:59.35+08	c30ccd00-f637-44d0-b87a-84f158985f88	25a1a6c1-89ba-4bdc-af70-9b3483916a5c
46e4f6b0-472f-491a-be30-d55c3494a2fa	2020-10-10 10:53:58.043+08	2020-10-10 10:53:58.043+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	9d5d9205-b7b8-46bf-9ed6-9222582bfd40
3abd68e3-c8c5-4d20-8df0-da0c9fa6a95c	2020-10-29 16:45:15.946+08	2020-10-29 16:45:15.946+08	e7114e7a-a8cd-4265-93bd-3d86a0ab5864	13eb704f-aaab-459d-911d-acd9fa5e7775
46f6871b-96e2-4648-80b4-79db0f94ec7c	2020-11-11 09:55:32.345+08	2020-11-11 09:55:32.345+08	5fd6dff1-680f-410f-9631-e645a33bddda	e890945f-ea10-48a2-afc1-a84a42096f27
27bbcc96-bbfc-4536-9bfd-60d4532b0875	2020-11-11 17:47:47.763+08	2020-11-11 17:47:47.763+08	468aada9-eeb5-4174-a21f-73f4ac420d78	fa8be449-f162-49ab-808d-7be4700b888a
9f77c65a-72f5-401e-8ed2-cf8a6f4b2a15	2020-12-31 14:26:55.493+08	2020-12-31 14:26:55.493+08	3cd111a3-296e-4cfe-af80-2d206f3a2b36	c08049c6-42da-40a9-80b2-e665985b24e6
7fa9b9f8-8143-4ab1-b492-69bba1df25b9	2021-01-28 09:48:47.939+08	2021-01-28 09:48:47.939+08	d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87	5576f96c-9581-4276-b739-0573a8ebf1b8
c1a933e4-5705-486f-a1ee-94348c116798	2019-12-16 11:28:20.067+08	2019-12-16 11:28:20.067+08	39ae566f-f125-4bb3-8f18-39fd4ace09dd	dc20f3ad-4827-4b31-b4c9-9d7ea4a9950b
ebe430a2-00e3-40d9-9b1c-06f8746c575b	2019-12-17 14:35:16.135+08	2019-12-17 14:35:16.135+08	da328767-f26f-4fce-967c-7dbf5af7df6f	ebb51648-fe47-4a08-8f10-fd9c08005537
077398bf-8d97-412d-99d9-133d4b400034	2020-01-14 14:15:56.355+08	2020-01-14 14:15:56.355+08	71301f1e-11cb-40ce-8550-770dc2877603	d9270c78-35a3-4962-b1d2-a35418e082b8
d713c942-9ed3-421d-a19e-0161b74c3f3d	2020-04-13 11:49:37.823+08	2020-04-13 11:49:37.823+08	4b648fd9-37fe-4060-b04f-70c5e351b0a4	08115467-24e5-4a70-81dd-a360e725171b
a6d47e38-692a-497e-aa5a-a6d0873f26c8	2020-04-13 11:49:49.99+08	2020-04-13 11:49:49.99+08	ff32ae55-d999-4f10-b4fa-53ef0c69d6be	a23f321f-21b8-44f7-b58f-a407221f9b93
b5c34d49-719d-4b6a-af7a-73d0eb489fd9	2020-04-13 13:06:47.917+08	2020-04-13 13:06:47.917+08	d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d	9f6a6386-111a-495e-9975-202724aaae19
0ccd0502-c450-4b80-930a-0c1d1a31bbfc	2020-11-24 11:14:02.691+08	2020-11-24 11:14:02.691+08	ad7a78bd-4769-4409-90d0-955998f1b916	814b8d71-d9f6-4d3f-906a-c1434a830aa6
198e0dda-0df9-439a-8531-179256d84129	2021-01-28 09:58:52.859+08	2021-01-28 09:58:52.859+08	532e0ecd-69b7-4dc4-945e-e4503cb4f4de	ffc7efdf-4cd5-4f4f-92ec-3db6e058e699
a64db93e-fa1d-45be-bb7d-77c9416afe43	2021-01-28 15:15:41.972+08	2021-01-28 15:15:41.972+08	6aa8f789-816f-4edf-9d5f-b3a4c3a34e2c	e3114646-dc4d-48a2-bdf9-24ac4cee2e68
53dfde27-d17b-4d7f-9e89-249728125efd	2021-01-29 10:12:04.676+08	2021-01-29 10:12:04.676+08	4af6c519-ea08-4b4b-a19e-ca0574265fdc	63e11cb5-cde5-4171-9f98-29bd1a2fc703
4bd56b19-e54c-451c-8a43-8fa00f23b150	2021-01-29 10:41:27.978+08	2021-01-29 10:41:27.978+08	e983c3bb-0606-43f3-ad7a-0a1c80bf1df4	754ed2aa-e632-424f-9b30-cade02417893
31b8be85-0a34-4391-a5b5-1bf15a328564	2021-01-29 11:00:43.457+08	2021-01-29 11:00:43.457+08	fc3a3026-9e74-4e31-9927-3936778248b5	b48adf9e-d73a-4eaa-9164-db7f61700a1b
e2af5fe6-a240-4977-ab22-d1bff5f048b7	2021-02-04 15:51:02.035+08	2021-02-04 15:51:02.035+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	6bf73ef5-add7-4fca-9109-abeff44fb7c5
896ba7d1-e97f-43b1-8e1b-bba134d5c145	2021-02-04 16:04:59.962+08	2021-02-04 16:04:59.962+08	0ae9cc6b-99ae-4795-a8c3-b31ff5b2e7d2	d78ba7fc-eb9a-469d-b35b-b200fb48a6bb
4211da99-130d-4ac4-8432-a67ad44c0857	2021-02-04 16:07:35.013+08	2021-02-04 16:07:35.013+08	5cecb8ee-3d0b-41dd-8293-4108719a7e08	6a0564cf-84b7-417f-b2d3-2d28b6c7b638
50f2eda7-ae88-4f1b-a4f1-24df1b6e17d7	2021-02-04 16:16:51.949+08	2021-02-04 16:16:51.949+08	2940ee26-449d-4390-8707-b8e0b150faad	7a654ff2-acea-4f2d-b306-1228a40efd06
79368027-6041-4beb-84ae-4a755186bbe0	2021-02-05 15:01:15.427+08	2021-02-05 15:01:15.427+08	bf24a684-40ba-4a05-9745-dfad12c4a4a2	26b345ea-524f-418a-9d6a-d49951b47485
8cce4c10-b042-49df-b93c-56113a71a92f	2021-02-05 15:02:09.635+08	2021-02-05 15:02:09.635+08	8ebf5c23-cb3c-4f9f-a506-a3d125575921	0c3e6ef2-ff60-4ea4-a244-445fb7892e3d
f1532caf-ec92-4856-9540-6078184f8ea7	2021-02-05 15:04:22.755+08	2021-02-05 15:04:22.755+08	68beb8e6-51d2-40db-8cae-5ba79d4cf5c6	b02ec007-4ee9-4359-b072-214b6ca173e8
7e844cca-cbae-4b3e-99f5-f58e82768971	2021-02-05 15:08:44.937+08	2021-02-05 15:08:44.937+08	915fe37c-0682-4390-8b9c-06edc2294532	f3aa671f-e62a-4ba6-ae6c-97bfcd022d22
6b991f09-8245-4ba8-9371-5828936816d8	2021-02-05 15:18:10.081+08	2021-02-05 15:18:10.081+08	257470bc-2299-4185-a68b-b194c1b926ad	0e3d3a37-7895-4682-8c35-27d59bdfae11
4989f3a0-7180-4a0a-8d40-0a591a5ba4f9	2021-02-05 15:20:48.056+08	2021-02-05 15:20:48.056+08	99112554-2cb9-43fc-adef-6068fdb897a7	7eeac6c1-3030-42a2-a1f5-53ade070641a
1ceb933b-28ce-43f2-85ab-f24e1bb107d2	2021-02-09 14:17:17.696+08	2021-02-09 14:17:17.696+08	05a8211d-6e5e-4a0a-98d2-f84900bba1a5	80560552-2ebd-411b-8da6-0292bc9fdd7c
52330a4b-fbbd-4e63-900d-33466df3137a	2021-02-09 17:31:07.33+08	2021-02-09 17:31:07.33+08	5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb	ffa7ddbc-1735-46e1-b3ad-10c710cd67c9
b153450c-004e-4c69-a119-92644496198b	2021-02-20 15:02:02.879+08	2021-02-20 15:02:02.879+08	5b2e7aad-4a66-4797-8897-7eefc972e1f9	ba575768-81c4-4c14-9f2d-04fa864e226d
75280fee-b568-41b7-bab6-debf3a7fe0c4	2021-02-23 11:01:05.867+08	2021-02-23 11:01:05.867+08	3d7d32da-438a-4e22-8879-eb3b7b2f98d2	c5e4fedb-77c1-4314-a2ab-ca98dbe14c21
772da985-0ffa-413b-851d-24b813cd106d	2021-02-24 14:45:18.818+08	2021-02-24 14:45:18.818+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	6c79ae4b-1355-4f76-b425-653185144205
f725b38f-caf5-42b6-8456-1748c7fdaa46	2021-02-24 17:32:39.44+08	2021-02-24 17:32:39.44+08	e9332808-1b40-44af-9aeb-7c21643b1e80	ac468c3a-9a33-4fd5-89b2-7b2a21cd90bb
cb733ee8-ca62-4f68-ba58-3eeac7c0224d	2021-02-24 17:38:25.397+08	2021-02-24 17:38:25.397+08	74dd6bb1-b532-407c-b444-e640a9ee293e	738176b6-6b0f-4161-9e28-2bb76e3c2ea8
f6450ff9-e6a4-417c-9c03-79d9ff5363cd	2019-12-18 13:35:43.323+08	2019-12-18 13:35:43.323+08	5733bc64-355b-495b-adf8-e8cbae48d357	456f2fa3-686a-4b01-9e49-7d92132f998e
75a3a7f8-811b-463f-a208-968a2eed5304	2020-04-13 13:07:13.862+08	2020-04-13 13:07:13.862+08	1afc6939-be77-4cb0-b7a1-59ed529b9ee1	c478a407-4b1f-4320-b3ac-df373fa8c28a
9fd02fae-52fa-4d26-af28-8200e04693b5	2020-10-09 14:19:56.448+08	2020-10-09 14:19:56.448+08	9ceb3806-c599-431c-b278-80ea9d6db7ba	d225ef09-9a28-4c68-9bc5-b9856e4b9af6
0ed07e4d-2f54-4ed5-8815-7b162df809bd	2020-10-10 10:54:56.539+08	2020-10-10 10:54:56.539+08	a717ab85-b28a-45e5-a9f2-4ed179975b6e	9d5d9205-b7b8-46bf-9ed6-9222582bfd40
177d4588-7929-44f3-bfdf-44b7c8606f98	2020-11-26 10:49:09.72+08	2020-11-26 10:49:09.72+08	ec43a63c-84a3-4a0a-964e-79fa8af558e7	a91c63ab-c8b0-40b3-9e9b-d01e9a977815
26dca2b3-6cce-4696-8e44-5be32f4f2ae8	2020-11-26 10:57:51.668+08	2020-11-26 10:57:51.668+08	6c6317e7-c5c4-4ef8-ab38-3da0e4824f91	c9821beb-28aa-47a7-a541-24967d0e81d1
9fb11220-d54a-4d3a-9781-ae907bc46d48	2020-11-27 10:01:58.021+08	2020-11-27 10:01:58.021+08	830b53c4-b4d6-4d85-9776-3b448ee62c5e	516bd35c-8acd-4dec-bea1-ec61f54b6182
13c6ecee-c2ef-4c4a-a69d-0c4ab55dcab4	2020-12-03 17:40:46.596+08	2020-12-03 17:40:46.596+08	aa8f7231-23cf-47e0-a8cb-f045759a3304	993bbe10-57d5-46e6-87d1-ee971f5cade7
a13caf46-d0e2-4696-a846-52cba2452738	2020-12-08 17:06:14.296+08	2020-12-08 17:06:14.296+08	82830f9f-f318-4308-babc-79341cb03954	44d4ef21-b985-488f-9e4b-bfa73bc4a80e
f0557492-16ed-4b04-bd63-b089c5f87068	2020-12-09 13:48:51.974+08	2020-12-09 13:48:51.974+08	d09dc928-d5c0-4723-b23f-863fbb56c56f	a3e88944-8cb9-4ae0-85d9-d25e1cb4d78d
ca20a358-51e1-468b-b1dc-88329c9cd142	2020-12-09 13:58:22.373+08	2020-12-09 13:58:22.373+08	47875511-0ac0-4938-a38b-277669f302e9	de034ad9-62e3-419a-9411-ae2b018ae160
f4283101-1811-412b-babc-e5892e48452e	2020-12-10 15:59:20.592+08	2020-12-10 15:59:20.592+08	08d7f8f5-45fb-4a61-8b6f-04c0710b09c3	80e27ea5-5874-43f7-8f20-c298ef43108b
859a954c-2561-431c-b98b-9bc82f01adb8	2020-12-11 09:50:36.504+08	2020-12-11 09:50:36.504+08	dbbe4022-fbd5-42cc-9e58-233046723571	2dc45df9-c912-47a6-87f4-8eb1a5ee1272
3b2984f5-0ef0-4a48-afa3-9ebcfd8dccd5	2020-12-11 10:22:17.882+08	2020-12-11 10:22:17.882+08	bf13586b-7b53-4c49-8131-f81bb6128330	740161b7-4fc4-4ea8-a6e7-92e2967ca6eb
ae912f8c-a1ce-45be-82c6-10a7561345e5	2020-12-15 09:15:14.449+08	2020-12-15 09:15:14.449+08	cfb7053c-3698-4308-9245-c7fdfb84a202	11dcf80d-a46c-4e22-9a8f-bb593a7e28fd
6c750999-8147-4ae4-8c14-544f95377878	2020-12-16 15:29:32.433+08	2020-12-16 15:29:32.433+08	4b302156-72de-4f74-a828-06b1e47938a3	702a3ccf-9ab6-4e19-95b9-6245c6e04333
8472f70e-34fe-43c2-aae1-2fba8b16675c	2020-12-16 15:35:33.778+08	2020-12-16 15:35:33.778+08	9acc6ecb-52ee-4070-8fe5-6e893642d30e	2e3d8e5f-92c8-4b83-9d21-aef4be9b2263
bf48148e-4c92-45bc-839a-6de986f9d861	2020-12-16 15:38:50.632+08	2020-12-16 15:38:50.632+08	bd26c9fd-802a-4cca-8f55-3a27e7bfb026	dab5f60a-dbfc-4951-96bb-dad1810a2ad0
674d24e8-b26a-41ab-ad1e-10b4db95f271	2020-12-21 17:00:24.216+08	2020-12-21 17:00:24.216+08	09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc	433ff29e-a7c6-430b-a1e5-3a709951b9e0
41099241-9771-442d-9ccc-eb2dd342ed88	2020-12-22 08:40:50.187+08	2020-12-22 08:40:50.187+08	31ecb271-8866-4680-add6-52e257911749	9e915601-a6e0-42f9-b2bc-cf1796c48cb1
713ca15b-8227-4fdb-8508-c235a536ad15	2020-12-24 12:36:44.277+08	2020-12-24 12:36:44.277+08	198ba586-24af-4e12-9eff-7c35453816b6	7acb204d-bb15-4ee5-894c-714cc65e4daf
b323b1a2-f8b7-4ffe-8849-0c496a08421f	2020-12-24 14:37:40.338+08	2020-12-24 14:37:40.338+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	30181893-36ba-45e6-b87f-8d8cac3d3b37
6c03615c-45a0-4604-9246-ddbe52ca8c30	2021-01-29 11:01:43.637+08	2021-01-29 11:01:43.637+08	2364818e-4cde-4614-a15d-7a127ceabf7d	429a3145-8b01-4e86-b3ca-dbc5fe17a025
88e029ae-3bb6-4cdf-a3b7-6fb022566cb4	2021-02-05 15:18:26.082+08	2021-02-05 15:18:26.082+08	d9456b27-5a08-40b3-bac7-967d99928997	65c99cac-65a9-4d11-ba14-78bf2cbeae96
\.


--
-- Data for Name: CapabilityProperty; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CapabilityProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "capabilityMetaId", "propertyTypeId", required, "isOtherParameter") FROM stdin;
342	xDegree	X轴角度	Output	\N	\N	\N	3	15	-15	°		2017-11-06 15:04:16.821+08	2017-11-06 15:04:16.821+08	8e034647-583f-43a4-9aa1-1291e5bd3b0d	2	t	f
343	yDegree	Y轴角度	Output	\N	\N	\N	3	15	-15	°		2017-11-06 15:04:16.826+08	2017-11-06 15:04:16.826+08	8e034647-583f-43a4-9aa1-1291e5bd3b0d	2	t	f
345	channel	channel	Output	\N			0					2017-11-10 14:17:53.9+08	2017-11-10 14:22:11.273+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
274	temp	温度	Output	\N			0			℃		2017-09-25 20:17:11.292+08	2017-09-25 20:23:02.063+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
1308	jmxCurrentConnNum	jmx当前连接数节点	Variable	\N	\N	objectName=Catalina:j2eeType=Servlet,*	\N	\N	\N	\N		2018-01-09 10:35:25.645+08	2018-01-09 10:35:25.645+08	3a66e33a-e25c-45ce-b87b-534d9d4bcaf4	5	t	f
350	direction	车向	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:26:45.919+08	2017-11-10 14:26:45.927+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
254	angleX	X轴角度	Output	\N			4			°		2017-09-25 10:44:21.681+08	2017-09-26 14:56:18.66+08	13cc9f05-5d98-4778-93a9-a423b70250a7	2	t	f
1354	phy1	温度	Output	\N	\N	\N	2	85	-25	℃		2018-01-10 16:58:20.476+08	2018-01-10 16:58:20.489+08	9bf06fea-f0b0-492f-9d2f-5ea749264883	2	t	f
351	fSumWeight	总重	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:27:07.608+08	2017-11-10 14:27:07.612+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
317	overload	超重	Output	\N	\N	\N	\N	\N	\N			2017-09-29 09:13:52.561+08	2017-09-29 09:13:52.574+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
1358	phy4	CO2浓度	Output	\N	\N	\N	2	5000	0	ppm		2018-01-10 17:15:24.796+08	2018-01-10 17:15:24.811+08	8096b88c-dc64-4f26-8f04-6ac919d70447	2	t	f
336	y		Output	\N	\N	\N	\N	\N	\N			2017-10-31 18:02:48.597+08	2017-10-31 18:02:48.597+08	cbd4f0c1-9be1-4123-8fff-9d16d6f163a3	2	t	f
337	temp		Output	\N	\N	\N	\N	\N	\N			2017-10-31 18:02:48.602+08	2017-10-31 18:02:48.602+08	cbd4f0c1-9be1-4123-8fff-9d16d6f163a3	2	t	f
1435	memRate	内存使用率	Variable	\N	\N	20.00	2	100.00	10.00	%	内存使用率	2018-01-19 15:35:35.369+08	2018-01-19 15:35:35.374+08	1e87be3b-9782-4b75-8b62-0aa49b44daea	2	t	f
341	yDegree	Y轴角度	Output	\N			3	15	-15	°		2017-11-06 11:16:45.21+08	2017-11-06 14:45:45.562+08	62f4f7c3-95a8-49d9-a5d1-c8f432c8d598	2	t	f
316	overload	超重	Output	\N			0					2017-09-28 17:35:28.526+08	2018-05-09 16:30:43.574+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
352	axieWeight1	轴1重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:27:59.36+08	2017-11-10 14:27:59.373+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
335	x		Output	\N			\N					2017-10-31 18:02:48.59+08	2018-02-28 16:46:11.943+08	cbd4f0c1-9be1-4123-8fff-9d16d6f163a3	2	t	f
353	axieWeight2	轴2重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:28:13.459+08	2017-11-10 14:28:13.464+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
355	axieWeight4	轴4重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:28:46.44+08	2017-11-10 14:28:46.448+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
1735	能力1-属性1	属性1	Constant	\N	\N	0.0	\N	\N	\N	米		2018-03-07 14:04:43.47+08	2018-03-07 14:04:43.477+08	7ca00003-ea25-4456-acad-32705e36bea1	2	t	f
357	axieWeight6	轴6重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:30:14.203+08	2017-11-10 14:30:14.211+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
1736	frequency	频率	Output	\N			3	\N	\N	HZ		2018-03-07 17:15:48.186+08	2018-03-07 17:15:48.186+08	c6ff7e02-05d5-45ee-9837-f61976b9d230	2	t	f
47	flow	标况流量	Output	\N	\N	\N	\N	\N	\N	m^3/h		2017-08-26 15:45:06.833+08	2017-08-26 15:45:06.833+08	e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	2	t	f
1737	temperature	温度	Output	\N			2	\N	\N	℃		2018-03-07 17:15:48.192+08	2018-03-07 17:15:48.192+08	c6ff7e02-05d5-45ee-9837-f61976b9d230	2	t	f
48	cumulant	累积量	Output	\N	\N	\N	\N	\N	\N	m³		2017-08-26 15:45:06.837+08	2017-08-26 15:45:06.837+08	e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	2	t	f
49	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-08-26 15:45:06.841+08	2017-08-26 15:45:06.841+08	e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	2	t	f
50	pressure	压力	Output	\N	\N	\N	\N	\N	\N	KPa		2017-08-26 15:45:06.844+08	2017-08-26 15:45:06.844+08	e1d1f6d5-ffa4-4ad6-b314-d49a9c25735b	2	t	f
255	temp	温度	Output	\N	\N	\N	2	120	-40	℃		2017-09-25 10:54:34.188+08	2017-09-25 10:54:34.188+08	8092619d-978e-402a-9aa1-897cb718a39b	2	t	f
281	grossWeight	总重	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:40:46.386+08	2017-09-25 20:40:46.386+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
282	speed	车速	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:40:46.39+08	2017-09-25 20:40:46.39+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
283	axisnum	轴数	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.394+08	2017-09-25 20:40:46.394+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
284	totalBase	总轴距	Output	\N	\N	\N	\N	\N	\N	cm		2017-09-25 20:40:46.397+08	2017-09-25 20:40:46.397+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
1063	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:17:08.6+08	2018-01-08 08:17:08.6+08	743c44f5-480c-4c97-80ef-a03ba282ed49	2	t	f
285	carType	车型号	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.401+08	2017-09-25 20:40:46.401+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
286	direction	方向	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.405+08	2017-09-25 20:40:46.405+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
287	cmsLength	车长	Output	\N	\N	\N	\N	\N	\N	cm		2017-09-25 20:40:46.409+08	2017-09-25 20:40:46.409+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
288	licence	车牌	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.414+08	2017-09-25 20:40:46.414+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
27	length	测量距离	Output	\N			4	80	0.05	m		2017-08-24 20:03:54.302+08	2017-11-30 15:25:50.843+08	86b95247-634a-44af-8af0-b047a5f10f5d	2	t	f
1074	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:38.771+08	2018-01-08 08:30:38.771+08	f2e47767-7959-4aeb-bfe0-0c07202c906c	2	t	f
1895	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 11:52:14.581+08	2018-03-26 11:52:14.588+08	afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	2	t	f
1218	yDegree	Y轴角度	Output	\N			3	10	-10	°		2018-01-08 14:58:38.577+08	2018-01-08 17:12:48.855+08	db8bf711-b26f-4e79-bc46-564fbc4f60ac	2	t	f
1732	anglex	X轴角度	Output	\N			2	\N	\N	°		2018-03-07 09:25:51.002+08	2018-04-02 17:11:17.686+08	c08bb21f-6cdb-46c1-a8df-3ea9d92279ba	2	t	f
1699	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 10:27:18.747+08	2018-03-02 10:27:18.754+08	e7092d0b-709a-414e-a8ca-a1e21ef6e36c	2	t	f
1701	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 10:53:56.609+08	2018-03-02 10:53:56.616+08	fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	2	t	f
1738	physicalvalue	应力	Output	\N			3	\N	\N	MPa		2018-03-07 17:15:48.197+08	2018-03-23 14:08:16.463+08	c6ff7e02-05d5-45ee-9837-f61976b9d230	2	t	f
289	axieWeight	轴重	Output	\N			0			Kg		2017-09-25 20:40:46.417+08	2018-05-09 17:05:11.662+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
1516	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:53:15.775+08	2018-03-02 14:24:14.459+08	069cdfbe-2463-40a3-a677-fa3564d06956	2	t	f
805	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 15:11:19.833+08	2018-01-05 15:11:19.833+08	4f08e245-f581-4570-8175-92b665bdd6c8	2	t	f
72	Distance	沉降值	Variable	\N	\N	0	3	1000	-1000	mm		2017-08-31 17:10:06.858+08	2017-08-31 17:10:06.866+08	38b407d6-2d46-46be-bb4d-9d0c6e673051	2	t	f
73	Temp	温度值	Variable	\N	\N	0	2	100	-10	°		2017-08-31 17:10:50.355+08	2017-08-31 17:10:50.362+08	38b407d6-2d46-46be-bb4d-9d0c6e673051	2	t	f
65	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-08-28 20:54:47.342+08	2017-08-28 20:54:47.351+08	a5866031-3267-4c41-97d2-0c8eeff1baab	2	t	f
299	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-25 20:40:46.453+08	2017-09-25 20:40:46.453+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
1896	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 11:52:41.68+08	2018-03-26 11:52:41.687+08	afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	2	t	f
1739	frequency	频率	Output	\N			3	\N	\N	HZ		2018-03-07 17:18:03.912+08	2018-03-07 17:18:03.912+08	a0f44ec1-49da-4ca4-83d2-323cdeeb2864	2	t	f
1740	temperature	温度	Output	\N			2	\N	\N	℃		2018-03-07 17:18:03.917+08	2018-03-07 17:18:03.917+08	a0f44ec1-49da-4ca4-83d2-323cdeeb2864	2	t	f
300	width	车宽	Output	\N	\N	\N	\N	\N	\N	cm		2017-09-25 20:40:46.456+08	2017-09-25 20:40:46.456+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
301	height	车高	Output	\N	\N	\N	\N	\N	\N	cm		2017-09-25 20:40:46.459+08	2017-09-25 20:40:46.459+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
302	crossRoad	跨道	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.462+08	2017-09-25 20:40:46.462+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
303	serialNum	序列号	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:40:46.465+08	2017-09-25 20:40:46.465+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
807	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 15:11:19.838+08	2018-01-05 15:11:19.838+08	4f08e245-f581-4570-8175-92b665bdd6c8	2	t	f
808	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 15:11:20.713+08	2018-01-05 15:11:20.713+08	63bfc488-1cc3-4d31-a86c-0b1d49baddc6	2	t	f
810	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 15:11:20.723+08	2018-01-05 15:11:20.723+08	63bfc488-1cc3-4d31-a86c-0b1d49baddc6	2	t	f
1867	physicalvalue	应变	Output	\N			4	1500	-1500	με		2018-03-26 11:24:13.133+08	2018-03-26 11:24:13.133+08	921508aa-21fc-41c6-b609-b6df5206ea7b	2	t	f
809	physicalvalue	应力	Output	\N			3	300	0	MPa		2018-01-05 15:11:20.718+08	2018-03-23 11:18:01.914+08	63bfc488-1cc3-4d31-a86c-0b1d49baddc6	2	t	f
811	windSpeed	风速	Output	\N			1	10	0	m/s		2018-01-05 15:12:52.901+08	2018-01-08 16:54:37.653+08	d9aa001d-6bbe-436c-89ac-c361f78f38ea	2	t	f
1066	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:38.165+08	2018-01-08 08:30:38.165+08	af9a44db-ee90-4372-87a9-b050e87791bc	2	t	f
68	laeq	平均声压	Output	\N	\N	\N	\N	\N	\N	dB		2017-08-28 22:04:57.697+08	2017-08-28 22:04:57.705+08	7fab5981-f265-41b6-b77c-36ac36a17a85	2	t	f
1868	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2018-03-26 11:24:13.142+08	2018-03-26 11:24:13.142+08	8e3f282e-7428-497b-baa8-0ca8fd248e36	2	t	f
806	physicalvalue	应力	Output	\N			3	400	0	MPa		2018-01-05 15:11:19.836+08	2018-03-23 11:17:34.782+08	4f08e245-f581-4570-8175-92b665bdd6c8	2	t	f
1741	physicalvalue	荷载	Output	\N			3	\N	\N	t		2018-03-07 17:18:03.921+08	2018-03-23 14:08:08.401+08	a0f44ec1-49da-4ca4-83d2-323cdeeb2864	2	t	f
340	xDegree	X轴角度	Output	\N			3	15	-15	°		2017-11-06 11:16:45.205+08	2017-11-06 14:45:35.805+08	62f4f7c3-95a8-49d9-a5d1-c8f432c8d598	2	t	f
346	carmodel	车型号	Output	\N			0					2017-11-10 14:20:31.56+08	2017-11-10 14:22:06.689+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
257	speed	车速	Output	\N			0			Km/h		2017-09-25 19:45:57.221+08	2017-09-25 20:21:10.069+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
256	grossWeight	总重	Output	\N			0			Kg		2017-09-25 19:45:57.217+08	2017-09-25 20:21:15.251+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
275	width	车宽	Output	\N			0			cm		2017-09-25 20:17:54.534+08	2017-09-25 20:23:06.686+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
277	crossRoad	跨道	Output	\N			0					2017-09-25 20:21:03.019+08	2017-09-25 20:25:42.896+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
304	limitWeight	限重	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:40:46.468+08	2017-09-25 20:40:46.468+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
2	y	Y角度	Output	\N			0			°		2017-08-12 17:30:28.191+08	2017-12-06 18:55:19.939+08	e8a19dbd-26d3-49a0-87b6-8248ceb6fc53	2	t	f
63	temperature	温度	Output	\N			2	70	-25	℃		2017-08-28 20:38:41.959+08	2018-03-23 16:10:12.846+08	e232591d-9a18-42c9-a7a4-dad82336325d	2	t	f
1897	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 11:53:17.901+08	2018-03-26 11:53:17.908+08	afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	2	t	f
1905	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 13:45:09.276+08	2018-03-26 13:45:09.285+08	f2877cda-87cc-485a-9fc6-11f7ef8b2624	2	t	f
1082	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:39.68+08	2018-01-08 08:30:39.68+08	ab8b7681-8ef7-4101-9a8a-5bee37ee7510	2	t	f
1906	physicalvalue	荷载力	Output	\N			3	105	-105	KN	正值是张拉力，负值是承压力	2018-03-26 13:46:14.879+08	2018-03-26 13:46:29.007+08	f2877cda-87cc-485a-9fc6-11f7ef8b2624	2	t	f
1072	physicalvalue	压力	Output	\N			3	1	0	MPa		2018-01-08 08:30:38.193+08	2018-03-28 23:16:30.601+08	af9a44db-ee90-4372-87a9-b050e87791bc	2	t	f
1067	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:38.169+08	2018-03-28 23:16:36.209+08	af9a44db-ee90-4372-87a9-b050e87791bc	2	t	f
264	axieWeight	轴重	Output	\N			0			Kg		2017-09-25 20:13:06.442+08	2018-05-09 17:00:45.546+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
821	am	幅值	Output	\N			3	\N	\N	mv		2018-01-05 15:18:31.335+08	2018-03-02 10:24:18.996+08	5714767a-3b97-4a8c-a5f6-abd8091e8662	2	t	f
305	limitTotalWeight	限总重	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:40:46.471+08	2017-09-25 20:40:46.471+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	5	t	f
124	windSpeed	风速	Output	\N			3	60	0	m/s		2017-09-04 14:12:42.51+08	2017-09-27 10:23:23.312+08	8b897f24-accb-4630-b1fa-e408e358fd35	2	t	f
1898	physicalvalue	应变	Output	\N			3	3000	-3000	με		2018-03-26 11:54:32.744+08	2018-03-26 11:57:05.33+08	afdde18b-1a6e-4e2b-8ef9-d5aeb34e82cc	2	t	f
1900	temperature	温度	Output	\N	\N	\N	2	\N		℃		2018-03-26 13:40:29.94+08	2018-03-26 13:40:29.945+08	c26fbe87-b6ec-4f0d-a907-e05fddec8f41	2	t	f
61	anglex	X轴角度	Output	\N			2	30	-30	°		2017-08-28 20:37:36.993+08	2018-03-23 16:10:26.59+08	e232591d-9a18-42c9-a7a4-dad82336325d	2	t	f
318	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2017-09-29 15:08:42.958+08	2017-09-29 15:08:42.958+08	72037569-7638-4b93-9212-ba15109f9afb	2	t	f
338	temp	温度	Output	\N			2	125	-40	℃		2017-11-01 15:38:54.186+08	2018-01-08 17:15:57.932+08	59674186-4b3a-4864-845c-81ba695df093	2	t	f
258	axisnum	轴数	Output	\N			0					2017-09-25 20:04:44.357+08	2017-09-25 20:21:19.176+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
262	cmsLength	车长	Output	\N			0			cm		2017-09-25 20:11:42.536+08	2017-09-25 20:21:58.777+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
280	limtTotalWeight	限总重	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:25:18.224+08	2017-09-25 20:25:18.231+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
278	serialNum	序列号	Output	\N			0					2017-09-25 20:24:10.153+08	2017-09-25 20:25:50.902+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
306	max		Output	\N	\N	\N	\N	\N	\N			2017-09-26 10:30:13.282+08	2017-09-26 10:30:13.282+08	46e0602d-85be-45f3-99cd-4a9a0ec8c3f0	2	t	f
307	min		Output	\N	\N	\N	\N	\N	\N			2017-09-26 10:30:13.287+08	2017-09-26 10:30:13.287+08	46e0602d-85be-45f3-99cd-4a9a0ec8c3f0	2	t	f
308	Laeq		Output	\N			\N	\N	\N			2017-09-26 10:30:13.29+08	2017-09-28 09:15:15.39+08	46e0602d-85be-45f3-99cd-4a9a0ec8c3f0	2	t	f
319	12312312	12312312	Variable	\N		1	0	1	1	13	5555555555555555	2017-09-30 11:42:38.229+08	2017-09-30 11:43:08.238+08	755904b4-158d-413b-bc84-ad489380caf2	1	t	f
822	physicalvalue	荷载力	Output	\N			4	160	-160	kN	正值是张拉力，负值是承压力	2018-01-05 15:18:31.339+08	2018-03-23 15:52:18.805+08	5714767a-3b97-4a8c-a5f6-abd8091e8662	2	t	f
62	angley	Y轴角度	Output	\N			2	30	-30	°		2017-08-28 20:38:12.457+08	2018-03-23 16:10:47.198+08	e232591d-9a18-42c9-a7a4-dad82336325d	2	t	f
339	humi	湿度	Output	\N			2	100	0	%		2017-11-01 15:38:54.192+08	2017-11-01 16:28:44.571+08	59674186-4b3a-4864-845c-81ba695df093	2	t	f
344	licence	车牌号	Output	\N			0					2017-11-10 14:16:16.938+08	2017-11-10 14:18:26.039+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	5	t	f
348	axisnum	轴数	Output	\N	\N	\N	\N	\N				2017-11-10 14:21:49.982+08	2017-11-10 14:21:49.994+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
347	speed	车数	Output	\N			0					2017-11-10 14:21:15.914+08	2017-11-10 14:22:01.206+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
349	totalBase	轴距	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:24:37.141+08	2017-11-10 14:24:37.15+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
354	axieWeight3	轴3重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:28:31.401+08	2017-11-10 14:28:31.41+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
356	axieWeight5	轴5重量	Output	\N	\N	\N	\N	\N	\N			2017-11-10 14:29:53.471+08	2017-11-10 14:29:53.486+08	e265c046-3bc7-43b9-85d7-493bfd4c76d8	1	t	f
242	nlsx	nlsx	Variable	\N	\N	nlsx	\N	\N	\N			2017-09-19 16:23:55.249+08	2017-09-19 16:23:55.249+08	153bec2e-1a9a-428d-a5f6-8ff6a5b85fa0	5	t	f
263	licence	车牌	Output	\N	\N	\N	\N	\N	\N			2017-09-25 20:12:24.508+08	2017-09-25 20:12:24.515+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
276	height	车高	Output	\N			0			cm		2017-09-25 20:18:13.212+08	2017-09-25 20:23:10.536+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
53	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2017-08-26 15:59:26.866+08	2017-08-26 15:59:26.866+08	12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	2	t	f
54	temperature	温度	Output	\N			\N	\N	\N	℃		2017-08-26 15:59:26.869+08	2018-03-23 16:15:56.812+08	12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	2	t	f
69	lmax	最大声压	Output	\N	\N	\N	\N	\N	\N	dB		2017-08-28 22:05:14.882+08	2017-08-28 22:05:14.888+08	7fab5981-f265-41b6-b77c-36ac36a17a85	2	t	f
70	lmin	最小声压	Output	\N	\N	\N	\N	\N	\N	dB		2017-08-28 22:05:28.875+08	2017-08-28 22:05:28.883+08	7fab5981-f265-41b6-b77c-36ac36a17a85	2	t	f
71	power	电量	Output	\N	\N	\N	\N	\N	\N	%		2017-08-28 22:08:07.352+08	2017-08-28 22:08:07.363+08	06cd5938-5a30-4ca3-910e-b174b900daff	1	t	f
1880	physicalvalue	荷载力	Output	\N			4	105	-105	kN		2018-03-26 11:35:23.109+08	2018-03-26 11:36:48.258+08	053f72a5-5576-48de-baa6-a2732ff863cc	2	t	f
1879	physicalvalue	荷载力	Output	\N			4	105	-105	kN		2018-03-26 11:35:23.093+08	2018-03-26 11:36:54.58+08	43e14c1c-a425-4001-9886-f41df72945ea	2	t	f
1075	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:38.775+08	2018-03-28 23:15:37.788+08	f2e47767-7959-4aeb-bfe0-0c07202c906c	2	t	f
1901	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 13:40:48.522+08	2018-03-26 13:40:48.531+08	c26fbe87-b6ec-4f0d-a907-e05fddec8f41	2	t	f
1882	physicalvalue	荷载力	Output	\N			4	136	-136	kN		2018-03-26 11:35:23.216+08	2018-03-26 11:37:52.879+08	4f92b0e6-a618-4221-8c58-169247d88bd0	2	t	f
1881	physicalvalue	荷载力	Output	\N			4	136	-136	kN		2018-03-26 11:35:23.21+08	2018-03-26 11:37:59.294+08	82a15a43-5463-4d67-88ea-0a816235bd70	2	t	f
1904	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 13:44:52.772+08	2018-03-26 13:44:52.781+08	f2877cda-87cc-485a-9fc6-11f7ef8b2624	2	t	f
1920	physicalvalue	荷载力	Output	\N	\N	\N	4	160	-160	KN		2018-03-26 14:00:17.687+08	2018-03-26 14:00:17.692+08	ce140baa-bcd7-4756-9d06-9591535eed2a	2	t	f
817	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:18:31.307+08	2018-03-26 14:01:15.798+08	5714767a-3b97-4a8c-a5f6-abd8091e8662	2	t	f
819	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:18:31.316+08	2018-03-26 14:01:19.846+08	5714767a-3b97-4a8c-a5f6-abd8091e8662	2	t	f
1080	physicalvalue	变位量	Output	\N			3	200	0	mm		2018-01-08 08:30:38.805+08	2018-03-28 23:15:30.715+08	f2e47767-7959-4aeb-bfe0-0c07202c906c	2	t	f
147	illumination	光照	Output	\N	\N	\N	\N	\N	\N	lux		2017-09-06 20:02:42.858+08	2017-09-06 20:02:42.865+08	1637283e-980c-4ed8-8cf3-71e794c45bb2	2	t	f
239	humi	湿度	Output	\N	\N	\N	\N	\N	\N	%		2017-09-18 20:53:58.411+08	2017-09-18 20:53:58.411+08	2b50fea6-1651-43d8-8e42-2faca6f3d3ac	2	t	f
240	Temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-18 21:07:16.322+08	2017-09-18 21:07:16.332+08	30898650-f0f5-46dc-adad-62e86317d96b	2	t	f
241	Hum	湿度	Output	\N	\N	\N	\N	\N	\N	°		2017-09-18 21:07:50.148+08	2017-09-18 21:07:50.155+08	30898650-f0f5-46dc-adad-62e86317d96b	2	t	f
125	windDirection	风向	Output	\N			2	360	0	°		2017-09-04 14:12:42.516+08	2017-09-27 10:23:07.561+08	8b897f24-accb-4630-b1fa-e408e358fd35	2	t	f
259	totalBase	总轴距	Output	\N			0			cm		2017-09-25 20:06:00.587+08	2017-09-25 20:21:32.542+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
177	windSpeed	风速	Output	\N			2			m/s		2017-09-13 09:13:35.777+08	2017-09-27 11:03:36.965+08	d0fd7335-0b93-4716-9793-e95ae31f1765	2	t	f
814	zAccelertation	Z轴加速度	Output	\N			2	5000	0	mg		2018-01-05 15:16:50.301+08	2018-01-08 16:50:27.713+08	12ffe39f-e941-4496-a0af-ae5d4c1e0d29	2	t	f
149	yDegree	Y轴角度	Output	\N			4	180	0	°		2017-09-07 14:40:21.34+08	2017-09-27 15:40:35.023+08	eea54bd1-3ede-4ab6-b07d-8b1f58292efc	2	t	f
148	xDegree	X轴角度	Output	\N			4	180	0	°		2017-09-07 14:40:21.332+08	2017-09-27 15:40:42.095+08	eea54bd1-3ede-4ab6-b07d-8b1f58292efc	2	t	f
150	temp	温度	Output	\N			2	120	-40	℃		2017-09-07 14:40:21.345+08	2017-09-27 15:40:56.419+08	eea54bd1-3ede-4ab6-b07d-8b1f58292efc	2	t	f
93	yDegree	Y轴角度	Output	\N			4	30	-30	°		2017-09-02 14:47:06.956+08	2017-09-28 09:05:59.78+08	753c5c99-5da6-4172-9173-492353bb0533	2	t	f
92	xDegree	X轴角度	Output	\N			4	30	-30	°		2017-09-02 14:47:06.952+08	2017-09-28 09:06:07.242+08	753c5c99-5da6-4172-9173-492353bb0533	2	t	f
1899	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 13:39:10.996+08	2018-03-26 13:39:11.002+08	c26fbe87-b6ec-4f0d-a907-e05fddec8f41	2	t	f
1907	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 13:50:32.994+08	2018-03-26 13:50:33.004+08	e3bf8273-2a58-438d-b214-0fd258644ef8	2	t	f
1356	phy2	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-01-10 17:12:02.3+08	2018-01-10 17:12:02.314+08	8096b88c-dc64-4f26-8f04-6ac919d70447	2	t	f
168	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-12 17:57:39.274+08	2017-09-12 17:57:39.274+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
1439	name	名称	Variable	\N	\N		\N	\N	\N	\N		2018-01-22 10:22:11.35+08	2018-01-22 10:22:11.355+08	3d303bbc-0f1a-4105-b7a6-9db99aefb409	5	t	f
169	pressure	压强	Output	\N	\N	\N	\N	\N	\N	KPa		2017-09-12 17:57:39.28+08	2017-09-12 17:57:39.28+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
170	standardTotalFlow	标况累积量	Output	\N	\N	\N	\N	\N	\N	m^3		2017-09-12 17:57:39.283+08	2017-09-12 17:57:39.283+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
171	standardInstanceFlow	标况瞬时量	Output	\N	\N	\N	\N	\N	\N	m^3/h		2017-09-12 17:57:39.286+08	2017-09-12 17:57:39.286+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
172	normalTotalFlow	工况累积量	Output	\N	\N	\N	\N	\N	\N	m^3		2017-09-12 17:57:39.29+08	2017-09-12 17:57:39.29+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
173	normalInstanceFlow	工况瞬时量	Output	\N	\N	\N	\N	\N	\N	m^3/h		2017-09-12 17:57:39.293+08	2017-09-12 17:57:39.293+08	e5bbfc36-064a-45ac-adf0-2003947dd2c4	2	t	f
174	length	长度	Output	\N	\N	\N	\N	\N	\N	m		2017-09-12 18:08:25.116+08	2017-09-12 18:08:25.116+08	c59b78f5-1913-43de-8355-67d4c34b662a	2	t	f
813	yAccelertation	Y轴加速度	Output	\N			2	5000	0	mg		2018-01-05 15:16:28.763+08	2018-01-08 16:50:17.985+08	12ffe39f-e941-4496-a0af-ae5d4c1e0d29	2	t	f
158	length	液位	Output	\N			3	\N	\N	mm		2017-09-09 11:32:45.962+08	2018-07-02 14:28:17.147+08	27235845-4d19-4dfa-adc8-4f7b84233022	2	t	f
153	angleX	X轴角度	Output	\N			2	90	-90	°		2017-09-07 20:33:27.571+08	2017-12-21 14:21:55.626+08	12de1b06-528f-42a2-8174-daa14d29506d	2	t	f
1	x	X角度	Output	\N			0			°		2017-08-12 17:30:28.186+08	2017-12-06 18:56:38.368+08	e8a19dbd-26d3-49a0-87b6-8248ceb6fc53	2	t	f
154	angleY	Y轴角度	Output	\N			2	90	-90	°		2017-09-07 20:34:10.815+08	2017-12-21 14:21:47.755+08	12de1b06-528f-42a2-8174-daa14d29506d	2	t	f
131	elongationIndicator	偏移量	Output	\N			3	500	0	mm		2017-09-04 19:04:13.365+08	2018-01-08 10:20:30.569+08	2f698b72-9c05-42fe-a0e9-3224917239aa	2	t	f
164	hum	湿度	Output	\N			2	100	0	%RH		2017-09-11 20:35:38.755+08	2017-12-21 13:57:24.953+08	368cf5ab-5455-422a-a659-ba613b272684	2	t	f
157	yDegree	Y轴角度	Output	\N			2	60	-60	°		2017-09-08 17:28:38.393+08	2017-12-08 16:00:17.827+08	62a1a275-a6d3-44b4-b472-901f274afaaa	2	t	f
165	temp	温度	Output	\N			2	80	-20	℃		2017-09-12 17:44:24.686+08	2017-12-21 17:52:00.794+08	6e5f9207-905d-4732-bb07-89e21da54dd1	2	t	f
331	PM10	PM10	Output	\N			1	10000	0	ug/m³		2017-10-31 15:36:38.667+08	2017-12-12 11:36:30.887+08	9b5c5f27-ebad-42e1-8586-405066f03c1d	2	t	f
156	xDegree	X轴角度	Output	\N			2	60	-60	°		2017-09-08 17:28:38.391+08	2017-12-08 16:00:07.785+08	62a1a275-a6d3-44b4-b472-901f274afaaa	2	t	f
104	angley	Y轴角度	Output	\N			2	30	-30	°		2017-09-04 09:36:21.651+08	2018-03-23 16:17:16.925+08	cbca938f-e317-4e23-a721-4f2b7b54a827	2	t	f
105	temperature	温度	Output	\N			2	70	-25	℃		2017-09-04 09:36:21.655+08	2018-03-23 16:17:25.435+08	cbca938f-e317-4e23-a721-4f2b7b54a827	2	t	f
52	temperature	温度	Output	\N			2	120	-40	℃		2017-08-26 15:51:32.561+08	2018-03-23 16:01:27.746+08	aa48a11a-b276-4670-bc85-8c69368a7def	2	t	f
155	distance	距离	Output	\N			1	40000	50	mm		2017-09-08 09:20:57.964+08	2017-12-21 11:25:50.866+08	394f3594-52f4-472a-9078-081172abaaae	2	t	f
146	pressure	压强	Output	\N			3	200	0	mH2O		2017-09-06 19:42:30.112+08	2017-12-21 11:54:08.563+08	f02e6117-3fda-43f0-b465-8f5961e08bed	2	t	f
163	temp	温度	Output	\N			2	70	-20	℃		2017-09-11 20:34:59.746+08	2017-12-21 13:49:36.003+08	368cf5ab-5455-422a-a659-ba613b272684	2	t	f
176	distance	距离	Output	\N			3	2000	50	mm		2017-09-12 20:35:06.033+08	2017-12-21 15:57:53.785+08	d4a43ecd-43b6-4232-a482-16e675aadb59	2	t	f
166	humi	湿度	Output	\N			2	100	0	%RH		2017-09-12 17:44:24.691+08	2017-12-21 17:52:15.5+08	6e5f9207-905d-4732-bb07-89e21da54dd1	2	t	f
160	yDegree	Y轴角度	Output	\N			2	30	-30	°		2017-09-09 14:39:09.824+08	2018-01-08 10:42:31.089+08	bda64c7e-58cc-4668-8f46-8d08be815f1a	2	t	f
159	xDegree	X轴角度	Output	\N			2	30	-30	°		2017-09-09 14:39:09.82+08	2018-01-08 10:42:34.767+08	bda64c7e-58cc-4668-8f46-8d08be815f1a	2	t	f
144	temperature	温度	Output	\N			2	\N	\N	℃		2017-09-06 18:47:18.576+08	2018-06-12 13:34:05.375+08	abcd5e24-44d0-47ba-95db-9bdfab8d2d92	2	t	f
66	temperature	温度	Output	\N			2	120	-40	℃		2017-08-28 21:26:59.603+08	2018-03-23 16:00:30.774+08	11450ef7-f0d4-4947-acd3-d1f7afd85e0d	2	t	f
1517	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:53:15.779+08	2018-03-23 15:44:55.531+08	069cdfbe-2463-40a3-a677-fa3564d06956	2	t	f
67	humidity	湿度	Output	\N			2	100	0	%RH		2017-08-28 21:27:56.274+08	2018-03-23 16:00:42.382+08	11450ef7-f0d4-4947-acd3-d1f7afd85e0d	2	t	f
55	physicalvalue	应变	Output	\N			4	1500	-1500	με		2017-08-26 15:59:26.874+08	2018-03-23 16:15:45.264+08	12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	2	t	f
103	anglex	X轴角度	Output	\N			2	30	-30	°		2017-09-04 09:36:21.646+08	2018-03-23 16:17:08.279+08	cbca938f-e317-4e23-a721-4f2b7b54a827	2	t	f
1828	force	重量	Output	\N			3	\N	\N	kg		2018-03-19 14:57:03.371+08	2018-04-02 11:06:50.163+08	e23258d4-5427-479c-b19b-25ac08c4888f	2	t	f
178	length	长度	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-13 10:00:10.884+08	2017-09-13 10:00:10.884+08	1108a01e-cf7e-4407-be7a-85cf6851ca6d	2	t	f
180	waterLevel	水位	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-14 14:34:58.936+08	2017-09-14 14:34:58.936+08	31983eec-ccfb-4540-8ab1-12b5b3c8eeb2	2	t	f
181	waterLevel	水位	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-14 14:41:42.382+08	2017-09-14 14:41:42.382+08	32d914f1-c9e2-402c-b81f-3805e8f60e60	2	t	f
182	concentration	浓度	Output	\N	\N	\N	\N	\N	\N	ppm		2017-09-14 14:47:52.17+08	2017-09-14 14:47:52.17+08	bbb36e1c-2e68-4274-881d-77618b327419	2	t	f
183	concentration	浓度	Output	\N	\N	\N	\N	\N	\N	ppm		2017-09-14 14:50:50.81+08	2017-09-14 14:50:50.81+08	806a1583-b6da-4e6d-89f9-419fad701d56	2	t	f
184	concentration	浓度	Output	\N	\N	\N	\N	\N	\N	ppm		2017-09-14 14:53:06.109+08	2017-09-14 14:53:06.109+08	b640dd61-c4cb-4b47-af2d-fc9a2284f407	2	t	f
185	location1	位置1水位	Output	\N			0			mm		2017-09-14 17:27:01.219+08	2017-09-14 17:49:22.06+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	2	t	f
186	location2	位置2水位	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-14 17:49:42.131+08	2017-09-14 17:49:42.144+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	2	t	f
187	temp1	温度1	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-14 17:50:10.471+08	2017-09-14 17:50:10.48+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	2	t	f
188	temp2	温度2	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-14 17:50:33.875+08	2017-09-14 17:50:33.882+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	2	t	f
189	temp3	温度3	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-14 17:50:53.052+08	2017-09-14 17:50:53.06+08	ed246dd4-64be-4a48-a869-c4de71bbb2b6	2	t	f
195	mainSpeed	主起变频输出转速	Output	\N	\N	\N	\N	\N	\N	r/min		2017-09-14 19:37:28.699+08	2017-09-14 19:37:28.699+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
196	mainCurrt	主起变频输出电流	Output	\N	\N	\N	\N	\N	\N	A		2017-09-14 19:37:28.703+08	2017-09-14 19:37:28.703+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
197	mainTorque	主起变频输出转矩	Output	\N	\N	\N	\N	\N	\N	%		2017-09-14 19:37:28.706+08	2017-09-14 19:37:28.706+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
198	mainVoltage	主起变频输出电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.708+08	2017-09-14 19:37:28.708+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
199	mainGVoltage	主起变频母线电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.711+08	2017-09-14 19:37:28.711+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
200	mainPosition	主起位置	Output	\N	\N	\N	\N	\N	\N	m		2017-09-14 19:37:28.714+08	2017-09-14 19:37:28.714+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
201	mainWeight	主起重量	Output	\N	\N	\N	\N	\N	\N	T		2017-09-14 19:37:28.716+08	2017-09-14 19:37:28.716+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
202	deputyPosition	副起位置	Output	\N	\N	\N	\N	\N	\N	m		2017-09-14 19:37:28.721+08	2017-09-14 19:37:28.721+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
203	deputyWeight	副起重量	Output	\N	\N	\N	\N	\N	\N	T		2017-09-14 19:37:28.725+08	2017-09-14 19:37:28.725+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
175	noise	等效声级	Output	\N			2			dB		2017-09-12 19:48:22.314+08	2017-09-27 11:15:04.269+08	548cf988-bee3-40cd-b3b9-5d7d2da91605	2	t	f
142	concentration	气体浓度	Output	\N			4	100	0	ppm		2017-09-05 10:54:48.266+08	2017-09-27 14:58:25.88+08	0e235516-0320-49a5-91e7-a70282c3bb70	2	t	f
204	sCarSpeed	小车变频输出转速	Output	\N	\N	\N	\N	\N	\N	r/min		2017-09-14 19:37:28.728+08	2017-09-14 19:37:28.728+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
205	sCarCurrt	小车变频输出电流	Output	\N	\N	\N	\N	\N	\N	A		2017-09-14 19:37:28.73+08	2017-09-14 19:37:28.73+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
206	sCarTorque	小车变频输出转矩	Output	\N	\N	\N	\N	\N	\N	%		2017-09-14 19:37:28.732+08	2017-09-14 19:37:28.732+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
207	sCarVoltage	小车变频输出电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.734+08	2017-09-14 19:37:28.734+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
208	sCarGVoltage	小车变频母线电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.737+08	2017-09-14 19:37:28.737+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
209	sCarPosition	小车位置	Output	\N	\N	\N	\N	\N	\N	m		2017-09-14 19:37:28.74+08	2017-09-14 19:37:28.74+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
210	lCarSpeed	大车变频输出转速	Output	\N	\N	\N	\N	\N	\N	r/min		2017-09-14 19:37:28.743+08	2017-09-14 19:37:28.743+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
211	lCarCurrt	大车变频输出电流	Output	\N	\N	\N	\N	\N	\N	A		2017-09-14 19:37:28.745+08	2017-09-14 19:37:28.745+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
212	lCarTorque	大车变频输出转矩	Output	\N	\N	\N	\N	\N	\N	%		2017-09-14 19:37:28.747+08	2017-09-14 19:37:28.747+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
213	lCarVoltage	大车变频输出电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.749+08	2017-09-14 19:37:28.749+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
214	lCarGVoltage	大车变频母线电压	Output	\N	\N	\N	\N	\N	\N	V		2017-09-14 19:37:28.752+08	2017-09-14 19:37:28.752+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
215	lCarPosition	大车位置	Output	\N	\N	\N	\N	\N	\N	m		2017-09-14 19:37:28.754+08	2017-09-14 19:37:28.754+08	675bed44-95cd-4c66-890c-97fd1ffb3cd9	2	t	f
216	salinity	盐分	Output	\N	\N	\N	\N	\N	\N	%		2017-09-14 20:24:32.018+08	2017-09-14 20:24:32.018+08	64bf5540-28ff-480e-9225-c13af83a12bc	2	t	f
218	humid	湿度	Output	\N	\N	\N	\N	\N	\N	%		2017-09-14 20:36:40.102+08	2017-09-14 20:36:40.102+08	7e142a42-bfc3-472c-8c56-ef90d2964c67	2	t	f
219	anion	负氧离子	Output	\N			0			个/cm3		2017-09-14 20:36:40.105+08	2017-09-14 20:36:57.429+08	7e142a42-bfc3-472c-8c56-ef90d2964c67	2	t	f
1359	phy1	温度	Output	\N	\N	\N	2	85	-25	℃		2018-01-11 09:31:46.084+08	2018-01-11 09:31:46.092+08	67806ef3-539e-4cfc-932c-2b9fd5d49329	2	t	f
222	elongationIndicator	偏移量	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-16 12:22:16.729+08	2017-09-16 12:22:16.729+08	cb38bec9-e2e2-4a58-8bf5-b730c85910b3	2	t	f
223	Temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-16 14:20:09.413+08	2017-09-16 14:20:09.423+08	c9f6eadb-715b-4ad3-9354-fcfe2735ba5a	2	t	f
224	Strain	应变值	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-16 14:21:10.31+08	2017-09-16 14:21:10.32+08	c9f6eadb-715b-4ad3-9354-fcfe2735ba5a	2	t	f
225	Offset	偏移值	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-16 14:22:36.265+08	2017-09-16 14:22:36.274+08	c9f6eadb-715b-4ad3-9354-fcfe2735ba5a	2	t	f
226	Pressure	压力	Output	\N	\N	\N	\N	\N	\N	Kpa		2017-09-16 15:23:51.989+08	2017-09-16 15:23:52.014+08	33bc9e2c-5131-4c06-836f-79051ffccb1e	2	t	f
227	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-16 16:10:09.743+08	2017-09-16 16:10:09.743+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
228	humi	湿度	Output	\N	\N	\N	\N	\N	\N	%		2017-09-16 16:10:09.748+08	2017-09-16 16:10:09.748+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
229	pressure	气压	Output	\N	\N	\N	\N	\N	\N	kpa		2017-09-16 16:10:09.751+08	2017-09-16 16:10:09.751+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
230	speedofWind	风速	Output	\N	\N	\N	\N	\N	\N	m/s		2017-09-16 16:10:09.754+08	2017-09-16 16:10:09.754+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
231	azimuthofWind	风向	Output	\N	\N	\N	\N	\N	\N	°		2017-09-16 16:10:09.758+08	2017-09-16 16:10:09.758+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
1365	phy1	光照	Output	\N	\N	\N	3	200000	0	Lux		2018-01-11 10:13:20.805+08	2018-01-11 10:13:20.812+08	979e7ae3-520f-4bf4-b641-7451c30378c6	2	t	f
2173	length	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2018-04-10 09:58:59.675+08	2018-04-10 09:58:59.684+08	541024ad-b513-4adb-b4ea-9a3eb3b67f5c	2	t	f
220	windSpeed	风速	Output	\N			2	60	0	m/s		2017-09-14 20:57:53.47+08	2017-12-21 14:12:30.641+08	2e7a1db8-dd48-47e0-87d0-023cd2b9ff08	2	t	f
190	PH	PH值	Output	\N			2	\N	\N	pH		2017-09-14 19:08:55.131+08	2018-11-06 10:31:30.172+08	4a08b319-23f2-4854-ad86-755792e575d4	2	t	f
191	temp	温度	Output	\N			2	\N	\N	℃		2017-09-14 19:08:55.136+08	2018-11-06 10:31:36.215+08	4a08b319-23f2-4854-ad86-755792e575d4	2	t	f
232	rainFall	雨量	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-16 16:10:09.761+08	2017-09-16 16:10:09.761+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
233	radiation	总辐射	Output	\N	\N	\N	\N	\N	\N	W/m2		2017-09-16 16:10:09.764+08	2017-09-16 16:10:09.764+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
234	illumination	照度	Output	\N	\N	\N	\N	\N	\N	lux		2017-09-16 16:10:09.767+08	2017-09-16 16:10:09.767+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
235	soilTemp	土温	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-16 16:10:09.77+08	2017-09-16 16:10:09.77+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
236	soilHum	土湿	Output	\N	\N	\N	\N	\N	\N	%		2017-09-16 16:10:09.772+08	2017-09-16 16:10:09.772+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
237	evaporation	蒸发	Output	\N	\N	\N	\N	\N	\N	mm		2017-09-16 16:10:09.775+08	2017-09-16 16:10:09.775+08	797175f9-4873-4010-8299-cb4ce6a3e386	2	t	f
238	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2017-09-18 20:53:58.406+08	2017-09-18 20:53:58.406+08	2b50fea6-1651-43d8-8e42-2faca6f3d3ac	2	t	f
251	angleY	Y轴角度	Output	\N			4			°		2017-09-21 10:57:18.466+08	2017-09-26 15:21:47.575+08	523d0a38-7b6b-4808-94b0-63bb477e7ead	2	t	f
250	angleX	X轴角度	Output	\N			4			°		2017-09-21 10:57:18.462+08	2017-09-26 15:21:56.684+08	523d0a38-7b6b-4808-94b0-63bb477e7ead	2	t	f
260	carmodle	车型号	Output	\N			0					2017-09-25 20:08:28.088+08	2017-09-25 20:21:46.108+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
261	direction	方向	Output	\N			0					2017-09-25 20:10:32.086+08	2017-09-25 20:21:54.298+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
279	limitWeight	限重	Output	\N	\N	\N	\N	\N	\N	Kg		2017-09-25 20:24:47.048+08	2017-09-25 20:24:47.055+08	05c849f0-63f3-4d19-97bf-f22e655c0852	5	t	f
249	angleY	Y轴角度	Output	\N			4			°		2017-09-20 16:26:18.718+08	2017-09-26 15:22:50.941+08	c0659a78-00c3-480d-a385-21a57e7eba37	2	t	f
248	angleX	X轴角度	Output	\N			4			°		2017-09-20 16:26:18.713+08	2017-09-26 15:23:01.463+08	c0659a78-00c3-480d-a385-21a57e7eba37	2	t	f
217	temp	温度	Output	\N			2			℃		2017-09-14 20:36:40.098+08	2017-09-26 20:51:00.236+08	7e142a42-bfc3-472c-8c56-ef90d2964c67	2	t	f
332	temperature	温度	Output	\N			2	60	-40	℃		2017-10-31 16:29:27.92+08	2017-11-08 16:57:38.182+08	32ccecbf-6cc2-4076-9f31-9541382b444a	2	t	f
1311	jmxTotalConnNum	总连接数jmx节点	Variable	\N	\N	objectName=Catalina:j2eeType=Servlet,* attribute=processingTime	\N	\N	\N	\N	总连接数jmx节点	2018-01-09 10:55:44.911+08	2018-01-09 10:55:44.918+08	e240a124-006b-4a79-9006-c8fcb6842ef7	5	t	f
94	length	长度	Output	\N			4	70	0.05	mm		2017-09-02 14:59:34.589+08	2017-09-28 16:26:06.224+08	3c90cbd4-1398-4e10-b930-11e414495e2f	2	t	f
333	humidity	湿度	Output	\N			2	100	0	%		2017-10-31 16:29:27.927+08	2017-11-06 10:14:34.966+08	32ccecbf-6cc2-4076-9f31-9541382b444a	2	t	f
334	pressure	压力	Output	\N			2	110	10	Kpa		2017-10-31 16:29:27.932+08	2017-11-08 16:58:29.66+08	32ccecbf-6cc2-4076-9f31-9541382b444a	2	t	f
3	temp	温度	Output	\N			0			°C		2017-08-12 17:30:28.195+08	2018-12-28 13:43:08.557+08	e8a19dbd-26d3-49a0-87b6-8248ceb6fc53	2	t	f
358	illuminance	光照	Output	\N	\N	\N	2	100000	0	Lux		2017-11-16 13:50:55.931+08	2017-11-16 13:50:55.931+08	96c5d707-f87c-4a33-a34e-4094c74b8cea	2	t	f
359	co2	浓度	Output	\N	\N	\N	2	5000	0	ppm		2017-11-16 17:03:23.921+08	2017-11-16 17:03:23.921+08	80773b73-3653-4506-8298-8dfcb4865a90	2	t	f
361	tempture	温度	Output	\N			2	\N	\N	℃		2017-11-17 09:36:19.812+08	2018-11-26 14:09:52.057+08	2580380e-6175-4c59-829a-f4f2c36d4af2	2	t	f
363	value	粉尘	Output	\N	\N	\N	2	\N	\N	mg/m3		2017-11-20 16:42:59.973+08	2017-11-20 16:42:59.973+08	5e0f1662-8477-42af-9c5a-ae89e5c992c1	2	t	f
364	xDegree	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2017-11-21 15:57:22.486+08	2017-11-21 15:57:22.486+08	3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2	2	t	f
365	yDegree	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2017-11-21 15:57:22.492+08	2017-11-21 15:57:22.492+08	3c4f26a5-6ee8-410b-b9d2-1e114b7f71b2	2	t	f
366	PM10	PM10	Output	\N	\N	\N	2	1000	0	ug/m3		2017-11-23 10:44:01.182+08	2017-11-23 10:44:01.182+08	eb818780-0ef4-4fd6-9b77-64d3c96493c4	2	t	f
367	PM25	PM2.5	Output	\N	\N	\N	2	1000	0	ug/m3		2017-11-23 10:44:01.189+08	2017-11-23 10:44:01.189+08	eb818780-0ef4-4fd6-9b77-64d3c96493c4	2	t	f
369	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-25 12:01:56.874+08	2018-03-28 23:07:33.634+08	ef22c0f1-7da1-47eb-915f-8ef899a1c2e0	2	t	f
370	physicalvalue	压力	Output	\N			4	\N	\N	MPa		2017-11-25 12:02:58.465+08	2018-03-28 23:30:34.625+08	ef22c0f1-7da1-47eb-915f-8ef899a1c2e0	2	t	f
368	frequency	频率	Output	\N			3	\N	\N	HZ		2017-11-25 12:01:20.89+08	2017-11-25 12:03:10.813+08	ef22c0f1-7da1-47eb-915f-8ef899a1c2e0	2	t	f
243	anglex	X轴角度	Output	\N			\N	\N	\N	°		2017-09-19 20:20:53.745+08	2018-03-29 10:13:08.472+08	66c8cd90-726f-42dd-afd8-2aa08f68a71f	2	t	f
244	angley	Y轴角度	Output	\N			\N	\N	\N	°		2017-09-19 20:20:53.751+08	2018-03-29 10:13:14.66+08	66c8cd90-726f-42dd-afd8-2aa08f68a71f	2	t	f
246	angleX	X轴角度	Output	\N			2	90	-90	°		2017-09-19 20:43:48.828+08	2017-12-21 15:08:27.468+08	e87c4f0a-877a-4865-98c6-bca08f38164b	2	t	f
245	temperature	温度	Output	\N			\N	\N	\N	℃		2017-09-19 20:20:53.755+08	2018-03-29 10:13:21.11+08	66c8cd90-726f-42dd-afd8-2aa08f68a71f	2	t	f
252	anglex	X轴角度	Output	\N			4			°		2017-09-22 17:34:24.773+08	2018-03-29 10:14:06.444+08	9e159552-fb77-4196-aea1-d7e9f88fcbbc	2	t	f
132	concentration	CO浓度	Output	\N			2	10000	0	ppm		2017-09-04 20:42:35.986+08	2017-11-27 16:24:48.801+08	8f438749-6713-4139-86ef-08d02243f962	2	t	f
376	elongationIndicator	偏移量	Output	\N			3	50	0	mm		2017-11-28 16:56:19.229+08	2018-01-08 10:19:50.205+08	7fa794ae-2b82-40df-9084-5d7b66236d50	2	t	f
378	concentration	气体浓度	Output	\N			2	\N	\N	\N		2017-11-29 09:25:05.697+08	2017-11-29 09:25:14.188+08	25fa942f-2929-4429-85e1-e3deb8f728b0	2	t	f
1903	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 13:44:30.831+08	2018-03-26 13:44:30.843+08	f2877cda-87cc-485a-9fc6-11f7ef8b2624	2	t	f
377	elongationIndicator	偏移量	Output	\N			3	500	0	mm		2017-11-28 16:59:54.988+08	2018-01-08 10:18:51.162+08	f8a92db3-4b55-47ec-a466-2d3c44e8b97d	2	t	f
193	turbidity	浊度	Output	\N			2	\N	\N	NTU		2017-09-14 19:08:55.143+08	2019-10-24 14:14:50.367+08	4a08b319-23f2-4854-ad86-755792e575d4	2	t	f
383	pressure	压强	Output	\N			4	20	0	Kpa		2017-11-29 11:58:58.951+08	2017-11-29 12:00:31.445+08	3dad677f-3582-41e5-a77c-ea629f6974fe	2	t	f
1829	x	x	Output	\N			9	99999999999	-999999999999	\N		2018-03-20 09:47:45.329+08	2018-03-21 09:48:39.196+08	e3742e72-d9c4-44b2-86aa-e90a5fa8255a	2	t	f
360	length	裂缝值	Output	\N			3	\N	\N	mm		2017-11-17 09:35:22.349+08	2018-11-26 14:09:27.504+08	2580380e-6175-4c59-829a-f4f2c36d4af2	2	t	f
384	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 12:00:59.533+08	2018-06-12 13:32:48.948+08	3dad677f-3582-41e5-a77c-ea629f6974fe	2	t	f
247	angleY	Y轴角度	Output	\N			2	180	-180	°		2017-09-19 20:44:21.037+08	2017-12-21 15:08:34.411+08	e87c4f0a-877a-4865-98c6-bca08f38164b	2	t	f
253	angley	Y轴角度	Output	\N			4			°		2017-09-22 17:34:24.779+08	2018-03-29 10:14:11.422+08	9e159552-fb77-4196-aea1-d7e9f88fcbbc	2	t	f
382	temperature	温度	Output	\N			2			℃		2017-11-29 11:56:45.753+08	2018-06-12 13:32:38.987+08	4bf64044-476d-4d5a-933e-5a493f1ee2e4	2	f	f
1902	physicalvalue	荷载力	Output	\N			3	75	-75	KN	正值是张拉力，负值是承压力	2018-03-26 13:41:50.659+08	2018-03-26 13:42:00.282+08	c26fbe87-b6ec-4f0d-a907-e05fddec8f41	2	t	f
381	pressure	压强	Output	\N			4	50	0	Kpa		2017-11-29 11:55:07.037+08	2017-11-29 15:19:29.735+08	4bf64044-476d-4d5a-933e-5a493f1ee2e4	2	t	f
1088	physicalvalue	裂缝	Output	\N			3	200	0	mm		2018-01-08 08:30:39.703+08	2018-03-28 23:14:35.954+08	ab8b7681-8ef7-4101-9a8a-5bee37ee7510	2	t	f
389	pressure	米水柱	Output	\N			4	10	0	mH2O		2017-11-29 13:52:18.322+08	2017-11-29 15:32:08.236+08	8275461f-e7c3-4595-ae09-36a4288c65fd	2	t	f
1525	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:53:15.978+08	2018-03-23 15:44:03.62+08	1933583a-00cd-4d11-99f5-76e7dbeaa81c	2	t	f
849	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:36:59.05+08	2018-03-23 15:50:12.424+08	1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	2	t	f
847	physicalvalue	应力	Output	\N			4	0.8	0	MPa		2018-01-05 15:36:59.041+08	2018-03-23 15:50:24.256+08	1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	2	t	f
841	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:36:58.441+08	2018-03-23 15:51:06.871+08	24ea4e76-d09c-44d9-8d18-7c634e2b1b22	2	t	f
839	physicalvalue	应力	Output	\N			4	0.4	0	MPa		2018-01-05 15:36:58.429+08	2018-03-23 15:51:15.15+08	24ea4e76-d09c-44d9-8d18-7c634e2b1b22	2	t	f
857	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:36:59.856+08	2018-03-23 16:25:33.25+08	6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	2	t	f
855	physicalvalue	应力	Output	\N			4	1	0	MPa		2018-01-05 15:36:59.851+08	2018-03-23 16:25:41.573+08	6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	2	t	f
1911	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 13:54:07.834+08	2018-03-26 13:54:07.841+08	228d8257-dcf7-4493-a4d4-083712716318	2	t	f
1091	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:40.266+08	2018-03-28 23:13:37.892+08	2e57f353-4b30-441f-a69e-f9e7e639e6a7	2	t	f
1096	physicalvalue	应变	Output	\N			3	3000	0	με		2018-01-08 08:30:40.285+08	2018-03-28 23:13:43.19+08	2e57f353-4b30-441f-a69e-f9e7e639e6a7	2	t	f
388	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 13:47:41.051+08	2018-06-12 13:33:04.572+08	06beef64-e140-4b7c-865d-64d043fcecc1	2	t	f
390	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 13:53:04.096+08	2018-06-12 13:33:13.756+08	8275461f-e7c3-4595-ae09-36a4288c65fd	2	t	f
1360	phy2	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-01-11 09:32:31.33+08	2018-01-11 09:32:31.335+08	67806ef3-539e-4cfc-932c-2b9fd5d49329	2	t	f
1090	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:40.261+08	2018-01-08 08:30:40.261+08	2e57f353-4b30-441f-a69e-f9e7e639e6a7	2	t	f
1676	level	沉降	Output	\N			3	\N	\N	mm		2018-02-07 09:50:28.766+08	2018-02-07 09:51:26.977+08	511b86b5-3773-45aa-b518-9b29071357e1	2	t	f
846	am	幅值	Output	\N			3			mv		2018-01-05 15:36:58.466+08	2018-03-02 10:56:33.489+08	24ea4e76-d09c-44d9-8d18-7c634e2b1b22	2	t	f
854	am	幅值	Output	\N			3			mv		2018-01-05 15:36:59.071+08	2018-03-02 10:58:39.041+08	1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	2	t	f
862	am	幅值	Output	\N			3			mv		2018-01-05 15:36:59.869+08	2018-03-02 11:00:22.133+08	6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	2	t	f
856	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:36:59.854+08	2018-03-02 11:03:20.685+08	6bcbbc0d-ed3f-43f1-b6da-98c0ff2bed39	2	t	f
848	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:36:59.046+08	2018-03-02 11:03:41.012+08	1d70f5ea-f754-4ee5-98e8-98bdaa7694e2	2	t	f
840	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:36:58.435+08	2018-03-02 11:04:08.426+08	24ea4e76-d09c-44d9-8d18-7c634e2b1b22	2	t	f
1703	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 11:21:12.398+08	2018-03-02 11:21:12.405+08	f331ae21-9607-401d-b8c4-9d17e40eba9a	2	t	f
1707	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:21:17.836+08	2018-03-02 14:21:17.843+08	1933583a-00cd-4d11-99f5-76e7dbeaa81c	2	t	f
1524	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:53:15.974+08	2018-03-02 14:21:26.18+08	1933583a-00cd-4d11-99f5-76e7dbeaa81c	2	t	f
1708	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:22:43.68+08	2018-03-02 14:22:43.687+08	069cdfbe-2463-40a3-a677-fa3564d06956	2	t	f
1709	am	幅值	Output	\N	\N	\N	3	\N		mv		2018-03-02 14:23:47.502+08	2018-03-02 14:23:47.51+08	fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	2	t	f
1710	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:37:54.847+08	2018-03-02 14:37:54.853+08	bc03541b-fb13-44ff-8cc4-9419e81554f3	2	t	f
1711	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:39:19.705+08	2018-03-02 14:39:19.712+08	b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	2	t	f
1712	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:49:12.466+08	2018-03-02 14:49:12.473+08	3d52b0e5-39ac-4e19-99b4-7bd96b15888a	2	t	f
1713	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:51:18.237+08	2018-03-02 14:51:18.244+08	028d4dfc-6b2c-40e4-9960-97c813408030	2	t	f
1714	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:55:36.337+08	2018-03-02 14:55:36.341+08	2db014d8-3273-467f-b938-8e6b9c22031e	2	t	f
1715	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 14:58:33.877+08	2018-03-02 14:58:33.884+08	c631534f-fef5-4db4-b5c2-e7cb081db305	2	t	f
1716	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:01:17.215+08	2018-03-02 15:01:17.221+08	d36bb0ee-6c5c-4778-bc5b-5e03db483152	2	t	f
1717	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:02:36.351+08	2018-03-02 15:02:36.355+08	10deb250-d676-4883-bfb1-2f557ec84677	2	t	f
1718	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:18:47.684+08	2018-03-02 15:18:47.691+08	1a664a1a-b5f1-4e75-916f-21bc94749d0e	2	t	f
1719	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:21:02.49+08	2018-03-02 15:21:02.495+08	6fbdae8b-7c5b-4125-8df3-4d9bef10997a	2	t	f
1720	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:22:17.049+08	2018-03-02 15:22:17.055+08	4e508627-863b-46fa-9454-a074ef2fbe8a	2	t	f
1721	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 15:24:35.947+08	2018-03-02 15:24:35.955+08	f564da79-91f3-4eff-8919-3501b7fb8046	2	t	f
1722	phy	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-03-05 10:21:39.816+08	2018-03-05 10:21:39.824+08	405db392-c820-4892-b209-c01d5f2d0724	2	t	f
1724	phy	雨量	Output	\N	\N	\N	3	\N	\N	mm		2018-03-05 10:53:10.856+08	2018-03-05 10:53:10.864+08	9943507b-e6a7-4ed0-a44a-d71689542076	2	t	f
1725	phy	风向	Output	\N	\N	\N	2	360	0	°		2018-03-05 11:00:26.08+08	2018-03-05 11:00:26.085+08	cfd05991-7dcc-45cc-a7c3-afeef665f4c8	2	t	f
1726	x	X位置	Output	\N	\N	\N	4	\N	\N	mm		2018-03-05 13:35:21.232+08	2018-03-05 13:35:21.24+08	d05b0093-f276-418f-90d3-8e0bfe3c36ef	2	t	f
1727	y	Y位置	Output	\N	\N	\N	4	\N	\N	mm		2018-03-05 13:35:48.467+08	2018-03-05 13:35:48.473+08	d05b0093-f276-418f-90d3-8e0bfe3c36ef	2	t	f
385	pressure	压强	Output	\N			4	10	0	Kpa		2017-11-29 13:40:33.529+08	2017-11-29 13:41:31.375+08	7224902a-6cd1-4877-a92f-d8cb544d36ce	2	t	f
2347	concentration	PM2.5浓度	Output	\N			0	\N	\N	ug/m³		2018-06-20 11:04:02.549+08	2018-06-20 11:13:22.425+08	e607b37a-17fe-4e85-9316-7eed2a219c25	2	t	f
387	pressure	压强	Output	\N			2	0	-100	Kpa		2017-11-29 13:47:20.226+08	2017-11-29 15:05:05.273+08	06beef64-e140-4b7c-865d-64d043fcecc1	2	t	f
1908	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 13:50:50.993+08	2018-03-26 13:50:51.003+08	e3bf8273-2a58-438d-b214-0fd258644ef8	2	t	f
1916	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 13:55:20.169+08	2018-03-26 13:55:20.174+08	c0ea2d7f-7778-47aa-af49-0119a729c741	2	t	f
871	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:48:51.366+08	2018-03-23 15:49:37.533+08	028ff831-cfab-43f0-a757-fe8933b46002	2	t	f
1925	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:05:45.819+08	2018-03-26 14:05:45.845+08	b72802e5-4982-4ba1-bd1b-15ba05d7d832	2	t	f
875	physicalvalue	应力	Output	\N			4	2	0	MPa		2018-01-05 15:48:51.381+08	2018-03-23 15:49:46.714+08	028ff831-cfab-43f0-a757-fe8933b46002	2	t	f
1832	humidity	湿度	Output	\N			2	\N	\N	%RH		2018-03-20 17:30:18.265+08	2018-03-22 10:27:05.44+08	fca1794e-e349-42fb-aef1-59f5eb4c3efd	2	t	f
1098	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:40.843+08	2018-01-08 08:30:40.843+08	c20df626-7eb9-47e5-8d36-88233fff0015	2	t	f
1930	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:07:32.876+08	2018-03-26 14:07:32.884+08	08b32693-e4b0-44db-9d79-e45dff49062a	2	t	f
832	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 15:33:22.345+08	2018-03-23 15:51:42.345+08	fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	2	t	f
1361	phy3	大气压力	Output	\N	\N	\N	2	1100	0	hPa		2018-01-11 09:33:20.088+08	2018-01-11 09:33:20.094+08	67806ef3-539e-4cfc-932c-2b9fd5d49329	2	t	f
1362	phy1	温度	Output	\N	\N	\N	2	80	-20	℃		2018-01-11 09:36:08.519+08	2018-01-11 09:36:08.531+08	17077adc-cfaa-428d-a6e5-346aa75678d9	2	t	f
1443	23	w	Output	\N	wr	\N	\N	\N	\N	\N		2018-01-22 17:20:14.783+08	2018-01-22 17:20:14.794+08	aca808a3-91a5-43d4-9aa2-171a388266a1	4	t	f
2295	physicalvalue	压力	Output	\N			3	6	0	Mpa		2018-05-28 10:50:00.213+08	2018-05-28 14:00:29.278+08	d314e16c-4cc2-47bc-92b5-af0639bdc7a8	2	t	f
1931	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:09:07.894+08	2018-03-26 14:09:07.901+08	aca7e15e-5b9f-4595-8640-9e7c920ef810	2	t	f
738	angley	Y轴角度	Output	\N			3	10	-10	°		2018-01-05 13:56:07.337+08	2018-03-29 15:13:00.282+08	2766d297-6127-449f-b73f-089b38e01267	2	t	f
1934	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:12:24.77+08	2018-03-26 14:12:24.781+08	8bc60164-fa52-4d68-a3b0-2c63af3113c0	2	t	f
1224	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 15:10:26.54+08	2018-01-08 15:10:26.54+08	7a1da717-ec87-450e-9707-47f782954311	2	t	f
1935	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:12:42.065+08	2018-03-26 14:12:42.073+08	8bc60164-fa52-4d68-a3b0-2c63af3113c0	2	t	f
1448	temp	温度	Output	\N	\N	\N	1	100	-40	℃		2018-01-23 14:02:27.115+08	2018-01-23 14:02:27.115+08	558e2b4d-a2dc-443a-98e5-142e99791b74	2	t	f
1937	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:15:44.15+08	2018-03-26 14:15:44.159+08	750c60f8-168e-4bca-acf5-df2d502915f5	2	t	f
1234	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 15:14:58.28+08	2018-01-08 15:14:58.28+08	9a6a651f-0042-4ae6-af31-20d976cf4566	2	t	f
1942	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-03-26 14:17:26.145+08	2018-03-26 14:17:26.15+08	b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	2	t	f
1449	value	湿度	Output	\N	\N	\N	1	100	0	%RH		2018-01-23 14:02:27.12+08	2018-01-23 14:02:27.12+08	558e2b4d-a2dc-443a-98e5-142e99791b74	2	t	f
835	physicalvalue	应力	Output	\N			4	0.2	0	MPa		2018-01-05 15:33:22.358+08	2018-03-23 15:51:46.879+08	fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	2	t	f
1943	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:17:28.624+08	2018-03-26 14:17:28.63+08	32b8c637-51b5-405c-920d-f7ae0adefafd	2	t	f
1099	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:40.847+08	2018-03-28 23:12:48.374+08	c20df626-7eb9-47e5-8d36-88233fff0015	2	t	f
1104	physicalvalue	应变	Output	\N			3	3000	0	με		2018-01-08 08:30:40.867+08	2018-03-28 23:12:53.91+08	c20df626-7eb9-47e5-8d36-88233fff0015	2	t	f
877	am	幅值	Output	\N			3			mv		2018-01-05 15:48:51.388+08	2018-03-02 11:01:43.538+08	028ff831-cfab-43f0-a757-fe8933b46002	2	t	f
878	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:48:51.391+08	2018-03-02 11:02:24.281+08	028ff831-cfab-43f0-a757-fe8933b46002	2	t	f
831	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 15:33:22.339+08	2018-03-02 11:04:27.228+08	fbdf40ff-88c5-4ca5-a2cf-e0fcbcb9d45d	2	t	f
2103	anglex	X轴角度	Output	\N			2	\N	\N	°		2018-03-29 13:37:27.985+08	2018-03-29 13:38:29.151+08	1ed1816a-f590-4eba-8702-c334ec7a1e1d	2	t	f
1230	physicalvalue	应力	Output	\N			3	210	0	MPa		2018-01-08 15:14:58.265+08	2018-03-29 18:26:13.837+08	9a6a651f-0042-4ae6-af31-20d976cf4566	2	t	f
1226	physicalvalue	应变	Output	\N			3	3000	-3000	με		2018-01-08 15:10:26.55+08	2018-03-29 18:26:36.686+08	7a1da717-ec87-450e-9707-47f782954311	2	t	f
1590	temperature	温度	Output	\N			1	60	-40	℃		2018-01-23 17:19:51.373+08	2018-03-30 08:15:07.666+08	9f562e54-5c03-4b59-89cf-d12739821be5	2	t	f
2174	value	应变	Output	\N			1	3000	-3000	με		2018-04-11 09:27:08.927+08	2018-04-26 00:01:16.139+08	ade7450e-eb35-4424-8b11-83f4c466bef7	2	t	f
2271	lane	车道	Output	\N	\N	\N	\N	128	1	\N		2018-05-09 16:56:53.81+08	2018-05-09 16:56:53.815+08	05c849f0-63f3-4d19-97bf-f22e655c0852	1	t	f
2267	anglex	X轴角度	Output	\N			3	30	-30	°		2018-05-09 10:42:20.045+08	2018-05-10 09:09:20.339+08	289b0a55-03e7-4154-bdd7-b7bbb15a6d28	2	t	f
2268	angley	Y轴角度	Output	\N			3	30	-30	°		2018-05-09 10:42:20.05+08	2018-05-10 09:09:28.931+08	289b0a55-03e7-4154-bdd7-b7bbb15a6d28	2	t	f
2293	temperature	温度	Output	\N			3	40	0	℃		2018-05-28 10:50:00.188+08	2018-05-28 10:50:00.188+08	d314e16c-4cc2-47bc-92b5-af0639bdc7a8	2	t	f
2294	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-05-28 10:50:00.204+08	2018-05-28 10:50:00.204+08	d314e16c-4cc2-47bc-92b5-af0639bdc7a8	2	t	f
2299	123456	1	Variable	\N	\N	1	\N	1	1	\N		2018-05-28 17:35:04.157+08	2018-05-28 17:35:04.163+08	2205fdef-b595-4f0d-8268-e9d2370638aa	1	t	f
386	temperature	温度	Output	\N			2			℃		2017-11-29 13:41:19.887+08	2018-06-12 13:32:56.941+08	7224902a-6cd1-4877-a92f-d8cb544d36ce	2	t	f
2342	concentration	SO2浓度	Output	\N			0	\N	\N	ppb		2018-06-20 10:35:52.514+08	2018-06-20 10:45:05.702+08	d8aa757b-681c-4522-a76f-b2484a854563	2	t	f
2382	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-07-04 12:31:15.238+08	2018-07-04 12:31:15.238+08	da6a8c8f-0a98-4650-8b12-650a3e4e5914	2	t	f
2384	licence	车牌号	Output	\N			0					2018-07-04 16:56:33.702+08	2018-07-04 17:00:50.623+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2387	overload	总重超限	Output	\N			0					2018-07-04 17:00:27.104+08	2018-07-24 10:33:31.376+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
391	pressure	压强	Output	\N			4	500	0	Kpa		2017-11-29 13:53:47.195+08	2017-11-29 13:53:53.046+08	71f3c15e-91d9-4044-ba95-66957d312dc8	2	t	f
392	temperature	温度	Output	\N			2	80	-20	℃		2017-11-29 13:54:23.393+08	2019-01-02 10:13:55.203+08	71f3c15e-91d9-4044-ba95-66957d312dc8	2	t	f
393	pressure	压强	Output	\N	\N	\N	4	200	0	Kpa		2017-11-29 13:56:03.772+08	2017-11-29 13:56:03.785+08	857d5408-8cb5-4084-a7a3-ab0f9d3dd1da	2	t	f
395	pressure	压强	Output	\N	\N	\N	4	1000	0	Kpa		2017-11-29 13:57:17.994+08	2017-11-29 13:57:18.018+08	29f596e9-1ed7-49db-b932-0d436bef0d59	2	t	f
399	pressure	压强	Output	\N	\N	\N	4	100	0	Kpa		2017-11-29 15:29:51.633+08	2017-11-29 15:29:51.648+08	90706e3b-13d8-4862-a1d4-3ace7d4a7b6e	2	t	f
145	pressure	压强	Output	\N			1	2000	0	Kpa		2017-09-06 18:47:18.58+08	2017-11-29 15:33:25.268+08	abcd5e24-44d0-47ba-95db-9bdfab8d2d92	2	t	f
401	pressure	压强	Output	\N	\N	\N	4	3.5	0	mH2O		2017-11-29 15:37:49.459+08	2017-11-29 15:37:49.465+08	c49b63f0-5fc2-41bb-ad27-231510dde4c0	2	t	f
1909	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 13:51:08.111+08	2018-03-26 13:51:08.116+08	e3bf8273-2a58-438d-b214-0fd258644ef8	2	t	f
405	pressure	压强	Output	\N	\N	\N	4	5	0	mH2O		2017-11-29 15:43:55.882+08	2017-11-29 15:43:55.893+08	e6cd110e-7720-4d98-bf4b-655e7d545791	2	t	f
407	pressure	压强	Output	\N	\N	\N	4	50	0	mH2O		2017-11-29 15:48:06.147+08	2017-11-29 15:48:06.153+08	dd89b226-58f4-4509-9eb9-cf119be26a80	2	t	f
409	pressure	压强	Output	\N	\N	\N	4	20	0	mH2O		2017-11-29 15:52:49.769+08	2017-11-29 15:52:49.778+08	0c5f1ed6-626c-4903-ba56-b99bb676bfc1	2	t	f
408	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:48:35.19+08	2018-06-12 13:31:52.997+08	dd89b226-58f4-4509-9eb9-cf119be26a80	2	t	f
411	pressure	压强	Output	\N	\N	\N	4	100	0	mH2O		2017-11-29 15:57:36.544+08	2017-11-29 15:57:36.551+08	f124fe60-87de-429a-ae17-249d22ce2005	2	t	f
406	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:44:17.909+08	2018-06-12 13:32:02.991+08	e6cd110e-7720-4d98-bf4b-655e7d545791	2	t	f
413	liquidLevel	沉降	Output	\N			2	5	0	m		2017-11-30 13:56:50.031+08	2017-12-20 11:55:51.69+08	06a3c28a-b1d4-41cc-b291-aa2cd6682d60	2	t	f
414	Ouput	\N	Output	\N	\N	\N	\N	\N	\N	\N		2017-11-30 15:01:46.318+08	2017-11-30 15:01:46.318+08	d864e964-72fe-43e7-96a5-8e0a2079b731	5	t	f
417	length	测量距离	Variable	\N			4	30	0.05	m		2017-11-30 15:25:27.911+08	2017-11-30 15:26:01.931+08	689910ff-378c-4467-b95b-22907c3076e5	2	t	f
416	length	测量距离	Output	\N			4	10	0.05	m		2017-11-30 15:18:38.819+08	2017-11-30 15:26:12.226+08	2de4150f-19f7-4fff-9cb5-9d97226ded24	2	t	f
415	length	测量距离	Output	\N			4	3	0.05	m		2017-11-30 15:14:59.463+08	2017-11-30 15:26:25.32+08	acb1f3e2-048a-4eb3-a01f-36e1f1968b4a	2	t	f
418	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2017-12-01 09:59:04.601+08	2017-12-01 09:59:04.601+08	8c4a1dc0-f42b-4a5b-9267-e447615a1821	2	t	f
1106	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:41.377+08	2018-01-08 08:30:41.377+08	cac190e9-a228-4032-afbc-2f3bf990cc82	2	t	f
412	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:58:06.551+08	2018-06-12 10:23:31.386+08	f124fe60-87de-429a-ae17-249d22ce2005	2	t	f
402	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:38:34.873+08	2018-06-12 13:32:11.752+08	c49b63f0-5fc2-41bb-ad27-231510dde4c0	2	t	f
433	temp	温度	Output	\N			2	80	-20	℃		2017-12-04 12:58:05.362+08	2017-12-20 15:13:30.196+08	176efcfa-0544-41c5-8aef-5821cb43a0e3	2	t	f
434	offsetValue	Y方向角度	Output	\N			2	30	-30	°		2017-12-04 12:59:11.697+08	2017-12-20 15:13:56.216+08	176efcfa-0544-41c5-8aef-5821cb43a0e3	2	t	f
435	value	X方向角度	Output	\N			2	30	-30	°		2017-12-04 13:35:33.894+08	2017-12-20 15:14:02.88+08	176efcfa-0544-41c5-8aef-5821cb43a0e3	2	t	f
1107	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:41.381+08	2018-03-28 23:11:45.378+08	cac190e9-a228-4032-afbc-2f3bf990cc82	2	t	f
440	rainFall	雨量	Output	\N			2	4	0	mm/min		2017-12-05 10:56:13.771+08	2017-12-05 10:57:40.043+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
442	soilTemp	土壤温度	Output	\N	\N	\N	2	100	-50	℃		2017-12-05 10:58:25.547+08	2017-12-05 10:58:25.557+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
441	temp	大气温度	Output	\N	\N	\N	2	100	-50	℃		2017-12-05 10:57:15.813+08	2017-12-05 10:57:15.82+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
439	speedWind	风速	Output	\N			2	70	0	m/s		2017-12-05 10:54:45.806+08	2017-12-05 10:57:23.92+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
443	pressure	数字气压	Output	\N	\N	\N	2	1100	10	hpa		2017-12-05 10:59:23.506+08	2017-12-05 10:59:23.52+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
444	radiation	简易总辐射	Output	\N	\N	\N	2	1500	0	w/m2		2017-12-05 11:00:18.534+08	2017-12-05 11:00:18.543+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
410	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:53:07.126+08	2018-06-12 10:23:41.398+08	0c5f1ed6-626c-4903-ba56-b99bb676bfc1	2	t	f
400	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 15:30:18.754+08	2018-06-12 13:32:26.828+08	90706e3b-13d8-4862-a1d4-3ace7d4a7b6e	2	t	f
394	temperature	温度	Output	\N			2	\N	\N	℃		2017-11-29 13:56:23.956+08	2018-06-12 13:33:38.566+08	857d5408-8cb5-4084-a7a3-ab0f9d3dd1da	2	t	f
396	temperature	温度	Output	\N			1	\N	\N	℃		2017-11-29 13:57:58.373+08	2018-06-12 13:33:51.622+08	29f596e9-1ed7-49db-b932-0d436bef0d59	2	t	f
431	concentration	气体浓度	Output	\N			2	1000	0	ug/m3		2017-12-01 15:00:04.231+08	2017-12-20 13:44:14.763+08	d28e689e-1bcd-4f9e-81ac-a0bfc56667e3	2	t	f
437	strain	Y方向位移	Output	\N			2	400	-400	mm		2017-12-04 14:33:34.384+08	2017-12-05 13:25:19.567+08	50cd4d61-29c8-4d36-b143-85fcda3f99e5	2	t	f
438	displacement	X方向位移	Output	\N			2	300	-300	mm		2017-12-04 14:33:34.389+08	2017-12-05 13:25:33.23+08	50cd4d61-29c8-4d36-b143-85fcda3f99e5	2	t	f
432	concentration	温度	Output	\N			2	60	-20	℃		2017-12-01 15:05:58.356+08	2017-12-20 13:54:42.507+08	95a5b30a-5159-471a-810a-14e31c3a868c	2	t	f
613	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-01-04 12:16:22.833+08	2018-01-04 12:16:22.844+08	58ccd139-9573-44ce-84f3-b043e0841c7a	2	t	f
445	direction	风向	Output	\N	\N	\N	2	360	0	°		2017-12-05 11:00:54.196+08	2017-12-05 11:00:54.202+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
459	pressure	压强	Output	\N	\N	\N	2	\N	\N	Mpa		2017-12-06 12:00:43.631+08	2017-12-06 12:00:43.631+08	8929f60c-f9d6-4a0f-a19b-0a57b7025b43	2	t	f
1929	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:07:14.408+08	2018-03-26 14:07:14.415+08	b0488049-bfc9-40ee-8dfa-79f9233638ec	2	t	f
1910	physicalvalue	荷载力	Output	\N			4	136	-136	KN	正值是张拉力，负值是承压力	2018-03-26 13:51:40.189+08	2018-03-26 13:52:10.276+08	e3bf8273-2a58-438d-b214-0fd258644ef8	2	t	f
1913	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 13:54:30.774+08	2018-03-26 13:54:30.781+08	ce140baa-bcd7-4756-9d06-9591535eed2a	2	t	f
1915	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 13:54:49.112+08	2018-03-26 13:54:49.118+08	ce140baa-bcd7-4756-9d06-9591535eed2a	2	t	f
1921	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:03:03.081+08	2018-03-26 14:03:03.088+08	aca7e15e-5b9f-4595-8640-9e7c920ef810	2	t	f
1922	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:03:21.913+08	2018-03-26 14:03:21.922+08	aca7e15e-5b9f-4595-8640-9e7c920ef810	2	t	f
1927	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:06:40.277+08	2018-03-26 14:06:40.287+08	08b32693-e4b0-44db-9d79-e45dff49062a	2	t	f
2296	physicalvalue	角度	Output	\N			3	90	-90	°		2018-05-28 11:45:20.164+08	2018-05-28 15:48:06.806+08	ff3a290c-3a62-49a8-8db9-f4083f855397	2	t	f
1114	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 08:30:41.943+08	2018-01-08 08:30:41.943+08	09032111-4073-461a-82b6-1c193ef88077	2	t	f
2480	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2018-07-25 09:53:02.07+08	2018-07-25 09:53:02.07+08	0d993c54-d0eb-406e-beb3-422b28dd8bd2	2	t	f
2344	concentration	O3浓度	Output	\N			0	\N	\N	ppb		2018-06-20 10:35:54.639+08	2018-06-21 11:04:12.09+08	e98557d0-139a-4938-acfb-9870abe496bc	2	t	f
1227	accelertation	加速度	Output	\N			2	4000	0	mg		2018-01-08 15:12:21.613+08	2018-01-08 16:23:41.968+08	dde034ce-aa0b-4c0d-bfdb-bcbb2f231808	2	t	f
1240	accelertation	加速度	Output	\N			2	70000	0	mg		2018-01-08 16:22:24.858+08	2018-01-08 16:24:14.915+08	9c370a1f-67ec-4686-a7f6-da10dc99c770	2	t	f
1241	accelertation	加速度	Output	\N			2	250000	0	mg		2018-01-08 16:22:25.022+08	2018-01-08 16:24:44.935+08	ab8f77d8-d732-48a5-805a-07d6cde1067d	2	t	f
1245	lvdt	位移	Output	\N			2	54	0	mm		2018-01-08 16:27:58.787+08	2018-01-08 16:29:11.275+08	ceb32ec1-625c-450d-b1c8-54be51bd97f6	2	t	f
1244	lvdt	位移	Output	\N			2	135	0	mm		2018-01-08 16:27:58.099+08	2018-01-08 16:29:50.271+08	68998ba3-d344-4ae4-9ada-bebb5bba6ec3	2	t	f
812	xAccelertation	X轴加速度	Output	\N			2	5000	0	mg		2018-01-05 15:16:02.959+08	2018-01-08 16:50:09.759+08	12ffe39f-e941-4496-a0af-ae5d4c1e0d29	2	t	f
1258	windSpeed	风速	Output	\N			1	50	0	m/s		2018-01-08 16:54:48.918+08	2018-01-08 17:00:59.766+08	a5889f87-05f4-4786-9e66-b322f564f5f9	2	t	f
1257	windSpeed	风速	Output	\N			1	75	0	m/s		2018-01-08 16:54:47.937+08	2018-01-08 17:01:30.252+08	2e5b58fb-acb8-4ec6-a177-95a7a1c20745	2	t	f
1932	physicalvalue	应力	Output	\N			4	0.2	0	MPa		2018-03-26 14:09:53.015+08	2018-03-26 14:11:12.795+08	aca7e15e-5b9f-4595-8640-9e7c920ef810	2	t	f
1754	temperature	温度	Output	\N			3	120	-30	℃		2018-03-08 20:03:31.704+08	2018-03-23 16:09:36.587+08	6d7fdfc9-5735-4b35-85f6-238e34c241a0	2	t	f
1938	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:16:04.561+08	2018-03-26 14:16:04.565+08	d8193d74-feb5-4872-8e42-95a335cd383f	2	t	f
1940	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:16:39.947+08	2018-03-26 14:16:39.953+08	750c60f8-168e-4bca-acf5-df2d502915f5	2	t	f
1941	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:17:03.073+08	2018-03-26 14:17:03.08+08	b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	2	t	f
1944	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:17:40.137+08	2018-03-26 14:17:40.15+08	b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	2	t	f
1120	physicalvalue	应变	Output	\N			3	3000	0	με		2018-01-08 08:30:41.967+08	2018-03-28 23:10:39.446+08	09032111-4073-461a-82b6-1c193ef88077	2	t	f
1115	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:41.947+08	2018-03-28 23:10:49.123+08	09032111-4073-461a-82b6-1c193ef88077	2	t	f
1112	physicalvalue	应力	Output	\N			3	3000	-3000	kg/cm2		2018-01-08 08:30:41.401+08	2018-03-28 23:11:55.844+08	cac190e9-a228-4032-afbc-2f3bf990cc82	2	t	f
2175	rainfall	雨量	Output	\N			1	\N	\N	mm/h		2018-04-11 16:24:01.264+08	2018-04-11 16:24:01.264+08	9f8406e9-e9ca-4ca0-ae96-258bb6917390	2	t	f
2269	speed	风速	Output	\N	\N	\N	2	60	0	m/s		2018-05-09 13:55:22.694+08	2018-05-09 13:55:22.694+08	d7460b80-d3f3-48f1-9287-d7220b1b7f3d	2	t	f
2270	direction	风向	Output	\N	\N	\N	2	359	0	°		2018-05-09 13:55:22.699+08	2018-05-09 13:55:22.699+08	d7460b80-d3f3-48f1-9287-d7220b1b7f3d	2	t	f
2481	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-25 09:53:15.545+08	2018-07-25 09:53:15.545+08	0d993c54-d0eb-406e-beb3-422b28dd8bd2	2	t	f
2501	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-07-31 14:52:13.948+08	2018-07-31 14:52:13.948+08	4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	2	t	f
2507	physicalvalue	微应变	Output	\N	\N	\N	3	3000	-3000	με		2018-07-31 14:57:30.043+08	2018-07-31 14:57:30.043+08	fbeb2848-9908-4883-878a-10608a621168	2	t	f
2509	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-31 15:10:02.322+08	2018-07-31 15:10:02.322+08	b61317eb-c793-4b2f-b680-2d15a061ec91	2	t	f
2510	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-31 15:10:23.365+08	2018-07-31 15:10:23.365+08	b61317eb-c793-4b2f-b680-2d15a061ec91	2	t	f
2383	crossRoad	车道号	Output	\N			0			\N		2018-07-04 16:56:16.184+08	2018-07-24 10:33:57.464+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2514	frequency	频率	Output	\N	\N	\N	3	\N		HZ		2018-07-31 15:14:45.132+08	2018-07-31 15:14:45.132+08	d702af0d-ac2f-48c9-bef4-31f6a5659b5a	2	t	f
2515	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-31 15:15:04.767+08	2018-07-31 15:15:04.767+08	d702af0d-ac2f-48c9-bef4-31f6a5659b5a	2	t	f
2522	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-31 15:20:32.787+08	2018-07-31 15:20:32.787+08	73e248c9-5515-4482-ac0a-af10af977c95	2	t	f
2542	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-08-02 09:53:52.201+08	2018-08-02 09:53:52.201+08	d926943e-d400-4c4c-83c8-2c3a6fd62c1c	2	t	f
2546	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:33:18.539+08	2018-08-02 10:33:18.539+08	04709fe5-6ce9-4415-99f2-f349e03992fe	2	t	f
2547	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:33:18.549+08	2018-08-02 10:33:18.549+08	04709fe5-6ce9-4415-99f2-f349e03992fe	2	t	f
2548	displacement	支架水平位移	Output	\N	\N	\N	2	\N	\N	mm		2018-08-02 10:33:18.558+08	2018-08-02 10:33:18.558+08	04709fe5-6ce9-4415-99f2-f349e03992fe	2	t	f
2567	physicalvalue	角度	Output	\N			2	\N	\N	°		2018-08-03 10:29:52.694+08	2018-08-03 10:35:04.669+08	c5d291cd-bb26-4192-9454-e686cb8c1f9a	2	t	f
2591	physicalvalue	温度	Output	\N			2	\N	\N	℃		2018-08-10 09:33:09.093+08	2018-08-10 09:35:13.94+08	f9df0040-a2b5-442e-9fce-4787a7c308c9	2	t	f
2575	pressure	液位	Output	\N			3	1000	0	mm		2018-08-07 16:40:45.492+08	2018-08-10 14:03:23.643+08	29e946c4-e67d-4d58-aba2-a16897f4da42	2	t	f
2611	flow_hour	瞬时流量(时)	Output	\N			4	\N	\N	m³/h		2018-08-13 11:04:35.324+08	2018-08-13 14:11:11.553+08	249bf211-a7fc-4649-977a-1ba27e2fc683	2	t	f
2617	packtemperature2	探头温度B	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 16:20:16.765+08	2018-08-14 16:20:16.765+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	2	t	f
446	soilHumidity	土壤湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-05 11:02:14.097+08	2017-12-05 11:02:14.105+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
450	co2	二氧化碳	Output	\N	\N	\N	2	2000	0	PPM		2017-12-05 11:06:13.809+08	2017-12-05 11:06:13.821+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
1912	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 13:54:12.059+08	2018-03-26 13:54:12.065+08	ce140baa-bcd7-4756-9d06-9591535eed2a	2	t	f
1262	temp	温度	Output	\N			2	125	-40	℃		2018-01-08 17:03:46.478+08	2018-01-08 17:05:11.868+08	546dee6f-5d8b-4572-931b-fa64627c058a	2	t	f
1129	CPU-oid	CPU-oid	Constant	\N	\N	.0.1.2.3.4.5.6.0	\N	\N	\N	\N		2018-01-08 09:46:41.15+08	2018-01-08 09:46:41.15+08	d30c1deb-b88d-4111-a4df-6810595e0a63	5	t	f
1130	尝试次数	尝试次数	Variable	\N	\N	3	\N	5	2			2018-01-08 09:46:41.153+08	2018-01-08 09:46:41.153+08	d30c1deb-b88d-4111-a4df-6810595e0a63	1	t	f
1131	内存oid	内存oid	Variable	\N	\N	0.2.3.4.5.0	\N	\N	\N			2018-01-08 09:46:41.163+08	2018-01-08 09:46:41.163+08	31a6e729-2f1b-4d8a-8f13-399b327f0d70	5	t	f
1142	elongationIndicator	偏移量	Output	\N			4	5	0	mm		2018-01-08 10:24:02.584+08	2018-01-08 10:24:58.771+08	7b98954d-1ba2-4349-9f4b-26d35ab67107	2	t	f
1141	elongationIndicator	偏移量	Output	\N			4	40	0	mm		2018-01-08 10:24:02.011+08	2018-01-08 10:26:04.754+08	51734448-f0f6-4268-8191-cd093e9e6e60	2	t	f
1140	elongationIndicator	偏移量	Output	\N			4	8	0	mm		2018-01-08 10:24:01.162+08	2018-01-08 10:26:43.401+08	e29ac2dd-147b-403e-a9a8-6737b7799100	2	t	f
1914	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 13:54:47.861+08	2018-03-26 13:54:47.866+08	228d8257-dcf7-4493-a4d4-083712716318	2	t	f
1145	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 10:43:07.575+08	2018-01-08 10:43:07.575+08	eb737450-437c-4c7c-9a72-f54364c468a8	2	t	f
1928	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:06:55.973+08	2018-03-26 14:06:55.989+08	b0488049-bfc9-40ee-8dfa-79f9233638ec	2	t	f
1918	temperature	温度	Output	\N			4	\N	\N	℃		2018-03-26 13:57:13.728+08	2018-03-26 16:44:17.77+08	1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad	2	t	f
1755	anglex	X方向角度	Output	\N			4	30	-30	°		2018-03-08 20:04:28.453+08	2018-03-23 16:09:16.534+08	6d7fdfc9-5735-4b35-85f6-238e34c241a0	2	t	f
1143	phy	载荷	Output	\N			3	250	-150	MPa	负值为压应力，正值为拉应力	2018-01-08 10:43:07.565+08	2018-03-12 09:39:58.711+08	eb737450-437c-4c7c-9a72-f54364c468a8	2	t	f
1919	humidity	湿度	Output	\N			2	\N	\N	RS%		2018-03-26 13:57:13.733+08	2018-03-26 16:44:29.006+08	1361a9fa-8c55-4a5f-a13c-2da8e4ca89ad	2	t	f
1242	lvdt	位移	Output	\N			2	600	0	mm		2018-01-08 16:27:56.748+08	2018-01-08 16:47:56.984+08	4d545e19-172c-4acb-9183-248abe86f986	2	t	f
1147	temperature	温度	Output	\N			2	80	-30	℃		2018-01-08 10:43:07.583+08	2018-03-12 09:55:07.743+08	eb737450-437c-4c7c-9a72-f54364c468a8	2	t	f
1247	phy	应变	Output	\N			2	2000	-2000	με		2018-01-08 16:40:09.757+08	2018-01-22 16:59:45.006+08	1377db1c-e2f6-4ac5-832d-53103233d957	2	t	f
2352	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2018-06-21 13:41:41.277+08	2018-06-21 13:41:41.295+08	0c4dd41a-453b-440b-a28b-26d7768832d5	2	t	f
1363	phy2	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-01-11 09:39:49.859+08	2018-01-11 09:39:49.875+08	17077adc-cfaa-428d-a6e5-346aa75678d9	2	t	f
1364	phy1	雨量	Output	\N	\N	\N	2	4	0.01	mm/min		2018-01-11 10:06:13.048+08	2018-01-11 10:06:13.058+08	af851f6e-99a5-40e6-b8f1-e3ae9cc7fca2	2	t	f
1444	wrewr	werwe	Output	\N	\N	\N	\N	111	11	11	111	2018-01-22 17:20:53.365+08	2018-01-22 17:20:53.404+08	aca808a3-91a5-43d4-9aa2-171a388266a1	1	t	f
1083	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:30:39.685+08	2018-03-28 23:14:42.078+08	ab8b7681-8ef7-4101-9a8a-5bee37ee7510	2	t	f
1583	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-23 15:06:34.942+08	2018-01-23 15:06:34.942+08	787be20b-1887-4708-a1db-c0d581a322eb	2	t	f
1831	temperature	温度	Output	\N			2	\N	\N	℃		2018-03-20 17:29:56.43+08	2018-03-22 10:26:59.22+08	fca1794e-e349-42fb-aef1-59f5eb4c3efd	2	t	f
1582	physicalvalue	应变	Output	\N			4	1500	-1500	με		2018-01-23 15:06:34.935+08	2018-03-23 15:39:22.114+08	787be20b-1887-4708-a1db-c0d581a322eb	2	t	f
1581	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-23 15:06:34.931+08	2018-03-23 15:39:29.721+08	787be20b-1887-4708-a1db-c0d581a322eb	2	t	f
1321	physicalvalue	湿度	Output	\N			2	100	0	%RH		2018-01-09 11:10:39.8+08	2018-03-29 11:39:37.83+08	926a081e-9ed3-4bab-a8d1-c556a8be9404	2	t	f
2106	length	能见度	Output	\N	\N	\N	4	\N	\N	m		2018-04-02 16:41:11.451+08	2018-04-02 16:41:11.457+08	c4424e56-9f35-4bdd-b7c1-66836e3ba1cb	2	t	f
2113	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-04-02 17:11:41.901+08	2018-04-02 17:11:41.912+08	c08bb21f-6cdb-46c1-a8df-3ea9d92279ba	2	t	f
2176	length	液位	Output	\N			3	300	0	mm		2018-04-12 11:22:38.595+08	2018-04-12 11:23:22.547+08	3c6dfe0c-5013-4f63-9222-721718b82b24	2	t	f
2272	lane	车道	Output	\N	\N	\N	\N	128	1	\N		2018-05-09 17:04:53.386+08	2018-05-09 17:04:53.401+08	7795f990-07c0-4953-aab6-8af73f1bf2d2	1	t	f
2298	physicalvalue	风速	Output	\N			2	\N	\N	m/s		2018-05-28 14:14:57.648+08	2018-05-28 14:16:40.359+08	1d256945-ce40-4216-ba9b-2071e6e1548e	2	t	f
2368	reverseflow	反向累计流量	Output	\N			4	\N	\N	m3		2018-06-28 16:30:04.991+08	2018-06-28 16:58:30.201+08	419116d4-4614-4d66-bc30-ce2394eed251	2	t	f
2345	concentration	温度	Output	\N			1	\N	\N	℃		2018-06-20 11:04:00.675+08	2018-06-20 11:08:00.106+08	3fe35a29-777b-4a79-a6fd-2e57e60caa11	2	t	f
2495	warning	提醒状态	Output	\N	\N	\N	\N	\N	\N			2018-07-28 17:16:20.014+08	2018-07-28 17:16:20.014+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2489	torquePercent	力矩百分比	Output	\N			2	100	0	%		2018-07-28 17:11:55.237+08	2018-07-31 10:23:09.772+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2423	radiation	光辐射	Output	\N			3	\N	\N	μM/m^2		2018-07-13 11:06:21.798+08	2018-07-13 15:15:32.801+08	ead31896-f035-4ed5-8732-526210a6bfa2	2	t	f
2482	rotationAngle	回转角度	Output	\N	\N	\N	2	360	-360	°		2018-07-28 17:07:01.921+08	2018-07-28 17:07:01.921+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2486	elevationAngle	仰角	Output	\N	\N	\N	2	90	-90	°		2018-07-28 17:09:55.728+08	2018-07-28 17:09:55.728+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2519	physicalvalue	应变	Output	\N	\N	\N	4	3000	-3000	με		2018-07-31 15:17:56.964+08	2018-07-31 15:17:56.964+08	b69bda25-731f-49db-b199-83207febe2ed	2	t	f
2504	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-07-31 14:54:36.02+08	2018-07-31 14:54:36.02+08	fbeb2848-9908-4883-878a-10608a621168	2	t	f
2520	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-31 15:19:53.792+08	2018-07-31 15:19:53.792+08	73e248c9-5515-4482-ac0a-af10af977c95	2	t	f
2528	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-07-31 17:10:08.217+08	2018-07-31 17:10:08.217+08	292bd1e7-c27c-4437-a899-3c61485b89e3	2	t	f
2543	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:31:54.58+08	2018-08-02 10:31:54.58+08	48082fb5-546a-4106-9c2c-674aec2640c1	2	t	f
2544	settling	模板沉降	Output	\N	\N	\N	2	\N	\N	mm		2018-08-02 10:31:54.59+08	2018-08-02 10:31:54.59+08	48082fb5-546a-4106-9c2c-674aec2640c1	2	t	f
2545	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:31:54.599+08	2018-08-02 10:31:54.599+08	48082fb5-546a-4106-9c2c-674aec2640c1	2	t	f
447	humidity	大气湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-05 11:03:12.506+08	2017-12-05 11:03:12.517+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
2110	airq_no2	二氧化氮	Output	\N			0			μg/m3		2018-04-02 16:51:42.744+08	2018-04-02 17:11:51.112+08	c12bb164-9c52-4a79-8210-b5c74534053a	5	t	f
463	pressure	电流	Output	\N			2	\N	\N	A	变频器电流	2017-12-06 16:10:58.461+08	2017-12-06 16:11:18.523+08	6b13c027-dfe8-4dd3-ae23-c5266b03d77b	2	t	f
461	emptyHigh	空高	Output	\N			3	20	0	m		2017-12-06 14:14:09.604+08	2017-12-21 11:28:19.403+08	49be5f93-ae43-4fc7-89f9-58581a1f495e	2	t	f
1366	T0	初始温度	Variable	\N		1	16	1000	-100	℃		2018-01-12 10:08:09.323+08	2018-01-12 10:08:09.323+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1367	formula	转换公式	Constant	\N	\N	ε=k*(fi^2-f0^2)+kt*(ti-to)	\N	\N	\N			2018-01-12 10:08:09.329+08	2018-01-12 10:08:09.329+08	349567b6-f674-4299-89df-0d64e448a6b3	5	t	f
1368	K	模量系数	Variable	\N		1	16	9999999999	-9999999999			2018-01-12 10:08:09.334+08	2018-01-12 10:08:09.334+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1369	Kt	温度补偿系数	Variable	\N		1	16	100000	-100000			2018-01-12 10:08:09.338+08	2018-01-12 10:08:09.338+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1370	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2018-01-12 10:08:09.342+08	2018-01-12 10:08:09.342+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1371	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-12 10:08:09.345+08	2018-01-12 10:08:09.345+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1372	force	应变	Output	\N			4	3000	-3000	με		2018-01-12 10:08:09.349+08	2018-01-12 10:08:09.349+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1373	F0	频率初值	Variable	\N		1	16	999999999	-100000	Hz		2018-01-12 10:08:09.352+08	2018-01-12 10:08:09.352+08	349567b6-f674-4299-89df-0d64e448a6b3	2	t	f
1445	234e23	23423	Variable	\N	\N	234	2	234	234	234	234	2018-01-22 17:23:29.959+08	2018-01-22 17:23:29.965+08	3d303bbc-0f1a-4105-b7a6-9db99aefb409	2	t	f
928	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 16:18:59.695+08	2018-01-05 16:18:59.695+08	ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea	2	t	f
927	temperature	温度	Output	\N			2			℃		2018-01-05 16:18:59.688+08	2018-01-05 16:35:46.009+08	ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea	2	t	f
1540	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 15:00:11.235+08	2018-03-02 15:01:22.623+08	d36bb0ee-6c5c-4778-bc5b-5e03db483152	2	t	f
1260	temp	温度	Output	\N			2	55	-5	℃		2018-01-08 17:03:45.956+08	2018-01-08 17:06:32.11+08	80b225c1-5a28-46fd-aa9c-81e77818c907	2	t	f
1541	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 15:00:11.239+08	2018-03-23 15:42:58.21+08	d36bb0ee-6c5c-4778-bc5b-5e03db483152	2	t	f
1917	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 13:55:46.686+08	2018-03-26 13:55:46.693+08	c0ea2d7f-7778-47aa-af49-0119a729c741	2	t	f
1923	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:05:03.049+08	2018-03-26 14:05:03.055+08	0f684ae0-ceb8-4c6a-95c4-e83bdd79059e	2	t	f
1924	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:05:24.007+08	2018-03-26 14:05:24.011+08	b72802e5-4982-4ba1-bd1b-15ba05d7d832	2	t	f
1946	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:18:10.143+08	2018-03-26 14:18:10.15+08	84fc8a27-019f-4640-bbf6-466627f7c6d6	2	t	f
1947	physicalvalue	应力	Output	\N	\N	\N	4	0.4	0	MPa		2018-03-26 14:18:12.853+08	2018-03-26 14:18:12.861+08	b70abc38-5a40-4c7c-8bc8-f238c0b3dc15	2	t	f
1948	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:18:26+08	2018-03-26 14:18:26.006+08	32b8c637-51b5-405c-920d-f7ae0adefafd	2	t	f
1064	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 08:17:08.604+08	2018-03-28 23:17:33.395+08	743c44f5-480c-4c97-80ef-a03ba282ed49	2	t	f
1327	physicalvalue	土壤水分	Output	\N			2	100	0	%RH		2018-01-09 11:31:58.842+08	2018-03-29 17:55:59.333+08	f4bf34ce-15d4-402f-a4d4-8e307936393d	2	t	f
2107	airq_pm2_5	PM2.5	Output	\N			4	\N	\N	μg/m3		2018-04-02 16:51:42.732+08	2018-04-02 17:01:54.303+08	c12bb164-9c52-4a79-8210-b5c74534053a	2	t	f
2108	airq_pm10	PM10	Output	\N			4	\N	\N	μg/m3		2018-04-02 16:51:42.735+08	2018-04-02 17:02:00.547+08	c12bb164-9c52-4a79-8210-b5c74534053a	2	t	f
2305	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-05-30 20:46:04.56+08	2018-05-30 20:46:04.572+08	d1f3cdb1-95b4-4970-90b8-cdb6c2201063	2	t	f
2111	airq_co	一氧化碳	Output	\N			4	\N	\N	μg/m3		2018-04-02 16:51:42.747+08	2018-04-02 17:02:44.608+08	c12bb164-9c52-4a79-8210-b5c74534053a	2	t	f
2109	airq_so2	二氧化硫	Output	\N			4	\N	\N	μg/m3		2018-04-02 16:51:42.741+08	2018-04-02 17:11:44.534+08	c12bb164-9c52-4a79-8210-b5c74534053a	2	t	f
1833	y	y	Output	\N	\N	\N	9	99999999	-99999999	\N		2018-03-21 09:48:24.096+08	2018-03-21 09:48:24.111+08	e3742e72-d9c4-44b2-86aa-e90a5fa8255a	2	t	f
929	physicalvalue	应变	Output	\N			3			με		2018-01-05 16:18:59.701+08	2018-03-23 14:09:01.558+08	ae9f3c10-ba3a-42be-a58d-35ec3c3c15ea	2	t	f
1756	angley	Y方向角度	Output	\N			4	30	-30	°		2018-03-08 20:05:11.939+08	2018-03-23 16:09:07.755+08	6d7fdfc9-5735-4b35-85f6-238e34c241a0	2	t	f
2115	anglex	X轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-04-02 17:18:39.129+08	2018-04-02 17:18:39.133+08	bf250923-ab23-43ab-a4c3-0aebe72d5c84	2	t	f
1246	lvdt	位移	Output	\N			2	65	0	mm		2018-01-08 16:27:59.734+08	2018-01-08 16:28:38.489+08	b9611c6a-f9b9-4ebe-a1e9-8665bd4f8734	2	t	f
2177	am	幅值	Output	\N	\N	\N	3			mv		2018-04-16 11:54:59.747+08	2018-04-16 11:54:59.747+08	a85e3b5f-f279-4094-b079-07d51a243899	2	t	f
1261	temp	温度	Output	\N			2	120	-40	℃		2018-01-08 17:03:46.157+08	2018-01-08 17:05:40.513+08	d53a176b-9c3c-46b6-8e05-37b776800b13	2	t	f
2178	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 11:54:59.753+08	2018-04-16 11:54:59.753+08	a85e3b5f-f279-4094-b079-07d51a243899	2	t	f
2179	physicalvalue	轴力	Output	\N	\N	\N	4	1000	-1000	kN		2018-04-16 11:54:59.761+08	2018-04-16 11:54:59.761+08	a85e3b5f-f279-4094-b079-07d51a243899	2	t	f
2180	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 11:54:59.771+08	2018-04-16 11:54:59.771+08	a85e3b5f-f279-4094-b079-07d51a243899	2	t	f
2273	anglex	X轴角度	Output	\N	\N	\N	3	30	-30	°		2018-05-10 09:21:45.787+08	2018-05-10 09:21:45.804+08	33ced0d8-f342-4bc5-8c11-45dcb0304ffd	2	t	f
1446	pressure	绳索张力	Output	\N			3			kN		2018-01-23 10:24:45.963+08	2018-05-21 15:38:50.061+08	3fde2361-48e1-41a2-9063-28daac442f9b	2	t	f
2300	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-05-29 11:45:13.016+08	2018-05-29 11:45:13.025+08	d3ba7fce-1ab9-4423-8888-27fbc8244e5c	2	t	f
2306	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-05-30 20:46:28.046+08	2018-05-30 20:46:28.053+08	d1f3cdb1-95b4-4970-90b8-cdb6c2201063	2	t	f
2346	concentration	湿度	Output	\N			0	\N	\N	%RH		2018-06-20 11:04:01.405+08	2018-06-20 11:09:08.333+08	91e8b285-92af-4ba8-a401-14561bfe4d82	2	t	f
2396	axieSpeed	轴速	Output	\N			0			km/h		2018-07-05 09:12:27.182+08	2018-07-24 10:32:16.557+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2425	CO2	CO2浓度	Output	\N	\N	\N	3	\N	\N	ppm		2018-07-13 14:18:02.338+08	2018-07-13 14:18:02.343+08	ead31896-f035-4ed5-8732-526210a6bfa2	2	t	f
2426	length	液位	Output	\N	\N	\N	\N	\N	\N	mm		2018-07-13 16:17:36.667+08	2018-07-13 16:17:36.678+08	da84feba-aff0-4b51-baee-a20f8e196dfe	2	t	f
2445	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-19 09:35:55.16+08	2018-07-19 09:35:55.16+08	5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	2	t	f
448	ultravioletRadiation	紫外辐射	Output	\N	\N	\N	2	200	0	w/m2		2017-12-05 11:04:18.696+08	2017-12-05 11:04:18.705+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
458	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2017-12-06 10:37:27.493+08	2017-12-06 10:37:27.493+08	514c15fe-e538-4824-9e48-1d3a83a560c1	2	t	f
1926	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:06:01.965+08	2018-03-26 14:06:01.971+08	0f684ae0-ceb8-4c6a-95c4-e83bdd79059e	2	t	f
456	angleX	X轴角度	Output	\N			2	30	-30	°		2017-12-06 10:37:27.483+08	2017-12-20 17:24:46.681+08	514c15fe-e538-4824-9e48-1d3a83a560c1	2	t	f
457	angleY	Y轴角度	Output	\N			2	30	-30	°		2017-12-06 10:37:27.489+08	2017-12-20 17:24:53.881+08	514c15fe-e538-4824-9e48-1d3a83a560c1	2	t	f
460	level	液位值	Output	\N			3	20	0	m		2017-12-06 14:13:40.778+08	2017-12-21 11:28:24.099+08	49be5f93-ae43-4fc7-89f9-58581a1f495e	2	t	f
1933	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:12:04.834+08	2018-03-26 14:12:04.852+08	7721177a-8610-4836-82c5-d08d05a6be97	2	t	f
1936	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:12:56.007+08	2018-03-26 14:12:56.013+08	7721177a-8610-4836-82c5-d08d05a6be97	2	t	f
1939	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:16:21.895+08	2018-03-26 14:16:21.906+08	d8193d74-feb5-4872-8e42-95a335cd383f	2	t	f
2181	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 13:53:01.844+08	2018-04-16 13:53:01.85+08	64cbf359-5e92-46a5-ac77-4ba6566e6539	2	t	f
1168	phy	载荷	Output	\N			3	1000	0	KN		2018-01-08 11:40:11.767+08	2018-01-08 11:40:11.767+08	bbcb8570-b0c2-4fb4-ac75-c28c9bf38503	2	t	f
1945	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:17:47.782+08	2018-03-26 14:17:47.789+08	84fc8a27-019f-4640-bbf6-466627f7c6d6	2	t	f
1170	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 11:40:11.774+08	2018-01-08 11:40:11.774+08	bbcb8570-b0c2-4fb4-ac75-c28c9bf38503	2	t	f
1374	anglex	X轴角度	Output	\N			3	10	-10	°		2018-01-16 09:44:42.419+08	2018-03-29 10:15:41.922+08	01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5	2	t	f
1375	angley	Y轴角度	Output	\N			3	10	-10	°		2018-01-16 09:44:42.424+08	2018-03-29 10:15:47.886+08	01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5	2	t	f
1376	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 09:44:42.428+08	2018-03-29 10:16:05.568+08	01a3d220-4d3f-45c9-96f8-39d2cbbf8ef5	2	t	f
1381	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:33:58.405+08	2018-03-29 10:23:24.029+08	e146e8c0-39b3-4922-b153-21492123982d	2	t	f
1253	xAccelertation	X轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:48.91+08	2018-01-08 16:52:26.331+08	de7958de-0a8a-4492-8705-642b5c4df424	2	t	f
1259	windSpeed	风速	Output	\N			1	20	0	m/s		2018-01-08 16:54:49.758+08	2018-01-08 17:00:19.81+08	2bfe226a-cde2-4d95-8420-b3ba3f669aa8	2	t	f
2185	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 14:07:58.019+08	2018-04-16 14:07:58.019+08	b848da41-0b65-4b04-afdb-aedda940be03	2	t	f
2186	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 14:07:58.026+08	2018-04-16 14:07:58.026+08	b848da41-0b65-4b04-afdb-aedda940be03	2	t	f
2187	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 14:07:58.031+08	2018-04-16 14:07:58.031+08	b848da41-0b65-4b04-afdb-aedda940be03	2	t	f
1383	anglex	X轴角度	Output	\N			3	60	-60	°		2018-01-16 10:33:59.649+08	2018-03-29 10:24:07.932+08	8d3ad66f-9a24-4adb-99de-1b86ae3e5d46	2	t	f
1385	angley	Y轴角度	Output	\N			3	60	-60	°		2018-01-16 10:33:59.656+08	2018-03-29 10:24:14.057+08	8d3ad66f-9a24-4adb-99de-1b86ae3e5d46	2	t	f
1338	physicalvalue	风速	Output	\N			2	70	0	m/s		2018-01-09 14:14:58.462+08	2018-03-29 17:59:59.36+08	b69afb69-84fd-4273-be31-9727323de2e0	2	t	f
1333	physicalvalue	风向	Output	\N			2	359	0	°		2018-01-09 14:07:31.212+08	2018-03-29 18:02:34.029+08	b1683813-a1e0-4d50-969b-1bad76311398	2	t	f
1757	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-08 20:20:54.388+08	2018-03-08 20:20:54.394+08	99a6c9c1-0f57-45bc-a1ff-e98a56faef46	2	t	f
1759	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2018-03-08 20:22:06.946+08	2018-03-08 20:22:06.954+08	99a6c9c1-0f57-45bc-a1ff-e98a56faef46	2	t	f
1380	anglex	X轴角度	Output	\N			3	30	-30	°		2018-01-16 10:33:58.399+08	2018-03-29 10:23:28.187+08	e146e8c0-39b3-4922-b153-21492123982d	2	t	f
1835	physicalvalue	物理值	Output	\N			8	9999999	-9999999	\N		2018-03-21 09:54:46.406+08	2018-03-23 16:24:09.813+08	eaa55b41-7d6a-48d3-8600-2b52eaad59a4	2	t	f
1167	temperature	温度	Output	\N			2	80	-30	℃		2018-01-08 11:40:11.763+08	2018-03-12 09:49:19.506+08	bbcb8570-b0c2-4fb4-ac75-c28c9bf38503	2	t	f
1523	physicalvalue	荷载	Output	\N			4			kN		2018-01-23 14:53:15.8+08	2021-03-02 13:56:10.454+08	069cdfbe-2463-40a3-a677-fa3564d06956	2	t	f
1834	z	z	Output	\N	\N	\N	9	99999999	-99999999			2018-03-21 09:49:00.086+08	2018-03-21 09:49:00.101+08	e3742e72-d9c4-44b2-86aa-e90a5fa8255a	2	t	f
1382	angley	Y轴角度	Output	\N			3	30	-30	°		2018-01-16 10:33:58.41+08	2018-03-29 10:23:32.767+08	e146e8c0-39b3-4922-b153-21492123982d	2	t	f
1384	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:33:59.652+08	2018-03-29 10:24:03.02+08	8d3ad66f-9a24-4adb-99de-1b86ae3e5d46	2	t	f
1387	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:34:00.731+08	2018-03-29 10:24:28.682+08	2b18c0fd-b077-4d22-92b0-c38896c4d150	2	t	f
1388	angley	Y轴角度	Output	\N			3	5	-5	°		2018-01-16 10:34:00.735+08	2018-03-29 10:24:32.881+08	2b18c0fd-b077-4d22-92b0-c38896c4d150	2	t	f
742	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-05 14:02:09.81+08	2018-01-05 14:02:09.81+08	da94e805-9621-4290-b239-5ddc2e0504a7	2	t	f
1386	anglex	X轴角度	Output	\N			3	90	-90	°		2018-01-16 10:34:00.728+08	2018-03-29 10:24:37.893+08	2b18c0fd-b077-4d22-92b0-c38896c4d150	2	t	f
2189	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 14:07:58.045+08	2018-04-16 14:07:58.045+08	02d9ea95-34c0-4d67-a8dc-755e3330cb36	2	t	f
2112	airq_o3	臭氧	Output	\N			0			μg/m3		2018-04-02 16:52:58.834+08	2018-04-02 17:02:51.496+08	c12bb164-9c52-4a79-8210-b5c74534053a	5	t	f
2190	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 14:07:58.049+08	2018-04-16 14:07:58.049+08	02d9ea95-34c0-4d67-a8dc-755e3330cb36	2	t	f
2192	am	温度	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 14:07:58.057+08	2018-04-16 14:07:58.057+08	02d9ea95-34c0-4d67-a8dc-755e3330cb36	2	t	f
2217	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:00:53.277+08	2018-04-16 16:00:53.277+08	3987b49b-1b19-4b06-889b-b102edd2abe3	2	t	f
2218	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:00:53.281+08	2018-04-16 16:00:53.281+08	3987b49b-1b19-4b06-889b-b102edd2abe3	2	t	f
2219	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:00:53.288+08	2018-04-16 16:00:53.288+08	3987b49b-1b19-4b06-889b-b102edd2abe3	2	t	f
2221	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:00:53.3+08	2018-04-16 16:00:53.3+08	c538c4cc-6b50-4a51-9706-9a112551be27	2	t	f
2222	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:00:53.306+08	2018-04-16 16:00:53.306+08	c538c4cc-6b50-4a51-9706-9a112551be27	2	t	f
2224	am	温度	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:00:53.315+08	2018-04-16 16:00:53.315+08	c538c4cc-6b50-4a51-9706-9a112551be27	2	t	f
2223	physicalvalue	荷载	Output	\N			4	100	-100	kN		2018-04-16 16:00:53.311+08	2018-04-16 17:49:44.787+08	c538c4cc-6b50-4a51-9706-9a112551be27	2	t	f
2191	physicalvalue	荷载	Output	\N			4	50	-50	kN		2018-04-16 14:07:58.052+08	2018-04-16 17:49:12.428+08	02d9ea95-34c0-4d67-a8dc-755e3330cb36	2	t	f
2188	physicalvalue	荷载	Output	\N			4	50	-50	kN		2018-04-16 14:07:58.035+08	2018-04-16 17:49:20.47+08	b848da41-0b65-4b04-afdb-aedda940be03	2	t	f
2220	physicalvalue	荷载	Output	\N			4	100	-100	kN		2018-04-16 16:00:53.291+08	2018-04-16 17:49:40.38+08	3987b49b-1b19-4b06-889b-b102edd2abe3	2	t	f
2274	angley	Y轴角度	Output	\N	\N	\N	3	30	-30	°		2018-05-10 09:22:09.578+08	2018-05-10 09:22:09.584+08	33ced0d8-f342-4bc5-8c11-45dcb0304ffd	2	t	f
2301	anglex	X轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-05-29 14:51:48.732+08	2018-05-29 14:51:48.732+08	9517f5d2-02f2-47c6-b688-35e0efa0f25f	2	t	f
449	illumination	照度	Output	\N	\N	\N	2	200000	0	LUX		2017-12-05 11:05:11.884+08	2017-12-05 11:05:11.901+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
451	pm25	PM2.5	Output	\N	\N	\N	2	500	0	ug/m3		2017-12-05 11:07:06.599+08	2017-12-05 11:07:06.607+08	84868dd7-e484-47d3-b26f-8c39e898bb4d	2	t	f
1949	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:23:16.35+08	2018-03-26 14:23:16.36+08	5775692b-7acf-46f2-b924-d040fb8bd751	2	t	f
221	windDirection	风向	Output	\N			2	360	0	°		2017-09-14 20:58:20.376+08	2017-12-21 14:12:37.336+08	2e7a1db8-dd48-47e0-87d0-023cd2b9ff08	2	t	f
484	distance	距离	Output	\N			3	100000	500	mm		2017-12-08 15:12:43.779+08	2017-12-21 15:56:19.139+08	20231ffb-4f57-4ebc-bef1-cfd72e18d550	2	t	f
464	xDegree	X轴角度	Output	\N			3	30	-30	°		2017-12-07 10:22:56.756+08	2017-12-21 14:18:43.621+08	df01da11-6cbc-4a10-b62d-dba26d636f74	2	t	f
477	angleX	X轴角度	Output	\N			2	90	-90	°		2017-12-08 09:56:07.533+08	2017-12-21 15:07:29.86+08	096efcee-8caa-4bf3-9f0b-b8ce92ace83c	2	t	f
467	angleY	Y轴角度	Output	\N			2	90	-90	°		2017-12-07 11:45:53.579+08	2017-12-21 15:19:49.971+08	13268453-da66-4d7a-a972-e67bd897b1a9	2	t	f
468	temp	温度	Output	\N			2	80	-40	℃		2017-12-07 11:46:13.923+08	2017-12-21 15:19:57.213+08	13268453-da66-4d7a-a972-e67bd897b1a9	2	t	f
469	temp	温度	Output	\N			2	123.8	-40	℃		2017-12-07 14:27:17.109+08	2017-12-21 15:26:56.244+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
475	ph	PH	Output	\N			2	14	0	PH		2017-12-07 15:21:29.951+08	2017-12-21 15:33:59.272+08	05aa0ad1-dcc0-40c2-80cc-198e8e1a6511	2	t	f
472	speedofWind	风速	Output	\N			2	60	0	m/s		2017-12-07 14:30:48.803+08	2017-12-21 15:28:05.854+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
471	pressure	气压	Output	\N			2	1100	10	mBar		2017-12-07 14:29:12.671+08	2017-12-21 15:27:50.544+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
473	azimuthofWind	风向	Output	\N			2	359.9	0	°		2017-12-07 14:31:11.75+08	2017-12-21 15:28:13.803+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
474	rainFall	雨量	Output	\N			2	500	0	mm		2017-12-07 14:32:29.118+08	2017-12-21 15:28:24.035+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
470	hum	相对湿度	Output	\N			2	100	0	%RH		2017-12-07 14:28:28.858+08	2017-12-21 15:28:36.216+08	b314cfb9-6a52-40c6-ab30-cc7f75189c59	2	t	f
476	temp	温度	Output	\N			2	65	0	℃		2017-12-07 15:22:01.23+08	2017-12-21 15:34:39.151+08	05aa0ad1-dcc0-40c2-80cc-198e8e1a6511	2	t	f
487	distance	距离	Output	\N			3	250000	500	mm		2017-12-08 15:31:10.958+08	2017-12-21 15:55:15.584+08	ed796d50-66db-40b1-be39-62728b8d5fdc	2	t	f
478	angleY	Y轴角度	Output	\N			2	180	-180	°		2017-12-08 09:56:40.15+08	2017-12-21 15:07:36.365+08	096efcee-8caa-4bf3-9f0b-b8ce92ace83c	2	t	f
466	angleX	X轴角度	Output	\N			2	90	-90	°		2017-12-07 11:45:28.464+08	2017-12-21 15:19:43.31+08	13268453-da66-4d7a-a972-e67bd897b1a9	2	t	f
485	distance	距离	Output	\N			3	150000	500	mm		2017-12-08 15:17:26+08	2017-12-21 15:55:58.329+08	88876216-b879-4524-bada-01f39ed17c93	2	t	f
486	distance	距离	Output	\N			3	200000	500	mm		2017-12-08 15:24:25.118+08	2017-12-21 15:55:41.915+08	16b2379a-313c-434d-8eb3-56120068c40a	2	t	f
481	distance	距离	Output	\N			3	30000	100	mm		2017-12-08 14:54:33.996+08	2017-12-21 15:57:03.474+08	a5e1cd4e-fda7-425f-970e-ad4449eb546c	2	t	f
480	distance	距离	Output	\N			3	12000	200	mm		2017-12-08 14:51:04.865+08	2017-12-21 15:57:15.094+08	e9b00fde-a1f2-4167-af71-7fc7862cc867	2	t	f
1951	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:24:02.066+08	2018-03-26 14:24:02.071+08	5775692b-7acf-46f2-b924-d040fb8bd751	2	t	f
479	distance	距离	Output	\N			3	12000	200	mm		2017-12-08 14:41:10.689+08	2017-12-21 15:57:36.613+08	e905978b-35fd-48b2-8dca-d3af8020841e	2	t	f
482	distance	距离	Output	\N			3	60000	200	mm		2017-12-08 14:58:29.647+08	2017-12-21 15:56:51.648+08	22f8366a-f855-462a-ab4d-6f140e075584	2	t	f
483	diatance	距离	Output	\N			3	70000	50	mm		2017-12-08 15:03:19.858+08	2017-12-21 15:56:32.058+08	e4d8894c-78bb-485f-a691-8288a65c6967	2	t	f
489	totalFlow	累计流量	Output	\N			3	\N	\N	m3/h		2017-12-11 15:27:03.008+08	2017-12-11 15:57:34.37+08	6bc1aa05-f9ce-4f21-92f8-d1464535b0c2	2	t	f
490	transientFlow	瞬时流量	Output	\N	\N	\N	3	\N	\N	m3/h		2017-12-11 15:58:16.359+08	2017-12-11 15:58:16.373+08	6bc1aa05-f9ce-4f21-92f8-d1464535b0c2	2	t	f
497	humidity	湿度	Output	\N	\N	\N	2	95	5	%RH		2017-12-12 14:44:18.949+08	2017-12-12 14:44:18.956+08	9b5c64a1-06b3-48e2-83d2-92d0278e050c	2	t	f
330	PM25	PM25	Output	\N			1	10000	0	ug/m³		2017-10-31 15:36:07.59+08	2017-12-12 11:36:16.336+08	9b5c5f27-ebad-42e1-8586-405066f03c1d	2	t	f
492	windSpeed	风速	Output	\N	\N	\N	2	60	0	m/s		2017-12-12 11:55:51.6+08	2017-12-12 11:55:51.613+08	7563b8d0-13b1-42d9-91dd-b7a48a97089f	2	t	f
493	windDirection	风向	Output	\N	\N	\N	2	359.9	0	°		2017-12-12 11:56:16.364+08	2017-12-12 11:56:16.37+08	7563b8d0-13b1-42d9-91dd-b7a48a97089f	2	t	f
494	temp	温度	Output	\N	\N	\N	2	50	-10	℃		2017-12-12 14:09:29.446+08	2017-12-12 14:09:29.452+08	48838bfb-174e-42ac-a6c4-1c694dbf569b	2	t	f
495	humidity	湿度	Output	\N			2	100	0	%RH		2017-12-12 14:09:55.546+08	2017-12-12 14:10:46.351+08	48838bfb-174e-42ac-a6c4-1c694dbf569b	2	t	f
496	temp	温度	Output	\N	\N	\N	2	120	-40	℃		2017-12-12 14:41:34.706+08	2017-12-12 14:41:34.712+08	9b5c64a1-06b3-48e2-83d2-92d0278e050c	2	t	f
498	temp	温度	Output	\N	\N	\N	2	50	0	℃		2017-12-13 13:09:49.056+08	2017-12-13 13:09:49.062+08	e5550e74-9d03-440d-b9a8-0175cec5ed42	2	t	f
499	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-13 13:10:24.535+08	2017-12-13 13:10:24.543+08	e5550e74-9d03-440d-b9a8-0175cec5ed42	2	t	f
500	temp	温度	Output	\N	\N	\N	2	55	-5	℃		2017-12-13 13:22:50.099+08	2017-12-13 13:22:50.108+08	cd2059de-7aca-4f60-9b28-90d4aec7dfcc	2	t	f
501	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-13 13:23:15.055+08	2017-12-13 13:23:15.062+08	cd2059de-7aca-4f60-9b28-90d4aec7dfcc	2	t	f
502	temp	温度	Output	\N	\N	\N	2	60	-10	℃		2017-12-13 13:28:03.153+08	2017-12-13 13:28:03.17+08	8409a1f6-b5f7-46c7-98e8-e8ed92f8113a	2	t	f
503	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-13 13:28:34.047+08	2017-12-13 13:28:34.054+08	8409a1f6-b5f7-46c7-98e8-e8ed92f8113a	2	t	f
505	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-13 13:42:04.76+08	2017-12-13 13:42:04.766+08	d6ba5199-32e3-4c9c-a69c-1317e15f21a6	2	t	f
504	temp	温度	Output	\N			2	80	-20	℃		2017-12-13 13:41:40.857+08	2017-12-13 13:42:24.044+08	d6ba5199-32e3-4c9c-a69c-1317e15f21a6	2	t	f
506	temp	温度	Output	\N	\N	\N	2	60	-40	℃		2017-12-13 13:46:54.182+08	2017-12-13 13:46:54.189+08	03c5dd3d-859b-41e6-89df-ca3000a46e14	2	t	f
507	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-13 13:47:15.665+08	2017-12-13 13:47:15.671+08	03c5dd3d-859b-41e6-89df-ca3000a46e14	2	t	f
508	x	X位置	Output	\N			2	\N	\N	mm		2017-12-13 13:59:30.922+08	2017-12-14 16:30:48.355+08	95683aa7-b094-4883-a2a1-bdabe2c7d59f	2	t	f
511	PM25	PM2.5值	Output	\N			1	10000	1	ug/m3		2017-12-14 14:22:34.598+08	2017-12-14 14:24:57.404+08	846fe925-eaae-47c8-91a4-b1d3d7fc3bc7	2	t	f
509	y	Y位置	Output	\N			2	\N	\N	mm		2017-12-13 13:59:30.93+08	2017-12-14 16:30:58.533+08	95683aa7-b094-4883-a2a1-bdabe2c7d59f	2	t	f
510	z	Z位置	Output	\N			2	\N	\N	mm		2017-12-13 13:59:30.937+08	2017-12-14 16:31:07.52+08	95683aa7-b094-4883-a2a1-bdabe2c7d59f	2	t	f
462	weight	压力	Output	\N			2			KN		2017-12-06 15:19:16.191+08	2017-12-21 13:42:09.319+08	fcbff74f-610d-4dc8-b2a8-d5c54792fc7c	2	t	f
465	yDegree	Y轴角度	Output	\N			3	30	-30	°		2017-12-07 10:23:29.747+08	2017-12-21 14:18:39.136+08	df01da11-6cbc-4a10-b62d-dba26d636f74	2	t	f
541	airPressure	气压	Output	\N			1	\N	\N	hPa		2017-12-20 10:35:00.822+08	2017-12-20 10:44:44.592+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
512	PM10	PM10.0值	Output	\N			1	10000	1	ug/m3		2017-12-14 14:22:34.603+08	2017-12-14 14:24:48.623+08	846fe925-eaae-47c8-91a4-b1d3d7fc3bc7	2	t	f
513	TSP	TSP值	Output	\N			1	10000	1	ug/m3		2017-12-14 14:22:34.609+08	2017-12-14 14:40:42.462+08	846fe925-eaae-47c8-91a4-b1d3d7fc3bc7	2	t	f
519	angleX	X轴角度	Output	\N	\N	\N	2	30	-30	°		2017-12-14 16:50:42.658+08	2017-12-14 16:50:42.669+08	9f1dab20-8943-4d5f-9c48-e25d55a8a3d3	2	t	f
520	angleY	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2017-12-14 16:51:16.18+08	2017-12-14 16:51:16.189+08	9f1dab20-8943-4d5f-9c48-e25d55a8a3d3	2	t	f
521	angleX	X轴角度	Output	\N	\N	\N	2	30	-30	°		2017-12-14 16:56:56.491+08	2017-12-14 16:56:56.501+08	ec181902-8df8-4d46-9c16-a1deefd286e5	2	t	f
522	angleY	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2017-12-14 16:57:33.274+08	2017-12-14 16:57:33.281+08	ec181902-8df8-4d46-9c16-a1deefd286e5	2	t	f
523	settlement	沉降	Output	\N			3	1000	0	mm		2017-12-18 10:57:40.221+08	2017-12-18 13:27:32.64+08	63010e3e-4783-485c-a5dc-4f26a1153ece	2	t	f
558	concentration	CO浓度	Output	\N	\N	\N	2	50	0	ppm		2017-12-20 14:00:19.695+08	2017-12-20 14:00:19.7+08	ab03ba4c-6102-471a-a570-87b77683dcc3	2	t	f
525	temp	温度	Output	\N			3	30	-10	℃		2017-12-18 17:23:33.744+08	2017-12-19 13:46:44.453+08	235950eb-8bd2-40b5-945f-6ba95c40892d	2	t	f
524	settlement	沉降	Output	\N			3	1500	0	mm		2017-12-18 17:23:33.737+08	2017-12-19 13:46:54.522+08	235950eb-8bd2-40b5-945f-6ba95c40892d	2	t	f
526	turbidity	浊度	Output	\N	\N	\N	2	1000	0.1	NTU		2017-12-19 14:29:24.972+08	2017-12-19 14:29:25.273+08	53e4c42b-3996-45c2-9631-73b200cb840c	2	t	f
527	temp	温度	Output	\N	\N	\N	2	50	0	℃		2017-12-19 14:31:40.464+08	2017-12-19 14:31:40.478+08	53e4c42b-3996-45c2-9631-73b200cb840c	2	t	f
529	physicalvalue	压力	Output	\N			2	\N	\N	MPa		2017-12-19 18:00:48.924+08	2018-04-20 13:43:30.063+08	b6bff26c-a89e-4fd7-85db-adb7ff80af6c	2	t	f
1950	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:23:48.272+08	2018-03-26 14:23:48.278+08	5775692b-7acf-46f2-b924-d040fb8bd751	2	t	f
531	radiation1day	辐射1日累计	Output	\N	\N	\N	3	\N		MJ/m²		2017-12-20 10:35:00.784+08	2017-12-20 10:35:00.784+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
532	radiation2day	辐射2日累计	Output	\N	\N	\N	3	\N	\N	MJ/m²		2017-12-20 10:35:00.79+08	2017-12-20 10:35:00.79+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
533	groundTemperature1	地温1	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.795+08	2017-12-20 10:35:00.795+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
534	groundTemperature2	地温2	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.799+08	2017-12-20 10:35:00.799+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
535	groundTemperature3	地温3	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.802+08	2017-12-20 10:35:00.802+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
536	groundTemperature4	地温4	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.806+08	2017-12-20 10:35:00.806+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
537	groundTemperature5	地温5	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.809+08	2017-12-20 10:35:00.809+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
538	temperature	环温	Output	\N	\N	\N	1	\N	\N	℃		2017-12-20 10:35:00.813+08	2017-12-20 10:35:00.813+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
539	humidity	环湿	Output	\N	\N	\N	1	\N	\N	%RH		2017-12-20 10:35:00.816+08	2017-12-20 10:35:00.816+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
540	dewPoint	露点	Output	\N	\N	\N	2	\N	\N	℃		2017-12-20 10:35:00.819+08	2017-12-20 10:35:00.819+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
542	altitude	海拨	Output	\N	\N	\N	0	\N	\N	m		2017-12-20 10:35:00.825+08	2017-12-20 10:35:00.825+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
543	windSpeed	风速	Output	\N	\N	\N	1	\N	\N	m/s		2017-12-20 10:35:00.828+08	2017-12-20 10:35:00.828+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
544	windSpeed2mins	2分钟平均风速	Output	\N	\N	\N	1	\N	\N	m/s		2017-12-20 10:35:00.831+08	2017-12-20 10:35:00.831+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
545	windSpeed10mins	10分钟平均风速	Output	\N	\N	\N	1	\N	\N	m/s		2017-12-20 10:35:00.834+08	2017-12-20 10:35:00.834+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
546	windDirection	风向	Output	\N	\N	\N	0	\N	\N	°		2017-12-20 10:35:00.837+08	2017-12-20 10:35:00.837+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
547	radiation1	辐射1	Output	\N	\N	\N	0	\N	\N	w/m²		2017-12-20 10:35:00.84+08	2017-12-20 10:35:00.84+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
548	radiation2	辐射2	Output	\N	\N	\N	0	\N	\N	w/m²		2017-12-20 10:35:00.842+08	2017-12-20 10:35:00.842+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
549	groundHumidity	土湿	Output	\N	\N	\N	1	\N	\N	%m³/m³		2017-12-20 10:35:00.845+08	2017-12-20 10:35:00.845+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
550	voltage	电池电压	Output	\N	\N	\N	1	\N	\N	V		2017-12-20 10:35:00.848+08	2017-12-20 10:35:00.848+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
551	rainfall	雨量日累计	Output	\N	\N	\N	1	\N	\N	mm		2017-12-20 10:35:00.85+08	2017-12-20 10:35:00.85+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
562	temp	温度	Output	\N	\N	\N	2	80	-20	℃		2017-12-20 15:18:57.35+08	2017-12-20 15:18:57.36+08	06d28e3e-8a80-4110-bf18-a06cadc13e9b	2	t	f
1958	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:26:31.203+08	2018-03-26 14:26:31.21+08	7c9f78f3-049b-4f4f-86ce-ed4945136111	2	t	f
1959	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:26:43.936+08	2018-03-26 14:26:43.944+08	21a71013-2a7f-46e0-8ced-77ada77b1342	2	t	f
1961	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:27:02.837+08	2018-03-26 14:27:02.86+08	21a71013-2a7f-46e0-8ced-77ada77b1342	2	t	f
1971	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:29:47.713+08	2018-03-26 14:29:47.74+08	921508aa-21fc-41c6-b609-b6df5206ea7b	2	t	f
1972	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:29:50.788+08	2018-03-26 14:29:50.793+08	f3879800-9585-4575-a261-25c1128fcaf9	2	t	f
1973	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:30:05.439+08	2018-03-26 14:30:05.45+08	8e3f282e-7428-497b-baa8-0ca8fd248e36	2	t	f
1975	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:31:47.871+08	2018-03-26 14:31:47.876+08	4f92b0e6-a618-4221-8c58-169247d88bd0	2	t	f
1976	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:32:17.862+08	2018-03-26 14:32:17.866+08	82a15a43-5463-4d67-88ea-0a816235bd70	2	t	f
1977	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:32:36.251+08	2018-03-26 14:32:36.256+08	4f92b0e6-a618-4221-8c58-169247d88bd0	2	t	f
1979	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:34:35.256+08	2018-03-26 14:34:35.264+08	f3879800-9585-4575-a261-25c1128fcaf9	2	t	f
1984	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:35:44.38+08	2018-03-26 14:35:44.387+08	614819ae-798a-406e-befe-fe6749ac5536	2	t	f
528	physicalvalue	温度	Output	\N			2			℃		2017-12-19 17:53:23.347+08	2018-04-20 13:43:12.905+08	488ca4a1-e5d4-4905-ac99-a63bf4b4e98c	2	t	f
2363	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-06-27 16:44:55.256+08	2018-06-27 16:44:55.27+08	b4e49abe-4948-4f36-978f-8804c1531ca1	2	t	f
2366	flowsvelocity	瞬时流速	Output	\N	\N	\N	4	\N	\N	m/s		2018-06-28 16:28:37.253+08	2018-06-28 16:28:37.258+08	419116d4-4614-4d66-bc30-ce2394eed251	2	t	f
552	visibility	能见度	Output	\N	\N	\N	0	\N	\N	m		2017-12-20 10:35:00.853+08	2017-12-20 10:35:00.853+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
553	visibility10mins	能见度10分钟平均	Output	\N	\N	\N	0	\N	\N	m		2017-12-20 10:35:01.136+08	2017-12-20 10:35:01.136+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
554	sunshine	日照时日累计	Output	\N	\N	\N	0	\N	\N	mins		2017-12-20 10:35:01.141+08	2017-12-20 10:35:01.141+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
555	CO2	CO2	Output	\N	\N	\N	1	\N	\N	ppm		2017-12-20 10:35:01.146+08	2017-12-20 10:35:01.146+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
556	eCompass	电子罗盘	Output	\N	\N	\N	0	\N	\N			2017-12-20 10:35:01.151+08	2017-12-20 10:35:01.151+08	851255ec-cf34-4e21-b95e-bcd0c6fe6a4b	2	t	f
557	concentration	PM10	Output	\N	\N	\N	2	2000	0	ug/m3		2017-12-20 13:53:13.308+08	2017-12-20 13:53:13.323+08	b55ffd52-9693-40dd-a732-e5271f0d5fb5	2	t	f
559	concentration	SO2	Output	\N	\N	\N	2	500	0	ppb		2017-12-20 14:04:53.349+08	2017-12-20 14:04:53.362+08	60ae0347-0874-4d6c-b39a-e0bc3fd616c9	2	t	f
436	value	沉降	Output	\N			2	100	0	mm		2017-12-04 13:47:01.143+08	2017-12-20 14:34:31.775+08	06d28e3e-8a80-4110-bf18-a06cadc13e9b	2	t	f
560	value	沉降	Output	\N			2	200	0	mm		2017-12-20 14:30:53.48+08	2017-12-20 14:34:41.891+08	f0e35d78-efe9-4656-ae6a-5116d547772f	2	t	f
563	concentration	NO2	Output	\N	\N	\N	2	500	0	ppb		2017-12-20 15:25:40.139+08	2017-12-20 15:25:40.149+08	5f58f358-39b7-4cf1-a4ad-c8b16d83a0b0	2	t	f
564	concentration	O3	Output	\N	\N	\N	2	500	0	ppb		2017-12-20 15:40:09.993+08	2017-12-20 15:40:10.007+08	f17f6e9c-827e-4dbe-b6d9-48937e2ca2b5	2	t	f
565	concentration	湿度	Output	\N	\N	\N	2	100	0	%RH		2017-12-20 15:45:16.566+08	2017-12-20 15:45:16.578+08	b9dd081e-69bc-46c3-a372-d46269234b57	2	t	f
566	concentration	VOC	Output	\N	\N	\N	2	20	0	ppm		2017-12-20 15:49:24.655+08	2017-12-20 15:49:24.66+08	1adc0b25-92ae-4d60-9c59-b001fc8b8120	2	t	f
1952	physicalvalue	应力	Output	\N	\N	\N	4	0.8	0	MPa		2018-03-26 14:24:24.986+08	2018-03-26 14:24:24.995+08	5775692b-7acf-46f2-b924-d040fb8bd751	2	t	f
568	temp	温度	Output	\N	\N	\N	2	85	-55	℃		2017-12-21 11:15:16.279+08	2017-12-21 11:15:16.279+08	ef29b89e-1964-40d7-b8c8-489d9562ce9d	2	t	f
488	distance	距离	Output	\N			3	1000000	3000	mm		2017-12-08 15:40:39.209+08	2017-12-21 15:55:28.502+08	1bbadeee-62da-4062-bcf4-f0f18757aead	2	t	f
570	temp	温度	Output	\N	\N	\N	2	70	-20	℃		2017-12-21 16:38:15.408+08	2017-12-21 16:38:15.42+08	b17563d4-fe75-4b40-9fb8-97fedae3abce	2	t	f
571	humid	湿度	Output	\N	\N	\N	2	95	0	%RH		2017-12-21 16:38:44.686+08	2017-12-21 16:38:44.693+08	b17563d4-fe75-4b40-9fb8-97fedae3abce	2	t	f
1151	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 11:06:18.397+08	2018-01-08 11:06:18.397+08	d0696649-4f35-48e3-b1da-79384789f28b	2	t	f
1341	formula	模拟量线性转换数字量公式	Constant	\N	\N	y=(RH-RL)/(aH-aL)*(x-aL)+RL	\N	\N	\N	\N		2018-01-09 15:01:35.202+08	2018-01-09 15:01:35.202+08	84e943aa-b142-4142-89f4-5db0cc8e5233	5	t	f
1342	aL	模拟量下限	Constant	\N	\N	4	\N	\N	\N	mA		2018-01-09 15:01:35.206+08	2018-01-09 15:01:35.206+08	84e943aa-b142-4142-89f4-5db0cc8e5233	1	t	f
579	strain	应变	Output	\N	\N	\N	1	3000	-3000	με		2017-12-28 20:13:20.344+08	2017-12-28 20:13:20.344+08	02eb3150-86c4-4e4f-933e-9adadf378910	2	t	f
1377	anglex	X轴角度	Output	\N			3	5	-5	°		2018-01-16 10:21:41.717+08	2018-03-29 10:22:57.883+08	7ef9f068-1ac5-4c5a-802a-3b3a1bb55191	2	t	f
1450	value	裂缝	Output	\N	\N	\N	1	100	0	mm		2018-01-23 14:05:00.657+08	2018-01-23 14:05:00.657+08	c0392392-9da8-4232-8535-3962a4b88b7a	2	t	f
1343	aH	模拟量上限	Constant	\N		20	0	\N	\N	mA		2018-01-09 15:01:35.21+08	2018-01-09 15:01:35.21+08	84e943aa-b142-4142-89f4-5db0cc8e5233	1	t	f
1344	RH	数字量上限	Constant	\N		4	0			mm/min		2018-01-09 15:01:35.214+08	2018-01-09 15:25:33.297+08	84e943aa-b142-4142-89f4-5db0cc8e5233	1	t	f
1345	RL	数字量下限	Constant	\N		0	0			mm/min		2018-01-09 15:01:35.218+08	2018-01-09 15:25:36.894+08	84e943aa-b142-4142-89f4-5db0cc8e5233	1	t	f
1340	phy	风速	Output	\N			2	4	0	mm/min		2018-01-09 15:01:35.196+08	2018-01-09 15:30:42.039+08	84e943aa-b142-4142-89f4-5db0cc8e5233	2	t	f
587	phy	温度	Output	\N			2	120	-30	℃		2018-01-02 17:33:10.091+08	2018-01-22 16:57:31.189+08	9c7d9db3-d6b5-46e5-a01e-af70a296bc8d	2	t	f
590	pressure	压力	Output	\N	\N	\N	1	100	0.1	MPa		2018-01-03 16:19:19.152+08	2018-01-03 16:19:19.152+08	5a1c9521-1fea-46f6-82bd-3073923b164f	2	t	f
569	thickness	结冰厚度	Output	\N			2	10	0	mm		2017-12-21 11:15:16.283+08	2018-01-03 20:10:20.83+08	ef29b89e-1964-40d7-b8c8-489d9562ce9d	2	t	f
1762	pressure	重力	Output	\N			3	\N		KN		2018-03-09 15:20:37.207+08	2018-05-21 15:39:09.809+08	83056ece-02bc-466a-a4c2-4b916ea6e41a	2	t	f
1956	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:25:31.397+08	2018-03-26 14:25:31.413+08	fdd4dd73-2235-45a2-98b3-c7838697717c	2	t	f
599	temperature	温度	Output	\N			3	40	0	℃		2018-01-04 11:57:17.404+08	2018-01-04 14:08:37.466+08	161be263-2daf-4d9c-8a3e-5a5dfa458cf2	2	t	f
593	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2018-01-04 11:21:08.714+08	2018-01-04 11:21:08.728+08	26034a4c-81b7-4470-a5e4-65494772f35b	2	t	f
595	physicalvalue	位移	Output	\N			3	200	0	mm		2018-01-04 11:24:55.718+08	2018-03-22 14:22:02.826+08	26034a4c-81b7-4470-a5e4-65494772f35b	2	t	f
1988	frequency	频率	Output	\N			4	2000	1000	Hz		2018-03-26 14:37:05.965+08	2019-08-12 11:00:29.163+08	43e14c1c-a425-4001-9886-f41df72945ea	2	t	f
491	elongationIndicator	裂缝	Output	\N			2	2000	0	mm		2017-12-12 10:33:47.192+08	2020-07-14 17:02:01.401+08	8c9d6aac-81ca-48cb-b67c-6916c734bf63	2	t	f
597	frequency	频率	Output	\N	\N	\N	3		\N	HZ		2018-01-04 11:56:45.449+08	2018-01-04 11:56:45.466+08	161be263-2daf-4d9c-8a3e-5a5dfa458cf2	2	t	f
598	pressure	压强	Output	\N	\N	\N	2	\N	\N	Kpa		2018-01-04 11:56:59.884+08	2018-01-04 11:56:59.884+08	f4542b67-c857-40a2-8aa7-11850aace3bd	2	t	f
594	temperature	温度	Output	\N			2	60	-25	℃		2018-01-04 11:21:36.221+08	2018-01-04 14:09:29.112+08	26034a4c-81b7-4470-a5e4-65494772f35b	2	t	f
1758	temperature	温度	Output	\N			3	\N	\N	℃		2018-03-08 20:21:34.565+08	2018-03-23 16:21:41.445+08	99a6c9c1-0f57-45bc-a1ff-e98a56faef46	2	t	f
600	physicalvalue	水压	Output	\N			3	2500	0	kPa		2018-01-04 12:02:16.625+08	2018-03-23 11:37:49.491+08	161be263-2daf-4d9c-8a3e-5a5dfa458cf2	2	t	f
1957	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:26:12.892+08	2018-03-26 14:26:12.898+08	aca3e62f-b4ec-46cc-887a-563ce53b652a	2	t	f
1153	temperature	温度	Output	\N			2	80	-20	℃		2018-01-08 11:06:18.407+08	2018-03-28 23:09:16.557+08	d0696649-4f35-48e3-b1da-79384789f28b	2	t	f
1154	physicalvalue	位移	Output	\N			3	200	0	mm		2018-01-08 11:06:18.411+08	2018-03-28 23:30:14.658+08	d0696649-4f35-48e3-b1da-79384789f28b	2	t	f
1378	angley	Y轴角度	Output	\N			3	5	-5	°		2018-01-16 10:21:41.725+08	2018-03-29 10:23:02.855+08	7ef9f068-1ac5-4c5a-802a-3b3a1bb55191	2	t	f
1379	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:21:41.731+08	2018-03-29 10:23:07.918+08	7ef9f068-1ac5-4c5a-802a-3b3a1bb55191	2	t	f
1048	level	沉降	Output	\N			3			mm		2018-01-05 17:42:46.304+08	2018-01-10 11:19:39.872+08	ca59c7e9-eb74-4ab9-a98f-4604bfbf0b8c	2	t	f
1953	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:24:37.842+08	2018-03-26 14:24:37.847+08	fdd4dd73-2235-45a2-98b3-c7838697717c	2	t	f
1954	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:24:54.719+08	2018-03-26 14:24:54.726+08	ba74ef0e-3ec4-4203-9d65-17906c8f64d1	2	t	f
1963	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:27:26.759+08	2018-03-26 14:27:26.766+08	21a71013-2a7f-46e0-8ced-77ada77b1342	2	t	f
1176	phy	载荷	Output	\N			3	1000	0	KN		2018-01-08 11:44:22.224+08	2018-01-08 11:44:22.224+08	0a8e8043-1c0a-48af-b8fd-68658e1b1b61	2	t	f
1993	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:38:52.831+08	2018-03-26 14:38:52.835+08	ea781b14-56d0-478f-991f-05c1ed5fdf93	2	t	f
1178	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 11:44:22.233+08	2018-01-08 11:44:22.233+08	0a8e8043-1c0a-48af-b8fd-68658e1b1b61	2	t	f
1996	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:39:26.18+08	2018-03-26 14:39:26.186+08	363b62ae-2ccd-4c86-915d-03380bc9d89c	2	t	f
2001	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 14:45:38.97+08	2018-03-26 14:45:38.974+08	794d13af-907b-4165-bd7d-5c9d4e3410f4	2	t	f
1271	yDegree	Y轴角度	Output	\N			2	30	-30	°		2018-01-08 17:10:41.664+08	2018-01-08 17:11:24.801+08	0d9f22e5-95c7-4e56-8963-6576d22b3209	2	t	f
1272	xDegree	X轴角度	Output	\N			2	30	-30	°		2018-01-08 17:10:41.67+08	2018-01-08 17:11:31.439+08	0d9f22e5-95c7-4e56-8963-6576d22b3209	2	t	f
1269	yDegree	Y轴角度	Output	\N			3	30	-30	°		2018-01-08 17:10:41.157+08	2018-01-08 17:12:18.685+08	893afc3d-9fb4-47f5-aa47-80e8321a052c	2	t	f
1270	xDegree	X轴角度	Output	\N			3	30	-30	°		2018-01-08 17:10:41.162+08	2018-01-08 17:12:27.379+08	893afc3d-9fb4-47f5-aa47-80e8321a052c	2	t	f
1267	yDegree	Y轴角度	Output	\N			2	90	-90	°		2018-01-08 17:10:40.676+08	2018-01-08 17:15:01.191+08	054f1a33-18e3-4476-a321-2a5482f783da	2	t	f
1268	xDegree	X轴角度	Output	\N			2	90	-90	°		2018-01-08 17:10:40.682+08	2018-01-08 17:15:07.878+08	054f1a33-18e3-4476-a321-2a5482f783da	2	t	f
1273	phy	应变	Output	\N			3	3000	0	με		2018-01-08 17:19:40.384+08	2018-01-08 17:19:40.384+08	9ea4750b-b3f2-4d2b-a190-8ac310bec295	2	t	f
1275	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-08 17:19:40.394+08	2018-01-08 17:19:40.394+08	9ea4750b-b3f2-4d2b-a190-8ac310bec295	2	t	f
2002	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:45:58.282+08	2018-03-26 14:45:58.288+08	794d13af-907b-4165-bd7d-5c9d4e3410f4	2	t	f
2003	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:46:20.625+08	2018-03-26 14:46:20.63+08	794d13af-907b-4165-bd7d-5c9d4e3410f4	2	t	f
1393	anglex	X轴角度	Output	\N			3	60	-60	°		2018-01-16 10:34:03.988+08	2018-03-29 10:25:28.91+08	efab5ad9-0126-4a8f-a0b1-35e21e77c0f1	2	t	f
1394	angley	Y轴角度	Output	\N			3	60	-60	°		2018-01-16 10:34:03.992+08	2018-03-29 10:25:38.784+08	efab5ad9-0126-4a8f-a0b1-35e21e77c0f1	2	t	f
1396	anglex	X轴角度	Output	\N			3	90	-90	°		2018-01-16 10:34:04.399+08	2018-03-29 10:26:17.919+08	9cbbc8b3-67dd-400f-95c4-31f2f9814062	2	t	f
1399	anglex	X轴角度	Output	\N			3	5	-5	°		2018-01-16 11:50:37.242+08	2018-03-29 10:26:35.266+08	79df301c-8707-4e42-8546-2b6a77f017f8	2	t	f
1398	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 11:50:37.237+08	2018-03-29 10:26:40.275+08	79df301c-8707-4e42-8546-2b6a77f017f8	2	t	f
2182	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 13:53:35.944+08	2018-04-16 13:53:35.95+08	64cbf359-5e92-46a5-ac77-4ba6566e6539	2	t	f
2193	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:07.729+08	2018-04-16 15:46:07.729+08	c76c28b1-6041-44be-9ce9-39728d5de7c6	2	t	f
1402	temperature	温度	Output	\N			3	60	-25	℃		2018-01-17 17:52:43.808+08	2018-01-17 17:52:43.808+08	a84db97e-114a-4cbe-8e97-a18f398857a7	2	t	f
1403	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-01-17 17:52:43.812+08	2018-01-17 17:52:43.812+08	a84db97e-114a-4cbe-8e97-a18f398857a7	2	t	f
2005	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:02:45.747+08	2018-03-26 15:02:45.758+08	c77f3d16-3577-4f09-9c32-cc99cbb68966	2	t	f
1677	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-02-07 09:51:05.095+08	2018-02-07 09:51:05.103+08	511b86b5-3773-45aa-b518-9b29071357e1	2	t	f
1175	temperature	温度	Output	\N			2	60	-10	℃		2018-01-08 11:44:22.161+08	2018-03-12 09:43:21.234+08	0a8e8043-1c0a-48af-b8fd-68658e1b1b61	2	t	f
1836	wavelength	波长	Output	\N	\N	\N	9	9999999	-9999999	\N		2018-03-21 09:55:26.759+08	2018-03-21 09:55:26.766+08	eaa55b41-7d6a-48d3-8600-2b52eaad59a4	2	t	f
1404	physicalvalue	应变	Output	\N			3	4000	-4000	με		2018-01-17 17:52:43.815+08	2018-03-23 11:37:11.446+08	a84db97e-114a-4cbe-8e97-a18f398857a7	2	t	f
1760	physicalvalue	微应变	Output	\N			4	5000	-5000	με		2018-03-08 20:23:00.151+08	2018-03-23 16:21:32.94+08	99a6c9c1-0f57-45bc-a1ff-e98a56faef46	2	t	f
2011	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:10:13.192+08	2018-03-26 15:10:13.198+08	15598365-4401-4d31-9ebe-d0e46f6d4ce5	2	t	f
2013	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:14:21.759+08	2018-03-26 15:14:21.765+08	153dac9d-f2e3-4e56-8402-86df0c0ae5d9	2	t	f
2014	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:14:42.863+08	2018-03-26 15:14:42.869+08	153dac9d-f2e3-4e56-8402-86df0c0ae5d9	2	t	f
2027	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:28:42.703+08	2018-03-26 15:28:42.711+08	79fa3616-07da-47da-a26c-0faac333d89d	2	t	f
2030	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:37:06.115+08	2018-03-26 15:37:06.121+08	5c6f4070-1acc-4ac2-91d6-b7420f02a37b	2	t	f
1389	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:34:03.654+08	2018-03-29 10:24:58.414+08	9a5459f7-7499-41f5-87d2-e55b430a9134	2	t	f
1390	anglex	X轴角度	Output	\N			3	30	-30	°		2018-01-16 10:34:03.658+08	2018-03-29 10:25:03.653+08	9a5459f7-7499-41f5-87d2-e55b430a9134	2	t	f
1391	angley	Y轴角度	Output	\N			3	30	-30	°		2018-01-16 10:34:03.662+08	2018-03-29 10:25:08.065+08	9a5459f7-7499-41f5-87d2-e55b430a9134	2	t	f
1392	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:34:03.984+08	2018-03-29 10:25:24.156+08	efab5ad9-0126-4a8f-a0b1-35e21e77c0f1	2	t	f
1395	temperature	温度	Output	\N			3	85	-40	℃		2018-01-16 10:34:04.393+08	2018-03-29 10:26:08.211+08	9cbbc8b3-67dd-400f-95c4-31f2f9814062	2	t	f
2016	physicalvalue	荷载	Output	\N			4			kN		2018-03-26 15:15:54.772+08	2021-03-02 14:00:04.746+08	153dac9d-f2e3-4e56-8402-86df0c0ae5d9	2	t	f
1397	angley	Y轴角度	Output	\N			3	90	-90	°		2018-01-16 10:34:04.402+08	2018-03-29 10:26:13.095+08	9cbbc8b3-67dd-400f-95c4-31f2f9814062	2	t	f
1400	angley	Y轴角度	Output	\N			3	5	-5	°		2018-01-16 11:50:37.245+08	2018-03-29 10:26:44.675+08	79df301c-8707-4e42-8546-2b6a77f017f8	2	t	f
2194	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:07.734+08	2018-04-16 15:46:07.734+08	c76c28b1-6041-44be-9ce9-39728d5de7c6	2	t	f
2196	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 15:46:07.74+08	2018-04-16 15:46:07.74+08	c76c28b1-6041-44be-9ce9-39728d5de7c6	2	t	f
2197	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:07.749+08	2018-04-16 15:46:07.749+08	b4f14b5d-82f1-4ea1-b10f-3e38e552168c	2	t	f
2198	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:07.752+08	2018-04-16 15:46:07.752+08	b4f14b5d-82f1-4ea1-b10f-3e38e552168c	2	t	f
2275	f	应变	Output	\N	\N	\N	6	\N	\N	\N		2018-05-10 17:53:00.785+08	2018-05-10 17:53:00.785+08	60f374db-1336-4bb2-8dda-311955dca706	2	t	f
2195	physicalvalue	轴力	Output	\N			4	2000	-2000	kN		2018-04-16 15:46:07.737+08	2018-04-16 15:47:23.903+08	c76c28b1-6041-44be-9ce9-39728d5de7c6	2	t	f
1955	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:25:14.862+08	2018-03-26 14:25:14.866+08	ba74ef0e-3ec4-4203-9d65-17906c8f64d1	2	t	f
614	temperature	温度	Output	\N			3	60	-25	℃		2018-01-04 12:16:47.118+08	2018-01-04 14:07:15.52+08	58ccd139-9573-44ce-84f3-b043e0841c7a	2	t	f
1960	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:26:51.698+08	2018-03-26 14:26:51.704+08	7c9f78f3-049b-4f4f-86ce-ed4945136111	2	t	f
1967	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:28:22.868+08	2018-03-26 14:28:22.876+08	e4c071d1-afb9-4178-923b-18a37265ca86	2	t	f
1969	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:29:07.896+08	2018-03-26 14:29:07.901+08	8e3f282e-7428-497b-baa8-0ca8fd248e36	2	t	f
1040	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 16:34:08.81+08	2018-01-05 16:34:08.81+08	e087d664-23b6-4a21-b166-ac37688c0ec0	2	t	f
1043	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 16:34:09.777+08	2018-01-05 16:34:09.777+08	e82e8948-89ce-4dd5-89dd-1a3d319d351d	2	t	f
1042	temperature	温度	Output	\N			2			℃		2018-01-05 16:34:09.773+08	2018-01-05 16:35:28.527+08	e82e8948-89ce-4dd5-89dd-1a3d319d351d	2	t	f
1039	temperature	温度	Output	\N			2			℃		2018-01-05 16:34:08.805+08	2018-01-05 16:35:37.561+08	e087d664-23b6-4a21-b166-ac37688c0ec0	2	t	f
1621	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-24 11:32:24.999+08	2018-03-23 15:37:46.577+08	6fbdae8b-7c5b-4125-8df3-4d9bef10997a	2	t	f
1183	熟悉002	\N	Variable	\N	\N		\N	\N	\N	\N		2018-01-08 12:02:17.341+08	2018-01-08 12:02:17.341+08	06fcfe9a-4b1a-4db0-897b-05746cda4814	5	t	f
1347	cpuRate	cpu使用率	Variable	\N	\N		\N	\N	\N	%		2018-01-09 17:04:48.356+08	2018-01-09 17:04:48.364+08	d3a626a7-97a1-434d-a4ca-4a939af207b9	5	t	f
1401	3	3	Variable	\N	\N		\N	\N	\N	\N		2018-01-17 13:45:21.843+08	2018-01-17 13:45:21.843+08	cb86448f-61c6-408f-9e5f-06ba94979fdd	5	t	f
1970	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:29:24.082+08	2018-03-26 14:29:24.092+08	921508aa-21fc-41c6-b609-b6df5206ea7b	2	t	f
1281	phy	沉降	Output	\N			3	1000	0	mm		2018-01-08 17:33:37.635+08	2018-01-08 17:35:15.571+08	f846e46e-f9f4-4c0f-b697-4f3fc7d64f25	2	t	f
1282	phy	液位	Output	\N			3	100	0	m		2018-01-08 17:35:44.861+08	2018-01-08 17:39:57.22+08	f0df6373-949a-4e30-b883-f49611315df1	2	t	f
1974	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:30:31.657+08	2018-03-26 14:30:31.663+08	82a15a43-5463-4d67-88ea-0a816235bd70	2	t	f
1283	temp	温度	Output	\N			2	120	-40	℃		2018-01-08 17:48:20.629+08	2018-01-08 18:05:35.337+08	d6464eff-41e6-49fb-a8f9-7ebbe2e297e0	2	t	f
1300	voltage	电压	Output	\N	\N	\N	3	\N	\N	V		2018-01-08 19:28:51.352+08	2018-01-08 19:28:51.352+08	be68ca54-6bb8-4d57-8db7-6acdaa05c876	2	t	f
1302	stemp	传感器温度	Output	\N			2	\N	\N	℃		2018-01-08 19:28:51.362+08	2018-01-08 19:28:51.362+08	be68ca54-6bb8-4d57-8db7-6acdaa05c876	2	t	f
1303	ctemp	采集仪温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-08 19:28:51.366+08	2018-01-08 19:28:51.366+08	be68ca54-6bb8-4d57-8db7-6acdaa05c876	2	t	f
1301	cableforce	索力	Output	\N			3	\N	\N	KN		2018-01-08 19:28:51.358+08	2018-10-08 14:43:49.012+08	be68ca54-6bb8-4d57-8db7-6acdaa05c876	2	t	f
1539	physicalvalue	水压	Output	\N			4	2	0	MPa		2018-01-23 14:57:48.804+08	2018-03-23 15:43:22.701+08	10deb250-d676-4883-bfb1-2f557ec84677	2	t	f
1533	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:57:48.764+08	2018-03-23 15:43:32.826+08	10deb250-d676-4883-bfb1-2f557ec84677	2	t	f
1978	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:34:08.418+08	2018-03-26 14:34:08.422+08	f3879800-9585-4575-a261-25c1128fcaf9	2	t	f
1044	physicalvalue	应变	Output	\N			3	\N	\N	MPa		2018-01-05 16:34:09.781+08	2018-03-23 14:08:43.486+08	e82e8948-89ce-4dd5-89dd-1a3d319d351d	2	t	f
1041	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-01-05 16:34:08.814+08	2018-03-23 14:08:51.556+08	e087d664-23b6-4a21-b166-ac37688c0ec0	2	t	f
1638	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-24 11:34:49.477+08	2018-03-23 15:36:56.543+08	b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	2	t	f
1639	physicalvalue	位移	Output	\N			4	50	0	mm		2018-01-24 11:34:49.481+08	2018-03-23 15:37:04.727+08	b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	2	t	f
1986	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:36:31.868+08	2018-03-26 14:36:31.874+08	053f72a5-5576-48de-baa6-a2732ff863cc	2	t	f
1990	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:38:09.499+08	2018-03-26 14:38:09.504+08	f75af319-b305-463e-a3dc-78df902b61ef	2	t	f
1991	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:38:30.083+08	2018-03-26 14:38:30.089+08	f75af319-b305-463e-a3dc-78df902b61ef	2	t	f
1992	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:38:46.454+08	2018-03-26 14:38:46.461+08	6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	2	t	f
1995	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 14:39:14.253+08	2018-03-26 14:39:14.259+08	ea781b14-56d0-478f-991f-05c1ed5fdf93	2	t	f
2015	am	温度	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:15:27.87+08	2018-03-26 15:15:27.879+08	153dac9d-f2e3-4e56-8402-86df0c0ae5d9	2	t	f
2023	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:23:58.666+08	2018-03-26 15:23:58.673+08	b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	2	t	f
1604	pressure	压强	Output	\N			4	1	0	MPa		2018-01-24 11:18:54.123+08	2018-02-02 15:42:14.849+08	010ebb8f-5154-406a-a14c-cf57be327ecf	2	t	f
1532	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:57:48.756+08	2018-03-02 15:02:47.118+08	10deb250-d676-4883-bfb1-2f557ec84677	2	t	f
1618	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-24 11:32:24.989+08	2018-03-02 15:21:07.562+08	6fbdae8b-7c5b-4125-8df3-4d9bef10997a	2	t	f
2025	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:28:07.874+08	2018-03-26 15:28:07.88+08	79fa3616-07da-47da-a26c-0faac333d89d	2	t	f
1625	physicalvalue	沉降	Output	\N			3	200	0	mm		2018-01-24 11:32:25.01+08	2018-03-26 16:54:15.212+08	6fbdae8b-7c5b-4125-8df3-4d9bef10997a	2	t	f
1591	humidity	湿度	Output	\N			1	95	5	%RH		2018-01-23 17:19:51.377+08	2018-03-30 08:15:13.878+08	9f562e54-5c03-4b59-89cf-d12739821be5	2	t	f
2183	physicalvalue	轴力	Output	\N	\N	\N	4	1000	-1000	kN		2018-04-16 13:54:06.827+08	2018-04-16 13:54:06.841+08	64cbf359-5e92-46a5-ac77-4ba6566e6539	2	t	f
2184	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-04-16 13:54:58.453+08	2018-04-16 13:54:58.461+08	64cbf359-5e92-46a5-ac77-4ba6566e6539	2	t	f
2225	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:00:54.782+08	2018-04-16 16:00:54.782+08	ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	2	t	f
1507	physicalvalue	荷载	Output	\N			4			kN		2018-01-23 14:53:15.205+08	2021-03-02 13:44:56.852+08	cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	2	t	f
1451	value	压力	Output	\N			1			Kpa		2018-01-23 14:10:45.514+08	2020-11-11 17:22:43.819+08	986f4655-aea5-4e28-8507-f17ce74073cb	2	t	f
2226	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:00:54.785+08	2018-04-16 16:00:54.785+08	ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	2	t	f
2227	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:00:54.787+08	2018-04-16 16:00:54.787+08	ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	2	t	f
2229	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:00:54.796+08	2018-04-16 16:00:54.796+08	81b14e1d-4d14-4741-b581-31e3c543a0f9	2	t	f
1348	phy1	CO2浓度	Output	\N			3	300000	0	ppm		2018-01-09 17:40:39.784+08	2018-01-10 16:50:20.906+08	4211c278-30f5-4c53-ad81-d296e391b8db	2	t	f
1032	anglex	X轴角度	Output	\N			2	30	-30	°		2018-01-05 16:28:13.404+08	2018-03-23 17:52:06.809+08	e05b776c-d411-49c1-9775-9c02bf5dd41f	2	t	f
1962	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:27:07.863+08	2018-03-26 14:27:07.867+08	aca3e62f-b4ec-46cc-887a-563ce53b652a	2	t	f
1964	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:27:43.028+08	2018-03-26 14:27:43.035+08	bc373436-023b-41d4-9608-6a33bb926e80	2	t	f
1966	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:28:00.038+08	2018-03-26 14:28:00.042+08	e4c071d1-afb9-4178-923b-18a37265ca86	2	t	f
1968	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:28:41.493+08	2018-03-26 14:28:41.503+08	bc373436-023b-41d4-9608-6a33bb926e80	2	t	f
1184	oid	oid	Constant	\N	\N	0.1.2.32.0	\N	\N	\N	\N		2018-01-08 13:36:45.759+08	2018-01-08 13:36:45.759+08	0c0a3e16-95cf-42da-8d6c-09d28a68415d	5	t	f
1185	值	值	Output	\N	\N	\N	2	\N	\N			2018-01-08 13:36:45.765+08	2018-01-08 13:36:45.765+08	0c0a3e16-95cf-42da-8d6c-09d28a68415d	2	t	f
1186	输入变量1	输入变量1	Variable	\N	1,2,3,4	2	\N	\N	\N			2018-01-08 13:36:45.776+08	2018-01-08 13:36:45.776+08	28cd8b3b-ce84-4ece-b281-9c46bbac045c	4	t	f
1187	输入变量2	变量2	Variable	\N	\N	true	\N	\N	\N			2018-01-08 13:36:46.054+08	2018-01-08 13:36:46.054+08	28cd8b3b-ce84-4ece-b281-9c46bbac045c	3	t	f
1188	输出结果	输出结果	Output	\N	\N	\N	\N	\N	\N		数据结果json	2018-01-08 13:36:46.06+08	2018-01-08 13:36:46.06+08	28cd8b3b-ce84-4ece-b281-9c46bbac045c	5	t	f
1573	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 15:00:13.322+08	2018-03-23 15:39:50.357+08	3d52b0e5-39ac-4e19-99b4-7bd96b15888a	2	t	f
1579	physicalvalue	水压	Output	\N			4	0.2	0	MPa		2018-01-23 15:00:13.368+08	2018-03-23 15:39:57.856+08	3d52b0e5-39ac-4e19-99b4-7bd96b15888a	2	t	f
1284	humi	湿度	Output	\N			2	100	0	%		2018-01-08 17:48:47.288+08	2018-01-08 18:05:18.36+08	d6464eff-41e6-49fb-a8f9-7ebbe2e297e0	2	t	f
1571	physicalvalue	水压	Output	\N			4	0.4	0	MPa		2018-01-23 15:00:12.73+08	2018-03-23 15:40:16.542+08	028d4dfc-6b2c-40e4-9960-97c813408030	2	t	f
1565	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 15:00:12.716+08	2018-03-23 15:40:22.561+08	028d4dfc-6b2c-40e4-9960-97c813408030	2	t	f
1557	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 15:00:12.515+08	2018-03-23 15:40:35.739+08	2db014d8-3273-467f-b938-8e6b9c22031e	2	t	f
1563	physicalvalue	水压	Output	\N			4	0.6	0	MPa		2018-01-23 15:00:12.538+08	2018-03-23 15:40:43.732+08	2db014d8-3273-467f-b938-8e6b9c22031e	2	t	f
1547	physicalvalue	水压	Output	\N			4	1	0	MPa		2018-01-23 15:00:11.26+08	2018-03-23 15:43:06.895+08	d36bb0ee-6c5c-4778-bc5b-5e03db483152	2	t	f
51	humidity	湿度	Output	\N			2	100	0	%RH		2017-08-26 15:51:32.557+08	2018-03-23 16:01:17.657+08	aa48a11a-b276-4670-bc85-8c69368a7def	2	t	f
1037	humidity	湿度	Output	\N			2	100	0	%RH		2018-01-05 16:29:20.584+08	2018-03-23 17:03:42.591+08	2fa52a8c-6ff8-4131-b74d-761173132a03	2	t	f
1038	temperature	温度	Output	\N			2	120	-40	℃		2018-01-05 16:29:20.589+08	2018-03-23 17:04:01.588+08	2fa52a8c-6ff8-4131-b74d-761173132a03	2	t	f
1033	temperature	温度	Output	\N			2	70	-25	℃		2018-01-05 16:28:13.409+08	2018-03-23 17:52:16.163+08	e05b776c-d411-49c1-9775-9c02bf5dd41f	2	t	f
1034	angley	Y轴角度	Output	\N			2	30	-30	°		2018-01-05 16:28:13.414+08	2018-03-23 17:52:35.728+08	e05b776c-d411-49c1-9775-9c02bf5dd41f	2	t	f
1029	temperature	温度	Output	\N			2	70	-25	℃		2018-01-05 16:27:59.076+08	2018-03-23 17:58:04.248+08	824dfcd1-4745-4087-aa8e-237d72715c4d	2	t	f
1030	anglex	X轴角度	Output	\N			2	30	-30	°		2018-01-05 16:27:59.081+08	2018-03-23 17:58:16.622+08	824dfcd1-4745-4087-aa8e-237d72715c4d	2	t	f
1031	angley	Y轴角度	Output	\N			2	30	-30	°		2018-01-05 16:27:59.086+08	2018-03-23 17:58:22.779+08	824dfcd1-4745-4087-aa8e-237d72715c4d	2	t	f
1027	physicalvalue	应变	Output	\N			4	1500	-1500	με		2018-01-05 16:26:30.116+08	2018-03-26 10:52:18.614+08	7721177a-8610-4836-82c5-d08d05a6be97	2	t	f
1980	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:34:43.84+08	2018-03-26 14:34:43.847+08	614819ae-798a-406e-befe-fe6749ac5536	2	t	f
1981	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:35:01.571+08	2018-03-26 14:35:01.58+08	f4d2673b-f6ac-4be7-9068-95a68442426e	2	t	f
2004	physicalvalue	轴力	Output	\N	\N	\N	4	2000	-2000	KN		2018-03-26 14:46:55.18+08	2018-03-26 14:46:55.187+08	794d13af-907b-4165-bd7d-5c9d4e3410f4	2	t	f
2010	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:09:55.285+08	2018-03-26 15:09:55.292+08	15598365-4401-4d31-9ebe-d0e46f6d4ce5	2	t	f
2018	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:18:24.55+08	2018-03-26 15:18:24.561+08	88e6acfa-2714-4821-9ff8-c5d96a23ce68	2	t	f
2022	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:23:13.32+08	2018-03-26 15:23:13.329+08	b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	2	t	f
615	physicalvalue	应力	Output	\N			3	500	0	kN		2018-01-04 12:18:28.773+08	2018-12-28 15:38:02.316+08	58ccd139-9573-44ce-84f3-b043e0841c7a	2	t	f
2031	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:37:21.581+08	2018-03-26 15:37:21.59+08	5c6f4070-1acc-4ac2-91d6-b7420f02a37b	2	t	f
1572	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 15:00:13.318+08	2018-03-02 14:49:52.099+08	3d52b0e5-39ac-4e19-99b4-7bd96b15888a	2	t	f
2201	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:07.885+08	2018-04-16 15:46:07.885+08	3a873f72-4f94-4141-94f5-023d34b61d1f	2	t	f
1564	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 15:00:12.714+08	2018-03-02 14:51:35.155+08	028d4dfc-6b2c-40e4-9960-97c813408030	2	t	f
167	rainfall	雨量	Output	\N			1			mm/h		2017-09-12 17:44:48.577+08	2018-04-03 09:23:21.8+08	b71b35e9-7756-46e1-84c8-d8c092029638	2	t	f
1556	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 15:00:12.512+08	2018-03-02 14:55:42.21+08	2db014d8-3273-467f-b938-8e6b9c22031e	2	t	f
2202	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:07.889+08	2018-04-16 15:46:07.889+08	3a873f72-4f94-4141-94f5-023d34b61d1f	2	t	f
2118	pmstandard	标况pm10	Output	\N			3	\N	\N	ug/m³		2018-04-03 11:42:35.781+08	2018-04-19 13:40:44.089+08	ca247144-4f2b-40e9-a2a9-de78942565e5	2	t	f
2200	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-04-16 15:46:07.759+08	2018-04-16 15:46:07.759+08	b4f14b5d-82f1-4ea1-b10f-3e38e552168c	2	t	f
2204	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 15:46:07.896+08	2018-04-16 15:46:07.896+08	3a873f72-4f94-4141-94f5-023d34b61d1f	2	t	f
2205	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:07.904+08	2018-04-16 15:46:07.904+08	a5c1d727-4820-4d7b-b758-dea1af104b33	2	t	f
2206	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:07.907+08	2018-04-16 15:46:07.907+08	a5c1d727-4820-4d7b-b758-dea1af104b33	2	t	f
2208	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-04-16 15:46:07.914+08	2018-04-16 15:46:07.914+08	a5c1d727-4820-4d7b-b758-dea1af104b33	2	t	f
2203	physicalvalue	轴力	Output	\N			4	3000	-3000	kN		2018-04-16 15:46:07.892+08	2018-04-16 15:49:27.602+08	3a873f72-4f94-4141-94f5-023d34b61d1f	2	t	f
2207	physicalvalue	轴力	Output	\N			4	3000	-3000	kN		2018-04-16 15:46:07.911+08	2018-04-16 15:49:38.727+08	a5c1d727-4820-4d7b-b758-dea1af104b33	2	t	f
1768	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-13 23:14:49.152+08	2018-03-13 23:14:49.16+08	0d251d94-b1b6-4772-8066-2ae317277574	2	t	f
664	changedx	X轴位移	Output	\N			3	\N	\N	mm		2018-01-05 11:06:57.953+08	2018-03-29 15:13:50.269+08	2766d297-6127-449f-b73f-089b38e01267	2	t	f
1349	phy1	风速	Output	\N	\N	\N	2	30	0	m/s		2018-01-09 17:53:52.131+08	2018-01-09 17:53:52.138+08	d3ea47f8-1472-484d-a6fc-411e6637a71b	2	t	f
1773	analog	模拟量	Output	\N			3	\N	\N	mA		2018-03-14 08:24:49.343+08	2018-03-14 08:24:49.343+08	19db0824-d40d-49ce-a3e8-b63510dcbb7a	2	t	f
639	physicalvlaue	沉降	Output	\N			3			mm		2018-01-04 12:28:18.024+08	2018-06-07 13:37:52.232+08	d6b914e8-a4e6-443c-a9f4-7fb5eb5148be	2	t	f
668	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:06:58.808+08	2018-03-22 09:31:40.096+08	2f00a22f-2cdc-46e5-94b8-a4c599c0618d	2	t	f
646	physicalvalue	应变	Output	\N			3	4000	0	με		2018-01-04 13:52:09.885+08	2018-03-22 14:21:52.491+08	a2e1b758-5210-49f0-986e-78305b6cef20	2	t	f
1036	temperature	温度	Output	\N			2	120	-40	℃		2018-01-05 16:29:05.838+08	2018-03-23 15:36:19.476+08	26976155-0f82-42c9-962d-6d8f206f40d1	2	t	f
1473	am	幅值	Output	\N			3			mv		2018-01-23 14:46:19.201+08	2018-03-02 14:11:05.85+08	f1ab939a-33ee-4a01-8373-13c941cbce03	2	t	f
1465	am	幅值	Output	\N			3			mv		2018-01-23 14:46:19.002+08	2018-03-02 14:12:08.374+08	3436c379-cac3-4baf-8a3f-7fa4b1fe6188	2	t	f
665	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:06:58.402+08	2018-03-22 09:32:09.166+08	57f3c9e5-43c5-42ce-92e4-a67bf6f28452	2	t	f
644	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-01-04 13:49:27.785+08	2018-01-04 13:49:27.801+08	a2e1b758-5210-49f0-986e-78305b6cef20	2	t	f
645	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-01-04 13:50:07.608+08	2018-01-04 13:50:07.613+08	a2e1b758-5210-49f0-986e-78305b6cef20	2	t	f
657	physicalvalue	应变	Output	\N			3	3000	0	με		2018-01-05 10:51:34.761+08	2018-03-23 11:00:57.115+08	9c9bf6ea-e390-4af6-9eb7-64fdd8325887	2	t	f
647	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-01-04 14:02:41.795+08	2018-01-04 14:02:41.803+08	cd26103f-0538-43bd-9bbd-a8b3b84e10ff	2	t	f
1297	cableforce	索力	Output	\N			3	\N	\N	KN		2018-01-08 19:23:48.7+08	2018-10-08 14:43:32.107+08	978ae9f7-08b3-4e87-add1-abccd6d759d0	2	t	f
648	temperature	温度	Output	\N			3	90	-30	℃		2018-01-04 14:04:03.979+08	2018-01-04 14:05:57.819+08	cd26103f-0538-43bd-9bbd-a8b3b84e10ff	2	t	f
656	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 10:51:34.755+08	2018-03-21 14:10:01.937+08	9c9bf6ea-e390-4af6-9eb7-64fdd8325887	2	t	f
672	physicalvalue	应变	Output	\N			3	50000	0	με		2018-01-05 11:07:00.028+08	2018-03-23 11:04:18.473+08	9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735	2	t	f
658	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 10:51:34.767+08	2018-01-05 10:51:34.767+08	9c9bf6ea-e390-4af6-9eb7-64fdd8325887	2	t	f
675	physicalvalue	裂缝	Output	\N			3	250	0	mm		2018-01-05 11:07:00.15+08	2018-03-23 11:04:29.953+08	11c69c81-4c8e-49c2-bde6-92d68c3d8092	2	t	f
666	physicalvalue	应变	Output	\N			3	2500	0	με		2018-01-05 11:06:58.407+08	2018-03-23 11:14:57.315+08	57f3c9e5-43c5-42ce-92e4-a67bf6f28452	2	t	f
669	physicalvalue	应变	Output	\N			3	2500	0	με		2018-01-05 11:06:58.812+08	2018-03-23 11:15:07.505+08	2f00a22f-2cdc-46e5-94b8-a4c599c0618d	2	t	f
1295	ctemp	采集仪温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-08 19:23:48.689+08	2018-01-08 19:23:48.689+08	978ae9f7-08b3-4e87-add1-abccd6d759d0	2	t	f
667	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:06:58.411+08	2018-01-05 11:06:58.411+08	57f3c9e5-43c5-42ce-92e4-a67bf6f28452	2	t	f
670	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:06:58.817+08	2018-01-05 11:06:58.817+08	2f00a22f-2cdc-46e5-94b8-a4c599c0618d	2	t	f
673	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:00.03+08	2018-01-05 11:07:00.03+08	9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735	2	t	f
663	anglex	X轴角度	Output	\N			3	10	-10	°		2018-01-05 11:06:57.948+08	2018-03-29 15:14:02.885+08	2766d297-6127-449f-b73f-089b38e01267	2	t	f
1035	humidity	湿度	Output	\N			2	100	0	%RH		2018-01-05 16:29:05.833+08	2018-03-23 15:36:27.2+08	26976155-0f82-42c9-962d-6d8f206f40d1	2	t	f
1474	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-23 14:46:19.203+08	2018-03-23 15:48:26.542+08	f1ab939a-33ee-4a01-8373-13c941cbce03	2	t	f
1467	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:46:19.007+08	2018-03-26 14:40:35.73+08	3436c379-cac3-4baf-8a3f-7fa4b1fe6188	2	t	f
1464	physicalvalue	轴力	Output	\N			4	1000	-1000	kN		2018-01-23 14:46:19+08	2018-03-23 15:49:04.22+08	3436c379-cac3-4baf-8a3f-7fa4b1fe6188	2	t	f
671	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:00.026+08	2018-01-05 11:24:57.428+08	9b2fd7d2-690b-4c40-a7f9-a52bdf8c1735	2	t	f
1837	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2018-03-23 16:17:52.535+08	2018-03-23 16:17:52.541+08	a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d	2	t	f
674	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:00.146+08	2018-01-05 11:26:39.94+08	11c69c81-4c8e-49c2-bde6-92d68c3d8092	2	t	f
1774	physicalvalue	液位	Output	\N			3	\N	\N	mm		2018-03-14 08:24:49.349+08	2018-03-29 17:31:44.5+08	19db0824-d40d-49ce-a3e8-b63510dcbb7a	2	t	f
1051	value1	应变	Output	\N			3	3000	-3000	με		2018-01-05 18:09:59.831+08	2018-01-08 07:36:48.471+08	2578ea6c-aef6-4458-b889-dc7a102143af	2	t	f
1296	stemp	传感器温度	Output	\N			2	\N	\N	℃		2018-01-08 19:23:48.695+08	2018-01-08 19:23:48.695+08	978ae9f7-08b3-4e87-add1-abccd6d759d0	2	t	f
1050	value1	水压	Output	\N			3	0.3	0	MPa		2018-01-05 17:57:19.74+08	2018-01-08 07:39:06.768+08	c66f2638-5449-4aad-b566-ffff92086b82	2	t	f
1841	angley	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2018-03-23 16:19:29.976+08	2018-03-23 16:19:29.982+08	d64be76d-e00e-4984-bd5e-6c6be4ccd7d3	2	t	f
1843	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2018-03-23 16:20:23.238+08	2018-03-23 16:20:23.243+08	d64be76d-e00e-4984-bd5e-6c6be4ccd7d3	2	t	f
1965	physicalvalue	应力	Output	\N	\N	\N	4	1	0	MPa		2018-03-26 14:27:55.43+08	2018-03-26 14:27:55.434+08	21a71013-2a7f-46e0-8ced-77ada77b1342	2	t	f
1195	data1	温度	Output	\N			2	50	-50	℃		2018-01-08 13:46:38.369+08	2018-01-08 13:50:04.813+08	5b6bf70d-354f-4930-ac36-534e1a992440	2	t	f
1199	data2	土壤水分	Output	\N			2	100	0	%RH		2018-01-08 13:46:38.385+08	2018-01-08 13:51:18.445+08	5b6bf70d-354f-4930-ac36-534e1a992440	2	t	f
1298	voltage	电压	Output	\N	\N	\N	3	\N	\N	V		2018-01-08 19:23:48.704+08	2018-01-08 19:23:48.704+08	978ae9f7-08b3-4e87-add1-abccd6d759d0	2	t	f
1466	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:46:19.004+08	2018-03-26 14:40:28.14+08	3436c379-cac3-4baf-8a3f-7fa4b1fe6188	2	t	f
1287	physicalvalue	温度	Output	\N			2	80	-40	℃		2018-01-08 18:36:03.337+08	2018-03-29 11:39:07.083+08	f07e4888-28ea-482b-bbe3-a61929f52026	2	t	f
676	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:00.153+08	2018-01-05 11:07:00.153+08	11c69c81-4c8e-49c2-bde6-92d68c3d8092	2	t	f
679	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:00.283+08	2018-01-05 11:07:00.283+08	a5f188ab-9f47-44f3-a454-2b85f0aaa7ce	2	t	f
680	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-05 11:07:01.131+08	2018-01-05 11:07:01.131+08	90e33926-b804-46d8-9c62-0fad9b87edab	2	t	f
682	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:01.141+08	2018-01-05 11:07:01.141+08	90e33926-b804-46d8-9c62-0fad9b87edab	2	t	f
700	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:04.221+08	2018-01-05 11:07:04.221+08	571ad024-5982-4fc7-b01e-684b112a8092	2	t	f
1480	physicalvalue	轴力	Output	\N			4	3000	-3000	kN		2018-01-23 14:46:19.423+08	2018-03-23 15:47:48.539+08	53649022-343c-4129-b626-9dbf8c660e28	2	t	f
677	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:00.274+08	2018-01-05 11:37:43.863+08	a5f188ab-9f47-44f3-a454-2b85f0aaa7ce	2	t	f
1838	anglex	X轴角度	Output	\N	\N	\N	2	30	-30	°		2018-03-23 16:18:23.285+08	2018-03-23 16:18:23.291+08	a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d	2	t	f
698	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:04.202+08	2018-01-05 11:59:07.607+08	571ad024-5982-4fc7-b01e-684b112a8092	2	t	f
1046	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 16:50:30.003+08	2018-01-05 16:50:30.003+08	7be90de6-78ea-44a4-8896-d18f9b9ab89a	2	t	f
1047	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 16:50:30.008+08	2018-01-05 16:50:30.008+08	7be90de6-78ea-44a4-8896-d18f9b9ab89a	2	t	f
1350	phy1	湿度	Output	\N	\N	\N	3	100	0	%RH		2018-01-10 16:34:37.402+08	2018-01-10 16:34:37.41+08	5aa08735-2f16-4ca2-b9a3-dfbf95e1153d	2	t	f
1770	physicalvalue	液位	Output	\N			3	\N	\N	mm		2018-03-14 00:35:41.201+08	2018-04-20 13:43:02.818+08	a318fba6-92d9-4d50-8a3a-1662c9b24fb9	2	t	f
1844	pressure	压强	Output	\N			5	500	0	KPa		2018-03-23 16:35:47.26+08	2018-06-29 10:30:32.667+08	95211a4e-66c1-46be-b7cd-9edc8ac63621	2	t	f
678	physicalvalue	位移	Output	\N			3	300	0	mm		2018-01-05 11:07:00.278+08	2018-03-23 11:04:41.488+08	a5f188ab-9f47-44f3-a454-2b85f0aaa7ce	2	t	f
1209	data2	风速	Output	\N			2	100	0	m/s		2018-01-08 13:55:43.524+08	2018-01-08 14:00:42.733+08	a8d7c27f-35f9-4a65-943b-afa42ba34e5a	2	t	f
1210	data1	风向	Output	\N			2	360	0	°		2018-01-08 14:03:13.657+08	2018-01-08 14:03:13.657+08	45dc0871-e9be-4b68-bc6d-76d80581e8dc	2	t	f
1212	data1	空气温度	Output	\N			2	125	-40	℃		2018-01-08 14:10:26.896+08	2018-01-08 14:11:46.106+08	d2d71857-97dc-4969-92f1-e380d0ad4bf9	2	t	f
1213	data2	空气湿度	Output	\N			2	100	0	%RH		2018-01-08 14:10:26.9+08	2018-01-08 14:11:51.291+08	d2d71857-97dc-4969-92f1-e380d0ad4bf9	2	t	f
1289	voltage	电压	Output	\N	\N	\N	3	\N	\N	V		2018-01-08 18:44:26.299+08	2018-01-08 18:44:26.315+08	0b714d0d-91d6-4e91-940d-189bec077752	2	t	f
681	physicalvalue	压力	Output	\N			3	0.17	0	MPa		2018-01-05 11:07:01.136+08	2018-03-23 11:04:52.593+08	90e33926-b804-46d8-9c62-0fad9b87edab	2	t	f
1426	angley	Y轴角度	Output	\N			3	10	-10	°		2018-01-18 15:22:34.526+08	2018-03-29 10:27:02.088+08	ef4bfc5b-4560-487e-9e27-4a3249da9ae3	2	t	f
1427	anglex	X轴角度	Output	\N			3	30	-30	°		2018-01-18 15:22:34.702+08	2018-03-29 10:27:27.846+08	73fc848a-0c95-4953-a162-0679cf2a8586	2	t	f
1428	angley	Y轴角度	Output	\N			3	30	-30	°		2018-01-18 15:22:34.707+08	2018-03-29 10:27:31.929+08	73fc848a-0c95-4953-a162-0679cf2a8586	2	t	f
1429	anglex	X轴角度	Output	\N			3	60	-60	°		2018-01-18 15:22:34.882+08	2018-03-29 10:27:39.38+08	1e00c4ae-1aa0-4767-bc51-c7b09621466d	2	t	f
1430	angley	Y轴角度	Output	\N			3	60	-60	°		2018-01-18 15:22:34.887+08	2018-03-29 10:27:43.074+08	1e00c4ae-1aa0-4767-bc51-c7b09621466d	2	t	f
1431	anglex	X轴角度	Output	\N			3	90	-90	°		2018-01-18 15:22:35.043+08	2018-03-29 10:27:55.154+08	78740935-2863-41f7-ba2b-ed0d3d55d5c5	2	t	f
1432	angley	Y轴角度	Output	\N			3	90	-90	°		2018-01-18 15:22:35.048+08	2018-03-29 10:27:59.612+08	78740935-2863-41f7-ba2b-ed0d3d55d5c5	2	t	f
1769	physicalvalue	应变	Output	\N			3	\N	\N	ε		2018-03-13 23:15:52.409+08	2018-03-29 15:43:09.478+08	0d251d94-b1b6-4772-8066-2ae317277574	2	t	f
1475	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-23 14:46:19.206+08	2018-01-23 14:46:19.206+08	f1ab939a-33ee-4a01-8373-13c941cbce03	2	t	f
699	physicalvalue	沉降	Output	\N			3	250	0	mm		2018-01-05 11:07:04.208+08	2018-03-23 11:16:30.78+08	571ad024-5982-4fc7-b01e-684b112a8092	2	t	f
1045	physicalvalue	应变	Output	\N			3	\N	\N	KN		2018-01-05 16:50:29.997+08	2018-03-23 14:08:26.542+08	7be90de6-78ea-44a4-8896-d18f9b9ab89a	2	t	f
1501	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:53:15.183+08	2018-03-23 15:45:54.301+08	cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	2	t	f
1488	physicalvalue	轴力	Output	\N			4	4000	-4000	kN		2018-01-23 14:46:19.629+08	2018-03-23 15:47:03.496+08	4f360434-b54d-41c3-8163-4df050a68350	2	t	f
1483	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:46:19.431+08	2018-03-26 15:04:45.783+08	53649022-343c-4129-b626-9dbf8c660e28	2	t	f
1842	anglex	X轴角度	Output	\N	\N	\N	2	30	-30	°		2018-03-23 16:19:58.693+08	2018-03-23 16:19:58.699+08	d64be76d-e00e-4984-bd5e-6c6be4ccd7d3	2	t	f
1839	temperature	温度	Output	\N			2	70	-25	℃		2018-03-23 16:18:32.588+08	2018-03-23 16:18:48.618+08	0183e607-ae45-461a-84be-4b7fb9ef5951	2	t	f
1840	angley	Y轴角度	Output	\N			2	30	-30	°		2018-03-23 16:18:49.607+08	2018-03-23 16:18:57.387+08	a3a7688c-d8f4-4315-aeb1-e78ecddf9b7d	2	t	f
1489	am	幅值	Output	\N			3			mv		2018-01-23 14:46:19.631+08	2018-03-02 14:08:11.071+08	4f360434-b54d-41c3-8163-4df050a68350	2	t	f
1481	am	幅值	Output	\N			3			mv		2018-01-23 14:46:19.425+08	2018-03-02 14:09:56.713+08	53649022-343c-4129-b626-9dbf8c660e28	2	t	f
1506	am	幅值	Output	\N			3			mv		2018-01-23 14:53:15.201+08	2018-03-02 14:34:52.983+08	cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	2	t	f
1500	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:53:15.178+08	2018-03-02 14:38:28.199+08	cbc0a4f0-8c2c-4215-9210-4f81c6de6fd9	2	t	f
1299	humidity	湿度	Output	\N			2	100	0	%		2018-01-08 19:24:18.061+08	2018-12-14 17:51:34.406+08	a7e720b6-f0ca-4a8d-aabd-18b8c8825303	2	t	f
1982	physicalvalue	应力	Output	\N	\N	\N	4	2	0	MPa		2018-03-26 14:35:05.955+08	2018-03-26 14:35:05.96+08	f3879800-9585-4575-a261-25c1128fcaf9	2	t	f
1983	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:35:25.781+08	2018-03-26 14:35:25.789+08	f4d2673b-f6ac-4be7-9068-95a68442426e	2	t	f
1994	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-03-26 14:39:11.607+08	2018-03-26 14:39:11.615+08	8693e382-e7e6-4efa-8583-d0251cb0b360	2	t	f
1997	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 14:39:37.883+08	2018-03-26 14:39:37.888+08	ea781b14-56d0-478f-991f-05c1ed5fdf93	2	t	f
2000	physicalvalue	轴力	Output	\N	\N	\N	4	1000	-1000	KN		2018-03-26 14:40:18.15+08	2018-03-26 14:40:18.162+08	ea781b14-56d0-478f-991f-05c1ed5fdf93	2	t	f
1482	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:46:19.428+08	2018-03-26 15:04:41.608+08	53649022-343c-4129-b626-9dbf8c660e28	2	t	f
1052	value2	温度	Output	\N	\N	\N	2	80	-20	℃		2018-01-08 07:36:33.205+08	2018-01-08 07:36:33.217+08	2578ea6c-aef6-4458-b889-dc7a102143af	2	t	f
694	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:03.209+08	2018-01-05 11:07:03.209+08	5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f	2	t	f
1989	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-03-26 14:37:47.839+08	2018-03-26 14:37:47.845+08	6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	2	t	f
692	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:03.195+08	2018-01-05 11:52:46.444+08	5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f	2	t	f
1056	value1	X轴角度	Output	\N			2	30	-30	°		2018-01-08 08:03:31.856+08	2018-01-08 08:05:19.734+08	8b4d52b7-47ef-4940-9b4e-7353a2a62765	2	t	f
1055	value2	Y轴角度	Output	\N			2	30	-30	°		2018-01-08 08:03:31.851+08	2018-01-08 08:05:43.842+08	8b4d52b7-47ef-4940-9b4e-7353a2a62765	2	t	f
1351	phy1	大气压力	Output	\N	\N	\N	3	1100	300	hPa		2018-01-10 16:38:09.801+08	2018-01-10 16:38:09.817+08	c71648f4-8926-4408-b731-937ce2b9db90	2	t	f
1291	ctemp	采集仪温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-08 18:45:56.79+08	2018-01-08 18:45:56.796+08	0b714d0d-91d6-4e91-940d-189bec077752	2	t	f
1290	stemp	传感器温度	Output	\N			2	\N	\N	℃		2018-01-08 18:45:26.953+08	2018-01-08 18:46:03.687+08	0b714d0d-91d6-4e91-940d-189bec077752	2	t	f
1293	cableforce	索力	Output	\N	\N	\N	3	\N	\N	KN		2018-01-08 19:09:03.952+08	2018-01-08 19:09:03.959+08	0b714d0d-91d6-4e91-940d-189bec077752	2	t	f
1490	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:46:19.634+08	2019-11-26 10:17:26.538+08	4f360434-b54d-41c3-8163-4df050a68350	2	t	f
1493	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:49:59.724+08	2018-03-02 14:38:01.372+08	bc03541b-fb13-44ff-8cc4-9419e81554f3	2	t	f
2302	angley	Y轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-05-29 14:51:48.744+08	2018-05-29 14:51:48.744+08	9517f5d2-02f2-47c6-b688-35e0efa0f25f	2	t	f
2007	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:03:17.896+08	2018-03-26 15:03:17.9+08	c77f3d16-3577-4f09-9c32-cc99cbb68966	2	t	f
693	physicalvalue	压力	Output	\N			3	3	0	MPa		2018-01-05 11:07:03.201+08	2018-03-23 11:00:29.584+08	5fa4fdf3-0b6f-4b2c-9015-3ec3e23f909f	2	t	f
1629	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-24 11:33:34.523+08	2018-03-23 15:37:24.21+08	4e508627-863b-46fa-9454-a074ef2fbe8a	2	t	f
2211	physicalvalue	轴力	Output	\N			4	4000	-4000	kN		2018-04-16 15:46:12.381+08	2018-04-16 15:51:38.338+08	2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	2	t	f
1617	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-24 11:30:26.78+08	2018-03-23 15:38:24.078+08	1a664a1a-b5f1-4e75-916f-21bc94749d0e	2	t	f
1609	temperature	温度	Output	\N			2	125	-55	℃		2018-01-24 11:26:28.349+08	2018-03-23 15:38:43.537+08	6b9cf407-77e8-47af-b3c7-571606764785	2	t	f
1555	physicalvalue	水压	Output	\N			4	0.8	0	MPa		2018-01-23 15:00:11.868+08	2018-03-23 15:41:32.084+08	c631534f-fef5-4db4-b5c2-e7cb081db305	2	t	f
2019	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:18:40.969+08	2018-03-26 15:18:40.976+08	88e6acfa-2714-4821-9ff8-c5d96a23ce68	2	t	f
2276	fre	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-05-10 17:53:31.357+08	2018-05-10 17:53:31.385+08	60f374db-1336-4bb2-8dda-311955dca706	2	t	f
1549	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 15:00:11.845+08	2018-03-23 15:42:33.686+08	c631534f-fef5-4db4-b5c2-e7cb081db305	2	t	f
1472	physicalvalue	轴力	Output	\N			4	2000	-2000	kN		2018-01-23 14:46:19.198+08	2018-03-23 15:48:36.538+08	f1ab939a-33ee-4a01-8373-13c941cbce03	2	t	f
1494	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:49:59.73+08	2018-03-23 16:34:49.744+08	bc03541b-fb13-44ff-8cc4-9419e81554f3	2	t	f
2020	physicalvalue	荷载	Output	\N	\N	\N	4	100	-100	t		2018-03-26 15:19:04.731+08	2018-03-26 15:19:04.738+08	88e6acfa-2714-4821-9ff8-c5d96a23ce68	2	t	f
1612	physicalvalue	沉降	Output	\N			3	100	0	mm		2018-01-24 11:30:26.768+08	2018-03-26 16:46:22.883+08	1a664a1a-b5f1-4e75-916f-21bc94749d0e	2	t	f
1633	physicalvalue	位移	Output	\N			3	100	0	mm		2018-01-24 11:33:34.535+08	2018-03-26 17:02:29.437+08	4e508627-863b-46fa-9454-a074ef2fbe8a	2	t	f
2120	anglex	X轴角度	Output	\N	\N	\N	2	40	-40	°		2018-04-03 11:53:08.697+08	2018-04-03 11:53:08.697+08	855e5472-f1f9-4119-818a-337b5f302028	2	t	f
2121	angley	Y轴角度	Output	\N	\N	\N	2	40	-40	°		2018-04-03 11:53:08.705+08	2018-04-03 11:53:08.705+08	855e5472-f1f9-4119-818a-337b5f302028	2	t	f
1607	pressure	压强	Output	\N			5	0.5	0	MPa		2018-01-24 11:19:10.116+08	2018-02-02 15:41:04.202+08	9a25cd7a-d145-4a19-95a1-bae3a0cb0260	2	t	f
1605	pressure	压强	Output	\N			4	2	0	MPa		2018-01-24 11:19:02.109+08	2018-02-02 15:41:58.396+08	a4dea266-bdd4-4ec6-8334-565d7cdc947c	2	t	f
2122	anglez	Z轴角度	Output	\N	\N	\N	2	40	-40	°		2018-04-03 11:53:08.709+08	2018-04-03 11:53:08.709+08	855e5472-f1f9-4119-818a-337b5f302028	2	t	f
1548	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 15:00:11.838+08	2018-03-02 14:58:40.948+08	c631534f-fef5-4db4-b5c2-e7cb081db305	2	t	f
2209	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:12.374+08	2018-04-16 15:46:12.374+08	2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	2	t	f
1614	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-24 11:30:26.773+08	2018-03-02 15:18:53.406+08	1a664a1a-b5f1-4e75-916f-21bc94749d0e	2	t	f
2210	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:12.378+08	2018-04-16 15:46:12.378+08	2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	2	t	f
1626	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-24 11:33:34.512+08	2018-03-02 15:22:23.957+08	4e508627-863b-46fa-9454-a074ef2fbe8a	2	t	f
2212	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 15:46:12.385+08	2018-04-16 15:46:12.385+08	2a88ded3-16cd-4e38-bbb3-ed48fe6d5efc	2	t	f
2213	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 15:46:12.393+08	2018-04-16 15:46:12.393+08	a2fa85fa-2e1a-427e-99f2-595757cb505b	2	t	f
2214	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 15:46:12.396+08	2018-04-16 15:46:12.396+08	a2fa85fa-2e1a-427e-99f2-595757cb505b	2	t	f
2216	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-04-16 15:46:12.403+08	2018-04-16 15:46:12.403+08	a2fa85fa-2e1a-427e-99f2-595757cb505b	2	t	f
2215	physicalvalue	轴力	Output	\N			4	4000	-4000	kN		2018-04-16 15:46:12.4+08	2018-04-16 15:51:49.643+08	a2fa85fa-2e1a-427e-99f2-595757cb505b	2	t	f
1588	distance	距离	Output	\N			3	8000	50	mm		2018-01-23 15:32:11.054+08	2018-04-16 17:22:24.684+08	9486f04c-16ee-42bb-9f4b-485632a1857e	2	t	f
2277	x	x方向角度	Output	\N			6	30	-30	\N		2018-05-10 17:55:50.41+08	2018-05-10 17:57:02.857+08	5d8abf22-14e4-474f-9a3a-11a4976643ee	2	t	f
2279	physicalvalue	X轴角度	Output	\N			3	\N	\N	°		2018-05-11 10:41:15.502+08	2018-05-11 10:42:29.948+08	ec17d151-95d9-4c87-a5c9-799089626714	2	t	f
2307	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-05-30 20:46:49.727+08	2018-05-30 20:46:49.734+08	d1f3cdb1-95b4-4970-90b8-cdb6c2201063	2	t	f
2351	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2018-06-21 11:13:15.953+08	2018-06-21 11:13:15.965+08	934f46a0-88fb-47d5-95c9-745cdaf1c07e	2	t	f
1845	pressure	压强	Output	\N			5	200	0	KPa		2018-03-23 16:37:55.07+08	2018-06-29 10:30:54.786+08	ced94dca-0afa-4ab7-b273-744ff40f6b7a	2	t	f
2511	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-31 15:11:43.956+08	2018-07-31 15:11:43.956+08	b61317eb-c793-4b2f-b680-2d15a061ec91	2	t	f
1053	value2	温度	Output	\N	\N	\N	3	80	-20	℃		2018-01-08 07:43:00.036+08	2018-01-08 07:43:00.056+08	c66f2638-5449-4aad-b566-ffff92086b82	2	t	f
697	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 11:07:03.712+08	2018-01-05 11:07:03.712+08	0c7ac7cb-305a-4871-9335-1e95d569358c	2	t	f
717	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 11:50:25.13+08	2018-03-02 11:19:09.547+08	45469a20-748c-4740-9741-4c971a209601	2	t	f
737	changedy	Y轴位移	Output	\N			3			mm		2018-01-05 13:52:32.941+08	2018-03-29 15:13:37.856+08	2766d297-6127-449f-b73f-089b38e01267	2	t	f
1352	phy1	土壤温度	Output	\N			2	80	-40	℃		2018-01-10 16:48:58.338+08	2018-01-10 16:50:00.973+08	19e68163-a7e9-4be7-b9ae-6966035ac671	2	t	f
2325	ppv	峰峰值	Output	\N	\N	\N	5	\N	\N	\N		2018-06-11 10:36:24.35+08	2018-06-11 10:36:24.356+08	7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	2	t	f
696	physicalvalue	应力	Output	\N			3	210	0	MPa		2018-01-05 11:07:03.707+08	2018-03-23 11:16:20.113+08	0c7ac7cb-305a-4871-9335-1e95d569358c	2	t	f
743	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-05 14:02:09.812+08	2018-03-23 15:55:27.012+08	da94e805-9621-4290-b239-5ddc2e0504a7	2	t	f
740	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-01-05 14:02:09.805+08	2018-03-23 15:55:36.714+08	da94e805-9621-4290-b239-5ddc2e0504a7	2	t	f
736	physicalvalue	应变	Output	\N			4	1500	-1500	με		2018-01-05 12:01:35.839+08	2018-03-23 15:56:09.606+08	4412085f-1890-4b38-b715-f72085af2b7b	2	t	f
718	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 11:50:25.135+08	2018-03-23 15:56:54.348+08	45469a20-748c-4740-9741-4c971a209601	2	t	f
719	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-01-05 11:50:25.14+08	2018-03-23 15:57:01.567+08	45469a20-748c-4740-9741-4c971a209601	2	t	f
1492	physicalvalue	荷载	Output	\N			4			kN		2018-01-23 14:49:59.717+08	2021-03-02 13:45:33.995+08	bc03541b-fb13-44ff-8cc4-9419e81554f3	2	t	f
2024	physicalvalue	荷载	Output	\N			4			kN		2018-03-26 15:24:50.729+08	2021-03-02 13:55:11.86+08	b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	2	t	f
2028	physicalvalue	荷载	Output	\N			4			kN		2018-03-26 15:31:47.875+08	2021-03-02 13:56:32.992+08	79fa3616-07da-47da-a26c-0faac333d89d	2	t	f
2524	length	位移	Output	\N	\N	\N	5	50	-50	mm		2018-07-31 16:19:59.527+08	2018-07-31 16:19:59.527+08	f67c6ffc-0414-4209-85ee-74153dcddd7d	2	t	f
711	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-01-05 11:50:22.321+08	2018-03-23 15:57:49.774+08	f331ae21-9607-401d-b8c4-9d17e40eba9a	2	t	f
2006	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:03:03.755+08	2018-03-26 15:03:03.763+08	c77f3d16-3577-4f09-9c32-cc99cbb68966	2	t	f
695	temperature	温度	Output	\N			2	80	-20	℃		2018-01-05 11:07:03.7+08	2018-01-05 11:55:14.973+08	0c7ac7cb-305a-4871-9335-1e95d569358c	2	t	f
746	am	幅值	Output	\N			3			mv		2018-01-05 14:02:09.819+08	2018-03-02 13:57:25.899+08	da94e805-9621-4290-b239-5ddc2e0504a7	2	t	f
2008	physicalvalue	幅值	Output	\N	\N	\N	4	3000	-3000	KN		2018-03-26 15:03:43.345+08	2018-03-26 15:03:43.351+08	c77f3d16-3577-4f09-9c32-cc99cbb68966	2	t	f
2009	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:09:24.014+08	2018-03-26 15:09:24.019+08	15598365-4401-4d31-9ebe-d0e46f6d4ce5	2	t	f
1251	yAccelertation	Y轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:48.9+08	2018-01-08 16:52:29.842+08	de7958de-0a8a-4492-8705-642b5c4df424	2	t	f
1216	lvdt	位移	Output	\N			2	35	0	mm		2018-01-08 14:53:25.092+08	2018-01-08 16:26:08.703+08	58459465-409c-47c0-b73f-a8a1c2cf563c	2	t	f
2012	physicalvalue	轴力	Output	\N	\N	\N	4	4000	-4000	KN		2018-03-26 15:10:51.386+08	2018-03-26 15:10:51.392+08	15598365-4401-4d31-9ebe-d0e46f6d4ce5	2	t	f
2017	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:18:06.458+08	2018-03-26 15:18:06.465+08	88e6acfa-2714-4821-9ff8-c5d96a23ce68	2	t	f
2021	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:22:53.163+08	2018-03-26 15:22:53.172+08	b3e8b1eb-5d72-4bda-875a-d83d7c593dfe	2	t	f
2327	yDegree	Y轴角度	Output	\N			4	30	-30	°		2018-06-11 14:59:44.593+08	2018-06-11 14:59:44.593+08	cd9e5fa9-97a7-4494-ac8f-69c526262d6d	2	t	f
2026	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:28:26.523+08	2018-03-26 15:28:26.53+08	79fa3616-07da-47da-a26c-0faac333d89d	2	t	f
2029	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:36:42.746+08	2018-03-26 15:36:42.754+08	5c6f4070-1acc-4ac2-91d6-b7420f02a37b	2	t	f
733	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 12:01:35.825+08	2018-03-27 11:06:03.416+08	4412085f-1890-4b38-b715-f72085af2b7b	2	t	f
734	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 12:01:35.83+08	2018-03-27 11:06:07.836+08	4412085f-1890-4b38-b715-f72085af2b7b	2	t	f
1058	physicalvalue	压力	Output	\N			4	1	0	MPa		2018-01-08 08:17:08.58+08	2018-03-28 23:17:40.87+08	743c44f5-480c-4c97-80ef-a03ba282ed49	2	t	f
1252	zAccelertation	Z轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:48.905+08	2018-01-08 16:52:35.428+08	de7958de-0a8a-4492-8705-642b5c4df424	2	t	f
1248	yAccelertation	Y轴加速度	Output	\N			2	8000	0	mg		2018-01-08 16:50:48.402+08	2018-01-08 16:53:05.276+08	1ec0d96c-843a-4da9-ada2-a70c23ebe8f4	2	t	f
1249	zAccelertation	Z轴加速度	Output	\N			2	8000	0	mg		2018-01-08 16:50:48.408+08	2018-01-08 16:53:09.936+08	1ec0d96c-843a-4da9-ada2-a70c23ebe8f4	2	t	f
1250	xAccelertation	X轴加速度	Output	\N			2	8000	0	mg		2018-01-08 16:50:48.413+08	2018-01-08 16:53:15.467+08	1ec0d96c-843a-4da9-ada2-a70c23ebe8f4	2	t	f
1215	temp	温度	Output	\N			2	80	-40	℃		2018-01-08 14:45:53.6+08	2018-01-08 17:03:29.138+08	47aba0a9-a828-4842-9ce0-4733fa6efa10	2	t	f
2328	xDegree	X轴角度	Output	\N			4	30	-30	°		2018-06-11 14:59:44.598+08	2018-06-11 14:59:44.598+08	cd9e5fa9-97a7-4494-ac8f-69c526262d6d	2	t	f
2199	physicalvalue	轴力	Output	\N			4	2000	-2000	kN		2018-04-16 15:46:07.755+08	2018-04-16 15:47:37.117+08	b4f14b5d-82f1-4ea1-b10f-3e38e552168c	2	t	f
2123	pmstandard	标况pm2.5	Output	\N			3	\N	\N	ug/m³		2018-04-03 11:53:35.038+08	2018-04-19 13:40:32.889+08	61625131-a37b-4478-a0dc-f7c55d54f34e	2	t	f
2126	anglez	Z轴角度	Output	\N			2	360	-180	°		2018-04-03 13:48:09.027+08	2018-05-07 21:04:40.778+08	ea35c8e5-60d3-46c7-a819-b0557f2be17b	2	t	f
2278	x0	x方向初值	Variable	\N	\N	\N	4	30	-30	\N		2018-05-10 17:56:47.179+08	2018-05-10 17:56:47.185+08	5d8abf22-14e4-474f-9a3a-11a4976643ee	2	t	f
2308	token	token	Output	\N	\N	\N	\N	\N	\N	\N		2018-05-31 07:53:47.623+08	2018-05-31 07:53:47.63+08	642f187b-6fa0-4dad-9bb4-1ebee9558b41	5	t	f
2365	flowrate	瞬时流量	Output	\N	\N	\N	4	\N	\N	m3/h		2018-06-28 16:26:44.806+08	2018-06-28 16:26:44.819+08	419116d4-4614-4d66-bc30-ce2394eed251	2	t	f
2354	anglex	X轴角度	Output	\N			5	\N	\N	°		2018-06-25 09:06:03.75+08	2018-06-25 14:43:34.871+08	7f0bdd9e-f9d0-4739-b764-18f3c615ca79	2	t	f
1846	pressure	压强	Output	\N			4	2000	0	KPa		2018-03-23 16:44:59.326+08	2018-06-29 10:31:41.977+08	51e73aec-cdcf-4852-98fe-e6b9bae73590	2	t	f
2516	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-31 15:16:35.514+08	2018-07-31 15:16:35.514+08	b69bda25-731f-49db-b199-83207febe2ed	2	t	f
2446	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-19 09:35:55.164+08	2018-07-19 09:35:55.164+08	5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	2	t	f
2447	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-19 09:35:55.168+08	2018-07-19 09:35:55.168+08	5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	2	t	f
2448	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-19 09:35:55.178+08	2018-07-19 09:35:55.178+08	95f120f4-02d5-454d-a848-b2749f786d6a	2	t	f
2449	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-19 09:35:55.181+08	2018-07-19 09:35:55.181+08	95f120f4-02d5-454d-a848-b2749f786d6a	2	t	f
2450	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-07-19 09:35:55.185+08	2018-07-19 09:35:55.185+08	95f120f4-02d5-454d-a848-b2749f786d6a	2	t	f
709	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 11:50:22.313+08	2018-07-31 15:17:04.982+08	f331ae21-9607-401d-b8c4-9d17e40eba9a	2	t	f
710	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 11:50:22.316+08	2018-07-31 15:17:32.032+08	f331ae21-9607-401d-b8c4-9d17e40eba9a	2	t	f
758	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-05 14:46:16.344+08	2018-03-26 13:39:42.887+08	08fbb708-7333-4f0f-b4a6-1b185f02fd34	2	t	f
750	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-05 14:02:10.816+08	2018-01-05 14:02:10.816+08	77becc38-82f7-4612-83e2-10e0ebf5e6e3	2	t	f
795	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-05 14:53:53.048+08	2018-03-23 15:52:54.172+08	e7092d0b-709a-414e-a8ca-a1e21ef6e36c	2	t	f
759	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-05 14:46:16.348+08	2018-03-26 13:39:52.044+08	08fbb708-7333-4f0f-b4a6-1b185f02fd34	2	t	f
767	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-05 14:50:21.869+08	2018-03-23 15:53:22.089+08	5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	2	t	f
755	physicalvalue	荷载力	Output	\N			4	75	-75	kN	正值是张拉力，负值是承压力	2018-01-05 14:46:16.313+08	2018-03-26 13:41:56.047+08	08fbb708-7333-4f0f-b4a6-1b185f02fd34	2	t	f
1254	yAccelertation	Y轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:49.872+08	2018-01-08 16:51:24.762+08	58543b3a-1b0d-44ce-a3c3-856bc133204a	2	t	f
2034	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:43:53.765+08	2018-03-26 15:43:53.77+08	d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	2	t	f
788	physicalvalue	压力	Output	\N			3	0.7	0	MPa		2018-01-05 14:53:22.531+08	2018-03-23 11:16:53.752+08	9c34b3cc-56f3-4463-b264-888d55002e8b	2	t	f
791	physicalvalue	压力	Output	\N			3	3	0	MPa		2018-01-05 14:53:24.814+08	2018-03-23 11:17:10.14+08	cc4c86bd-de99-4664-97f7-6cc8f14d9163	2	t	f
768	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-05 14:50:21.873+08	2018-01-05 14:50:21.873+08	5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	2	t	f
803	physicalvalue	水位	Output	\N			3	1500	0	mm		2018-01-05 14:57:25.924+08	2018-03-23 11:17:22.318+08	7cfe14d1-5568-4d3a-abf6-b24791db9643	2	t	f
1775	angley	Y方向角度	Output	\N			4	30	-30	°		2018-03-14 09:33:01.433+08	2018-03-23 15:33:47.36+08	0183e607-ae45-461a-84be-4b7fb9ef5951	2	t	f
764	physicalvalue	荷载力	Output	\N			4	105	-105	kN	正值是张拉力，负值是承压力	2018-01-05 14:50:21.85+08	2018-03-23 15:53:33.647+08	5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	2	t	f
1255	zAccelertation	Z轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:49.879+08	2018-01-08 16:51:28.844+08	58543b3a-1b0d-44ce-a3c3-856bc133204a	2	t	f
1509	temperature	温度	Output	\N			2	\N	\N	℃		2018-01-23 14:53:15.39+08	2018-03-23 15:45:06.945+08	fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	2	t	f
794	physicalvalue	荷载力	Output	\N			4	136	-136	kN	正值是张拉力，负值是承压力	2018-01-05 14:53:53.044+08	2018-03-23 15:52:44.723+08	e7092d0b-709a-414e-a8ca-a1e21ef6e36c	2	t	f
2047	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:13:57.828+08	2018-03-26 16:13:57.833+08	9da5e8ea-d055-48f8-97e4-5e64ccb9334c	2	t	f
1217	xDegree	X轴角度	Output	\N			3	10	-10	°		2018-01-08 14:58:05.967+08	2018-01-08 17:12:52.237+08	db8bf711-b26f-4e79-bc46-564fbc4f60ac	2	t	f
1243	lvdt	位移	Output	\N			2	280	0	mm		2018-01-08 16:27:57.455+08	2018-01-08 16:47:17.935+08	477069fb-894d-4a5c-9b41-d004be827ac5	2	t	f
1256	xAccelertation	X轴加速度	Output	\N			2	4000	0	mg		2018-01-08 16:50:49.888+08	2018-01-08 16:51:33.685+08	58543b3a-1b0d-44ce-a3c3-856bc133204a	2	t	f
1353	phy2	土壤湿度	Output	\N			2	100	0	%RH		2018-01-10 16:49:40.899+08	2018-01-10 16:49:46.608+08	19e68163-a7e9-4be7-b9ae-6966035ac671	2	t	f
787	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-05 14:53:22.526+08	2018-01-05 14:53:22.526+08	9c34b3cc-56f3-4463-b264-888d55002e8b	2	t	f
789	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 14:53:22.535+08	2018-01-05 14:53:22.535+08	9c34b3cc-56f3-4463-b264-888d55002e8b	2	t	f
790	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-05 14:53:24.811+08	2018-01-05 14:53:24.811+08	cc4c86bd-de99-4664-97f7-6cc8f14d9163	2	t	f
792	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 14:53:24.816+08	2018-01-05 14:53:24.816+08	cc4c86bd-de99-4664-97f7-6cc8f14d9163	2	t	f
751	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-05 14:02:10.821+08	2018-03-23 15:54:54.005+08	77becc38-82f7-4612-83e2-10e0ebf5e6e3	2	t	f
748	physicalvalue	微应变	Output	\N			4	5000	-5000	με		2018-01-05 14:02:10.802+08	2018-03-23 15:55:02.892+08	77becc38-82f7-4612-83e2-10e0ebf5e6e3	2	t	f
798	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-05 14:53:53.061+08	2018-01-05 14:53:53.061+08	e7092d0b-709a-414e-a8ca-a1e21ef6e36c	2	t	f
2035	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:44:09.249+08	2018-03-26 15:44:09.254+08	d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	2	t	f
801	frequency	频率	Output	\N			3	\N	\N	HZ		2018-01-05 14:57:25.913+08	2018-01-05 14:57:25.913+08	7cfe14d1-5568-4d3a-abf6-b24791db9643	2	t	f
802	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-01-05 14:57:25.919+08	2018-01-05 14:57:25.919+08	7cfe14d1-5568-4d3a-abf6-b24791db9643	2	t	f
1355	phy1	温度	Output	\N	\N	\N	2	80	-20	℃		2018-01-10 17:09:50.593+08	2018-01-10 17:09:50.605+08	8096b88c-dc64-4f26-8f04-6ac919d70447	2	t	f
1357	phy3	光照	Output	\N	\N	\N	2	200000	0	Lux		2018-01-10 17:13:41.341+08	2018-01-10 17:13:41.355+08	8096b88c-dc64-4f26-8f04-6ac919d70447	2	t	f
1434	cpuRate	cpu使用率	Variable	\N	\N	30.00	2	100.00	10.00	%	cpu使用率	2018-01-19 15:34:49.11+08	2018-01-19 15:34:49.114+08	1e87be3b-9782-4b75-8b62-0aa49b44daea	2	t	f
2038	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 15:49:25.544+08	2018-03-26 15:49:25.557+08	8e638b0a-bbf4-4856-add9-c4db9b55b032	2	t	f
762	am	幅值	Output	\N			3			mv		2018-01-05 14:46:16.355+08	2018-03-02 10:32:19.849+08	08fbb708-7333-4f0f-b4a6-1b185f02fd34	2	t	f
2040	physicalvalue	水压	Output	\N	\N	\N	4	1	0	MPa		2018-03-26 15:50:11.335+08	2018-03-26 15:50:11.341+08	8e638b0a-bbf4-4856-add9-c4db9b55b032	2	t	f
1508	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:53:15.386+08	2018-03-02 14:23:53.46+08	fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	2	t	f
2053	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 16:24:49.563+08	2018-03-26 16:24:49.566+08	81a87805-fc42-456d-960f-fb793999d631	2	t	f
2056	physicalvalue	水压	Output	\N	\N	\N	4	0.2	0	MPa		2018-03-26 16:25:59.545+08	2018-03-26 16:25:59.551+08	81a87805-fc42-456d-960f-fb793999d631	2	t	f
2067	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 17:01:11.439+08	2018-03-26 17:01:11.444+08	606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	2	t	f
2073	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-27 10:57:43.513+08	2018-03-27 10:57:43.519+08	0428f647-9944-415c-b6f0-93e7329d31c9	2	t	f
2076	physicalvalue	位移	Output	\N	\N	\N	4	50	0	mm		2018-03-27 10:58:59.282+08	2018-03-27 10:58:59.29+08	0428f647-9944-415c-b6f0-93e7329d31c9	2	t	f
2077	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-27 11:00:54.694+08	2018-03-27 11:00:54.702+08	6ebb2c0f-06fa-4b77-b028-4818465a7019	2	t	f
2079	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 11:01:59.053+08	2018-03-27 11:01:59.059+08	6ebb2c0f-06fa-4b77-b028-4818465a7019	2	t	f
2084	physicalvalue	应力	Output	\N			4	1500	-1500	με		2018-03-27 11:05:35.371+08	2018-03-27 11:05:48.278+08	50696e87-2214-4a20-b537-5530d2921ccd	2	t	f
2087	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 11:09:06.171+08	2018-03-27 11:09:06.182+08	533e4f1c-c95f-46b6-9d76-1e77bcd20732	2	t	f
2088	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-03-27 11:09:22.813+08	2018-03-27 11:09:40.877+08	533e4f1c-c95f-46b6-9d76-1e77bcd20732	2	t	f
2091	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 11:13:48.314+08	2018-03-27 11:13:48.322+08	5aeba65e-e787-4076-8e03-a33698701ff2	2	t	f
1847	pressure	压强	Output	\N			4	1000	0	KPa		2018-03-23 16:51:54.996+08	2018-06-29 10:32:04.914+08	6831367e-c4c8-407a-b2d6-3259490ee594	2	t	f
1776	anglex	X方向角度	Output	\N			4	30	-30	°		2018-03-14 09:33:38.317+08	2018-03-23 15:33:40.196+08	0183e607-ae45-461a-84be-4b7fb9ef5951	2	t	f
1647	physicalvalue	位移	Output	\N			4	200	0	mm		2018-01-24 11:34:50.395+08	2018-03-23 15:36:33.314+08	f564da79-91f3-4eff-8919-3501b7fb8046	2	t	f
1646	temperature	温度	Output	\N			\N	\N	\N	℃		2018-01-24 11:34:50.392+08	2018-03-23 15:36:42.601+08	f564da79-91f3-4eff-8919-3501b7fb8046	2	t	f
1649	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2018-01-24 11:34:50.4+08	2018-01-24 11:34:50.4+08	f564da79-91f3-4eff-8919-3501b7fb8046	2	t	f
1641	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-24 11:34:49.486+08	2018-03-02 15:23:32.321+08	b28ce81b-55a8-4e81-a4da-5a5b9d89ef29	2	t	f
2033	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:43:34.248+08	2018-03-26 15:43:34.253+08	d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	2	t	f
1848	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-03-23 17:05:18.739+08	2018-03-23 17:05:18.76+08	4ad74d57-806a-4fc6-82ec-37d782d99cab	2	t	f
2039	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 15:49:43.472+08	2018-03-26 15:49:43.479+08	8e638b0a-bbf4-4856-add9-c4db9b55b032	2	t	f
2043	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:00:25.281+08	2018-03-26 16:00:25.297+08	381fa9a7-3a18-49ce-91bb-b29ebd23429f	2	t	f
2045	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 16:13:24.835+08	2018-03-26 16:13:24.841+08	9da5e8ea-d055-48f8-97e4-5e64ccb9334c	2	t	f
2049	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 16:18:25.521+08	2018-03-26 16:18:25.53+08	9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	2	t	f
2051	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:19:27.842+08	2018-03-26 16:19:27.857+08	9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	2	t	f
2054	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:25:15.274+08	2018-03-26 16:25:15.279+08	81a87805-fc42-456d-960f-fb793999d631	2	t	f
2058	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:44:49.003+08	2018-03-26 16:44:49.015+08	642663da-bc66-430b-8367-41e2ae5ed8b2	2	t	f
2065	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:53:39.519+08	2018-03-26 16:53:39.53+08	f19d92bc-802e-4662-9419-3f664f0d7eba	2	t	f
2068	temperature	温度	Output	\N			2	\N	\N	℃		2018-03-26 17:01:33.366+08	2018-03-26 17:02:39.19+08	606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	2	t	f
2081	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-27 11:04:25.076+08	2018-03-27 11:04:25.088+08	50696e87-2214-4a20-b537-5530d2921ccd	2	t	f
2082	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 11:04:51.297+08	2018-03-27 11:04:51.307+08	50696e87-2214-4a20-b537-5530d2921ccd	2	t	f
2083	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 11:05:06.426+08	2018-03-27 11:05:06.433+08	50696e87-2214-4a20-b537-5530d2921ccd	2	t	f
2451	physicalvalue	轴力	Output	\N			4	5000	-5000	kN		2018-07-19 09:35:55.188+08	2018-07-19 09:50:16.53+08	95f120f4-02d5-454d-a848-b2749f786d6a	2	t	f
2230	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:00:54.799+08	2018-04-16 16:00:54.799+08	81b14e1d-4d14-4741-b581-31e3c543a0f9	2	t	f
2232	am	温度	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:00:54.804+08	2018-04-16 16:00:54.804+08	81b14e1d-4d14-4741-b581-31e3c543a0f9	2	t	f
2364	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-06-27 16:45:32.422+08	2018-06-27 16:45:32.46+08	b4e49abe-4948-4f36-978f-8804c1531ca1	2	t	f
2459	physicalvalue	轴力	Output	\N			4	6000	-6000	kN		2018-07-19 09:35:56.58+08	2018-07-19 09:51:29.869+08	2858f0e6-c2cb-4a9a-9efd-46af31146b5b	2	t	f
2231	physicalvalue	荷载	Output	\N			4	200	-200	kN		2018-04-16 16:00:54.802+08	2018-04-16 17:50:14.885+08	81b14e1d-4d14-4741-b581-31e3c543a0f9	2	t	f
2124	anglex	X轴角度	Output	\N			2	360	-180	°		2018-04-03 12:41:11.897+08	2018-05-07 21:04:58.413+08	ea35c8e5-60d3-46c7-a819-b0557f2be17b	2	t	f
2280	测量值	测量值	Tag	\N	\N	\N	\N	\N	\N	\N		2018-05-11 15:45:31.134+08	2018-05-11 15:45:31.134+08	c135c6c2-af77-42b4-9fd8-a684c629383e	2	t	f
2361	pressure	压力	Output	\N			3	\N		mH2O		2018-06-25 15:30:55.985+08	2018-06-28 15:35:34.896+08	16b92db5-4d33-4218-a6d5-7fa7c24194b0	2	t	f
2312	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-06-01 16:26:56.743+08	2018-06-01 16:26:56.743+08	1dcd37b0-1db2-401d-80d1-bef6c0f180d3	2	t	f
2326	pv	峰值	Output	\N	\N	\N	5	\N	\N			2018-06-11 10:36:50.396+08	2018-06-11 10:36:50.409+08	7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	2	t	f
2452	physicalvalue	轴力	Output	\N			4	6000	-6000	kN		2018-07-19 09:35:56.552+08	2018-07-19 09:51:38.355+08	b0422984-356d-4020-ab24-9dd7cdd4d8fd	2	t	f
2356	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2018-06-25 11:28:59.867+08	2018-06-25 11:28:59.872+08	8c6c2c54-4620-4096-8773-6a3ee2ffc168	2	t	f
2357	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2018-06-25 11:29:29.655+08	2018-06-25 11:29:29.664+08	8c6c2c54-4620-4096-8773-6a3ee2ffc168	2	t	f
2355	angley	Y轴角度	Output	\N			5	\N	\N	°		2018-06-25 09:06:24.842+08	2018-06-25 14:43:41.006+08	7f0bdd9e-f9d0-4739-b764-18f3c615ca79	2	t	f
2404	totalBase	总轴距	Output	\N			0			cm		2018-07-05 09:17:50.028+08	2018-07-24 10:33:11.904+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2367	positiveflow	正向累计流量	Output	\N			4	\N	\N	m3		2018-06-28 16:29:31.637+08	2018-06-28 16:58:51.987+08	419116d4-4614-4d66-bc30-ce2394eed251	2	t	f
2496	alarm	报警状态	Output	\N	\N	\N	\N	\N	\N			2018-07-28 17:16:38.158+08	2018-07-28 17:16:38.158+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2483	allRotationAngle	全回转角度	Output	\N	\N	\N	2	360	-360	°		2018-07-28 17:07:47.967+08	2018-07-28 17:07:47.967+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2453	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-19 09:35:56.556+08	2018-07-19 09:35:56.556+08	b0422984-356d-4020-ab24-9dd7cdd4d8fd	2	t	f
2454	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-19 09:35:56.559+08	2018-07-19 09:35:56.559+08	b0422984-356d-4020-ab24-9dd7cdd4d8fd	2	t	f
2455	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-19 09:35:56.563+08	2018-07-19 09:35:56.563+08	b0422984-356d-4020-ab24-9dd7cdd4d8fd	2	t	f
2456	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-19 09:35:56.571+08	2018-07-19 09:35:56.571+08	2858f0e6-c2cb-4a9a-9efd-46af31146b5b	2	t	f
2457	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-19 09:35:56.574+08	2018-07-19 09:35:56.574+08	2858f0e6-c2cb-4a9a-9efd-46af31146b5b	2	t	f
2458	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-07-19 09:35:56.577+08	2018-07-19 09:35:56.577+08	2858f0e6-c2cb-4a9a-9efd-46af31146b5b	2	t	f
2484	radius	幅度	Output	\N			2	\N	\N	m		2018-07-28 17:08:25.72+08	2018-07-31 09:35:52.996+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2490	windSpeed	风速	Output	\N			2	\N	\N	m/s		2018-07-28 17:12:27.533+08	2018-07-31 09:37:12.574+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2517	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-07-31 15:17:07.544+08	2018-07-31 15:17:07.544+08	b69bda25-731f-49db-b199-83207febe2ed	2	t	f
2518	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-31 15:17:28.502+08	2018-07-31 15:17:28.502+08	b69bda25-731f-49db-b199-83207febe2ed	2	t	f
2521	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-31 15:20:12.273+08	2018-07-31 15:20:12.273+08	73e248c9-5515-4482-ac0a-af10af977c95	2	t	f
2530	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-07-31 17:14:43.983+08	2018-07-31 17:14:43.983+08	5066bc97-d314-4800-891f-b7b4031c1ffc	2	t	f
2549	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:35:48.086+08	2018-08-02 10:35:48.086+08	82623747-98d9-4dfa-9a9a-08188d0311e9	2	t	f
2550	force	轴力	Output	\N	\N	\N	2	\N	\N	KN		2018-08-02 10:35:48.094+08	2018-08-02 10:35:48.094+08	82623747-98d9-4dfa-9a9a-08188d0311e9	2	t	f
2551	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:35:48.099+08	2018-08-02 10:35:48.099+08	82623747-98d9-4dfa-9a9a-08188d0311e9	2	t	f
2313	physicalvalue	锚杆拉力	Output	\N			3	\N	\N	με		2018-06-01 16:26:56.749+08	2018-12-18 17:00:16.75+08	1dcd37b0-1db2-401d-80d1-bef6c0f180d3	2	t	f
1786	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-14 15:32:30.963+08	2018-03-14 15:32:30.963+08	7d5454c7-afcf-4af8-a34c-03fd5ec820f8	2	t	f
1787	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-03-14 15:32:30.966+08	2018-03-14 15:32:30.966+08	7d5454c7-afcf-4af8-a34c-03fd5ec820f8	2	t	f
1789	temperature	温度	Output	\N			3	40	0	℃		2018-03-14 15:32:44.481+08	2018-03-14 15:32:44.481+08	e2e4c206-ed4b-4fae-8755-5dc970720c89	2	t	f
1790	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-14 15:32:44.485+08	2018-03-14 15:32:44.485+08	e2e4c206-ed4b-4fae-8755-5dc970720c89	2	t	f
1803	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-03-14 15:54:05.912+08	2018-03-14 15:54:05.912+08	d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	2	t	f
2239	physicalvalue	荷载	Output	\N			4	300	-300	kN		2018-04-16 16:01:22.165+08	2018-04-16 17:50:30.527+08	2f72ef62-1d3b-4c4b-9308-5abb39a919d0	2	t	f
2236	physicalvalue	荷载	Output	\N			4	300	-300	kN		2018-04-16 16:01:22.15+08	2018-04-16 17:50:35.848+08	ae06a9a5-6f60-4dae-9983-cc4677c08d97	2	t	f
2036	physicalvalue	水压	Output	\N			4	2	0	MPa		2018-03-26 15:44:45.952+08	2018-03-26 15:45:12.696+08	d5370a7a-bba2-4997-9b8b-2cbbad5ebfa0	2	t	f
1801	physicalvalue	应变	Output	\N			3	1000	-1500	με	负数为压力 正数为张力	2018-03-14 15:54:05.905+08	2018-03-23 14:21:47.41+08	d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	2	t	f
1802	Resistor1	电阻1	Output	\N			3	\N	\N	Ω		2018-03-14 15:54:05.909+08	2018-03-23 14:29:24.76+08	d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	2	t	f
1849	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-03-23 17:05:46.825+08	2018-03-23 17:05:46.829+08	4ad74d57-806a-4fc6-82ec-37d782d99cab	2	t	f
2048	physicalvalue	水压	Output	\N	\N	\N	4	0.6	0	MPa		2018-03-26 16:15:15.445+08	2018-03-26 16:15:15.451+08	9da5e8ea-d055-48f8-97e4-5e64ccb9334c	2	t	f
2055	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:25:37.74+08	2018-03-26 16:25:37.751+08	81a87805-fc42-456d-960f-fb793999d631	2	t	f
2059	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 16:45:16.357+08	2018-03-26 16:45:16.363+08	642663da-bc66-430b-8367-41e2ae5ed8b2	2	t	f
2060	physicalvalue	沉降	Output	\N	\N	\N	3	100	0	mm		2018-03-26 16:46:04.042+08	2018-03-26 16:46:04.049+08	642663da-bc66-430b-8367-41e2ae5ed8b2	2	t	f
2064	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:52:01.282+08	2018-03-26 16:52:01.289+08	f19d92bc-802e-4662-9419-3f664f0d7eba	2	t	f
2066	physicalvalue	沉降	Output	\N	\N	\N	3	200	0	mm		2018-03-26 16:54:04.832+08	2018-03-26 16:54:04.838+08	f19d92bc-802e-4662-9419-3f664f0d7eba	2	t	f
2125	angley	Y轴角度	Output	\N			2	360	-180	°		2018-04-03 13:47:36.365+08	2018-05-07 21:05:17.748+08	ea35c8e5-60d3-46c7-a819-b0557f2be17b	2	t	f
2072	pressure	压力	Output	\N			1	100	0.1	MPa		2018-03-27 10:51:06.129+08	2018-03-27 10:51:48.157+08	a266afb7-b532-4336-b199-cb33af206062	2	t	f
2074	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 10:58:03.297+08	2018-03-27 10:58:03.316+08	0428f647-9944-415c-b6f0-93e7329d31c9	2	t	f
2075	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 10:58:19.357+08	2018-03-27 10:58:19.363+08	0428f647-9944-415c-b6f0-93e7329d31c9	2	t	f
2078	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 11:01:29.588+08	2018-03-27 11:01:29.594+08	6ebb2c0f-06fa-4b77-b028-4818465a7019	2	t	f
2085	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-27 11:08:11.385+08	2018-03-27 11:08:11.39+08	533e4f1c-c95f-46b6-9d76-1e77bcd20732	2	t	f
2090	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 11:13:35.775+08	2018-03-27 11:13:35.793+08	5aeba65e-e787-4076-8e03-a33698701ff2	2	t	f
2529	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-07-31 17:10:33.54+08	2018-07-31 17:10:33.54+08	292bd1e7-c27c-4437-a899-3c61485b89e3	2	t	f
1791	physicalvalue	水压	Output	\N			3	6	0	Mpa		2018-03-14 15:32:44.487+08	2018-03-29 15:31:00.003+08	e2e4c206-ed4b-4fae-8755-5dc970720c89	2	t	f
1788	physicalvalue	应变	Output	\N			3	1200	-1800	με	负数为压力 正数为张力	2018-03-14 15:32:30.973+08	2018-03-29 15:31:17.87+08	7d5454c7-afcf-4af8-a34c-03fd5ec820f8	2	t	f
2497	peccancy	违章状态	Output	\N	\N	\N	\N	\N	\N			2018-07-28 17:17:25.141+08	2018-07-28 17:17:25.141+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2233	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:01:22.14+08	2018-04-16 16:01:22.14+08	ae06a9a5-6f60-4dae-9983-cc4677c08d97	2	t	f
2234	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:01:22.144+08	2018-04-16 16:01:22.144+08	ae06a9a5-6f60-4dae-9983-cc4677c08d97	2	t	f
2235	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:01:22.147+08	2018-04-16 16:01:22.147+08	ae06a9a5-6f60-4dae-9983-cc4677c08d97	2	t	f
2237	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:01:22.157+08	2018-04-16 16:01:22.157+08	2f72ef62-1d3b-4c4b-9308-5abb39a919d0	2	t	f
2238	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:01:22.16+08	2018-04-16 16:01:22.16+08	2f72ef62-1d3b-4c4b-9308-5abb39a919d0	2	t	f
2485	height	高度	Output	\N			2	\N	\N	m		2018-07-28 17:09:03.634+08	2018-07-31 09:36:02.265+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2281	length	位移	Output	\N			3	50	-50	mm		2018-05-16 17:44:54.897+08	2018-05-16 17:53:33.598+08	42c99fb8-8f40-4693-952f-7124b9f38cda	2	t	f
2310	length	液位	Output	\N			2	\N	\N	mm		2018-05-31 14:37:08.565+08	2018-05-31 14:39:15.734+08	93a73320-1cb3-4b2f-a8be-f31d131ba881	2	t	f
2282	length	位移	Output	\N			5	50	-50	mm		2018-05-16 17:44:54.914+08	2018-06-05 11:15:08.837+08	2e6e8c47-b162-44b0-802f-689c0a71fb2c	2	t	f
2329	distance	距离	Output	\N	\N	\N	4	\N	\N	m		2018-06-13 17:01:20.458+08	2018-06-13 17:01:20.465+08	66df2f89-5584-46b3-ad9e-0d1932fcf096	2	t	f
2358	anglex	X方向角度	Output	\N	\N	\N	4	-30	-30	°		2018-06-25 11:30:05.22+08	2018-06-25 11:30:05.228+08	8c6c2c54-4620-4096-8773-6a3ee2ffc168	2	t	f
2362	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-06-27 14:05:17.971+08	2018-06-27 14:05:17.991+08	fa9efaaf-b27b-4f77-90c3-fa0f903666ed	2	t	f
2488	safeLoad	安全吊重	Output	\N			2	\N	\N	t		2018-07-28 17:10:54.982+08	2018-07-31 09:36:14.041+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2444	physicalvalue	轴力	Output	\N			4	5000	-5000	kN		2018-07-19 09:35:55.155+08	2018-07-19 09:50:06.643+08	5a0e1b09-57f7-4bcc-9f02-2ed2ac5f3d7e	2	t	f
2407	carType	车辆类型	Output	\N			0					2018-07-05 09:23:00.573+08	2018-07-24 10:32:57.132+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2405	cmsLength	车长	Output	\N			0			cm		2018-07-05 09:21:46.112+08	2018-07-24 10:33:05.854+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2095	frequency	频率	Output	\N			3	\N	\N	Hz		2018-03-27 11:29:33.134+08	2018-07-31 15:19:52.119+08	79cc1497-99b7-4eb4-bbb5-b69192903d18	2	t	f
2525	length	位移	Output	\N	\N	\N	5	10	0	mm		2018-07-31 16:21:22.099+08	2018-07-31 16:21:22.099+08	dd1508e1-c94d-46a9-9a86-08a80d670853	2	t	f
2526	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-07-31 17:09:04.478+08	2018-07-31 17:09:04.478+08	b5a575d9-25af-47ce-8a43-89a35317f2a1	2	t	f
2531	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-07-31 17:15:11.989+08	2018-07-31 17:15:11.989+08	5066bc97-d314-4800-891f-b7b4031c1ffc	2	t	f
2532	pressure	压强	Variable	\N	\N	\N	4	1000	0	KPa		2018-07-31 17:24:50.297+08	2018-07-31 17:24:50.297+08	95686247-9ee5-41d3-9cc8-08fa377da8cc	2	t	f
2556	speed	风速	Output	\N			2			m/s		2018-08-02 10:37:02.612+08	2018-12-29 10:17:00.09+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2555	direction	风向	Output	\N			2			°		2018-08-02 10:37:02.607+08	2018-12-29 10:16:54.611+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2554	pm10	PM10	Output	\N			2			ug/m³		2018-08-02 10:37:02.602+08	2018-12-29 10:16:46.813+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2037	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:49:09+08	2018-03-26 15:49:09.007+08	8e638b0a-bbf4-4856-add9-c4db9b55b032	2	t	f
1661	state	路面潮湿度	Output	\N			0	\N	\N	\N		2018-01-30 15:49:35.491+08	2018-01-30 15:54:37.366+08	ef29b89e-1964-40d7-b8c8-489d9562ce9d	1	t	f
1662	smoke	烟雾浓度	Output	\N	\N	\N	1	\N	\N	ppm		2018-01-30 17:26:52.479+08	2018-01-30 17:26:52.479+08	500186ab-cb13-4844-b7d8-ed0fa7a17c9b	2	t	f
1663	windSpeed	风速	Output	\N	\N	\N	1	30	0	m/s		2018-01-30 17:38:49.924+08	2018-01-30 17:38:49.924+08	70d4d474-0524-459c-9144-237922982ec3	2	t	f
1606	pressure	压强	Output	\N			5	0.2	0	MPa		2018-01-24 11:19:06.365+08	2018-02-02 15:41:36.322+08	09048659-5be8-43d3-9189-61f71c225e04	2	t	f
1668	level	液位	Output	\N	\N	\N	1	2000	0.2	mm		2018-02-05 14:54:12.674+08	2018-02-05 14:54:12.674+08	0d2a48dd-a7d4-4752-9e64-d17ca8555ca8	2	t	f
1669	test	test	Variable	\N	\N	50	\N	100	10	aaaa	aaaaa	2018-02-06 16:34:19.408+08	2018-02-06 16:34:19.408+08	5c7af394-fc34-459a-bf95-62b91eafed29	1	t	f
1670	test2	test2	Variable	\N	\N	aaaa	\N	\N	\N	aaaaa	aaaaaa	2018-02-06 16:34:19.414+08	2018-02-06 16:34:19.414+08	5c7af394-fc34-459a-bf95-62b91eafed29	5	t	f
1792	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-14 15:32:53.602+08	2018-03-14 15:32:53.602+08	68518b11-55c5-4191-8116-1d27ee89268e	2	t	f
1794	temperature	温度	Output	\N			3	90	-30	℃		2018-03-14 15:32:53.614+08	2018-03-14 15:32:53.614+08	68518b11-55c5-4191-8116-1d27ee89268e	2	t	f
1678	value	位移	Output	\N	\N	\N	3	9999999	-999999	mm		2018-02-07 16:40:02.714+08	2018-02-07 16:40:02.714+08	b767a3ea-663e-402a-82c0-ee964abae581	2	t	f
1690	lvdt	位移	Output	\N			3	400	-400	mm		2018-02-28 16:48:45.386+08	2018-02-28 16:50:04.317+08	ad956aa4-9d9f-414e-aa8b-d48cb81e9a60	2	t	f
1679	value	应变	Output	\N	\N	\N	1	3000	0	με		2018-02-11 16:58:21.743+08	2018-02-11 16:58:21.743+08	a31f033d-a4ca-4dd4-8e20-5180f376df79	2	t	f
1691	lvdt	位移	Output	\N			3	450	-450	mm		2018-02-28 16:48:46.017+08	2018-02-28 16:50:24.375+08	1f12ae0a-fb0a-497e-af70-8e53094543a1	2	t	f
1692	lvdt	位移	Output	\N			3	500	-500	mm		2018-02-28 16:48:46.687+08	2018-02-28 16:50:45.798+08	342ac320-e429-49f0-b647-e4d7e5f4b545	2	t	f
362	value	水位	Output	\N			2	1000	0	mm		2017-11-17 09:45:45.979+08	2018-02-11 17:02:55.962+08	5e270a72-9da6-4029-98ae-eb0326ad0d97	2	t	f
1680	value	角度	Output	\N			3	15	-15	°		2018-02-11 17:07:24.777+08	2018-02-11 17:09:47.5+08	bd051793-11f0-4c75-bb85-912a2c4e022b	2	t	f
1681	value	角度	Output	\N	\N	\N	2	15	-15	°		2018-02-11 17:16:18.666+08	2018-02-11 17:16:18.666+08	cf2e6e9e-b046-437d-a041-4461ff0be3e3	2	t	f
1675	value	位移	Output	\N			2	25	-25	mm		2018-02-06 17:32:56.524+08	2018-02-12 10:25:15.941+08	dcbc00f3-d440-4b2e-b869-c6e2e602316c	2	t	f
1674	value	角度	Output	\N			3	15	-15	°		2018-02-06 17:17:32.195+08	2018-02-12 10:25:27.362+08	363a580c-77e4-4464-8c92-4ee9c989358f	2	t	f
1687	lvdt	位移	Output	\N	\N	\N	3	50	-50	mm		2018-02-28 16:21:14.328+08	2018-02-28 16:21:14.328+08	479ab844-11f3-43d2-b8da-1b5e32abf466	2	t	f
1686	lvdt	位移	Output	\N			3	100	-100	mm		2018-02-28 16:21:13.695+08	2018-02-28 16:22:17.673+08	c73c5915-cc27-425f-b6e9-288aa74c6fd4	2	t	f
1685	lvdt	位移	Output	\N			3	150	-150	mm		2018-02-28 16:21:13.125+08	2018-02-28 16:22:44.015+08	d33fe3ee-6bc4-44c8-bdf0-4e36e569ff33	2	t	f
1684	lvdt	位移	Output	\N			3	200	-200	mm		2018-02-28 16:21:12.176+08	2018-02-28 16:23:11.14+08	9fb57bf4-6e35-4918-ac61-3f04bf81e691	2	t	f
1683	lvdt	位移	Output	\N			3	250	-250	mm		2018-02-28 16:01:53.174+08	2018-02-28 16:23:34.471+08	af49da8c-cb29-4435-974c-d96d01e992bc	2	t	f
1688	lvdt	位移	Output	\N			3	300	-300	mm		2018-02-28 16:48:43.055+08	2018-02-28 16:49:22.695+08	ab5ddc7a-c116-496f-9658-12522697a1d0	2	t	f
1689	lvdt	位移	Output	\N			3	350	-350	mm		2018-02-28 16:48:44.79+08	2018-02-28 16:49:44.154+08	e277560c-2da5-499d-a3eb-99ed74f642d9	2	t	f
2127	length	沉降	Output	\N	\N	\N	3	\N	\N	mm		2018-04-04 16:50:17.59+08	2018-04-04 16:50:17.596+08	e59809ab-9197-4c91-8a1b-041a187eafc0	2	t	f
1592	distance	距离	Output	\N			2	80	0	m		2018-01-24 11:05:24.813+08	2018-03-21 18:06:06.757+08	b9bb6058-9981-44a3-8688-1df4dc7f042b	2	t	f
2041	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 15:59:39.054+08	2018-03-26 15:59:39.06+08	381fa9a7-3a18-49ce-91bb-b29ebd23429f	2	t	f
1660	temperature	温度	Output	\N			2	50	-15	℃		2018-01-26 16:34:44.314+08	2018-03-23 15:17:49.752+08	b9bb6058-9981-44a3-8688-1df4dc7f042b	2	t	f
1850	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-03-23 17:37:51.441+08	2018-03-23 17:37:51.461+08	798127c2-0250-443c-8627-ac234388ae50	2	t	f
1665	pressure	压强	Output	\N			4	2000	0	KPa		2018-02-05 11:21:34.558+08	2018-06-29 10:32:56.998+08	cc7aaee4-9939-40cc-b584-234221061c01	2	t	f
1667	pressure	压强	Output	\N			5	500	0	KPa		2018-02-05 11:22:03.79+08	2018-06-29 10:33:45.043+08	6c1400a4-ffcc-4f86-955b-dad07fb58c17	2	t	f
2046	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:13:42.768+08	2018-03-26 16:13:42.773+08	9da5e8ea-d055-48f8-97e4-5e64ccb9334c	2	t	f
2057	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 16:44:21.564+08	2018-03-26 16:44:21.571+08	642663da-bc66-430b-8367-41e2ae5ed8b2	2	t	f
2071	length	距离	Output	\N	\N	\N	5	\N	\N	mm		2018-03-26 17:36:26.28+08	2018-03-26 17:36:26.28+08	0e3fff68-6973-4327-9be6-6d5172b7ad80	2	t	f
2089	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-27 11:13:17.959+08	2018-03-27 11:13:17.965+08	5aeba65e-e787-4076-8e03-a33698701ff2	2	t	f
1793	physicalvalue	压力	Output	\N			3	10	0	MPa		2018-03-14 15:32:53.61+08	2018-03-29 15:30:49.765+08	68518b11-55c5-4191-8116-1d27ee89268e	2	t	f
1659	1dsfdsfdffffffffffff	2	Variable	\N		1	0	2	1	\N		2018-01-26 13:57:56.089+08	2018-04-03 14:23:30.347+08	3825f4a5-cc05-4d5a-860a-c277ff0c1cc6	1	t	f
2228	physicalvalue	荷载	Output	\N			4	200	-200	kN		2018-04-16 16:00:54.79+08	2018-04-16 17:50:10.551+08	ad6a8655-acd4-4092-ac47-6d7e96cdb2a2	2	t	f
1682	length	液位	Output	\N			3	300	0	mm		2018-02-27 09:46:30.768+08	2018-04-17 11:51:44.705+08	4763af57-7fa9-48b5-a8f2-db469fce1e1a	2	t	f
2315	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-06-01 16:29:15.01+08	2018-06-01 16:29:15.01+08	164546bd-01df-4cb9-a0f0-27590351aa74	2	t	f
2330	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-06-14 10:35:46.52+08	2018-06-14 10:35:46.527+08	6be3220f-3cb0-4081-8ef4-a7c51cecda48	5	t	f
1666	pressure	压强	Output	\N			5	200	0	KPa		2018-02-05 11:21:49.796+08	2018-06-29 10:34:36.811+08	69df2525-998a-4f00-a7f5-857a888eb1b9	2	t	f
1664	pressure	压强	Output	\N			4	1000	0	KPa		2018-02-05 11:21:19.481+08	2018-06-29 10:35:21.892+08	88d7fc54-bcbf-4532-839e-0dc916df537e	2	t	f
2369	temperature	温度	Output	\N	\N	\N	2	100	-40	℃		2018-07-02 10:37:28.27+08	2018-07-02 10:37:28.27+08	e9b6e859-1dc9-499b-8656-99edd12b4157	2	t	f
2314	physicalvalue	应变值	Output	\N			3	\N	\N	με		2018-06-01 16:29:15.003+08	2018-12-18 14:33:48.58+08	164546bd-01df-4cb9-a0f0-27590351aa74	2	t	f
2460	load	载重	Output	\N	\N	\N	2	\N	\N	\N		2018-07-23 15:18:45.589+08	2018-07-23 15:18:45.596+08	55950607-45e9-4bdd-a586-388468bf4669	2	t	f
2461	range	幅度	Output	\N	\N	\N	2	\N	\N			2018-07-23 15:19:10.919+08	2018-07-23 15:19:10.935+08	55950607-45e9-4bdd-a586-388468bf4669	2	t	f
2462	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-07-23 15:19:36.781+08	2018-07-23 15:19:36.793+08	55950607-45e9-4bdd-a586-388468bf4669	2	t	f
2463	angle	角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:20:07.514+08	2018-07-23 15:20:07.519+08	55950607-45e9-4bdd-a586-388468bf4669	2	t	f
2042	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:00:03.747+08	2018-03-26 16:00:03.753+08	381fa9a7-3a18-49ce-91bb-b29ebd23429f	2	t	f
2044	physicalvalue	水压	Output	\N	\N	\N	4	0.8	0	MPa		2018-03-26 16:01:08.854+08	2018-03-26 16:01:08.862+08	381fa9a7-3a18-49ce-91bb-b29ebd23429f	2	t	f
1799	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-14 15:53:54.011+08	2018-03-14 15:53:54.011+08	146da222-f300-4109-b71f-337ad767c336	2	t	f
1800	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-03-14 15:53:54.016+08	2018-03-14 15:53:54.016+08	146da222-f300-4109-b71f-337ad767c336	2	t	f
1804	frequency	频率	Output	\N			3	\N	\N	HZ		2018-03-14 16:17:20.819+08	2018-03-14 16:17:20.819+08	5bab107f-be1b-4c0d-a2cf-207aae73d273	2	t	f
1806	temperature	温度	Output	\N			2	80	-20	℃		2018-03-14 16:17:20.828+08	2018-03-14 16:17:20.828+08	5bab107f-be1b-4c0d-a2cf-207aae73d273	2	t	f
2050	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-26 16:19:06.174+08	2018-03-26 16:19:06.182+08	9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	2	t	f
1805	physicalvalue	应变	Output	\N			3	3000	-3000	με		2018-03-14 16:17:20.824+08	2018-03-23 11:00:02.261+08	5bab107f-be1b-4c0d-a2cf-207aae73d273	2	t	f
1798	physicalvalue	应变	Output	\N			3	800	-1200	με	负数为压力 正数为张力	2018-03-14 15:53:54.005+08	2018-03-23 14:22:02.512+08	146da222-f300-4109-b71f-337ad767c336	2	t	f
1851	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-03-23 17:38:26.254+08	2018-03-23 17:38:26.261+08	798127c2-0250-443c-8627-ac234388ae50	2	t	f
2052	physicalvalue	水压	Output	\N	\N	\N	4	0.4	0	MPa		2018-03-26 16:20:10.266+08	2018-03-26 16:20:10.272+08	9f6bcc66-e76f-49d5-87e4-fd469c6af1d0	2	t	f
2061	anglex	x方向倾角	Output	\N	\N	\N	6	\N	\N	°		2018-03-26 16:47:53.779+08	2018-03-26 16:47:53.779+08	ac2bc3da-4bf9-435b-b48f-d06f4cabd50a	2	t	f
2062	angley	y方向倾角	Output	\N	\N	\N	6	\N	\N	°		2018-03-26 16:47:53.786+08	2018-03-26 16:47:53.786+08	ac2bc3da-4bf9-435b-b48f-d06f4cabd50a	2	t	f
2063	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-03-26 16:51:26.339+08	2018-03-26 16:51:26.347+08	f19d92bc-802e-4662-9419-3f664f0d7eba	2	t	f
2069	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-26 17:01:49.28+08	2018-03-26 17:01:49.289+08	606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	2	t	f
2070	physicalvalue	位移	Output	\N	\N	\N	3	100	0	mm		2018-03-26 17:02:22.954+08	2018-03-26 17:02:22.959+08	606bd0b9-0694-4ff6-b0f2-f591ab56a3d4	2	t	f
2128	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:00:40.999+08	2018-04-08 14:00:40.999+08	8e60936a-d379-48c0-bab9-7f9d02c1a5f0	2	t	f
2129	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:00:41.005+08	2018-04-08 14:00:41.005+08	8e60936a-d379-48c0-bab9-7f9d02c1a5f0	2	t	f
2131	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:00:41.042+08	2018-04-08 14:00:41.042+08	5d266e86-fadf-4335-843c-a721ecb814c3	2	t	f
2132	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:00:41.046+08	2018-04-08 14:00:41.046+08	5d266e86-fadf-4335-843c-a721ecb814c3	2	t	f
2134	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:24.503+08	2018-04-08 14:06:24.503+08	c160a4b0-d8da-4e66-ae49-305ecdd5ca48	2	t	f
2135	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:24.506+08	2018-04-08 14:06:24.506+08	c160a4b0-d8da-4e66-ae49-305ecdd5ca48	2	t	f
2137	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:24.527+08	2018-04-08 14:06:24.527+08	b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a	2	t	f
2138	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:24.529+08	2018-04-08 14:06:24.529+08	b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a	2	t	f
2370	PM25	PM2.5浓度	Output	\N	\N	\N	\N	\N	\N	ug/m3		2018-07-02 11:17:44.849+08	2018-07-02 11:17:44.853+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2241	physicalvalue	荷载	Output	\N			4	400	-400	kN		2018-04-16 16:14:50.374+08	2018-04-16 17:50:51.204+08	c86b0543-8d73-4c04-95d7-aa52f68d8c67	2	t	f
2136	physicalvalue	压强	Output	\N			4	0.2	0	Mpa		2018-04-08 14:06:24.52+08	2018-04-08 14:16:18.813+08	c160a4b0-d8da-4e66-ae49-305ecdd5ca48	2	t	f
2139	physicalvalue	压强	Output	\N			4	0.2	0	MPa		2018-04-08 14:06:24.531+08	2018-04-08 14:16:24.408+08	b446a06d-eb4f-4b6f-98ff-4eba1f2dd35a	2	t	f
2133	physicalvalue	压强	Output	\N			4	0.1	0	MPa		2018-04-08 14:00:41.051+08	2018-04-08 14:16:37.722+08	5d266e86-fadf-4335-843c-a721ecb814c3	2	t	f
2130	physicalvalue	压强	Output	\N			4	0.1	0	Mpa		2018-04-08 14:00:41.033+08	2018-04-08 14:16:43.73+08	8e60936a-d379-48c0-bab9-7f9d02c1a5f0	2	t	f
2242	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:14:50.378+08	2018-04-16 16:14:50.378+08	c86b0543-8d73-4c04-95d7-aa52f68d8c67	2	t	f
2243	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:14:50.387+08	2018-04-16 16:14:50.387+08	c86b0543-8d73-4c04-95d7-aa52f68d8c67	2	t	f
2244	am	温度	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:14:50.392+08	2018-04-16 16:14:50.392+08	c86b0543-8d73-4c04-95d7-aa52f68d8c67	2	t	f
2245	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-04-16 16:14:50.488+08	2018-04-16 16:14:50.488+08	b5c9d48e-6b32-41c8-ad53-93f60da390b1	2	t	f
2246	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-04-16 16:14:50.507+08	2018-04-16 16:14:50.507+08	b5c9d48e-6b32-41c8-ad53-93f60da390b1	2	t	f
2247	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-16 16:14:51.085+08	2018-04-16 16:14:51.085+08	b5c9d48e-6b32-41c8-ad53-93f60da390b1	2	t	f
2248	physicalvalue	荷载	Output	\N			4	400	-400	kN		2018-04-16 16:14:51.122+08	2018-04-16 17:51:00.657+08	b5c9d48e-6b32-41c8-ad53-93f60da390b1	2	t	f
2258	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-04-18 17:03:02.791+08	2018-04-18 17:03:02.798+08	08d15c9c-009a-49dd-bf90-c1c2b55a229d	5	t	f
2284	test	11111	Output	\N	\N	\N	\N	\N	\N	\N		2018-05-18 14:30:30.283+08	2018-05-18 14:30:30.289+08	c135c6c2-af77-42b4-9fd8-a684c629383e	1	t	f
2316	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	\N		2018-06-04 18:00:22.406+08	2018-06-04 18:00:22.406+08	b94c6303-8f36-416c-9210-9a8bbeb2d8e9	5	t	f
2317	temperature	温度	Output	\N			2	120	-40	℃		2018-06-05 14:53:28.371+08	2018-06-05 14:53:42.868+08	e2359d98-6bbd-4d7e-b370-d8c81c765dc0	2	t	f
2331	lmin	\N	Output	\N	\N	\N	\N	\N	\N	\N		2018-06-15 17:09:27.716+08	2018-06-15 17:09:27.716+08	50c50ca6-2fa4-4c78-903e-78fccdee6100	2	t	f
2332	lmax		Output	\N	\N	\N	\N	\N	\N			2018-06-15 17:09:27.724+08	2018-06-15 17:09:27.724+08	50c50ca6-2fa4-4c78-903e-78fccdee6100	2	t	f
2376	TVOC	TVOC浓度	Output	\N			3	\N	\N	mg/m3		2018-07-02 11:24:42.728+08	2018-08-30 10:40:42.791+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2408	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-07-05 14:21:10.276+08	2018-07-05 14:21:10.276+08	ead31896-f035-4ed5-8732-526210a6bfa2	2	t	f
2409	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2018-07-05 14:21:10.295+08	2018-07-05 14:21:10.295+08	ead31896-f035-4ed5-8732-526210a6bfa2	2	t	f
2464	height	高度	Output	\N	\N	\N	2	\N	\N	m		2018-07-23 15:20:38.534+08	2018-07-23 15:20:38.541+08	55950607-45e9-4bdd-a586-388468bf4669	2	t	f
2470	noise	噪声	Output	\N	\N	\N	2	\N	\N	dB		2018-07-23 15:27:12.264+08	2018-07-23 15:27:12.269+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	2	t	f
2475	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:32:41.024+08	2018-07-23 15:32:41.03+08	dd168476-c9b6-4bdf-802c-dd55353c4f42	2	t	f
2478	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:35:25.331+08	2018-07-23 15:35:25.337+08	dafbdb25-384d-4431-b8b4-13396a4c781b	2	t	f
2333	laeq		Output	\N			\N	\N	\N			2018-06-15 17:09:27.731+08	2018-07-24 17:59:12.205+08	50c50ca6-2fa4-4c78-903e-78fccdee6100	2	t	f
2321	length	距离	Output	\N			4	30000	0	mm		2018-06-07 14:26:49.13+08	2018-12-20 09:24:45.187+08	f259b7e6-928b-4ef0-8752-bfdf1a834dc4	2	t	f
1698	liquidLevel	沉降	Output	\N	\N	\N	3	\N	\N	mm		2018-03-01 14:30:17.239+08	2018-03-01 14:30:17.247+08	b38d50f8-60f9-44b9-865d-647810e416cf	2	t	f
2472	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:30:21.742+08	2018-07-23 15:30:21.754+08	b41fcafa-5351-45f4-9151-991053b2229e	2	t	f
2473	force	轴力	Output	\N	\N	\N	2	\N	\N	KN		2018-07-23 15:30:52.428+08	2018-07-23 15:30:52.433+08	b41fcafa-5351-45f4-9151-991053b2229e	2	t	f
2080	physicalvalue	位移	Output	\N	\N	\N	3	200	0	mm		2018-03-27 11:02:21.097+08	2018-03-27 11:02:21.11+08	6ebb2c0f-06fa-4b77-b028-4818465a7019	2	t	f
2086	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 11:08:29.073+08	2018-03-27 11:08:29.08+08	533e4f1c-c95f-46b6-9d76-1e77bcd20732	2	t	f
2093	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-03-27 11:24:29.61+08	2018-03-27 11:24:29.616+08	fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a	2	t	f
2094	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2018-03-27 11:24:54.298+08	2018-03-27 11:24:54.305+08	fb9e1eb8-cd2a-4c4c-8395-78cf468ad98a	2	t	f
2140	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:25.444+08	2018-04-08 14:06:25.444+08	c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5	2	t	f
2141	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:25.448+08	2018-04-08 14:06:25.448+08	c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5	2	t	f
2143	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:25.46+08	2018-04-08 14:06:25.46+08	8b5d7571-fbed-4a64-8ae5-158979e259d4	2	t	f
2144	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:25.463+08	2018-04-08 14:06:25.463+08	8b5d7571-fbed-4a64-8ae5-158979e259d4	2	t	f
2474	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:32:15.208+08	2018-07-23 15:32:15.213+08	dd168476-c9b6-4bdf-802c-dd55353c4f42	2	t	f
2476	displacement	支架水平位移	Output	\N	\N	\N	2	\N	\N	mm		2018-07-23 15:33:09.779+08	2018-07-23 15:33:09.787+08	dd168476-c9b6-4bdf-802c-dd55353c4f42	2	t	f
2142	physicalvalue	压强	Output	\N			4	0.3	0	Mpa		2018-04-08 14:06:25.45+08	2018-04-08 14:15:57.945+08	c5b8fbc8-aee5-43cd-a2e8-6f48cfe463e5	2	t	f
2145	physicalvalue	压强	Output	\N			4	0.3	0	MPa		2018-04-08 14:06:25.472+08	2018-04-08 14:16:02.812+08	8b5d7571-fbed-4a64-8ae5-158979e259d4	2	t	f
2164	length	位移	Output	\N			5	10	0	mm		2018-04-08 14:40:14.002+08	2018-04-08 15:46:06.998+08	93d4d05c-a5fe-48b1-88ff-1cb39cfdf02d	2	t	f
2166	length	位移	Output	\N			5	10	0	mm		2018-04-08 14:40:14.015+08	2018-04-08 15:46:27.412+08	b484a973-d8b7-4e1f-a3a1-8be21122c6fe	2	t	f
2259	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-04-18 17:04:33.126+08	2018-04-18 17:04:33.133+08	f45f4852-853f-4a66-a359-8b48c4624b75	5	t	f
2285	1123	1	Variable	\N	\N	1213	\N	\N	\N	123	231	2018-05-18 15:14:35.068+08	2018-05-18 15:14:35.074+08	c64d06e4-145c-4bbb-919c-1147dac429b9	6	t	f
2318	laeq	\N	Output	\N	\N	\N	\N	\N	\N	\N		2018-06-06 18:05:17.097+08	2018-06-06 18:05:17.097+08	8f4cc815-04e2-482c-afbc-e565f35e0f76	2	t	f
2319	lmax	\N	Output	\N	\N	\N	\N	\N	\N	\N		2018-06-06 18:05:29.122+08	2018-06-06 18:05:29.132+08	8f4cc815-04e2-482c-afbc-e565f35e0f76	2	t	f
2335	physicalvalue	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2018-06-19 09:48:52.809+08	2018-06-19 09:48:52.816+08	6f11ad74-c92f-4122-8e48-31a6684e862f	2	t	f
2371	PM10	PM10浓度	Output	\N	\N	\N	3	\N	\N	ug/m3		2018-07-02 11:20:26.58+08	2018-07-02 11:20:26.676+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2374	CO	CO浓度	Output	\N	\N	\N	3	\N	\N	ppm		2018-07-02 11:23:15.189+08	2018-07-02 11:23:15.198+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2419	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2018-07-10 17:34:19.976+08	2018-07-10 17:34:19.996+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
2322	physicalvalue	距离	Output	\N			3	30	0	m		2018-06-07 15:37:44.402+08	2020-06-10 13:49:53.05+08	5de3dae0-fa13-4844-9c58-c960926aa470	2	t	f
2433	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	\N		2018-07-18 09:51:58.266+08	2018-07-18 09:51:58.266+08	621548d2-0189-47af-9d78-c0e928b92373	5	t	f
2434	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2018-07-18 09:56:45.593+08	2018-07-18 09:56:45.598+08	68ac3567-5ac9-48f6-9dc3-121be2e321b0	2	t	f
2479	settling	模板沉降	Output	\N	\N	\N	2	\N	\N	mm		2018-07-23 15:35:46.124+08	2018-07-23 15:35:46.129+08	dafbdb25-384d-4431-b8b4-13396a4c781b	2	t	f
2494	inputState	输入状态	Output	\N	\N	\N	\N	\N	\N			2018-07-28 17:15:42.973+08	2018-07-28 17:15:42.973+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2498	controlState	继电器控制状态	Output	\N	\N	\N	\N	\N	\N			2018-07-28 17:18:01.401+08	2018-07-28 17:18:01.401+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2491	obliquity	塔机倾角	Output	\N			2	\N	\N	°		2018-07-28 17:13:18.054+08	2018-07-31 09:36:47.233+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2534	pressure	压强	Output	\N	\N	\N	4	2	0	MPa		2018-08-01 09:12:42.034+08	2018-08-01 09:12:42.034+08	55fe806c-652f-4b2c-a677-fa5aea862762	2	t	f
2539	pressure	压强	Output	\N	\N	\N	5	0.5	0	MPa		2018-08-01 09:34:32.173+08	2018-08-01 09:34:32.173+08	985c0298-b963-4823-8fdc-38feb70806e1	2	t	f
2540	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-08-01 16:06:48.298+08	2018-08-01 16:06:48.298+08	a59e747f-2b34-4867-bd4b-47994c6dc9b7	5	t	f
2557	y	Y方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:41:04.609+08	2018-08-02 10:41:04.609+08	87e911f0-3894-42f6-a05a-80c30c7e565e	2	t	f
2559	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-02 10:41:04.622+08	2018-08-02 10:41:04.622+08	87e911f0-3894-42f6-a05a-80c30c7e565e	2	t	f
2568	physicalvalue	风速	Output	\N			2	\N	\N	m/s		2018-08-03 10:36:00.514+08	2018-08-03 10:38:02.924+08	380bb834-b2d8-495f-bccf-075375161a49	2	t	f
2570	current	模拟量	Output	\N	\N	\N	3	\N	\N	mA		2018-08-03 10:40:50.604+08	2018-08-03 10:40:50.604+08	c5d291cd-bb26-4192-9454-e686cb8c1f9a	2	t	f
2581	physicalvalue	X轴角度	Output	\N			2	\N	\N	°		2018-08-09 14:55:00.875+08	2018-08-09 14:58:50.662+08	420c05f9-c835-4821-ac21-7cf1575dabb1	2	t	f
2588	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-09 16:19:28.515+08	2018-08-09 16:19:28.515+08	c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c	2	t	f
2587	physicalvalue	应力	Output	\N			3	\N	\N	MPa		2018-08-09 16:19:28.511+08	2018-08-09 17:32:25.488+08	c0109f4c-f2dd-4a7d-85a5-e1c2ee65cd2c	2	t	f
2577	physicalvalue	饶度	Output	\N			4	\N	\N	mm		2018-08-09 14:40:15.573+08	2018-08-10 09:44:08.497+08	201d630c-2dfb-4918-8d48-0dc931b2337d	2	t	f
2595	physicalvalue	位移	Output	\N			4	\N	\N	mm		2018-08-10 09:48:55.491+08	2018-08-10 09:49:22.105+08	0f7dadf8-5ab5-4a5d-b8b7-9d33d10e8d83	2	t	f
2579	physicalvalue	位移	Output	\N			4	\N	\N	mm		2018-08-09 14:40:18.319+08	2018-08-10 09:49:34.402+08	73438936-0d17-4107-85bc-2348926e9746	2	t	f
2596	physicalvalue	X轴角度	Output	\N			2	\N	\N	°		2018-08-10 09:50:00.675+08	2018-08-10 09:50:00.675+08	37ee5f1d-d770-4c7a-b901-3f060b88fe86	2	t	f
2605	wavelength	波长	Output	\N	\N	\N	\N	\N	\N	\N		2018-08-10 16:23:43.239+08	2018-08-10 16:23:43.239+08	fee66142-81ed-4cdc-8465-19d0f7acd6ec	2	t	f
2608	wavelength	波长	Output	\N	\N	\N	\N	\N	\N	\N		2018-08-10 17:03:21.002+08	2018-08-10 17:03:21.002+08	4d1bca0a-fa5c-4af2-adc9-ded21aff72da	2	t	f
2612	length	距离	Output	\N	\N	\N	2			mm		2018-08-14 14:13:28.653+08	2018-08-14 14:13:28.653+08	0ad35b65-43ba-4521-bc02-63bd34be0a39	2	t	f
2607	physicalvalue	温度	Output	\N			2	\N	\N	℃		2018-08-10 17:03:20.996+08	2018-08-10 17:04:19.598+08	4d1bca0a-fa5c-4af2-adc9-ded21aff72da	2	t	f
2604	physicalvalue	应变	Output	\N			6	\N	\N	με		2018-08-10 16:23:43.227+08	2018-08-10 17:05:35.042+08	fee66142-81ed-4cdc-8465-19d0f7acd6ec	2	t	f
2618	packtemperature3	探头温度C	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 16:20:43.304+08	2018-08-14 16:20:43.304+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	2	t	f
2620	voltage	节点电压	Output	\N	\N	\N	\N	\N	\N	mv		2018-08-14 16:22:08.758+08	2018-08-14 16:22:08.758+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	1	t	f
2621	O2	氧气浓度	Output	\N	\N	\N	2	\N	\N	%		2018-08-14 16:27:48.865+08	2018-08-14 16:27:48.865+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	2	t	f
1700	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 10:30:31.633+08	2018-03-02 10:30:31.639+08	5d7b8c97-4528-4c8a-8da7-bcc37d2a9ed2	2	t	f
2417	workValue_Sum	工况累积量	Output	\N	\N	\N	\N	\N	\N	m³/h		2018-07-10 17:32:32.764+08	2018-07-10 17:32:32.769+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
2418	workValue_Instant	工况瞬时量	Output	\N	\N	\N	\N	\N	\N	m³/h		2018-07-10 17:34:02.388+08	2018-07-10 17:34:02.393+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
1855	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2018-03-23 17:59:16.99+08	2018-03-23 17:59:17.002+08	0226f5d5-c83d-4a9b-8448-adb854fa4336	2	t	f
1856	anglex	X轴角度	Output	\N	\N	\N	2	30	-30			2018-03-23 17:59:41.108+08	2018-03-23 17:59:41.115+08	0226f5d5-c83d-4a9b-8448-adb854fa4336	2	t	f
1857	angley	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2018-03-23 18:00:15.086+08	2018-03-23 18:00:15.091+08	0226f5d5-c83d-4a9b-8448-adb854fa4336	2	t	f
2092	physicalvalue	应变	Output	\N			3	3000	-3000	με		2018-03-27 11:14:06.92+08	2018-03-27 11:14:14.45+08	5aeba65e-e787-4076-8e03-a33698701ff2	2	t	f
2096	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-03-27 11:29:53.95+08	2018-03-27 11:29:53.955+08	79cc1497-99b7-4eb4-bbb5-b69192903d18	2	t	f
2097	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-27 11:30:10.105+08	2018-03-27 11:30:10.111+08	79cc1497-99b7-4eb4-bbb5-b69192903d18	2	t	f
2262	temperature	温度	Output	\N	\N	\N	5	\N	\N	℃		2018-04-24 14:42:02.903+08	2018-04-24 14:42:02.911+08	1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b	2	t	f
2098	physicalvalue	应变	Output	\N			4	1500	-1500	με		2018-03-27 11:30:41.05+08	2018-03-27 11:31:00.072+08	79cc1497-99b7-4eb4-bbb5-b69192903d18	2	t	f
2146	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:26.079+08	2018-04-08 14:06:26.079+08	72a5348d-2988-4bd5-ad2b-b46b616e70a9	2	t	f
2147	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:26.083+08	2018-04-08 14:06:26.083+08	72a5348d-2988-4bd5-ad2b-b46b616e70a9	2	t	f
2149	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:26.099+08	2018-04-08 14:06:26.099+08	b689f4eb-472a-4f21-93e2-9a7c753479bd	2	t	f
2150	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:26.105+08	2018-04-08 14:06:26.105+08	b689f4eb-472a-4f21-93e2-9a7c753479bd	2	t	f
2152	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:27.125+08	2018-04-08 14:06:27.125+08	fa4989e0-0602-43e4-a5d6-3b5492e9711d	2	t	f
2153	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:27.131+08	2018-04-08 14:06:27.131+08	fa4989e0-0602-43e4-a5d6-3b5492e9711d	2	t	f
2155	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:27.153+08	2018-04-08 14:06:27.153+08	5d4fd2cc-9b83-48da-80df-6dd615d69195	2	t	f
2156	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:27.157+08	2018-04-08 14:06:27.157+08	5d4fd2cc-9b83-48da-80df-6dd615d69195	2	t	f
2158	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:27.659+08	2018-04-08 14:06:27.659+08	88f8eecf-bb3b-4dbc-b003-2c28bdf07be4	2	t	f
2159	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:27.662+08	2018-04-08 14:06:27.662+08	88f8eecf-bb3b-4dbc-b003-2c28bdf07be4	2	t	f
2161	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2018-04-08 14:06:27.668+08	2018-04-08 14:06:27.668+08	a40e7ecd-bd8d-4e58-95af-f964d8861447	2	t	f
2162	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-04-08 14:06:27.67+08	2018-04-08 14:06:27.67+08	a40e7ecd-bd8d-4e58-95af-f964d8861447	2	t	f
2286	physicalvalue	加速度	Output	\N			0			\N		2018-05-22 15:54:50.848+08	2018-06-04 17:48:57.437+08	7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	5	t	f
2320	lmin		Output	\N	\N	\N	\N	\N	\N			2018-06-06 18:05:41.484+08	2018-06-06 18:05:41.491+08	8f4cc815-04e2-482c-afbc-e565f35e0f76	2	t	f
2323	length	距离	Output	\N			3	30	0	m		2018-06-07 15:54:22.28+08	2018-06-07 15:54:22.28+08	1e068f94-2089-43a7-89d1-f2c5be29ab86	2	t	f
2160	physicalvalue	压强	Output	\N			4	1	0	MPa		2018-04-08 14:06:27.664+08	2018-04-08 14:15:12.253+08	88f8eecf-bb3b-4dbc-b003-2c28bdf07be4	2	t	f
2163	physicalvalue	压强	Output	\N			4	1	0	MPa		2018-04-08 14:06:27.672+08	2018-04-08 14:15:17.79+08	a40e7ecd-bd8d-4e58-95af-f964d8861447	2	t	f
2157	physicalvalue	压强	Output	\N			4	0.6	0	MPa		2018-04-08 14:06:27.164+08	2018-04-08 14:15:27.321+08	5d4fd2cc-9b83-48da-80df-6dd615d69195	2	t	f
2154	physicalvalue	压强	Output	\N			4	0.6	0	MPa		2018-04-08 14:06:27.136+08	2018-04-08 14:15:34.271+08	fa4989e0-0602-43e4-a5d6-3b5492e9711d	2	t	f
2148	physicalvalue	压强	Output	\N			4	0.4	0	MPa		2018-04-08 14:06:26.088+08	2018-04-08 14:15:44.426+08	72a5348d-2988-4bd5-ad2b-b46b616e70a9	2	t	f
2151	physicalvalue	压强	Output	\N			4	0.4	0	MPa		2018-04-08 14:06:26.108+08	2018-04-08 14:15:49.102+08	b689f4eb-472a-4f21-93e2-9a7c753479bd	2	t	f
2260	anglex	X轴角度	Output	\N			4	15	-15	°		2018-04-24 14:39:30.96+08	2018-04-24 14:39:48.753+08	1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b	2	t	f
2336	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-06-19 09:49:19.696+08	2018-06-19 09:49:19.712+08	6f11ad74-c92f-4122-8e48-31a6684e862f	2	t	f
2421	direction	风向	Output	\N	\N	\N	3	\N	\N	°		2018-07-11 10:42:10.737+08	2018-07-11 10:42:10.745+08	08e932f8-151e-489f-9035-af9518581665	2	t	f
2372	SO2	SO2浓度	Output	\N	\N	\N	3	\N	\N	ppb		2018-07-02 11:21:11.578+08	2018-07-02 11:21:11.584+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2375	O3	O3浓度	Output	\N	\N	\N	3	\N	\N	ppb		2018-07-02 11:24:09.733+08	2018-07-02 11:24:09.739+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2411	anglex	X轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-07-09 13:38:45.549+08	2018-07-09 13:38:45.56+08	4563e22f-dc9b-4a86-a3df-5cae88d78dfa	2	t	f
2415	standValue_Instant	标况瞬时量	Output	\N	\N	\N	\N	\N	\N	m³/h		2018-07-10 17:29:52.862+08	2018-07-10 17:29:52.869+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
2435	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2018-07-18 09:57:22.424+08	2018-07-18 09:57:22.428+08	68ac3567-5ac9-48f6-9dc3-121be2e321b0	2	t	f
2438	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2018-07-18 09:59:53.389+08	2018-07-18 09:59:53.98+08	8f5658b2-c72d-4918-8f4c-e23b57d193a6	2	t	f
2467	pm25	PM2.5	Output	\N	\N	\N	\N	\N	\N	ug/m³		2018-07-23 15:25:02.481+08	2018-07-23 15:25:02.489+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	2	t	f
2477	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:35:01.179+08	2018-07-23 15:35:01.185+08	dafbdb25-384d-4431-b8b4-13396a4c781b	2	t	f
2493	powerQuantity	电池电量	Output	\N			0	100	0	%		2018-07-28 17:14:33.477+08	2018-07-31 10:22:51.902+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2492	stringFactor	吊绳倍率	Output	\N			0	\N	\N	根		2018-07-28 17:14:00.112+08	2018-07-31 10:23:37.712+08	fe52923b-3bb6-4390-be5f-32733342b67b	1	t	f
2535	pressure	压强	Output	\N	\N	\N	4	2	0	MPa		2018-08-01 09:13:22.551+08	2018-08-01 09:13:22.551+08	273814e4-c4be-4198-9dd6-4d1f19cb0033	2	t	f
2569	current	模拟量	Output	\N	\N	\N	3	\N	\N	mA		2018-08-03 10:40:22.628+08	2018-08-03 10:40:22.628+08	380bb834-b2d8-495f-bccf-075375161a49	2	t	f
2572	current	模拟量	Output	\N	\N	\N	3	\N	\N	mA		2018-08-03 10:41:17.502+08	2018-08-03 10:41:17.502+08	e17bf88d-d539-4c9d-9504-37c08672d5ba	2	t	f
2571	physicalvalue	风向	Output	\N			2	\N	\N	°		2018-08-03 10:41:17.491+08	2018-08-03 10:41:52.295+08	e17bf88d-d539-4c9d-9504-37c08672d5ba	2	t	f
2597	pressure	压力	Output	\N	\N	\N	3	\N	\N	mm		2018-08-10 13:59:30.084+08	2018-08-10 13:59:30.084+08	b15c0841-8700-42f6-ad9e-cfcd0c6f5665	2	t	f
2583	physicalvalue	应力	Output	\N			3	\N	\N	Mpa		2018-08-09 15:00:04.573+08	2018-08-09 15:56:47.759+08	0e3776d4-f177-404e-90be-59cb211c9921	2	t	f
2613	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 14:16:02.902+08	2018-08-14 14:16:02.902+08	0ad35b65-43ba-4521-bc02-63bd34be0a39	2	t	f
2560	temperature	温度	Output	\N			2			℃		2018-08-02 15:10:25.428+08	2018-12-29 10:16:40.861+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
1702	am	幅值	Output	\N			3	\N	\N	mv		2018-03-02 11:18:56.177+08	2018-03-02 11:19:03.642+08	45469a20-748c-4740-9741-4c971a209601	2	t	f
2168	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-04-09 08:05:45.701+08	2018-04-09 08:05:45.716+08	def3cc25-dff3-43d3-b77c-855e1683db60	2	t	f
1821	wavelength	波长	Output	\N	\N	\N	5	\N	\N	\N		2018-03-16 11:39:28.698+08	2018-03-16 11:39:28.716+08	7b458eae-2daa-407f-8597-e3a64d0dbb65	2	t	f
1822	phy	物理值	Output	\N	\N	\N	5	\N	\N			2018-03-16 11:39:57.07+08	2018-03-16 11:39:57.077+08	7b458eae-2daa-407f-8597-e3a64d0dbb65	2	t	f
2261	angley	Y轴角度	Output	\N	\N	\N	4	15	-15	°		2018-04-24 14:40:21.186+08	2018-04-24 14:40:21.196+08	1ea28db3-0c1b-4b71-8fb6-d38b5b55fc3b	2	t	f
2287	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-05-23 10:55:33.023+08	2018-05-23 10:55:33.03+08	37a8aa55-7282-4e2a-8cf5-a32e6a00c381	5	t	f
2644	temperature	温度	Output	\N			3	40	0	℃		2018-08-15 14:41:47.949+08	2018-08-15 14:41:47.949+08	3f7364b2-c949-4499-a485-82f0a141968e	2	t	f
1813	Resistor2	电阻2	Output	\N			3			Ω		2018-03-15 15:37:21.465+08	2018-03-23 14:29:17.327+08	d6f7c1bb-56ff-4e70-b237-b1c8cfd826ac	2	t	f
2614	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 15:32:39.128+08	2018-08-14 15:32:39.128+08	f9a40c12-42a9-45fa-b780-10df712e19af	2	t	f
1858	frequency	频率	Output	\N	\N	\N	6	\N	\N	\N		2018-03-25 19:20:50.006+08	2018-03-25 19:20:50.006+08	af89ba1b-5b99-481c-a213-a2171c2e4700	2	t	f
1859	temperature	温度	Output	\N	\N	\N	4	\N	\N			2018-03-25 19:20:50.011+08	2018-03-25 19:20:50.011+08	af89ba1b-5b99-481c-a213-a2171c2e4700	2	t	f
1860	am	幅值	Output	\N	\N	\N	8	\N	\N			2018-03-25 19:20:50.016+08	2018-03-25 19:20:50.016+08	af89ba1b-5b99-481c-a213-a2171c2e4700	2	t	f
1861	physicalvalue	应变	Output	\N	\N	\N	4	\N	\N			2018-03-25 19:20:50.023+08	2018-03-25 19:20:50.023+08	af89ba1b-5b99-481c-a213-a2171c2e4700	2	t	f
1873	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-03-26 11:27:33.452+08	2018-03-26 11:27:33.452+08	f4d2673b-f6ac-4be7-9068-95a68442426e	2	t	f
1874	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-03-26 11:27:33.461+08	2018-03-26 11:27:33.461+08	614819ae-798a-406e-befe-fe6749ac5536	2	t	f
1883	physicalvalue	荷载力	Output	\N			4	160	-160	kN		2018-03-26 11:35:24.362+08	2018-03-26 11:39:02.738+08	ba74ef0e-3ec4-4203-9d65-17906c8f64d1	2	t	f
1884	physicalvalue	荷载力	Output	\N			4	160	-160	kN		2018-03-26 11:35:24.368+08	2018-03-26 11:39:09.945+08	fdd4dd73-2235-45a2-98b3-c7838697717c	2	t	f
2324	length	距离	Output	\N			4	30	0	m		2018-06-07 15:54:34.23+08	2018-06-07 15:54:34.23+08	dc3fee9e-0633-4af5-9ef7-39f838c935e9	2	t	f
1824	rms	有效值	Output	\N			5					2018-03-16 14:02:57.809+08	2018-06-11 10:35:54.512+08	7685d43c-d87a-4eb4-88e0-1bde3d9eed5b	2	t	f
2337	length	距离	Output	\N	\N	\N	4	\N	\N	m		2018-06-19 09:51:04.798+08	2018-06-19 09:51:04.807+08	d41d604d-7dba-4a66-902c-8b1257cde117	2	t	f
2377	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-07-02 11:25:02.571+08	2018-07-02 11:25:02.582+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2412	angley	Y轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-07-09 13:39:16.845+08	2018-07-09 13:39:16.896+08	4563e22f-dc9b-4a86-a3df-5cae88d78dfa	2	t	f
2436	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2018-07-18 09:58:04.78+08	2018-07-18 09:58:04.785+08	68ac3567-5ac9-48f6-9dc3-121be2e321b0	2	t	f
2468	pm10	PM10	Output	\N	\N	\N	2	\N		ug/m³		2018-07-23 15:25:59.984+08	2018-07-23 15:25:59.996+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	2	t	f
2471	x	X方向角度	Output	\N	\N	\N	2	\N	\N	°		2018-07-23 15:29:58.521+08	2018-07-23 15:29:58.533+08	b41fcafa-5351-45f4-9151-991053b2229e	2	t	f
2499	direction	风向	Output	\N	\N	\N	\N	\N	\N	\N		2018-07-30 16:25:53.911+08	2018-07-30 16:25:53.911+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	5	t	f
2536	pressure	压强	Output	\N	\N	\N	5	0.2	0	MPa		2018-08-01 09:30:32.647+08	2018-08-01 09:30:32.647+08	5d00a146-91e7-49d0-bd5e-930d092c386b	2	t	f
2537	pressure	压强	Output	\N	\N	\N	\N	5	0	MPa		2018-08-01 09:30:57.608+08	2018-08-01 09:30:57.608+08	08b2e830-9291-4846-89e5-483cf8eca55e	2	t	f
2538	pressure	压强	Output	\N	\N	\N	5	0.5	0	MPa		2018-08-01 09:34:04.432+08	2018-08-01 09:34:04.432+08	0e6129b0-ae01-4822-929e-e8a93b3a63aa	2	t	f
2615	length	距离	Output	\N			2	\N	\N	m		2018-08-14 15:32:39.133+08	2019-10-29 11:34:13.027+08	f9a40c12-42a9-45fa-b780-10df712e19af	2	t	f
2622	MINIR_60_CO2	二氧化碳浓度	Output	\N	\N	\N	2	\N	\N	ppm		2018-08-14 16:28:31.856+08	2018-08-14 16:28:31.856+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	2	t	f
2563	physicalvalue	温度	Output	\N			2	\N	\N	℃		2018-08-03 07:13:57.956+08	2018-08-03 08:29:13.133+08	20a173c1-56c8-4576-8edc-906bdb04f749	2	t	f
2576	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2018-08-07 16:41:05.059+08	2018-08-07 16:41:05.059+08	29e946c4-e67d-4d58-aba2-a16897f4da42	2	t	f
2573	pressure	液位	Output	\N			3	2000	0	mm		2018-08-07 16:39:22.262+08	2018-08-10 14:04:22.212+08	a0cd4a87-661c-43de-928c-22c5d63cbeee	2	t	f
2599	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-10 14:52:45.127+08	2018-08-10 14:52:45.127+08	b0e56599-c58d-4d0a-8a80-f19855b36c80	2	t	f
2600	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2018-08-10 14:52:45.132+08	2018-08-10 14:52:45.132+08	b0e56599-c58d-4d0a-8a80-f19855b36c80	2	t	f
2624	humidity	湿度	Output	\N			2	\N	\N	%RH		2018-08-14 16:29:54.667+08	2018-08-14 16:43:21.675+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	2	t	f
2623	temperature	温度	Output	\N			2	\N	\N	℃		2018-08-14 16:29:29.308+08	2018-08-14 16:43:32.414+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	2	t	f
2626	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 16:49:50.171+08	2018-08-14 16:49:50.171+08	b4b6ffd7-09a1-4348-a270-a89f768a51be	2	t	f
2627	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2018-08-14 16:50:11.633+08	2018-08-14 16:50:11.633+08	b4b6ffd7-09a1-4348-a270-a89f768a51be	2	t	f
2630	temperature	水温	Output	\N	\N	\N	2	\N	\N	℃		2018-08-15 10:22:23.912+08	2018-08-15 10:22:23.912+08	17c83e03-bd23-47ac-ad6f-637082b66444	2	t	f
2632	physicalvalue	应变	Output	\N			3	4000	0	με		2018-08-15 14:38:59.639+08	2018-08-15 14:38:59.639+08	3dbaa950-0bf5-4e4c-966f-8bff21df1e2f	2	t	f
2633	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-08-15 14:38:59.644+08	2018-08-15 14:38:59.644+08	3dbaa950-0bf5-4e4c-966f-8bff21df1e2f	2	t	f
2634	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-08-15 14:38:59.647+08	2018-08-15 14:38:59.647+08	3dbaa950-0bf5-4e4c-966f-8bff21df1e2f	2	t	f
2635	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2018-08-15 14:39:57.315+08	2018-08-15 14:39:57.315+08	a46e04df-5fc2-442e-8ca0-fc7da830f183	2	t	f
2636	physicalvalue	位移	Output	\N			3	200	0	mm		2018-08-15 14:39:57.32+08	2018-08-15 14:39:57.32+08	a46e04df-5fc2-442e-8ca0-fc7da830f183	2	t	f
2637	temperature	温度	Output	\N			2	60	-25	℃		2018-08-15 14:39:57.325+08	2018-08-15 14:39:57.325+08	a46e04df-5fc2-442e-8ca0-fc7da830f183	2	t	f
2645	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-08-15 14:41:47.955+08	2018-08-15 14:41:47.955+08	3f7364b2-c949-4499-a485-82f0a141968e	2	t	f
2646	physicalvalue	水压	Output	\N			3	2500	0	kPa		2018-08-15 14:41:47.959+08	2018-08-15 14:41:47.959+08	3f7364b2-c949-4499-a485-82f0a141968e	2	t	f
2654	wavelength	距离	Output	\N			5	\N	\N			2018-08-16 16:25:36.777+08	2018-08-16 16:26:46.723+08	198e6298-06fe-49a7-9245-eaca7a85f263	2	t	f
2655	physicalvalue	裂缝	Output	\N	\N	\N	2	\N	\N	mm		2018-08-16 16:27:07.596+08	2018-08-16 16:27:07.596+08	198e6298-06fe-49a7-9245-eaca7a85f263	2	t	f
2657	o	操作	Output	\N	bi,bu,bd	\N	\N	\N	\N			2018-08-17 11:28:18.696+08	2018-08-17 11:28:18.696+08	25789235-88db-4ea7-9a8a-5d4aeb5f9532	4	t	f
2659	temperature	温度	Output	\N			2	60	-25	℃		2018-08-17 11:33:00.274+08	2018-08-17 11:38:21.689+08	70486f7c-d11e-4014-be32-71a2e8724359	2	t	f
1704	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 11:26:30.686+08	2018-03-02 11:26:30.704+08	12aa80e0-acfc-43e1-85c9-9cbabe6fa2ee	2	t	f
1705	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 13:55:31.865+08	2018-03-02 13:55:31.871+08	77becc38-82f7-4612-83e2-10e0ebf5e6e3	2	t	f
1706	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-03-02 13:58:26.243+08	2018-03-02 13:58:26.248+08	4412085f-1890-4b38-b715-f72085af2b7b	2	t	f
1814	data2	风向	Output	\N			2	\N	\N	°		2018-03-15 16:51:58.44+08	2018-03-15 16:51:58.44+08	8ceadb1a-8f3b-42df-848d-523f3f16aaf2	2	t	f
1815	data1	风速	Output	\N			3	\N	\N	m/s		2018-03-15 16:51:58.445+08	2018-03-15 16:51:58.445+08	8ceadb1a-8f3b-42df-848d-523f3f16aaf2	2	t	f
1862	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2018-03-26 10:55:28.455+08	2018-03-26 10:55:28.464+08	8bc60164-fa52-4d68-a3b0-2c63af3113c0	2	t	f
1864	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-03-26 11:16:11.516+08	2018-03-26 11:23:05.003+08	7c9f78f3-049b-4f4f-86ce-ed4945136111	2	t	f
1863	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-03-26 11:16:11.502+08	2018-03-26 11:23:12.971+08	aca3e62f-b4ec-46cc-887a-563ce53b652a	2	t	f
2102	physicalvalue	速度	Output	\N	\N	\N	\N	\N	\N	mm/s		2018-03-28 14:54:49.046+08	2018-03-28 14:54:49.046+08	72f27aba-3030-490b-9c55-ca21f1294c15	5	t	f
2169	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-04-09 08:06:14.668+08	2018-04-09 08:06:14.673+08	def3cc25-dff3-43d3-b77c-855e1683db60	2	t	f
2170	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-04-09 08:06:39.816+08	2018-04-09 08:06:39.832+08	def3cc25-dff3-43d3-b77c-855e1683db60	2	t	f
2638	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-08-15 14:40:39.268+08	2018-08-15 14:40:39.268+08	39fc7575-6835-4685-a956-dbbf5987d27b	2	t	f
2639	temperature	温度	Output	\N			3	90	-30	℃		2018-08-15 14:40:39.276+08	2018-08-15 14:40:39.276+08	39fc7575-6835-4685-a956-dbbf5987d27b	2	t	f
2640	physicalvalue	压力	Output	\N			3	6.4	0	MPa		2018-08-15 14:40:39.282+08	2018-08-15 14:40:39.282+08	39fc7575-6835-4685-a956-dbbf5987d27b	2	t	f
2378	humidity	湿度	Output	\N	\N	\N	3	\N	\N	%RH		2018-07-02 11:26:07.28+08	2018-07-02 11:26:07.292+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
2413	str	数据	Output	\N	\N	\N	\N	\N	\N	\N		2018-07-10 11:56:14.981+08	2018-07-10 11:56:14.987+08	e51184be-7ba9-4184-af5e-374044450523	5	t	f
2416	pressure	压力	Output	\N	\N	\N	\N	\N	\N	kpa		2018-07-10 17:30:31.513+08	2018-07-10 17:30:31.518+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
2420	speed	风速	Output	\N	\N	\N	3	\N	\N	m/s		2018-07-11 10:41:27.186+08	2018-07-11 10:41:27.192+08	72516f72-2faf-4bba-8e87-212b422ea7e7	2	t	f
2437	temperature	温度	Output	\N	\N	\N	\N	70	-25	℃		2018-07-18 09:59:31.504+08	2018-07-18 09:59:31.511+08	8f5658b2-c72d-4918-8f4c-e23b57d193a6	2	t	f
2469	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-07-23 15:26:32.736+08	2018-07-23 15:26:32.741+08	4c99b35d-021c-4e0f-a014-5516ee92a8b2	2	t	f
2487	loadValue	吊重	Output	\N			2	\N	\N	t		2018-07-28 17:10:28.318+08	2018-07-31 09:36:20.172+08	fe52923b-3bb6-4390-be5f-32733342b67b	2	t	f
2541	physicalvalue	应变	Output	\N	\N	\N	3	\N	\N	με		2018-08-02 09:53:24.948+08	2018-08-02 09:53:24.948+08	d926943e-d400-4c4c-83c8-2c3a6fd62c1c	2	t	f
2641	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-08-15 14:40:50.454+08	2018-08-15 14:40:50.454+08	bdca95f5-1a68-43cb-8bbd-0940bd4f861e	2	t	f
2589	physicalvalue	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2018-08-10 09:21:02.389+08	2018-08-10 09:21:02.389+08	8b8cab39-63aa-4ef8-95d7-a42959be4592	2	t	f
2590	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-08-10 09:21:02.395+08	2018-08-10 09:21:02.395+08	8b8cab39-63aa-4ef8-95d7-a42959be4592	2	t	f
2593	physicalvalue	湿度	Output	\N			2	\N	\N	%RH		2018-08-10 09:35:53.054+08	2018-08-10 09:36:28.269+08	2528fa6d-da6e-4e88-9316-d13536a1a987	2	t	f
2594	physicalvalue	饶度	Output	\N			4	\N	\N	mm		2018-08-10 09:43:03.964+08	2018-08-10 09:43:54.969+08	cde7d76f-5843-4001-88b3-5eb18836fc8f	2	t	f
2616	packtemperature1	探头温度A	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 16:19:55.33+08	2018-08-14 16:19:55.33+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	2	t	f
2619	packtemperature4	探头温度D	Output	\N	\N	\N	2	\N	\N	℃		2018-08-14 16:21:15.768+08	2018-08-14 16:21:15.768+08	251fdf4e-2811-48e8-b21d-3bedb3ffb0a6	2	t	f
2625	voltage	节点电压	Output	\N	\N	\N	\N	\N	\N	mv		2018-08-14 16:30:22.912+08	2018-08-14 16:30:22.912+08	c7561cfc-94ff-4fcc-bdeb-63023c74839f	1	t	f
2628	moisture	水分值	Output	\N	\N	\N	2	\N	\N	%		2018-08-14 16:50:59.213+08	2018-08-14 16:50:59.213+08	b4b6ffd7-09a1-4348-a270-a89f768a51be	2	t	f
2629	level	水位	Output	\N	\N	\N	\N	\N	\N	mm		2018-08-15 09:49:22.527+08	2018-08-15 09:49:22.527+08	17c83e03-bd23-47ac-ad6f-637082b66444	1	t	f
2631	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-08-15 10:55:10.6+08	2018-08-15 10:55:10.6+08	8a367437-ef39-437a-9e88-1dc4c6c42d14	2	t	f
2642	temperature	温度	Output	\N			3	60	-25	℃		2018-08-15 14:40:50.459+08	2018-08-15 14:40:50.459+08	bdca95f5-1a68-43cb-8bbd-0940bd4f861e	2	t	f
2643	physicalvalue	应力	Output	\N			3	300	0	MPa	压缩100MPa     拉伸300MPa	2018-08-15 14:40:50.464+08	2018-08-15 14:40:50.464+08	bdca95f5-1a68-43cb-8bbd-0940bd4f861e	2	t	f
2656	t	模型	Variable	\N	\N		\N	\N	\N	\N		2018-08-17 11:27:57.788+08	2018-08-17 11:27:57.788+08	25789235-88db-4ea7-9a8a-5d4aeb5f9532	5	t	f
2660	physicalvalue	液位	Output	\N			3			mm		2018-08-17 11:33:00.277+08	2018-08-17 11:38:03.367+08	70486f7c-d11e-4014-be32-71a2e8724359	2	t	f
2664	physicalvalue	X轴角度	Output	\N			3	\N	\N	°		2018-08-17 11:39:56.61+08	2018-08-17 11:39:56.61+08	076391b0-0f5f-44c8-8b51-cf3c894b8b88	2	t	f
2647	physicalvalue	温度	Output	\N			3	100	-20	℃		2018-08-15 17:13:27.45+08	2019-03-05 10:59:15.348+08	face6568-949b-4dcf-a799-fec9eafe6dd5	2	t	f
1728	z	Z位置	Output	\N	\N	\N	4	\N	\N	mm		2018-03-05 13:36:07.907+08	2018-03-05 13:36:07.913+08	d05b0093-f276-418f-90d3-8e0bfe3c36ef	2	t	f
1729	a	ss	Variable	\N	\N	\N	\N	66	1	\N		2018-03-06 11:27:44.262+08	2018-03-06 11:27:44.269+08	8d3e93e6-61dc-4f46-b610-22b88a38d41d	1	t	f
1730	b	b	Variable	\N	\N	\N	\N	33	2			2018-03-06 11:28:03.962+08	2018-03-06 11:28:03.97+08	8d3e93e6-61dc-4f46-b610-22b88a38d41d	1	t	f
1731	pressure	重量	Output	\N	\N	\N	2	99999999	-99999999	kg		2018-03-06 16:50:09.589+08	2018-03-06 16:50:09.589+08	7572058c-09cc-4eeb-a9ba-be3be9bacf77	2	t	f
1816	data2	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2018-03-15 16:52:12.166+08	2018-03-15 16:52:12.166+08	5ce3382a-6764-4a08-8bfe-5b058e8a9017	2	t	f
1817	data1	温度	Output	\N			2	\N	\N	℃		2018-03-15 16:52:12.172+08	2018-03-15 16:52:12.172+08	5ce3382a-6764-4a08-8bfe-5b058e8a9017	2	t	f
2265	physicalvalue	浓度	Output	\N	\N	\N	2	\N	\N	%vol		2018-05-03 10:35:59.185+08	2018-05-03 10:35:59.185+08	6accf380-8a73-4f88-8a5c-42b3366bc358	2	t	f
1820	anglex	X轴角度	Output	\N			3	\N		°		2018-03-15 17:45:33.197+08	2018-03-23 17:02:28.71+08	af8660db-af7f-4f8a-ad12-70bb18f62638	2	t	f
1865	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-03-26 11:16:13.101+08	2018-03-26 11:18:23.25+08	bc373436-023b-41d4-9608-6a33bb926e80	2	t	f
1866	physicalvalue	应变	Output	\N			4	3000	-3000	με		2018-03-26 11:16:13.111+08	2018-03-26 11:18:34.465+08	e4c071d1-afb9-4178-923b-18a37265ca86	2	t	f
1875	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-03-26 11:27:35.443+08	2018-03-26 11:27:35.443+08	363b62ae-2ccd-4c86-915d-03380bc9d89c	2	t	f
1876	physicalvalue	应变	Output	\N			4	5000	-5000	με		2018-03-26 11:27:35.453+08	2018-03-26 11:27:35.453+08	8693e382-e7e6-4efa-8583-d0251cb0b360	2	t	f
2266	physicalvalue	浓度	Output	\N	\N	\N	2	\N	\N	%LEL		2018-05-03 10:37:15.486+08	2018-05-03 10:37:15.486+08	56227677-39fd-4bfe-a59b-8c5f28682832	2	t	f
1877	physicalvalue	荷载力	Output	\N			4	75	-75	kN		2018-03-26 11:30:25.472+08	2018-03-26 11:33:40.86+08	f75af319-b305-463e-a3dc-78df902b61ef	2	t	f
2264	physicalvalue	浓度	Output	\N			2	\N	\N	μmol/mol		2018-05-03 10:34:23.757+08	2018-05-07 11:46:51.803+08	51fbf199-10ab-4718-8b70-c92beea24f6a	2	t	f
1878	physicalvalue	荷载力	Output	\N			4	75	-75	kN		2018-03-26 11:30:25.491+08	2018-03-26 11:33:59.195+08	6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	2	t	f
2171	length	位移	Output	\N			5	10	-10	mm		2018-04-09 16:11:41.556+08	2018-05-16 17:52:48.927+08	663eba54-78c3-4aa6-abbf-66cde27953e2	2	t	f
2289	anglex	X轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-05-28 10:45:28.336+08	2018-05-28 10:45:28.336+08	1da4370b-ba2d-4f6a-92f0-485a163d45e2	2	t	f
2290	angley	Y轴角度	Output	\N	\N	\N	3	\N	\N	°		2018-05-28 10:45:28.344+08	2018-05-28 10:45:28.344+08	1da4370b-ba2d-4f6a-92f0-485a163d45e2	2	t	f
2341	concentration	CO浓度	Output	\N	\N	\N	2	\N	\N	ppm		2018-06-20 10:34:56.92+08	2018-06-20 10:34:56.925+08	7ce72daf-c0a1-4752-9e13-53fb00d348da	2	t	f
1894	physicalvalue	压力	Output	\N			4	2	0	MPa		2018-03-26 11:43:24.224+08	2018-03-26 14:14:16.015+08	0f684ae0-ceb8-4c6a-95c4-e83bdd79059e	2	t	f
1893	physicalvalue	压力	Output	\N			4	2	0	MPa		2018-03-26 11:43:24.208+08	2018-03-26 14:14:23.501+08	b72802e5-4982-4ba1-bd1b-15ba05d7d832	2	t	f
1892	physicalvalue	压力	Output	\N			4	1	0	MPa		2018-03-26 11:43:23.187+08	2018-03-26 14:14:40.864+08	228d8257-dcf7-4493-a4d4-083712716318	2	t	f
1891	physicalvalue	压力	Output	\N			4	1	0	MPa		2018-03-26 11:43:23.174+08	2018-03-26 14:14:47.827+08	c0ea2d7f-7778-47aa-af49-0119a729c741	2	t	f
1890	physicalvalue	压力	Output	\N			4	0.8	0	MPa		2018-03-26 11:43:22.874+08	2018-03-26 14:15:02.815+08	08b32693-e4b0-44db-9d79-e45dff49062a	2	t	f
1889	physicalvalue	压力	Output	\N			4	0.8	0	MPa		2018-03-26 11:43:22.866+08	2018-03-26 14:15:09.469+08	b0488049-bfc9-40ee-8dfa-79f9233638ec	2	t	f
1888	physicalvalue	压力	Output	\N			4	0.4	0	MPa		2018-03-26 11:43:22.727+08	2018-03-26 14:15:31.072+08	750c60f8-168e-4bca-acf5-df2d502915f5	2	t	f
1887	physicalvalue	压力	Output	\N			4	0.4	0	MPa		2018-03-26 11:43:22.71+08	2018-03-26 14:15:50.858+08	d8193d74-feb5-4872-8e42-95a335cd383f	2	t	f
1885	physicalvalue	压力	Output	\N			4	0.2	0	MPa		2018-03-26 11:41:39.436+08	2018-03-26 14:17:08.523+08	84fc8a27-019f-4640-bbf6-466627f7c6d6	2	t	f
1886	physicalvalue	压力	Output	\N			4	0.2	0	MPa		2018-03-26 11:41:39.444+08	2018-03-26 14:17:13.919+08	32b8c637-51b5-405c-920d-f7ae0adefafd	2	t	f
1425	anglex	X轴角度	Output	\N			3	10	-10	°		2018-01-18 15:22:34.52+08	2018-03-29 10:26:57.805+08	ef4bfc5b-4560-487e-9e27-4a3249da9ae3	2	t	f
2104	angley	Y轴角度	Output	\N			2	\N	\N	°		2018-03-29 13:38:18.217+08	2018-03-29 13:38:23.488+08	1ed1816a-f590-4eba-8702-c334ec7a1e1d	2	t	f
2172	length	位移	Output	\N	\N	\N	5	10	0	mm		2018-04-09 16:11:41.568+08	2018-04-09 16:11:41.568+08	8cc91875-80ee-4c35-abe4-4c64888e18fc	2	t	f
2506	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2018-07-31 14:56:32.836+08	2018-07-31 14:56:32.836+08	fbeb2848-9908-4883-878a-10608a621168	2	t	f
2343	concentration	NO2浓度	Output	\N			0	\N	\N	ppb		2018-06-20 10:35:53.288+08	2018-06-20 10:45:17.424+08	e3ec18ee-3f12-43f2-ba02-ac370abbc877	2	t	f
2348	concentration	PM10浓度	Output	\N			0	\N	\N	ug/m³		2018-06-20 11:13:47.063+08	2018-06-20 11:14:16.327+08	87fdf1e4-fdd0-44c6-9bc3-bc5651c19030	2	t	f
2380	out	out	Variable	\N	\N	0	2	99	-99	\N		2018-07-03 19:14:02.265+08	2018-07-03 19:14:02.265+08	db66c7ee-46c0-4931-ba0e-67e0a1231256	2	t	f
2508	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2018-07-31 15:09:37.928+08	2018-07-31 15:09:37.928+08	b61317eb-c793-4b2f-b680-2d15a061ec91	2	t	f
2385	axisnum	轴数	Output	\N			0					2018-07-04 16:56:58.549+08	2018-07-24 10:31:30.716+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2512	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-07-31 15:13:55.361+08	2018-07-31 15:13:55.361+08	d702af0d-ac2f-48c9-bef4-31f6a5659b5a	2	t	f
2406	direction	方向	Output	\N			0					2018-07-05 09:22:32.418+08	2018-07-24 10:33:45.408+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2500	physicalvalue	微应变	Output	\N	\N	\N	4	5000	-5000	με		2018-07-31 14:50:34.953+08	2018-07-31 14:50:34.953+08	4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	2	t	f
2414	standValue_Sum	标况累积量	Output	\N	\N	\N	\N	\N	\N	m³/h		2018-07-10 17:26:01.742+08	2018-07-10 17:26:01.756+08	7624deeb-3f22-45ff-8a6c-a588e617c17b	2	t	f
2439	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2018-07-18 10:00:20.014+08	2018-07-18 10:00:20.02+08	8f5658b2-c72d-4918-8f4c-e23b57d193a6	2	t	f
2388	axieWeight	轴重	Output	\N			0			kg		2018-07-04 17:01:59.574+08	2018-07-24 10:31:12.528+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
2502	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2018-07-31 14:52:40.414+08	2018-07-31 14:52:40.414+08	4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	2	t	f
2503	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2018-07-31 14:53:04.13+08	2018-07-31 14:53:04.13+08	4bd4c44c-2dca-4de3-9e9e-39b2bebc57a5	2	t	f
2505	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2018-07-31 14:54:57.042+08	2018-07-31 14:54:57.042+08	fbeb2848-9908-4883-878a-10608a621168	2	t	f
2513	physicalvalue	应变	Output	\N	\N	\N	4	5000	-5000	με		2018-07-31 15:14:20.795+08	2018-07-31 15:14:20.795+08	d702af0d-ac2f-48c9-bef4-31f6a5659b5a	2	t	f
2523	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2018-07-31 15:20:55.83+08	2018-07-31 15:20:55.83+08	73e248c9-5515-4482-ac0a-af10af977c95	2	t	f
2527	humidity	湿度	Output	\N			2	100	0	%RH		2018-07-31 17:09:27.765+08	2018-07-31 17:09:35.597+08	b5a575d9-25af-47ce-8a43-89a35317f2a1	2	t	f
2533	pressure	压强	Output	\N	\N	\N	4	1000	0	KPa		2018-07-31 17:25:23.534+08	2018-07-31 17:25:23.534+08	49ca2a7b-0092-4889-a0ee-6146802ec384	2	t	f
2691	height	高度	Output	\N			2	\N	\N	m		2018-08-17 15:55:31.709+08	2018-08-17 15:55:31.709+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2711	yDegree	Y轴角度	Output	\N			4	30	-30	°		2018-08-24 09:09:28.332+08	2018-08-24 09:09:28.332+08	ce369680-ed47-4e58-8f38-4cbc786572a1	2	t	f
2712	xDegree	X轴角度	Output	\N			4	30	-30	°		2018-08-24 09:09:28.344+08	2018-08-24 09:09:28.344+08	ce369680-ed47-4e58-8f38-4cbc786572a1	2	t	f
2695	obliquity	塔机倾角	Output	\N			2	\N	\N	°		2018-08-17 15:55:31.727+08	2018-08-17 16:09:43.287+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2694	rotation	回转角度	Output	\N			0	\N	\N	°		2018-08-17 15:55:31.724+08	2018-08-17 16:10:12.953+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2689	speed	风速	Output	\N			2	\N	\N	m/s		2018-08-17 15:55:31.701+08	2018-08-17 16:10:33.492+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2696	moment	力矩	Output	\N			2	100	0	%		2018-08-17 15:55:31.734+08	2018-08-17 16:12:26.64+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2708	Speeddeg	超载风速比	Output	\N	\N	\N	\N	\N	\N	%		2018-08-17 17:43:50.518+08	2018-08-17 17:43:50.518+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2710	Obliquitydeg	超载倾角比	Output	\N	\N	\N	\N	\N	\N	%		2018-08-17 17:44:35.706+08	2018-08-17 17:44:35.706+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2704	Rotationdeg	回转角度比	Output	\N			\N	\N	\N	%		2018-08-17 17:41:03.268+08	2018-08-17 17:44:51.935+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2702	Heightdeg	超载高度比	Output	\N			\N	\N	\N	%		2018-08-17 17:39:47.482+08	2018-08-17 17:45:07.621+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2700	Weightdeg	超载重量比	Output	\N			0	\N	\N	%		2018-08-17 17:38:53.404+08	2018-08-17 17:45:21.943+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2706	Radiusdeg	超载幅度比	Output	\N			0	\N	\N	%		2018-08-17 17:42:21.799+08	2018-10-12 16:13:12.704+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2698	weight	额定重量	Output	\N			0	\N	\N	T		2018-08-17 15:55:31.741+08	2018-10-12 16:13:19.134+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2697	curweight	当前重量	Output	\N			0	\N	\N	T		2018-08-17 15:55:31.738+08	2018-10-12 16:13:22.563+08	6105dff0-c96c-439e-8101-e0e7906834e0	1	t	f
2688	radius	幅度	Output	\N			2	\N	\N	m		2018-08-17 15:55:31.696+08	2018-10-12 16:16:49.171+08	6105dff0-c96c-439e-8101-e0e7906834e0	2	t	f
2715	frequency	频率	Output	\N			3	\N	\N	HZ		2018-08-24 15:55:16.967+08	2018-08-24 15:55:16.967+08	1ce82d97-cb86-4a43-bf17-b75116cac5e9	2	t	f
2716	temperature	温度	Output	\N			2	80	-20	℃		2018-08-24 15:55:16.976+08	2018-08-24 15:55:16.976+08	1ce82d97-cb86-4a43-bf17-b75116cac5e9	2	t	f
2717	physicalvalue	荷载	Output	\N			3			kN		2018-08-24 15:55:16.983+08	2018-08-24 16:08:58.714+08	1ce82d97-cb86-4a43-bf17-b75116cac5e9	2	t	f
2718	frequency	频率	Output	\N			3	\N	\N	HZ		2018-08-24 16:11:22.986+08	2018-08-24 16:11:22.986+08	8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b	2	t	f
2719	temperature	温度	Output	\N			2	80	-20	℃		2018-08-24 16:11:22.999+08	2018-08-24 16:11:22.999+08	8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b	2	t	f
2720	physicalvalue	荷载	Output	\N			3	\N	\N	kN		2018-08-24 16:11:23.004+08	2018-08-24 16:11:23.004+08	8bc9ea4b-7a7d-4cfb-8950-a5c8f0ea038b	2	t	f
2721	frequency	频率	Output	\N			3	\N	\N	HZ		2018-08-24 16:11:23.711+08	2018-08-24 16:11:23.711+08	64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d	2	t	f
2722	temperature	温度	Output	\N			2	80	-20	℃		2018-08-24 16:11:23.718+08	2018-08-24 16:11:23.718+08	64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d	2	t	f
2723	physicalvalue	荷载	Output	\N			3	\N	\N	kN		2018-08-24 16:11:23.725+08	2018-08-24 16:11:23.725+08	64fd2ff4-b5d5-475c-b2a7-9881c50a0f4d	2	t	f
2724	frequency	频率	Output	\N			3	\N	\N	HZ		2018-08-24 16:11:25.531+08	2018-08-24 16:11:25.531+08	2a0639f4-2556-4682-bf61-63ab22867a18	2	t	f
2725	temperature	温度	Output	\N			2	80	-20	℃		2018-08-24 16:11:25.591+08	2018-08-24 16:11:25.591+08	2a0639f4-2556-4682-bf61-63ab22867a18	2	t	f
2726	physicalvalue	荷载	Output	\N			3	\N	\N	kN		2018-08-24 16:11:25.597+08	2018-08-24 16:11:25.597+08	2a0639f4-2556-4682-bf61-63ab22867a18	2	t	f
2727	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-08-28 18:06:12.438+08	2018-08-28 18:06:12.438+08	433bad92-fb3c-4e0f-b28a-c82c4c85fb5d	5	t	f
2728	physicalvalue	液位	Output	\N			3	\N	\N	m		2018-08-30 16:11:49.461+08	2018-08-30 16:12:28.163+08	64210070-761e-4035-97b8-f76bfe61fca5	2	t	f
2751	physicalvalue	X方向位移	Output	\N	\N	\N	3	\N	\N	mm		2018-09-11 16:00:57.757+08	2018-09-11 16:00:57.757+08	5e49818b-0a1d-453c-aa14-1979f1371690	2	t	f
2729	physicalvalue	温度	Output	\N			2	\N	\N	℃		2018-09-05 09:55:00.353+08	2018-09-05 14:38:59.167+08	2ad7273d-8ff0-4461-b87e-01d92fe46764	2	t	f
2730	physicalvalue	温度	Output	\N			2	1000	-20	℃		2018-09-07 09:47:45.462+08	2018-09-07 10:54:09.837+08	450bca7e-218d-4faa-9527-ee2f0eceb3fe	2	t	f
2732	physicalvalue	温度	Output	\N			2	100	0	%RH		2018-09-07 10:55:19.807+08	2018-09-07 10:55:19.807+08	4918bd89-601e-4f79-b31f-0aeda6062c82	2	t	f
2753	humidity	湿度	Output	\N			2	\N	\N	%RH		2018-09-13 17:22:06.848+08	2018-09-13 17:44:14.828+08	7bbe4206-6562-4fc4-b62c-94b500d6cc4d	2	t	f
2735	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-07 11:15:01.147+08	2018-09-07 11:15:01.147+08	f46e1f36-2e28-4b26-950d-2e00fb0b4a03	2	t	f
2738	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-07 11:18:28.025+08	2018-09-07 11:18:28.025+08	8e1cc471-0670-4c4f-aa30-013e6de6e3c0	2	t	f
2734	frequency	频率	Output	\N			2			HZ		2018-09-07 11:14:20.938+08	2018-09-07 11:20:59.138+08	f46e1f36-2e28-4b26-950d-2e00fb0b4a03	2	t	f
2733	physicalvalue	压力	Output	\N			2			KN		2018-09-07 11:09:31.04+08	2018-09-07 11:21:46.401+08	f46e1f36-2e28-4b26-950d-2e00fb0b4a03	2	t	f
2739	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-07 11:22:10.529+08	2018-09-07 11:22:10.529+08	402f6e2a-74c7-4a3b-9021-66f64352eb7c	2	t	f
2740	frequency	频率	Output	\N			2	\N	\N	HZ		2018-09-07 11:22:10.536+08	2018-09-07 11:22:10.536+08	402f6e2a-74c7-4a3b-9021-66f64352eb7c	2	t	f
2741	physicalvalue	压力	Output	\N			2	\N	\N	KN		2018-09-07 11:22:10.545+08	2018-09-07 11:22:10.545+08	402f6e2a-74c7-4a3b-9021-66f64352eb7c	2	t	f
2737	angley	Y轴角度	Output	\N			2			°		2018-09-07 11:18:28.011+08	2018-09-07 14:11:56.759+08	8e1cc471-0670-4c4f-aa30-013e6de6e3c0	2	t	f
2736	anglex	X轴角度	Output	\N			2			°		2018-09-07 11:18:27.997+08	2018-09-07 14:12:05.049+08	8e1cc471-0670-4c4f-aa30-013e6de6e3c0	2	t	f
2742	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-09-10 10:24:28.347+08	2018-09-10 10:24:28.347+08	54115f13-d150-41a4-8d45-05de44b8decb	2	t	f
2743	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-10 10:27:43.877+08	2018-09-10 10:27:43.877+08	54115f13-d150-41a4-8d45-05de44b8decb	2	t	f
2744	jsonfileexts	\N	Constant	\N	\N	 .a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-09-10 15:29:08.321+08	2018-09-10 15:29:08.321+08	56b4000a-2a4d-454a-9134-7499ca4e859b	5	t	f
2745	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-09-10 17:12:48.023+08	2018-09-10 17:12:48.023+08	7bca9e02-73e3-4462-b527-a443d6ba576b	2	t	f
2746	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-10 17:13:13.28+08	2018-09-10 17:13:13.28+08	7bca9e02-73e3-4462-b527-a443d6ba576b	2	t	f
2747	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-09-11 14:40:25.76+08	2018-09-11 14:40:25.76+08	df2bbcd2-bc11-48de-8307-826382959126	2	t	f
2748	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-11 14:41:20.076+08	2018-09-11 14:41:20.076+08	df2bbcd2-bc11-48de-8307-826382959126	2	t	f
2749	physicalvalue	水位	Output	\N	\N	\N	3	\N	\N	m		2018-09-11 15:52:56.576+08	2018-09-11 15:52:56.576+08	d0eba673-a21f-47b7-8c47-0368788a1b62	2	t	f
2750	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-09-11 15:53:17.911+08	2018-09-11 15:53:17.911+08	d0eba673-a21f-47b7-8c47-0368788a1b62	2	t	f
2752	temperature	温度	Output	\N			2	\N	\N	℃		2018-09-13 17:21:00.323+08	2018-09-13 17:44:21.267+08	7bbe4206-6562-4fc4-b62c-94b500d6cc4d	2	t	f
2756	physicalvalue	应变	Output	\N	\N	\N	\N	\N	\N	με		2018-09-19 17:33:03.806+08	2018-09-19 17:33:03.806+08	3b5383c8-bd1b-4f0e-bfea-1f0d746133c5	1	t	f
2757	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-09-20 13:53:03.287+08	2018-09-20 13:53:03.287+08	16407e57-188e-42f3-b626-ac8ff7405aeb	2	t	f
2758	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2018-09-20 13:53:25.764+08	2018-09-20 13:53:25.764+08	16407e57-188e-42f3-b626-ac8ff7405aeb	2	t	f
2714	physicalvalue	X轴角度	Output	\N			2	\N	\N	°		2018-08-24 15:45:59.892+08	2018-09-21 15:39:05.631+08	e3a2390c-0ca0-4f9e-be9b-0214c81e5c4b	2	t	f
2759	x	\N	Output	\N	\N	\N	\N	\N	\N	\N		2018-09-21 17:53:12.738+08	2018-09-21 17:53:12.738+08	7aa0f7e1-677e-4285-8888-33c63cf443d7	2	t	f
2766	physicalvalue	应变	Output	\N	\N	\N	\N	\N	\N	με		2018-09-26 17:10:21.455+08	2018-09-26 17:10:21.455+08	0b0d6db1-2a75-4d2d-a4e9-7690437a3900	1	t	f
2713	physicalvalue	水位	Output	\N			3	\N	\N	mm		2018-08-24 15:42:53.157+08	2018-09-21 16:19:23.407+08	a94fe00f-a8ea-4634-9262-e3c1ea0fa965	2	t	f
2760	y		Output	\N	\N	\N	\N	\N	\N			2018-09-21 17:53:12.751+08	2018-09-21 17:53:12.751+08	7aa0f7e1-677e-4285-8888-33c63cf443d7	2	t	f
2761	z		Output	\N	\N	\N	\N	\N	\N			2018-09-21 17:53:12.762+08	2018-09-21 17:53:12.762+08	7aa0f7e1-677e-4285-8888-33c63cf443d7	2	t	f
2762	length	位移	Output	\N	\N	\N	5	50	0	mm		2018-09-25 10:58:51.07+08	2018-09-25 10:58:51.07+08	94fdfca3-2f0b-4003-b3fd-77dc3e522b6e	2	t	f
2763	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-09-25 15:45:23.994+08	2018-09-25 15:45:23.994+08	b9257d1a-c48e-498a-85a0-6a928f32b049	5	t	f
2765	level	液位	Output	\N	\N	\N	3	\N	\N	mm		2018-09-26 14:40:09.253+08	2018-09-26 14:40:09.253+08	5b2b2647-ee99-48d8-b069-f487f052a552	2	t	f
2767	physicalvalue	应变	Output	\N			3	4000	0	με		2018-09-29 15:46:46.73+08	2018-09-29 15:46:46.73+08	589f754e-ea3a-4643-9d79-234ed0834807	2	t	f
2768	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-09-29 15:46:46.736+08	2018-09-29 15:46:46.736+08	589f754e-ea3a-4643-9d79-234ed0834807	2	t	f
2769	temperature	温度	Output	\N	\N	\N	3	60	-25	℃		2018-09-29 15:46:46.739+08	2018-09-29 15:46:46.739+08	589f754e-ea3a-4643-9d79-234ed0834807	2	t	f
2770	angley	角度	Output	\N			2	30	-30	°		2018-10-05 09:56:54.41+08	2018-10-06 17:46:55.503+08	de94d984-9d2e-4129-8fcb-b2655ab694b3	2	t	f
2771	oxygen	溶解氧	Output	\N	\N	\N	2	20	0	mg/L	溶解氧值	2018-10-08 14:13:14.286+08	2018-10-08 14:13:14.286+08	7d700433-bb05-4381-8ace-4cf1f8dbd1df	2	t	f
2773	ph	PH值	Output	\N	\N	\N	2	\N	\N	pH		2018-10-08 16:48:22.309+08	2018-10-08 16:48:22.309+08	da364ec6-34cf-4bb6-8eb8-10548f45e67a	2	t	f
2774	temp	温度	Output	\N	\N	\N	1	60	-10	℃		2018-10-08 16:48:22.317+08	2018-10-08 16:48:22.317+08	da364ec6-34cf-4bb6-8eb8-10548f45e67a	2	t	f
2772	temp	温度	Output	\N			1	60	-10	℃		2018-10-08 14:13:14.292+08	2018-10-09 09:37:33.578+08	7d700433-bb05-4381-8ace-4cf1f8dbd1df	2	t	f
2775	pressure	压强	Output	\N			5	\N	\N	kPa		2018-10-09 17:02:23.467+08	2018-10-09 17:03:34.183+08	ca8a3be8-72cf-497c-9743-e3d348c53672	2	t	f
2776	wavelength	波长	Output	\N	\N	\N	3	\N	\N	mm		2018-10-10 11:27:42.941+08	2018-10-10 11:27:42.941+08	42ff7750-3e27-4669-8018-92caf824ecd2	2	t	f
2777	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-10-11 09:07:12.046+08	2018-10-11 09:07:12.046+08	6c2c69a6-9f3d-4429-b4ad-1515ec6ac5e9	2	t	f
2778	pressure	压强	Output	\N	\N	\N	2	9999	-1999	kPa		2018-10-11 14:47:31.913+08	2018-10-11 14:47:31.913+08	9e7de9ac-68c1-48c2-bea1-751c1149407a	2	t	f
2784	winddirection	风向	Output	\N	\N	\N	1	\N		°		2018-10-12 10:22:38.571+08	2018-10-12 10:22:38.571+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2782	humidity	湿度	Output	\N			2	\N	\N	%		2018-10-12 10:21:41.982+08	2018-10-12 10:24:04.943+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2786	pm	PM2.5	Output	\N			3	500	0	ug/m3		2018-10-16 14:25:43.124+08	2018-11-08 12:41:21.933+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2847	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2018-11-02 17:15:03.067+08	2018-11-02 17:15:03.067+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2779	temperature	温度	Output	\N			2	\N	\N	℃		2018-10-12 10:19:30.561+08	2018-10-12 10:24:45.6+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2794	co	一氧化碳	Output	\N			3	150	0	mg/m3		2018-10-16 14:51:30.595+08	2018-11-03 14:35:37.48+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2780	wind	阵风	Output	\N			2	\N	\N	km/h		2018-10-12 10:19:30.573+08	2018-11-05 17:02:54.645+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2787	pm10	PM10	Output	\N			3	600	0	ug/m3		2018-10-16 14:26:00.899+08	2018-11-08 12:41:11.425+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2791	so2	二氧化硫	Output	\N			3	800	0	ug/m3		2018-10-16 14:49:00.857+08	2018-11-03 14:36:29.846+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2788	pm100	PM100	Output	\N			3	2000	0	ug/m3		2018-10-16 14:26:18.436+08	2018-11-08 12:41:44.552+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2792	no2	二氧化氮	Output	\N			3	3840	0	ug/m3		2018-10-16 14:49:52.898+08	2018-11-03 14:36:17.154+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2807	windspeed	风速	Output	\N			2	70	0	m/s		2018-10-24 15:35:26.657+08	2018-11-10 14:08:48.31+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2800	wavelength	波长	Output	\N	\N	\N	3	\N	\N	\N		2018-10-24 13:36:28.41+08	2018-10-24 13:36:28.41+08	6a85de5f-e927-43bb-bb03-21f34d546aca	2	t	f
2801	physicalvalue	温度	Output	\N	\N	\N	2	\N		℃		2018-10-24 13:38:36.428+08	2018-10-24 13:38:36.428+08	6a85de5f-e927-43bb-bb03-21f34d546aca	2	t	f
2799	range_weight	量程	Output	\N			0	\N	\N	Kg		2018-10-18 15:28:50.236+08	2018-10-26 14:42:10.728+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	1	t	f
2798	division	分度	Output	\N			0	\N	\N	Kg		2018-10-18 15:28:25.19+08	2018-10-26 14:42:15.305+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	1	t	f
2797	upLimit	满点	Output	\N			0	\N	\N	Kg		2018-10-18 15:27:35.45+08	2018-10-26 14:42:18.02+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	1	t	f
2796	lowerLimit	零点	Output	\N			0	\N	\N	Kg		2018-10-18 15:26:17.878+08	2018-10-26 14:42:21.062+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	1	t	f
2795	weight	重量	Output	\N			0	\N	\N	Kg		2018-10-18 15:25:49.229+08	2018-10-26 14:42:25.337+08	2e746e8b-7af0-488d-9e6a-6839f50952cd	1	t	f
2783	windspeed	风速	Output	\N			2	\N	\N	km/h		2018-10-12 10:22:04.04+08	2018-11-02 16:58:02.161+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2785	radiation	光辐射	Output	\N			3	\N	\N	wat/m^2		2018-10-12 10:23:18.422+08	2018-11-02 16:58:13.573+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2824	male_out	男厕出流量	Output	\N			0	\N	\N	人		2018-10-26 16:28:41.012+08	2018-10-30 20:03:14.375+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2825	male_in	男厕进流量	Output	\N			0			人		2018-10-26 16:29:10.228+08	2018-10-30 20:03:01.189+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2823	male_stay	男厕驻留人数	Output	\N			0	\N	\N	人		2018-10-26 16:28:22.689+08	2018-10-30 20:03:17.04+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2822	female_in	女厕进流量	Output	\N			0			人		2018-10-26 16:28:00.746+08	2018-10-30 20:03:19.602+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2821	female_out	女厕出流量	Output	\N			0	\N	\N	人		2018-10-26 16:27:29.978+08	2018-10-30 20:03:22.355+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2820	female_stay	女厕驻留人数	Output	\N			0	\N	\N	人		2018-10-26 16:27:10.991+08	2018-10-30 20:03:27.214+08	27f22c17-c2a9-47b7-82f9-f87716de54fa	1	t	f
2834	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2018-10-30 22:17:59.337+08	2018-10-30 22:17:59.337+08	02e056da-0fdc-4477-bdb1-f52f28a1f6bd	2	t	f
2826	readingNumber	电表示数	Output	\N			3	\N	\N	kWh		2018-10-26 17:55:21.461+08	2018-11-02 11:02:55.014+08	abcf8bcb-b863-4219-b7df-9f5ac18ccaf1	2	t	f
2817	pitstate	坑位状态	Output	\N			0			\N		2018-10-26 16:17:49.055+08	2018-11-02 14:56:23.29+08	4caa397a-da74-42c1-b0a7-a83ba80b975e	5	t	f
2863	physicalvalue	压力	Output	\N	\N	\N	3	\N	\N	Mpa		2018-11-07 10:57:54.645+08	2018-11-07 10:57:54.645+08	b5a32d0d-110f-4eba-9d54-a5a661fb55d2	2	t	f
2793	o3	臭氧	Output	\N			3	1200	0	ug/m3		2018-10-16 14:51:10.111+08	2018-11-03 14:34:51.342+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2789	temp	温度	Output	\N			1	80	-40	℃		2018-10-16 14:27:20.016+08	2018-11-03 14:25:44.721+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2790	humi	湿度	Output	\N			1	100	0	%		2018-10-16 14:27:58.663+08	2018-11-03 14:25:53.905+08	bda1b8be-eb6d-408a-b2a8-cf8d52e03c9a	2	t	f
2806	humidity	湿度	Output	\N			2	100	0	%		2018-10-24 15:34:59.639+08	2018-11-10 14:08:56.533+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2805	temp	温度	Output	\N			2	120	-40	℃		2018-10-24 15:27:02.653+08	2018-11-10 14:09:10.18+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2804	noise	噪声	Output	\N			2	120	30	db		2018-10-24 15:26:30.498+08	2018-11-10 14:09:29.107+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2803	pm10	PM10	Output	\N			2	999.9	0	ug/m³		2018-10-24 15:24:05.783+08	2018-11-10 14:09:43.45+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2802	pm25	PM2.5	Output	\N			2	999.9	0	ug/m³		2018-10-24 15:23:32.16+08	2018-11-10 14:09:51.191+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2808	winddir	风向	Output	\N			2	360	0	°		2018-10-24 15:35:57.337+08	2018-11-10 14:10:01.395+08	8221e541-b6e9-4b4b-8b70-7e533565674f	2	t	f
2835	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-10-30 22:17:59.343+08	2018-10-30 22:17:59.343+08	02e056da-0fdc-4477-bdb1-f52f28a1f6bd	2	t	f
2833	NH3	氨气浓度	Output	\N			2	\N	\N	ppm		2018-10-30 22:17:59.329+08	2018-10-30 22:18:12.386+08	02e056da-0fdc-4477-bdb1-f52f28a1f6bd	2	t	f
2836	ph	PH值	Output	\N	\N	\N	2	\N	\N	pH		2018-10-31 18:17:39.535+08	2018-10-31 18:17:39.535+08	27a9d353-a3e8-4669-97b5-f467e52007c5	2	t	f
2552	noise	噪声	Output	\N			2			dB		2018-08-02 10:37:02.589+08	2018-12-29 10:16:27.825+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2842	rainfall	雨量	Output	\N	\N	\N	2	\N	\N	mm		2018-11-02 17:01:22.478+08	2018-11-02 17:01:22.478+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2843	pm10	PM10	Output	\N	\N	\N	2	\N	\N	μg/m³		2018-11-02 17:13:16.851+08	2018-11-02 17:13:16.851+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2844	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	μg/m³		2018-11-02 17:13:40.006+08	2018-11-02 17:13:40.006+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2845	noise	噪声	Output	\N	\N	\N	2	\N	\N	dB		2018-11-02 17:14:03.856+08	2018-11-02 17:14:03.856+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2846	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-11-02 17:14:42.164+08	2018-11-02 17:14:42.164+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2848	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2018-11-02 17:15:27.803+08	2018-11-02 17:15:27.803+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2849	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-02 17:15:44.245+08	2018-11-02 17:15:44.245+08	383450e1-ee35-4242-86ef-f2b575b96ba0	2	t	f
2840	temperature	温度	Output	\N			2	\N	\N	℃		2018-10-31 18:21:44.205+08	2018-11-02 18:30:18.325+08	27a9d353-a3e8-4669-97b5-f467e52007c5	2	t	f
2837	conductivity	电导	Output	\N			0	\N	\N	μs/cm		2018-10-31 18:18:34.409+08	2018-11-02 18:30:36.137+08	27a9d353-a3e8-4669-97b5-f467e52007c5	1	t	f
2850	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-11-03 15:55:05.864+08	2018-11-03 15:55:05.864+08	677a3cf9-1821-4ddf-98af-6bfef51be1d0	2	t	f
2851	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-03 15:55:33.784+08	2018-11-03 15:55:33.784+08	677a3cf9-1821-4ddf-98af-6bfef51be1d0	2	t	f
2852	physicalvalue	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2018-11-03 17:14:39.506+08	2018-11-03 17:14:39.506+08	677a3cf9-1821-4ddf-98af-6bfef51be1d0	2	t	f
2853	conductivity	电导	Output	\N	\N	\N	\N	\N	\N	μs/cm		2018-11-05 09:08:45.118+08	2018-11-05 09:08:45.118+08	970a19fd-31b9-4485-90d3-6394bc637a87	1	t	f
2854	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-05 09:08:45.125+08	2018-11-05 09:08:45.125+08	970a19fd-31b9-4485-90d3-6394bc637a87	2	t	f
2855	turbidity	浊度	Output	\N	\N	\N	5	\N	\N	NTU		2018-11-05 09:08:45.13+08	2018-11-05 09:08:45.13+08	970a19fd-31b9-4485-90d3-6394bc637a87	2	t	f
2856	oxygen	溶解氧	Output	\N	\N	\N	5	\N	\N	mg/l		2018-11-05 09:08:45.135+08	2018-11-05 09:08:45.135+08	970a19fd-31b9-4485-90d3-6394bc637a87	2	t	f
2857	ph	PH值	Output	\N	\N	\N	2	\N	\N	pH		2018-11-05 09:08:45.14+08	2018-11-05 09:08:45.14+08	970a19fd-31b9-4485-90d3-6394bc637a87	2	t	f
2859	soiltemp	土壤温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-05 16:35:56.565+08	2018-11-05 16:35:56.565+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2860	soilcond	土壤电导率	Output	\N	\N	\N	2	\N	\N	ms/cm		2018-11-05 16:36:33.766+08	2018-11-05 16:36:33.766+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2875	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-11-13 15:31:16.384+08	2018-11-13 15:31:16.384+08	d1fa6c6c-dfb0-450d-bc20-1207b2973420	2	t	f
2861	soilwater2	土壤水分(SM100)	Output	\N			2	\N	\N	%		2018-11-05 16:40:53.308+08	2018-11-05 16:57:52.343+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2858	soilwater	土壤水分	Output	\N			2	\N	\N	%		2018-11-05 16:35:36.551+08	2018-11-05 16:57:59.36+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
194	conductivity	导电率	Output	\N			2	\N	\N	μs/cm		2017-09-14 19:08:55.146+08	2018-11-06 10:30:51.822+08	4a08b319-23f2-4854-ad86-755792e575d4	2	t	f
2862	soiltemp2	土壤温度(3677)	Output	\N	\N	\N	2	\N	\N	℃		2018-11-06 15:37:12.851+08	2018-11-06 15:37:12.851+08	9e452b06-8db9-43cf-9378-0d66ff102697	2	t	f
2864	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-09 14:49:07.702+08	2018-11-09 14:49:07.702+08	ed0bee37-45a5-464f-aec8-5b97ee0fb1d3	2	t	f
2876	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2018-11-13 15:31:40.778+08	2018-11-13 15:31:40.778+08	d1fa6c6c-dfb0-450d-bc20-1207b2973420	2	t	f
2867	pm10	pm10	Output	\N	\N	\N	2	\N	\N	ug/m3		2018-11-10 11:22:00.206+08	2018-11-10 11:22:00.206+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2866	pm25	pm25	Output	\N			2	\N	\N	ug/m3		2018-11-10 11:11:24.632+08	2018-11-10 11:22:07.103+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2868	noise	噪声	Output	\N	\N	\N	2	\N	\N	dB		2018-11-10 11:22:28.416+08	2018-11-10 11:22:28.416+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2869	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-10 11:22:50.342+08	2018-11-10 11:22:50.342+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2870	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2018-11-10 11:23:07.077+08	2018-11-10 11:23:07.077+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2871	windSpeed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2018-11-10 11:23:30.819+08	2018-11-10 11:23:30.819+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2872	windDirection	风向	Output	\N	\N	\N	2	\N	\N	°		2018-11-10 11:23:49.653+08	2018-11-10 11:23:49.653+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2873	windForce	风力	Output	\N	\N	\N	1	\N	\N	级		2018-11-10 11:24:34.852+08	2018-11-10 11:24:34.852+08	bf029965-3d0b-4ca6-9426-c9aa2ea4b091	2	t	f
2877	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-13 15:36:10.376+08	2018-11-13 15:36:10.376+08	f27415f0-f6a5-43cb-bb3c-f54d94dd0930	2	t	f
2878	humdity	湿度	Output	\N	\N	\N	2	\N	\N	%		2018-11-13 15:36:10.383+08	2018-11-13 15:36:10.383+08	f27415f0-f6a5-43cb-bb3c-f54d94dd0930	2	t	f
2838	oxygen	溶解氧	Output	\N			2	\N	\N	mg/l		2018-10-31 18:20:34.967+08	2019-10-24 14:15:55.419+08	27a9d353-a3e8-4669-97b5-f467e52007c5	2	t	f
2901	obliguityY	倾角Y	Output	\N	\N	\N	2	9.9	-9.9	°		2018-11-15 16:05:49.478+08	2018-11-15 16:05:49.478+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2880	pm1	PM1.0	Output	\N	\N	\N	\N	\N	\N	ug/m3		2018-11-13 16:37:13.343+08	2018-11-13 16:37:13.343+08	18903d51-d495-45f0-8d08-6f52d8a62684	1	t	f
2881	pm25	PM2.5	Output	\N	\N	\N	\N	\N	\N	ug/m3		2018-11-13 16:37:13.347+08	2018-11-13 16:37:13.347+08	18903d51-d495-45f0-8d08-6f52d8a62684	1	t	f
2882	pm10	PM10	Output	\N	\N	\N	\N	\N	\N	ug//m3		2018-11-13 16:37:13.351+08	2018-11-13 16:37:13.351+08	18903d51-d495-45f0-8d08-6f52d8a62684	1	t	f
2883	Obliguity	倾角	Output	\N			2	9.99	-9.99	°		2018-11-14 13:58:46.928+08	2018-11-14 17:18:03.529+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2887	RRange	幅度	Output	\N			2	99.99	0	m		2018-11-14 14:04:54.773+08	2018-11-14 17:16:43.651+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2884	WindLevel	风级	Output	\N			0	12	0			2018-11-14 13:59:35.68+08	2018-11-14 17:16:22.947+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	1	t	f
2886	Height	高度	Output	\N			2	655.35	0	m		2018-11-14 14:04:20.616+08	2018-11-14 17:17:05.804+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2885	Angle	角度	Output	\N			2	359.9	0	°		2018-11-14 14:03:35.684+08	2018-11-14 17:17:33.405+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2907	isOnline	上线	Output	\N	\N	\N	\N	1	0	\N		2018-11-16 15:48:15.345+08	2018-11-16 15:48:15.345+08	23587253-110b-4b12-8c74-53f5147ad189	1	t	f
2912	height	高度	Output	\N	\N	\N	3	\N	\N	mm		2018-11-17 14:09:20.452+08	2018-11-17 14:09:20.452+08	6867f7aa-51dd-4f2d-acd3-ed771f2fb33b	2	t	f
2553	pm25	PM2.5	Output	\N			3			ug/m³		2018-08-02 10:37:02.596+08	2018-12-29 10:16:32.398+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2561	humidity	湿度	Output	\N			2			%RH		2018-08-02 15:10:50.291+08	2018-12-29 10:16:36.431+08	812c58c6-4cd2-48fd-942a-2024f91035bb	2	t	f
2940	value	轴向力	Output	\N			3	160	70	KN		2018-12-03 14:10:32.259+08	2018-12-03 14:13:35.903+08	f5c02f07-5612-47c7-a0e8-2f5284f203e3	2	t	f
2889	Multiple	倍率	Output	\N			0	99	1			2018-11-14 14:07:07.799+08	2018-11-14 17:14:01.485+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	1	t	f
2894	Moment	力矩百分比	Output	\N			2	655.35	0	%		2018-11-14 15:37:20.827+08	2018-11-14 17:14:34.562+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2892	Weight	载重	Output	\N			2	99.99	0	t		2018-11-14 15:35:18.686+08	2018-11-14 17:14:58.7+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2891	RatedWeight	额定载重	Output	\N			2	99.99	0	t		2018-11-14 15:22:58.162+08	2018-11-14 17:15:29.458+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2890	WindSpeed	风速	Output	\N			2	36.90	0	m/s		2018-11-14 15:21:11.531+08	2018-11-14 17:15:55.891+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	2	t	f
2895	peopleCnt	人数	Output	\N			0	\N	\N	人		2018-11-15 15:52:14.514+08	2018-11-15 15:52:38.555+08	23587253-110b-4b12-8c74-53f5147ad189	1	t	f
2896	weight	载重	Output	\N	\N	\N	2	9.99	0	t		2018-11-15 15:53:10.978+08	2018-11-15 15:53:10.978+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2897	speed	速度	Output	\N	\N	\N	2	9.9	-9.9	m/s		2018-11-15 15:56:01.074+08	2018-11-15 15:56:01.074+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2898	height	高度	Output	\N	\N	\N	1	999.9	-999.9	m		2018-11-15 15:58:12.029+08	2018-11-15 15:58:12.029+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2899	floor	楼层	Output	\N	\N	\N	\N	999	-999	层		2018-11-15 16:04:46.288+08	2018-11-15 16:04:46.288+08	23587253-110b-4b12-8c74-53f5147ad189	1	t	f
2900	obliguityX	倾角X	Output	\N	\N	\N	2	9.9	-9.9	°		2018-11-15 16:05:16.455+08	2018-11-15 16:05:16.455+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2902	windSpeed	风速	Output	\N	\N	\N	2	36.90	0	m/s		2018-11-15 16:06:29.714+08	2018-11-15 16:06:29.714+08	23587253-110b-4b12-8c74-53f5147ad189	2	t	f
2903	windLevel	风级	Output	\N	\N	\N	\N	12	0	级		2018-11-15 16:06:58.144+08	2018-11-15 16:06:58.144+08	23587253-110b-4b12-8c74-53f5147ad189	1	t	f
2904	doorState	笼门开关状态	Output	\N	\N	\N	\N	\N	\N			2018-11-15 16:07:24.723+08	2018-11-15 16:07:24.723+08	23587253-110b-4b12-8c74-53f5147ad189	1	t	f
2905	isOnline	上线	Output	\N	\N	\N	\N	1	0	\N		2018-11-16 15:23:05.97+08	2018-11-16 15:23:05.97+08	3452703a-aec3-4cca-9aa7-7041c1ba236e	1	t	f
2913	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-17 14:09:58.052+08	2018-11-17 14:09:58.052+08	6867f7aa-51dd-4f2d-acd3-ed771f2fb33b	2	t	f
2914	voltage	电压	Output	\N			2	\N	\N	v		2018-11-17 14:10:37.478+08	2018-11-17 14:10:45.591+08	6867f7aa-51dd-4f2d-acd3-ed771f2fb33b	2	t	f
2943	pm25	PM2.5	Output	\N	\N	\N	3	\N	\N	μg/m³		2018-12-03 16:30:01.637+08	2018-12-03 16:30:01.637+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2918	length	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2018-11-20 16:26:58.27+08	2018-11-20 16:26:58.27+08	7faa8d59-78aa-493f-855c-39efc2890727	2	t	f
2909	length	位移	Output	\N			3	\N	\N	mm		2018-11-17 09:49:16.466+08	2018-11-20 16:36:20.504+08	ec90f249-7504-4b98-93e1-8f6f39352105	2	t	f
2919	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-21 14:58:32.108+08	2018-11-21 14:58:32.108+08	7faa8d59-78aa-493f-855c-39efc2890727	2	t	f
2924	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-22 17:13:27.268+08	2018-11-22 17:13:27.268+08	41d50f61-0dd5-4761-977c-1ebf6e29b35f	2	t	f
2927	frequency	频率	Output	\N			3	\N	\N	HZ		2018-11-23 10:32:50.895+08	2018-11-23 10:32:50.895+08	7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8	2	t	f
2929	temperature	温度	Output	\N			2	80	-20	℃		2018-11-23 10:32:50.905+08	2018-11-23 10:32:50.905+08	7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8	2	t	f
2928	physicalvalue	位移	Output	\N			3	2000	0	mm		2018-11-23 10:32:50.901+08	2018-11-23 10:35:08.007+08	7d4a13ce-fcb5-4eb4-89dc-77f1b0b46fe8	2	t	f
2930	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-11-23 17:10:41.064+08	2018-11-23 17:10:41.064+08	07b4abb3-3cd6-43ad-80af-e256996876d7	2	t	f
2933	frequency	频率	Output	\N			3	\N	\N	Hz		2018-11-24 17:43:54.089+08	2018-11-24 17:44:01.457+08	00da1250-a423-4a89-993d-3cacb4df488c	2	t	f
2934	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-11-24 17:44:24.308+08	2018-11-24 17:44:24.308+08	00da1250-a423-4a89-993d-3cacb4df488c	2	t	f
2935	physicalvalue	应力	Output	\N			4	\N	\N	MPa		2018-11-24 17:44:39.774+08	2018-11-24 17:44:51.64+08	00da1250-a423-4a89-993d-3cacb4df488c	2	t	f
2959	physicalvalue	水压	Output	\N			4	0.6	0	MPa		2018-12-06 10:15:59.118+08	2018-12-06 10:16:05.656+08	f7d87585-4ebf-4d22-a1ce-05ef947311e7	2	t	f
2960	temperature	温度	Output	\N			2	\N	\N	℃		2018-12-06 10:17:03.031+08	2018-12-06 10:17:16.712+08	f7d87585-4ebf-4d22-a1ce-05ef947311e7	2	t	f
2965	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 10:20:50.298+08	2018-12-06 10:20:50.298+08	0d021590-ab48-4d98-b318-458faaf5d934	2	t	f
2966	physicalvalue	水压	Output	\N	\N	\N	4	1	0	MPa		2018-12-06 10:22:57.235+08	2018-12-06 10:22:57.235+08	cf51dafe-466c-4549-b2c3-3eb4dbf5d871	2	t	f
2970	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 10:26:16.011+08	2018-12-06 10:26:16.011+08	322b0741-7b10-4499-a14d-5c660bc3dadf	2	t	f
2982	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 11:39:05.006+08	2018-12-06 11:39:05.006+08	cba87e64-ebf2-4b4b-8fe3-8df973625a56	2	t	f
2986	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 11:48:25.439+08	2018-12-06 11:48:25.439+08	21c31597-4e3d-4568-bc38-7d53a010fe90	2	t	f
2996	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:12:17.907+08	2018-12-07 17:12:17.907+08	383732b4-ea54-49fb-8e63-4dd2c614e5fd	2	t	f
2997	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:12:17.912+08	2018-12-07 17:12:17.912+08	383732b4-ea54-49fb-8e63-4dd2c614e5fd	2	t	f
2998	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-12-07 17:12:17.917+08	2018-12-07 17:12:17.917+08	383732b4-ea54-49fb-8e63-4dd2c614e5fd	2	t	f
3020	dy	dy累积形变量	Output	\N			6	\N	\N	mm		2018-12-08 15:44:48.074+08	2018-12-08 16:06:55.303+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
2915	saltContent	盐分	Output	\N			0	8000	0	mg/L		2018-11-19 11:12:59.734+08	2018-12-13 11:05:36.039+08	067d099e-3d4d-40f5-8ca7-68383ffd5208	1	t	f
2916	concentration	浓度	Output	\N	\N	\N	\N	\N	\N	ppm		2018-11-20 15:00:21.595+08	2018-11-20 15:00:21.595+08	99a6468c-6183-4253-bc6f-0e66fea8e3ce	1	t	f
2917	ph	PH	Output	\N	\N	\N	2	\N	\N	\N		2018-11-20 15:20:27.125+08	2018-11-20 15:20:27.125+08	59ea18ad-dfaf-406a-95bc-213eaff64b6b	2	t	f
2920	temperature	温度	Output	\N			2	70	-25	℃		2018-11-22 15:43:55.865+08	2018-11-22 15:44:22.494+08	08549605-83a6-46c5-8fbc-83279c95d08e	2	t	f
2921	angley	Y方向角度	Output	\N			4	30	-30	°		2018-11-22 15:44:51.892+08	2018-11-22 15:45:07.643+08	08549605-83a6-46c5-8fbc-83279c95d08e	2	t	f
2946	speed	风速	Output	\N	\N	\N	2	\N		m/s		2018-12-03 16:31:05.39+08	2018-12-03 16:31:05.39+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2922	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2018-11-22 15:45:32.346+08	2018-11-22 15:45:32.346+08	08549605-83a6-46c5-8fbc-83279c95d08e	2	t	f
2923	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-11-22 16:02:31.609+08	2018-11-22 16:02:31.609+08	b0d9fed6-e9d2-46d8-9995-4b9865155e77	5	t	f
2925	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2018-11-22 17:13:45.465+08	2018-11-22 17:13:45.465+08	41d50f61-0dd5-4761-977c-1ebf6e29b35f	2	t	f
2926	intensity	照度	Output	\N	\N	\N	\N	200000	0	Lux		2018-11-22 17:32:58.687+08	2018-11-22 17:32:58.687+08	e2cb4c00-ac04-478b-afc2-eb7928bfb361	1	t	f
2931	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-23 17:10:58.826+08	2018-11-23 17:10:58.826+08	07b4abb3-3cd6-43ad-80af-e256996876d7	2	t	f
2936	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-11-24 17:45:06.49+08	2018-11-24 17:45:06.49+08	00da1250-a423-4a89-993d-3cacb4df488c	2	t	f
2989	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 11:51:11.455+08	2018-12-06 11:51:11.455+08	21c31597-4e3d-4568-bc38-7d53a010fe90	2	t	f
2932	physicalvalue	轴力	Output	\N			3	\N	\N	KN		2018-11-23 17:11:23.418+08	2018-12-07 17:13:55.678+08	07b4abb3-3cd6-43ad-80af-e256996876d7	2	t	f
2937	温度	温度	Variable	\N	\N	26	2	100	-50	C		2018-11-28 15:04:14.069+08	2018-11-28 15:04:14.069+08	37421fe7-d68a-4eb7-a2b4-f8238e4ee63d	2	t	f
2938	length	水位	Output	\N	\N	\N	\N	\N	\N	mm		2018-12-03 10:39:43.581+08	2018-12-03 10:39:43.581+08	ffb4a9e7-51b0-45d7-b5a7-a80bf31c7f6a	1	t	f
2939	value	拉力	Output	\N			3	1000	0	KN		2018-12-03 14:00:53.521+08	2018-12-03 14:13:49.182+08	a9a88239-bda9-4074-8162-0831dde92dd6	2	t	f
2941	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-03 16:28:21.62+08	2018-12-03 16:28:21.62+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2942	humidity	湿度	Output	\N			2	\N	\N	%RH		2018-12-03 16:29:03.714+08	2018-12-03 16:29:39.413+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2944	pm10	PM10	Output	\N	\N	\N	3	\N	\N	pm10		2018-12-03 16:30:16.37+08	2018-12-03 16:30:16.37+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2945	noise	噪音	Output	\N	\N	\N	2	\N	\N	dB		2018-12-03 16:30:39.53+08	2018-12-03 16:30:39.53+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2947	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2018-12-03 16:31:32.728+08	2018-12-03 16:31:32.728+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2948	TSP	TSP	Output	\N			2	\N	\N	μg/m³		2018-12-03 16:32:25.502+08	2018-12-03 16:32:39.075+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2949	wind	风力	Output	\N	\N	\N	1	\N	\N	级		2018-12-03 16:33:47.315+08	2018-12-03 16:33:47.315+08	f51fa45a-b4ee-4071-a1cb-b9b7657421f5	2	t	f
2950	frequency	频率	Output	\N			3	\N	\N	Hz		2018-12-05 15:00:20.406+08	2018-12-05 15:00:30.896+08	4f2419a5-1b3b-4929-9b0f-27d286d684a4	2	t	f
2975	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 11:12:55.7+08	2018-12-06 11:12:55.7+08	d8d994be-3cdb-4646-a06b-d2869fdbedf6	2	t	f
3005	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:22:03.078+08	2018-12-07 17:22:03.078+08	c8e9affc-7965-452f-af9d-db9cafc1a54f	2	t	f
3006	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:22:03.085+08	2018-12-07 17:22:03.085+08	c8e9affc-7965-452f-af9d-db9cafc1a54f	2	t	f
3007	physicalvalue	压力	Output	\N			3	\N	\N	KN		2018-12-07 17:22:03.09+08	2018-12-07 17:24:07.6+08	c8e9affc-7965-452f-af9d-db9cafc1a54f	2	t	f
2951	physicalvalue	水压	Output	\N			4	0.2	0	MPa		2018-12-05 15:00:46.945+08	2018-12-05 15:01:08.492+08	4f2419a5-1b3b-4929-9b0f-27d286d684a4	2	t	f
2952	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-05 15:01:36.492+08	2018-12-05 15:01:36.492+08	4f2419a5-1b3b-4929-9b0f-27d286d684a4	2	t	f
2953	am	幅值	Output	\N			3	\N	\N	mv		2018-12-05 15:01:53.119+08	2018-12-05 15:02:00.041+08	4f2419a5-1b3b-4929-9b0f-27d286d684a4	2	t	f
2954	frequency	频率	Output	\N			3	\N	\N	Hz		2018-12-06 10:06:42.428+08	2018-12-06 10:06:52.128+08	f944e6ec-6886-471e-b0e0-41afb54df653	2	t	f
2955	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 10:07:42.572+08	2018-12-06 10:07:42.572+08	f944e6ec-6886-471e-b0e0-41afb54df653	2	t	f
2956	physicalvalue	水压	Output	\N			4	0.4	0	MPa		2018-12-06 10:08:09.577+08	2018-12-06 10:08:15.897+08	f944e6ec-6886-471e-b0e0-41afb54df653	2	t	f
2957	am	幅值	Output	\N			3	\N	\N	mv		2018-12-06 10:08:34.103+08	2018-12-06 10:08:39.295+08	f944e6ec-6886-471e-b0e0-41afb54df653	2	t	f
2974	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 11:11:38.794+08	2018-12-06 11:11:38.794+08	d8d994be-3cdb-4646-a06b-d2869fdbedf6	2	t	f
2978	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 11:29:40.622+08	2018-12-06 11:29:40.622+08	a1051359-cb72-4421-9dae-06e5cc0d8622	2	t	f
2985	temperature	温度	Output	\N	\N	\N	2	\N		℃		2018-12-06 11:40:14.265+08	2018-12-06 11:40:14.265+08	cba87e64-ebf2-4b4b-8fe3-8df973625a56	2	t	f
3011	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:22:04.457+08	2018-12-07 17:22:04.457+08	1065f451-14e7-45e9-8d0e-511f274b97c4	2	t	f
3012	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:22:04.462+08	2018-12-07 17:22:04.462+08	1065f451-14e7-45e9-8d0e-511f274b97c4	2	t	f
3013	physicalvalue	轴力	Output	\N			3	\N	\N	KN		2018-12-07 17:22:04.466+08	2018-12-07 17:25:18.315+08	1065f451-14e7-45e9-8d0e-511f274b97c4	2	t	f
2958	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 10:15:35.416+08	2018-12-06 10:15:35.416+08	f7d87585-4ebf-4d22-a1ce-05ef947311e7	2	t	f
2961	am	幅值	Output	\N			3	\N	\N	mv		2018-12-06 10:17:37.358+08	2018-12-06 10:17:42.329+08	f7d87585-4ebf-4d22-a1ce-05ef947311e7	2	t	f
2962	frequency	频率	Output	\N			3	\N	\N	Hz		2018-12-06 10:19:38.567+08	2018-12-06 10:19:43.564+08	0d021590-ab48-4d98-b318-458faaf5d934	2	t	f
2983	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 11:39:17.939+08	2018-12-06 11:39:17.939+08	cba87e64-ebf2-4b4b-8fe3-8df973625a56	2	t	f
2963	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 10:20:03.344+08	2018-12-06 10:20:03.344+08	0d021590-ab48-4d98-b318-458faaf5d934	2	t	f
2964	physicalvalue	水压	Output	\N	\N	\N	4	0.8	0	MPa		2018-12-06 10:20:31.456+08	2018-12-06 10:20:31.456+08	0d021590-ab48-4d98-b318-458faaf5d934	2	t	f
2967	temperature	温度	Output	\N	\N	\N	2	\N		℃		2018-12-06 10:23:24.215+08	2018-12-06 10:23:24.215+08	cf51dafe-466c-4549-b2c3-3eb4dbf5d871	2	t	f
2968	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2018-12-06 10:23:56.069+08	2018-12-06 10:23:56.069+08	cf51dafe-466c-4549-b2c3-3eb4dbf5d871	2	t	f
2969	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 10:24:12.663+08	2018-12-06 10:24:12.663+08	cf51dafe-466c-4549-b2c3-3eb4dbf5d871	2	t	f
2971	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 10:26:38.648+08	2018-12-06 10:26:38.648+08	322b0741-7b10-4499-a14d-5c660bc3dadf	2	t	f
2972	physicalvalue	水压	Output	\N	\N	\N	4	2	0	MPa		2018-12-06 10:27:39.929+08	2018-12-06 10:27:39.929+08	322b0741-7b10-4499-a14d-5c660bc3dadf	2	t	f
2973	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 10:27:55.863+08	2018-12-06 10:27:55.863+08	322b0741-7b10-4499-a14d-5c660bc3dadf	2	t	f
2976	physicalvalue	应力	Output	\N	\N	\N	4	2	0	MPa		2018-12-06 11:13:43.069+08	2018-12-06 11:13:43.069+08	d8d994be-3cdb-4646-a06b-d2869fdbedf6	2	t	f
2977	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 11:14:36.16+08	2018-12-06 11:14:36.16+08	d8d994be-3cdb-4646-a06b-d2869fdbedf6	2	t	f
2988	physicalvalue	应力	Output	\N	\N	\N	4	0.2	0	MPa		2018-12-06 11:49:54.276+08	2018-12-06 11:49:54.276+08	21c31597-4e3d-4568-bc38-7d53a010fe90	2	t	f
2990	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:12:17.187+08	2018-12-07 17:12:17.187+08	b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06	2	t	f
2991	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:12:17.192+08	2018-12-07 17:12:17.192+08	b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06	2	t	f
2992	physicalvalue	索力	Output	\N			3	\N	\N	KN		2018-12-07 17:12:17.198+08	2018-12-07 17:16:15.474+08	b8bf89a8-9e01-42a3-b331-a3b2c1fb2e06	2	t	f
2979	am	幅值	Output	\N			3	\N	\N	mv		2018-12-06 11:31:40.611+08	2018-12-06 11:31:50.881+08	a1051359-cb72-4421-9dae-06e5cc0d8622	2	t	f
2980	physicalvalue	应力	Output	\N	\N	\N	4	0.8	0	MPa		2018-12-06 11:32:55.809+08	2018-12-06 11:32:55.809+08	a1051359-cb72-4421-9dae-06e5cc0d8622	2	t	f
2981	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-06 11:33:18.48+08	2018-12-06 11:33:18.48+08	a1051359-cb72-4421-9dae-06e5cc0d8622	2	t	f
2984	physicalvalue	应力	Output	\N			4	0.4	0	MPa		2018-12-06 11:39:44.715+08	2018-12-06 11:39:51.709+08	cba87e64-ebf2-4b4b-8fe3-8df973625a56	2	t	f
2987	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2018-12-06 11:48:41.627+08	2018-12-06 11:48:41.627+08	21c31597-4e3d-4568-bc38-7d53a010fe90	2	t	f
2993	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:12:17.336+08	2018-12-07 17:12:17.336+08	fecfc4c4-f65d-44d1-afdb-57d325216958	2	t	f
2994	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:12:17.344+08	2018-12-07 17:12:17.344+08	fecfc4c4-f65d-44d1-afdb-57d325216958	2	t	f
2995	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-12-07 17:12:17.35+08	2018-12-07 17:12:17.35+08	fecfc4c4-f65d-44d1-afdb-57d325216958	2	t	f
2999	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:22:01.996+08	2018-12-07 17:22:01.996+08	bbfe4ad2-61fd-4c9b-9a68-a0682458a01c	2	t	f
3000	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:22:02.003+08	2018-12-07 17:22:02.003+08	bbfe4ad2-61fd-4c9b-9a68-a0682458a01c	2	t	f
3002	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:22:02.574+08	2018-12-07 17:22:02.574+08	71c10c83-3856-45fb-ab38-c75aabf7d5ea	2	t	f
3003	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:22:02.58+08	2018-12-07 17:22:02.58+08	71c10c83-3856-45fb-ab38-c75aabf7d5ea	2	t	f
3008	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-07 17:22:03.98+08	2018-12-07 17:22:03.98+08	4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329	2	t	f
3009	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-07 17:22:03.985+08	2018-12-07 17:22:03.985+08	4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329	2	t	f
3001	physicalvalue	压力	Output	\N			3	\N	\N	KN		2018-12-07 17:22:02.008+08	2018-12-07 17:22:49.038+08	bbfe4ad2-61fd-4c9b-9a68-a0682458a01c	2	t	f
3004	physicalvalue	压力	Output	\N			3	\N	\N	KN		2018-12-07 17:22:02.586+08	2018-12-07 17:23:27.81+08	71c10c83-3856-45fb-ab38-c75aabf7d5ea	2	t	f
3010	physicalvalue	应力	Output	\N			3	\N	\N	KN		2018-12-07 17:22:03.989+08	2018-12-07 17:24:33.577+08	4c36ad2e-c8d1-4ed3-a415-bf31d5bb8329	2	t	f
3015	deviceId	deviceId	Output	\N	\N	\N	\N	\N				2018-12-08 15:13:13.216+08	2018-12-08 15:13:13.216+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	1	t	f
3041	conductivity	电导率	Output	\N	\N	\N	2	20	0	mS/cm		2018-12-13 11:05:28.679+08	2018-12-13 11:05:28.679+08	067d099e-3d4d-40f5-8ca7-68383ffd5208	2	t	f
3045	power	电量	Output	\N	\N	\N	\N	\N	\N	%		2018-12-13 13:58:23.83+08	2018-12-13 13:58:23.83+08	72701fdd-9595-45b1-8bed-190d4bf8ea7f	1	t	f
3016	x	X位置	Output	\N			6	\N	\N	mm		2018-12-08 15:43:58.647+08	2018-12-08 16:04:55.694+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
3017	y	Y位置	Output	\N			6	\N	\N	mm		2018-12-08 15:44:11.131+08	2018-12-08 16:05:01.888+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
3018	z	Z位置	Output	\N			6	\N	\N	mm		2018-12-08 15:44:20.99+08	2018-12-08 16:05:15.656+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
3019	dx	dx累积形变量	Output	\N			6	\N	\N	mm		2018-12-08 15:44:32.38+08	2018-12-08 16:06:47.265+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
3021	dz	dz累积形变量	Output	\N			6	\N	\N	mm		2018-12-08 15:45:00.513+08	2018-12-08 16:06:51.149+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	2	t	f
3022	mass	毛重	Output	\N	\N	\N	3	\N	\N	KG		2018-12-08 17:38:49.081+08	2018-12-08 17:38:49.081+08	0437f985-a7fc-497c-82ce-fda992d3a8d3	2	t	f
3023	mass	毛重	Output	\N	\N	\N	\N	\N	\N	Kg		2018-12-10 10:00:51.297+08	2018-12-10 10:00:51.297+08	9e3252d0-5674-400f-813b-eaf3f07ee1ff	1	t	f
3024	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2018-12-10 11:37:08.59+08	2018-12-10 11:37:08.59+08	2818ab68-9d7c-4254-99e5-e1edc265931c	2	t	f
3026	physicalvalue	轴力	Output	\N	\N	\N	3		\N	KN		2018-12-10 11:37:48.97+08	2018-12-10 11:37:48.97+08	2818ab68-9d7c-4254-99e5-e1edc265931c	2	t	f
3025	temperature	温度	Output	\N			2	80	-20	℃		2018-12-10 11:37:27.26+08	2018-12-10 11:39:27.769+08	2818ab68-9d7c-4254-99e5-e1edc265931c	2	t	f
3027	value	沉降	Output	\N			2	1500	0	mm		2018-12-11 14:11:28.312+08	2018-12-11 14:22:42.768+08	a1a7e32d-9449-425a-9043-e40a835abf95	2	t	f
3044	alarm	报警信息	Output	\N			0					2018-12-13 13:58:23.827+08	2018-12-13 15:52:03.838+08	72701fdd-9595-45b1-8bed-190d4bf8ea7f	5	t	f
3051	direction	方向	Output	\N	\N	\N	\N	\N	\N	\N		2018-12-15 11:42:30.098+08	2018-12-15 11:42:30.098+08	5e55d0a9-995a-465c-ac1d-a0253c41bc53	5	t	f
3052	speed	车速	Output	\N	\N	\N	\N	\N	\N	km/h		2018-12-15 11:42:30.103+08	2018-12-15 11:42:30.103+08	5e55d0a9-995a-465c-ac1d-a0253c41bc53	1	t	f
3043	long	经度	Output	\N			4	\N	\N	°		2018-12-13 13:58:23.819+08	2018-12-13 15:53:14.25+08	72701fdd-9595-45b1-8bed-190d4bf8ea7f	2	t	f
3042	lang	纬度	Output	\N			4	\N	\N	°		2018-12-13 13:58:23.811+08	2018-12-13 15:53:19.054+08	72701fdd-9595-45b1-8bed-190d4bf8ea7f	2	t	f
3049	windspeed	风速	Output	\N	\N	\N	\N	\N	\N	m/s		2018-12-15 11:36:54.195+08	2018-12-15 11:36:54.195+08	7ac65a44-f581-4440-81e8-123685b15bbb	1	t	f
3050	winddirection	风向	Output	\N	\N	\N	\N	\N	\N	°		2018-12-15 11:36:54.202+08	2018-12-15 11:36:54.202+08	7ac65a44-f581-4440-81e8-123685b15bbb	1	t	f
3053	roadno	车道	Output	\N	\N	\N	\N	\N	\N			2018-12-15 11:42:30.107+08	2018-12-15 11:42:30.107+08	5e55d0a9-995a-465c-ac1d-a0253c41bc53	1	t	f
2841	readingNumber	水表读数	Output	\N			3	\N	\N	m3		2018-11-02 11:08:38.973+08	2018-12-15 15:10:34.526+08	7b5d05d6-c187-4e6f-97aa-9add7a42ebbc	2	t	f
3054	pm25	PM2.5	Output	\N	\N	\N	\N	\N	\N	ug/m³		2018-12-15 16:52:13.983+08	2018-12-15 16:52:13.983+08	e277a4bb-5513-4464-be88-055a50df13b0	1	t	f
3055	pm10	PM10	Output	\N	\N	\N	\N	\N	\N	ug/m³		2018-12-15 16:52:13.99+08	2018-12-15 16:52:13.99+08	e277a4bb-5513-4464-be88-055a50df13b0	1	t	f
3057	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:35:54.042+08	2018-12-18 16:35:54.042+08	f8c7d826-f0aa-4b53-a793-833a2e913699	2	t	f
3014	projectId	projectId	Output	\N			0					2018-12-08 15:13:00.74+08	2020-04-22 14:58:52.624+08	d1c4860a-e460-4a8a-928a-0c08b2f1e408	5	t	f
3080	anglex	X轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:48:31.876+08	2018-12-24 11:48:31.876+08	f50640f2-9144-4d3a-ae14-f042492a899b	2	t	f
3047	physicalvalue	波长	Output	\N			3	\N	\N	mm		2018-12-13 15:34:15.376+08	2019-01-11 11:49:33.539+08	61f238e3-e9dd-4c9c-a451-114ab6682354	2	t	f
3059	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:35:55.162+08	2018-12-18 16:35:55.162+08	fe292a77-3306-4e04-9708-072c060f3e74	2	t	f
3061	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:40.233+08	2018-12-18 16:53:40.233+08	36c1deeb-653e-4326-98ac-a804fac20490	2	t	f
3063	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:40.806+08	2018-12-18 16:53:40.806+08	3aff704a-a328-45da-b0eb-3fee9080c603	2	t	f
3065	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:41.322+08	2018-12-18 16:53:41.322+08	9b0aed36-6906-439d-8969-4918e4e723f5	2	t	f
3067	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:41.857+08	2018-12-18 16:53:41.857+08	fda2ff9a-981a-43fb-9a27-2f74effa3e43	2	t	f
3069	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:42.385+08	2018-12-18 16:53:42.385+08	cebdbb60-2d1c-4a4a-af8c-85a571d69232	2	t	f
3071	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:42.856+08	2018-12-18 16:53:42.856+08	16fd9521-16ab-499d-b342-4ed89b2fb211	2	t	f
3073	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-18 16:53:43.589+08	2018-12-18 16:53:43.589+08	4604ffee-b4ae-49e6-8498-281f3954e051	2	t	f
3056	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-12-18 16:35:54.035+08	2018-12-18 16:59:47.598+08	f8c7d826-f0aa-4b53-a793-833a2e913699	2	t	f
3058	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-12-18 16:35:55.15+08	2018-12-18 17:00:02.672+08	fe292a77-3306-4e04-9708-072c060f3e74	2	t	f
3060	physicalvalue	应力	Output	\N			3	\N	\N	με		2018-12-18 16:53:40.227+08	2018-12-18 17:00:55.217+08	36c1deeb-653e-4326-98ac-a804fac20490	2	t	f
3062	physicalvalue	应变	Output	\N			3	\N	\N	με		2018-12-18 16:53:40.798+08	2018-12-18 17:01:31.967+08	3aff704a-a328-45da-b0eb-3fee9080c603	2	t	f
3064	physicalvalue	荷载	Output	\N			3	\N	\N	με		2018-12-18 16:53:41.315+08	2018-12-18 17:01:44.188+08	9b0aed36-6906-439d-8969-4918e4e723f5	2	t	f
3066	physicalvalue	轴力	Output	\N			3	\N	\N	με		2018-12-18 16:53:41.852+08	2018-12-18 17:01:58.148+08	fda2ff9a-981a-43fb-9a27-2f74effa3e43	2	t	f
3068	physicalvalue	水压	Output	\N			3	\N	\N	με		2018-12-18 16:53:42.376+08	2018-12-18 17:02:18.668+08	cebdbb60-2d1c-4a4a-af8c-85a571d69232	2	t	f
3078	totalFlow	累积流量	Output	\N			2	120	0	m3		2018-12-21 15:26:00.422+08	2018-12-25 11:43:23.933+08	7f040f7c-5295-47e8-9ad0-e60c4bbb45b9	2	t	f
3070	physicalvalue	土压力	Output	\N			3	\N	\N	με		2018-12-18 16:53:42.852+08	2018-12-18 17:03:10.707+08	16fd9521-16ab-499d-b342-4ed89b2fb211	2	t	f
3072	physicalvalue	土压力	Output	\N			3	\N	\N	με		2018-12-18 16:53:43.576+08	2018-12-18 17:03:19.078+08	4604ffee-b4ae-49e6-8498-281f3954e051	2	t	f
3074	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-20 14:58:47.456+08	2018-12-20 14:58:47.456+08	764df0c7-c68c-47cf-827f-d2cee7802096	2	t	f
3075	physicalvalue	沉降	Output	\N	\N	\N	2	\N	\N	mm		2018-12-20 14:59:20.536+08	2018-12-20 14:59:20.536+08	764df0c7-c68c-47cf-827f-d2cee7802096	2	t	f
3076	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2018-12-20 15:05:52.071+08	2018-12-20 15:05:52.071+08	ecdcbcbd-7dc4-4195-8207-a0d0d3a50f94	2	t	f
3077	transientFlow	瞬时流量	Output	\N			2	12000000	0	L/h		2018-12-21 15:25:28.147+08	2018-12-25 11:43:44.806+08	7f040f7c-5295-47e8-9ad0-e60c4bbb45b9	2	t	f
3079	level	液位	Output	\N			3			mm		2018-12-22 09:58:40.886+08	2018-12-22 17:08:46.78+08	2ad69732-f5bc-48ff-9b70-ef6374830804	2	t	f
3081	angley	Y轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:48:54.26+08	2018-12-24 11:48:54.26+08	f50640f2-9144-4d3a-ae14-f042492a899b	2	t	f
3082	anglex	X轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:24.877+08	2018-12-24 11:53:24.877+08	fb5b0dad-7bf3-429f-a153-95ff04ef6b58	2	t	f
3083	angley	Y轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:24.884+08	2018-12-24 11:53:24.884+08	fb5b0dad-7bf3-429f-a153-95ff04ef6b58	2	t	f
3084	anglex	X轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:26.52+08	2018-12-24 11:53:26.52+08	a20c22f5-81ae-4aa9-9a71-40fd0854d653	2	t	f
3085	angley	Y轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:26.527+08	2018-12-24 11:53:26.527+08	a20c22f5-81ae-4aa9-9a71-40fd0854d653	2	t	f
3086	anglex	X轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:35.04+08	2018-12-24 11:53:35.04+08	9bec257b-dd97-4034-ada6-eb01b7a69868	2	t	f
3087	angley	Y轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 11:53:35.046+08	2018-12-24 11:53:35.046+08	9bec257b-dd97-4034-ada6-eb01b7a69868	2	t	f
3088	length	长度	Output	\N			5	\N	\N	cm		2018-12-24 14:39:01.243+08	2018-12-24 14:39:58.404+08	865d7b6a-d5c7-4c8a-915f-4350e6cbab7b	2	t	f
3089	angley	Y轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 15:31:37.908+08	2018-12-24 15:31:37.908+08	a625037d-7d72-4479-857e-ba45ebf3a2db	2	t	f
3090	anglex	X轴角度	Output	\N	\N	\N	3	180	-180	°		2018-12-24 15:31:37.914+08	2018-12-24 15:31:37.914+08	a625037d-7d72-4479-857e-ba45ebf3a2db	2	t	f
3091	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2018-12-27 15:45:15.468+08	2018-12-27 15:45:15.468+08	12f5bcb9-fd4e-4b1c-bb2f-36ddf7727452	5	t	f
3092	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N	με		2018-12-28 11:04:06.916+08	2018-12-28 11:04:06.916+08	7ab198d0-56df-4a07-9b1a-ea5c16664b5c	2	t	f
3093	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2018-12-28 11:08:17.641+08	2018-12-28 11:08:17.641+08	70c9304e-caaf-4c6e-aa82-b51207d7aeac	2	t	f
3094	physicalvalue	裂缝	Output	\N			3	\N	\N	mm		2018-12-28 11:15:02.007+08	2018-12-28 11:15:45.458+08	14784dc2-a6ea-4008-acd6-bb96f3cedf1e	2	t	f
3095	physicalvalue	角度	Output	\N	\N	\N	2	\N	\N	°		2018-12-28 11:18:05.697+08	2018-12-28 11:18:05.697+08	b9a47230-060a-45fd-8409-4307247b8a62	2	t	f
3096	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2018-12-28 11:30:29.897+08	2018-12-28 11:30:29.897+08	8b827cae-a928-42a2-bcd6-0071556c240f	2	t	f
3100	noise	噪音	Output	\N	\N	\N	\N	\N	\N	dB		2018-12-28 14:32:37.364+08	2018-12-28 14:32:37.364+08	e277a4bb-5513-4464-be88-055a50df13b0	1	t	f
3101	temp	温度	Output	\N	\N	\N	\N	\N	\N	℃		2018-12-28 14:33:13.58+08	2018-12-28 14:33:13.58+08	e277a4bb-5513-4464-be88-055a50df13b0	1	t	f
3097	physicalvalue	挠度	Output	\N			2	\N	\N	mm		2018-12-28 11:30:32.418+08	2018-12-28 11:33:27.965+08	0070fd98-008a-4af5-b805-e81d23644df8	2	t	f
3098	physicalvalue	温度	Output	\N			2	\N	\N	℃		2018-12-28 11:30:33.812+08	2018-12-28 11:34:23.355+08	4a8364ac-890a-4260-b8d7-6e4ae7dcd4e3	2	t	f
3099	physicalvalue	湿度	Output	\N			2	\N	\N	%		2018-12-28 11:30:35.254+08	2018-12-28 11:35:01.764+08	114001d1-f9ab-4564-b7e0-319e04d86a54	2	t	f
3102	humidy	湿度	Output	\N	\N	\N	\N	\N	\N	%RH		2018-12-28 14:34:06.916+08	2018-12-28 14:34:06.916+08	e277a4bb-5513-4464-be88-055a50df13b0	1	t	f
3104	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-01-04 15:54:20.085+08	2019-01-04 15:54:20.085+08	35ec137a-ea04-4c81-bbaf-23ddae650c0e	2	t	f
3106	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-01-04 15:55:45.827+08	2019-01-04 15:55:45.827+08	becc893e-7135-41ab-8e23-10257bd06437	2	t	f
3107	pressure	液位	Output	\N			3	\N	\N	mm		2019-01-07 11:09:19.362+08	2019-01-07 11:09:24.655+08	b6fe084b-3bb8-4dcc-922d-b85d47f1149b	2	t	f
3108	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-01-07 11:11:49.584+08	2019-01-07 11:11:49.584+08	b6fe084b-3bb8-4dcc-922d-b85d47f1149b	2	t	f
3109	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-01-07 17:23:55.783+08	2019-01-07 17:23:55.783+08	9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7	2	t	f
3111	temperature	温度	Output	\N			3	40	0	℃		2019-01-07 17:23:55.793+08	2019-01-07 17:23:55.793+08	9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7	2	t	f
3103	pressure	压强	Output	\N			2	\N	\N	Kpa		2019-01-04 15:54:00.578+08	2019-07-16 10:36:56.537+08	35ec137a-ea04-4c81-bbaf-23ddae650c0e	2	t	f
3112	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-01-07 17:45:50.827+08	2019-01-07 17:45:50.827+08	98c8c785-f229-4409-b2a6-a1e57af72b26	2	t	f
3114	temperature	温度	Output	\N			3	40	0	℃		2019-01-07 17:45:50.869+08	2019-01-07 17:45:50.869+08	98c8c785-f229-4409-b2a6-a1e57af72b26	2	t	f
3148	pressure	压强	Output	\N			3			kPa		2019-01-19 17:15:44.543+08	2019-01-19 17:16:45.565+08	4aaa9fb5-2119-4f7a-bd49-74a4c73e0e9b	2	t	f
3110	physicalvalue	轴力	Output	\N			3	10000	0	KN		2019-01-07 17:23:55.788+08	2019-01-07 17:49:10.37+08	9b5b793a-5bfb-4693-9fd1-1d8a85b6e4a7	2	t	f
3115	physicalvalue	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-01-08 15:13:58.845+08	2019-01-08 15:13:58.845+08	7406dcb2-9b68-42e3-9178-90ac77d39703	2	t	f
3138	sleeptype	睡眠类型	Output	\N			0			\N		2019-01-15 20:52:54.671+08	2019-01-15 20:53:26.245+08	b5064da1-895c-40e3-84db-b6330326f9c8	5	t	f
3137	count	动作次数	Output	\N			0			\N		2019-01-15 20:50:18.243+08	2019-01-15 21:00:11.307+08	b5064da1-895c-40e3-84db-b6330326f9c8	5	t	f
3116	jsonfileexts	物理量	Constant	\N		.a,.d,.dx,.dex,.txt	0			\N		2019-01-08 16:05:40.448+08	2019-01-08 16:43:28.057+08	e3ba8196-3d34-4b50-9cd5-866ad57dae8e	5	t	f
3117	stepvalue	步数	Output	\N	\N	\N	\N	\N	\N	\N		2019-01-14 15:28:21.36+08	2019-01-14 15:28:21.36+08	e37bdd04-f3eb-47f4-b174-70d573239a00	1	t	f
3119	city	城市	Output	\N	\N	\N	\N	\N	\N	\N		2019-01-14 15:44:06.674+08	2019-01-14 15:44:06.674+08	ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	5	t	f
3120	address	地址	Output	\N	\N	\N	\N	\N	\N			2019-01-14 15:44:06.679+08	2019-01-14 15:44:06.679+08	ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	5	t	f
3121	lon	经度	Output	\N	\N	\N	6	\N	\N	°		2019-01-14 15:44:06.684+08	2019-01-14 15:44:06.684+08	ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	2	t	f
3122	lat	维度	Output	\N	\N	\N	6	\N	\N	°		2019-01-14 15:44:06.688+08	2019-01-14 15:44:06.688+08	ae4b47fb-2d87-4fa5-84d9-72e1b5caa334	2	t	f
3123	city	城市	Output	\N	\N	\N	\N	\N	\N	\N		2019-01-14 15:47:03.728+08	2019-01-14 15:47:03.728+08	b3f37406-863d-441d-80af-d7f79747ca0f	5	t	f
3124	address	地址	Output	\N	\N	\N	\N	\N	\N			2019-01-14 15:47:03.734+08	2019-01-14 15:47:03.734+08	b3f37406-863d-441d-80af-d7f79747ca0f	5	t	f
3125	lon	经度	Output	\N	\N	\N	6	\N	\N	°		2019-01-14 15:47:03.739+08	2019-01-14 15:47:03.739+08	b3f37406-863d-441d-80af-d7f79747ca0f	2	t	f
3127	power	电量	Output	\N	\N	\N	\N	\N	\N	%		2019-01-14 15:48:47.01+08	2019-01-14 15:48:47.01+08	d9a190a8-343c-43a4-8ad3-2dc5ee25e283	1	t	f
3128	city	城市	Output	\N	\N	\N	\N	\N	\N	\N		2019-01-14 15:51:12.9+08	2019-01-14 15:51:12.9+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	5	t	f
3129	address	地址	Output	\N	\N	\N	\N	\N	\N			2019-01-14 15:51:12.908+08	2019-01-14 15:51:12.908+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	5	t	f
3130	lon	经度	Output	\N	\N	\N	6	\N	\N	°		2019-01-14 15:51:12.914+08	2019-01-14 15:51:12.914+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	2	t	f
3132	heartrate	心率	Output	\N	\N	\N	\N	\N	\N			2019-01-14 15:51:12.926+08	2019-01-14 15:51:12.926+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	1	t	f
3133	timeBegin	开始时间	Output	\N	\N	\N	\N	\N	\N	\N		2019-01-14 16:40:25.388+08	2019-01-14 16:40:25.388+08	b5064da1-895c-40e3-84db-b6330326f9c8	5	t	f
3134	timeEnd	结束时间	Output	\N	\N	\N	\N	\N	\N			2019-01-14 16:41:02.405+08	2019-01-14 16:41:02.405+08	b5064da1-895c-40e3-84db-b6330326f9c8	5	t	f
3135	total	检测次数	Output	\N	\N	\N	\N	\N	\N			2019-01-14 16:41:26.619+08	2019-01-14 16:41:26.619+08	b5064da1-895c-40e3-84db-b6330326f9c8	1	t	f
3136	interval	间隔	Output	\N	\N	\N	\N	\N	\N	min		2019-01-14 16:41:46.208+08	2019-01-14 16:41:46.208+08	b5064da1-895c-40e3-84db-b6330326f9c8	1	t	f
3118	heartrate	心率	Output	\N			0	\N	\N	\N		2019-01-14 15:31:37.069+08	2019-01-16 17:35:27.411+08	20e441d3-19e4-4f48-bf5a-36448db75de0	1	t	f
3126	lat	纬度	Output	\N			6	\N	\N	°		2019-01-14 15:47:03.743+08	2019-01-15 20:19:32.507+08	b3f37406-863d-441d-80af-d7f79747ca0f	2	t	f
3131	lat	纬度	Output	\N			6	\N	\N	°		2019-01-14 15:51:12.921+08	2019-01-15 20:19:41.834+08	eed60769-7fe4-4bca-87ea-2de74bb2cd88	2	t	f
3139	lat	纬度	Output	\N	\N	\N	6	\N	\N	°		2019-01-18 16:57:11.305+08	2019-01-18 16:57:11.305+08	cf950c05-2642-444a-bda7-45be85b50ddc	2	t	f
3140	lon	经度	Output	\N	\N	\N	6	\N	\N	°		2019-01-18 16:57:11.312+08	2019-01-18 16:57:11.312+08	cf950c05-2642-444a-bda7-45be85b50ddc	2	t	f
3141	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2019-01-19 09:50:24.334+08	2019-01-19 09:50:24.334+08	b2d20518-3d22-4730-9121-735650110838	2	t	f
3142	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2019-01-19 09:53:49.356+08	2019-01-19 09:53:49.356+08	e65346cf-f6d0-41a0-a1d9-e3644ea50971	2	t	f
3143	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2019-01-19 09:55:47.814+08	2019-01-19 09:55:47.814+08	c7d0b1b1-3264-4661-b682-0276be62ccdc	2	t	f
3144	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-01-19 14:40:24.347+08	2019-01-19 14:40:24.347+08	d530a5b1-8f7a-49ae-b3c8-2f255589e6bf	2	t	f
3145	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-01-19 14:40:56.189+08	2019-01-19 14:40:56.189+08	6e13b5de-10cb-42f1-ac80-b2550d25a5ea	2	t	f
3150	high2	纸类垃圾容量	Output	\N	\N	\N	\N	100	0	%		2019-01-21 10:50:35.803+08	2019-01-21 10:50:35.803+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3158	high10	可回收垃圾容量	Output	\N	\N	\N	\N	100	0	%		2019-01-21 10:56:48.961+08	2019-01-21 10:56:48.961+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3151	high3	金属垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:53:12.388+08	2019-01-21 10:57:03.502+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3152	high4	衣服垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:53:41.529+08	2019-01-21 10:57:18.022+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3153	high5	玻璃垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:54:05.934+08	2019-01-21 10:57:24.668+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3154	high6	有害垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:54:34.22+08	2019-01-21 10:57:32.36+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3155	high7	电子垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:54:59.469+08	2019-01-21 10:57:39.677+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3156	high8	纸塑品垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:55:33.965+08	2019-01-21 10:57:45.096+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3160	high12	瓶罐垃圾容量	Output	\N	\N	\N	\N	100	0	%		2019-01-21 10:58:45.776+08	2019-01-21 10:58:45.776+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3414	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 14:24:04.309+08	2019-02-25 14:24:04.309+08	63df0f39-75da-443e-a275-59ebd94aa3ea	2	t	f
3149	high1	塑料垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:49:58.743+08	2019-01-21 10:56:57.49+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3157	high9	餐厨垃圾容量	Output	\N			0	100	0	%		2019-01-21 10:56:03.818+08	2019-01-21 10:57:49.85+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3159	high11	其他垃圾容量	Output	\N	\N	\N	\N	100	0	%		2019-01-21 10:58:17.177+08	2019-01-21 10:58:17.177+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3161	high13	不可回收垃圾容量	Output	\N	\N	\N	\N	100	0	%		2019-01-21 10:59:23.016+08	2019-01-21 10:59:23.016+08	cf950c05-2642-444a-bda7-45be85b50ddc	1	t	f
3162	physicalvalue	应变	Output	\N			3	\N	\N	με		2019-01-21 15:14:03.844+08	2019-01-21 15:15:46.281+08	42ff7750-3e27-4669-8018-92caf824ecd2	2	t	f
3170	level	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-01-22 09:31:33.17+08	2019-01-22 09:31:33.17+08	0264aff4-ba22-40ca-9ef9-866e00e00fb8	2	t	f
3172	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-01-24 10:02:30.585+08	2019-01-24 10:02:30.585+08	bb14be6f-ac60-4646-a8ce-c0e179c648d2	2	t	f
3171	pressure	压力	Output	\N			3	\N	\N	Kpa		2019-01-24 10:02:14.211+08	2019-01-24 12:57:23.159+08	bb14be6f-ac60-4646-a8ce-c0e179c648d2	2	t	f
3173	pressure	压力	Output	\N			3	\N	\N	Kpa		2019-01-24 11:54:00.406+08	2019-01-24 14:47:34.076+08	3ce74ad5-66e4-40b3-b5c0-52653cbbca87	2	t	f
3182	so2	SO2浓度	Output	\N			3	\N		μg/m3		2019-01-25 16:36:55.126+08	2019-01-25 16:37:50.174+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3183	no2	NO2浓度	Output	\N	\N	\N	3	\N	\N	μg/m3		2019-01-25 16:38:14.228+08	2019-01-25 16:38:14.228+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3184	o3	O3	Output	\N	\N	\N	3	\N	\N	μg/m3		2019-01-25 16:38:39.02+08	2019-01-25 16:38:39.02+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3186	voc	VOC浓度	Output	\N	\N	\N	3	\N		μg/m3		2019-01-25 16:39:26.498+08	2019-01-25 16:39:26.498+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3188	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-01-28 10:03:13.862+08	2019-01-28 10:03:13.862+08	bb308c8a-f70a-4351-a6dc-aedf8612cceb	2	t	f
3190	pressure	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2019-01-30 11:09:55.913+08	2019-01-30 11:09:55.913+08	ed20720d-14e7-48f1-bf4e-da3ec2ac4c46	2	t	f
3191	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-01-30 11:10:16.135+08	2019-01-30 11:10:16.135+08	ed20720d-14e7-48f1-bf4e-da3ec2ac4c46	2	t	f
3189	pressure	液位	Output	\N			2	\N	\N	mmH2O		2019-01-28 10:53:32.142+08	2019-02-18 15:52:45.037+08	6e91a917-6930-48a9-8a2e-69cd0a42dfde	2	t	f
3187	pressure	液位	Output	\N			3	\N	\N	mmH2O		2019-01-28 10:02:28.52+08	2019-02-18 15:52:52.263+08	bb308c8a-f70a-4351-a6dc-aedf8612cceb	2	t	f
3192	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 11:35:12.149+08	2019-02-22 11:35:12.149+08	ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	2	t	f
3193	frequency	频率	Output	\N			2	\N	\N	HZ		2019-02-22 11:35:12.156+08	2019-02-22 11:35:12.156+08	ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	2	t	f
3195	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 11:35:40.475+08	2019-02-22 11:35:40.475+08	738a6ad2-95f1-403a-94a1-8f641b2ab73f	2	t	f
3196	frequency	频率	Output	\N			2	\N	\N	HZ		2019-02-22 11:35:40.485+08	2019-02-22 11:35:40.485+08	738a6ad2-95f1-403a-94a1-8f641b2ab73f	2	t	f
3198	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 13:27:41.89+08	2019-02-22 13:27:41.89+08	e956e4a1-49b3-46e3-b953-47c2c17a5098	2	t	f
3202	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 13:35:17.633+08	2019-02-22 13:35:17.633+08	b8f7deb8-c684-47d4-b8b0-a1d66615944c	2	t	f
3203	frequency	频率	Output	\N			2	\N	\N	HZ		2019-02-22 13:35:17.639+08	2019-02-22 13:35:17.639+08	b8f7deb8-c684-47d4-b8b0-a1d66615944c	2	t	f
3204	physicalvalue	裂缝	Output	\N			3	\N	\N	mm		2019-02-22 13:35:17.646+08	2019-02-22 13:36:43.763+08	b8f7deb8-c684-47d4-b8b0-a1d66615944c	2	t	f
3194	physicalvalue	应变	Output	\N			3	\N	\N	με		2019-02-22 11:35:12.161+08	2019-02-22 13:37:38.895+08	ec2fd932-2dbe-45f2-a15b-0815ec8ff1b2	2	t	f
3207	physicalvalue	X轴角度	Output	\N			2	\N	\N	°		2019-02-22 13:41:58.528+08	2019-02-22 14:30:32.08+08	64960998-d3e8-4ce1-857a-36e232a099c0	2	t	f
3206	physicalvalue2	Y轴角度	Output	\N			2	\N	\N	°		2019-02-22 13:41:58.521+08	2019-02-22 14:30:37.353+08	64960998-d3e8-4ce1-857a-36e232a099c0	2	t	f
3210	physicalvalue	沉降	Output	\N			3	\N	\N	mm		2019-02-22 13:44:23.981+08	2019-02-22 14:42:31.427+08	b1305d43-23de-4740-a7a2-213facc63133	2	t	f
3211	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 15:24:53.464+08	2019-02-22 15:24:53.464+08	64960998-d3e8-4ce1-857a-36e232a099c0	2	t	f
3212	voltage	电压	Output	\N	\N	\N	6	\N	\N	V		2019-02-22 16:33:55.424+08	2019-02-22 16:33:55.424+08	f1b9e898-07e9-4182-9cf1-1cb52a4c7b0d	2	t	f
3200	physicalvalue	X轴角度	Output	\N			2	\N	\N	°		2019-02-22 13:27:41.903+08	2019-02-22 16:46:06.793+08	e956e4a1-49b3-46e3-b953-47c2c17a5098	2	t	f
3199	physicalvalue2	Y轴角度	Output	\N			2	\N	\N	°		2019-02-22 13:27:41.897+08	2019-02-22 16:46:14.871+08	e956e4a1-49b3-46e3-b953-47c2c17a5098	2	t	f
3213	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-22 17:20:51.921+08	2019-02-22 17:20:51.921+08	f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0	2	t	f
3214	pressure	压力	Output	\N			3	20	-20	Kpa		2019-02-22 17:20:51.934+08	2019-02-22 17:22:11.174+08	f93bd5ed-fe1a-4d44-8efb-f98f381b7aa0	2	t	f
3215	speed	风速	Output	\N			2	\N	\N	m/s		2019-02-25 11:38:45.184+08	2019-02-25 11:38:45.184+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3216	direction	风向	Output	\N			2	\N	\N	°		2019-02-25 11:38:45.196+08	2019-02-25 11:38:45.196+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3217	pm10	PM10	Output	\N			2	\N	\N	ug/m³		2019-02-25 11:38:45.203+08	2019-02-25 11:38:45.203+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3218	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:38:45.208+08	2019-02-25 11:38:45.208+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3219	noise	噪声	Output	\N			2	\N	\N	dB		2019-02-25 11:38:45.213+08	2019-02-25 11:38:45.213+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3220	pm25	PM2.5	Output	\N			3	\N	\N	ug/m³		2019-02-25 11:38:45.219+08	2019-02-25 11:38:45.219+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3221	humidity	湿度	Output	\N			2	\N	\N	%RH		2019-02-25 11:38:45.226+08	2019-02-25 11:38:45.226+08	3bc72c52-2e6b-42b4-9f0c-f4860e9e6c09	2	t	f
3222	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:41:29.901+08	2019-02-25 11:41:29.901+08	4b01a62e-4b72-477a-b628-3e60ab9eba3c	2	t	f
3223	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:41:29.909+08	2019-02-25 11:41:29.909+08	4b01a62e-4b72-477a-b628-3e60ab9eba3c	2	t	f
3224	physicalvalue	水压	Output	\N			4	0.2	0	MPa		2019-02-25 11:41:29.916+08	2019-02-25 11:41:29.916+08	4b01a62e-4b72-477a-b628-3e60ab9eba3c	2	t	f
3225	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:41:29.922+08	2019-02-25 11:41:29.922+08	4b01a62e-4b72-477a-b628-3e60ab9eba3c	2	t	f
3226	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:41:29.937+08	2019-02-25 11:41:29.937+08	b0322703-c5a9-4310-a6b7-0311a4317136	2	t	f
3227	physicalvalue	水压	Output	\N	\N	\N	4	0.2	0	MPa		2019-02-25 11:41:29.943+08	2019-02-25 11:41:29.943+08	b0322703-c5a9-4310-a6b7-0311a4317136	2	t	f
3228	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:41:29.948+08	2019-02-25 11:41:29.948+08	b0322703-c5a9-4310-a6b7-0311a4317136	2	t	f
3229	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:41:29.954+08	2019-02-25 11:41:29.954+08	b0322703-c5a9-4310-a6b7-0311a4317136	2	t	f
3230	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:41:29.97+08	2019-02-25 11:41:29.97+08	8ea33ec2-98a7-487c-a662-18151711a0b4	2	t	f
3185	co	co浓度	Output	\N			3	\N		mg/m3		2019-01-25 16:39:01.473+08	2019-07-17 17:04:31.378+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3175	temperature	温度	Output	\N			1	80	-40	℃		2019-01-25 16:28:09.827+08	2019-06-11 11:01:54.577+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3176	humidity	湿度	Output	\N			1	100	0	%RH		2019-01-25 16:28:56.936+08	2019-06-11 11:02:00.605+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3177	pm100	PM100	Output	\N			1	\N	\N	μg/m3		2019-01-25 16:29:40.562+08	2019-06-11 11:02:08.734+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3178	pm2_5	PM2.5	Output	\N			1	\N	\N	μg/m3		2019-01-25 16:33:16.397+08	2019-06-11 11:02:18.109+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3179	pm10	PM10	Output	\N			1	\N	\N	μg/m3		2019-01-25 16:33:46.204+08	2019-06-11 11:02:38.535+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3180	longitude	经度	Output	\N			6	\N	\N	°		2019-01-25 16:35:52.291+08	2019-06-18 11:05:56.228+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3197	physicalvalue	压力	Output	\N			2	\N	\N	kpa		2019-02-22 11:35:40.49+08	2019-09-18 17:15:59.189+08	738a6ad2-95f1-403a-94a1-8f641b2ab73f	2	t	f
3231	physicalvalue	水压	Output	\N			4	0.2	0	MPa		2019-02-25 11:41:29.975+08	2019-02-25 11:41:29.975+08	8ea33ec2-98a7-487c-a662-18151711a0b4	2	t	f
3232	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:41:29.98+08	2019-02-25 11:41:29.98+08	8ea33ec2-98a7-487c-a662-18151711a0b4	2	t	f
3233	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 11:41:29.986+08	2019-02-25 11:41:29.986+08	8ea33ec2-98a7-487c-a662-18151711a0b4	2	t	f
3234	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:42:07.368+08	2019-02-25 11:42:07.368+08	d9cbcff2-8304-4233-80db-b582ae78540c	2	t	f
3235	physicalvalue	水压	Output	\N			4	0.4	0	MPa		2019-02-25 11:42:07.378+08	2019-02-25 11:42:07.378+08	d9cbcff2-8304-4233-80db-b582ae78540c	2	t	f
3236	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:42:07.385+08	2019-02-25 11:42:07.385+08	d9cbcff2-8304-4233-80db-b582ae78540c	2	t	f
3237	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:42:07.39+08	2019-02-25 11:42:07.39+08	d9cbcff2-8304-4233-80db-b582ae78540c	2	t	f
3238	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:42:07.407+08	2019-02-25 11:42:07.407+08	9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	2	t	f
3239	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:42:07.412+08	2019-02-25 11:42:07.412+08	9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	2	t	f
3240	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:42:07.417+08	2019-02-25 11:42:07.417+08	9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	2	t	f
3241	physicalvalue	水压	Output	\N	\N	\N	4	0.4	0	MPa		2019-02-25 11:42:07.422+08	2019-02-25 11:42:07.422+08	9d7f517c-090d-4a86-bde7-3e9b8fbfcf58	2	t	f
3242	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:42:07.435+08	2019-02-25 11:42:07.435+08	2c2cd567-6eef-4304-afc9-cc14b4435240	2	t	f
3243	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:42:07.439+08	2019-02-25 11:42:07.439+08	2c2cd567-6eef-4304-afc9-cc14b4435240	2	t	f
3244	physicalvalue	水压	Output	\N			4	0.4	0	MPa		2019-02-25 11:42:07.444+08	2019-02-25 11:42:07.444+08	2c2cd567-6eef-4304-afc9-cc14b4435240	2	t	f
3245	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 11:42:07.449+08	2019-02-25 11:42:07.449+08	2c2cd567-6eef-4304-afc9-cc14b4435240	2	t	f
3246	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:44:07.893+08	2019-02-25 11:44:07.893+08	7845401a-4640-4465-987b-69f630af6b8a	2	t	f
3247	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:44:07.9+08	2019-02-25 11:44:07.9+08	7845401a-4640-4465-987b-69f630af6b8a	2	t	f
3248	physicalvalue	水压	Output	\N			4	0.6	0	MPa		2019-02-25 11:44:07.906+08	2019-02-25 11:44:07.906+08	7845401a-4640-4465-987b-69f630af6b8a	2	t	f
3249	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:44:07.911+08	2019-02-25 11:44:07.911+08	7845401a-4640-4465-987b-69f630af6b8a	2	t	f
3250	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:44:07.925+08	2019-02-25 11:44:07.925+08	67a68865-ee21-4627-b68d-98ed991689ad	2	t	f
3251	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:44:07.929+08	2019-02-25 11:44:07.929+08	67a68865-ee21-4627-b68d-98ed991689ad	2	t	f
3252	physicalvalue	水压	Output	\N	\N	\N	4	0.6	0	MPa		2019-02-25 11:44:07.934+08	2019-02-25 11:44:07.934+08	67a68865-ee21-4627-b68d-98ed991689ad	2	t	f
3253	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:44:07.939+08	2019-02-25 11:44:07.939+08	67a68865-ee21-4627-b68d-98ed991689ad	2	t	f
3254	physicalvalue	水压	Output	\N			4	0.6	0	MPa		2019-02-25 11:44:07.951+08	2019-02-25 11:44:07.951+08	720eb976-fd1d-4947-845b-15b344e808f3	2	t	f
3255	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:44:07.956+08	2019-02-25 11:44:07.956+08	720eb976-fd1d-4947-845b-15b344e808f3	2	t	f
3256	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 11:44:07.961+08	2019-02-25 11:44:07.961+08	720eb976-fd1d-4947-845b-15b344e808f3	2	t	f
3257	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 11:44:07.966+08	2019-02-25 11:44:07.966+08	720eb976-fd1d-4947-845b-15b344e808f3	2	t	f
3258	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:46:10.801+08	2019-02-25 11:46:10.801+08	a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	2	t	f
3259	physicalvalue	水压	Output	\N			4	0.8	0	MPa		2019-02-25 11:46:10.808+08	2019-02-25 11:46:10.808+08	a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	2	t	f
3260	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:46:10.814+08	2019-02-25 11:46:10.814+08	a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	2	t	f
3261	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:46:10.819+08	2019-02-25 11:46:10.819+08	a5a87dd5-6735-4b0a-8526-b7185d9bc6f0	2	t	f
3262	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:46:10.831+08	2019-02-25 11:46:10.831+08	cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	2	t	f
3263	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:46:10.836+08	2019-02-25 11:46:10.836+08	cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	2	t	f
3264	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:46:10.84+08	2019-02-25 11:46:10.84+08	cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	2	t	f
3265	physicalvalue	水压	Output	\N	\N	\N	4	0.8	0	MPa		2019-02-25 11:46:10.844+08	2019-02-25 11:46:10.844+08	cc7e3edd-3a03-43ec-961e-ddf5db3ec4f0	2	t	f
3266	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:46:10.859+08	2019-02-25 11:46:10.859+08	aea9a199-17e2-4db3-97f7-2f38de50fb90	2	t	f
3267	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:46:10.864+08	2019-02-25 11:46:10.864+08	aea9a199-17e2-4db3-97f7-2f38de50fb90	2	t	f
3268	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:46:10.868+08	2019-02-25 11:46:10.868+08	aea9a199-17e2-4db3-97f7-2f38de50fb90	2	t	f
3269	physicalvalue	水压	Output	\N	\N	\N	4	0.8	0	MPa		2019-02-25 11:46:10.872+08	2019-02-25 11:46:10.872+08	aea9a199-17e2-4db3-97f7-2f38de50fb90	2	t	f
3270	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:52:45.929+08	2019-02-25 11:52:45.929+08	772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	2	t	f
3271	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:52:45.937+08	2019-02-25 11:52:45.937+08	772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	2	t	f
3272	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:52:45.944+08	2019-02-25 11:52:45.944+08	772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	2	t	f
3273	physicalvalue	水压	Output	\N			4	1	0	MPa		2019-02-25 11:52:45.953+08	2019-02-25 11:52:45.953+08	772b1b1c-b174-40d7-9d03-4e6a6ee4fa2a	2	t	f
3274	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:52:45.968+08	2019-02-25 11:52:45.968+08	033a35ac-34f5-4970-871a-394dedbb920e	2	t	f
3275	physicalvalue	水压	Output	\N	\N	\N	4	1	0	MPa		2019-02-25 11:52:45.973+08	2019-02-25 11:52:45.973+08	033a35ac-34f5-4970-871a-394dedbb920e	2	t	f
3276	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:52:45.979+08	2019-02-25 11:52:45.979+08	033a35ac-34f5-4970-871a-394dedbb920e	2	t	f
3277	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:52:45.985+08	2019-02-25 11:52:45.985+08	033a35ac-34f5-4970-871a-394dedbb920e	2	t	f
3278	physicalvalue	水压	Output	\N	\N	\N	4	1	0	MPa		2019-02-25 11:52:45.998+08	2019-02-25 11:52:45.998+08	459695d2-69ab-4d25-8ea2-64c5b1884652	2	t	f
3279	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:52:46.003+08	2019-02-25 11:52:46.003+08	459695d2-69ab-4d25-8ea2-64c5b1884652	2	t	f
3280	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 11:52:46.009+08	2019-02-25 11:52:46.009+08	459695d2-69ab-4d25-8ea2-64c5b1884652	2	t	f
3281	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:52:46.015+08	2019-02-25 11:52:46.015+08	459695d2-69ab-4d25-8ea2-64c5b1884652	2	t	f
3282	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:55:32.894+08	2019-02-25 11:55:32.894+08	4af15f4e-a452-4123-8c3f-17182b707f61	2	t	f
3283	physicalvalue	水压	Output	\N			4	2	0	MPa		2019-02-25 11:55:32.902+08	2019-02-25 11:55:32.902+08	4af15f4e-a452-4123-8c3f-17182b707f61	2	t	f
3284	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 11:55:32.909+08	2019-02-25 11:55:32.909+08	4af15f4e-a452-4123-8c3f-17182b707f61	2	t	f
3285	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 11:55:32.916+08	2019-02-25 11:55:32.916+08	4af15f4e-a452-4123-8c3f-17182b707f61	2	t	f
3286	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:55:32.931+08	2019-02-25 11:55:32.931+08	ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	2	t	f
3287	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:55:32.939+08	2019-02-25 11:55:32.939+08	ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	2	t	f
3288	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 11:55:32.944+08	2019-02-25 11:55:32.944+08	ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	2	t	f
3289	physicalvalue	水压	Output	\N			4	2	0	MPa		2019-02-25 11:55:32.951+08	2019-02-25 11:55:32.951+08	ad7457c8-1261-489f-a7d1-fba6ab6fd2cb	2	t	f
3290	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 11:55:32.962+08	2019-02-25 11:55:32.962+08	7c8d2cc9-631b-4ba3-81d4-30126181dc94	2	t	f
3291	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 11:55:32.966+08	2019-02-25 11:55:32.966+08	7c8d2cc9-631b-4ba3-81d4-30126181dc94	2	t	f
3292	physicalvalue	水压	Output	\N	\N	\N	4	2	0	MPa		2019-02-25 11:55:32.971+08	2019-02-25 11:55:32.971+08	7c8d2cc9-631b-4ba3-81d4-30126181dc94	2	t	f
3293	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 11:55:32.977+08	2019-02-25 11:55:32.977+08	7c8d2cc9-631b-4ba3-81d4-30126181dc94	2	t	f
3295	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 13:30:27.006+08	2019-02-25 13:30:27.006+08	03afe194-fc01-4993-8f9a-ed4ca0ae6d90	2	t	f
3296	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 13:30:27.011+08	2019-02-25 13:30:27.011+08	03afe194-fc01-4993-8f9a-ed4ca0ae6d90	2	t	f
3298	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 13:30:27.025+08	2019-02-25 13:30:27.025+08	0dc2011e-5962-4366-82dd-6a326e0ddbf6	2	t	f
3299	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 13:30:27.029+08	2019-02-25 13:30:27.029+08	0dc2011e-5962-4366-82dd-6a326e0ddbf6	2	t	f
3418	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:25:00.062+08	2019-02-25 14:25:00.062+08	97be25b3-75df-4137-a479-22343213fe74	2	t	f
3419	physicalvalue	应变	Output	\N			4	3000	-3000	με		2019-02-25 14:25:00.074+08	2019-02-25 14:25:00.074+08	97be25b3-75df-4137-a479-22343213fe74	2	t	f
3420	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:25:00.092+08	2019-02-25 14:25:00.092+08	97be25b3-75df-4137-a479-22343213fe74	2	t	f
3421	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:25:00.097+08	2019-02-25 14:25:00.097+08	97be25b3-75df-4137-a479-22343213fe74	2	t	f
3422	physicalvalue	应变	Output	\N	\N	\N	4	3000	-3000	με		2019-02-25 14:25:00.109+08	2019-02-25 14:25:00.109+08	f2d80142-2f46-42d6-aa9e-c4e687c5690d	2	t	f
3423	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:25:00.119+08	2019-02-25 14:25:00.119+08	f2d80142-2f46-42d6-aa9e-c4e687c5690d	2	t	f
3424	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 14:25:00.13+08	2019-02-25 14:25:00.13+08	f2d80142-2f46-42d6-aa9e-c4e687c5690d	2	t	f
3425	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:25:00.14+08	2019-02-25 14:25:00.14+08	f2d80142-2f46-42d6-aa9e-c4e687c5690d	2	t	f
3426	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:25:00.154+08	2019-02-25 14:25:00.154+08	49ff32ed-be50-4c87-ba73-af20b848e154	2	t	f
3427	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:25:00.159+08	2019-02-25 14:25:00.159+08	49ff32ed-be50-4c87-ba73-af20b848e154	2	t	f
3428	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:25:00.162+08	2019-02-25 14:25:00.162+08	49ff32ed-be50-4c87-ba73-af20b848e154	2	t	f
3429	physicalvalue	应变	Output	\N			3	3000	-3000	με		2019-02-25 14:25:00.166+08	2019-02-25 14:25:00.166+08	49ff32ed-be50-4c87-ba73-af20b848e154	2	t	f
3302	physicalvalue	荷载	Output	\N			4	100	-100	t		2019-02-25 13:31:57.637+08	2019-02-25 13:31:57.637+08	b1acc286-422b-46a2-a2ea-4aa8c9b8256f	2	t	f
3303	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 13:31:57.644+08	2019-02-25 13:31:57.644+08	b1acc286-422b-46a2-a2ea-4aa8c9b8256f	2	t	f
3304	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 13:31:57.65+08	2019-02-25 13:31:57.65+08	b1acc286-422b-46a2-a2ea-4aa8c9b8256f	2	t	f
3305	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 13:31:57.656+08	2019-02-25 13:31:57.656+08	b1acc286-422b-46a2-a2ea-4aa8c9b8256f	2	t	f
3306	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 13:31:57.672+08	2019-02-25 13:31:57.672+08	bb29ba88-ec03-44ab-ba29-00d98ccd9af1	2	t	f
3307	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 13:31:57.677+08	2019-02-25 13:31:57.677+08	bb29ba88-ec03-44ab-ba29-00d98ccd9af1	2	t	f
3308	physicalvalue	荷载	Output	\N	\N	\N	4	100	-100	t		2019-02-25 13:31:57.682+08	2019-02-25 13:31:57.682+08	bb29ba88-ec03-44ab-ba29-00d98ccd9af1	2	t	f
3309	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 13:31:57.687+08	2019-02-25 13:31:57.687+08	bb29ba88-ec03-44ab-ba29-00d98ccd9af1	2	t	f
3310	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 13:32:42.891+08	2019-02-25 13:32:42.891+08	4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	2	t	f
3311	physicalvalue	荷载	Output	\N			4	200	-200	t		2019-02-25 13:32:42.898+08	2019-02-25 13:32:42.898+08	4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	2	t	f
3312	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 13:32:42.905+08	2019-02-25 13:32:42.905+08	4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	2	t	f
3313	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 13:32:42.911+08	2019-02-25 13:32:42.911+08	4a1e5bbd-ab8a-48fa-8915-98f9fad2be80	2	t	f
3314	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 13:32:42.929+08	2019-02-25 13:32:42.929+08	666d6810-bfe4-47ca-93bd-fa60ced4252d	2	t	f
3315	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 13:32:42.934+08	2019-02-25 13:32:42.934+08	666d6810-bfe4-47ca-93bd-fa60ced4252d	2	t	f
3316	physicalvalue	荷载	Output	\N	\N	\N	4	200	-200	t		2019-02-25 13:32:42.939+08	2019-02-25 13:32:42.939+08	666d6810-bfe4-47ca-93bd-fa60ced4252d	2	t	f
3317	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 13:32:42.944+08	2019-02-25 13:32:42.944+08	666d6810-bfe4-47ca-93bd-fa60ced4252d	2	t	f
3318	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 13:43:02.019+08	2019-02-25 13:43:02.019+08	ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	2	t	f
3319	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 13:43:02.03+08	2019-02-25 13:43:02.03+08	ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	2	t	f
3320	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 13:43:02.166+08	2019-02-25 13:43:02.166+08	ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	2	t	f
3321	physicalvalue	荷载	Output	\N			4	300	-300	t		2019-02-25 13:43:02.172+08	2019-02-25 13:43:02.172+08	ba00fbe0-7fdf-49d0-81ec-84046c3c13d8	2	t	f
3322	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 13:43:02.781+08	2019-02-25 13:43:02.781+08	998641f1-bcc9-4b88-8155-68d0cdd22f67	2	t	f
3323	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 13:43:02.787+08	2019-02-25 13:43:02.787+08	998641f1-bcc9-4b88-8155-68d0cdd22f67	2	t	f
3324	physicalvalue	荷载	Output	\N	\N	\N	4	300	-300	t		2019-02-25 13:43:02.792+08	2019-02-25 13:43:02.792+08	998641f1-bcc9-4b88-8155-68d0cdd22f67	2	t	f
3325	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 13:43:02.797+08	2019-02-25 13:43:02.797+08	998641f1-bcc9-4b88-8155-68d0cdd22f67	2	t	f
3326	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:08:36.917+08	2019-02-25 14:08:36.917+08	c4126560-43a1-4c04-a7c2-182072c07e07	2	t	f
3327	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:08:36.924+08	2019-02-25 14:08:36.924+08	c4126560-43a1-4c04-a7c2-182072c07e07	2	t	f
3328	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:08:36.929+08	2019-02-25 14:08:36.929+08	c4126560-43a1-4c04-a7c2-182072c07e07	2	t	f
3329	physicalvalue	荷载	Output	\N			4	400	-400	t		2019-02-25 14:08:36.935+08	2019-02-25 14:08:36.935+08	c4126560-43a1-4c04-a7c2-182072c07e07	2	t	f
3330	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:08:36.947+08	2019-02-25 14:08:36.947+08	0cd9085e-abe2-4c04-9956-b0572ba81fa5	2	t	f
3331	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:08:36.952+08	2019-02-25 14:08:36.952+08	0cd9085e-abe2-4c04-9956-b0572ba81fa5	2	t	f
3300	physicalvalue	轴力	Output	\N			4			KN		2019-02-25 13:30:27.032+08	2020-04-14 10:26:53.812+08	0dc2011e-5962-4366-82dd-6a326e0ddbf6	2	t	f
3332	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:08:36.957+08	2019-02-25 14:08:36.957+08	0cd9085e-abe2-4c04-9956-b0572ba81fa5	2	t	f
3333	physicalvalue	荷载	Output	\N	\N	\N	4	400	-400	t		2019-02-25 14:08:36.961+08	2019-02-25 14:08:36.961+08	0cd9085e-abe2-4c04-9956-b0572ba81fa5	2	t	f
3334	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:10:58.956+08	2019-02-25 14:10:58.956+08	198c4f79-6642-4537-b774-bea491692a9e	2	t	f
3335	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:10:58.965+08	2019-02-25 14:10:58.965+08	198c4f79-6642-4537-b774-bea491692a9e	2	t	f
3336	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:10:58.972+08	2019-02-25 14:10:58.972+08	198c4f79-6642-4537-b774-bea491692a9e	2	t	f
3337	physicalvalue	轴力	Output	\N	\N	\N	4	1000	-1000	KN		2019-02-25 14:10:58.978+08	2019-02-25 14:10:58.978+08	198c4f79-6642-4537-b774-bea491692a9e	2	t	f
3338	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:10:58.995+08	2019-02-25 14:10:58.995+08	2a6ffd97-9937-4a41-b19d-9e8a1932c22a	2	t	f
3339	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:10:59.001+08	2019-02-25 14:10:59.001+08	2a6ffd97-9937-4a41-b19d-9e8a1932c22a	2	t	f
3340	physicalvalue	轴力	Output	\N			4	1000	-1000	kN		2019-02-25 14:10:59.007+08	2019-02-25 14:10:59.007+08	2a6ffd97-9937-4a41-b19d-9e8a1932c22a	2	t	f
3341	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:10:59.012+08	2019-02-25 14:10:59.012+08	2a6ffd97-9937-4a41-b19d-9e8a1932c22a	2	t	f
3342	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:12:02.955+08	2019-02-25 14:12:02.955+08	12671ad8-5da9-4695-abc5-8dc116c5f034	2	t	f
3343	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:12:02.962+08	2019-02-25 14:12:02.962+08	12671ad8-5da9-4695-abc5-8dc116c5f034	2	t	f
3344	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:12:02.968+08	2019-02-25 14:12:02.968+08	12671ad8-5da9-4695-abc5-8dc116c5f034	2	t	f
3345	physicalvalue	轴力	Output	\N	\N	\N	4	2000	-2000	KN		2019-02-25 14:12:02.973+08	2019-02-25 14:12:02.973+08	12671ad8-5da9-4695-abc5-8dc116c5f034	2	t	f
3346	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:12:02.987+08	2019-02-25 14:12:02.987+08	f076544b-acde-440a-a44f-ff4468e3cdac	2	t	f
3347	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 14:12:02.992+08	2019-02-25 14:12:02.992+08	f076544b-acde-440a-a44f-ff4468e3cdac	2	t	f
3348	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 14:12:02.997+08	2019-02-25 14:12:02.997+08	f076544b-acde-440a-a44f-ff4468e3cdac	2	t	f
3349	physicalvalue	轴力	Output	\N			4	2000	-2000	kN		2019-02-25 14:12:03.003+08	2019-02-25 14:12:03.003+08	f076544b-acde-440a-a44f-ff4468e3cdac	2	t	f
3350	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:14:48.842+08	2019-02-25 14:14:48.842+08	cdf26baa-f8c9-435a-ace0-c2eff041d8c2	2	t	f
3351	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:14:48.853+08	2019-02-25 14:14:48.853+08	cdf26baa-f8c9-435a-ace0-c2eff041d8c2	2	t	f
3352	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:14:48.866+08	2019-02-25 14:14:48.866+08	cdf26baa-f8c9-435a-ace0-c2eff041d8c2	2	t	f
3353	physicalvalue	幅值	Output	\N	\N	\N	4	3000	-3000	KN		2019-02-25 14:14:48.872+08	2019-02-25 14:14:48.872+08	cdf26baa-f8c9-435a-ace0-c2eff041d8c2	2	t	f
3354	physicalvalue	轴力	Output	\N			4	3000	-3000	kN		2019-02-25 14:14:48.888+08	2019-02-25 14:14:48.888+08	db70825c-6666-4931-b32b-5f372af95d42	2	t	f
3355	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:14:48.893+08	2019-02-25 14:14:48.893+08	db70825c-6666-4931-b32b-5f372af95d42	2	t	f
3356	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:14:48.9+08	2019-02-25 14:14:48.9+08	db70825c-6666-4931-b32b-5f372af95d42	2	t	f
3357	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:14:48.905+08	2019-02-25 14:14:48.905+08	db70825c-6666-4931-b32b-5f372af95d42	2	t	f
3358	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:16:02.468+08	2019-02-25 14:16:02.468+08	2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	2	t	f
3359	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:16:02.472+08	2019-02-25 14:16:02.472+08	2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	2	t	f
3360	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:16:02.476+08	2019-02-25 14:16:02.476+08	2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	2	t	f
3361	physicalvalue	轴力	Output	\N	\N	\N	4	4000	-4000	KN		2019-02-25 14:16:02.479+08	2019-02-25 14:16:02.479+08	2aa6ca91-f1d3-4716-adb1-f6248d68f0fd	2	t	f
3362	physicalvalue	轴力	Output	\N			4	4000	-4000	kN		2019-02-25 14:16:02.488+08	2019-02-25 14:16:02.488+08	8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	2	t	f
3363	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 14:16:02.493+08	2019-02-25 14:16:02.493+08	8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	2	t	f
3364	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 14:16:02.496+08	2019-02-25 14:16:02.496+08	8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	2	t	f
3365	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:16:02.499+08	2019-02-25 14:16:02.499+08	8c1c7ab8-d39f-4bdd-9a2c-d2d7342fce43	2	t	f
3366	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:17:43.264+08	2019-02-25 14:17:43.264+08	af8ad166-474f-43bd-83c2-9f6082f78eae	2	t	f
3367	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:17:43.271+08	2019-02-25 14:17:43.271+08	af8ad166-474f-43bd-83c2-9f6082f78eae	2	t	f
3368	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:17:43.276+08	2019-02-25 14:17:43.276+08	af8ad166-474f-43bd-83c2-9f6082f78eae	2	t	f
3369	physicalvalue	荷载力	Output	\N			3	75	-75	KN	正值是张拉力，负值是承压力	2019-02-25 14:17:43.28+08	2019-02-25 14:17:43.28+08	af8ad166-474f-43bd-83c2-9f6082f78eae	2	t	f
3370	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:17:43.292+08	2019-02-25 14:17:43.292+08	e96dc802-721b-4cf2-acc4-f3fb360feaef	2	t	f
3371	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:17:43.298+08	2019-02-25 14:17:43.298+08	e96dc802-721b-4cf2-acc4-f3fb360feaef	2	t	f
3372	physicalvalue	荷载力	Output	\N			4	75	-75	kN	正值是张拉力，负值是承压力	2019-02-25 14:17:43.302+08	2019-02-25 14:17:43.302+08	e96dc802-721b-4cf2-acc4-f3fb360feaef	2	t	f
3373	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:17:43.306+08	2019-02-25 14:17:43.306+08	e96dc802-721b-4cf2-acc4-f3fb360feaef	2	t	f
3374	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:18:58.109+08	2019-02-25 14:18:58.109+08	f98a9365-9230-47fd-82a1-9ba1f6908c8d	2	t	f
3375	physicalvalue	荷载力	Output	\N			3	105	-105	KN	正值是张拉力，负值是承压力	2019-02-25 14:18:58.116+08	2019-02-25 14:18:58.116+08	f98a9365-9230-47fd-82a1-9ba1f6908c8d	2	t	f
3376	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:18:58.123+08	2019-02-25 14:18:58.123+08	f98a9365-9230-47fd-82a1-9ba1f6908c8d	2	t	f
3377	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:18:58.127+08	2019-02-25 14:18:58.127+08	f98a9365-9230-47fd-82a1-9ba1f6908c8d	2	t	f
3378	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 14:18:58.138+08	2019-02-25 14:18:58.138+08	7cad6a7a-e258-4ed6-aa59-e6b8095beaae	2	t	f
3379	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 14:18:58.142+08	2019-02-25 14:18:58.142+08	7cad6a7a-e258-4ed6-aa59-e6b8095beaae	2	t	f
3380	physicalvalue	荷载力	Output	\N			4	105	-105	kN	正值是张拉力，负值是承压力	2019-02-25 14:18:58.146+08	2019-02-25 14:18:58.146+08	7cad6a7a-e258-4ed6-aa59-e6b8095beaae	2	t	f
3381	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:18:58.149+08	2019-02-25 14:18:58.149+08	7cad6a7a-e258-4ed6-aa59-e6b8095beaae	2	t	f
3382	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:20:41.329+08	2019-02-25 14:20:41.329+08	0119f42c-7e17-4f77-81ed-3e55f31b8e61	2	t	f
3383	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 14:20:41.338+08	2019-02-25 14:20:41.338+08	0119f42c-7e17-4f77-81ed-3e55f31b8e61	2	t	f
3384	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:20:41.346+08	2019-02-25 14:20:41.346+08	0119f42c-7e17-4f77-81ed-3e55f31b8e61	2	t	f
3385	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2019-02-25 14:20:41.351+08	2019-02-25 14:20:41.351+08	0119f42c-7e17-4f77-81ed-3e55f31b8e61	2	t	f
3386	physicalvalue	应变	Output	\N			4	1500	-1500	με		2019-02-25 14:20:41.366+08	2019-02-25 14:20:41.366+08	5b7ef632-3a0a-470c-848a-488e63e67023	2	t	f
3387	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 14:20:41.371+08	2019-02-25 14:20:41.371+08	5b7ef632-3a0a-470c-848a-488e63e67023	2	t	f
3388	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 14:20:41.376+08	2019-02-25 14:20:41.376+08	5b7ef632-3a0a-470c-848a-488e63e67023	2	t	f
3389	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:20:41.381+08	2019-02-25 14:20:41.381+08	5b7ef632-3a0a-470c-848a-488e63e67023	2	t	f
3390	physicalvalue	应力	Output	\N			4	1500	-1500	με		2019-02-25 14:20:41.398+08	2019-02-25 14:20:41.398+08	b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	2	t	f
3391	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:20:41.402+08	2019-02-25 14:20:41.402+08	b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	2	t	f
3392	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:20:41.407+08	2019-02-25 14:20:41.407+08	b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	2	t	f
3393	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:20:41.411+08	2019-02-25 14:20:41.411+08	b16d284f-8c22-4ef0-b6d1-1f0b10ead5fb	2	t	f
3394	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 14:21:56.994+08	2019-02-25 14:21:56.994+08	bbd01f40-d430-4d85-95ec-e91a22fab396	2	t	f
3395	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 14:21:57.001+08	2019-02-25 14:21:57.001+08	bbd01f40-d430-4d85-95ec-e91a22fab396	2	t	f
3396	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:21:57.005+08	2019-02-25 14:21:57.005+08	bbd01f40-d430-4d85-95ec-e91a22fab396	2	t	f
3397	physicalvalue	应变	Output	\N			3	3000	-3000	με		2019-02-25 14:21:57.01+08	2019-02-25 14:21:57.01+08	bbd01f40-d430-4d85-95ec-e91a22fab396	2	t	f
3398	physicalvalue	微应变	Output	\N	\N	\N	3	3000	-3000	με		2019-02-25 14:21:57.023+08	2019-02-25 14:21:57.023+08	80209593-8753-4642-bc14-5537e3223d75	2	t	f
3399	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-02-25 14:21:57.029+08	2019-02-25 14:21:57.029+08	80209593-8753-4642-bc14-5537e3223d75	2	t	f
3400	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2019-02-25 14:21:57.034+08	2019-02-25 14:21:57.034+08	80209593-8753-4642-bc14-5537e3223d75	2	t	f
3401	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-02-25 14:21:57.038+08	2019-02-25 14:21:57.038+08	80209593-8753-4642-bc14-5537e3223d75	2	t	f
3402	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 14:21:57.05+08	2019-02-25 14:21:57.05+08	7169451f-4110-4ba2-8482-b6e4a51eb459	2	t	f
3403	physicalvalue	应变	Output	\N			4	3000	-3000	με		2019-02-25 14:21:57.057+08	2019-02-25 14:21:57.057+08	7169451f-4110-4ba2-8482-b6e4a51eb459	2	t	f
3404	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 14:21:57.06+08	2019-02-25 14:21:57.06+08	7169451f-4110-4ba2-8482-b6e4a51eb459	2	t	f
3405	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 14:21:57.063+08	2019-02-25 14:21:57.063+08	7169451f-4110-4ba2-8482-b6e4a51eb459	2	t	f
3406	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-02-25 14:24:04.256+08	2019-02-25 14:24:04.256+08	e2096ac1-6a10-4df5-9393-173d19fbbee0	2	t	f
3407	physicalvalue	微应变	Output	\N	\N	\N	4	5000	-5000	με		2019-02-25 14:24:04.263+08	2019-02-25 14:24:04.263+08	e2096ac1-6a10-4df5-9393-173d19fbbee0	2	t	f
3408	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2019-02-25 14:24:04.268+08	2019-02-25 14:24:04.268+08	e2096ac1-6a10-4df5-9393-173d19fbbee0	2	t	f
3409	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-02-25 14:24:04.272+08	2019-02-25 14:24:04.272+08	e2096ac1-6a10-4df5-9393-173d19fbbee0	2	t	f
3410	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-02-25 14:24:04.282+08	2019-02-25 14:24:04.282+08	8b567669-1458-4b89-8448-257ca3ecb15c	2	t	f
3411	am	幅值	Output	\N	\N	\N	5	\N	\N	mV		2019-02-25 14:24:04.286+08	2019-02-25 14:24:04.286+08	8b567669-1458-4b89-8448-257ca3ecb15c	2	t	f
3412	temperature	温度	Output	\N			3	\N	\N	℃		2019-02-25 14:24:04.291+08	2019-02-25 14:24:04.291+08	8b567669-1458-4b89-8448-257ca3ecb15c	2	t	f
3413	physicalvalue	微应变	Output	\N			4	5000	-5000	με		2019-02-25 14:24:04.297+08	2019-02-25 14:24:04.297+08	8b567669-1458-4b89-8448-257ca3ecb15c	2	t	f
3415	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 14:24:04.313+08	2019-02-25 14:24:04.313+08	63df0f39-75da-443e-a275-59ebd94aa3ea	2	t	f
3416	physicalvalue	微应变	Output	\N			4	5000	-5000	με		2019-02-25 14:24:04.317+08	2019-02-25 14:24:04.317+08	63df0f39-75da-443e-a275-59ebd94aa3ea	2	t	f
3417	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 14:24:04.321+08	2019-02-25 14:24:04.321+08	63df0f39-75da-443e-a275-59ebd94aa3ea	2	t	f
3430	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:39:43.193+08	2019-02-25 15:39:43.193+08	c7bcd7ca-9e17-41e1-b3e4-39641d53a443	2	t	f
3431	physicalvalue	应力	Output	\N			4	0.4	0	MPa		2019-02-25 15:39:43.2+08	2019-02-25 15:39:43.2+08	c7bcd7ca-9e17-41e1-b3e4-39641d53a443	2	t	f
3432	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:39:43.205+08	2019-02-25 15:39:43.205+08	c7bcd7ca-9e17-41e1-b3e4-39641d53a443	2	t	f
3433	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:39:43.21+08	2019-02-25 15:39:43.21+08	c7bcd7ca-9e17-41e1-b3e4-39641d53a443	2	t	f
3434	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-02-25 15:39:43.222+08	2019-02-25 15:39:43.222+08	70454576-c9f8-4b8b-82a5-2ba414369cf1	2	t	f
3435	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:39:43.227+08	2019-02-25 15:39:43.227+08	70454576-c9f8-4b8b-82a5-2ba414369cf1	2	t	f
3436	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:39:43.231+08	2019-02-25 15:39:43.231+08	70454576-c9f8-4b8b-82a5-2ba414369cf1	2	t	f
3437	physicalvalue	应力	Output	\N	\N	\N	4	0.4	0	MPa		2019-02-25 15:39:43.236+08	2019-02-25 15:39:43.236+08	70454576-c9f8-4b8b-82a5-2ba414369cf1	2	t	f
3438	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 15:39:43.247+08	2019-02-25 15:39:43.247+08	fc002308-8f49-4bde-a539-028bc4a00d6d	2	t	f
3439	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:39:43.251+08	2019-02-25 15:39:43.251+08	fc002308-8f49-4bde-a539-028bc4a00d6d	2	t	f
3440	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:39:43.255+08	2019-02-25 15:39:43.255+08	fc002308-8f49-4bde-a539-028bc4a00d6d	2	t	f
3441	physicalvalue	应力	Output	\N			4	0.4	0	MPa		2019-02-25 15:39:43.259+08	2019-02-25 15:39:43.259+08	fc002308-8f49-4bde-a539-028bc4a00d6d	2	t	f
3442	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:41:07.264+08	2019-02-25 15:41:07.264+08	ba9214a7-0d02-453f-ae49-912a45fd027f	2	t	f
3443	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:41:07.275+08	2019-02-25 15:41:07.275+08	ba9214a7-0d02-453f-ae49-912a45fd027f	2	t	f
3444	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:41:07.282+08	2019-02-25 15:41:07.282+08	ba9214a7-0d02-453f-ae49-912a45fd027f	2	t	f
3445	physicalvalue	应变	Output	\N	\N	\N	4	5000	-5000	με		2019-02-25 15:41:07.288+08	2019-02-25 15:41:07.288+08	ba9214a7-0d02-453f-ae49-912a45fd027f	2	t	f
3446	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:41:07.311+08	2019-02-25 15:41:07.311+08	bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	2	t	f
3447	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:41:07.318+08	2019-02-25 15:41:07.318+08	bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	2	t	f
3448	physicalvalue	应变	Output	\N			4	5000	-5000	με		2019-02-25 15:41:07.325+08	2019-02-25 15:41:07.325+08	bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	2	t	f
3449	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:41:07.331+08	2019-02-25 15:41:07.331+08	bdcdab4d-62d5-48d2-9a07-cd61a9cc108a	2	t	f
3450	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:41:07.344+08	2019-02-25 15:41:07.344+08	89297513-df93-40a4-bfb4-cc2393d5128a	2	t	f
3451	physicalvalue	应变	Output	\N			4	5000	-5000	με		2019-02-25 15:41:07.35+08	2019-02-25 15:41:07.35+08	89297513-df93-40a4-bfb4-cc2393d5128a	2	t	f
3452	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:41:07.355+08	2019-02-25 15:41:07.355+08	89297513-df93-40a4-bfb4-cc2393d5128a	2	t	f
3453	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:41:07.36+08	2019-02-25 15:41:07.36+08	89297513-df93-40a4-bfb4-cc2393d5128a	2	t	f
3454	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:41:59.734+08	2019-02-25 15:41:59.734+08	45284d89-2621-47e3-b5ee-e03229611e89	2	t	f
3455	physicalvalue	应力	Output	\N			4	0.8	0	MPa		2019-02-25 15:41:59.742+08	2019-02-25 15:41:59.742+08	45284d89-2621-47e3-b5ee-e03229611e89	2	t	f
3456	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:41:59.749+08	2019-02-25 15:41:59.749+08	45284d89-2621-47e3-b5ee-e03229611e89	2	t	f
3457	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:41:59.756+08	2019-02-25 15:41:59.756+08	45284d89-2621-47e3-b5ee-e03229611e89	2	t	f
3458	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:41:59.779+08	2019-02-25 15:41:59.779+08	aa350be5-e923-4961-b523-fd25c5e8445f	2	t	f
3459	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:41:59.784+08	2019-02-25 15:41:59.784+08	aa350be5-e923-4961-b523-fd25c5e8445f	2	t	f
3460	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:41:59.79+08	2019-02-25 15:41:59.79+08	aa350be5-e923-4961-b523-fd25c5e8445f	2	t	f
3461	physicalvalue	应力	Output	\N	\N	\N	4	0.8	0	MPa		2019-02-25 15:41:59.796+08	2019-02-25 15:41:59.796+08	aa350be5-e923-4961-b523-fd25c5e8445f	2	t	f
3462	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 15:41:59.812+08	2019-02-25 15:41:59.812+08	cdc89f99-96ab-4176-a290-0cd507439722	2	t	f
3463	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:41:59.818+08	2019-02-25 15:41:59.818+08	cdc89f99-96ab-4176-a290-0cd507439722	2	t	f
3464	physicalvalue	应力	Output	\N	\N	\N	4	0.8	0	MPa		2019-02-25 15:41:59.826+08	2019-02-25 15:41:59.826+08	cdc89f99-96ab-4176-a290-0cd507439722	2	t	f
3465	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:41:59.832+08	2019-02-25 15:41:59.832+08	cdc89f99-96ab-4176-a290-0cd507439722	2	t	f
3466	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:43:06.986+08	2019-02-25 15:43:06.986+08	2fc50d79-7cc8-477d-ad02-7c457e527084	2	t	f
3467	physicalvalue	应力	Output	\N			4	1	0	MPa		2019-02-25 15:43:06.991+08	2019-02-25 15:43:06.991+08	2fc50d79-7cc8-477d-ad02-7c457e527084	2	t	f
3468	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:43:06.999+08	2019-02-25 15:43:06.999+08	2fc50d79-7cc8-477d-ad02-7c457e527084	2	t	f
3469	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:43:07.003+08	2019-02-25 15:43:07.003+08	2fc50d79-7cc8-477d-ad02-7c457e527084	2	t	f
3470	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:43:07.014+08	2019-02-25 15:43:07.014+08	fe7497bd-7016-4a8c-abf8-23ec8981746c	2	t	f
3471	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:43:07.018+08	2019-02-25 15:43:07.018+08	fe7497bd-7016-4a8c-abf8-23ec8981746c	2	t	f
3472	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:43:07.022+08	2019-02-25 15:43:07.022+08	fe7497bd-7016-4a8c-abf8-23ec8981746c	2	t	f
3473	physicalvalue	应力	Output	\N	\N	\N	4	1	0	MPa		2019-02-25 15:43:07.025+08	2019-02-25 15:43:07.025+08	fe7497bd-7016-4a8c-abf8-23ec8981746c	2	t	f
3474	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:43:07.035+08	2019-02-25 15:43:07.035+08	b62a52ce-bcd3-4156-89d7-83ab453c3121	2	t	f
3475	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:43:07.038+08	2019-02-25 15:43:07.038+08	b62a52ce-bcd3-4156-89d7-83ab453c3121	2	t	f
3477	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:43:07.046+08	2019-02-25 15:43:07.046+08	b62a52ce-bcd3-4156-89d7-83ab453c3121	2	t	f
3478	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:44:37.108+08	2019-02-25 15:44:37.108+08	6db67d93-daa9-4ef0-840f-c89dfc62abdc	2	t	f
3479	physicalvalue	应力	Output	\N			4	2	0	MPa		2019-02-25 15:44:37.116+08	2019-02-25 15:44:37.116+08	6db67d93-daa9-4ef0-840f-c89dfc62abdc	2	t	f
3480	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:44:37.121+08	2019-02-25 15:44:37.121+08	6db67d93-daa9-4ef0-840f-c89dfc62abdc	2	t	f
3481	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:44:37.126+08	2019-02-25 15:44:37.126+08	6db67d93-daa9-4ef0-840f-c89dfc62abdc	2	t	f
3482	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:44:37.142+08	2019-02-25 15:44:37.142+08	aab98040-a906-4f79-a6df-74df5b9849bc	2	t	f
3483	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:44:37.148+08	2019-02-25 15:44:37.148+08	aab98040-a906-4f79-a6df-74df5b9849bc	2	t	f
3484	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:44:37.153+08	2019-02-25 15:44:37.153+08	aab98040-a906-4f79-a6df-74df5b9849bc	2	t	f
3485	physicalvalue	应力	Output	\N	\N	\N	4	2	0	MPa		2019-02-25 15:44:37.158+08	2019-02-25 15:44:37.158+08	aab98040-a906-4f79-a6df-74df5b9849bc	2	t	f
3486	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:44:37.175+08	2019-02-25 15:44:37.175+08	0518af3d-a054-45a0-815a-8ed6c3833d46	2	t	f
3487	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 15:44:37.182+08	2019-02-25 15:44:37.182+08	0518af3d-a054-45a0-815a-8ed6c3833d46	2	t	f
3488	physicalvalue	应力	Output	\N	\N	\N	4	2	0	MPa		2019-02-25 15:44:37.19+08	2019-02-25 15:44:37.19+08	0518af3d-a054-45a0-815a-8ed6c3833d46	2	t	f
3489	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:44:37.198+08	2019-02-25 15:44:37.198+08	0518af3d-a054-45a0-815a-8ed6c3833d46	2	t	f
3490	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 15:46:09.579+08	2019-02-25 15:46:09.579+08	99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	2	t	f
3491	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 15:46:09.586+08	2019-02-25 15:46:09.586+08	99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	2	t	f
3492	physicalvalue	应变	Output	\N			4	1500	-1500	με		2019-02-25 15:46:09.592+08	2019-02-25 15:46:09.592+08	99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	2	t	f
3493	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:09.597+08	2019-02-25 15:46:09.597+08	99d5cbb6-441e-4909-8ab1-f5fd36fb9f42	2	t	f
3494	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:09.612+08	2019-02-25 15:46:09.612+08	f832c684-9c7c-484e-b547-a4b717644f8a	2	t	f
3495	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 15:46:09.618+08	2019-02-25 15:46:09.618+08	f832c684-9c7c-484e-b547-a4b717644f8a	2	t	f
3496	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:46:09.627+08	2019-02-25 15:46:09.627+08	f832c684-9c7c-484e-b547-a4b717644f8a	2	t	f
3497	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2019-02-25 15:46:09.633+08	2019-02-25 15:46:09.633+08	f832c684-9c7c-484e-b547-a4b717644f8a	2	t	f
3498	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:46:09.648+08	2019-02-25 15:46:09.648+08	fbaf320c-de3d-4cdb-93f1-960973d87747	2	t	f
3499	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:46:09.653+08	2019-02-25 15:46:09.653+08	fbaf320c-de3d-4cdb-93f1-960973d87747	2	t	f
3500	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:09.659+08	2019-02-25 15:46:09.659+08	fbaf320c-de3d-4cdb-93f1-960973d87747	2	t	f
3501	physicalvalue	应变	Output	\N			4	1500	-1500	με		2019-02-25 15:46:09.664+08	2019-02-25 15:46:09.664+08	fbaf320c-de3d-4cdb-93f1-960973d87747	2	t	f
3502	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:53.778+08	2019-02-25 15:46:53.778+08	d87ea357-e29f-4926-8589-a3e8d7f38ca2	2	t	f
3503	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:46:53.783+08	2019-02-25 15:46:53.783+08	d87ea357-e29f-4926-8589-a3e8d7f38ca2	2	t	f
3504	physicalvalue	应力	Output	\N			4	0.2	0	MPa		2019-02-25 15:46:53.787+08	2019-02-25 15:46:53.787+08	d87ea357-e29f-4926-8589-a3e8d7f38ca2	2	t	f
3505	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:46:53.79+08	2019-02-25 15:46:53.79+08	d87ea357-e29f-4926-8589-a3e8d7f38ca2	2	t	f
3506	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:53.8+08	2019-02-25 15:46:53.8+08	8b2b42d5-d6c3-4b76-ba91-d422163d96b6	2	t	f
3507	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:46:53.804+08	2019-02-25 15:46:53.804+08	8b2b42d5-d6c3-4b76-ba91-d422163d96b6	2	t	f
3508	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:46:53.807+08	2019-02-25 15:46:53.807+08	8b2b42d5-d6c3-4b76-ba91-d422163d96b6	2	t	f
3509	physicalvalue	应力	Output	\N			4	0.2	0	MPa		2019-02-25 15:46:53.81+08	2019-02-25 15:46:53.81+08	8b2b42d5-d6c3-4b76-ba91-d422163d96b6	2	t	f
3510	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:46:53.831+08	2019-02-25 15:46:53.831+08	88b4c158-2959-46c0-950e-aa1f77962dbc	2	t	f
3511	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-02-25 15:46:53.837+08	2019-02-25 15:46:53.837+08	88b4c158-2959-46c0-950e-aa1f77962dbc	2	t	f
3512	physicalvalue	应力	Output	\N	\N	\N	4	0.2	0	MPa		2019-02-25 15:46:53.84+08	2019-02-25 15:46:53.84+08	88b4c158-2959-46c0-950e-aa1f77962dbc	2	t	f
3513	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:46:53.843+08	2019-02-25 15:46:53.843+08	88b4c158-2959-46c0-950e-aa1f77962dbc	2	t	f
3514	am	幅值	Output	\N			3	\N	\N	mv		2019-02-25 15:47:53.722+08	2019-02-25 15:47:53.722+08	87e561ee-2bde-476f-9d3c-193c5be9f692	2	t	f
3515	physicalvalue	荷载力	Output	\N			4	160	-160	kN	正值是张拉力，负值是承压力	2019-02-25 15:47:53.729+08	2019-02-25 15:47:53.729+08	87e561ee-2bde-476f-9d3c-193c5be9f692	2	t	f
3516	frequency	频率	Output	\N			3	\N	\N	Hz		2019-02-25 15:47:53.734+08	2019-02-25 15:47:53.734+08	87e561ee-2bde-476f-9d3c-193c5be9f692	2	t	f
3517	temperature	温度	Output	\N			2	\N	\N	℃		2019-02-25 15:47:53.74+08	2019-02-25 15:47:53.74+08	87e561ee-2bde-476f-9d3c-193c5be9f692	2	t	f
3518	physicalvalue	荷载力	Output	\N	\N	\N	4	160	-160	KN		2019-02-25 15:47:53.753+08	2019-02-25 15:47:53.753+08	f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	2	t	f
3519	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:47:53.757+08	2019-02-25 15:47:53.757+08	f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	2	t	f
3520	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:47:53.762+08	2019-02-25 15:47:53.762+08	f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	2	t	f
3521	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:47:53.766+08	2019-02-25 15:47:53.766+08	f4d6d7aa-f0b7-4b93-b291-5fb8305a4318	2	t	f
3522	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:51:46.88+08	2019-02-25 15:51:46.88+08	1c56bfde-5866-450a-9682-65dd34bc3296	2	t	f
3523	temperature	温度	Output	\N			\N	\N	\N	℃		2019-02-25 15:51:46.887+08	2019-02-25 15:51:46.887+08	1c56bfde-5866-450a-9682-65dd34bc3296	2	t	f
3524	physicalvalue	荷载力	Output	\N			4	136	-136	kN	正值是张拉力，负值是承压力	2019-02-25 15:51:46.893+08	2019-02-25 15:51:46.893+08	1c56bfde-5866-450a-9682-65dd34bc3296	2	t	f
3525	frequency	频率	Output	\N	\N	\N	\N	\N	\N	Hz		2019-02-25 15:51:46.9+08	2019-02-25 15:51:46.9+08	1c56bfde-5866-450a-9682-65dd34bc3296	2	t	f
3526	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-25 15:51:46.913+08	2019-02-25 15:51:46.913+08	7533c2be-930a-4296-bdea-f4093aabfeb1	2	t	f
3527	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-02-25 15:51:46.918+08	2019-02-25 15:51:46.918+08	7533c2be-930a-4296-bdea-f4093aabfeb1	2	t	f
3528	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-02-25 15:51:46.923+08	2019-02-25 15:51:46.923+08	7533c2be-930a-4296-bdea-f4093aabfeb1	2	t	f
3529	physicalvalue	荷载力	Output	\N			4	136	-136	KN	正值是张拉力，负值是承压力	2019-02-25 15:51:46.928+08	2019-02-25 15:51:46.928+08	7533c2be-930a-4296-bdea-f4093aabfeb1	2	t	f
3534	physicalvalue	速度	Output	\N	\N	\N	\N	\N	\N	mm/s		2019-02-25 16:03:31.505+08	2019-02-25 16:03:31.505+08	9a7d0b50-af38-4c47-b314-4dbca09f5ad2	5	t	f
3535	k	转换系数	Variable	\N		1	16	9999999	-9999999	\N		2019-02-25 16:03:31.514+08	2019-02-25 16:03:31.514+08	9a7d0b50-af38-4c47-b314-4dbca09f5ad2	2	t	f
3536	jsonfileexts	\N	Constant	\N	\N	 .a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-02-25 16:10:34.024+08	2019-02-25 16:10:34.024+08	e78b12fc-fda1-4ce1-81a7-9e63695906ec	5	t	f
3537	angley	Y轴角度	Output	\N			2	30	-30	°		2019-02-25 17:37:04.25+08	2019-02-25 17:37:04.25+08	ba31efb5-9309-493e-a3b6-e161c92e9dfa	2	t	f
3538	temperature	温度	Output	\N			2	70	-25	℃		2019-02-25 17:37:04.258+08	2019-02-25 17:37:04.258+08	ba31efb5-9309-493e-a3b6-e161c92e9dfa	2	t	f
3539	anglex	X轴角度	Output	\N			2	30	-30	°		2019-02-25 17:37:04.265+08	2019-02-25 17:37:04.265+08	ba31efb5-9309-493e-a3b6-e161c92e9dfa	2	t	f
3540	temperature	温度	Output	\N			2	70	-25	℃		2019-02-25 17:37:04.28+08	2019-02-25 17:37:04.28+08	87fb5477-8056-44e6-b0a0-5cb1e55703d8	2	t	f
3541	angley	Y方向角度	Output	\N			4	30	-30	°		2019-02-25 17:37:04.285+08	2019-02-25 17:37:04.285+08	87fb5477-8056-44e6-b0a0-5cb1e55703d8	2	t	f
3542	anglex	X方向角度	Output	\N			4	30	-30	°		2019-02-25 17:37:04.291+08	2019-02-25 17:37:04.291+08	87fb5477-8056-44e6-b0a0-5cb1e55703d8	2	t	f
3543	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2019-02-25 17:37:04.306+08	2019-02-25 17:37:04.306+08	0593d534-af19-4662-bf37-b3393cd7d706	2	t	f
3544	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2019-02-25 17:37:04.311+08	2019-02-25 17:37:04.311+08	0593d534-af19-4662-bf37-b3393cd7d706	2	t	f
3545	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-02-25 17:37:04.316+08	2019-02-25 17:37:04.316+08	0593d534-af19-4662-bf37-b3393cd7d706	2	t	f
3546	temperature	温度	Output	\N			2	70	-25	℃		2019-02-25 17:37:04.328+08	2019-02-25 17:37:04.328+08	7fe724a3-9e75-4cdf-94e3-bdd7451ff05c	2	t	f
3547	angley	Y方向角度	Output	\N			4	30	-30	°		2019-02-25 17:37:04.334+08	2019-02-25 17:37:04.334+08	7fe724a3-9e75-4cdf-94e3-bdd7451ff05c	2	t	f
3548	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-02-25 17:37:04.338+08	2019-02-25 17:37:04.338+08	7fe724a3-9e75-4cdf-94e3-bdd7451ff05c	2	t	f
3549	temperature	温度	Output	\N			2	70	-25	℃		2019-02-25 17:37:56.409+08	2019-02-25 17:37:56.409+08	6ed5b377-588a-4ba0-bbd8-f528726aa520	2	t	f
3550	anglex	X轴角度	Output	\N			2	30	-30	°		2019-02-25 17:37:56.417+08	2019-02-25 17:37:56.417+08	6ed5b377-588a-4ba0-bbd8-f528726aa520	2	t	f
3551	angley	Y轴角度	Output	\N			2	30	-30	°		2019-02-25 17:37:56.424+08	2019-02-25 17:37:56.424+08	6ed5b377-588a-4ba0-bbd8-f528726aa520	2	t	f
3552	temperature	温度	Output	\N			3	120	-30	℃		2019-02-25 17:37:56.44+08	2019-02-25 17:37:56.44+08	fdd035c2-82b6-4d53-b138-ddb5ff38be70	2	t	f
3553	anglex	X方向角度	Output	\N			4	30	-30	°		2019-02-25 17:37:56.446+08	2019-02-25 17:37:56.446+08	fdd035c2-82b6-4d53-b138-ddb5ff38be70	2	t	f
3554	angley	Y方向角度	Output	\N			4	30	-30	°		2019-02-25 17:37:56.451+08	2019-02-25 17:37:56.451+08	fdd035c2-82b6-4d53-b138-ddb5ff38be70	2	t	f
3555	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2019-02-25 17:37:56.467+08	2019-02-25 17:37:56.467+08	3b999acc-dc02-4c57-ba1b-2bdd8d971f72	2	t	f
3556	temperature	温度	Output	\N	\N	\N	\N	70	-25	℃		2019-02-25 17:37:56.474+08	2019-02-25 17:37:56.474+08	3b999acc-dc02-4c57-ba1b-2bdd8d971f72	2	t	f
3557	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-02-25 17:37:56.479+08	2019-02-25 17:37:56.479+08	3b999acc-dc02-4c57-ba1b-2bdd8d971f72	2	t	f
3558	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-26 16:29:15.928+08	2019-02-26 16:29:15.928+08	c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1	2	t	f
3559	temperature	温度	Output	\N			3	90	-30	℃		2019-02-26 16:29:15.935+08	2019-02-26 16:29:15.935+08	c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1	2	t	f
3561	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-26 16:30:15.684+08	2019-02-26 16:30:15.684+08	6b2d0d75-954d-476d-a920-83a0439a898b	2	t	f
3562	temperature	温度	Output	\N			3	90	-30	℃		2019-02-26 16:30:15.695+08	2019-02-26 16:30:15.695+08	6b2d0d75-954d-476d-a920-83a0439a898b	2	t	f
3560	physicalvalue	压力	Output	\N			3	6.4	-6.4	MPa		2019-02-26 16:29:15.941+08	2019-02-26 16:36:43.669+08	c38c3226-0d4b-4f1e-ada0-0ba10c51d5e1	2	t	f
3563	physicalvalue	压力	Output	\N			3	6.4	-6.4	MPa		2019-02-26 16:30:15.701+08	2019-02-26 16:37:05.459+08	6b2d0d75-954d-476d-a920-83a0439a898b	2	t	f
3564	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-02-26 16:39:23.43+08	2019-02-26 16:39:23.43+08	a945f27e-4486-498d-aa7b-2226787e0a8c	2	t	f
3565	temperature	温度	Output	\N			3	60	-25	℃		2019-02-26 16:39:23.438+08	2019-02-26 16:39:23.438+08	a945f27e-4486-498d-aa7b-2226787e0a8c	2	t	f
3566	physicalvalue	位移	Output	\N			3			mm		2019-02-26 16:39:23.444+08	2019-02-26 16:46:12.173+08	a945f27e-4486-498d-aa7b-2226787e0a8c	2	t	f
3568	voltage	电压	Output	\N	\N	\N	2	\N	\N	V		2019-02-26 17:15:57.017+08	2019-02-26 17:15:57.017+08	cf9f22ff-a972-4050-b4be-93cd43ed5463	2	t	f
3567	physicalvalue	角度	Output	\N			3			°		2019-02-26 16:47:57.177+08	2019-02-26 17:16:17.318+08	cf9f22ff-a972-4050-b4be-93cd43ed5463	2	t	f
2373	noise	噪声	Output	\N			3	\N	\N	dB		2018-07-02 11:22:55.416+08	2019-02-28 09:54:52.561+08	23c218cd-7c9e-4ad1-bc78-2132a932fc9c	2	t	f
3569	pressure	压强	Output	\N			3	\N	\N	kPa		2019-03-01 14:44:43.682+08	2019-03-01 14:44:52.123+08	10e4ca9b-2ded-4704-af44-5ed38e7a8254	2	t	f
3570	temperature	温度	Output	\N	\N	\N	2	100	-100	℃		2019-03-04 14:55:26.616+08	2019-03-04 14:55:26.616+08	9081728a-4ac0-47d0-bc7d-508451fd55df	2	t	f
3571	voltage	电压	Output	\N	\N	\N	2	\N	\N	V		2019-03-05 11:00:12.999+08	2019-03-05 11:00:12.999+08	face6568-949b-4dcf-a799-fec9eafe6dd5	2	t	f
3572	voltage	电压	Output	\N	\N	\N	2	\N	\N	V		2019-03-05 13:25:49.938+08	2019-03-05 13:25:49.938+08	d28c3b83-f55a-4a81-8513-36abc92c3b7b	2	t	f
3573	physicalvalue	湿度	Output	\N	\N	\N	2	100	0	%RH		2019-03-05 13:26:28.558+08	2019-03-05 13:26:28.558+08	d28c3b83-f55a-4a81-8513-36abc92c3b7b	2	t	f
3574	voltage	电压	Output	\N	\N	\N	3	\N	\N	V		2019-03-05 13:34:14.943+08	2019-03-05 13:34:14.943+08	403c6c8b-f94a-43a2-bbf5-5146ac46c2c0	2	t	f
3575	physicalvalue	风速	Output	\N	\N	\N	2	100	0	m/s		2019-03-05 13:34:49.378+08	2019-03-05 13:34:49.378+08	403c6c8b-f94a-43a2-bbf5-5146ac46c2c0	2	t	f
3576	voltage	电压	Output	\N	\N	\N	3	\N	\N	V		2019-03-05 13:35:58.019+08	2019-03-05 13:35:58.019+08	bbfe7c35-6457-4e4f-87d0-fec36f73c28b	2	t	f
3577	physicalvalue	风向	Output	\N	\N	\N	2	360	0	°		2019-03-05 13:36:45.293+08	2019-03-05 13:36:45.293+08	bbfe7c35-6457-4e4f-87d0-fec36f73c28b	2	t	f
3113	physicalvalue	位移	Output	\N			3	10000	0	mm		2019-01-07 17:45:50.843+08	2019-03-07 14:01:42.31+08	98c8c785-f229-4409-b2a6-a1e57af72b26	2	t	f
3584	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-03-08 17:18:28.303+08	2019-03-08 17:18:28.303+08	1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064	2	t	f
3585	temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-03-08 17:18:53.681+08	2019-03-08 17:18:53.681+08	1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064	2	t	f
3621	temp	温度	Output	\N	\N	\N	\N	\N	\N	\N		2019-03-19 15:25:15.755+08	2019-03-19 15:25:15.755+08	43846e9c-36d2-4aad-a9ed-cc837fecec96	2	t	f
3623	Ang_X	X角度	Output	\N	\N	\N	\N	\N	\N			2019-03-19 15:25:15.779+08	2019-03-19 15:25:15.779+08	5c3255a3-17a0-4ff5-8704-351d606c322f	2	t	f
3625	Ang_Y	Y轴角度	Output	\N	\N	\N	\N	\N	\N			2019-03-19 15:25:15.789+08	2019-03-19 15:25:15.789+08	09b8a9bb-2979-488d-9ada-612e0e3c8104	2	t	f
3590	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2019-03-11 16:40:00.003+08	2019-03-11 16:40:00.003+08	9081728a-4ac0-47d0-bc7d-508451fd55df	2	t	f
3589	displacement	偏移	Output	\N			3	\N	\N	mm		2019-03-11 16:39:39.515+08	2019-03-11 16:40:37.194+08	9081728a-4ac0-47d0-bc7d-508451fd55df	2	t	f
3594	DI1	1号输入	Output	\N	\N	\N	\N	\N	\N	\N		2019-03-14 11:23:53.555+08	2019-03-14 11:23:53.555+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3595	DI2	2号输入	Output	\N	\N	\N	\N					2019-03-14 11:24:33.303+08	2019-03-14 11:24:33.303+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3596	DI3	3号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:24:51.062+08	2019-03-14 11:24:51.062+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3597	DI4	4号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:25:06.194+08	2019-03-14 11:25:06.194+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3598	DI5	5号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:25:25.26+08	2019-03-14 11:25:25.26+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3599	DI6	6号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:25:41.411+08	2019-03-14 11:25:41.411+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3600	DI7	7号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:25:56.216+08	2019-03-14 11:25:56.216+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3601	DI8	8号输入	Output	\N	\N	\N	\N	\N	\N			2019-03-14 11:26:12.481+08	2019-03-14 11:26:12.481+08	935629d5-3f9e-4001-8694-cd11f39b6061	1	t	f
3602	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-03-15 14:35:35.873+08	2019-03-15 14:35:35.873+08	d4af9993-5dc1-4f66-bc37-fd3ab9458c18	2	t	f
3603	physicalvalue	应变	Output	\N	\N	\N	3	\N	\N	με		2019-03-15 14:35:35.879+08	2019-03-15 14:35:35.879+08	d4af9993-5dc1-4f66-bc37-fd3ab9458c18	2	t	f
3627	length	液位	Output	\N	\N	\N	4	19999	-9999	mm		2019-03-20 15:26:27.81+08	2019-03-20 15:26:27.81+08	65be7317-93f4-4ae2-b211-e72d15a8cdb7	2	t	f
3604	physicalvalue	沉降	Output	\N			2	\N	\N	mm		2019-03-15 14:36:32.768+08	2019-03-15 14:41:26.24+08	2bf1019d-5976-4ecf-9970-773d334f184d	2	t	f
3605	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2019-03-15 16:36:54.593+08	2019-03-15 16:36:54.593+08	895b9731-8518-47fc-b126-37124415845f	2	t	f
3606	temperature	温度	Output	\N	\N	\N	2	120	-40	℃		2019-03-15 16:37:23.683+08	2019-03-15 16:37:23.683+08	895b9731-8518-47fc-b126-37124415845f	2	t	f
3607	temperature	温度	Output	\N			2	70	-25	℃		2019-03-15 16:40:54.151+08	2019-03-15 16:41:08.347+08	5a900cd1-fd3e-439c-b765-9829c9a61d32	2	t	f
3629	physicalvalue	应变	Output	\N	\N	\N	3	\N	\N	με		2019-03-25 11:29:00.587+08	2019-03-25 11:29:00.587+08	b131fb3f-83d4-4855-9b8c-419201f620ac	2	t	f
3608	anglex	X轴角度	Output	\N			2	30	-30	°		2019-03-15 16:41:49.19+08	2019-03-15 16:42:08.786+08	5a900cd1-fd3e-439c-b765-9829c9a61d32	2	t	f
3609	angley	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2019-03-15 16:42:33.741+08	2019-03-15 16:42:33.741+08	5a900cd1-fd3e-439c-b765-9829c9a61d32	2	t	f
3610	anglex	X轴角度	Output	\N	\N	\N	2	30	-30	°		2019-03-15 16:44:29.662+08	2019-03-15 16:44:29.662+08	46d29a93-ef1e-4724-a19b-8693518dfc89	2	t	f
3611	angley	Y轴角度	Output	\N	\N	\N	2	30	-30	°		2019-03-15 16:45:07.882+08	2019-03-15 16:45:07.882+08	46d29a93-ef1e-4724-a19b-8693518dfc89	2	t	f
3612	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2019-03-15 16:45:43.507+08	2019-03-15 16:45:43.507+08	46d29a93-ef1e-4724-a19b-8693518dfc89	2	t	f
3613	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	\N		2019-03-15 17:01:09.262+08	2019-03-15 17:01:09.262+08	dd73a8bf-daac-40fc-82c3-bb5caad67d03	5	t	f
3615	temp	温度	Output	\N	\N	\N	\N	\N	\N	\N		2019-03-19 15:25:06.986+08	2019-03-19 15:25:06.986+08	f331e32f-da35-4df4-80fe-50f681800a26	2	t	f
3617	Ang_X	X角度	Output	\N	\N	\N	\N	\N	\N			2019-03-19 15:25:07.071+08	2019-03-19 15:25:07.071+08	856b0c3e-b6db-4332-93b2-88d4bc0e019f	2	t	f
3619	Ang_Y	Y轴角度	Output	\N	\N	\N	\N	\N	\N			2019-03-19 15:25:07.086+08	2019-03-19 15:25:07.086+08	dd63a0aa-71f9-4a32-9b10-0cce05dfc818	2	t	f
3631	physicalvalue	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-03-25 11:30:26.431+08	2019-03-25 11:30:26.431+08	293fd074-905f-4d2a-94d2-a28d4b06397c	2	t	f
3654	physicalvalue	压力	Output	\N	\N	\N	3	\N	\N	Kpa		2019-03-27 09:53:54.827+08	2019-03-27 09:53:54.827+08	77edb521-5462-437e-acdb-8ca54f858468	2	t	f
3630	wavelength	波长	Output	\N			3	\N	\N	nm		2019-03-25 11:30:03.004+08	2019-04-09 10:21:31.17+08	293fd074-905f-4d2a-94d2-a28d4b06397c	2	t	f
3591	voc	挥发有机物	Output	\N			3	\N	\N	mg/m3		2019-03-12 09:50:21.495+08	2019-07-08 09:58:42.743+08	2e73374e-14c1-47d9-a0ce-f6d05b317930	2	t	f
3592	h2s	硫化氢	Output	\N			3	\N	\N	mg/m3		2019-03-12 09:50:41.882+08	2019-07-08 09:58:46.711+08	2e73374e-14c1-47d9-a0ce-f6d05b317930	2	t	f
3593	nh3	氨气	Output	\N			3	\N		mg/m3		2019-03-12 09:51:17.895+08	2019-07-08 09:58:50.478+08	2e73374e-14c1-47d9-a0ce-f6d05b317930	2	t	f
3655	physicalvalue	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-03-27 10:17:52.138+08	2019-03-27 10:17:52.138+08	9842fe65-98a7-4396-9ced-fd75761872b7	2	t	f
3656	physicalvalue	流量	Output	\N	\N	\N	3	\N	\N	m3/h		2019-03-27 10:20:22.972+08	2019-03-27 10:20:22.972+08	7d31224f-522e-4f6b-89f0-4802c150f9d7	2	t	f
3657	physicalvalue	热量	Output	\N	\N	\N	3	\N	\N	KW		2019-03-27 10:22:55.383+08	2019-03-27 10:22:55.383+08	bad3bab6-cba0-402c-bcde-5fbffacfa1a8	2	t	f
3658	length	沉降	Output	\N			3	\N	\N	mm		2019-03-27 16:24:55.306+08	2019-03-27 16:25:42.934+08	ad7876d0-0ff2-4d4c-b4be-aaeac8dbbba7	2	t	f
3659	physicalvalue	裂缝	Output	\N	\N	\N	16	\N		mm		2019-03-28 17:37:13.279+08	2019-03-28 17:37:13.279+08	1d7d6e9a-1f9e-4d68-9b49-d09ac6a22064	2	t	f
3660	temperature	温度	Output	\N	\N	\N	3	\N		\N		2019-03-28 17:50:12.248+08	2019-03-28 17:50:12.248+08	31506359-c8d3-4562-94bb-8a26912ecbdf	2	t	f
3661	temperature	温度	Output	\N	\N	\N	3	9999999	-99999	摄氏度		2019-03-29 17:38:13.887+08	2019-03-29 17:38:13.887+08	fe876237-b07a-4583-befe-1013275d47de	2	t	f
3662	pm10	pm10	Output	\N	\N	\N	3	\N	\N	ug/m3		2019-03-31 14:18:04.389+08	2019-03-31 14:18:04.389+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3663	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-03-31 14:30:31.294+08	2019-03-31 14:30:31.294+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3664	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2019-03-31 14:31:14.669+08	2019-03-31 14:31:14.669+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3665	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-03-31 14:31:39.511+08	2019-03-31 14:31:39.511+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3666	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2019-03-31 14:31:58.367+08	2019-03-31 14:31:58.367+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3667	noise	噪声	Output	\N	\N	\N	2	\N	\N	dB		2019-03-31 14:32:22.643+08	2019-03-31 14:32:22.643+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3668	rain	雨量	Output	\N	\N	\N	2	\N	\N	mm/min		2019-03-31 14:33:02.917+08	2019-03-31 14:33:02.917+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3669	pressure	气压	Output	\N	\N	\N	3	\N	\N	MPa		2019-03-31 14:33:33.248+08	2019-03-31 14:33:33.248+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3670	pm25	pm2.5	Output	\N	\N	\N	2	\N	\N	ug/m3		2019-04-01 14:35:48.385+08	2019-04-01 14:35:48.385+08	b31b24f1-a018-47bb-9046-c022d26cd6c7	2	t	f
3671	pressure	压力	Output	\N	\N	\N	1	\N		Mpa		2019-04-01 14:38:39.928+08	2019-04-01 14:38:39.928+08	52790293-e9cb-482d-a5a4-a437cfc18b3c	2	t	f
3672	noncurrent	静力水准仪	Output	\N			0			bps		2019-04-01 15:38:01.398+08	2019-04-01 15:38:46.529+08	2054c2dc-9c63-4fc3-ab32-be0da644efea	5	t	f
3674	pm25	PM2.5	Output	\N	\N	\N	3	\N	\N	μg/m³		2019-04-04 11:32:30.418+08	2019-04-04 11:32:30.418+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3675	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-04-04 11:32:30.426+08	2019-04-04 11:32:30.426+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3676	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-04 11:32:30.431+08	2019-04-04 11:32:30.431+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3677	humidity	湿度	Output	\N			2	\N	\N	%RH		2019-04-04 11:32:30.435+08	2019-04-04 11:32:30.435+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3678	pm10	PM10	Output	\N	\N	\N	3	\N	\N	pm10		2019-04-04 11:32:30.441+08	2019-04-04 11:32:30.441+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3679	noise	噪音	Output	\N	\N	\N	2	\N	\N	dB		2019-04-04 11:32:30.446+08	2019-04-04 11:32:30.446+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3680	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2019-04-04 11:32:30.45+08	2019-04-04 11:32:30.45+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3681	TSP	TSP	Output	\N			2	\N	\N	μg/m³		2019-04-04 11:32:30.455+08	2019-04-04 11:32:30.455+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3682	wind	风力	Output	\N	\N	\N	1	\N	\N	级		2019-04-04 11:32:30.459+08	2019-04-04 11:32:30.459+08	6ae6a109-549d-4832-b00c-b2fdd8a5a165	2	t	f
3684	northing	Y坐标	Output	\N			3	\N	\N	mm		2019-04-08 11:07:38.366+08	2019-04-24 10:10:14.223+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3692	jsonfileexts		Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-04-08 13:57:19.237+08	2019-04-08 13:57:19.237+08	edbb1563-c4ba-4090-9180-17cec3ec3ac3	5	t	f
3628	wavelength	波长	Output	\N			3	\N	\N	nm		2019-03-25 11:28:29.857+08	2019-04-09 10:21:03.484+08	b131fb3f-83d4-4855-9b8c-419201f620ac	2	t	f
3693	rawValue	频率	Output	\N			3	\N	\N	HZ		2019-04-10 10:41:22.847+08	2019-04-10 15:43:42.949+08	5c6b51d6-d002-49af-9496-30fc8976c446	2	t	f
3696	rawValue	频率	Output	\N			3	\N	\N	HZ		2019-04-10 15:48:52.51+08	2019-04-10 15:48:52.51+08	e44e3794-75ca-4e19-b989-396cabdff179	2	t	f
3698	rawValue	频率	Output	\N			3	\N	\N	HZ		2019-04-10 15:48:53.429+08	2019-04-10 15:48:53.429+08	8103cab6-bf6c-489b-af09-1ba2a278042b	2	t	f
3695	physicalvalue	轴力	Output	\N			3	\N	\N	KN		2019-04-10 15:48:52.504+08	2019-04-10 15:49:38.448+08	e44e3794-75ca-4e19-b989-396cabdff179	2	t	f
3697	physicalvalue	索力	Output	\N			3	\N	\N	KN		2019-04-10 15:48:53.421+08	2019-04-10 15:49:52.158+08	8103cab6-bf6c-489b-af09-1ba2a278042b	2	t	f
3699	CX_SZ1	CX_SZ1	Variable	\N	\N		\N	\N	\N	\N		2019-04-10 18:28:39.22+08	2019-04-10 18:28:39.22+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	5	t	f
3700	ZX_SZ1	ZX_SZ1	Variable	\N	\N	\N	1	90000000	-900000000			2019-04-10 18:28:39.226+08	2019-04-10 18:28:39.226+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3685	height	Z坐标	Output	\N			3	\N	\N	mm		2019-04-08 11:08:33.815+08	2019-04-24 10:10:17.405+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3686	eastingDiff	Dx	Output	\N			3	\N	\N	mm		2019-04-08 11:09:02.349+08	2019-04-24 10:10:20.373+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3687	northingDiff	Dy	Output	\N			3	\N	\N	mm		2019-04-08 11:11:53.011+08	2019-04-24 10:10:26.885+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3688	heightDiff	Dz	Output	\N			3	\N	\N	mm		2019-04-08 11:12:24.331+08	2019-04-24 10:10:30.389+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3683	easting	X坐标	Output	\N			3	\N	\N	mm		2019-04-08 11:06:59.469+08	2019-04-24 10:10:08.686+08	836707a8-5a16-4674-9609-c13f9f0956ff	2	t	f
3701	ZX_ZZ1	ZX_ZZ1	Variable	\N	\N	\N	1	90000000	-9000000			2019-04-10 18:28:39.231+08	2019-04-10 18:28:39.231+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3702	ZX_SZ2	ZX_SZ2	Variable	\N	\N	\N	1	9000000000	-90000000			2019-04-10 18:28:39.236+08	2019-04-10 18:28:39.236+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3703	ZX_ZZ2	ZX_ZZ2	Variable	\N	\N	\N	1	90000000	-9000000			2019-04-10 18:28:39.24+08	2019-04-10 18:28:39.24+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3704	ZX_SZ3	ZX_SZ3	Variable	\N	\N	\N	1	9000000000	-9000000			2019-04-10 18:28:39.244+08	2019-04-10 18:28:39.244+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3705	ZX_ZZ3	ZX_ZZ3	Variable	\N	\N	\N	1	9000000000	-900000000			2019-04-10 18:28:39.249+08	2019-04-10 18:28:39.249+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3706	ZX_SZ4	ZX_SZ4	Variable	\N	\N	\N	1	90000000000	-900000000			2019-04-10 18:28:39.254+08	2019-04-10 18:28:39.254+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3707	ZX_ZZ4	ZX_ZZ4	Variable	\N	\N	\N	1	9000000000000	-900000000000			2019-04-10 18:28:39.258+08	2019-04-10 18:28:39.258+08	37826374-2db9-4f16-a42d-37ee9f59c3ac	2	t	f
3708	arch	仰拱安全步距	Output	\N	\N	\N	2	99999	0	cm		2019-04-16 09:09:09.729+08	2019-04-16 09:09:09.729+08	73b4f51d-68e2-4fb4-a8a9-162f643d1983	2	t	f
3709	tunnelface	掌子面安全步距	Output	\N	\N	\N	2	99999	0	cm		2019-04-16 09:09:09.738+08	2019-04-16 09:09:09.738+08	73b4f51d-68e2-4fb4-a8a9-162f643d1983	2	t	f
3710	length	测量距离	Output	\N	\N	\N	2	9999	0	mm		2019-04-16 09:11:47.996+08	2019-04-16 09:11:47.996+08	7cc4cc34-60a4-4ff0-a85e-015a11eadeac	2	t	f
3711	length	测量距离	Output	\N	\N	\N	2	99999	0	mm		2019-04-16 09:50:05.911+08	2019-04-16 09:50:05.911+08	cb1ad06a-023a-46da-a674-80b18513c1e4	2	t	f
3712	arch	仰拱安全步距	Output	\N	\N	\N	2	99999	0	cm		2019-04-16 09:52:28.877+08	2019-04-16 09:52:28.877+08	98161e10-b23b-4448-a389-0bd8a08fec4f	2	t	f
3713	tunnelface	掌子面安全步距	Output	\N	\N	\N	2	99999	0	cm		2019-04-16 09:52:28.885+08	2019-04-16 09:52:28.885+08	98161e10-b23b-4448-a389-0bd8a08fec4f	2	t	f
3714	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-16 16:01:34.222+08	2019-04-16 16:01:34.222+08	0a9589f0-6b8d-474c-b07d-8c6da527a61c	2	t	f
3716	NH3	NH3	Output	\N	\N	\N	2	9999	0	ppm		2019-04-18 11:02:51.794+08	2019-04-18 11:02:51.794+08	7fa0305f-807a-4541-8615-4ad975b73518	2	t	f
3718	humidy	湿度	Output	\N	\N	\N	2	100	0	%		2019-04-18 11:06:31.804+08	2019-04-18 11:06:31.804+08	d2add1b3-b21c-420b-82a4-e0c55ee3a019	2	t	f
3719	pressure	压强	Output	\N	\N	\N	4	2	0	MPa		2019-04-18 13:57:28.317+08	2019-04-18 13:57:28.317+08	fddf24e3-0068-448a-aee2-4b35af2a7e32	2	t	f
3720	pressure	压强	Output	\N	\N	\N	5	0.5	0	MPa		2019-04-18 13:58:15.168+08	2019-04-18 13:58:15.168+08	1e436fa9-3d57-441a-b498-4dc107684e1a	2	t	f
3721	pressure	压强	Output	\N	\N	\N	5	5	0	MPa		2019-04-18 13:58:54.322+08	2019-04-18 13:58:54.322+08	0050e0d2-2d7d-4e7b-8871-1b0196ce7094	2	t	f
3722	pressure	压强	Output	\N	\N	\N	4	1000	0	KPa		2019-04-18 13:59:39.954+08	2019-04-18 13:59:39.954+08	6ea6d122-5da2-41bd-a362-912f212d294b	2	t	f
3673	physicalvalue	数据	Output	\N			3	\N	\N	KN		2019-04-03 16:54:14.599+08	2019-04-18 14:26:57.402+08	5c6b51d6-d002-49af-9496-30fc8976c446	2	t	f
3728	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-04-18 16:04:25.319+08	2019-04-18 16:04:25.319+08	d4965875-354b-4294-87f4-c4ba9f9260ab	5	t	f
3729	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-04-18 16:07:19.944+08	2019-04-18 16:07:19.944+08	51de3079-41a4-4b3b-9e3b-4d9bfb13fef8	5	t	f
3717	Temp	温度	Output	\N			2	100	-40	℃		2019-04-18 11:06:31.797+08	2019-04-18 16:48:40.515+08	d2add1b3-b21c-420b-82a4-e0c55ee3a019	2	t	f
3730	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-04-18 17:58:14.563+08	2019-04-18 17:58:14.563+08	c437942e-6dd8-468c-81d0-ffed012878bd	2	t	f
3731	physicalvalue	水压	Output	\N	\N	\N	4	\N	\N	MPa		2019-04-18 17:58:14.574+08	2019-04-18 17:58:14.574+08	c437942e-6dd8-468c-81d0-ffed012878bd	2	t	f
3732	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-18 17:58:14.58+08	2019-04-18 17:58:14.58+08	c437942e-6dd8-468c-81d0-ffed012878bd	2	t	f
3733	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-04-18 17:58:14.585+08	2019-04-18 17:58:14.585+08	c437942e-6dd8-468c-81d0-ffed012878bd	2	t	f
3734	waterlevel	水位	Output	\N	\N	\N	5	\N	\N	m		2019-04-18 17:58:14.589+08	2019-04-18 17:58:14.589+08	c437942e-6dd8-468c-81d0-ffed012878bd	2	t	f
3735	pressure	压强	Output	\N	\N	\N	4	\N	\N	KPa		2019-04-18 18:47:42.22+08	2019-04-18 18:47:42.22+08	a4c5312d-d964-4c7e-9d81-79f265acfc59	2	t	f
3737	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-04-19 10:16:21.6+08	2019-04-19 10:16:21.6+08	d0eba673-a21f-47b7-8c47-0368788a1b62	2	t	f
3739	temperature	温度	Output	\N	\N	\N	\N	\N	\N	摄氏度		2019-04-19 11:24:06.476+08	2019-04-19 11:24:06.476+08	aaec2c04-55f4-4c0a-b5ba-004a8b91593a	5	t	f
3727	frequency	频率	Output	\N			0			Hz		2019-04-18 15:29:50.025+08	2019-04-19 11:24:31.242+08	aaec2c04-55f4-4c0a-b5ba-004a8b91593a	5	t	f
3744	frequency	振弦	Variable	\N	\N	1	\N	\N	\N	Hz		2019-04-19 16:42:52.619+08	2019-04-19 16:42:52.619+08	9ec28096-280e-4a66-b130-37a5ebc05047	5	t	f
3745	value	位移	Output	\N			2	1000	0	mm		2019-04-22 13:13:08.908+08	2019-04-22 13:14:49.523+08	70909da5-46ce-4458-8129-4c34c077b2be	2	t	f
3746	hex	数据	Output	\N	\N	\N	\N	\N	\N	\N		2019-04-22 14:09:29.044+08	2019-04-22 14:09:29.044+08	79df1a9f-c843-4cdd-806d-4492fdeac2c2	5	t	f
3747	value	沉降	Output	\N			2	2500	0	mm		2019-04-23 14:22:13.667+08	2019-04-23 14:22:50.371+08	2c644dde-9a89-4c57-b9c2-07fae59e460d	2	t	f
3754	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-04-23 16:14:06.094+08	2019-04-23 16:14:06.094+08	897daa06-8487-49b5-b276-f688a5c99378	5	t	f
3758	physicalvalue	裂缝	Output	\N	\N	\N	4	\N	\N	mm		2019-04-24 09:19:43.284+08	2019-04-24 09:19:43.284+08	dfaa0aee-75a3-4f5f-a09c-c278b9e655ad	2	t	f
3759	physicalvalue	温度	Output	\N	\N	\N	4	\N	\N	℃		2019-04-24 09:22:29.038+08	2019-04-24 09:22:29.038+08	5bc34c90-3031-4ce7-bb12-eac34d220e11	2	t	f
3753	physicalvalue	疲劳	Output	\N			4	\N	\N	με		2019-04-23 15:48:26.281+08	2019-04-24 10:05:43.775+08	d73e0c65-a8ab-492b-b6c1-1039f4630424	2	t	f
3748	physicalvalue	应变	Output	\N			4	\N	\N	με		2019-04-23 15:16:39.3+08	2019-04-24 10:06:11.821+08	e3c19ece-2c10-438e-8bd1-005169fa2da8	2	t	f
3760	属性A	\N	Constant	\N	\N	true	\N	\N	\N	\N		2019-04-26 13:07:35.559+08	2019-04-26 13:07:35.559+08	354393d4-5f59-436d-96a6-e7e3fb28a196	3	t	f
3762	yangle	y轴	Output	\N			0			°		2019-04-26 15:57:34.696+08	2019-04-26 16:06:19.951+08	3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873	5	t	f
3181	latitude	纬度	Output	\N			6	\N	\N	°		2019-01-25 16:36:16.164+08	2019-06-18 11:05:47.838+08	62e44371-9cc5-43c5-b9b9-e5fbdc63dda3	2	t	f
3736	ssagee	水位	Output	\N			5	\N	\N	m		2019-04-18 18:47:42.228+08	2019-10-31 11:48:36.916+08	a4c5312d-d964-4c7e-9d81-79f265acfc59	2	t	f
3715	pressure	压力	Output	\N			3	20	-20	Kpa		2019-04-16 16:01:34.23+08	2020-04-13 13:23:20.076+08	0a9589f0-6b8d-474c-b07d-8c6da527a61c	2	t	f
3761	xangle	x轴	Output	\N			0			°		2019-04-26 15:57:34.689+08	2019-04-26 16:06:25.842+08	3e5c37a1-c1a6-4bd4-b3d9-e95a3236e873	5	t	f
3798	voltage	\N	Output	\N			1	\N	\N	V		2019-04-28 17:36:59.015+08	2019-04-28 17:37:21.957+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3802	energy	kWh	Output	\N			3	\N	\N	kWh		2019-04-28 17:36:59.042+08	2019-04-28 19:49:04.943+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3771	physicalvalue	应力	Output	\N			2	\N	\N	KN		2019-04-28 11:50:35.495+08	2019-04-28 11:50:57.083+08	e5a6d57f-122f-4dac-994d-1a83a93b2440	2	t	f
3772	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-28 11:56:52.087+08	2019-04-28 11:56:52.087+08	e5a6d57f-122f-4dac-994d-1a83a93b2440	2	t	f
3773	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-04-28 11:57:28.878+08	2019-04-28 11:57:28.878+08	e5a6d57f-122f-4dac-994d-1a83a93b2440	2	t	f
3774	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-28 11:58:16.292+08	2019-04-28 11:58:16.292+08	cc7ab8cd-332e-48d6-9a20-2d44055c2e61	2	t	f
3775	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-04-28 11:58:44.965+08	2019-04-28 11:58:44.965+08	cc7ab8cd-332e-48d6-9a20-2d44055c2e61	2	t	f
3776	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N	με		2019-04-28 11:59:13.08+08	2019-04-28 11:59:13.08+08	cc7ab8cd-332e-48d6-9a20-2d44055c2e61	2	t	f
3777	physicalvalue	应变	Output	\N	\N	\N	3	\N	\N	με		2019-04-28 12:00:16.773+08	2019-04-28 12:00:16.773+08	55d1faba-c22b-4730-a51c-1979541f342b	2	t	f
3778	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-04-28 12:00:50.125+08	2019-04-28 12:00:50.125+08	55d1faba-c22b-4730-a51c-1979541f342b	2	t	f
3779	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-28 12:01:13.35+08	2019-04-28 12:01:13.35+08	55d1faba-c22b-4730-a51c-1979541f342b	2	t	f
3780	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-04-28 12:01:41.779+08	2019-04-28 12:01:41.779+08	ff05da01-ca5c-4dbb-afb0-67ec5f513f40	2	t	f
3781	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-04-28 12:02:10.784+08	2019-04-28 12:02:10.784+08	ff05da01-ca5c-4dbb-afb0-67ec5f513f40	2	t	f
3782	physicalvalue	应变	Output	\N	\N	\N	3	\N	\N	με		2019-04-28 13:02:59.073+08	2019-04-28 13:02:59.073+08	ff05da01-ca5c-4dbb-afb0-67ec5f513f40	2	t	f
3783	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-04-28 14:30:59.773+08	2019-04-28 14:30:59.773+08	bca45090-3023-4d55-85e0-8c5216171df5	2	t	f
3784	temperatur	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-04-28 14:31:23.126+08	2019-04-28 14:31:23.126+08	bca45090-3023-4d55-85e0-8c5216171df5	2	t	f
3785	physicalvalue	应力	Output	\N	\N	\N	3	\N	\N	MPa		2019-04-28 14:32:55.959+08	2019-04-28 14:32:55.959+08	bca45090-3023-4d55-85e0-8c5216171df5	2	t	f
3801	power		Output	\N	\N	\N	1	\N	\N	W		2019-04-28 17:36:59.034+08	2019-04-28 17:36:59.034+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3799	current		Output	\N			3	\N	\N	A		2019-04-28 17:36:59.023+08	2019-04-28 17:37:13.267+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3834	rawValue	频率	Output	\N			6	99999	-99999	Hz		2019-05-10 16:07:13.634+08	2019-05-29 17:47:37.271+08	0c37d684-9050-4e23-9121-2749044fb378	2	t	f
3800	frequency		Tag	\N			0					2019-04-28 17:36:59.029+08	2019-05-06 09:17:48.2+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3807	outflow	出店流量	Output	\N	\N	\N	\N	99999	0			2019-04-30 09:49:47.694+08	2019-04-30 09:49:47.694+08	a18f5309-f499-412b-9cd7-b2a84c3302fa	1	t	f
3806	inflow	进店流量	Output	\N			0	99999	0	\N		2019-04-30 09:49:47.684+08	2019-05-06 16:28:08.464+08	a18f5309-f499-412b-9cd7-b2a84c3302fa	1	t	f
3815	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-05-07 16:52:55.155+08	2019-05-07 16:52:55.155+08	df20f27f-9f90-4d8f-b4bb-db033628f414	2	t	f
3816	resistance	电阻	Output	\N	\N	\N	3	\N	\N	Ω		2019-05-07 16:54:18.772+08	2019-05-07 16:54:18.772+08	df20f27f-9f90-4d8f-b4bb-db033628f414	2	t	f
3818	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-05-07 17:32:23.386+08	2019-05-07 17:32:23.386+08	df20f27f-9f90-4d8f-b4bb-db033628f414	2	t	f
3821	temperature	Temperature	Output	\N			1	125	-50	ºC		2019-05-08 17:53:13.48+08	2019-05-08 22:17:35.554+08	1725bd62-6500-4740-a03e-78fd4a2f4a53	2	t	f
3822	temp_1	Temperature	Output	\N			1	125	-50	ºC		2019-05-08 18:17:31.603+08	2019-05-19 01:00:48.58+08	639bcad3-50f1-4b66-9f50-acbb916f7d8e	2	t	f
3803	factor	Factor	Output	\N			0					2019-04-28 17:36:59.046+08	2019-05-22 15:23:44.252+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	2	t	f
3768	physicalvalue	轴力	Output	\N			0			KN		2019-04-28 10:50:55.213+08	2019-07-15 09:17:10.94+08	cda9f386-6c1d-4477-91aa-61f2fcbf93ff	2	t	f
3828	length	位移	Output	\N			3	\N	\N	mm		2019-05-09 09:58:07.898+08	2019-05-09 09:58:54.883+08	c05dd524-bff2-460c-b9b3-7fb235b2a7a8	2	t	f
3829	anglex	X轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-05-09 10:06:14.15+08	2019-05-09 10:06:14.15+08	0c3edb9b-16a6-4fed-b65c-3757a117a3bc	2	t	f
3830	angley	Y轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-05-09 10:06:14.156+08	2019-05-09 10:06:14.156+08	0c3edb9b-16a6-4fed-b65c-3757a117a3bc	2	t	f
3831	length	位移	Output	\N			3	\N	\N	mm		2019-05-09 17:23:15.222+08	2019-05-09 17:48:57.879+08	a40f85c1-a408-408b-971c-4e1c4e88d703	2	t	f
3770	physicalvalue	土压力	Output	\N			2	\N	\N	kpa		2019-04-28 11:47:33.283+08	2019-09-18 16:54:32.057+08	589695ad-b029-4c5e-9425-4946e80f3fb6	2	t	f
3835	physicalvalue	荷载	Output	\N			6	99999	-99999	KN		2019-05-10 16:09:02.006+08	2019-05-10 16:10:24.343+08	0c37d684-9050-4e23-9121-2749044fb378	2	t	f
3836	capacity	含水率	Output	\N			2	\N	\N	%		2019-05-13 11:18:59.502+08	2019-05-13 22:15:09.92+08	7e35a6df-64f0-483a-8582-859548ba7fc1	2	t	f
3823	status_d1	Left Door	Output	\N	0,1		0				Door1 Status	2019-05-08 18:18:59.531+08	2019-05-22 20:42:22.343+08	fd94be74-66bc-48ba-94d0-008b6d6d5413	4	t	f
3769	physicalvalue	温度	Output	\N			2	\N	\N	℃		2019-04-28 11:45:55.218+08	2019-10-09 13:54:18.542+08	833ae7ac-9c57-4cd1-a324-4b49acee1dfe	2	t	f
3884	WeightStatus	载重状态	Output	\N	\N	\N	\N	\N	\N			2019-05-29 15:02:02.76+08	2019-05-29 15:02:02.76+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3869	status_d2	Right Door	Output	\N	0,1		0					2019-05-17 21:25:58.231+08	2019-05-22 20:44:26.63+08	fd94be74-66bc-48ba-94d0-008b6d6d5413	4	t	f
3819	anglex	x轴角度	Output	\N			3	\N	\N	°		2019-05-08 16:28:56.835+08	2019-05-13 14:31:43.046+08	aacdb86a-92cc-47cf-a7e5-b139a96e4fbb	2	t	f
3838	axieTotalBase5	轴距五	Output	\N	\N	\N	\N	9999999	-9999999	cm		2019-05-13 16:27:13.652+08	2019-05-13 16:27:13.652+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3840	axieRoadway	车道号	Output	\N	\N	\N	\N	999999	-999999			2019-05-13 16:27:13.672+08	2019-05-13 16:27:13.672+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3842	axieTotalBase3	轴距三	Output	\N	\N	\N	\N	99999	-99999	cm		2019-05-13 16:27:13.679+08	2019-05-13 16:27:13.679+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3843	axieTotalBase1	轴距一	Output	\N	\N	\N	\N	999999	-999999	cm		2019-05-13 16:27:13.683+08	2019-05-13 16:27:13.683+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3845	axieTotalBase2	轴距二	Output	\N	\N	\N	\N	9999999	-9999999	cm		2019-05-13 16:27:13.691+08	2019-05-13 16:27:13.691+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3846	temperature	温度	Output	\N	\N	\N	\N	99999	-99999	℃		2019-05-13 16:27:13.694+08	2019-05-13 16:27:13.694+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3847	Weight	总重量	Output	\N	\N	\N	\N	99999999999	-99999999999	kg		2019-05-13 16:27:13.698+08	2019-05-13 16:27:13.698+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3848	Time	时间	Output	\N	\N	\N	\N	\N	\N			2019-05-13 16:27:13.702+08	2019-05-13 16:27:13.702+08	7fa7ac4f-f693-4287-a813-9b123e633207	5	t	f
3849	axieTotalBase4	轴距四	Output	\N	\N	\N	\N	9999999	-9999999	cm		2019-05-13 16:27:13.705+08	2019-05-13 16:27:13.705+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3850	Sequence	序列号	Output	\N	\N	\N	\N	\N	\N			2019-05-13 16:27:13.709+08	2019-05-13 16:27:13.709+08	7fa7ac4f-f693-4287-a813-9b123e633207	5	t	f
3851	Effective	有效值	Output	\N	\N	\N	\N	\N	\N			2019-05-13 16:27:13.712+08	2019-05-13 16:27:13.712+08	7fa7ac4f-f693-4287-a813-9b123e633207	5	t	f
3841	Speed	速度	Output	\N			0	99999999	-99999999	km/h		2019-05-13 16:27:13.676+08	2019-05-13 16:47:01.678+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3839	shaftnum	轴数量	Output	\N			0	9999999	-9999999			2019-05-13 16:27:13.666+08	2019-05-13 16:50:30.282+08	7fa7ac4f-f693-4287-a813-9b123e633207	1	t	f
3844	axieCarModle1rist	车型	Output	\N			0					2019-05-13 16:27:13.687+08	2019-05-13 16:52:51.091+08	7fa7ac4f-f693-4287-a813-9b123e633207	5	t	f
3837	temperature	温度	Output	\N			3	\N	\N	℃		2019-05-13 11:18:59.508+08	2019-05-13 22:15:17.391+08	7e35a6df-64f0-483a-8582-859548ba7fc1	2	t	f
3852	longitude	经度	Output	\N	\N	\N	8	180	0	°		2019-05-14 16:57:37.952+08	2019-05-14 16:57:37.952+08	cf8bfa0f-1e08-48ed-9041-3826fd5f5135	2	t	f
3853	latitude	纬度	Output	\N	\N	\N	8	180	0	°		2019-05-14 16:57:37.957+08	2019-05-14 16:57:37.957+08	cf8bfa0f-1e08-48ed-9041-3826fd5f5135	2	t	f
3854	speed	速度	Output	\N	\N	\N	3	999	0	m/s		2019-05-14 16:57:37.961+08	2019-05-14 16:57:37.961+08	cf8bfa0f-1e08-48ed-9041-3826fd5f5135	2	t	f
3859	level	沉降	Output	\N			3			mm		2019-05-15 10:32:01.148+08	2019-05-15 10:32:27.43+08	e35e7bae-3a9e-41bc-b63b-ee32399d64d0	2	t	f
3861	frequency	振弦	Output	\N	\N	\N	\N	\N	\N	HZ		2019-05-15 10:48:06.51+08	2019-05-15 10:48:06.51+08	f21dbd7b-867d-4273-8141-7817fa5685d8	5	t	f
3863	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-05-15 20:15:43.771+08	2019-05-15 20:15:43.771+08	fd94be74-66bc-48ba-94d0-008b6d6d5413	5	t	f
3867	capType		Constant	\N		TEMPERATURE	0					2019-05-15 22:55:03.651+08	2019-05-15 22:59:44.908+08	639bcad3-50f1-4b66-9f50-acbb916f7d8e	5	t	f
3868	physicalvalue	压力	Output	\N			0			KN		2019-05-17 15:40:37.789+08	2019-05-17 16:25:49.522+08	f21dbd7b-867d-4273-8141-7817fa5685d8	5	t	f
3885	ObliguityXStatus	倾角X状态	Output	\N	\N	\N	\N	\N	\N			2019-05-29 15:02:22.386+08	2019-05-29 15:02:22.386+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3870	111	\N	Output	\N	\N	\N	\N	\N	\N	\N		2019-05-22 16:00:03.727+08	2019-05-22 16:00:03.727+08	dfb70ff4-6696-4f3c-b709-dfa5ad977714	1	t	f
3871	capType	CapType	Constant	\N		ENERGY	0					2019-05-22 16:23:24.664+08	2019-05-22 16:23:31.158+08	1a9ae7b1-f3ca-46f5-82eb-a774d07949cc	5	t	f
3881	WeightPercent	载重百分比	Output	\N	\N	\N	2	\N	\N	%		2019-05-29 14:57:47.222+08	2019-05-29 14:57:47.222+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3882	ObliguityX	倾角X	Output	\N	\N	\N	2	\N	\N	°		2019-05-29 14:59:30.048+08	2019-05-29 14:59:30.048+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3886	ObliguityYStatus	倾角Y状态	Output	\N	\N	\N	\N	\N	\N			2019-05-29 15:02:40.107+08	2019-05-29 15:02:40.107+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3879	physicalvalue	温度	Output	\N			2			℃		2019-05-28 15:02:38.787+08	2019-05-29 15:26:19.497+08	8b850929-a890-4c69-898a-0388eec64db8	2	t	f
3917	frequency	频率	Output	\N	\N	\N	6	99999999	-99999999	Hz		2019-06-05 10:58:32.29+08	2019-06-05 10:58:32.29+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	2	t	f
3896	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-05-30 10:25:08.498+08	2019-05-30 10:25:08.498+08	b1badcbe-62e0-4c45-85e8-8e3d712d3659	2	t	f
3897	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-05-30 10:25:27.587+08	2019-05-30 10:25:27.587+08	b1badcbe-62e0-4c45-85e8-8e3d712d3659	2	t	f
3898	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-05-30 10:25:49.673+08	2019-05-30 10:25:49.673+08	b1badcbe-62e0-4c45-85e8-8e3d712d3659	2	t	f
3900	angley	Y轴角度	Output	\N			3			°		2019-05-30 14:01:24.901+08	2019-05-30 14:01:54.604+08	cb84ad58-6983-40a3-96ad-0f001cccaf96	2	t	f
3903	AlarmType	报警类型	Output	\N	\N	\N	\N	\N	\N	\N		2019-05-31 09:39:43.054+08	2019-05-31 09:39:43.054+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3899	anglex	X轴角度	Output	\N			3			°		2019-05-30 14:00:19.849+08	2019-05-30 14:02:06.78+08	cb84ad58-6983-40a3-96ad-0f001cccaf96	2	t	f
3883	ObliguityY	倾角Y	Output	\N			2	\N	\N	°		2019-05-29 14:59:50.736+08	2019-05-30 15:32:48.656+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3901	rawValue	频率	Output	\N	\N	\N	6	99999	-99999	Hz		2019-05-30 15:55:40.192+08	2019-05-30 15:55:40.192+08	39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c	2	t	f
3902	physicalvalue	荷载	Output	\N	\N	\N	6	99999	-99999	KN		2019-05-30 15:56:32.89+08	2019-05-30 15:56:32.89+08	39d7c8a8-3ab0-4d56-95b4-3cb6c06cfd9c	2	t	f
3904	AlarmValue	报警值	Output	\N	\N	\N	2	\N	\N			2019-05-31 09:40:15.386+08	2019-05-31 09:40:15.386+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3905	isOnline	上线	Output	\N	\N	\N	\N	1	0	\N		2019-05-31 09:41:44.04+08	2019-05-31 09:41:44.04+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3906	isDownline	下线	Output	\N	\N	\N	\N	1	0			2019-05-31 09:42:03.338+08	2019-05-31 09:42:03.338+08	aeea3098-6149-4f87-9a9a-474122886ef7	1	t	f
3907	Obliguity	合成倾角	Output	\N	\N	\N	2	\N	\N	°		2019-05-31 10:26:03.909+08	2019-05-31 10:26:03.909+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3909	rawValue	频率	Output	\N	\N	\N	6	99999	-99999	Hz		2019-05-31 18:04:40.276+08	2019-05-31 18:04:40.276+08	8a945623-1db8-433f-8eb9-062caccb5b89	2	t	f
3910	physicalvalue	荷载	Output	\N	\N	\N	6	99999	-99999	KN		2019-05-31 18:05:26.136+08	2019-05-31 18:05:26.136+08	8a945623-1db8-433f-8eb9-062caccb5b89	2	t	f
3911	temperature	温度	Output	\N	\N	\N	2	99999	-99999	℃		2019-06-03 08:33:19.402+08	2019-06-03 08:33:19.402+08	8a945623-1db8-433f-8eb9-062caccb5b89	2	t	f
3887	temperature	温度	Output	\N			2	99999	-99999	℃		2019-05-29 15:57:45.378+08	2019-06-04 17:33:31.581+08	8f2c15d1-cb4f-45fd-b217-ecbf37787ddc	2	t	f
3888	physicalvalue	应变	Output	\N			2	99999	-99999	με		2019-05-29 15:57:45.384+08	2019-06-04 17:34:47.074+08	8f2c15d1-cb4f-45fd-b217-ecbf37787ddc	2	t	f
3889	rawValue	频率	Output	\N			2	99999	-99999	HZ		2019-05-29 15:57:45.388+08	2019-06-04 17:35:14.856+08	8f2c15d1-cb4f-45fd-b217-ecbf37787ddc	2	t	f
3880	Weight	载重	Output	\N			3	\N	\N	Kg		2019-05-29 14:57:09.393+08	2019-06-03 09:23:51.779+08	aeea3098-6149-4f87-9a9a-474122886ef7	2	t	f
3912	physicalvalue	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-06-03 11:54:20.33+08	2019-06-03 11:54:20.33+08	9cc08d17-9866-4da2-844e-be838245d9e3	2	t	f
3913	frequency	频率	Output	\N	\N	\N	6	99999999	-999999999	Hz		2019-06-05 10:43:13.781+08	2019-06-05 10:43:13.781+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	2	t	f
3914	physicalvalue	荷载	Output	\N	\N	\N	6	9999999	-9999999	KN		2019-06-05 10:43:13.788+08	2019-06-05 10:43:13.788+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	2	t	f
3915	temperature	温度	Output	\N	\N	\N	2	99999	-99999	℃		2019-06-05 10:43:13.794+08	2019-06-05 10:43:13.794+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	2	t	f
3916	am	幅值	Output	\N	\N	\N	2	99999	-99999			2019-06-05 10:43:13.798+08	2019-06-05 10:43:13.798+08	cbcbc67f-3b4d-47e4-93db-2a85c354a213	2	t	f
3918	physicalvalue	荷载	Output	\N	\N	\N	6	9999999	-9999999	KN		2019-06-05 10:58:32.295+08	2019-06-05 10:58:32.295+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	2	t	f
3919	temperature	温度	Output	\N	\N	\N	2	99999	-99999	℃		2019-06-05 10:58:32.3+08	2019-06-05 10:58:32.3+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	2	t	f
3920	am	幅值	Output	\N	\N	\N	2	99999	-99999			2019-06-05 10:58:32.304+08	2019-06-05 10:58:32.304+08	db0bf17e-625b-4003-8b57-b2db0d5e3ecc	2	t	f
3926	temperature	温度	Output	\N	\N	\N	6	999999	-999999	℃		2019-06-06 14:15:52.947+08	2019-06-06 14:15:52.947+08	e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e	2	t	f
3965	physicalvalue	数据	Output	\N	\N	\N	2	\N	\N	KN		2019-06-11 17:37:18.251+08	2019-06-11 17:37:18.251+08	0af3cf99-e69f-4f81-b486-9fcb5de59fd5	2	t	f
3925	frequency	频率	Output	\N			6	99999	-99999	Hz		2019-06-06 14:15:52.941+08	2019-06-06 14:27:44.207+08	e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e	2	t	f
3930	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-06 17:26:07.088+08	2019-06-06 17:26:07.088+08	28c09a41-f505-4cf5-aa80-131823bd65fb	2	t	f
3928	physicalvalue	应变	Output	\N			6	99999	-99999	με		2019-06-06 14:15:52.957+08	2019-06-11 10:16:29.902+08	e82b1781-0a86-4dd5-a38c-c66f1f0a1b0e	2	t	f
3931	physicalvalue	应力	Output	\N	\N	\N	2	\N	\N	KN		2019-06-11 15:43:02.17+08	2019-06-11 15:43:02.17+08	57e7e768-2d0a-44a8-93df-21edd1f6564f	2	t	f
3932	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 15:43:02.177+08	2019-06-11 15:43:02.177+08	57e7e768-2d0a-44a8-93df-21edd1f6564f	2	t	f
3933	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 15:43:02.182+08	2019-06-11 15:43:02.182+08	57e7e768-2d0a-44a8-93df-21edd1f6564f	2	t	f
3934	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 15:50:05.414+08	2019-06-11 15:50:05.414+08	35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	2	t	f
3935	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 15:50:05.42+08	2019-06-11 15:50:05.42+08	35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	2	t	f
3937	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 15:55:27.365+08	2019-06-11 15:55:27.365+08	bf5ac821-5299-4099-9be9-c61c8b7d085c	2	t	f
3938	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 15:55:27.371+08	2019-06-11 15:55:27.371+08	bf5ac821-5299-4099-9be9-c61c8b7d085c	2	t	f
3939	physicalvalue	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2019-06-11 15:55:27.376+08	2019-06-11 15:55:27.376+08	bf5ac821-5299-4099-9be9-c61c8b7d085c	2	t	f
3940	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 15:59:09.842+08	2019-06-11 15:59:09.842+08	7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	2	t	f
3941	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 15:59:09.851+08	2019-06-11 15:59:09.851+08	7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	2	t	f
3942	physicalvalue	裂缝	Output	\N	\N	\N	3	\N	\N	mm		2019-06-11 15:59:09.856+08	2019-06-11 15:59:09.856+08	7fbb94a7-5b6f-4dc1-8e38-872f387a2d31	2	t	f
3946	physicalvalue	沉降	Output	\N	\N	\N	3	\N	\N	mm		2019-06-11 16:14:17.089+08	2019-06-11 16:14:17.089+08	ed5a91cc-f6b6-4990-9c8b-bd430a7c12ef	2	t	f
3947	physicalvalue	沉降	Output	\N	\N	\N	3	\N	\N	mm		2019-06-11 16:18:29.001+08	2019-06-11 16:18:29.001+08	5cec0e8b-58df-4473-b3d7-4d524e763830	2	t	f
3951	physicalvalue	X轴角度	Output	\N	\N	\N	\N	\N	\N	°		2019-06-11 17:11:17.106+08	2019-06-11 17:11:17.106+08	7ca191c0-8240-4dec-95bc-26b13a55bcc6	2	t	f
3952	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 17:11:17.114+08	2019-06-11 17:11:17.114+08	7ca191c0-8240-4dec-95bc-26b13a55bcc6	2	t	f
3953	physicalvalue	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:18:00.726+08	2019-06-11 17:18:00.726+08	79193862-5667-4861-96ed-2c239a6535c2	2	t	f
3954	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 17:18:00.731+08	2019-06-11 17:18:00.731+08	79193862-5667-4861-96ed-2c239a6535c2	2	t	f
3955	physicalvalue	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:20:41.96+08	2019-06-11 17:20:41.96+08	c75c257f-cdab-4167-a872-c06243b27f74	2	t	f
3956	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 17:20:41.965+08	2019-06-11 17:20:41.965+08	c75c257f-cdab-4167-a872-c06243b27f74	2	t	f
3957	physicalvalue	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:24:10.309+08	2019-06-11 17:24:10.309+08	1515cbb4-bda7-45b0-84c9-dedf0de93039	2	t	f
3959	physicalvalue	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:28:58.616+08	2019-06-11 17:28:58.616+08	02962d5d-c83f-4756-bc1b-b9044c4563fa	2	t	f
3960	physicalvalue2	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:28:58.623+08	2019-06-11 17:28:58.623+08	02962d5d-c83f-4756-bc1b-b9044c4563fa	2	t	f
3961	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 17:28:58.628+08	2019-06-11 17:28:58.628+08	02962d5d-c83f-4756-bc1b-b9044c4563fa	2	t	f
3962	physicalvalue	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-11 17:32:28.571+08	2019-06-11 17:32:28.571+08	59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e	2	t	f
3963	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-11 17:32:28.577+08	2019-06-11 17:32:28.577+08	59d59ccb-fb26-4ac7-96f5-2b0694fc6d2e	2	t	f
3964	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 17:36:48.042+08	2019-06-11 17:36:48.042+08	0af3cf99-e69f-4f81-b486-9fcb5de59fd5	2	t	f
3966	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 17:39:36.367+08	2019-06-11 17:39:36.367+08	faa5fb8b-d39d-4603-be6b-e70acd114c75	2	t	f
3967	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-06-11 17:40:13.769+08	2019-06-11 17:40:13.769+08	faa5fb8b-d39d-4603-be6b-e70acd114c75	2	t	f
3968	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 17:41:15.234+08	2019-06-11 17:41:15.234+08	aabd5c05-617a-41c3-9ba6-925ec3334ff7	2	t	f
3969	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-06-11 17:41:49.221+08	2019-06-11 17:41:49.221+08	aabd5c05-617a-41c3-9ba6-925ec3334ff7	2	t	f
3970	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-06-11 17:42:57.774+08	2019-06-11 17:42:57.774+08	b76b8c94-f6d7-43f1-9831-865a733dbeb4	2	t	f
3971	physicalvalue	水位	Output	\N	\N	\N	2	\N	\N	mm		2019-06-11 17:43:32.638+08	2019-06-11 17:43:32.638+08	b76b8c94-f6d7-43f1-9831-865a733dbeb4	2	t	f
3973	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2019-06-18 11:02:55.446+08	2019-06-18 11:02:55.446+08	fb325f67-e901-440b-a14e-2f8e04c53e9b	2	t	f
3977	pm10	PM10	Output	\N			3	\N	\N	ug/m3		2019-06-18 15:44:35.517+08	2019-07-08 15:50:30.755+08	43bce07c-dfec-4867-b501-00a047455ab9	2	t	f
3983	physicalvalue	位移	Output	\N	\N	\N	3	\N	\N	mm		2019-06-19 17:35:23.837+08	2019-06-19 17:35:23.837+08	7b0f6923-300e-462b-8705-223febdd9b1d	2	t	f
3976	pm_25	PM2.5	Output	\N			3	\N	\N	ug/m3		2019-06-18 15:44:35.511+08	2019-07-08 15:50:35.781+08	43bce07c-dfec-4867-b501-00a047455ab9	2	t	f
3974	so2	SO2	Output	\N			3	\N	\N	ppm		2019-06-18 15:44:35.497+08	2019-07-08 15:50:38.518+08	43bce07c-dfec-4867-b501-00a047455ab9	2	t	f
3929	physicalvalue	压力	Output	\N			3	\N	\N	Kpa		2019-06-06 17:25:44.449+08	2019-08-12 17:32:12.707+08	28c09a41-f505-4cf5-aa80-131823bd65fb	2	t	f
3950	physicalvalue	土压力	Output	\N			2	\N	\N	kpa		2019-06-11 16:27:10.963+08	2019-09-18 16:53:47.988+08	370eb26a-f879-4a01-a515-1b20a92c80f6	2	t	f
3936	physicalvalue	压力	Output	\N			2	\N	\N	kpa		2019-06-11 15:50:05.425+08	2019-09-18 16:54:06.267+08	35a2c8f0-a9c6-4f91-a9c5-94a0067e3095	2	t	f
3982	hexData	数据	Output	\N	\N	\N	\N	\N	\N	\N		2019-06-19 13:59:20.233+08	2019-06-19 13:59:20.233+08	b97de8e9-82aa-492d-9c8f-5d7347a24d93	5	t	f
3984	physicalvalue	角度	Output	\N	\N	\N	2	\N	\N	°		2019-06-20 09:23:25.475+08	2019-06-20 09:23:25.475+08	26896cc1-415c-44cd-a3d0-36d3908ab014	2	t	f
3980	VOCS	VOCs	Output	\N			3	\N		ppm		2019-06-18 15:48:02.217+08	2019-07-08 15:50:03.49+08	7f4871f5-ec20-43b3-aba7-1814a0dd53bf	2	t	f
3979	H2S	硫化氢	Output	\N			3	\N	\N	ppm		2019-06-18 15:48:02.212+08	2019-07-08 15:50:07.428+08	7f4871f5-ec20-43b3-aba7-1814a0dd53bf	2	t	f
3978	NH3	氨气	Output	\N			3	\N	\N	ppm		2019-06-18 15:48:02.206+08	2019-07-08 15:50:11.432+08	7f4871f5-ec20-43b3-aba7-1814a0dd53bf	2	t	f
3981	Odor	臭气浓度	Output	\N			3	\N	\N			2019-06-18 15:48:02.221+08	2019-07-17 15:32:20.096+08	7f4871f5-ec20-43b3-aba7-1814a0dd53bf	2	t	f
3985	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-06-21 10:58:35.023+08	2019-06-21 10:58:35.023+08	7b0f6923-300e-462b-8705-223febdd9b1d	2	t	f
3986	temperature	温度	Output	\N			4	120	-55	℃		2019-06-21 13:52:33.011+08	2019-06-21 13:54:37.448+08	4e27a3d5-339d-47e3-9ce7-0c90068376e5	2	t	f
3987	noise	噪声	Output	\N	\N	\N	3	\N	\N	dB		2019-06-25 11:39:02.389+08	2019-06-25 11:39:02.389+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3988	humidity	湿度	Output	\N	\N	\N	3	\N	\N	%RH		2019-06-25 11:39:02.396+08	2019-06-25 11:39:02.396+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3989	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2019-06-25 11:39:02.401+08	2019-06-25 11:39:02.401+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3990	O3	O3浓度	Output	\N	\N	\N	3	\N	\N	ppb		2019-06-25 11:39:02.406+08	2019-06-25 11:39:02.406+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3991	SO2	SO2浓度	Output	\N	\N	\N	3	\N	\N	ppb		2019-06-25 11:39:02.41+08	2019-06-25 11:39:02.41+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3992	CO	CO浓度	Output	\N	\N	\N	3	\N	\N	ppm		2019-06-25 11:39:02.415+08	2019-06-25 11:39:02.415+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3993	PM10	PM10浓度	Output	\N	\N	\N	3	\N		ug/m3		2019-06-25 11:39:02.419+08	2019-06-25 11:39:02.419+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3994	TVOC	TVOC浓度	Output	\N	\N	\N	3	\N	\N	mg/m3		2019-06-25 11:39:02.428+08	2019-06-25 11:39:02.428+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3995	PM25	PM2.5浓度	Output	\N	\N	\N	\N	\N	\N	ug/m3		2019-06-25 11:39:02.433+08	2019-06-25 11:39:02.433+08	a6a9bd4f-093d-4573-8511-3d805c7fbe9c	2	t	f
3997	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-06-27 09:35:05.712+08	2019-06-27 09:35:05.712+08	b071ffa1-9fb5-4fac-8295-cecff8edaa95	5	t	f
3999	physicalvalue	应变	Output	\N			6	\N	\N	με		2019-06-27 09:35:21.033+08	2019-06-27 09:35:21.033+08	f5661460-2f34-481a-b54b-31c212613ecf	2	t	f
4002	length	长度	Output	\N	\N	\N	\N	\N	\N	m		2019-06-27 13:03:58.352+08	2019-06-27 13:03:58.352+08	e2d1416d-c8a6-43c7-ad2f-08d498e323a1	2	t	f
3996	physicalvalue	位移	Output	\N			3	\N	\N	mm		2019-06-26 11:58:57.832+08	2019-06-27 14:17:08.995+08	b35434b2-55c1-4aab-a689-4919d9c56da0	2	t	f
4003	physicalvalue	位移	Output	\N			3	\N	\N	mm		2019-06-27 14:07:45.238+08	2019-06-27 14:17:35.626+08	02bedcab-6954-4215-aa33-80fd484bda13	2	t	f
2410	physicalvalue	压强	Output	\N			3	\N	\N	Pa		2018-07-09 10:14:00.846+08	2019-06-27 14:20:31.467+08	3268ff97-6ce3-4be6-a8b1-4ceeb3f8e9b1	2	t	f
2353	physicalvalue	压强	Output	\N			2	\N	\N	Pa		2018-06-21 16:32:04.671+08	2019-06-27 14:20:49.007+08	ccf2e82b-5de5-4291-849a-390a0c957088	2	t	f
4004	physicalvalue	压强	Output	\N			2	\N	\N	kg/cm2		2019-06-27 14:28:06.368+08	2019-06-27 14:47:54.384+08	ee3cecd5-4646-4a7d-8ade-1993d81887e4	2	t	f
4005	length	位移	Output	\N			3	\N	\N	mm		2019-06-27 15:43:13.197+08	2019-06-27 16:33:13.454+08	c164c829-5622-47f6-8164-a992be4b9e2a	2	t	f
4006	anglex	x轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-27 17:01:33.256+08	2019-06-27 17:01:33.256+08	bf758132-c5a1-4622-a2a7-38359c9cc0c5	2	t	f
4007	angley	y轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-27 17:01:33.261+08	2019-06-27 17:01:33.261+08	bf758132-c5a1-4622-a2a7-38359c9cc0c5	2	t	f
4008	anglex	x轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-27 17:34:29.073+08	2019-06-27 17:34:29.073+08	fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac	2	t	f
4009	angley	y轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-27 17:34:29.078+08	2019-06-27 17:34:29.078+08	fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac	2	t	f
4001	physicalvalue	裂缝	Output	\N			2	\N	\N	mm		2019-06-27 09:35:29.146+08	2019-06-28 09:58:10.322+08	936e35a2-2147-461d-8713-c4149317fb19	2	t	f
4011	anglex	x轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-28 14:47:16.392+08	2019-06-28 14:47:16.392+08	f52408eb-cc49-4576-ba3d-726ab9d6d9f5	2	t	f
4012	angley	y轴角度	Output	\N	\N	\N	3	\N	\N	°		2019-06-28 14:47:16.401+08	2019-06-28 14:47:16.401+08	f52408eb-cc49-4576-ba3d-726ab9d6d9f5	2	t	f
4010	length	位移	Output	\N			3	\N	\N	m		2019-06-28 09:51:38.285+08	2019-07-02 17:49:45.785+08	9a53f8b2-9b6d-4ebd-bafa-1b3e01b404b6	2	t	f
4013	temperatures	温度	Output	\N			1	\N	\N	℃		2019-07-03 11:35:48.089+08	2019-07-16 11:37:08.615+08	418a4cf1-2537-4f0c-ad3d-d7752a5957a8	2	t	f
4015	clusterId		Constant	\N	\N	genOnOff	\N	\N	\N	\N		2019-07-06 16:55:42.749+08	2019-07-06 16:55:42.749+08	bef735a7-a116-4448-8c98-c27e6f83fab2	5	t	f
4023	voltage	Votage	Output	\N			2	\N	\N	V		2019-07-06 18:59:18.831+08	2019-07-15 11:45:20.145+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	t	f
4018	clusterId	\N	Constant	\N	\N	msTemperatureMeasurement	\N	\N	\N	\N		2019-07-06 17:23:24.597+08	2019-07-06 17:23:24.597+08	8f23910e-3c7c-4113-b420-88df899c7a25	5	t	f
4020	clusterId	\N	Constant	\N	\N	genBasic	\N	\N	\N	\N		2019-07-06 18:57:45.584+08	2019-07-06 18:57:45.584+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	5	t	f
4026	clusterId	\N	Constant	\N	\N	genAnalogInput	\N	\N	\N	\N		2019-07-06 19:02:12.986+08	2019-07-06 19:02:12.986+08	3c5cfd97-4900-4001-95e5-6d3b6790bec8	5	t	f
4149	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 14:21:11.71+08	2019-08-01 14:21:11.71+08	1961c932-469f-4e15-8dee-38cf1f837d35	3	f	f
4153	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:19:21.811+08	2019-08-01 15:19:21.811+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	3	f	f
4155	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:20:24.145+08	2019-08-01 15:20:24.145+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	3	f	f
3975	nox	氮氧化物	Output	\N			3	\N	\N	ppm		2019-06-18 15:44:35.504+08	2019-07-08 15:50:27.06+08	43bce07c-dfec-4867-b501-00a047455ab9	2	t	f
4036	runoff	流量	Output	\N	\N	\N	3	\N	\N	\N		2019-07-09 15:00:57.819+08	2019-07-09 15:00:57.819+08	c61698d6-e360-4e40-a141-960ee17d0aa4	2	t	f
4038	temperature	温度	Output	\N			2	\N	\N	℃		2019-07-09 15:10:12.054+08	2019-07-09 15:15:07.027+08	6ed9c2d8-4e87-43ed-b925-94a17a305bbf	2	t	f
4035	physicalvalue	x轴角度	Output	\N			2	\N	\N	°		2019-07-09 08:53:49.476+08	2019-07-12 11:25:22.177+08	a690c2d9-43b0-4c5d-b667-5020ef18e4ec	2	t	f
4039	physicalvalue	应变	Output	\N			2	\N	\N	με		2019-07-09 15:15:46.512+08	2019-07-12 14:27:49.246+08	6ed9c2d8-4e87-43ed-b925-94a17a305bbf	2	t	f
4027	power	Power	Output	\N			2	\N	\N	W	Real-time power	2019-07-06 19:02:24.481+08	2019-07-15 11:53:19.86+08	3c5cfd97-4900-4001-95e5-6d3b6790bec8	2	t	f
4019	temperature	Temperature	Output	\N			2			℃		2019-07-06 17:24:41.516+08	2019-07-15 11:11:48.316+08	8f23910e-3c7c-4113-b420-88df899c7a25	2	t	f
4022	power	Power	Output	\N			2	\N	\N	W	Real-time power	2019-07-06 18:59:06.297+08	2019-07-15 11:47:39.924+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	t	f
4024	consumption	Consumption	Output	\N			2	\N	\N	kWh	Total power consumption	2019-07-06 18:59:32.204+08	2019-07-15 11:50:32.032+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	t	f
4041	factor	Fator	Output	\N			2	\N	\N		Power factor	2019-07-11 18:16:10.764+08	2019-07-15 11:49:03.547+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	t	f
4025	temperature	Temperature	Output	\N			2	\N	\N	°C	Temperature of plug	2019-07-06 18:59:41.877+08	2019-07-15 11:49:54.396+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	t	f
4014	humiditys	湿度	Output	\N			1	\N	\N	%		2019-07-03 11:38:52.039+08	2019-07-16 11:36:50.39+08	418a4cf1-2537-4f0c-ad3d-d7752a5957a8	2	t	f
2116	rainfall	雨量	Output	\N			3	\N	\N	mm/min		2018-04-03 09:11:19.003+08	2019-07-18 17:06:49.809+08	dd2a1a9e-0e3e-4ed3-b133-f9f7ebd0cd91	2	t	f
4042	initCons	Initial consumption	Variable	\N		0	2	999999999999999	-999999999999999	kWh	The initial consumption	2019-07-15 11:52:24.987+08	2019-07-17 16:04:38.599+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	2	f	t
4016	state	State	Output	\N	0,1		0				State of plug	2019-07-06 16:55:42.757+08	2019-07-15 11:43:06.951+08	bef735a7-a116-4448-8c98-c27e6f83fab2	4	t	f
4043	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 13:31:50.1+08	2019-07-15 13:31:50.1+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	5	t	f
4044	state	State	Output	\N	0,1	\N	\N	\N	\N		State of Door#1	2019-07-15 13:32:17.032+08	2019-07-15 13:32:17.032+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	4	t	f
4045	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 13:33:11.284+08	2019-07-15 13:34:12.622+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	5	t	f
4046	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 13:37:17.521+08	2019-07-15 13:37:17.521+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	5	t	f
4047	state	State	Output	\N	0,1		0					2019-07-15 13:37:56.035+08	2019-07-15 13:38:11.204+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	4	t	f
4048	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 13:38:33.171+08	2019-07-15 13:38:40.744+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	5	t	f
4049	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 13:53:07.475+08	2019-07-15 13:53:07.475+08	eb07419e-1090-4ef1-87af-c365af7a63d1	5	t	f
4050	temperature	Temperature	Output	\N	\N	\N	\N	\N	\N	℃	Temperature of chill	2019-07-15 13:54:07.049+08	2019-07-15 13:54:07.049+08	eb07419e-1090-4ef1-87af-c365af7a63d1	5	t	f
4051	clusterId	Cluster ID	Constant	\N	\N	msTemperatureMeasurement	\N	\N	\N			2019-07-15 13:55:44.447+08	2019-07-15 13:55:44.447+08	eb07419e-1090-4ef1-87af-c365af7a63d1	5	t	f
4052	clusterId	Cluster ID	Constant	\N	\N	msTemperatureMeasurement	\N	\N	\N			2019-07-15 14:04:02.923+08	2019-07-15 14:04:02.923+08	1961c932-469f-4e15-8dee-38cf1f837d35	5	t	f
4053	temperature	Temperature	Output	\N	\N	\N	\N	\N	\N	℃	Temperature of chill	2019-07-15 14:04:02.928+08	2019-07-15 14:04:02.928+08	1961c932-469f-4e15-8dee-38cf1f837d35	5	t	f
4054	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:04:02.934+08	2019-07-15 14:04:02.934+08	1961c932-469f-4e15-8dee-38cf1f837d35	5	t	f
4055	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 14:04:02.943+08	2019-07-15 14:04:02.943+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	5	t	f
4056	state	State	Output	\N	0,1		0					2019-07-15 14:04:02.946+08	2019-07-15 14:04:02.946+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	4	t	f
4057	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:04:02.95+08	2019-07-15 14:04:02.95+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	5	t	f
4058	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 14:04:02.959+08	2019-07-15 14:04:02.959+08	f3177595-13d3-468c-8451-4677a7f3a0ef	5	t	f
4059	state	State	Output	\N	0,1	\N	\N	\N	\N		State of Door#1	2019-07-15 14:04:02.964+08	2019-07-15 14:04:02.964+08	f3177595-13d3-468c-8451-4677a7f3a0ef	4	t	f
4060	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:04:02.967+08	2019-07-15 14:04:02.967+08	f3177595-13d3-468c-8451-4677a7f3a0ef	5	t	f
4061	ieeeAddr	Zigbee IEEE Addres	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:06:27.149+08	2019-07-15 14:06:27.149+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	5	t	f
4062	state	State	Output	\N	0,1	\N	\N	\N	\N		State of door#3	2019-07-15 14:06:53.67+08	2019-07-15 14:06:53.67+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	4	t	f
4063	clusterId	Cluster ID	Constant	\N	\N	genOnOff	\N	\N	\N			2019-07-15 14:07:15.513+08	2019-07-15 14:07:15.513+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	5	t	f
4064	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:26:53.651+08	2019-07-15 14:26:53.651+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	5	t	f
4065	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:27:19.854+08	2019-07-15 14:27:19.854+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	5	t	f
4067	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:28:03.368+08	2019-07-15 14:28:03.368+08	f3177595-13d3-468c-8451-4677a7f3a0ef	5	t	f
4077	capType	\N	Constant	\N		TEMPERATURE	0			\N		2019-07-15 14:29:48.586+08	2019-07-15 14:30:05.88+08	eb07419e-1090-4ef1-87af-c365af7a63d1	5	t	f
4078	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:30:39.744+08	2019-07-15 14:30:39.744+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	5	t	f
4079	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:30:57.777+08	2019-07-15 14:30:57.777+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	5	t	f
4080	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:31:13.676+08	2019-07-15 14:31:13.676+08	69b276a3-aa72-4720-9591-cd371e95b7de	5	t	f
4081	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 14:31:13.691+08	2019-07-15 14:31:13.691+08	69b276a3-aa72-4720-9591-cd371e95b7de	5	t	f
4082	state	State	Output	\N	0,1	\N	\N	\N	\N		State of Door#1	2019-07-15 14:31:13.696+08	2019-07-15 14:31:13.696+08	69b276a3-aa72-4720-9591-cd371e95b7de	4	t	f
4083	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:31:13.7+08	2019-07-15 14:31:13.7+08	69b276a3-aa72-4720-9591-cd371e95b7de	5	t	f
4084	capType	\N	Constant	\N	\N	DOOR	\N	\N	\N	\N		2019-07-15 14:31:13.718+08	2019-07-15 14:31:13.718+08	578138e6-3a9c-4db2-bbf9-addfef22c072	5	t	f
4085	clusterId	Cluster ID	Constant	\N		genOnOff	0					2019-07-15 14:31:13.722+08	2019-07-15 14:31:13.722+08	578138e6-3a9c-4db2-bbf9-addfef22c072	5	t	f
4086	state	State	Output	\N	0,1		0					2019-07-15 14:31:13.726+08	2019-07-15 14:31:13.726+08	578138e6-3a9c-4db2-bbf9-addfef22c072	4	t	f
4087	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:31:13.729+08	2019-07-15 14:31:13.729+08	578138e6-3a9c-4db2-bbf9-addfef22c072	5	t	f
4066	capType		Constant	\N		TEMPERATURE	0					2019-07-15 14:27:45.167+08	2019-08-13 16:53:08.036+08	1961c932-469f-4e15-8dee-38cf1f837d35	5	t	f
4088	capType	\N	Constant	\N		TEMPERATURE	0			\N		2019-07-15 14:31:13.739+08	2019-07-15 14:31:13.739+08	959bf8b8-23eb-48da-8362-90d4978c9406	5	t	f
4089	clusterId	Cluster ID	Constant	\N	\N	msTemperatureMeasurement	\N	\N	\N			2019-07-15 14:31:13.743+08	2019-07-15 14:31:13.743+08	959bf8b8-23eb-48da-8362-90d4978c9406	5	t	f
4090	temperature	Temperature	Output	\N	\N	\N	\N	\N	\N	℃	Temperature of chill	2019-07-15 14:31:13.746+08	2019-07-15 14:31:13.746+08	959bf8b8-23eb-48da-8362-90d4978c9406	5	t	f
4091	ieeeAddr	Zigbee IEEE Address	Variable	\N	\N		\N	\N	\N	\N		2019-07-15 14:31:13.75+08	2019-07-15 14:31:13.75+08	959bf8b8-23eb-48da-8362-90d4978c9406	5	t	f
3105	pressure	压强	Output	\N			2	\N	\N	Kpa		2019-01-04 15:55:31.076+08	2019-07-16 10:36:49.369+08	becc893e-7135-41ab-8e23-10257bd06437	2	t	f
4094	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-07-18 08:51:18.629+08	2019-07-18 08:51:18.629+08	2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034	2	t	f
4095	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2019-07-18 08:55:34.735+08	2019-07-18 08:55:34.735+08	2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034	2	t	f
4092	physicalvalue	受力	Output	\N			3	\N	\N	KN		2019-07-16 17:46:08.893+08	2019-07-18 08:59:19.557+08	2a2fd581-a5d0-4bfd-b7ab-2c2d504bc034	2	t	f
4101	deltaKey		Constant	\N		consumption	0					2019-07-20 11:28:40.555+08	2019-07-20 11:28:48.468+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	5	t	f
4100	delta	delta	Variable	\N		\N	0	100000	0	\N		2019-07-20 11:28:16.446+08	2019-07-20 11:29:46.74+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	1	f	f
4099	interval	上报间隔控制	Variable	\N		\N	0	36000	0	s		2019-07-20 10:53:20.006+08	2019-07-20 11:30:03.224+08	2d4b1549-a50d-4ec2-80a2-600f6eb2efa1	1	f	f
4102	level	液位	Output	\N	\N	\N	3	\N	\N	mm		2019-07-22 16:03:58.296+08	2019-07-22 16:03:58.296+08	c8050ea0-29fc-4675-9198-3a4c438aafff	2	t	f
4103	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2019-07-22 16:04:16.914+08	2019-07-22 16:04:16.914+08	c8050ea0-29fc-4675-9198-3a4c438aafff	2	t	f
4104	pressure	压力	Output	\N	\N	\N	3	\N	\N	Pa		2019-07-22 16:05:41.388+08	2019-07-22 16:05:41.388+08	c8050ea0-29fc-4675-9198-3a4c438aafff	2	t	f
4144	threshold2		Variable	\N	\N	8	2	99	-99			2019-08-01 14:18:53.956+08	2019-08-01 14:18:53.956+08	eb07419e-1090-4ef1-87af-c365af7a63d1	2	f	f
4106	accelerationy	加速度y	Output	\N	\N	\N	2	\N	\N	g		2019-07-23 09:37:26.958+08	2019-07-23 09:37:26.958+08	e36b625f-b336-45f2-a421-47deb3ccff39	2	t	f
4105	accelerationx	加速度x	Output	\N			2	\N	\N	g		2019-07-23 09:35:49.175+08	2019-07-23 09:37:37.519+08	e36b625f-b336-45f2-a421-47deb3ccff39	2	t	f
4107	accelerationz	加速度z	Output	\N	\N	\N	2	\N	\N	g		2019-07-23 09:38:04.119+08	2019-07-23 09:38:04.119+08	e36b625f-b336-45f2-a421-47deb3ccff39	2	t	f
4108	force	压力	Output	\N	\N	\N	1	\N	\N	kPa		2019-07-23 11:14:51.019+08	2019-07-23 11:14:51.019+08	7b76cdc3-1393-474a-9868-b48a35519a53	2	t	f
4109	temperature	温度	Output	\N			4	70	-25	℃		2019-07-23 21:12:29.144+08	2019-07-23 21:13:03.548+08	97d28bd7-4126-40cd-aff4-ba6db048ae15	2	t	f
4110	anglex	X方向角度	Output	\N			4	30	-30	°		2019-07-23 21:13:23.315+08	2019-07-23 21:14:22.542+08	97d28bd7-4126-40cd-aff4-ba6db048ae15	2	t	f
4111	angley	Y方向角度	Output	\N			4	30	-30	°		2019-07-23 21:14:08.813+08	2019-07-23 21:14:31.229+08	97d28bd7-4126-40cd-aff4-ba6db048ae15	2	t	f
4127	currentC	Current C	Output	\N			3	\N	\N	A		2019-07-26 16:37:56.926+08	2019-07-26 18:52:08.64+08	4801d3ef-12b9-41d2-bea8-f20ddeb90568	2	t	f
4112	pressure	压强	Output	\N			2	\N	\N	Kpa		2019-07-23 21:18:41.914+08	2019-07-23 21:19:43.671+08	82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958	2	t	f
4113	temperature	温度	Output	\N			2	\N	\N	℃		2019-07-23 21:19:30.559+08	2019-07-23 21:19:47.81+08	82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958	2	t	f
4114	length	位移	Output	\N			5	\N	\N	mm		2019-07-23 21:24:58.572+08	2019-07-23 21:25:07.509+08	9f777c35-b431-4a11-aeac-979ad0a3f1ac	2	t	f
4115	humidity	湿度	Output	\N			2	\N	\N	%RH		2019-07-23 21:31:04.351+08	2019-07-23 21:31:16.851+08	911e12ca-0961-481e-bebb-0201c63f0cd2	2	t	f
4116	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-07-23 21:31:33.893+08	2019-07-23 21:31:33.893+08	911e12ca-0961-481e-bebb-0201c63f0cd2	2	t	f
4117	ssagee	液位	Output	\N	\N	\N	4	\N	\N	mm		2019-07-23 22:26:31.64+08	2019-07-23 22:26:31.64+08	82905dcc-a3ca-4ecb-b0d3-d7e32ec6f958	2	t	f
4139	anglex	X轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-07-31 16:05:01.065+08	2019-07-31 16:05:01.065+08	e7674511-d506-492f-9321-966a9efe6971	2	t	f
4140	angley	Y轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-07-31 16:05:31.645+08	2019-07-31 16:05:31.645+08	e7674511-d506-492f-9321-966a9efe6971	2	t	f
4118	power	Power	Output	\N			4	\N	\N			2019-07-24 18:01:23.705+08	2019-08-03 18:27:14.841+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	2	t	f
4130	powerC	Phase C power	Output	\N			4	\N	\N			2019-07-26 16:50:46.819+08	2019-08-03 18:26:57.163+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	2	t	f
4124	voltageC	Voltage C	Output	\N			1	\N	\N	V		2019-07-26 16:33:59.534+08	2019-07-26 18:51:39.528+08	37b692f8-71bc-4741-928f-5eba35682efc	2	t	f
4123	voltageB	Voltage B	Output	\N			1	\N	\N	V		2019-07-26 16:33:45.063+08	2019-07-26 18:51:42.433+08	37b692f8-71bc-4741-928f-5eba35682efc	2	t	f
4122	voltageA	Voltage A	Output	\N			1	\N	\N	V		2019-07-26 16:33:24.999+08	2019-07-26 18:51:45.454+08	37b692f8-71bc-4741-928f-5eba35682efc	2	t	f
4129	powerB	Phase B power	Output	\N			4	\N	\N			2019-07-26 16:45:37.862+08	2019-08-03 18:27:26.978+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	2	t	f
4121	initCons	Init consumption	Variable	\N		0	2	99999999999999	-9999999999999	kWh		2019-07-26 13:53:18.224+08	2019-07-26 18:52:01.397+08	98affd25-d0f7-47f2-abe9-5dc74bdfb02f	2	f	f
4126	currentB	Current B	Output	\N			3	\N	\N	A		2019-07-26 16:37:19.51+08	2019-07-26 18:52:11.003+08	4801d3ef-12b9-41d2-bea8-f20ddeb90568	2	t	f
4125	currentA	Current A	Output	\N			3	\N	\N	A		2019-07-26 16:36:58.442+08	2019-07-26 18:52:13.395+08	4801d3ef-12b9-41d2-bea8-f20ddeb90568	2	t	f
4141	anglez	Z轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-07-31 16:11:42.085+08	2019-07-31 16:11:42.085+08	e7674511-d506-492f-9321-966a9efe6971	2	t	f
4128	powerA	Phase A power	Output	\N			4	\N	\N			2019-07-26 16:45:08.895+08	2019-08-03 18:27:10.825+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	2	t	f
4119	physicalvalue		Output	\N			5	\N	\N			2019-07-26 11:41:33.834+08	2019-08-01 11:35:41.939+08	55c2a1eb-5dad-4181-86f8-9145d71e8077	2	t	f
4142	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 14:16:09.648+08	2019-08-01 14:16:09.648+08	8f23910e-3c7c-4113-b420-88df899c7a25	3	f	f
4138	alarmCode	报警状态码	Output	\N	\N	\N	\N	1	0	\N		2019-07-31 10:17:16.715+08	2019-07-31 10:17:16.715+08	16eac313-4d5b-4b3b-960b-e3c3b7fbe450	1	t	f
4143	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 14:17:37.034+08	2019-08-01 14:17:37.034+08	eb07419e-1090-4ef1-87af-c365af7a63d1	3	f	f
4145	threshold1		Variable	\N	\N	15	2	99	-99			2019-08-01 14:19:20.311+08	2019-08-01 14:19:20.311+08	eb07419e-1090-4ef1-87af-c365af7a63d1	2	f	f
4146	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 14:19:55.684+08	2019-08-01 14:19:55.684+08	959bf8b8-23eb-48da-8362-90d4978c9406	3	f	f
4147	threshold2		Variable	\N	\N	-10	2	99	-99			2019-08-01 14:20:30.014+08	2019-08-01 14:20:30.014+08	959bf8b8-23eb-48da-8362-90d4978c9406	2	f	f
4148	threshold1		Variable	\N	\N	-5	2	99	-99			2019-08-01 14:20:47.764+08	2019-08-01 14:20:47.764+08	959bf8b8-23eb-48da-8362-90d4978c9406	2	f	f
4150	threshold2		Variable	\N		8	2	99	-99			2019-08-01 14:21:32.464+08	2019-08-01 14:23:49.603+08	1961c932-469f-4e15-8dee-38cf1f837d35	2	f	f
4151	threshold1		Variable	\N		15	2	99	-99			2019-08-01 14:21:56.651+08	2019-08-01 14:23:58.187+08	1961c932-469f-4e15-8dee-38cf1f837d35	2	f	f
4152	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:18:58.374+08	2019-08-01 15:18:58.374+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	3	f	f
4156	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:20:49.379+08	2019-08-01 15:20:49.379+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	3	f	f
4157	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:21:36.373+08	2019-08-01 15:21:36.373+08	578138e6-3a9c-4db2-bbf9-addfef22c072	3	f	f
4158	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-08-01 15:21:48.506+08	2019-08-01 15:21:48.506+08	69b276a3-aa72-4720-9591-cd371e95b7de	3	f	f
4159	id	\N	Constant	\N	\N	1	\N	\N	\N	\N		2019-08-01 15:26:03.564+08	2019-08-01 15:26:03.564+08	e8b16798-e46b-4d0f-a93b-c03757601b0c	1	t	f
4161	id	\N	Constant	\N	\N	1	\N	\N	\N	\N		2019-08-01 15:26:41.01+08	2019-08-01 15:26:41.01+08	f3177595-13d3-468c-8451-4677a7f3a0ef	1	t	f
4162	id	\N	Constant	\N	\N	2	\N	\N	\N	\N		2019-08-01 15:26:57.009+08	2019-08-01 15:26:57.009+08	0279aa9d-29eb-47eb-80ea-8bc7e0fa5541	1	t	f
4194	verdirection	垂直风向	Output	\N	\N	\N	1	\N	\N	°		2019-08-08 18:04:12.686+08	2019-08-08 18:04:12.686+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4160	id		Constant	\N		2	0					2019-08-01 15:26:21.239+08	2019-08-01 15:28:54.42+08	8792ef3b-6e91-43dc-a17b-61137d8b5734	1	t	f
4163	id	\N	Constant	\N	\N	3	\N	\N	\N	\N		2019-08-01 15:30:56.985+08	2019-08-01 15:30:56.985+08	cfb789ad-d761-4e5c-9f64-b9f87161c6a0	1	t	f
4164	id	\N	Constant	\N	\N	1	\N	\N	\N	\N		2019-08-01 15:31:14.028+08	2019-08-01 15:31:14.028+08	69b276a3-aa72-4720-9591-cd371e95b7de	1	t	f
4165	id	\N	Constant	\N	\N	2	\N	\N	\N	\N		2019-08-01 15:31:26.417+08	2019-08-01 15:31:26.417+08	578138e6-3a9c-4db2-bbf9-addfef22c072	1	t	f
4154	alert		Variable	\N		false	0					2019-08-01 15:20:02.242+08	2019-08-01 15:33:21.166+08	f3177595-13d3-468c-8451-4677a7f3a0ef	3	f	f
4120	energy	Energy	Output	\N			2	\N	\N	kWh		2019-07-26 13:52:49.151+08	2019-08-03 13:06:18.844+08	98affd25-d0f7-47f2-abe9-5dc74bdfb02f	2	t	f
4166	capType		Constant	\N	\N	ENERGY	\N	\N	\N	\N		2019-08-03 13:09:13.998+08	2019-08-03 13:09:13.998+08	98affd25-d0f7-47f2-abe9-5dc74bdfb02f	5	t	f
4167	unit	\N	Constant	\N	\N	kW	\N	\N	\N	\N		2019-08-03 18:50:14.949+08	2019-08-03 18:50:14.949+08	b781fb04-d60a-46c0-9081-e7ce553bb7e3	5	t	f
649	physicalvalue	压力	Output	\N			3	6.4	0	KPa		2018-01-04 14:05:22.067+08	2019-08-05 11:36:32.824+08	cd26103f-0538-43bd-9bbd-a8b3b84e10ff	2	t	f
4169	direction	放向	Output	\N	\N	\N	\N	\N	\N			2019-08-05 14:38:24.443+08	2019-08-05 14:38:24.443+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4170	axisnum	轴数	Output	\N	\N	\N	\N	\N	\N			2019-08-05 14:38:38.951+08	2019-08-05 14:38:38.951+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4168	axieWeight	轴重	Output	\N			0			kg		2019-08-05 14:37:53.129+08	2019-08-05 14:38:51.345+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4172	cmsLength	车长	Output	\N	\N	\N	\N	\N	\N	cm		2019-08-05 14:39:22.763+08	2019-08-05 14:39:22.763+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4173	carType	车辆类型	Output	\N	\N	\N	\N	\N	\N			2019-08-05 14:40:01.389+08	2019-08-05 14:40:01.389+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4174	totalBase	总轴距	Output	\N	\N	\N	\N	\N	\N	cm		2019-08-05 14:40:25.633+08	2019-08-05 14:40:25.633+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4175	axieSpeed	轴速	Output	\N	\N	\N	\N	\N	\N	km/h		2019-08-05 14:40:54.679+08	2019-08-05 14:40:54.679+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4176	crossRoad	车道号	Output	\N	\N	\N	\N	\N	\N			2019-08-05 14:41:15.562+08	2019-08-05 14:41:15.562+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4178	licence	车牌	Output	\N	\N	\N	\N	\N	\N			2019-08-05 14:41:57.502+08	2019-08-05 14:41:57.502+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4177	overload	总重超限	Output	\N			0					2019-08-05 14:41:34.746+08	2019-08-05 14:42:06.293+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
4171	grossWeight	总重	Output	\N			0			kg		2019-08-05 14:39:07.057+08	2019-08-05 14:44:52.925+08	64576b12-36a8-4ca6-ac63-273401d692c6	5	t	f
2386	grossWeight	总重	Output	\N			0			kg		2018-07-04 16:58:46.024+08	2019-08-05 14:45:07.11+08	a3e8fc6e-6dc8-4d65-b479-4b2ee719c712	5	t	f
4180	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-08-05 18:12:12.142+08	2019-08-05 18:12:12.142+08	32f98475-6b76-4723-a2f5-b0b7aed04cf7	5	t	f
4181	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-08-06 11:01:21.441+08	2019-08-06 11:01:21.441+08	33bba333-0d20-43b4-a0e4-7dfaba4a9896	2	t	f
4182	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2019-08-06 11:02:04.907+08	2019-08-06 11:02:04.907+08	33bba333-0d20-43b4-a0e4-7dfaba4a9896	2	t	f
4183	trainXOffsets	轨道X方向偏移值	Output	\N	\N	\N	5	\N	\N	\N		2019-08-07 10:36:25.747+08	2019-08-07 10:36:25.747+08	13b1b357-66cc-467f-9f25-078c46fe28b6	2	t	f
4184	trainYOffsets	轨道Y方向偏移值	Output	\N	\N	\N	5	\N	\N			2019-08-07 10:36:51.9+08	2019-08-07 10:36:51.9+08	13b1b357-66cc-467f-9f25-078c46fe28b6	2	t	f
4185	trainZOffsets	轨道Z方向偏移值	Output	\N	\N	\N	5	\N	\N			2019-08-07 10:37:28.03+08	2019-08-07 10:37:28.03+08	13b1b357-66cc-467f-9f25-078c46fe28b6	2	t	f
4198	rainfall	雨量	Output	\N	\N	\N	2	99999999999999	-99999999999999	mm		2019-08-12 09:55:16.283+08	2019-08-12 09:55:16.283+08	f51d17c7-ad54-48ce-997c-13c1fb3ab155	2	t	f
1987	frequency	频率	Output	\N			4	2000	1000	Hz		2018-03-26 14:36:53.267+08	2019-08-12 10:58:16.979+08	053f72a5-5576-48de-baa6-a2732ff863cc	2	t	f
1985	temperature	温度	Output	\N			4			℃		2018-03-26 14:36:14.934+08	2019-08-12 11:00:23.334+08	43e14c1c-a425-4001-9886-f41df72945ea	2	t	f
4199	physicalvalue	位移	Output	\N			3	\N	\N	mm		2019-08-13 17:52:48.309+08	2019-08-14 18:12:34.479+08	f31682e1-01ba-49e5-9639-886bee03cd1b	2	t	f
4197	zdirection	z轴风速	Output	\N			1	\N	\N	m/s		2019-08-08 18:08:11.302+08	2019-08-20 14:10:58.555+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4196	ydirection	y轴风速	Output	\N			1	\N	\N	m/s		2019-08-08 18:07:37.684+08	2019-08-20 14:11:15.84+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4195	xdirection	x轴风速	Output	\N			1	\N	\N	m/s		2019-08-08 18:05:53.665+08	2019-08-20 14:11:26.532+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4192	speed	综合风速	Output	\N			1	\N	\N	m/s		2019-08-08 18:00:49.93+08	2019-08-20 15:15:28.649+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4193	direction	水平风向	Output	\N			1	\N	\N	°		2019-08-08 18:03:05.083+08	2019-08-20 15:15:40.274+08	75960822-83b9-4eb4-accd-bbccb4f4d139	2	t	f
4200	humidity	湿度	Output	\N	\N	\N	2	100	0	%RH		2019-08-22 09:17:49.225+08	2019-08-22 09:17:49.225+08	6ddff0ae-11d3-40f2-8e9c-2ddf160489d8	2	t	f
4201	temperature	温度	Output	\N			2	120	-40	℃		2019-08-22 09:18:29.503+08	2019-08-22 09:18:47.513+08	6ddff0ae-11d3-40f2-8e9c-2ddf160489d8	2	t	f
4202	frequency	频率	Output	\N			4	2000	1000	Hz		2019-08-22 11:05:02.922+08	2019-08-22 11:05:39.45+08	de5f27da-de79-4d11-a4ca-65bc1a9f178a	2	t	f
4203	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2019-08-22 11:06:13.573+08	2019-08-22 11:06:13.573+08	de5f27da-de79-4d11-a4ca-65bc1a9f178a	2	t	f
4204	physicalvalue	荷载力	Output	\N			4	105	-105	kN		2019-08-22 11:06:36.146+08	2019-08-22 11:06:53.633+08	de5f27da-de79-4d11-a4ca-65bc1a9f178a	2	t	f
4205	frequency	频率	Output	\N			3			Hz		2019-08-22 11:28:17.466+08	2019-08-22 11:28:37.717+08	bdcb0ea7-10de-4b76-80bd-c01f036ccd33	2	t	f
4206	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-08-22 11:29:08.573+08	2019-08-22 11:29:08.573+08	bdcb0ea7-10de-4b76-80bd-c01f036ccd33	2	t	f
4207	am	幅值	Output	\N			3	\N	\N	mv		2019-08-22 11:29:45.747+08	2019-08-22 11:32:07.921+08	bdcb0ea7-10de-4b76-80bd-c01f036ccd33	2	t	f
4208	physicalvalue	荷载	Output	\N			4	300	-300	kN		2019-08-22 11:32:25.972+08	2019-08-22 11:32:43.58+08	bdcb0ea7-10de-4b76-80bd-c01f036ccd33	2	t	f
2240	am	幅值	Output	\N			3	\N	\N	mv		2018-04-16 16:01:22.168+08	2019-08-22 11:36:38.989+08	2f72ef62-1d3b-4c4b-9308-5abb39a919d0	2	t	f
4209	pressure	压强	Output	\N			3	\N	\N	kPa		2019-08-22 11:37:59.132+08	2019-08-22 11:38:07.93+08	6545a9cc-c2d6-4477-ba72-3db5a96d2ad8	2	t	f
4211	length	位移	Output	\N			5	10	0	mm		2019-08-22 11:42:08.251+08	2019-08-22 11:42:26.586+08	8f177fbf-0fed-4306-a80b-6a2751f5fb9b	2	t	f
4212	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N			2019-08-22 11:52:30.278+08	2019-08-22 11:52:30.278+08	0f06e6d2-1ad3-4cad-92a2-c3a23e36206b	5	t	f
4213	length	位移	Output	\N			5	\N	\N	mm		2019-08-22 14:09:52.804+08	2019-08-22 14:10:05.469+08	451d64cc-b568-44be-bace-184e24b4e827	2	t	f
4225	load	Load	Output	\N			2	\N	\N			2019-08-30 12:07:49.488+08	2019-09-20 11:20:12.698+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	2	t	f
4214	angley	角度	Output	\N			2	30	-30	°		2019-08-22 14:18:14.552+08	2019-08-22 14:18:39.205+08	616814a6-1aac-4201-b9cd-8164fd2198f0	2	t	f
4215	pressure	压力	Output	\N			3	\N	\N	kPa		2019-08-22 14:21:13.272+08	2019-08-22 14:21:23.746+08	84e805aa-df66-43bf-9705-01e6b6c1e741	2	t	f
4216	rainfall	雨量	Output	\N	\N	\N	1	\N	\N	mm/h		2019-08-22 14:29:15.796+08	2019-08-22 14:29:15.796+08	9fe86237-419a-40b2-890a-00e0bb8d4af7	2	t	f
4217	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	g		2019-08-22 14:36:49.545+08	2019-08-22 14:36:49.545+08	aa7aaf91-1e54-411a-b174-22ee7c40c07e	5	t	f
4218	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2019-08-27 15:43:12.985+08	2019-08-27 15:43:12.985+08	5af22086-4fb6-4d39-b439-f1bfb44b2bcf	2	t	f
4219	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2019-08-27 15:43:12.996+08	2019-08-27 15:43:12.996+08	5af22086-4fb6-4d39-b439-f1bfb44b2bcf	2	t	f
4220	physicalvalue	应力	Output	\N	\N	\N	\N	\N	\N	kN		2019-08-27 15:43:13.013+08	2019-08-27 15:43:13.013+08	5af22086-4fb6-4d39-b439-f1bfb44b2bcf	2	t	f
4221	physicalvalue	雨量	Output	\N	\N	\N	2	\N	\N	mm		2019-08-27 16:37:58.564+08	2019-08-27 16:37:58.564+08	7d5f863e-8fad-4de4-a417-48b29d1df1de	2	t	f
4230	rxbytes	Rx	Output	\N			0	\N	\N			2019-08-30 12:09:20.75+08	2019-09-20 11:20:43.831+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	1	t	f
4231	txbytes	Tx	Output	\N			0	\N	\N			2019-08-30 12:09:27.838+08	2019-09-20 11:20:52.642+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	1	t	f
4226	memfree	Free Memory	Output	\N	\N	\N	2	\N	\N			2019-08-30 12:08:20.354+08	2019-08-30 12:08:20.354+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	2	t	f
4224	board_temp	Board Temperature	Output	\N			2	\N	\N	℃		2019-08-30 12:07:03.582+08	2019-08-30 13:59:40.962+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	2	t	f
4223	cpu_temp	CPU Temperature	Output	\N			2	\N	\N	℃		2019-08-30 12:06:43.075+08	2019-08-30 14:00:02.969+08	2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13	2	t	f
4232	z	Z位置	Output	\N	\N	\N	4	\N	\N	mm		2019-09-04 13:53:37.96+08	2019-09-04 13:53:37.96+08	5664cb08-5e57-46c1-ac71-23220613639c	2	t	f
4233	y	Y位置	Output	\N	\N	\N	4	\N	\N	mm		2019-09-04 13:53:37.969+08	2019-09-04 13:53:37.969+08	5664cb08-5e57-46c1-ac71-23220613639c	2	t	f
4234	x	X位置	Output	\N	\N	\N	4	\N	\N	mm		2019-09-04 13:53:37.974+08	2019-09-04 13:53:37.974+08	5664cb08-5e57-46c1-ac71-23220613639c	2	t	f
4235	pressure	压强	Output	\N			2	\N	\N	Kpa		2019-09-04 15:12:42.061+08	2019-09-04 15:13:03.074+08	034ff83b-34b0-48a5-9ccb-774a844901f8	2	t	f
4236	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-04 15:14:31.48+08	2019-09-04 15:14:31.48+08	034ff83b-34b0-48a5-9ccb-774a844901f8	2	t	f
4238	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-04 15:23:19.005+08	2019-09-04 15:23:19.005+08	58baaabd-502a-4f68-a62d-c0cfeddd7ec4	2	t	f
4237	length	距离	Output	\N			2	\N	\N	m		2019-09-04 15:22:57.264+08	2019-09-20 16:46:35.837+08	58baaabd-502a-4f68-a62d-c0cfeddd7ec4	2	t	f
4240	pressure	压强	Output	\N	\N	\N	2	\N	\N	Kpa		2019-09-04 15:48:38.14+08	2019-09-04 15:48:38.14+08	cf8445c6-e70a-419f-8a2f-ba7f44896604	2	t	f
4241	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-04 16:09:01.867+08	2019-09-04 16:09:01.867+08	a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab	2	t	f
4242	length	距离	Output	\N	\N	\N	2	\N	\N	mm		2019-09-04 16:09:19.888+08	2019-09-04 16:09:19.888+08	a7d88dec-6a2c-4ab2-8b2c-864f8c9a5eab	2	t	f
4239	pressure	压强	Output	\N			2	\N	\N	Kpa		2019-09-04 15:40:23.392+08	2019-09-04 16:15:59.85+08	e52f95e1-8fac-40af-a49a-baad70dab906	2	t	f
4243	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2019-09-09 14:46:43.713+08	2019-09-09 14:46:43.713+08	fad3ba62-b4d5-4a90-b1ec-8ca32c7ba7ac	2	t	f
4244	temperature	温度	Output	\N	\N	\N	1	\N	\N	\N		2019-09-09 14:47:28.79+08	2019-09-09 14:47:28.79+08	bf758132-c5a1-4622-a2a7-38359c9cc0c5	2	t	f
4246	angley	y轴角度	Output	\N	\N	\N	1	\N	\N	°		2019-09-10 14:47:17.493+08	2019-09-10 14:47:17.493+08	5dea6ab3-3969-4e41-804f-eff249d5d9ce	2	t	f
4247	anglex	x轴角度	Output	\N	\N	\N	1	\N	\N	°		2019-09-10 14:47:17.498+08	2019-09-10 14:47:17.498+08	5dea6ab3-3969-4e41-804f-eff249d5d9ce	2	t	f
4245	temperature	温度	Output	\N			1	\N	\N	℃		2019-09-10 14:47:17.485+08	2019-09-10 14:47:31.228+08	5dea6ab3-3969-4e41-804f-eff249d5d9ce	2	t	f
4257	pressure	压强	Output	\N			3	\N	\N	kPa		2019-09-10 16:52:37.749+08	2019-09-10 16:52:37.749+08	7cb252c1-fad7-4874-bc56-417537d2d35d	2	t	f
4258	pressure	压强	Output	\N			3	\N	\N	kPa		2019-09-10 16:52:37.76+08	2019-09-10 16:52:37.76+08	f1841b24-8182-4a14-ae68-c0bad62cec3f	2	t	f
4259	pressure	压强	Output	\N			3	\N	\N	kPa		2019-09-10 16:52:37.769+08	2019-09-10 16:52:37.769+08	10c5b435-17c1-49f9-b45c-6a61c35f8071	2	t	f
4260	length	位移	Output	\N	\N	\N	2	\N	\N	m		2019-09-11 10:15:40.129+08	2019-09-11 10:15:40.129+08	7a7c3f51-9057-44b5-b7e7-ea9b73c89a50	2	t	f
4261	humidity	土壤湿度	Output	\N	\N	\N	2	\N	\N	%VOL		2019-09-11 11:36:46.278+08	2019-09-11 11:36:46.278+08	799b57ce-6f05-46b8-8d02-8b0e71997270	2	t	f
4262	temperature	土壤温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-11 11:36:46.572+08	2019-09-11 11:36:46.572+08	799b57ce-6f05-46b8-8d02-8b0e71997270	2	t	f
4263	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-11 11:57:38.687+08	2019-09-11 11:57:38.687+08	1fdc974b-f062-45cb-910f-13b5a193e084	2	t	f
4264	pressure	气压	Output	\N	\N	\N	2	\N	\N	kpa		2019-09-11 11:57:38.693+08	2019-09-11 11:57:38.693+08	1fdc974b-f062-45cb-910f-13b5a193e084	2	t	f
4265	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2019-09-11 11:57:38.698+08	2019-09-11 11:57:38.698+08	1fdc974b-f062-45cb-910f-13b5a193e084	2	t	f
4269	am	幅值	Output	\N			4	\N	\N	mv		2019-09-16 13:50:25.129+08	2019-09-16 13:56:40.26+08	fdd4dd73-2235-45a2-98b3-c7838697717c	2	t	f
4270	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 13:57:07.505+08	2019-09-16 13:57:07.505+08	ba74ef0e-3ec4-4203-9d65-17906c8f64d1	2	t	f
4271	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 13:57:48.352+08	2019-09-16 13:57:48.352+08	82a15a43-5463-4d67-88ea-0a816235bd70	2	t	f
4272	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 13:58:04.791+08	2019-09-16 13:58:04.791+08	4f92b0e6-a618-4221-8c58-169247d88bd0	2	t	f
4273	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 13:59:54.536+08	2019-09-16 13:59:54.536+08	de5f27da-de79-4d11-a4ca-65bc1a9f178a	2	t	f
4274	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 14:00:08.473+08	2019-09-16 14:00:08.473+08	053f72a5-5576-48de-baa6-a2732ff863cc	2	t	f
4275	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 14:00:23.584+08	2019-09-16 14:00:23.584+08	43e14c1c-a425-4001-9886-f41df72945ea	2	t	f
4276	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 14:01:02.259+08	2019-09-16 14:01:02.259+08	6c75e8aa-7e92-4611-8962-1c79a7ba9ef2	2	t	f
4277	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2019-09-16 14:01:19.931+08	2019-09-16 14:01:19.931+08	f75af319-b305-463e-a3dc-78df902b61ef	2	t	f
4281	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-16 16:53:44.249+08	2019-09-16 16:53:44.249+08	b57f384f-11d7-499f-8e6f-5bcfbc054334	2	t	f
4282	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2019-09-16 16:54:17.248+08	2019-09-16 16:54:17.248+08	b57f384f-11d7-499f-8e6f-5bcfbc054334	2	t	f
4283	angleY	角度Y	Output	\N	\N	\N	4	\N	\N	\N		2019-09-17 09:37:05.908+08	2019-09-17 09:37:05.908+08	7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6	2	t	f
4284	angleX	角度X	Output	\N	\N	\N	4	\N	\N			2019-09-17 09:38:01.729+08	2019-09-17 09:38:01.729+08	7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6	2	t	f
4285	power	电压	Output	\N	\N	\N	4	\N	\N			2019-09-17 09:38:28.179+08	2019-09-17 09:38:28.179+08	7915bd50-f8d3-4c3b-b9a6-fa1fe10f00e6	2	t	f
4286	voltage	电压	Output	\N	\N	\N	2	\N	\N	v		2019-09-17 18:08:42.727+08	2019-09-17 18:08:42.727+08	1515cbb4-bda7-45b0-84c9-dedf0de93039	2	t	f
4287	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-18 11:53:33.581+08	2019-09-18 11:53:33.581+08	589695ad-b029-4c5e-9425-4946e80f3fb6	2	t	f
4288	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-18 11:54:13.104+08	2019-09-18 11:54:13.104+08	589695ad-b029-4c5e-9425-4946e80f3fb6	2	t	f
4289	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-18 11:56:41.659+08	2019-09-18 11:56:41.659+08	370eb26a-f879-4a01-a515-1b20a92c80f6	2	t	f
4290	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-18 11:57:09.474+08	2019-09-18 11:57:09.474+08	370eb26a-f879-4a01-a515-1b20a92c80f6	2	t	f
4291	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-18 15:36:40.65+08	2019-09-18 15:36:40.65+08	1515cbb4-bda7-45b0-84c9-dedf0de93039	2	t	f
4292	speed	风速	Output	\N			3	\N	\N	m/s		2019-09-19 12:42:35.358+08	2019-09-19 12:42:41.973+08	c90e6cc1-21a1-44ce-9ab1-77c8808b3fe2	2	t	f
4293	direction	风向	Output	\N			3	\N	\N	°		2019-09-19 16:41:50.834+08	2019-09-19 16:42:00.656+08	ef5fc14d-bace-4e50-a536-81112feb65a8	2	t	f
2283	length	液位	Output	\N			1			mm		2018-05-17 13:55:17.799+08	2019-09-23 09:08:20.841+08	5451cf1c-6aec-416c-9e9c-de8d9281110c	2	t	f
4295	physicalvalue2	应变相对值	Output	\N	\N	\N	2	\N	\N	εμ		2019-09-24 11:35:40.433+08	2019-09-24 11:35:40.433+08	1155c110-625f-47ac-b8bb-f85733b50122	2	t	f
4297	physicalvalue2	应变相对值	Output	\N	\N	\N	2	\N	\N	εμ		2019-09-24 11:35:42.997+08	2019-09-24 11:35:42.997+08	dd622fcd-0936-4ede-855b-50f5439f0fe1	2	t	f
4294	physicalvalue1	应变绝对值	Output	\N			2	\N	\N	εμ		2019-09-24 11:35:40.166+08	2019-09-24 11:36:51.805+08	1155c110-625f-47ac-b8bb-f85733b50122	2	t	f
4296	physicalvalue1	应变绝对值	Output	\N			2	\N	\N	εμ		2019-09-24 11:35:42.705+08	2019-09-24 11:38:26.118+08	dd622fcd-0936-4ede-855b-50f5439f0fe1	2	t	f
4298	physicalvalue1	应变绝对值	Output	\N	\N	\N	2	\N	\N	εμ		2019-09-24 11:44:07.136+08	2019-09-24 11:44:07.136+08	35c6a683-69d3-43c9-af6e-ac9c72bab707	2	t	f
4299	physicalvalue2	应变相对值	Output	\N	\N	\N	2	\N	\N	εμ		2019-09-24 11:44:07.142+08	2019-09-24 11:44:07.142+08	35c6a683-69d3-43c9-af6e-ac9c72bab707	2	t	f
4300	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2019-09-24 11:44:07.145+08	2019-09-24 11:44:07.145+08	35c6a683-69d3-43c9-af6e-ac9c72bab707	2	t	f
4304	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2019-09-24 11:49:24.13+08	2019-09-24 11:49:24.13+08	d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942	2	t	f
4305	physicalvalue1	应变绝对值	Output	\N	\N	\N	1	\N	\N	εμ		2019-09-24 11:49:24.135+08	2019-09-24 11:49:24.135+08	d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942	2	t	f
4306	physicalvalue2	应变相对值	Output	\N	\N	\N	1	\N	\N	εμ		2019-09-24 11:49:24.14+08	2019-09-24 11:49:24.14+08	d08e3d1f-ce1b-4f62-a2b7-0acb0e48a942	2	t	f
4310	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-25 10:49:31.385+08	2019-09-25 10:49:31.385+08	806e534e-417f-4802-a29d-23edbe5ac02d	2	t	f
4311	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-25 10:49:31.39+08	2019-09-25 10:49:31.39+08	806e534e-417f-4802-a29d-23edbe5ac02d	2	t	f
4313	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-25 11:07:08.056+08	2019-09-25 11:07:08.056+08	8dc2cfaa-524f-4b62-b655-1061f1a863ff	2	t	f
4315	physicalvalue	裂缝	Output	\N			2	\N	\N	mm		2019-09-25 11:07:08.069+08	2019-09-25 11:07:46.627+08	8dc2cfaa-524f-4b62-b655-1061f1a863ff	2	t	f
4312	physicalvalue	压力	Output	\N			2	\N	\N	kpa		2019-09-25 10:49:31.394+08	2019-09-25 11:11:28.174+08	806e534e-417f-4802-a29d-23edbe5ac02d	2	t	f
4316	physicalvalue	压力	Output	\N	\N	\N	2	\N	\N	kpa		2019-09-25 11:19:02.079+08	2019-09-25 11:19:02.079+08	804133e0-c4a4-441e-acb9-a504734bbd62	2	t	f
4317	physicalvalue	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-25 11:24:05.389+08	2019-09-25 11:24:05.389+08	1bcbd000-415e-460a-a4f2-63d8f232bbf6	2	t	f
4318	physicalvalue	含水率	Output	\N	\N	\N	2	\N	\N	%		2019-09-25 11:32:47.41+08	2019-09-25 11:32:47.41+08	d9ea813b-d066-472d-b08e-2436f6520e9f	2	t	f
4321	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-25 11:51:56.97+08	2019-09-25 11:51:56.97+08	a58243c4-2874-46f4-86b9-bc864f203eec	2	t	f
4322	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N			2019-09-25 11:51:56.979+08	2019-09-25 11:51:56.979+08	a58243c4-2874-46f4-86b9-bc864f203eec	2	t	f
4323	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-25 11:54:59.653+08	2019-09-25 11:54:59.653+08	3d535ccc-ec09-44f8-b278-5e93d4ff79ae	2	t	f
4324	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-25 11:54:59.66+08	2019-09-25 11:54:59.66+08	3d535ccc-ec09-44f8-b278-5e93d4ff79ae	2	t	f
4325	physicalvalue	压力	Output	\N	\N	\N	2	\N	\N			2019-09-25 11:54:59.666+08	2019-09-25 11:54:59.666+08	3d535ccc-ec09-44f8-b278-5e93d4ff79ae	2	t	f
4347	displacement	位移	Output	\N			5	\N	\N	mm		2019-09-29 17:58:51.061+08	2020-04-14 14:11:17.59+08	f34514f6-cca7-4baa-89e2-d57be4bd26e2	2	t	f
4326	voltage_ratio	电压比值	Output	\N	\N	\N	2	\N	\N	\N		2019-09-25 17:09:56.748+08	2019-09-25 17:09:56.748+08	88ec5756-da5e-4fa0-b882-39727baf501b	2	t	f
4327	voltage_ratio	电压比值	Output	\N	\N	\N	2	\N	\N	\N		2019-09-25 17:12:20.757+08	2019-09-25 17:12:20.757+08	a58243c4-2874-46f4-86b9-bc864f203eec	2	t	f
4328	voltage_ratio	电压比值	Output	\N	\N	\N	2	\N	\N	\N		2019-09-25 17:13:37.234+08	2019-09-25 17:13:37.234+08	22da5422-3017-46d1-b154-701f9a128e3c	2	t	f
4329	temperature	温度	Output	\N	\N	\N	2	\N	\N			2019-09-25 17:16:37.679+08	2019-09-25 17:16:37.679+08	22da5422-3017-46d1-b154-701f9a128e3c	2	t	f
4330	physicalvalue	应变	Output	\N			2	\N	\N	με		2019-09-25 17:17:25.754+08	2019-09-25 17:18:06.763+08	22da5422-3017-46d1-b154-701f9a128e3c	2	t	f
4331	voltage_ratio	电压比	Output	\N	\N	\N	2	\N	\N	\N		2019-09-25 17:25:19.276+08	2019-09-25 17:25:19.276+08	f12659ce-b28d-4602-a33a-879eedbbbcaa	2	t	f
4332	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-25 17:25:19.281+08	2019-09-25 17:25:19.281+08	f12659ce-b28d-4602-a33a-879eedbbbcaa	2	t	f
4333	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N	με		2019-09-25 17:25:19.285+08	2019-09-25 17:25:19.285+08	f12659ce-b28d-4602-a33a-879eedbbbcaa	2	t	f
4334	anglex	X轴角度	Output	\N	\N	\N	4	\N	\N	°		2019-09-29 11:29:54.098+08	2019-09-29 11:29:54.098+08	c1c93d31-aef7-48fb-bccc-f3f76ec1689a	2	t	f
4335	angley	Y轴角度	Output	\N	\N	\N	4	\N	\N	°		2019-09-29 11:30:40.283+08	2019-09-29 11:30:40.283+08	c1c93d31-aef7-48fb-bccc-f3f76ec1689a	2	t	f
4337	Temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-09-29 13:32:55.656+08	2019-09-29 13:32:55.656+08	f3923edc-71cc-43bd-a3a5-48894181f917	2	t	f
4338	humidy	湿度	Output	\N	\N	\N	2	\N	\N	%		2019-09-29 13:33:24.513+08	2019-09-29 13:33:24.513+08	f3923edc-71cc-43bd-a3a5-48894181f917	2	t	f
4339	winddirection	风向	Output	\N	\N	\N	3	\N	\N	°		2019-09-29 13:36:25.954+08	2019-09-29 13:36:25.954+08	8a578a79-fd96-4c69-8069-99e4e77dbbf9	2	t	f
4340	windspeed	风速	Output	\N	\N	\N	3	\N	\N	m/s		2019-09-29 13:36:52.794+08	2019-09-29 13:36:52.794+08	8a578a79-fd96-4c69-8069-99e4e77dbbf9	2	t	f
4359	longitude	经度	Output	\N	\N	\N	\N	\N	\N			2019-10-09 15:37:53.901+08	2019-10-09 15:37:53.901+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4342	use_lot	剩余车位	Output	\N			0	999	0			2019-09-29 14:37:47.034+08	2019-09-29 14:38:32.493+08	b9a786ad-b6be-4aa7-9aca-43b903852ad0	1	t	f
4343	rain	雨量	Output	\N	\N	\N	2	\N	\N	mm		2019-09-29 15:43:32.684+08	2019-09-29 15:43:32.684+08	b58daded-2fb1-4ea1-a68d-bdb20b492fdf	2	t	f
4346	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-09-29 17:54:50.826+08	2019-09-29 17:54:50.826+08	15e2a325-246a-4e43-8bea-784596788377	2	t	f
4348	displacement	位移	Output	\N	\N	\N	5	\N	\N	\N		2019-09-29 18:00:07.583+08	2019-09-29 18:00:07.583+08	284b9b6d-6aaa-4ec4-a075-d2bb4817d6fe	2	t	f
4352	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-10-09 13:09:24.42+08	2019-10-09 13:09:24.42+08	c996ba97-9aa2-4102-9c84-4020cfe7bd30	2	t	f
4353	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-10-09 13:11:20.98+08	2019-10-09 13:11:20.98+08	6f7568b7-e717-4cf9-9eb4-2d7f91a8fed4	2	t	f
4355	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2019-10-09 14:21:17.732+08	2019-10-09 14:21:17.732+08	0a495f63-803f-4145-a48d-f54fa7f66d22	2	t	f
4358	bri	亮度(百分比)	Output	\N			0	100	0	%		2019-10-09 15:37:15.724+08	2019-10-09 15:37:24.989+08	0a495f63-803f-4145-a48d-f54fa7f66d22	1	t	f
4365	on	状态(1开灯,0关灯)	Output	\N	\N	\N	\N	1	0		on为1是开灯为0是关灯	2019-10-09 15:43:10.205+08	2019-10-09 15:43:10.205+08	0a495f63-803f-4145-a48d-f54fa7f66d22	1	t	f
4366	gatewayName	网关名称	Output	\N	\N	\N	\N	\N	\N			2019-10-09 15:43:38.637+08	2019-10-09 15:43:38.637+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4367	voltage	电压	Output	\N			0			V		2019-10-09 15:43:55.324+08	2019-10-09 15:50:58.378+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4368	online	在线状态(0不在线,1在线)	Output	\N			0	1	0			2019-10-09 15:44:27.428+08	2019-10-09 16:02:01.368+08	0a495f63-803f-4145-a48d-f54fa7f66d22	1	t	f
4364	pEnergy	有功电能	Output	\N			0			KW		2019-10-09 15:41:43.406+08	2019-10-09 16:02:57.563+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4362	latitude	纬度	Output	\N			0					2019-10-09 15:40:01.872+08	2019-10-09 16:03:48.38+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4363	runtime	运行时长	Output	\N			0			小时		2019-10-09 15:40:59.271+08	2019-10-09 16:03:41.605+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4357	alarm_status	告警状态	Output	\N			0	10	0			2019-10-09 15:36:50.438+08	2019-10-09 16:04:02.449+08	0a495f63-803f-4145-a48d-f54fa7f66d22	1	t	f
4369	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-10-10 10:49:24.761+08	2019-10-10 10:49:24.761+08	4b89bcb9-ce24-4016-b105-5d950bd997b0	2	t	f
4372	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N	\N		2019-10-11 14:16:26.989+08	2019-10-11 14:16:26.989+08	46632020-7139-44de-a5e8-1fa4f067df7c	2	t	f
4373	temperature	温度	Output	\N	\N	\N	2	\N	\N			2019-10-11 14:16:26.996+08	2019-10-11 14:16:26.996+08	46632020-7139-44de-a5e8-1fa4f067df7c	2	t	f
4375	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-10-14 09:45:26.538+08	2019-10-14 09:45:26.538+08	bfcf9463-f865-4f10-9aff-33066bd6f245	2	t	f
4336	angle	角度	Output	\N			4	\N	\N	°		2019-09-29 11:36:11.741+08	2019-10-15 11:09:05.357+08	3f518643-909e-45c6-b816-3cabb1fd8af9	2	t	f
4371	temperature	温度	Output	\N			3	\N	\N	℃		2019-10-11 13:28:39.383+08	2019-10-21 14:16:24.103+08	ec1d8582-b39b-4e28-a13d-0d8db91976b0	2	t	f
4370	physicalvalue	沉降	Output	\N			5	\N	\N	mm		2019-10-11 13:27:56.766+08	2019-10-21 14:16:31.136+08	ec1d8582-b39b-4e28-a13d-0d8db91976b0	2	t	f
4354	lampPoleNumber	灯杆编号	Output	\N			0			”	无	2019-10-09 14:20:39.09+08	2019-10-23 09:30:41.768+08	0a495f63-803f-4145-a48d-f54fa7f66d22	5	t	f
4341	num	总车位	Output	\N			0	999	0			2019-09-29 14:37:47.027+08	2019-10-29 10:32:05.928+08	b9a786ad-b6be-4aa7-9aca-43b903852ad0	1	t	f
4376	physicalvalue	裂缝	Output	\N	\N	\N	2	\N	\N	mm		2019-10-14 09:47:26.069+08	2019-10-14 09:47:26.069+08	15c74504-c3c8-4739-8b58-10b0bcd0e83d	2	t	f
4377	physicalvalue	应力	Output	\N	\N	\N	2	\N	\N	\N		2019-10-14 09:49:18.033+08	2019-10-14 09:49:18.033+08	d3206948-c73c-49b5-a593-473e8a6bc209	2	t	f
4378	physicalvalue	应变	Output	\N	\N	\N	2	\N	\N	\N		2019-10-14 09:52:24.129+08	2019-10-14 09:52:24.129+08	0d6f1736-a3a0-4a8b-97dd-2cafc52767b4	2	t	f
4379	physicalvalue	水位	Output	\N	\N	\N	2	\N	\N	mm		2019-10-14 11:39:41.258+08	2019-10-14 11:39:41.258+08	dc4ab80b-3b8a-4088-a468-06a078637a45	2	t	f
4380	cidCode	状态码	Output	\N	\N	\N	\N	\N	\N	\N		2019-10-14 16:04:51.844+08	2019-10-14 16:04:51.844+08	e8620f1d-ab05-40a9-ba5f-197894c20a49	1	t	f
4381	cidMessage	状态信息	Output	\N	\N	\N	\N	\N	\N			2019-10-14 16:05:25.79+08	2019-10-14 16:05:25.79+08	e8620f1d-ab05-40a9-ba5f-197894c20a49	5	t	f
4382	voltage	电压	Output	\N	\N	\N	2	\N	\N	V		2019-10-14 16:05:46.507+08	2019-10-14 16:05:46.507+08	e8620f1d-ab05-40a9-ba5f-197894c20a49	2	t	f
4383	signals	信号强度	Output	\N	\N	\N	\N	\N	\N	dBm		2019-10-14 16:06:54.436+08	2019-10-14 16:06:54.436+08	e8620f1d-ab05-40a9-ba5f-197894c20a49	2	t	f
4384	longitude	经度	Output	\N	\N	\N	\N	\N	\N	\N		2019-10-18 16:56:55.76+08	2019-10-18 16:56:55.76+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	5	t	f
4385	latitude	纬度	Output	\N	\N	\N	\N	\N	\N			2019-10-18 16:57:05.828+08	2019-10-18 16:57:05.828+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	5	t	f
4386	signal	信号强度	Output	\N	\N	\N	\N	\N	\N	db		2019-10-18 16:57:26.732+08	2019-10-18 16:57:26.732+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	1	t	f
4388	usedelectric	日用电量	Output	\N	\N	\N	\N	\N	\N	A		2019-10-18 16:59:38.482+08	2019-10-18 16:59:38.482+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	1	t	f
4389	temprature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2019-10-18 17:00:10.107+08	2019-10-18 17:00:10.107+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	2	t	f
4390	trash	垃圾量	Output	\N	\N	\N	\N	\N	\N	%		2019-10-18 17:00:56.443+08	2019-10-18 17:00:56.443+08	ff5ffe96-ab0f-4368-af0c-52020e8d2188	1	t	f
4392	user	用户名	Output	\N	\N	\N	\N	\N	\N	\N		2019-10-18 17:03:06.58+08	2019-10-18 17:03:06.58+08	1ff1e182-a5de-4d2f-bf40-72a40dbc29e6	5	t	f
4393	trashtype	垃圾类型	Output	\N	\N	\N	\N	\N	\N			2019-10-18 17:03:18.513+08	2019-10-18 17:03:18.513+08	1ff1e182-a5de-4d2f-bf40-72a40dbc29e6	5	t	f
4394	weight	投放重量	Output	\N	\N	\N	\N	\N	\N	g		2019-10-18 17:03:37.166+08	2019-10-18 17:03:37.166+08	1ff1e182-a5de-4d2f-bf40-72a40dbc29e6	1	t	f
4425	physicalvalue	压力	Output	\N			2	\N	\N	Mpa		2019-10-29 13:15:56.365+08	2019-10-30 16:08:09.986+08	b28c3db2-7ea7-4311-9b60-ccd4af997bcd	2	t	f
4397	value1	位移	Output	\N			4	999999	-999999	mm		2019-10-20 23:37:40.754+08	2019-10-21 15:24:24.619+08	15e1b52d-2e21-410c-a442-b7c480cc07bb	2	t	f
4398	physicalvalue	应力	Output	\N	\N	\N	2	\N	\N	Mpa		2019-10-22 13:47:04.727+08	2019-10-22 13:47:04.727+08	a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8	2	t	f
4399	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-10-22 13:48:51.941+08	2019-10-22 13:48:51.941+08	8d553a41-0d8b-46ae-8329-ff94e6009958	2	t	f
4402	alarmPic	异物入侵截图	Output	\N			0			\N		2019-10-22 15:12:01.675+08	2019-10-22 15:13:07.265+08	592da43b-5c27-401b-9118-c0519ecbc5b3	5	t	f
4401	alarmMsg	报警信息	Output	\N			0					2019-10-22 15:08:58.172+08	2019-10-22 16:04:07.634+08	592da43b-5c27-401b-9118-c0519ecbc5b3	1	t	f
4403	alarmRange	距离	Output	\N			0					2019-10-22 15:12:58.574+08	2019-10-22 16:04:16.961+08	592da43b-5c27-401b-9118-c0519ecbc5b3	1	t	f
4404	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2019-10-23 10:16:21.725+08	2019-10-23 10:16:21.725+08	3da2f371-f622-4f8b-b700-52af31eaa6b1	2	t	f
4405	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2019-10-23 10:16:21.73+08	2019-10-23 10:16:21.73+08	3da2f371-f622-4f8b-b700-52af31eaa6b1	2	t	f
4406	alarmSite	时间戳	Output	\N	\N	\N	\N	\N	\N	\N		2019-10-23 16:10:15.21+08	2019-10-23 16:10:15.21+08	592da43b-5c27-401b-9118-c0519ecbc5b3	5	t	f
4407	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-10-24 10:08:34.333+08	2019-10-24 10:08:34.333+08	8d553a41-0d8b-46ae-8329-ff94e6009958	2	t	f
4408	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-10-24 10:09:08.619+08	2019-10-24 10:09:08.619+08	8d553a41-0d8b-46ae-8329-ff94e6009958	2	t	f
4409	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-10-24 10:09:34.094+08	2019-10-24 10:09:34.094+08	a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8	2	t	f
4410	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-10-24 10:10:00.753+08	2019-10-24 10:10:00.753+08	a0350e1d-e615-4e4b-ad8a-ad2a9142f6e8	2	t	f
4411	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-10-24 11:23:42.802+08	2019-10-24 11:23:42.802+08	5b0c875e-50cb-493a-bb89-af4d008cc6e2	5	t	f
4412	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	g		2019-10-24 11:47:52.699+08	2019-10-24 11:47:52.699+08	ee19f59c-9bf5-436f-b3e9-3298da57448f	5	t	f
4413	k	转换系数	Variable	\N	\N	1	16	9999999	-9999999	\N		2019-10-24 11:51:03.277+08	2019-10-24 11:51:03.277+08	c12bfa47-96c4-4d82-b508-7a8dc380df18	2	t	f
4414	physicalvalue	速度	Output	\N	\N	\N	\N	\N	\N	mm/s		2019-10-24 11:51:03.284+08	2019-10-24 11:51:03.284+08	c12bfa47-96c4-4d82-b508-7a8dc380df18	5	t	f
192	oxy	溶解氧	Output	\N			2	\N	\N	mg/L		2017-09-14 19:08:55.14+08	2019-10-24 14:14:44.36+08	4a08b319-23f2-4854-ad86-755792e575d4	2	t	f
2839	turbidity	浊度	Output	\N			2	\N	\N	NTU		2018-10-31 18:21:10.59+08	2019-10-24 14:15:49.254+08	27a9d353-a3e8-4669-97b5-f467e52007c5	2	t	f
4423	length	水位	Output	\N	\N	\N	2	\N	\N	m		2019-10-29 11:01:17.73+08	2019-10-29 11:01:17.73+08	d4227f5a-828a-4fe2-80c5-bb09da246b47	2	t	f
4427	source_data	温度	Output	\N	\N	\N	4	\N	\N	\N		2019-10-30 09:10:10.168+08	2019-10-30 09:10:10.168+08	98d04a09-cee2-4b6f-8250-160a824e6e27	2	t	f
4424	physicalvalue	温度	Output	\N			2	\N	\N	℃		2019-10-29 11:07:43.381+08	2019-10-30 16:08:21.54+08	b8b3091d-39a3-4ad0-9c49-ba4a7b85538d	2	t	f
4426	physicalvalue	应力	Output	\N			2	\N	\N	Mpa		2019-10-29 13:17:34.726+08	2019-10-30 16:07:59.317+08	39cebd11-af5b-47ac-abfa-db8cef103a38	2	t	f
4433	str	str	Output	\N	\N	\N	\N	\N	\N	\N		2019-10-31 16:02:28.078+08	2019-10-31 16:02:28.078+08	24a8c155-8275-4e27-8355-01550cda1374	5	t	f
4447	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-05 09:12:10.058+08	2019-11-05 09:12:10.058+08	2943a420-80a5-4d38-a6fe-68807623c20d	2	t	f
4448	easting	X坐标	Output	\N	\N	\N	2	\N	\N	mm		2019-11-05 14:08:54.724+08	2019-11-05 14:08:54.724+08	ee5dd742-7370-4a06-89b6-d40b3c6a0446	2	t	f
4449	northing	Y坐标	Output	\N	\N	\N	2	\N	\N	mm		2019-11-05 14:10:00.123+08	2019-11-05 14:10:00.123+08	ee5dd742-7370-4a06-89b6-d40b3c6a0446	2	t	f
4450	height	Z坐标	Output	\N	\N	\N	2	\N	\N	mm		2019-11-05 14:10:36.376+08	2019-11-05 14:10:36.376+08	ee5dd742-7370-4a06-89b6-d40b3c6a0446	2	t	f
4451	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2019-11-05 14:23:14.853+08	2019-11-05 14:23:14.853+08	e6b1563f-dafa-47e5-bb75-fa29d3388298	5	t	f
4510	msg	报警信息	Output	\N	\N	\N	\N	\N	\N	\N		2019-11-07 11:18:26.102+08	2019-11-07 11:18:26.102+08	26634fa3-2b25-4428-8b50-8d4e899a0304	5	t	f
4436	xphysicalvalue	x轴角度	Output	\N			2	\N	\N	°		2019-11-01 15:08:35.379+08	2019-11-08 10:58:45.823+08	0a0eef97-0c71-486a-a1ed-fc6ff48005ec	2	t	f
4434	yphysicalvalue	y轴角度	Output	\N			2	\N	\N	°		2019-11-01 15:07:17.021+08	2019-11-08 10:59:02.404+08	0a0eef97-0c71-486a-a1ed-fc6ff48005ec	2	t	f
4513	yphysicalvalue	y方向位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-08 13:12:19.627+08	2019-11-08 13:12:19.627+08	7beea55a-7613-4d26-9003-485f6ae91791	2	t	f
4514	xphysicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-08 13:43:46.061+08	2019-11-08 13:43:46.061+08	2cfd28c0-bd76-4a55-af3e-d21b921263cc	2	t	f
4512	xphysicalvalue	x方向位移	Output	\N			2	\N	\N	mm		2019-11-08 13:12:19.619+08	2019-11-08 14:33:53.212+08	7beea55a-7613-4d26-9003-485f6ae91791	2	t	f
4515	frequency	频率	Output	\N			3	\N	\N	Hz		2019-11-09 10:08:12.295+08	2019-11-09 10:08:42.453+08	e76e23fb-b7d4-4991-8687-a3a31084ce60	2	t	f
4516	physicalvalue	水压	Output	\N			4	0.2	0	MPa		2019-11-09 10:08:55.938+08	2019-11-09 10:10:11.287+08	e76e23fb-b7d4-4991-8687-a3a31084ce60	2	t	f
4517	temperature	温度	Output	\N			2	\N	\N	℃		2019-11-09 10:11:04.848+08	2019-11-09 10:11:42.822+08	e76e23fb-b7d4-4991-8687-a3a31084ce60	2	t	f
4518	am	幅值	Output	\N			3	\N	\N	mv		2019-11-09 10:11:25.415+08	2019-11-09 10:11:50.146+08	e76e23fb-b7d4-4991-8687-a3a31084ce60	2	t	f
4519	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:13:50.621+08	2019-11-09 10:13:50.621+08	a556c96d-7976-48d5-9bb0-de9f1661654d	2	t	f
4521	temperature	温度	Output	\N			2	\N	\N	℃		2019-11-09 10:14:57.517+08	2019-11-09 10:15:12.541+08	a556c96d-7976-48d5-9bb0-de9f1661654d	2	t	f
4523	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:17:53.051+08	2019-11-09 10:17:53.051+08	8ef82507-140e-4675-8de3-21d0d91759a0	2	t	f
4524	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:18:23.96+08	2019-11-09 10:18:23.96+08	8ef82507-140e-4675-8de3-21d0d91759a0	2	t	f
4525	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:18:45.335+08	2019-11-09 10:18:45.335+08	8ef82507-140e-4675-8de3-21d0d91759a0	2	t	f
4526	physicalvalue	水压	Output	\N			4	0.6	0	MPa		2019-11-09 10:19:38.173+08	2019-11-09 10:19:53.128+08	8ef82507-140e-4675-8de3-21d0d91759a0	2	t	f
4522	physicalvalue	水压	Output	\N			4	0.4	0	MPa		2019-11-09 10:15:51.841+08	2019-11-09 10:21:22.48+08	a556c96d-7976-48d5-9bb0-de9f1661654d	2	t	f
4520	frequency	频率	Output	\N			3	\N	\N	Hz		2019-11-09 10:14:23.107+08	2019-11-09 10:21:29.299+08	a556c96d-7976-48d5-9bb0-de9f1661654d	2	t	f
4527	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:23:45.336+08	2019-11-09 10:23:45.336+08	ae758eae-e892-4168-a8c1-4ec7ceb81e5e	2	t	f
4528	temperature	温度	Output	\N			2	\N	\N	℃		2019-11-09 10:24:25.122+08	2019-11-09 10:24:38.95+08	ae758eae-e892-4168-a8c1-4ec7ceb81e5e	2	t	f
4529	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:24:56.4+08	2019-11-09 10:24:56.4+08	ae758eae-e892-4168-a8c1-4ec7ceb81e5e	2	t	f
4530	physicalvalue	水压	Output	\N			4	0.8	0	MPa		2019-11-09 10:25:50.065+08	2019-11-09 10:26:43.735+08	ae758eae-e892-4168-a8c1-4ec7ceb81e5e	2	t	f
4531	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:28:49.851+08	2019-11-09 10:28:49.851+08	fd40883e-bc42-4776-b631-e353c0761303	2	t	f
4532	physicalvalue	水压	Output	\N	\N	\N	4	1	0	MPa		2019-11-09 10:29:40.057+08	2019-11-09 10:29:40.057+08	fd40883e-bc42-4776-b631-e353c0761303	2	t	f
4533	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:30:03.663+08	2019-11-09 10:30:03.663+08	fd40883e-bc42-4776-b631-e353c0761303	2	t	f
4534	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:31:50.79+08	2019-11-09 10:31:50.79+08	fd40883e-bc42-4776-b631-e353c0761303	2	t	f
4535	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:33:10.327+08	2019-11-09 10:33:10.327+08	1535b2bf-3149-430e-97d6-32972b838167	2	t	f
4536	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:33:39.446+08	2019-11-09 10:33:39.446+08	1535b2bf-3149-430e-97d6-32972b838167	2	t	f
4537	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:34:18.068+08	2019-11-09 10:34:18.068+08	1535b2bf-3149-430e-97d6-32972b838167	2	t	f
4538	physicalvalue	水压	Output	\N	\N	\N	4	\N	\N	MPa		2019-11-09 10:35:00.117+08	2019-11-09 10:35:00.117+08	1535b2bf-3149-430e-97d6-32972b838167	2	t	f
4539	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:39:04.379+08	2019-11-09 10:39:04.379+08	db875fbb-2c21-49f8-bac0-342276dec8ce	2	t	f
4540	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:39:26.313+08	2019-11-09 10:39:26.313+08	db875fbb-2c21-49f8-bac0-342276dec8ce	2	t	f
4541	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:39:52.674+08	2019-11-09 10:39:52.674+08	db875fbb-2c21-49f8-bac0-342276dec8ce	2	t	f
4542	physicalvalue	荷载力	Output	\N			4	160	-160	KN		2019-11-09 10:40:55.946+08	2019-11-09 10:41:24.266+08	db875fbb-2c21-49f8-bac0-342276dec8ce	2	t	f
4543	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:42:46.503+08	2019-11-09 10:42:46.503+08	956b5d84-5687-4405-803b-c9d1790c6ceb	2	t	f
4544	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:43:05.507+08	2019-11-09 10:43:05.507+08	956b5d84-5687-4405-803b-c9d1790c6ceb	2	t	f
4545	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:43:42.683+08	2019-11-09 10:43:42.683+08	956b5d84-5687-4405-803b-c9d1790c6ceb	2	t	f
4549	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:48:28.981+08	2019-11-09 10:48:28.981+08	3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	2	t	f
4546	physicalvalue	荷载力	Output	\N			4	136	-136	KN		2019-11-09 10:44:14.694+08	2019-11-09 10:44:39.928+08	956b5d84-5687-4405-803b-c9d1790c6ceb	2	t	f
4547	am	幅值	Output	\N			3	\N	\N	mv		2019-11-09 10:47:06.014+08	2019-11-09 10:47:55.619+08	3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	2	t	f
4548	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:47:46.284+08	2019-11-09 10:47:46.284+08	3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	2	t	f
4550	physicalvalue	荷载力	Output	\N			4	105	-105	KN		2019-11-09 10:49:12.577+08	2019-11-09 10:49:29.68+08	3746c474-0d8e-4d5b-8ca8-eb80c3a46d87	2	t	f
4551	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-09 10:51:19.403+08	2019-11-09 10:51:19.403+08	2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	2	t	f
4552	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-09 10:51:39.677+08	2019-11-09 10:51:39.677+08	2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	2	t	f
4553	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-09 10:52:04.084+08	2019-11-09 10:52:04.084+08	2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	2	t	f
4554	physicalvalue	荷载力	Output	\N			4	75	-75	KN		2019-11-09 10:52:25.414+08	2019-11-09 10:52:41.98+08	2eca1e8b-3f1a-4272-94c5-bfa4f8e6ab9e	2	t	f
4555	xphysicalvalue	x轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-11-11 11:44:40.438+08	2019-11-11 11:44:40.438+08	a1b787fe-741a-4eef-a65b-531baff33f6e	2	t	f
4556	yphysicalvalue	y轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-11-11 11:45:13.101+08	2019-11-11 11:45:13.101+08	a1b787fe-741a-4eef-a65b-531baff33f6e	2	t	f
4557	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	g		2019-11-13 11:49:07.14+08	2019-11-13 11:49:07.14+08	f7ccec63-ff80-4c16-8c21-8a5f7c3cc971	5	t	f
4558	physicalvalue	水压	Output	\N			4	\N	\N	MPa		2019-11-13 16:52:39.068+08	2019-11-13 16:54:59.899+08	6fac5183-d1d7-4dcd-9507-e29c2eb60419	2	t	f
4559	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-13 16:55:37.147+08	2019-11-13 16:55:37.147+08	6fac5183-d1d7-4dcd-9507-e29c2eb60419	2	t	f
4560	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-13 16:56:07.563+08	2019-11-13 16:56:07.563+08	6fac5183-d1d7-4dcd-9507-e29c2eb60419	2	t	f
4561	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-13 16:56:44.215+08	2019-11-13 16:56:44.215+08	6fac5183-d1d7-4dcd-9507-e29c2eb60419	2	t	f
4562	xlength	x方向位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-14 14:08:05.172+08	2019-11-14 14:08:05.172+08	354d4c65-0d09-4272-8748-3e53d2c1668f	2	t	f
4563	ylength	y方向位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-14 14:08:45.469+08	2019-11-14 14:08:45.469+08	354d4c65-0d09-4272-8748-3e53d2c1668f	2	t	f
4564	physicalvalue	角度	Output	\N			6	\N	\N	\N		2019-11-14 14:59:09.182+08	2019-11-14 14:59:45.655+08	553043f1-1489-49e7-8685-476b53719b37	2	t	f
4565	frequency	频率	Output	\N	\N	\N	6	\N	\N	HZ		2019-11-14 15:00:20.64+08	2019-11-14 15:00:20.64+08	553043f1-1489-49e7-8685-476b53719b37	2	t	f
4566	physicalvalue	加速度	Output	\N	\N	\N	6	\N	\N	\N		2019-11-14 15:04:24.31+08	2019-11-14 15:04:24.31+08	c6e9864f-e7aa-46c6-bc38-7cf89f82005b	2	t	f
4567	frequency	频率	Output	\N	\N	\N	6	\N	\N	HZ		2019-11-14 15:05:03.605+08	2019-11-14 15:05:03.605+08	c6e9864f-e7aa-46c6-bc38-7cf89f82005b	2	t	f
4568	physicalvalue	位移	Output	\N	\N	\N	6	\N	\N	\N		2019-11-14 15:08:21.178+08	2019-11-14 15:08:21.178+08	7e54985e-4293-452f-bd1e-27d54e8c9259	2	t	f
4569	frequency	频率	Output	\N			6	\N	\N	HZ		2019-11-14 15:08:47.343+08	2019-11-14 15:09:06.153+08	7e54985e-4293-452f-bd1e-27d54e8c9259	2	t	f
4570	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-11-15 14:31:51.278+08	2019-11-15 14:31:51.278+08	52567547-16d9-4a75-b748-d64c0a0b01cf	2	t	f
4571	physicalvalue	应变	Output	\N	\N	\N	3	3000	-3000	με		2019-11-15 14:32:40.462+08	2019-11-15 14:32:40.462+08	52567547-16d9-4a75-b748-d64c0a0b01cf	2	t	f
4572	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-15 14:33:12.781+08	2019-11-15 14:33:12.781+08	52567547-16d9-4a75-b748-d64c0a0b01cf	2	t	f
4573	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-15 14:33:45.817+08	2019-11-15 14:33:45.817+08	52567547-16d9-4a75-b748-d64c0a0b01cf	2	t	f
4577	physicalvalue	角度	Output	\N	\N	\N	2	\N	\N	°		2019-11-18 09:58:17.661+08	2019-11-18 09:58:17.661+08	b4cd49a5-53df-4791-aece-50f8fe3be0e3	2	t	f
4579	totalPower	总电量	Output	\N	\N	\N	2	\N	\N	kWh	当前有功总电量（码表）	2019-11-20 09:19:16.328+08	2019-11-20 09:19:16.328+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4580	APhaseCurrent	A相电流	Output	\N	\N	\N	2	\N	\N	A	A相电流	2019-11-20 09:21:10.571+08	2019-11-20 09:21:10.571+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4582	instantActivePower	瞬时有功功率	Output	\N	\N	\N	2	\N	\N	kW	瞬时有功功率	2019-11-20 09:26:39.389+08	2019-11-20 09:26:39.389+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4583	purchaseTimes	购电次数	Output	\N	\N	\N	\N	\N	\N	次	购电次数	2019-11-20 09:29:30.07+08	2019-11-20 09:29:30.07+08	403ed6b4-3b5f-464a-8da3-51142a22d535	1	t	f
4584	purchaseAnergy	购电量	Output	\N	\N	\N	2	\N	\N	kWh	购电量	2019-11-20 09:33:13.373+08	2019-11-20 09:33:13.373+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4585	remainAnergy	剩余电量	Output	\N	\N	\N	2	\N	\N	kWh	剩余电量	2019-11-20 09:38:10.095+08	2019-11-20 09:38:10.095+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4578	length	液位	Output	\N			3	\N	\N	m		2019-11-19 16:14:56.466+08	2019-11-20 10:44:53.751+08	84e785f0-1280-4066-ac32-66fc93019612	2	t	f
4586	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	MPa		2019-11-20 14:41:18.575+08	2019-11-20 14:41:18.575+08	7979ff13-c8b1-4bee-986a-094e12da9553	2	t	f
4587	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:42:03.073+08	2019-11-20 14:42:03.073+08	7979ff13-c8b1-4bee-986a-094e12da9553	2	t	f
4588	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:44:10.552+08	2019-11-20 14:44:10.552+08	5f39116e-f4a1-499e-85da-b67e0f93a044	2	t	f
4589	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	MPa		2019-11-20 14:44:53.713+08	2019-11-20 14:44:53.713+08	5f39116e-f4a1-499e-85da-b67e0f93a044	2	t	f
4590	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:45:52.713+08	2019-11-20 14:45:52.713+08	5ffc3472-8381-4000-a185-1f3a8d4ed263	2	t	f
4591	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	mm		2019-11-20 14:46:51.91+08	2019-11-20 14:46:51.91+08	5ffc3472-8381-4000-a185-1f3a8d4ed263	2	t	f
4592	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:47:35.464+08	2019-11-20 14:47:35.464+08	aef1a81a-27fd-4648-9208-00b719cea8b9	2	t	f
4593	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	kN		2019-11-20 14:48:52.787+08	2019-11-20 14:48:52.787+08	aef1a81a-27fd-4648-9208-00b719cea8b9	2	t	f
4594	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:50:06.531+08	2019-11-20 14:50:06.531+08	4b24c098-2d80-49b0-89b6-9092c52053bd	2	t	f
4595	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	MPa		2019-11-20 14:51:09.375+08	2019-11-20 14:51:09.375+08	4b24c098-2d80-49b0-89b6-9092c52053bd	2	t	f
4596	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:52:27.202+08	2019-11-20 14:52:27.202+08	ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51	2	t	f
4597	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	MPa		2019-11-20 14:53:23.159+08	2019-11-20 14:53:23.159+08	ad636ee6-c6e4-4d46-a2a6-cd1e8acc8e51	2	t	f
4598	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:53:59.277+08	2019-11-20 14:53:59.277+08	d17ee4be-2675-4d98-aab6-4b6ec7c271a6	2	t	f
4599	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	με		2019-11-20 14:55:25.531+08	2019-11-20 14:55:25.531+08	d17ee4be-2675-4d98-aab6-4b6ec7c271a6	2	t	f
4600	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2019-11-20 14:56:06.364+08	2019-11-20 14:56:06.364+08	0475dd0e-b02f-4a19-a933-dee73c76ef6a	2	t	f
4601	physicalvalue	物理量	Output	\N	\N	\N	6	\N	\N	με		2019-11-20 14:56:51.556+08	2019-11-20 14:56:51.556+08	0475dd0e-b02f-4a19-a933-dee73c76ef6a	2	t	f
4581	APhaseVoltage	A相电压	Output	\N			1	\N	\N	V	A相电压V	2019-11-20 09:22:43.497+08	2019-11-21 08:56:58.9+08	403ed6b4-3b5f-464a-8da3-51142a22d535	2	t	f
4602	statusWord	状态字	Output	\N	\N	\N	\N	\N	\N	\N		2019-11-21 09:22:09.524+08	2019-11-21 09:22:09.524+08	403ed6b4-3b5f-464a-8da3-51142a22d535	5	t	f
4603	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-21 09:34:16.444+08	2019-11-21 09:34:16.444+08	42a0ae36-f70b-40f3-8883-e04b90d177b1	2	t	f
4604	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2019-11-21 09:34:35.265+08	2019-11-21 09:34:35.265+08	42a0ae36-f70b-40f3-8883-e04b90d177b1	2	t	f
4609	anglex	X方向角度	Output	\N			4	30	-30	°		2019-11-21 11:47:17.61+08	2019-11-21 11:47:17.61+08	0666d951-058b-4519-ba87-4889fda65f5d	2	t	f
4610	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:17.615+08	2019-11-21 11:47:17.615+08	0666d951-058b-4519-ba87-4889fda65f5d	2	t	f
4611	angley	Y方向角度	Output	\N			4	30	-30	°		2019-11-21 11:47:17.619+08	2019-11-21 11:47:17.619+08	0666d951-058b-4519-ba87-4889fda65f5d	2	t	f
4612	angley	Y轴角度	Output	\N			2	30	-30	°		2019-11-21 11:47:17.629+08	2019-11-21 11:47:17.629+08	3d75f1d4-c46d-443a-ba67-ea09c7642e11	2	t	f
4613	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:17.633+08	2019-11-21 11:47:17.633+08	3d75f1d4-c46d-443a-ba67-ea09c7642e11	2	t	f
4614	anglex	X轴角度	Output	\N			2	30	-30	°		2019-11-21 11:47:17.636+08	2019-11-21 11:47:17.636+08	3d75f1d4-c46d-443a-ba67-ea09c7642e11	2	t	f
4615	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-11-21 11:47:17.644+08	2019-11-21 11:47:17.644+08	746f3ce2-5918-4156-bee1-cf4e3a0c51ca	2	t	f
4616	angley	Y方向角度	Output	\N			4	30	-30	°		2019-11-21 11:47:17.647+08	2019-11-21 11:47:17.647+08	746f3ce2-5918-4156-bee1-cf4e3a0c51ca	2	t	f
4617	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:17.651+08	2019-11-21 11:47:17.651+08	746f3ce2-5918-4156-bee1-cf4e3a0c51ca	2	t	f
4618	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2019-11-21 11:47:17.66+08	2019-11-21 11:47:17.66+08	a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395	2	t	f
4619	angley	Y方向角度	Output	\N	\N	\N	4	30	-30	°		2019-11-21 11:47:17.663+08	2019-11-21 11:47:17.663+08	a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395	2	t	f
4620	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-11-21 11:47:17.666+08	2019-11-21 11:47:17.666+08	a5bf8b8f-51ec-4e4c-8ffe-9d01644f9395	2	t	f
4621	anglex	X方向角度	Output	\N			4	30	-30	°		2019-11-21 11:47:19.142+08	2019-11-21 11:47:19.142+08	f745e8e9-041e-4578-8568-38fec10b69c1	2	t	f
4622	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:19.149+08	2019-11-21 11:47:19.149+08	f745e8e9-041e-4578-8568-38fec10b69c1	2	t	f
4625	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:19.176+08	2019-11-21 11:47:19.176+08	202ac1b5-9f83-4de2-b423-a27607b53f28	2	t	f
4626	anglex	X轴角度	Output	\N			2	30	-30	°		2019-11-21 11:47:19.182+08	2019-11-21 11:47:19.182+08	202ac1b5-9f83-4de2-b423-a27607b53f28	2	t	f
4627	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-11-21 11:47:19.196+08	2019-11-21 11:47:19.196+08	7afd8b52-1811-40be-88ec-64173b08f522	2	t	f
4629	temperature	温度	Output	\N			2	70	-25	℃		2019-11-21 11:47:19.207+08	2019-11-21 11:47:19.207+08	7afd8b52-1811-40be-88ec-64173b08f522	2	t	f
4630	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2019-11-21 11:47:19.223+08	2019-11-21 11:47:19.223+08	8b29ca1c-631b-4899-b819-7fb1a9d8cd63	2	t	f
4632	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2019-11-21 11:47:19.234+08	2019-11-21 11:47:19.234+08	8b29ca1c-631b-4899-b819-7fb1a9d8cd63	2	t	f
4633	length	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-21 14:02:04.952+08	2019-11-21 14:02:04.952+08	4b017286-f61b-4777-bbdd-aa7cab984440	2	t	f
4634	length	距离	Output	\N	\N	\N	2	\N	\N	m		2019-11-21 15:14:02.626+08	2019-11-21 15:14:02.626+08	c7eb65e8-262a-42fe-a9a2-3a77e07a84c9	2	t	f
4635	length	距离	Output	\N	\N	\N	2	\N	\N	m		2019-11-21 15:17:49.691+08	2019-11-21 15:17:49.691+08	b3db1020-2db0-4931-ab2e-2661c6b459ff	2	t	f
4636	length	距离	Output	\N	\N	\N	2	\N	\N	m		2019-11-21 15:17:51.65+08	2019-11-21 15:17:51.65+08	22a573d1-d13d-447f-9984-1335ac15e1be	2	t	f
4637	length	距离	Output	\N	\N	\N	3	\N	\N	m		2019-11-21 16:07:12.566+08	2019-11-21 16:07:12.566+08	bcb2585f-9765-4795-8033-eaf0d467ab1c	2	t	f
4638	length	距离	Output	\N	\N	\N	3	\N	\N	m		2019-11-21 16:15:06.52+08	2019-11-21 16:15:06.52+08	5fa7d170-eda6-4d15-a767-25fc37a090bc	2	t	f
4639	length	距离	Output	\N	\N	\N	3	\N	\N	m		2019-11-21 16:15:07.784+08	2019-11-21 16:15:07.784+08	61e1f659-3d27-4958-8881-d4e6103c309b	2	t	f
4649	physicalvalue	应变	Output	\N	\N	\N	4	1500	-1500	με		2019-11-22 15:32:53.039+08	2019-11-22 15:32:53.039+08	cfbc93ae-34de-4b5c-b78f-393d80e6be1e	2	t	f
4654	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2019-11-22 15:38:44.579+08	2019-11-22 15:38:44.579+08	61e2ddde-025e-4a3a-b03e-49cddfe2c09c	2	t	f
4667	frequency	频率	Output	\N			3	\N	\N	Hz		2019-11-26 10:06:15.021+08	2019-11-26 10:06:25.084+08	169af4ea-ded9-488d-8a88-96e79e1526b0	2	t	f
4640	length	距离	Output	\N	\N	\N	3	\N	\N	m		2019-11-21 16:17:19.735+08	2019-11-21 16:17:19.735+08	ab533430-50a9-42f0-be2d-3f49990cd470	2	t	f
4344	temperature	温度	Output	\N			2			℃		2019-09-29 17:53:20.283+08	2019-11-22 10:57:49.43+08	15e2a325-246a-4e43-8bea-784596788377	2	t	f
4345	physicalvalue	位移	Output	\N			3			mm		2019-09-29 17:54:17.286+08	2019-11-22 10:58:00.248+08	15e2a325-246a-4e43-8bea-784596788377	2	t	f
4643	temperature	温度	Output	\N			4	80	-40	℃		2019-11-22 15:26:29.217+08	2019-11-22 15:26:38.492+08	00d1f8ae-26c7-4fde-93ee-415598dab3dd	2	t	f
4644	physicalvalue	应变	Output	\N			4	5000	-5000	με		2019-11-22 15:27:41.929+08	2019-11-22 15:27:54.606+08	00d1f8ae-26c7-4fde-93ee-415598dab3dd	2	t	f
4645	frequency	频率	Output	\N			4	\N	\N	Hz		2019-11-22 15:28:30.252+08	2019-11-22 15:28:38.004+08	363b62ae-2ccd-4c86-915d-03380bc9d89c	2	t	f
4646	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-11-22 15:29:04.192+08	2019-11-22 15:29:04.192+08	8693e382-e7e6-4efa-8583-d0251cb0b360	2	t	f
4647	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-11-22 15:30:13.075+08	2019-11-22 15:30:13.075+08	00d1f8ae-26c7-4fde-93ee-415598dab3dd	2	t	f
4648	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2019-11-22 15:32:18.009+08	2019-11-22 15:32:18.009+08	cfbc93ae-34de-4b5c-b78f-393d80e6be1e	2	t	f
4650	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-11-22 15:33:08.887+08	2019-11-22 15:33:08.887+08	cfbc93ae-34de-4b5c-b78f-393d80e6be1e	2	t	f
4651	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-11-22 15:35:47.512+08	2019-11-22 15:35:47.512+08	6dd33289-d530-4c8b-a41c-aa946291a7df	2	t	f
4652	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2019-11-22 15:36:17.607+08	2019-11-22 15:36:17.607+08	6dd33289-d530-4c8b-a41c-aa946291a7df	2	t	f
4653	physicalvalue	应变	Output	\N	\N	\N	4	3000	-3000	με		2019-11-22 15:36:51.654+08	2019-11-22 15:36:51.654+08	6dd33289-d530-4c8b-a41c-aa946291a7df	2	t	f
4655	physicalvalue	应变	Output	\N	\N	\N	4	3000	-3000	με		2019-11-22 15:39:07.182+08	2019-11-22 15:39:07.182+08	61e2ddde-025e-4a3a-b03e-49cddfe2c09c	2	t	f
4656	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2019-11-22 15:39:24.282+08	2019-11-22 15:39:24.282+08	61e2ddde-025e-4a3a-b03e-49cddfe2c09c	2	t	f
4657	length	位移	Output	\N	\N	\N	2	\N	\N	mm		2019-11-25 13:12:43.522+08	2019-11-25 13:12:43.522+08	03a86ebd-9100-429c-a1a2-edacea7380c3	2	t	f
4658	speed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-11-25 17:26:40.005+08	2019-11-25 17:26:40.005+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4659	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2019-11-25 17:26:40.01+08	2019-11-25 17:26:40.01+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4660	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-25 17:26:40.014+08	2019-11-25 17:26:40.014+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4661	direction	风向	Output	\N	\N	\N	2	\N	\N	°		2019-11-25 17:26:40.02+08	2019-11-25 17:26:40.02+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4662	pm10	PM10	Output	\N	\N	\N	2	\N	\N	μg/m³		2019-11-25 17:26:40.023+08	2019-11-25 17:26:40.023+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4663	noise	噪声	Output	\N	\N	\N	2	\N	\N	dB		2019-11-25 17:26:40.026+08	2019-11-25 17:26:40.026+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4664	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	μg/m³		2019-11-25 17:26:40.029+08	2019-11-25 17:26:40.029+08	e95f9ff7-5a7c-495d-87c9-993463fb3945	2	t	f
4665	temperature	温度	Output	\N			2	\N	\N	℃		2019-11-26 10:03:35.695+08	2019-11-26 10:03:46.246+08	169af4ea-ded9-488d-8a88-96e79e1526b0	2	t	f
4666	physicalvalue	轴力	Output	\N			4	\N	\N	kN		2019-11-26 10:04:06.359+08	2019-11-26 10:06:00.122+08	169af4ea-ded9-488d-8a88-96e79e1526b0	2	t	f
4668	am	幅值	Output	\N			3	\N	\N	mv		2019-11-26 10:06:44.574+08	2019-11-26 10:06:52.796+08	169af4ea-ded9-488d-8a88-96e79e1526b0	2	t	f
4669	frequency	频率	Output	\N			3			Hz		2019-11-26 10:08:11.035+08	2019-11-26 10:10:27.308+08	3081c848-b498-42a0-9887-5fba5a8eb28f	2	t	f
4670	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-26 10:11:16.162+08	2019-11-26 10:11:16.162+08	3081c848-b498-42a0-9887-5fba5a8eb28f	2	t	f
4671	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-26 10:11:37.873+08	2019-11-26 10:11:37.873+08	3081c848-b498-42a0-9887-5fba5a8eb28f	2	t	f
4672	physicalvalue	轴力	Output	\N			4	2000	-2000	KN		2019-11-26 10:12:33.395+08	2019-11-26 10:12:45.325+08	3081c848-b498-42a0-9887-5fba5a8eb28f	2	t	f
4673	physicalvalue	轴力	Output	\N			4	3000	-3000	kN		2019-11-26 10:13:53.136+08	2019-11-26 10:14:02.332+08	94787d41-6353-4a20-a84b-848d79e1e209	2	t	f
4674	frequency	频率	Output	\N			3	\N	\N	Hz		2019-11-26 10:14:22.998+08	2019-11-26 10:14:32.652+08	94787d41-6353-4a20-a84b-848d79e1e209	2	t	f
4675	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-26 10:15:00.675+08	2019-11-26 10:15:00.675+08	94787d41-6353-4a20-a84b-848d79e1e209	2	t	f
4676	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-26 10:15:30.375+08	2019-11-26 10:15:30.375+08	94787d41-6353-4a20-a84b-848d79e1e209	2	t	f
4677	physicalvalue	轴力	Output	\N	\N	\N	4	4000	-4000	kN		2019-11-26 10:16:41.439+08	2019-11-26 10:16:41.439+08	c4ae4615-1bce-476b-96bb-827de9a9a3f5	2	t	f
4678	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-11-26 10:17:01.881+08	2019-11-26 10:17:01.881+08	c4ae4615-1bce-476b-96bb-827de9a9a3f5	2	t	f
1491	frequency	频率	Output	\N			3	\N	\N	Hz		2018-01-23 14:46:19.636+08	2019-11-26 10:17:29.479+08	4f360434-b54d-41c3-8163-4df050a68350	2	t	f
4679	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2019-11-26 10:17:47.672+08	2019-11-26 10:17:47.672+08	c4ae4615-1bce-476b-96bb-827de9a9a3f5	2	t	f
4680	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2019-11-26 10:18:04.836+08	2019-11-26 10:18:04.836+08	c4ae4615-1bce-476b-96bb-827de9a9a3f5	2	t	f
4681	Ydisplacement	纵向位移	Output	\N	\N	\N	6	\N	\N	mm		2019-11-26 16:27:41.028+08	2019-11-26 16:27:41.028+08	9e616b46-c079-4ea8-a379-71bc5fa74f42	2	t	f
4682	Xdisplacement	横向位移	Output	\N	\N	\N	6	\N	\N	mm		2019-11-26 16:28:04.797+08	2019-11-26 16:28:04.797+08	9e616b46-c079-4ea8-a379-71bc5fa74f42	2	t	f
4683	crossRoad	车道号	Output	\N			0	\N	\N	\N		2019-11-27 14:14:55.502+08	2019-11-27 14:14:55.502+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4687	overload	总重超限	Output	\N			0	\N	\N			2019-11-27 14:14:55.523+08	2019-11-27 14:14:55.523+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4685	axisSpeed	轴速	Output	\N			0			km/h		2019-11-27 14:14:55.515+08	2019-11-27 14:19:58.13+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4684	axisNum	轴数	Output	\N			0					2019-11-27 14:14:55.507+08	2019-11-27 14:20:44.657+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4705	speed	车速	Output	\N	\N	\N	\N	\N	\N	km/h		2019-11-27 14:23:20.418+08	2019-11-27 14:23:20.418+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4707	displacement	位移	Output	\N	\N	\N	4	\N	\N	mm		2019-12-05 15:46:23.161+08	2019-12-05 15:46:23.161+08	c4a77a9d-c2ff-4de9-bbc9-36fe8bba8a5e	2	t	f
4708	physicalvalue	轴力	Output	\N			2	\N	\N	kN		2019-12-06 10:18:48.773+08	2019-12-06 10:25:20.045+08	28802bd7-d538-4d62-8a84-87a3e3f5c9d3	2	t	f
4709	angleX	x角度	Output	\N	\N	\N	2	\N	\N	°		2019-12-06 11:22:34.036+08	2019-12-06 11:22:34.036+08	6d7906b4-b1de-4c3c-b100-bcdf039094f2	2	t	f
4710	angleY	Y角度	Output	\N	\N	\N	2	\N	\N	°		2019-12-06 11:22:34.044+08	2019-12-06 11:22:34.044+08	6d7906b4-b1de-4c3c-b100-bcdf039094f2	2	t	f
4711	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2019-12-06 15:17:20.55+08	2019-12-06 15:17:20.55+08	5fb83056-bcb5-4ed3-8b11-5d2233522941	2	t	f
4713	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-12-09 09:10:12.762+08	2019-12-09 09:10:12.762+08	28802bd7-d538-4d62-8a84-87a3e3f5c9d3	2	t	f
4714	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-09 09:10:52.259+08	2019-12-09 09:10:52.259+08	28802bd7-d538-4d62-8a84-87a3e3f5c9d3	2	t	f
4715	physicalvalue	\N	Output	\N	\N	\N	5	\N	\N	\N		2019-12-09 10:16:06.62+08	2019-12-09 10:16:06.62+08	6c5eb31e-a7e6-4289-a25e-5cf08bb4ad82	2	t	f
4717	length	距离	Output	\N	\N	\N	3	\N	\N	m		2019-12-10 11:42:16.763+08	2019-12-10 11:42:16.763+08	7c4993c0-3771-4ad6-a71d-2f84390f48e6	2	t	f
4718	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-10 11:42:39.236+08	2019-12-10 11:42:39.236+08	7c4993c0-3771-4ad6-a71d-2f84390f48e6	2	t	f
4719	direction	车辆方向	Output	\N			0			.	0上桥，1下桥	2019-12-11 10:48:44.632+08	2019-12-11 10:49:53.885+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4720	hourRainfall	雨量	Output	\N	\N	\N	2	\N	\N	mm		2019-12-11 10:59:55.305+08	2019-12-11 10:59:55.305+08	bee3569d-fbcf-4c8e-809d-535e0e515921	2	t	f
4722	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-11 15:38:09.777+08	2019-12-11 15:38:09.777+08	9960853c-2f09-4f84-83dd-6ef785bd63d8	2	t	f
4724	waterTemperature	水温	Output	\N	\N	\N	1	\N	\N	摄氏度		2019-12-11 15:52:59.597+08	2019-12-11 15:52:59.597+08	53281743-bc5c-46cf-addc-706810bcd681	2	t	f
4725	waterPresure	水压	Output	\N	\N	\N	\N	\N	\N	Pa		2019-12-11 15:53:44.709+08	2019-12-11 15:53:44.709+08	53281743-bc5c-46cf-addc-706810bcd681	1	t	f
4727	windSpeed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-12-12 15:27:14.478+08	2019-12-12 15:27:14.478+08	699f8e7d-9985-4a05-83be-7ff6a0c7188b	2	t	f
4726	windDirection	风向	Output	\N			2	\N	\N	度（偏离北）		2019-12-12 15:26:17.092+08	2019-12-12 15:27:37.734+08	699f8e7d-9985-4a05-83be-7ff6a0c7188b	2	t	f
4728	pressure	液位	Output	\N	\N	\N	5	\N	\N	\N		2019-12-12 16:55:04.316+08	2019-12-12 16:55:04.316+08	c8ec5d4d-0d9c-4262-8ec6-3a089114fb5d	2	t	f
4729	windSpeed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-12-12 17:02:10.65+08	2019-12-12 17:02:10.65+08	89941851-3e91-426b-b842-0e31d50848f5	2	t	f
4730	windDirection	风向	Output	\N	\N	\N	2	\N	\N	度（偏北方向）		2019-12-12 17:03:32.909+08	2019-12-12 17:03:32.909+08	89941851-3e91-426b-b842-0e31d50848f5	2	t	f
4693	grossWeight	总重	Output	\N			0			T		2019-11-27 14:14:55.543+08	2019-12-16 11:26:09.794+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4688	axieWeight	轴重	Output	\N			0			T		2019-11-27 14:14:55.526+08	2019-12-16 11:26:14.245+08	047b4ec5-9aa9-44cd-8410-9484195bcc5b	5	t	f
4732	clusterId		Constant	\N	\N	genOnOff	\N	\N	\N			2019-12-16 11:31:00.606+08	2019-12-16 11:31:00.606+08	39ae566f-f125-4bb3-8f18-39fd4ace09dd	5	t	f
4734	state	State	Output	\N	0,1	\N	\N	\N	\N			2019-12-16 11:32:41.7+08	2019-12-16 11:32:41.7+08	39ae566f-f125-4bb3-8f18-39fd4ace09dd	4	t	f
4735	alert	\N	Variable	\N	\N	false	\N	\N	\N	\N		2019-12-16 11:40:38.095+08	2019-12-16 11:40:38.095+08	39ae566f-f125-4bb3-8f18-39fd4ace09dd	3	t	f
4736	crackDistance	裂缝距离	Output	\N	\N	\N	2	\N	\N	mm		2019-12-17 14:36:20.527+08	2019-12-17 14:36:20.527+08	da328767-f26f-4fce-967c-7dbf5af7df6f	2	t	f
4737	Temperature	\N	Output	\N	\N	\N	2	80	-20	\N		2019-12-17 15:53:57.607+08	2019-12-17 15:53:57.607+08	97761a49-de35-42f5-a664-d3dd6cc82d59	2	t	f
4739	clusterId	\N	Constant	\N	\N	msTemperatureMeasurement	\N	\N	\N	\N		2019-12-17 15:55:45.907+08	2019-12-17 15:55:45.907+08	97761a49-de35-42f5-a664-d3dd6cc82d59	5	t	f
4740	Hourrain	小时雨量	Output	\N	\N	\N	2	\N	\N	mm		2019-12-18 09:16:48.848+08	2019-12-18 09:16:48.848+08	5733bc64-355b-495b-adf8-e8cbae48d357	2	t	f
4741	Minrian	分钟雨量	Output	\N	\N	\N	2	\N	\N	mm		2019-12-18 09:17:26.555+08	2019-12-18 09:17:26.555+08	5733bc64-355b-495b-adf8-e8cbae48d357	2	t	f
4742	physicalvalue	加速度	Output	\N			0	\N	\N	g		2019-12-20 18:07:22.546+08	2019-12-20 18:07:22.546+08	d3030bd3-a5ed-49d3-bc4e-0c774ddbdf86	5	t	f
4795	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 09:14:12.679+08	2019-12-31 09:14:12.679+08	514bb698-2903-47d6-9749-67f6ead2de82	2	t	f
4743	distance	沉降	Output	\N	\N	\N	2	\N	\N	mm		2019-12-23 10:30:52.212+08	2019-12-23 10:30:52.212+08	b3db27cd-01dc-4f48-b241-ec576d75d6b2	2	t	f
4744	temperature	温度	Output	\N	\N	\N	2	\N	\N	°		2019-12-23 10:30:52.499+08	2019-12-23 10:30:52.499+08	b3db27cd-01dc-4f48-b241-ec576d75d6b2	2	t	f
4745	waveLength	波长	Output	\N	\N	\N	3	\N	\N	\N		2019-12-23 14:27:38.682+08	2019-12-23 14:27:38.682+08	dfeab740-f671-4730-9a89-f5a3311f0ec8	2	t	f
4746	distance	距离	Output	\N	\N	\N	2	\N	\N	mm		2019-12-23 14:42:47.829+08	2019-12-23 14:42:47.829+08	86e75c8f-77b4-4197-89e5-0960b7265076	2	t	f
4747	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-23 16:11:23.823+08	2019-12-23 16:11:23.823+08	f7726ca7-bc14-4987-bd59-204bb7fed3a4	2	t	f
4748	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2019-12-23 16:11:23.838+08	2019-12-23 16:11:23.838+08	f7726ca7-bc14-4987-bd59-204bb7fed3a4	2	t	f
4784	physicalvalue	物理量	Output	\N	\N	\N	4	\N	\N	KN		2019-12-31 09:02:25.089+08	2019-12-31 09:02:25.089+08	d39ca936-5931-458b-ac6a-3afd59f67b53	2	t	f
4793	physicalvalue	物理量	Output	\N	\N	\N	3	\N	\N	mm		2019-12-31 09:12:15.004+08	2019-12-31 09:12:15.004+08	15046a7e-2b8d-446c-963e-0f8af7fe7475	2	t	f
4749	windSpeed	风速	Output	\N	\N	\N	2	\N	\N	m/s		2019-12-24 09:20:36.133+08	2019-12-24 09:20:36.133+08	48b6a900-281e-4335-841c-814b0bbc1078	2	t	f
4750	windDirection	风向	Output	\N	\N	\N	2	\N	\N	°		2019-12-24 09:20:36.158+08	2019-12-24 09:20:36.158+08	48b6a900-281e-4335-841c-814b0bbc1078	2	t	f
4751	windAngle	风仰角	Output	\N	\N	\N	2	\N	\N	°		2019-12-24 09:20:36.173+08	2019-12-24 09:20:36.173+08	48b6a900-281e-4335-841c-814b0bbc1078	2	t	f
4752	xDgree	x轴加速度	Output	\N	\N	\N	2	\N	\N	g		2019-12-24 10:40:55.048+08	2019-12-24 10:40:55.048+08	659208a7-903d-4473-bc1d-581dbec9e5e7	2	t	f
4753	yDgree	y轴加速度	Output	\N	\N	\N	2	\N	\N	g		2019-12-24 10:40:55.057+08	2019-12-24 10:40:55.057+08	659208a7-903d-4473-bc1d-581dbec9e5e7	2	t	f
4754	zDgree	z轴加速度	Output	\N	\N	\N	2	\N	\N	g		2019-12-24 10:40:55.063+08	2019-12-24 10:40:55.063+08	659208a7-903d-4473-bc1d-581dbec9e5e7	2	t	f
4755	pressure	压强	Output	\N	\N	\N	2	\N	\N	kpa		2019-12-24 11:15:20.074+08	2019-12-24 11:15:20.074+08	70f035c8-998b-445d-8f3f-c5f840151e65	2	t	f
4756	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-24 11:15:20.109+08	2019-12-24 11:15:20.109+08	70f035c8-998b-445d-8f3f-c5f840151e65	2	t	f
4757	anglex	x轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-12-24 11:48:30.848+08	2019-12-24 11:48:30.848+08	380f8e6c-ddbe-4c2b-90ab-89abece78fd6	2	t	f
4758	angley	y轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-12-24 11:48:31.246+08	2019-12-24 11:48:31.246+08	380f8e6c-ddbe-4c2b-90ab-89abece78fd6	2	t	f
4759	anglez	z轴角度	Output	\N	\N	\N	2	\N	\N	°		2019-12-24 11:48:31.27+08	2019-12-24 11:48:31.27+08	380f8e6c-ddbe-4c2b-90ab-89abece78fd6	2	t	f
4760	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-24 11:48:31.412+08	2019-12-24 11:48:31.412+08	380f8e6c-ddbe-4c2b-90ab-89abece78fd6	2	t	f
4761	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-25 09:37:51.087+08	2019-12-25 09:37:51.087+08	c46b60be-3353-4715-8783-561892271905	2	t	f
4762	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2019-12-25 09:38:41.371+08	2019-12-25 09:38:41.371+08	c46b60be-3353-4715-8783-561892271905	2	t	f
4768	clusterId	\N	Constant	\N	\N	genBasic	\N	\N	\N	\N		2019-12-26 13:42:36.252+08	2019-12-26 13:42:36.252+08	c91efe30-d394-454c-9fd0-8e95a43e79b2	5	t	f
4723	waterLever	水位	Output	\N			0	\N	\N	m	默认监测因素m统一	2019-12-11 15:52:14.257+08	2019-12-25 14:13:49.994+08	53281743-bc5c-46cf-addc-706810bcd681	1	t	f
4763	length	位移	Output	\N			5	50	-50	mm		2019-12-26 11:23:17.45+08	2019-12-26 11:23:26.137+08	e9412219-df4d-4a2b-bfe1-1e81e44f7a60	2	t	f
4766	clusterId	\N	Constant	\N	\N	msRelativeHumidity	\N	\N	\N	\N		2019-12-26 11:49:59.125+08	2019-12-26 11:49:59.125+08	906764b6-5b7f-4cf0-a4a8-915452e6acc7	5	t	f
4769	voltage		Output	\N	\N	\N	2	\N	\N	V		2019-12-26 13:42:56.122+08	2019-12-26 13:42:56.122+08	c91efe30-d394-454c-9fd0-8e95a43e79b2	2	t	f
4779	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 08:44:21.467+08	2019-12-31 08:44:21.467+08	e0fd6ac0-4c4d-4683-9227-d614184aefe2	2	t	f
4816	ein	等效声级	Output	\N	\N	\N	2	\N	\N	dB		2020-01-07 14:24:53.358+08	2020-01-07 14:24:53.358+08	32c69be1-0051-4e6c-8821-fe8b2a3f8215	2	t	f
4770	anglex	x方向位移	Output	\N			4	300	-300	mm		2019-12-26 13:50:05.507+08	2020-01-09 10:01:11.916+08	563028c4-ce25-46d9-8dc5-f32204df7ff4	2	t	f
4771	angley	Y方向位移	Output	\N			4	300	-300	mm		2019-12-26 13:50:05.512+08	2020-01-09 10:01:20.497+08	563028c4-ce25-46d9-8dc5-f32204df7ff4	2	t	f
4767	humidity		Output	\N			0	100	0	%rh		2019-12-26 11:51:53.754+08	2021-01-29 18:03:25.566+08	906764b6-5b7f-4cf0-a4a8-915452e6acc7	2	t	f
4772	Temp	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-30 13:32:17.402+08	2019-12-30 13:32:17.402+08	954de091-0b47-4d24-b0fe-38e707df4448	2	t	f
4773	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-30 16:37:46.262+08	2019-12-30 16:37:46.262+08	dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52	2	t	f
4774	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-30 16:38:31.094+08	2019-12-30 16:38:31.094+08	dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52	2	t	f
4776	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 08:41:21.254+08	2019-12-31 08:41:21.254+08	0650720c-5066-417d-99a8-936fcf6406a4	2	t	f
4777	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 08:42:02.375+08	2019-12-31 08:42:02.375+08	0650720c-5066-417d-99a8-936fcf6406a4	2	t	f
4775	physicalvalue	物理量	Output	\N			3	\N	\N	με		2019-12-30 16:41:25.498+08	2019-12-31 08:56:44.76+08	dcb7d951-15a5-4ee0-8b2b-9a30c1d60e52	2	t	f
4778	physicalvalue	物理量	Output	\N			3	\N	\N	με		2019-12-31 08:42:55.338+08	2019-12-31 09:00:44.19+08	0650720c-5066-417d-99a8-936fcf6406a4	2	t	f
4796	physicalvalue	物理量	Output	\N			3	\N	\N	Kpa		2019-12-31 09:15:44.093+08	2020-11-24 09:55:20.26+08	514bb698-2903-47d6-9749-67f6ead2de82	2	t	f
4780	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 08:45:24.087+08	2019-12-31 08:45:24.087+08	e0fd6ac0-4c4d-4683-9227-d614184aefe2	2	t	f
4782	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 08:48:38.792+08	2019-12-31 08:48:38.792+08	d39ca936-5931-458b-ac6a-3afd59f67b53	2	t	f
4783	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 08:49:37.589+08	2019-12-31 08:49:37.589+08	d39ca936-5931-458b-ac6a-3afd59f67b53	2	t	f
4781	physicalvalue	物理量	Output	\N			3	\N	\N	KN		2019-12-31 08:46:00.177+08	2019-12-31 09:01:19.794+08	e0fd6ac0-4c4d-4683-9227-d614184aefe2	2	t	f
4785	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 09:04:00.847+08	2019-12-31 09:04:00.847+08	f454e2b5-77c5-4282-aceb-bf86690270ba	2	t	f
4786	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 09:04:52.473+08	2019-12-31 09:04:52.473+08	f454e2b5-77c5-4282-aceb-bf86690270ba	2	t	f
4787	physicalvalue	物理量	Output	\N	\N	\N	3	\N	\N	KN		2019-12-31 09:05:50.272+08	2019-12-31 09:05:50.272+08	f454e2b5-77c5-4282-aceb-bf86690270ba	2	t	f
4788	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 09:07:23.338+08	2019-12-31 09:07:23.338+08	f562d703-5cde-4a00-b1c8-1be54d51da9d	2	t	f
4789	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 09:08:01.357+08	2019-12-31 09:08:01.357+08	f562d703-5cde-4a00-b1c8-1be54d51da9d	2	t	f
4790	physicalvalue	物理量	Output	\N	\N	\N	3	\N	\N	mm		2019-12-31 09:08:47.33+08	2019-12-31 09:08:47.33+08	f562d703-5cde-4a00-b1c8-1be54d51da9d	2	t	f
4791	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 09:10:56.79+08	2019-12-31 09:10:56.79+08	15046a7e-2b8d-446c-963e-0f8af7fe7475	2	t	f
4792	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2019-12-31 09:11:30.034+08	2019-12-31 09:11:30.034+08	15046a7e-2b8d-446c-963e-0f8af7fe7475	2	t	f
4794	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2019-12-31 09:13:37.409+08	2019-12-31 09:13:37.409+08	514bb698-2903-47d6-9749-67f6ead2de82	2	t	f
4797	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-01-06 15:12:33.757+08	2020-01-06 15:12:33.757+08	c8044788-3713-45ab-a8f8-cd3b8b3db86f	2	t	f
4798	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-01-06 15:12:33.825+08	2020-01-06 15:12:33.825+08	c8044788-3713-45ab-a8f8-cd3b8b3db86f	2	t	f
4799	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-01-06 15:12:33.832+08	2020-01-06 15:12:33.832+08	c8044788-3713-45ab-a8f8-cd3b8b3db86f	2	t	f
4805	totalPhosphorus	总磷	Output	\N			2	\N	\N	mg/L	（以P计）	2020-01-07 10:01:41.509+08	2020-01-10 09:34:06.526+08	65968c97-efd5-4c64-9f9c-79017790f273	2	t	f
4817	maxnf	最大噪声	Output	\N	\N	\N	2	\N	\N	dB		2020-01-07 14:25:51.661+08	2020-01-07 14:25:51.661+08	32c69be1-0051-4e6c-8821-fe8b2a3f8215	2	t	f
4818	minnf	最小噪声	Output	\N	\N	\N	2	\N	\N	dB		2020-01-07 14:26:14.084+08	2020-01-07 14:26:14.084+08	32c69be1-0051-4e6c-8821-fe8b2a3f8215	2	t	f
4319	physicalvalue	位移	Output	\N			4	\N	\N	mm		2019-09-25 11:38:34.949+08	2020-01-09 17:12:52.822+08	88ec5756-da5e-4fa0-b882-39727baf501b	2	t	f
4828	frequency	频率	Output	\N	\N	\N	6	\N	\N	Hz		2020-01-10 10:53:33.483+08	2020-01-10 10:53:33.483+08	5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	2	t	f
4829	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-01-10 10:53:53.38+08	2020-01-10 10:53:53.38+08	5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	2	t	f
4830	physicalvalue	微应变	Output	\N			0	5000	-5000	με		2020-01-10 10:54:06.918+08	2020-01-10 10:54:32.091+08	5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	2	t	f
4831	am	幅值	Output	\N			3	\N	\N	mv		2020-01-10 10:54:44.229+08	2020-01-10 10:54:51.162+08	5d3b0ddc-308b-4ad6-93cd-7aefd34b600f	2	t	f
4833	physicalvalue	角度	Output	\N	\N	\N	2	\N	\N	°		2020-01-13 11:31:24.441+08	2020-01-13 11:31:24.441+08	a308f5d2-2559-4f60-8323-c243f04ce8cd	2	t	f
4834	voltage_ratio	电压比	Output	\N	\N	\N	2	\N	\N			2020-01-13 11:32:08.161+08	2020-01-13 11:32:08.161+08	a308f5d2-2559-4f60-8323-c243f04ce8cd	2	t	f
4839	voltage_ratio	电压比	Output	\N	\N	\N	2	\N	\N	\N		2020-01-13 15:54:33.702+08	2020-01-13 15:54:33.702+08	d9ea813b-d066-472d-b08e-2436f6520e9f	2	t	f
4840	voltage_ratio	电流值	Output	\N	\N	\N	3	\N	\N	\N		2020-01-13 16:08:57.402+08	2020-01-13 16:08:57.402+08	804133e0-c4a4-441e-acb9-a504734bbd62	2	t	f
2105	physicalvalue	加速度	Output	\N			0			cm/ss		2018-04-02 10:37:43.672+08	2020-01-14 10:56:30.013+08	2dd2b9c9-f307-4635-98cd-0aed7043075d	5	t	f
4843	gasConcentration	气体浓度	Output	\N	\N	\N	2	\N	\N	ppm		2020-01-14 13:55:06.908+08	2020-01-14 13:55:06.908+08	b4574024-8282-445a-b3d6-068582522d6a	2	t	f
4845	gasConcentration	气体浓度	Output	\N	\N	\N	4	\N	\N	%LEL		2020-01-14 13:59:03.973+08	2020-01-14 13:59:03.973+08	ce7d8a22-74e1-4ba0-b501-8f0ca23a4b27	2	t	f
4847	gasConcentration	气体浓度	Output	\N	\N	\N	4	\N	\N	%LEL		2020-01-14 14:02:50.263+08	2020-01-14 14:02:50.263+08	d3d60241-e4b2-445a-bde1-5e5e83bbcace	2	t	f
4852	gasConcentration	气体浓度	Output	\N	\N	\N	4	\N	\N	%LEL		2020-01-14 14:12:06.478+08	2020-01-14 14:12:06.478+08	698204ef-2e94-4c91-9c1b-f1145b054f0e	2	t	f
4853	gasConcentration	气体浓度	Output	\N	\N	\N	5	\N	\N	%LEL		2020-01-14 14:13:41.896+08	2020-01-14 14:13:41.896+08	9538c3ec-e6e4-4d94-b1f6-dcd1bc2e2527	2	t	f
4854	gasConcentration	气体浓度	Output	\N			4	\N	\N	%LEL		2020-01-14 14:15:55.65+08	2020-01-15 13:43:15.835+08	71301f1e-11cb-40ce-8550-770dc2877603	2	t	f
4851	gasConcentration	气体浓度	Output	\N			2	\N	\N	ppm		2020-01-14 14:10:01.183+08	2020-01-15 13:43:45.561+08	11373c99-1270-4b66-9d6d-d19c6ad95118	2	t	f
4850	gasConcentration	气体浓度	Output	\N			4	\N	\N	%LEL		2020-01-14 14:08:15.303+08	2020-01-15 13:44:14.114+08	631fe06e-045c-4b18-b9a5-a6e18d8f3511	2	t	f
4849	gasConcentration	气体浓度	Output	\N			4	\N	\N	%LEL		2020-01-14 14:06:32.989+08	2020-01-15 13:44:40.303+08	0ae8ed9d-56c2-4b07-b81a-a23a10192d1d	2	t	f
4866	pressure	压强	Output	\N	\N	\N	2	\N	\N	Kpa		2020-02-20 16:38:35.634+08	2020-02-20 16:38:35.634+08	37eaae27-d936-4e7d-8680-2d062ac5bb82	2	t	f
4872	uptime	上线时间	Output	\N	\N	\N	\N	\N	\N	h		2020-02-27 21:03:51.308+08	2020-02-27 21:03:51.308+08	39e094af-e8c9-455b-8f47-7d5b627b56c1	1	t	f
4848	gasConcentration	气体浓度	Output	\N			4	\N	\N	ppm		2020-01-14 14:04:32.65+08	2020-01-15 13:45:11.314+08	9a4964ae-b88b-47d8-8007-8ddcf068d4bf	2	t	f
4846	gasConcentration	气体浓度	Output	\N			4	\N	\N	%VOL		2020-01-14 14:00:56.901+08	2020-01-15 13:46:04.151+08	74475f60-31b1-44f8-b887-60013184ef38	2	t	f
4844	gasConcentration	气体浓度	Output	\N			3	\N	\N	ppm		2020-01-14 13:57:25.422+08	2020-01-15 13:54:40.392+08	4b26b77c-de95-45d0-b83b-ee0c410e20a0	2	t	f
4859	voltage_ratio	电压值	Output	\N	\N	\N	2	\N	\N	\N		2020-01-16 10:40:11.388+08	2020-01-16 10:40:11.388+08	4918bd89-601e-4f79-b31f-0aeda6062c82	2	t	f
4861	clusterId	\N	Constant	\N	\N	genBasic	\N	\N	\N	\N		2020-02-11 14:35:37.48+08	2020-02-11 14:35:37.48+08	227b30cf-bef6-488b-b9db-9eaaf4e2f2da	5	t	f
4862	ieeeAddr		Variable	\N	\N		\N	\N	\N			2020-02-11 14:36:08.842+08	2020-02-11 14:36:08.842+08	227b30cf-bef6-488b-b9db-9eaaf4e2f2da	5	t	f
4863	voltage		Output	\N	\N	\N	2	\N	\N			2020-02-11 14:36:30.066+08	2020-02-11 14:36:30.066+08	227b30cf-bef6-488b-b9db-9eaaf4e2f2da	2	t	f
4864	pressure	压强	Output	\N	\N	\N	2	\N	\N	Kpa		2020-02-19 16:36:16.95+08	2020-02-19 16:36:16.95+08	1392402b-26fe-47c7-91d6-d380095aac9f	2	t	f
4865	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-02-19 16:36:43.579+08	2020-02-19 16:36:43.579+08	1392402b-26fe-47c7-91d6-d380095aac9f	2	t	f
4867	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-02-20 16:39:00.411+08	2020-02-20 16:39:00.411+08	37eaae27-d936-4e7d-8680-2d062ac5bb82	2	t	f
4868	length	位移	Output	\N	\N	\N	3	\N	\N	mm		2020-02-21 13:07:57.987+08	2020-02-21 13:07:57.987+08	d83c7fb6-a62f-4cf0-9818-3df3592a0f3b	2	t	f
4870	clusterId	\N	Constant	\N	\N	genOnOff	\N	\N	\N	\N		2020-02-27 20:59:46.095+08	2020-02-27 20:59:46.095+08	458b31ce-11c3-4abc-aeee-3cdaa45215c2	5	t	f
4871	state	状态	Output	\N	0,1		0					2020-02-27 21:00:53.808+08	2020-02-27 21:01:07.59+08	458b31ce-11c3-4abc-aeee-3cdaa45215c2	4	t	f
4874	ram	内存用量	Output	\N	\N	\N	\N	\N	\N	%		2020-02-27 21:04:52.794+08	2020-02-27 21:04:52.794+08	39e094af-e8c9-455b-8f47-7d5b627b56c1	1	t	f
4873	cpu	负载	Output	\N			0	\N	\N	%		2020-02-27 21:04:27.74+08	2020-02-27 21:58:06.734+08	39e094af-e8c9-455b-8f47-7d5b627b56c1	1	t	f
4876	state	状态	Output	\N	0,1,2,3,9		0					2020-02-27 22:26:34.347+08	2020-03-01 03:03:59.803+08	d5ca53cd-12eb-4cb5-81e0-8697934670ab	4	t	f
4878	state		Output	\N	0,1,2,3,9		0					2020-02-27 22:27:23.49+08	2020-03-01 03:04:08.822+08	cb88ad52-fd36-4f48-8946-4e33300d3b1e	4	t	f
4879	temperature		Variable	\N	\N	\N	0	60	-10			2020-02-27 22:28:16.372+08	2020-02-27 22:28:16.372+08	cb88ad52-fd36-4f48-8946-4e33300d3b1e	2	t	f
4880	clusterId	\N	Constant	\N	\N	genOnOff	\N	\N	\N	\N		2020-03-01 20:25:45.242+08	2020-03-01 20:25:45.242+08	d5ca53cd-12eb-4cb5-81e0-8697934670ab	5	t	f
4881	clusterId	\N	Constant	\N	\N	genBasic	\N	\N	\N	\N		2020-03-01 20:26:12.533+08	2020-03-01 20:26:12.533+08	cb88ad52-fd36-4f48-8946-4e33300d3b1e	5	t	f
4860	noise	噪声	Output	\N			2	120	30	dB		2020-01-17 15:31:03.427+08	2020-03-02 18:54:40.037+08	8481bad4-e00b-4018-bc7f-33c5c4c800ef	2	t	f
4882	clusterId	\N	Constant	\N	\N	genOnOff	\N	\N	\N	\N		2020-03-07 16:35:47.288+08	2020-03-07 16:35:47.288+08	b6fbb28e-3823-4d97-8ade-baadda4ca2f2	5	t	f
4883	clusterId		Constant	\N	\N	genBasic	\N	\N	\N			2020-03-07 16:35:47.305+08	2020-03-07 16:35:47.305+08	d8a43904-24f4-496b-acd9-bc41e483b144	5	t	f
4884	temperature	温度	Output	\N	\N	\N	1	80	-10			2020-03-07 16:35:47.311+08	2020-03-07 16:35:47.311+08	d8a43904-24f4-496b-acd9-bc41e483b144	2	t	f
4885	consumption	用量	Output	\N	\N	\N	3	\N	\N	m3		2020-03-07 16:35:47.316+08	2020-03-07 16:35:47.316+08	d8a43904-24f4-496b-acd9-bc41e483b144	2	t	f
4887	status	status	Output	\N	0,1,2,3,9	\N	\N	\N	\N	\N		2020-03-07 16:37:04.248+08	2020-03-07 16:37:04.248+08	b6fbb28e-3823-4d97-8ade-baadda4ca2f2	4	t	f
4888	temperature	温度	Output	\N	\N	\N	4	\N	\N	°		2020-03-10 13:53:17.014+08	2020-03-10 13:53:17.014+08	83e59e62-4f0e-438c-af09-6988ceca1a91	2	t	f
4889	humidity	湿度	Output	\N	\N	\N	4	\N	\N	℃		2020-03-10 13:53:38.365+08	2020-03-10 13:53:38.365+08	83e59e62-4f0e-438c-af09-6988ceca1a91	2	t	f
4891	x	X位置	Output	\N	\N	\N	4	\N	\N	mm		2020-03-12 15:40:25.56+08	2020-03-12 15:40:25.56+08	a347cbc7-41df-43d5-96a1-0424f00954d5	2	t	f
4892	y	Y位置	Output	\N	\N	\N	4	\N	\N	mm		2020-03-12 15:40:45.603+08	2020-03-12 15:40:45.603+08	a347cbc7-41df-43d5-96a1-0424f00954d5	2	t	f
4893	z	Z位置	Output	\N	\N	\N	4	\N	\N	mm		2020-03-12 15:41:00.065+08	2020-03-12 15:41:00.065+08	a347cbc7-41df-43d5-96a1-0424f00954d5	2	t	f
4894	frequency	频率	Output	\N			4	\N	\N	Hz		2020-03-13 15:41:53.567+08	2020-03-13 15:42:13.599+08	dc8f2875-b635-4147-9a96-92b72ccadfef	2	t	f
4895	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-03-13 15:42:51.947+08	2020-03-13 15:42:51.947+08	dc8f2875-b635-4147-9a96-92b72ccadfef	2	t	f
4896	physicalvalue	压强	Output	\N			4	0.6	0	MPa		2020-03-13 15:44:46.382+08	2020-03-13 15:44:59.997+08	dc8f2875-b635-4147-9a96-92b72ccadfef	2	t	f
4897	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-03-13 15:46:29.383+08	2020-03-13 15:46:29.383+08	27cc4200-3c65-481b-92b3-1d747cbef33b	2	t	f
4898	frequency	频率	Output	\N	\N	\N	4	\N	\N	Hz		2020-03-13 15:47:13.409+08	2020-03-13 15:47:13.409+08	27cc4200-3c65-481b-92b3-1d747cbef33b	2	t	f
4899	physicalvalue	压力	Output	\N			4	0.8	0	MPa		2020-03-13 15:47:28.305+08	2020-03-13 15:47:40.027+08	27cc4200-3c65-481b-92b3-1d747cbef33b	2	t	f
4900	temperature	温度	Output	\N	\N	\N	4	120	-55	℃		2020-03-13 17:43:23.046+08	2020-03-13 17:43:23.046+08	f51d3996-cd2a-4ea0-9430-94c6f5b5268a	2	t	f
4901	pressure	压强	Output	\N			3	\N	\N	kPa		2020-03-18 14:40:34.027+08	2020-03-18 14:40:43.683+08	974fa08a-e1e6-4e6b-b3ac-19e3863675aa	2	t	f
4902	参数1	\N	Variable	\N	\N	\N	\N	100	1	\N		2020-03-20 11:18:31.247+08	2020-03-20 11:18:31.247+08	8a226009-de6a-448d-8fc8-1056e5a62c7c	1	t	f
4903	输出1		Output	\N	\N	\N	2	\N	\N			2020-03-20 11:18:45.554+08	2020-03-20 11:18:45.554+08	8a226009-de6a-448d-8fc8-1056e5a62c7c	2	t	f
4904	realTimeGasCon	粉尘浓度	Output	\N	\N	\N	3	\N	\N	ppm		2020-03-23 16:31:07.865+08	2020-03-23 16:31:07.865+08	01444399-9e03-4682-bb70-3b5137cd469e	2	t	f
4905	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-03-23 17:26:57.285+08	2020-03-23 17:26:57.285+08	919db10d-5cbf-423f-ac9b-035d06ecf13b	1	t	f
4906	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%RH		2020-03-23 17:27:19.731+08	2020-03-23 17:27:19.731+08	919db10d-5cbf-423f-ac9b-035d06ecf13b	2	t	f
1447	value	应变	Output	\N			1			με		2018-01-23 13:54:59.283+08	2020-03-25 10:35:29.194+08	613d1519-cf1a-47b5-a44a-2397b79bee2a	2	t	f
4920	alarmDeviceName	设备名称	Output	\N	\N	\N	\N	\N	\N	\N		2020-04-01 09:57:36.398+08	2020-04-01 09:57:36.398+08	a3e674eb-3100-4cd1-907c-b545482bce0d	5	t	f
4911	zCoordinate	z方向坐标	Output	\N			\N	\N	\N			2020-03-25 15:06:09.344+08	2020-03-25 15:08:47.337+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4910	yCoordinate	y方向坐标	Output	\N			\N	\N	\N			2020-03-25 15:05:27.414+08	2020-03-25 15:08:54.555+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4909	xCoordinate	x方向坐标	Output	\N			\N	\N	\N			2020-03-25 15:04:47.504+08	2020-03-25 15:09:04.177+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4908	yLength	y方向位移	Output	\N			\N	\N	\N	mm		2020-03-25 15:01:23.653+08	2020-03-25 15:09:11.92+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4907	xLength	x方向位移	Output	\N			\N	\N	\N	mm		2020-03-25 15:00:27.609+08	2020-03-25 15:09:22.195+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4915	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-03-25 15:15:35.975+08	2020-03-25 15:15:35.975+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4912	xAcceleration	x方向加速度	Output	\N			\N	\N	\N	mg		2020-03-25 15:08:37.007+08	2020-03-25 15:25:24.648+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4913	yAcceleration	y方向加速度	Output	\N			\N	\N	\N	mg		2020-03-25 15:10:12.014+08	2020-03-25 15:25:47.268+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4914	zAcceleration	z方向加速度	Output	\N			\N	\N	\N	mg		2020-03-25 15:15:02.325+08	2020-03-25 15:25:54.512+08	9474176b-8d55-48c0-bd60-1bcfb6da0576	2	t	f
4916	temperature	温度	Output	\N	\N	\N	4	120	-55	℃		2020-03-25 16:58:17.739+08	2020-03-25 16:58:17.739+08	974fa08a-e1e6-4e6b-b3ac-19e3863675aa	2	t	f
4917	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-03-26 11:01:57.122+08	2020-03-26 11:01:57.122+08	f58d1284-4cba-47d9-b2ff-2bfeeff62797	2	t	f
4918	length	液位	Output	\N	\N	\N	\N	\N	\N	mm		2020-03-26 11:02:45.571+08	2020-03-26 11:02:45.571+08	f58d1284-4cba-47d9-b2ff-2bfeeff62797	2	t	f
4919	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-03-26 15:51:12.033+08	2020-03-26 15:51:12.033+08	3ce74ad5-66e4-40b3-b5c0-52653cbbca87	2	t	f
4921	alarmType	告警类型	Output	\N	\N	\N	\N	\N	\N			2020-04-01 09:58:41.883+08	2020-04-01 09:58:41.883+08	a3e674eb-3100-4cd1-907c-b545482bce0d	1	t	f
4922	isChecked	是否已读	Output	\N	\N	\N	\N	\N	\N		0-未读，1-已读	2020-04-01 09:59:31.425+08	2020-04-01 09:59:31.425+08	a3e674eb-3100-4cd1-907c-b545482bce0d	1	t	f
4923	alarmPicUrl	告警图片地址	Output	\N	\N	\N	\N	\N	\N			2020-04-01 09:59:55.451+08	2020-04-01 09:59:55.451+08	a3e674eb-3100-4cd1-907c-b545482bce0d	5	t	f
4924	customerType	告警大类	Output	\N	\N	\N	\N	\N	\N			2020-04-01 10:01:09.579+08	2020-04-01 10:01:09.579+08	a3e674eb-3100-4cd1-907c-b545482bce0d	5	t	f
4925	customerInfo	具体信息	Output	\N	\N	\N	\N	\N	\N			2020-04-01 10:01:34.054+08	2020-04-01 10:01:34.054+08	a3e674eb-3100-4cd1-907c-b545482bce0d	5	t	f
4926	temperature	触发温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-01 14:39:05.235+08	2020-04-01 14:39:05.235+08	a3e674eb-3100-4cd1-907c-b545482bce0d	2	t	f
4928	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-03 17:23:08.022+08	2020-04-03 17:23:08.022+08	a6d36e90-1e77-42f2-9d03-3852f9e5a9ed	2	t	f
4929	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-03 17:24:33.267+08	2020-04-03 17:24:33.267+08	69888b76-d5a8-4e6d-90a8-cfa968515267	2	t	f
4930	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2020-04-03 17:25:10.202+08	2020-04-03 17:25:10.202+08	69888b76-d5a8-4e6d-90a8-cfa968515267	2	t	f
4931	anglex	X轴角度	Output	\N	\N	\N	2	30	-30	°		2020-04-03 17:26:35.978+08	2020-04-03 17:26:35.978+08	a868b3a8-85ed-4780-a0cf-9d0206e3cd58	2	t	f
4932	temperature	温度	Output	\N	\N	\N	2	70	-70	℃		2020-04-03 17:27:17.604+08	2020-04-03 17:27:17.604+08	a868b3a8-85ed-4780-a0cf-9d0206e3cd58	2	t	f
4933	anglex	X方向角度	Output	\N	\N	\N	4	30	-30	°		2020-04-03 17:28:21.07+08	2020-04-03 17:28:21.07+08	34d873b8-b4cf-4313-ae19-a2fedae19eca	2	t	f
4934	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-03 17:28:52.596+08	2020-04-03 17:28:52.596+08	34d873b8-b4cf-4313-ae19-a2fedae19eca	2	t	f
4936	angley	y方向角度	Output	\N			\N	30	-30	°		2020-04-05 16:39:18.208+08	2020-04-10 14:12:17.357+08	69888b76-d5a8-4e6d-90a8-cfa968515267	2	t	f
4937	angley	y方向角度	Output	\N			\N	30	-30	°		2020-04-05 16:40:04.395+08	2020-04-10 14:12:27.992+08	a868b3a8-85ed-4780-a0cf-9d0206e3cd58	2	t	f
5115	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-13 11:35:09.399+08	2020-04-13 11:35:09.399+08	8e6f0fd7-4b27-47b4-8e62-85c8302d8219	2	t	f
4955	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 15:31:03.511+08	2020-04-08 15:31:03.511+08	235e50cf-8332-4752-ad90-735b21a65636	2	t	f
5011	angley	y方向角度	Output	\N			2	30	-30	°		2020-04-09 11:55:14.324+08	2020-04-10 14:13:49.164+08	f8e59d17-39f9-4805-895b-be09de939091	2	t	f
4939	solarRadiation	太阳辐射值	Output	\N	\N	\N	\N	\N	\N	W/㎡		2020-04-08 09:46:26.738+08	2020-04-08 09:46:26.738+08	8f9706bb-e71b-448c-b32d-4b4cfe420ddf	1	t	f
4940	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2020-04-08 10:44:47.025+08	2020-04-08 10:44:47.025+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	2	t	f
4942	noise	噪声	Output	\N	\N	\N	1	\N	\N	dB		2020-04-08 10:47:37.732+08	2020-04-08 10:47:37.732+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	2	t	f
4943	pm25	pm2.5	Output	\N	\N	\N	\N	\N	\N	ug/m³		2020-04-08 10:48:33.252+08	2020-04-08 10:48:33.252+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	1	t	f
4941	humidity	湿度	Output	\N			1	\N	\N	%RH		2020-04-08 10:47:03.046+08	2020-04-08 10:48:39.455+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	2	t	f
4944	pm10	pm10	Output	\N	\N	\N	\N	\N	\N	ug/m³		2020-04-08 11:03:38.363+08	2020-04-08 11:03:38.363+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	1	t	f
4945	pressure	大气压力	Output	\N	\N	\N	\N	\N	\N	Kpa		2020-04-08 11:08:23.04+08	2020-04-08 11:08:23.04+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	1	t	f
4946	intensity	光照强度	Output	\N	\N	\N	\N	\N	\N	Lux		2020-04-08 11:16:30.253+08	2020-04-08 11:16:30.253+08	8e3e29ea-c35f-4814-86a3-1ca1f0db3ca0	1	t	f
4947	physicalvalue	轴力	Output	\N			4	5000	-5000	KN		2020-04-08 14:14:26.19+08	2020-04-08 14:14:37.125+08	b912ee89-771c-412b-b6f1-43fd55aa3743	2	t	f
4948	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2020-04-08 14:15:09.01+08	2020-04-08 14:15:09.01+08	b912ee89-771c-412b-b6f1-43fd55aa3743	2	t	f
4949	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 14:15:56.994+08	2020-04-08 14:15:56.994+08	b912ee89-771c-412b-b6f1-43fd55aa3743	2	t	f
4950	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 14:16:45.17+08	2020-04-08 14:16:45.17+08	b912ee89-771c-412b-b6f1-43fd55aa3743	2	t	f
4951	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 14:24:56.924+08	2020-04-08 14:24:56.924+08	3d4528b4-3198-487f-9a4f-60b0b142f4fa	2	t	f
4952	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-04-08 14:26:17.291+08	2020-04-08 14:26:17.291+08	3d4528b4-3198-487f-9a4f-60b0b142f4fa	2	t	f
4953	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-04-08 14:26:53.569+08	2020-04-08 14:26:53.569+08	3d4528b4-3198-487f-9a4f-60b0b142f4fa	2	t	f
4954	physicalvalue	轴力	Output	\N			\N	5000	-5000	KN		2020-04-08 14:27:42.55+08	2020-04-08 14:27:57.874+08	3d4528b4-3198-487f-9a4f-60b0b142f4fa	2	t	f
4956	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-08 15:43:36.55+08	2020-04-08 15:43:36.55+08	235e50cf-8332-4752-ad90-735b21a65636	2	t	f
4957	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 15:44:13.872+08	2020-04-08 15:44:13.872+08	235e50cf-8332-4752-ad90-735b21a65636	2	t	f
4958	physicalvalue	应力	Output	\N			2	0.6	0	MPa		2020-04-08 15:45:02.718+08	2020-04-08 15:45:21.362+08	235e50cf-8332-4752-ad90-735b21a65636	2	t	f
4959	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 15:46:38.227+08	2020-04-08 15:46:38.227+08	43f54168-c6b9-4a10-af52-08fea895afd5	2	t	f
4960	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-04-08 15:47:07.989+08	2020-04-08 15:47:07.989+08	43f54168-c6b9-4a10-af52-08fea895afd5	2	t	f
4961	physicalvalue	应力	Output	\N	\N	\N	\N	0.6	0	MPa		2020-04-08 15:48:04.594+08	2020-04-08 15:48:04.594+08	43f54168-c6b9-4a10-af52-08fea895afd5	2	t	f
4962	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 15:48:43.94+08	2020-04-08 15:48:43.94+08	43f54168-c6b9-4a10-af52-08fea895afd5	2	t	f
4963	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 15:49:19.512+08	2020-04-08 15:49:19.512+08	ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	2	t	f
4970	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 16:00:19.953+08	2020-04-08 16:00:19.953+08	ec4bef46-3f33-4abc-bc5a-fdd02804546e	2	t	f
4973	physicalvalue	应力	Output	\N	\N	\N	2	6	0	MPa		2020-04-08 16:01:46.67+08	2020-04-08 16:01:46.67+08	facb0a36-aad1-464a-9e62-5982e7f96038	2	t	f
4978	physicalvalue	应力	Output	\N	\N	\N	2	6	0	MPa		2020-04-08 16:04:32.271+08	2020-04-08 16:04:32.271+08	2fedcbbc-d631-410f-9dbf-9868452b711e	2	t	f
4987	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2020-04-09 09:30:38.835+08	2020-04-09 09:30:38.835+08	36882038-cdf2-4b13-ba96-4cc30aec58fd	2	t	f
4989	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 09:51:36.809+08	2020-04-09 09:51:36.809+08	4975a00d-a65f-4564-9e87-4d0e75b2b44a	2	t	f
4994	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 09:56:27.458+08	2020-04-09 09:56:27.458+08	3b90cfc3-9011-4dac-a197-db1f1224684d	2	t	f
4997	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 10:01:27.87+08	2020-04-09 10:01:27.87+08	33cf337b-b7b3-44f0-ba1c-a4394b8b357f	2	t	f
5000	physicalvalue	水压	Output	\N	\N	\N	2	0.6	0	MPa		2020-04-09 10:03:00.975+08	2020-04-09 10:03:00.975+08	33cf337b-b7b3-44f0-ba1c-a4394b8b357f	2	t	f
5008	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 10:13:16.229+08	2020-04-09 10:13:16.229+08	9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	2	t	f
5015	physicalvalue	应变	Output	\N			2	1500	-1500	με		2020-04-09 16:45:31.981+08	2020-04-09 16:45:53.371+08	62e931ef-494f-487d-b32d-d4025cfccc5b	2	t	f
5020	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 16:49:56.767+08	2020-04-09 16:49:56.767+08	8e1b795f-20a4-49c1-844a-6818b46743f2	2	t	f
5023	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 16:54:58.793+08	2020-04-09 16:54:58.793+08	e905e3ce-b6ac-4237-9590-14ee97e867fe	2	t	f
5026	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 17:05:46.485+08	2020-04-09 17:05:46.485+08	7938b967-3298-4052-b8c2-d0fd4b57adb2	2	t	f
5030	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 17:09:36.166+08	2020-04-09 17:09:36.166+08	44e109ee-d542-45f6-914e-6313d2ef5aee	2	t	f
5031	physicalvalue	荷载力	Output	\N			4	160	-160	KN		2020-04-09 17:10:11.576+08	2020-04-09 17:10:39.911+08	44e109ee-d542-45f6-914e-6313d2ef5aee	2	t	f
5037	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 17:23:02.695+08	2020-04-09 17:23:02.695+08	b51644b9-4159-40db-9599-8b080069cc65	2	t	f
5039	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 17:24:04.313+08	2020-04-09 17:24:04.313+08	b51644b9-4159-40db-9599-8b080069cc65	2	t	f
5067	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-10 17:07:58.996+08	2020-04-10 17:07:58.996+08	ce9b72cb-67fd-4117-b485-a9443b3409e9	2	t	f
4935	angley	y方向角度	Output	\N			3	30	-30	°		2020-04-05 16:38:47.898+08	2020-04-10 14:11:49.235+08	a6d36e90-1e77-42f2-9d03-3852f9e5a9ed	2	t	f
5068	temperature	温度	Output	\N			4	\N	\N	℃		2020-04-10 17:08:24.736+08	2020-04-10 17:08:42.862+08	ce9b72cb-67fd-4117-b485-a9443b3409e9	2	t	f
4938	angley	y方向角度	Output	\N			3	30	-30	°		2020-04-05 16:40:36.818+08	2020-04-10 14:12:54.525+08	34d873b8-b4cf-4313-ae19-a2fedae19eca	2	t	f
4980	pressure	压力	Output	\N			2	10	-10	Kpa		2020-04-08 16:38:25.311+08	2020-04-13 13:23:54.437+08	93a512ff-ed6a-423c-a66b-0a9c882a1f7c	2	t	f
4964	physicalvalue	应力	Output	\N	\N	\N	2	0.6	0	MPa		2020-04-08 15:50:04.991+08	2020-04-08 15:50:04.991+08	ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	2	t	f
4965	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-04-08 15:50:54.274+08	2020-04-08 15:50:54.274+08	ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	2	t	f
4966	am	幅值	Output	\N	\N	\N	\N	\N	\N	mv		2020-04-08 15:51:33.892+08	2020-04-08 15:51:33.892+08	ac9005d2-5ca6-44c7-a4c2-d9dc1b66738b	2	t	f
4967	physicalvalue	应力	Output	\N	\N	\N	2	6	0	MPa		2020-04-08 15:59:03.3+08	2020-04-08 15:59:03.3+08	ec4bef46-3f33-4abc-bc5a-fdd02804546e	2	t	f
4968	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 15:59:26.117+08	2020-04-08 15:59:26.117+08	ec4bef46-3f33-4abc-bc5a-fdd02804546e	2	t	f
4969	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-08 15:59:48.521+08	2020-04-08 15:59:48.521+08	ec4bef46-3f33-4abc-bc5a-fdd02804546e	2	t	f
4971	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-08 16:00:49.442+08	2020-04-08 16:00:49.442+08	facb0a36-aad1-464a-9e62-5982e7f96038	2	t	f
4972	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 16:01:20.311+08	2020-04-08 16:01:20.311+08	facb0a36-aad1-464a-9e62-5982e7f96038	2	t	f
4974	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 16:02:35.805+08	2020-04-08 16:02:35.805+08	facb0a36-aad1-464a-9e62-5982e7f96038	2	t	f
4975	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-08 16:03:02.032+08	2020-04-08 16:03:02.032+08	2fedcbbc-d631-410f-9dbf-9868452b711e	2	t	f
4976	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-08 16:03:33.693+08	2020-04-08 16:03:33.693+08	2fedcbbc-d631-410f-9dbf-9868452b711e	2	t	f
4977	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 16:04:01.837+08	2020-04-08 16:04:01.837+08	2fedcbbc-d631-410f-9dbf-9868452b711e	2	t	f
4979	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-08 16:37:35.911+08	2020-04-08 16:37:35.911+08	93a512ff-ed6a-423c-a66b-0a9c882a1f7c	2	t	f
4981	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 09:23:29.534+08	2020-04-09 09:23:29.534+08	47fbc1d7-872f-4e0d-b675-c7d51436f795	2	t	f
4982	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 09:24:02.345+08	2020-04-09 09:24:02.345+08	47fbc1d7-872f-4e0d-b675-c7d51436f795	2	t	f
5002	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 10:08:03.431+08	2020-04-09 10:08:03.431+08	a52e2352-c27a-4d80-85fd-aaf9967cc19f	2	t	f
5033	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 17:19:00.682+08	2020-04-09 17:19:00.682+08	7b3502a3-1fd6-467c-b66f-221cc977bcda	2	t	f
5043	angley	y方向角度	Output	\N			\N	30	-30	°		2020-04-10 10:52:44.243+08	2020-04-10 14:14:00.939+08	da212a69-66d5-4870-a4f5-c49da884d914	2	t	f
4983	physicalvalue	微应变	Output	\N			2	5000	-5000	με		2020-04-09 09:26:39.846+08	2020-04-09 09:26:57.579+08	47fbc1d7-872f-4e0d-b675-c7d51436f795	2	t	f
4984	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 09:27:29.717+08	2020-04-09 09:27:29.717+08	47fbc1d7-872f-4e0d-b675-c7d51436f795	2	t	f
4985	physicalvalue	应变	Output	\N			4	1500	-1500	με		2020-04-09 09:29:40.414+08	2020-04-09 09:29:49.511+08	36882038-cdf2-4b13-ba96-4cc30aec58fd	2	t	f
4986	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 09:30:12.889+08	2020-04-09 09:30:12.889+08	36882038-cdf2-4b13-ba96-4cc30aec58fd	2	t	f
5066	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-10 17:07:32.199+08	2020-04-10 17:07:32.199+08	ce9b72cb-67fd-4117-b485-a9443b3409e9	2	t	f
4988	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 09:31:12.088+08	2020-04-09 09:31:12.088+08	36882038-cdf2-4b13-ba96-4cc30aec58fd	2	t	f
4990	physicalvalue	水压	Output	\N			2	1	0	MPa		2020-04-09 09:52:05.866+08	2020-04-09 09:52:27.504+08	4975a00d-a65f-4564-9e87-4d0e75b2b44a	2	t	f
4991	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 09:52:51.095+08	2020-04-09 09:52:51.095+08	4975a00d-a65f-4564-9e87-4d0e75b2b44a	2	t	f
4992	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 09:54:07.47+08	2020-04-09 09:54:07.47+08	4975a00d-a65f-4564-9e87-4d0e75b2b44a	2	t	f
5018	physicalvalue	应变	Output	\N	\N	\N	2	5000	-5000	με		2020-04-09 16:48:49.19+08	2020-04-09 16:48:49.19+08	8e1b795f-20a4-49c1-844a-6818b46743f2	2	t	f
5054	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-10 15:38:42.328+08	2020-04-10 15:38:42.328+08	0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f	2	t	f
4993	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 09:56:00.994+08	2020-04-09 09:56:00.994+08	3b90cfc3-9011-4dac-a197-db1f1224684d	2	t	f
4995	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 09:56:51.272+08	2020-04-09 09:56:51.272+08	3b90cfc3-9011-4dac-a197-db1f1224684d	2	t	f
4996	physicalvalue	水压	Output	\N			2	0.8	0	MPa		2020-04-09 09:57:27.142+08	2020-04-09 09:57:40.317+08	3b90cfc3-9011-4dac-a197-db1f1224684d	2	t	f
4998	am	幅值	Output	\N	\N	\N	\N	\N	\N	mv		2020-04-09 10:01:48.913+08	2020-04-09 10:01:48.913+08	33cf337b-b7b3-44f0-ba1c-a4394b8b357f	2	t	f
4999	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 10:02:19.598+08	2020-04-09 10:02:19.598+08	33cf337b-b7b3-44f0-ba1c-a4394b8b357f	2	t	f
5001	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 10:07:37.366+08	2020-04-09 10:07:37.366+08	a52e2352-c27a-4d80-85fd-aaf9967cc19f	2	t	f
5056	angley	y方向角度	Output	\N	\N	\N	4	\N	\N	°		2020-04-10 15:39:28.839+08	2020-04-10 15:39:28.839+08	0c8d3e5c-4b72-4b7f-bc25-e0f20e899f0f	2	t	f
5003	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 10:09:00.979+08	2020-04-09 10:09:00.979+08	a52e2352-c27a-4d80-85fd-aaf9967cc19f	2	t	f
5004	physicalvalue	水压	Output	\N			2	0.4	0	MPa		2020-04-09 10:09:32.98+08	2020-04-09 10:09:47.767+08	a52e2352-c27a-4d80-85fd-aaf9967cc19f	2	t	f
5005	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 10:11:45.709+08	2020-04-09 10:11:45.709+08	9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	2	t	f
5006	physicalvalue	水压	Output	\N	\N	\N	4	\N	\N	MPa		2020-04-09 10:12:14.72+08	2020-04-09 10:12:14.72+08	9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	2	t	f
5007	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 10:12:40.974+08	2020-04-09 10:12:40.974+08	9fb72bd5-827f-42b1-8c3f-9cd2b7bb9f4b	2	t	f
5010	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 11:53:45.968+08	2020-04-09 11:53:45.968+08	719b1f89-ba16-4e07-bcb6-f3914f8e0aca	2	t	f
5012	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 11:55:42.908+08	2020-04-09 11:55:42.908+08	f8e59d17-39f9-4805-895b-be09de939091	2	t	f
5013	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 16:44:09.935+08	2020-04-09 16:44:09.935+08	62e931ef-494f-487d-b32d-d4025cfccc5b	2	t	f
5014	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 16:44:50.144+08	2020-04-09 16:44:50.144+08	62e931ef-494f-487d-b32d-d4025cfccc5b	2	t	f
5016	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 16:46:18.279+08	2020-04-09 16:46:18.279+08	62e931ef-494f-487d-b32d-d4025cfccc5b	2	t	f
5040	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 17:24:39.523+08	2020-04-09 17:24:39.523+08	b51644b9-4159-40db-9599-8b080069cc65	2	t	f
5009	angley	y方向角度	Output	\N			2	30	-30	°		2020-04-09 11:53:15.379+08	2020-04-10 14:14:18.609+08	719b1f89-ba16-4e07-bcb6-f3914f8e0aca	2	t	f
5059	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-10 15:42:33.566+08	2020-04-10 15:42:33.566+08	6dfd1190-97ed-46dc-aca7-921af38cdf01	2	t	f
5017	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 16:48:09.161+08	2020-04-09 16:48:09.161+08	8e1b795f-20a4-49c1-844a-6818b46743f2	2	t	f
5019	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 16:49:21.982+08	2020-04-09 16:49:21.982+08	8e1b795f-20a4-49c1-844a-6818b46743f2	2	t	f
5021	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-09 16:53:56.025+08	2020-04-09 16:53:56.025+08	e905e3ce-b6ac-4237-9590-14ee97e867fe	2	t	f
5022	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 16:54:21.752+08	2020-04-09 16:54:21.752+08	e905e3ce-b6ac-4237-9590-14ee97e867fe	2	t	f
5024	physicalvalue	应力	Output	\N			2	3000	-3000	με		2020-04-09 16:57:33.407+08	2020-04-09 16:57:53.937+08	e905e3ce-b6ac-4237-9590-14ee97e867fe	2	t	f
5025	physicalvalue	荷载力	Output	\N			4	136	-136	KN		2020-04-09 17:05:08.147+08	2020-04-09 17:05:23.82+08	7938b967-3298-4052-b8c2-d0fd4b57adb2	2	t	f
5027	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-09 17:06:31.029+08	2020-04-09 17:06:31.029+08	7938b967-3298-4052-b8c2-d0fd4b57adb2	2	t	f
5028	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 17:08:30.613+08	2020-04-09 17:08:30.613+08	44e109ee-d542-45f6-914e-6313d2ef5aee	2	t	f
5029	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-09 17:09:06.999+08	2020-04-09 17:09:06.999+08	44e109ee-d542-45f6-914e-6313d2ef5aee	2	t	f
5049	anglex	x方向角度	Output	\N			2	30	-30	°		2020-04-10 14:09:22.218+08	2020-04-10 14:12:06.065+08	a6d36e90-1e77-42f2-9d03-3852f9e5a9ed	2	t	f
5053	angley	y方向角度	Output	\N	\N	\N	3	30	-30	°		2020-04-10 14:40:35.911+08	2020-04-10 14:40:35.911+08	22fd06d1-3028-481b-9025-f4fa0093bb6a	2	t	f
5032	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-09 17:15:41.061+08	2020-04-09 17:15:41.061+08	7938b967-3298-4052-b8c2-d0fd4b57adb2	2	t	f
5034	physicalvalue	荷载力	Output	\N			4	105	-105	KN		2020-04-09 17:19:34.877+08	2020-04-09 17:19:51.362+08	7b3502a3-1fd6-467c-b66f-221cc977bcda	2	t	f
5035	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-09 17:20:16.115+08	2020-04-09 17:20:16.115+08	7b3502a3-1fd6-467c-b66f-221cc977bcda	2	t	f
5036	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-09 17:21:19.817+08	2020-04-09 17:21:19.817+08	7b3502a3-1fd6-467c-b66f-221cc977bcda	2	t	f
5038	physicalvalue	荷载力	Output	\N			4	75	-75	KN		2020-04-09 17:23:31.093+08	2020-04-09 17:23:42.653+08	b51644b9-4159-40db-9599-8b080069cc65	2	t	f
5041	physicalvalue	轴力	Output	\N	\N	\N	2	5000	-5000	KN		2020-04-10 10:45:21.409+08	2020-04-10 10:45:21.409+08	de345f11-6d4a-420b-963d-0bc26a7144f1	2	t	f
5042	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-10 10:45:46.774+08	2020-04-10 10:45:46.774+08	de345f11-6d4a-420b-963d-0bc26a7144f1	2	t	f
5044	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-04-10 10:53:32.794+08	2020-04-10 10:53:32.794+08	da212a69-66d5-4870-a4f5-c49da884d914	2	t	f
5045	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-10 11:01:21.62+08	2020-04-10 11:01:21.62+08	de345f11-6d4a-420b-963d-0bc26a7144f1	2	t	f
5046	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-10 11:01:42.116+08	2020-04-10 11:01:42.116+08	de345f11-6d4a-420b-963d-0bc26a7144f1	2	t	f
5048	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-10 11:05:13.368+08	2020-04-10 11:05:13.368+08	ad8e440e-0f52-4e43-95ed-97bed0575767	2	t	f
5047	angley	y方向角度	Output	\N			2	30	-30	°		2020-04-10 11:04:24.156+08	2020-04-10 14:14:35.773+08	ad8e440e-0f52-4e43-95ed-97bed0575767	2	t	f
5050	angley	y方向角度	Output	\N	\N	\N	\N	30	-30	°		2020-04-10 14:36:24.651+08	2020-04-10 14:36:24.651+08	bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863	2	t	f
5051	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-10 14:36:53.688+08	2020-04-10 14:36:53.688+08	bd6fbf3d-b14f-4da0-bcfe-fec0c1afa863	2	t	f
5052	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-10 14:39:59.384+08	2020-04-10 14:39:59.384+08	22fd06d1-3028-481b-9025-f4fa0093bb6a	2	t	f
5055	temperature	温度	Output	\N	\N	\N	4	\N	\N	℃		2020-04-10 15:38:58.217+08	2020-04-10 15:38:58.217+08	bef72760-da7f-4b64-a389-b3040de2ded3	2	t	f
5057	angley	y方向角度	Output	\N	\N	\N	4	\N	\N	°		2020-04-10 15:40:09.695+08	2020-04-10 15:40:09.695+08	bef72760-da7f-4b64-a389-b3040de2ded3	2	t	f
5058	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-10 15:42:12.901+08	2020-04-10 15:42:12.901+08	6dfd1190-97ed-46dc-aca7-921af38cdf01	2	t	f
5060	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-10 15:42:58.223+08	2020-04-10 15:42:58.223+08	6dfd1190-97ed-46dc-aca7-921af38cdf01	2	t	f
5061	physicalvalue	应力	Output	\N	\N	\N	\N	\N	\N			2020-04-10 15:49:56.346+08	2020-04-10 15:49:56.346+08	6dfd1190-97ed-46dc-aca7-921af38cdf01	2	t	f
5062	physicalvalue	轴力	Output	\N			\N	3000	-3000	KN		2020-04-10 17:05:20.881+08	2020-04-10 17:05:34.151+08	9aaf71fd-cc26-4738-86f0-f27fb8983581	2	t	f
5063	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-04-10 17:06:03.87+08	2020-04-10 17:06:03.87+08	9aaf71fd-cc26-4738-86f0-f27fb8983581	2	t	f
5064	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-10 17:06:35.69+08	2020-04-10 17:06:35.69+08	9aaf71fd-cc26-4738-86f0-f27fb8983581	2	t	f
5065	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-10 17:06:54.694+08	2020-04-10 17:06:54.694+08	9aaf71fd-cc26-4738-86f0-f27fb8983581	2	t	f
5069	physicalvalue	轴力	Output	\N	\N	\N	2	4000	-4000	KN		2020-04-10 17:09:19.556+08	2020-04-10 17:09:19.556+08	ce9b72cb-67fd-4117-b485-a9443b3409e9	2	t	f
5070	physicalvalue	轴力	Output	\N	\N	\N	3	2000	-2000	KN		2020-04-10 17:10:47.127+08	2020-04-10 17:10:47.127+08	e8d508fb-9ad6-4f72-bab4-552351765b49	2	t	f
5071	frequency	频率	Output	\N	\N	\N	4	\N	\N	HZ		2020-04-10 17:11:08.148+08	2020-04-10 17:11:08.148+08	e8d508fb-9ad6-4f72-bab4-552351765b49	2	t	f
5072	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-10 17:11:31.374+08	2020-04-10 17:11:31.374+08	e8d508fb-9ad6-4f72-bab4-552351765b49	2	t	f
5073	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2020-04-10 17:12:03.358+08	2020-04-10 17:12:03.358+08	e8d508fb-9ad6-4f72-bab4-552351765b49	2	t	f
5074	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-10 17:13:30.647+08	2020-04-10 17:13:30.647+08	f018487f-55ee-4fc2-b204-738cde478d4b	2	t	f
5075	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-10 17:13:54.356+08	2020-04-10 17:13:54.356+08	f018487f-55ee-4fc2-b204-738cde478d4b	2	t	f
5076	physicalvalue	轴力	Output	\N	\N	\N	3	1000	-1000	KN		2020-04-10 17:14:25.988+08	2020-04-10 17:14:25.988+08	f018487f-55ee-4fc2-b204-738cde478d4b	2	t	f
5077	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2020-04-10 17:14:58.121+08	2020-04-10 17:14:58.121+08	f018487f-55ee-4fc2-b204-738cde478d4b	2	t	f
5078	am	幅值	Output	\N			\N	\N	\N	mv		2020-04-13 08:47:38.602+08	2020-04-13 08:47:49.555+08	09173a38-657c-4584-97f6-d5fd984c6cef	2	t	f
5079	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-04-13 08:48:15.896+08	2020-04-13 08:48:15.896+08	09173a38-657c-4584-97f6-d5fd984c6cef	2	t	f
5080	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 08:49:54.532+08	2020-04-13 08:49:54.532+08	09173a38-657c-4584-97f6-d5fd984c6cef	2	t	f
5081	physicalvalue	应力	Output	\N			3	6	0	MPa		2020-04-13 08:50:26.425+08	2020-04-13 08:50:46.214+08	09173a38-657c-4584-97f6-d5fd984c6cef	2	t	f
5082	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-04-13 08:52:23.332+08	2020-04-13 08:52:23.332+08	be4087dd-e776-49f6-a2a0-6ad64e530ac9	2	t	f
5083	frequency	频率	Output	\N	\N	\N	3	\N	\N	HZ		2020-04-13 08:52:45.323+08	2020-04-13 08:52:45.323+08	be4087dd-e776-49f6-a2a0-6ad64e530ac9	2	t	f
5084	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-13 08:53:14.097+08	2020-04-13 08:53:14.097+08	be4087dd-e776-49f6-a2a0-6ad64e530ac9	2	t	f
5085	physicalvalue	应力	Output	\N	\N	\N	2	0.6	0	MPa		2020-04-13 08:53:45.977+08	2020-04-13 08:53:45.977+08	be4087dd-e776-49f6-a2a0-6ad64e530ac9	2	t	f
5086	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-13 08:58:41.749+08	2020-04-13 08:58:41.749+08	600fa9e0-1e6c-4c0f-b9df-2445d771d54f	2	t	f
5087	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 08:59:15.132+08	2020-04-13 08:59:15.132+08	600fa9e0-1e6c-4c0f-b9df-2445d771d54f	2	t	f
5088	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-13 08:59:43.567+08	2020-04-13 08:59:43.567+08	600fa9e0-1e6c-4c0f-b9df-2445d771d54f	2	t	f
5089	physicalvalue	应力	Output	\N			2	0.2	0	MPa		2020-04-13 09:00:27.184+08	2020-04-13 09:00:38.837+08	600fa9e0-1e6c-4c0f-b9df-2445d771d54f	2	t	f
5090	am	幅值	Output	\N	\N	\N	\N	\N	\N	mv		2020-04-13 09:02:29.65+08	2020-04-13 09:02:29.65+08	c3cf2a99-570b-480e-bd03-d4218a84382d	2	t	f
5091	physicalvalue	应力	Output	\N			2	2	0	MPa		2020-04-13 09:02:56.399+08	2020-04-13 09:03:09.98+08	c3cf2a99-570b-480e-bd03-d4218a84382d	2	t	f
5092	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 09:03:34.337+08	2020-04-13 09:03:34.337+08	c3cf2a99-570b-480e-bd03-d4218a84382d	2	t	f
5093	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-13 09:04:23.936+08	2020-04-13 09:04:23.936+08	c3cf2a99-570b-480e-bd03-d4218a84382d	2	t	f
5094	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-13 11:01:30.78+08	2020-04-13 11:01:30.78+08	bf5542b0-0eaf-48a7-acf5-359e608b19d0	2	t	f
5095	angley	y方向角度	Output	\N	\N	\N	3	\N	\N	°		2020-04-13 11:01:59.948+08	2020-04-13 11:01:59.948+08	bf5542b0-0eaf-48a7-acf5-359e608b19d0	2	t	f
5097	angley	y方向角度	Output	\N	\N	\N	3	\N	\N	°		2020-04-13 11:03:03.955+08	2020-04-13 11:03:03.955+08	0bf1ab3a-44c3-44d5-bcec-83c1507080c9	2	t	f
5096	anglex	x方向角度	Output	\N			3	\N	\N	°		2020-04-13 11:02:35.958+08	2020-04-13 11:03:12.883+08	bf5542b0-0eaf-48a7-acf5-359e608b19d0	2	t	f
5099	temperature	温度	Output	\N	\N	\N	3	\N	\N	℃		2020-04-13 11:04:13.626+08	2020-04-13 11:04:13.626+08	0bf1ab3a-44c3-44d5-bcec-83c1507080c9	2	t	f
5100	temperature	温度	Output	\N			2	\N	\N	℃		2020-04-13 11:04:41.178+08	2020-04-13 11:04:48.279+08	ed4d092d-260f-49cc-a985-176fd50d18c9	2	t	f
5101	anglex	x方向角度	Output	\N	\N	\N	2	\N	\N	°		2020-04-13 11:05:16.337+08	2020-04-13 11:05:16.337+08	ed4d092d-260f-49cc-a985-176fd50d18c9	2	t	f
5102	angley	y方向角度	Output	\N	\N	\N	3	\N	\N	°		2020-04-13 11:05:44.316+08	2020-04-13 11:05:44.316+08	ed4d092d-260f-49cc-a985-176fd50d18c9	2	t	f
5103	angley	y方向角度	Output	\N	\N	\N	2	\N	\N	°		2020-04-13 11:06:27.24+08	2020-04-13 11:06:27.24+08	74d8243e-c93f-4694-b627-27150be13541	2	t	f
5104	anglex	x方向角度	Output	\N	\N	\N	2	\N	\N	°		2020-04-13 11:06:56.064+08	2020-04-13 11:06:56.064+08	74d8243e-c93f-4694-b627-27150be13541	2	t	f
5105	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 11:07:17.79+08	2020-04-13 11:07:17.79+08	74d8243e-c93f-4694-b627-27150be13541	2	t	f
5098	anglex	x方向角度	Output	\N			2	\N	\N	°		2020-04-13 11:03:49.952+08	2020-04-13 11:07:49.502+08	0bf1ab3a-44c3-44d5-bcec-83c1507080c9	2	t	f
5110	physicalvalue	应力	Output	\N	\N	\N	2	0.8	0	MPa		2020-04-13 11:31:15.044+08	2020-04-13 11:31:15.044+08	475ef4a4-f7ad-47ca-bf47-6c02061d73f8	2	t	f
5107	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-13 11:28:11.525+08	2020-04-13 11:28:11.525+08	ab916260-ed75-4e0b-8109-d9b164ac1f2c	2	t	f
5108	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 11:28:34.368+08	2020-04-13 11:28:34.368+08	ab916260-ed75-4e0b-8109-d9b164ac1f2c	2	t	f
5109	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-13 11:29:01.963+08	2020-04-13 11:29:01.963+08	ab916260-ed75-4e0b-8109-d9b164ac1f2c	2	t	f
3476	physicalvalue	应力	Output	\N			4	1	0	MPa		2019-02-25 15:43:07.042+08	2020-04-13 11:29:22.91+08	b62a52ce-bcd3-4156-89d7-83ab453c3121	2	t	f
5106	physicalvalue	应力	Output	\N			2	1	0	MPa		2020-04-13 11:27:21.351+08	2020-04-13 11:29:34.041+08	ab916260-ed75-4e0b-8109-d9b164ac1f2c	2	t	f
5111	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-13 11:31:35.316+08	2020-04-13 11:31:35.316+08	475ef4a4-f7ad-47ca-bf47-6c02061d73f8	2	t	f
5112	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 11:32:04.385+08	2020-04-13 11:32:04.385+08	475ef4a4-f7ad-47ca-bf47-6c02061d73f8	2	t	f
5113	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-13 11:32:26.551+08	2020-04-13 11:32:26.551+08	475ef4a4-f7ad-47ca-bf47-6c02061d73f8	2	t	f
5114	physicalvalue	应力	Output	\N	\N	\N	2	0.4	0	MPa		2020-04-13 11:34:48.945+08	2020-04-13 11:34:48.945+08	8e6f0fd7-4b27-47b4-8e62-85c8302d8219	2	t	f
5116	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-13 11:35:32.718+08	2020-04-13 11:35:32.718+08	8e6f0fd7-4b27-47b4-8e62-85c8302d8219	2	t	f
5117	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 11:36:02.816+08	2020-04-13 11:36:02.816+08	8e6f0fd7-4b27-47b4-8e62-85c8302d8219	2	t	f
5118	temperature	温度	Output	\N			2	120	-30	℃		2020-04-13 11:50:13.607+08	2020-04-13 11:53:26.383+08	a31c164d-a581-4bda-8e94-7c41ab12cfa1	2	t	f
5149	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-14 09:47:55.611+08	2020-04-14 09:47:55.611+08	cb22fb01-45b8-4e12-83cd-75fb5dcf585e	2	t	f
5168	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:41:32.141+08	2020-04-14 10:41:32.141+08	17324dd0-1385-4d70-92fc-49d595c88ed8	2	t	f
5121	temperature	温度	Output	\N			2	120	-30	℃		2020-04-13 11:51:24.244+08	2020-04-13 11:52:55.984+08	4b648fd9-37fe-4060-b04f-70c5e351b0a4	2	t	f
5120	angley	Y方向角度	Output	\N			2	30	-30	°		2020-04-13 11:51:02.092+08	2020-04-13 11:53:06.092+08	4b648fd9-37fe-4060-b04f-70c5e351b0a4	2	t	f
5119	angley	Y方向角度	Output	\N			2	30	-30	°		2020-04-13 11:50:36.017+08	2020-04-13 11:53:16.039+08	a31c164d-a581-4bda-8e94-7c41ab12cfa1	2	t	f
5134	pressure	压力	Output	\N			2	20	-20	Kpa		2020-04-13 13:30:24.437+08	2020-04-13 13:30:38.583+08	82b95b39-2e60-4eae-9c51-1977fc3b73e9	2	t	f
5174	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:46:42.106+08	2020-04-14 10:46:42.106+08	b350cfa3-4960-4e96-ae63-0e0ab3319c29	2	t	f
5123	angley	Y方向角度	Output	\N	\N	\N	2	30	-30	°		2020-04-13 11:52:25.198+08	2020-04-13 11:52:25.198+08	ff32ae55-d999-4f10-b4fa-53ef0c69d6be	2	t	f
5122	temperature	温度	Output	\N			2	120	-30	℃		2020-04-13 11:51:47.637+08	2020-04-13 11:52:43.468+08	ff32ae55-d999-4f10-b4fa-53ef0c69d6be	2	t	f
5124	temperature	温度	Output	\N	\N	\N	\N	70	-25	℃		2020-04-13 13:08:19.958+08	2020-04-13 13:08:19.958+08	d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d	2	t	f
5159	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:19:00.853+08	2020-04-14 10:19:00.853+08	fbafe139-6003-4dff-a59a-bf51b0d5ce75	2	t	f
5125	angley	Y方向角度	Output	\N	\N	\N	2	30	-30	°		2020-04-13 13:08:50.605+08	2020-04-13 13:08:50.605+08	d7755dfe-3b58-4cd9-a3b1-1cce2f6cb34d	2	t	f
5126	angley	Y方向角度	Output	\N	\N	\N	2	30	-30	°		2020-04-13 13:09:20.544+08	2020-04-13 13:09:20.544+08	1afc6939-be77-4cb0-b7a1-59ed529b9ee1	2	t	f
5127	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-13 13:09:50.336+08	2020-04-13 13:09:50.336+08	1afc6939-be77-4cb0-b7a1-59ed529b9ee1	2	t	f
5128	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-13 13:10:16.095+08	2020-04-13 13:10:16.095+08	48c0716a-ffe7-4de2-b5d6-295ebd1bef98	2	t	f
5129	angley	Y方向角度	Output	\N	\N	\N	2	30	-30	°		2020-04-13 13:10:52.176+08	2020-04-13 13:10:52.176+08	48c0716a-ffe7-4de2-b5d6-295ebd1bef98	2	t	f
5130	angley	Y方向角度	Output	\N	\N	\N	2	30	-30	°		2020-04-13 13:11:24.556+08	2020-04-13 13:11:24.556+08	002dd588-51a7-417d-9986-71cdcdc4b0b4	2	t	f
5131	temperature	温度	Output	\N	\N	\N	2	70	-25	℃		2020-04-13 13:11:53.472+08	2020-04-13 13:11:53.472+08	002dd588-51a7-417d-9986-71cdcdc4b0b4	2	t	f
5132	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 13:27:28.095+08	2020-04-13 13:27:28.095+08	933454ed-df7e-4ca3-950b-6faf23a1a5dc	2	t	f
5133	pressure	压力	Output	\N			2	10	-10	Kpa		2020-04-13 13:27:55.156+08	2020-04-13 13:28:07.742+08	933454ed-df7e-4ca3-950b-6faf23a1a5dc	2	t	f
5135	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 13:31:01.089+08	2020-04-13 13:31:01.089+08	82b95b39-2e60-4eae-9c51-1977fc3b73e9	2	t	f
5137	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 16:42:59.126+08	2020-04-13 16:42:59.126+08	29b24211-38a9-4c77-9218-11d0c3939a5b	2	t	f
5138	length	距离	Output	\N	\N	\N	2	\N	\N	m		2020-04-13 16:42:59.133+08	2020-04-13 16:42:59.133+08	29b24211-38a9-4c77-9218-11d0c3939a5b	2	t	f
5139	length	距离	Output	\N	\N	\N	2	\N	\N	m		2020-04-13 16:42:59.147+08	2020-04-13 16:42:59.147+08	8aef8520-904e-46b6-9223-952b50c16f52	2	t	f
5140	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 16:42:59.152+08	2020-04-13 16:42:59.152+08	8aef8520-904e-46b6-9223-952b50c16f52	2	t	f
5141	length	距离	Output	\N	\N	\N	2	\N	\N	m		2020-04-13 16:42:59.163+08	2020-04-13 16:42:59.163+08	b9a9f40b-2946-4b0f-abe7-10611a02fe1d	2	t	f
5142	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-13 16:42:59.168+08	2020-04-13 16:42:59.168+08	b9a9f40b-2946-4b0f-abe7-10611a02fe1d	2	t	f
5143	physicalvalue	加速度	Output	\N	\N	\N	\N	\N	\N	cm/ss		2020-04-13 17:27:14.176+08	2020-04-13 17:27:14.176+08	05c7bb43-2fc0-4f0f-8be5-af5d4da3c75a	5	t	f
5144	physicalvalue	荷载	Output	\N			2	400	-400	t		2020-04-14 09:41:50.997+08	2020-04-14 09:42:21.99+08	6084f264-aec5-4a6c-be5e-028c5139dfb8	2	t	f
5145	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-14 09:42:48.308+08	2020-04-14 09:42:48.308+08	6084f264-aec5-4a6c-be5e-028c5139dfb8	2	t	f
5146	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 09:43:21.252+08	2020-04-14 09:43:21.252+08	6084f264-aec5-4a6c-be5e-028c5139dfb8	2	t	f
5147	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 09:43:49.476+08	2020-04-14 09:43:49.476+08	6084f264-aec5-4a6c-be5e-028c5139dfb8	2	t	f
5148	physicalvalue	荷载	Output	\N	\N	\N	3	300	-300	t		2020-04-14 09:47:28.142+08	2020-04-14 09:47:28.142+08	cb22fb01-45b8-4e12-83cd-75fb5dcf585e	2	t	f
5150	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 09:48:18.099+08	2020-04-14 09:48:18.099+08	cb22fb01-45b8-4e12-83cd-75fb5dcf585e	2	t	f
5152	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-14 10:13:25.196+08	2020-04-14 10:13:25.196+08	0928966d-ed3a-4cab-9e1b-32af22f5f89b	2	t	f
5162	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-04-14 10:34:58.708+08	2020-04-14 10:34:58.708+08	886912b7-fff8-4aff-84f4-04c043946eb0	2	t	f
5164	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:36:09.818+08	2020-04-14 10:36:09.818+08	abffe5ee-8ad1-41b8-95f2-70a6d52220db	2	t	f
5165	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:36:47.465+08	2020-04-14 10:36:47.465+08	abffe5ee-8ad1-41b8-95f2-70a6d52220db	2	t	f
5175	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:47:02.321+08	2020-04-14 10:47:02.321+08	53e381f9-db33-430e-8304-c344985c37f6	2	t	f
5136	temperature	温度	Output	\N			2	120	-40	℃		2020-04-13 16:32:13.39+08	2020-04-14 10:59:30.662+08	6cf95499-c1da-478c-918c-bc809d89feb6	2	t	f
5182	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-21 13:41:45.899+08	2020-04-21 13:41:45.899+08	f605cba3-4024-46ad-b288-3c83568c5609	2	t	f
5151	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 09:48:39.333+08	2020-04-14 09:48:39.333+08	cb22fb01-45b8-4e12-83cd-75fb5dcf585e	2	t	f
5153	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:13:52.408+08	2020-04-14 10:13:52.408+08	0928966d-ed3a-4cab-9e1b-32af22f5f89b	2	t	f
5154	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:14:22.312+08	2020-04-14 10:14:22.312+08	0928966d-ed3a-4cab-9e1b-32af22f5f89b	2	t	f
5155	physicalvalue	荷载	Output	\N	\N	\N	2	\N	\N	t		2020-04-14 10:14:42.014+08	2020-04-14 10:14:42.014+08	0928966d-ed3a-4cab-9e1b-32af22f5f89b	2	t	f
5156	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2020-04-14 10:17:37.955+08	2020-04-14 10:17:37.955+08	fbafe139-6003-4dff-a59a-bf51b0d5ce75	2	t	f
5157	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:18:00.273+08	2020-04-14 10:18:00.273+08	fbafe139-6003-4dff-a59a-bf51b0d5ce75	2	t	f
5158	physicalvalue	荷载	Output	\N	\N	\N	2	600	-600	t		2020-04-14 10:18:33.457+08	2020-04-14 10:18:33.457+08	fbafe139-6003-4dff-a59a-bf51b0d5ce75	2	t	f
3297	physicalvalue	轴力	Output	\N			4			KN		2019-02-25 13:30:27.015+08	2020-04-14 10:26:14.058+08	03afe194-fc01-4993-8f9a-ed4ca0ae6d90	2	t	f
5160	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:34:12.854+08	2020-04-14 10:34:12.854+08	886912b7-fff8-4aff-84f4-04c043946eb0	2	t	f
5161	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:34:33.622+08	2020-04-14 10:34:33.622+08	886912b7-fff8-4aff-84f4-04c043946eb0	2	t	f
5166	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-04-14 10:40:37.006+08	2020-04-14 10:40:37.006+08	17324dd0-1385-4d70-92fc-49d595c88ed8	2	t	f
5177	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-04-14 10:47:45.323+08	2020-04-14 10:47:45.323+08	53e381f9-db33-430e-8304-c344985c37f6	2	t	f
5163	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-04-14 10:35:19.937+08	2020-04-14 10:35:19.937+08	abffe5ee-8ad1-41b8-95f2-70a6d52220db	2	t	f
5167	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:41:06.095+08	2020-04-14 10:41:06.095+08	17324dd0-1385-4d70-92fc-49d595c88ed8	2	t	f
5169	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-04-14 10:41:48.341+08	2020-04-14 10:41:48.341+08	9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f	2	t	f
5170	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:42:12.161+08	2020-04-14 10:42:12.161+08	9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f	2	t	f
5171	physicalvalue	轴力	Output	\N	\N	\N	2	\N	\N	KN		2020-04-14 10:42:34.426+08	2020-04-14 10:42:34.426+08	9c9a0091-2f1b-4c1d-8b7c-ff60c41fca6f	2	t	f
5173	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:46:04.756+08	2020-04-14 10:46:04.756+08	b350cfa3-4960-4e96-ae63-0e0ab3319c29	2	t	f
5172	physicalvalue	轴力	Output	\N			2	\N	\N	KN		2020-04-14 10:45:37.654+08	2020-04-14 10:46:12.407+08	b350cfa3-4960-4e96-ae63-0e0ab3319c29	2	t	f
5176	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-04-14 10:47:22.509+08	2020-04-14 10:47:22.509+08	53e381f9-db33-430e-8304-c344985c37f6	2	t	f
5179	temperature	温度	Output	\N			2	120	-40	℃		2020-04-14 10:58:21.252+08	2020-04-14 10:58:33.887+08	9cb1bdb2-4235-4ca7-bdd2-7b7719325a45	2	t	f
5180	humidity	湿度	Output	\N			2	100	0	%RH		2020-04-14 10:58:52.905+08	2020-04-14 10:59:10.137+08	9cb1bdb2-4235-4ca7-bdd2-7b7719325a45	2	t	f
5178	temperature	温度	Output	\N			2	120	-40	℃		2020-04-14 10:55:09.45+08	2020-04-14 10:59:46.22+08	2de26052-b602-4ad3-9690-aa841c9c3a97	2	t	f
5183	length	液位	Output	\N	\N	\N	3	\N	\N	mm		2020-04-21 13:42:25.831+08	2020-04-21 13:42:25.831+08	f605cba3-4024-46ad-b288-3c83568c5609	2	t	f
5186	corrosionRate	腐蚀速率	Output	\N	\N	\N	\N	\N	\N	mm/a		2020-05-12 11:48:49.323+08	2020-05-12 11:48:49.323+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5187	corrosionCurrent	腐蚀电流	Output	\N	\N	\N	\N	\N	\N	mA/cm²		2020-05-12 11:50:38.311+08	2020-05-12 11:50:38.311+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5188	ocp	开路电位	Output	\N	\N	\N	\N		\N	mv		2020-05-12 11:52:34.899+08	2020-05-12 11:52:34.899+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5192	ph	PH值	Output	\N	\N	\N	\N	\N	\N			2020-05-12 11:57:09.196+08	2020-05-12 11:57:09.196+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5213	C2H5OH	乙醇	Output	\N			2	\N	\N	mg/m³		2020-05-28 10:56:30.366+08	2020-07-17 15:23:18.477+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5195	resistance	电阻	Output	\N			2	\N	\N	Ω		2020-05-13 11:43:13.378+08	2020-05-14 09:53:00.679+08	428d318f-f610-4b34-8068-7a928691a7d9	2	t	f
5196	physicalvalue	微应变	Output	\N			\N	\N	\N	ε		2020-05-13 11:43:46.403+08	2020-05-14 10:54:42.133+08	428d318f-f610-4b34-8068-7a928691a7d9	2	t	f
5197	physicalvalue	应力	Output	\N	\N	\N	2	\N	\N	kN		2020-05-14 11:33:21.826+08	2020-05-14 11:33:21.826+08	aebaf729-ad98-42f3-a375-2c40c11065cb	2	t	f
5199	length	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-05-14 15:38:38.62+08	2020-05-14 15:38:38.62+08	11936f12-8bb7-42ec-8d27-5e01eb5c4ba1	2	t	f
5200	wavelength	波长	Output	\N	\N	\N	\N	\N	\N	\N		2020-05-20 09:26:32.53+08	2020-05-20 09:26:32.53+08	dac5aa29-4b9b-4dd0-9200-afc564bb32c5	2	t	f
5201	physicalvalue	应变	Output	\N	\N	\N	6	\N	\N	με		2020-05-20 09:26:32.538+08	2020-05-20 09:26:32.538+08	dac5aa29-4b9b-4dd0-9200-afc564bb32c5	2	t	f
5202	jsonfileexts		Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2020-05-20 11:50:17.618+08	2020-05-20 11:50:17.618+08	bc9ee149-cefe-4978-99b6-9c1cec2f6b4c	5	t	f
5212	NH3	氨气	Output	\N			2	\N	\N	mg/m³		2020-05-28 10:54:58.027+08	2020-07-17 15:23:15.128+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5204	northing	Y坐标	Output	\N	\N	\N	2	\N	\N	mm		2020-05-21 15:24:54.399+08	2020-05-21 15:24:54.399+08	68b2ac58-25ea-408d-a955-797ded16d57e	2	t	f
5205	height	Z坐标	Output	\N	\N	\N	2	\N	\N	mm		2020-05-21 15:25:12.609+08	2020-05-21 15:25:12.609+08	68b2ac58-25ea-408d-a955-797ded16d57e	2	t	f
5203	easting	X坐标	Output	\N			2	\N	\N	mm		2020-05-21 15:23:07.808+08	2020-05-21 15:25:20.121+08	68b2ac58-25ea-408d-a955-797ded16d57e	2	t	f
5184	polarResistance	极化电阻	Output	\N			\N	\N	\N	Ω.cm²		2020-05-12 11:45:53.926+08	2020-05-22 10:28:00.329+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5185	insulance	介质电阻	Output	\N			\N	\N	\N	Ω.cm		2020-05-12 11:47:14.776+08	2020-05-22 10:28:33.799+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5189	cer	混凝土电阻	Output	\N			\N	\N	\N	Ω		2020-05-12 11:54:22.677+08	2020-05-22 10:29:21.009+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5190	resistivity	电阻率	Output	\N			\N	\N	\N	Ω.cm		2020-05-12 11:55:40.861+08	2020-05-22 10:30:15.285+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5191	ph_ocp	PH开路电位	Output	\N			\N	\N	\N	mv		2020-05-12 11:56:39.96+08	2020-05-22 10:30:32.099+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5193	cl_ocp	Cl-开路电位	Output	\N			\N	\N	\N	mv		2020-05-12 11:59:29.833+08	2020-05-22 10:30:47.361+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5194	cl_potency	Cl-浓度	Output	\N			\N	\N	\N	mol/L		2020-05-12 12:00:35.82+08	2020-05-22 10:31:12.432+08	d54486ff-766c-4275-bf4e-b13e58574dd7	2	t	f
5206	zero_length	零点位移	Output	\N	\N	\N	2	\N	\N	mm		2020-05-25 16:36:36.789+08	2020-05-25 16:36:36.789+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5209	voltage	电压	Output	\N	\N	\N	2	\N	\N	V		2020-05-25 16:37:58.575+08	2020-05-25 16:37:58.575+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5207	length	相对位移	Output	\N			2	\N	\N	mm		2020-05-25 16:37:03.348+08	2020-05-25 16:52:41.494+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5208	temperature	环境温度	Output	\N			2	\N	\N	℃		2020-05-25 16:37:26.732+08	2020-05-25 16:52:52.892+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5210	humidity	环境湿度	Output	\N	\N	\N	\N	\N	\N	%RH		2020-05-25 16:53:33.491+08	2020-05-25 16:53:33.491+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5211	caitime	上传时间间隔	Output	\N	\N	\N	\N	\N	\N	min		2020-05-26 15:14:45.276+08	2020-05-26 15:14:45.276+08	582512d5-3343-4f9a-bab0-0312f0f83dea	2	t	f
5215	OU	臭气	Output	\N			2	\N	\N	ppm		2020-05-28 10:57:19.349+08	2020-05-28 13:47:53.185+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5221	OU	臭气	Output	\N	\N	\N	2	\N	\N	ppm		2020-05-28 15:07:27.863+08	2020-05-28 15:07:27.863+08	5e62be71-2e05-4eb7-b50b-233e6ad91069	2	t	f
5222	frequency	频率	Output	\N	\N	\N	2	\N	\N	HZ		2020-06-08 11:23:02.849+08	2020-06-08 11:23:02.849+08	11006daf-ca33-466e-970d-48c4889b56e3	2	t	f
5223	physicalvalue	压强	Output	\N	\N	\N	2	\N	\N	Mpa		2020-06-08 11:41:41.715+08	2020-06-08 11:41:41.715+08	11006daf-ca33-466e-970d-48c4889b56e3	2	t	f
5225	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-06-08 11:45:05.626+08	2020-06-08 11:45:05.626+08	865a418e-8597-4f29-954b-6953bf8a8390	2	t	f
5226	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-06-08 11:46:22.86+08	2020-06-08 11:46:22.86+08	5cd21446-c4fc-45a2-b2d3-a2fb1ae08135	2	t	f
5227	physicalvalue	轴力	Output	\N	\N	\N	\N	\N	\N	KN		2020-06-08 11:47:00.14+08	2020-06-08 11:47:00.14+08	5cd21446-c4fc-45a2-b2d3-a2fb1ae08135	2	t	f
5228	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-06-10 13:43:24.209+08	2020-06-10 13:43:24.209+08	1ab8db7c-e725-4119-9c09-6555bb04ce5d	2	t	f
5229	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-06-10 13:44:05.913+08	2020-06-10 13:44:05.913+08	1ab8db7c-e725-4119-9c09-6555bb04ce5d	2	t	f
5230	physicalvalue	距离	Output	\N	\N	\N	2	\N	\N	m		2020-06-10 14:02:11.598+08	2020-06-10 14:02:11.598+08	4a707f5b-4a1a-4c21-8c3a-01cc99f0d25b	2	t	f
5231	physicalvalue	距离	Output	\N	\N	\N	\N	\N	\N	m		2020-06-10 14:05:06.794+08	2020-06-10 14:05:06.794+08	33ad2409-682f-4b09-918b-9f6f9396a1c3	2	t	f
5232	physicalvalue	距离	Output	\N	\N	\N	\N	\N	\N	m		2020-06-10 14:06:51.141+08	2020-06-10 14:06:51.141+08	64351b5c-4b45-42d1-a60b-81f410c1d0b3	2	t	f
5233	physicalvalue	距离	Output	\N	\N	\N	\N	\N	\N	m		2020-06-10 17:07:04.281+08	2020-06-10 17:07:04.281+08	fb469083-0a30-4a41-a31d-b1bc0c0ed098	2	t	f
5234	physicalvalue	角度	Output	\N	\N	\N	\N	\N	\N	°		2020-06-10 17:08:53.394+08	2020-06-10 17:08:53.394+08	71d81eb7-504a-4f9f-ad7a-1a7479fe82b3	2	t	f
5235	physicalvalue	角度	Output	\N	\N	\N	\N	\N	\N	°		2020-06-10 17:12:06.746+08	2020-06-10 17:12:06.746+08	ad2045e5-d052-4689-b49f-fa1c42ccca5b	2	t	f
5236	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-06-10 17:41:17.164+08	2020-06-10 17:41:17.164+08	d7404d08-da09-4d5c-9443-0abdf60d1a13	2	t	f
5237	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-06-10 17:41:46.343+08	2020-06-10 17:41:46.343+08	d7404d08-da09-4d5c-9443-0abdf60d1a13	2	t	f
5238	physicalvalue	物理量	Output	\N	\N	\N	\N	\N	\N	\N		2020-06-11 14:46:54.984+08	2020-06-11 14:46:54.984+08	d7404d08-da09-4d5c-9443-0abdf60d1a13	2	t	f
5239	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-06-11 17:08:14.291+08	2020-06-11 17:08:14.291+08	38ab5b80-b75c-42f6-b9a8-cb1e96603099	2	t	f
5240	humidity	湿度	Output	\N	\N	\N	\N	\N	\N	%RH		2020-06-11 17:08:14.297+08	2020-06-11 17:08:14.297+08	38ab5b80-b75c-42f6-b9a8-cb1e96603099	2	t	f
5218	NH3	氨气	Output	\N			2	\N	\N	mg/m³		2020-05-28 15:04:34.946+08	2020-07-17 15:22:28.723+08	5e62be71-2e05-4eb7-b50b-233e6ad91069	2	t	f
5219	H2S	硫化氢	Output	\N			2	\N	\N	mg/m³		2020-05-28 15:05:06.063+08	2020-07-17 15:22:31.823+08	5e62be71-2e05-4eb7-b50b-233e6ad91069	2	t	f
5220	CH4	甲烷	Output	\N			\N	\N	\N	mg/m³		2020-05-28 15:06:42.585+08	2020-07-17 15:22:35.274+08	5e62be71-2e05-4eb7-b50b-233e6ad91069	2	t	f
5216	PM10	PM10	Output	\N			2	\N	\N	mg/m³		2020-05-28 10:57:33.479+08	2020-07-17 15:22:59.122+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5214	VOC	VOC	Output	\N			2	\N	\N	mg/m³		2020-05-28 10:56:57.134+08	2020-07-17 15:23:02.978+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5217	PM25	PM2.5	Output	\N			2	\N	\N	mg/m³		2020-05-28 10:57:50.42+08	2020-07-17 15:23:11.148+08	5e890b4e-e5c4-406b-a48b-96ecf4963921	2	t	f
5241	pressure	气压	Output	\N	\N	\N	\N	\N	\N	hpa		2020-06-11 17:08:14.302+08	2020-06-11 17:08:14.302+08	38ab5b80-b75c-42f6-b9a8-cb1e96603099	2	t	f
5242	speed	风速	Output	\N	\N	\N	\N	\N	\N	m/s		2020-06-11 17:32:44.108+08	2020-06-11 17:32:44.108+08	ef2a2a56-6abd-459f-8899-2756698bd997	2	t	f
5243	direction	风向	Output	\N	\N	\N	\N	\N	\N	°		2020-06-11 17:32:44.116+08	2020-06-11 17:32:44.116+08	ef2a2a56-6abd-459f-8899-2756698bd997	2	t	f
5244	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-06-11 17:32:44.123+08	2020-06-11 17:32:44.123+08	ef2a2a56-6abd-459f-8899-2756698bd997	2	t	f
5245	humidity	湿度	Output	\N	\N	\N	\N	\N	\N	%RH		2020-06-11 17:32:44.136+08	2020-06-11 17:32:44.136+08	ef2a2a56-6abd-459f-8899-2756698bd997	2	t	f
5246	pressure	气压	Output	\N	\N	\N	\N	\N	\N	hPa		2020-06-11 17:32:44.146+08	2020-06-11 17:32:44.146+08	ef2a2a56-6abd-459f-8899-2756698bd997	2	t	f
5247	length	距离	Output	\N	\N	\N	\N	\N	\N	\N		2020-06-11 17:41:16.032+08	2020-06-11 17:41:16.032+08	60d83c64-9bad-43d3-9920-7dad96154fd7	2	t	f
5248	length	水位	Output	\N	\N	\N	2	\N	\N	mm		2020-06-15 10:48:34.995+08	2020-06-15 10:48:34.995+08	1f3783bc-bfe9-4abe-b7da-539a0ec57e34	2	t	f
5249	physicalvalue	水位	Output	\N			5	\N	\N	m		2020-06-16 14:29:15.943+08	2020-06-16 15:49:48.102+08	ca3175c2-be00-4fd5-8738-d149df98fb25	2	t	f
5250	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-06-24 09:50:38.209+08	2020-06-24 09:50:38.209+08	a8cf8420-9ce0-464d-8af7-1940466015bd	2	t	f
5251	anglex	x方向角度	Output	\N	\N	\N	\N	\N	\N	°		2020-06-29 16:08:40.612+08	2020-06-29 16:08:40.612+08	0a837b07-531e-4fea-861a-ff73f35fb9ba	2	t	f
5252	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-06-29 16:09:04.376+08	2020-06-29 16:09:04.376+08	0a837b07-531e-4fea-861a-ff73f35fb9ba	2	t	f
5253	angley	y方向角度	Output	\N	\N	\N	\N	\N	\N	°		2020-06-29 16:09:42.176+08	2020-06-29 16:09:42.176+08	0a837b07-531e-4fea-861a-ff73f35fb9ba	2	t	f
5254	length	水位	Output	\N	\N	\N	\N		\N	m		2020-06-29 16:12:12.861+08	2020-06-29 16:12:12.861+08	adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb	2	t	f
5255	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-06-29 16:12:12.868+08	2020-06-29 16:12:12.868+08	adc0b723-3ef2-4cb4-af3d-c74d6fd9cafb	2	t	f
5256	length	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-07-02 10:42:23.251+08	2020-07-02 10:42:23.251+08	e372ec30-5000-4a22-90ce-923829b2d608	2	t	f
5258	voltage	电压	Output	\N	\N	\N	\N	\N	\N	V		2020-07-03 15:31:14.291+08	2020-07-03 15:31:14.291+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5259	sensorStatus	传感器状态	Output	\N	\N	\N	\N	\N	\N			2020-07-03 15:32:03.802+08	2020-07-03 15:32:03.802+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5260	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-07-03 15:35:11.535+08	2020-07-03 15:35:11.535+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5261	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-07-03 15:35:38.281+08	2020-07-03 15:35:38.281+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5262	anglez	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-07-03 15:36:02.541+08	2020-07-03 15:36:02.541+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5263	accelerationx	x轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2020-07-03 15:42:57.825+08	2020-07-03 15:42:57.825+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5264	accelerationy	y轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2020-07-03 15:43:29.333+08	2020-07-03 15:43:29.333+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5265	accelerationz	z轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2020-07-03 15:44:22.375+08	2020-07-03 15:44:22.375+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5224	physicalvalue	应力	Output	\N			2	\N	\N	KN/mm²		2020-06-08 11:44:35.573+08	2020-07-06 14:50:07.407+08	865a418e-8597-4f29-954b-6953bf8a8390	2	t	f
5282	yAcceleration	加速度y	Output	\N			\N	\N	\N	g		2020-07-31 11:14:13.464+08	2020-07-31 11:26:36.724+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5281	xAcceleration	加速度x	Output	\N			\N	\N	\N	g		2020-07-31 11:13:08.612+08	2020-07-31 11:26:44.024+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5267	x	X位置	Output	\N	\N	\N	4	\N	\N	mm		2020-07-20 09:52:40.301+08	2020-07-20 09:52:40.301+08	a15cd089-6db0-463f-a927-c36d1dca96a4	2	t	f
5268	y	Y位置	Output	\N	\N	\N	4	\N	\N	mm		2020-07-20 09:53:09.046+08	2020-07-20 09:53:09.046+08	a15cd089-6db0-463f-a927-c36d1dca96a4	2	t	f
5269	z	Z位置	Output	\N	\N	\N	4	\N	\N	mm		2020-07-20 09:53:30.331+08	2020-07-20 09:53:30.331+08	a15cd089-6db0-463f-a927-c36d1dca96a4	2	t	f
5288	length	距离	Output	\N	\N	\N	\N	\N	\N	mm		2020-08-04 11:14:39.073+08	2020-08-04 11:14:39.073+08	c1159812-0b0e-4d84-bd67-8328afd12dc6	2	t	f
5266	signal	信号	Output	\N			0			/		2020-07-07 13:36:58.591+08	2020-07-22 08:47:41.575+08	3d72c148-2e62-41d7-b0f2-528fd13952dd	2	t	f
5272	x	X位置	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:39:24.364+08	2020-07-23 13:39:24.364+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5273	y	Y位置	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:39:43.213+08	2020-07-23 13:39:43.213+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5274	z	Z位置	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:40:04.234+08	2020-07-23 13:40:04.234+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5275	dx	dx累积形变量	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:41:34.252+08	2020-07-23 13:41:34.252+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5276	dy	dy累积形变量	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:41:56.626+08	2020-07-23 13:41:56.626+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5277	dz	dz累积形变量	Output	\N	\N	\N	3	\N	\N	mm		2020-07-23 13:42:15.087+08	2020-07-23 13:42:15.087+08	601d3b7b-0a17-4c81-9200-b0be68df23c4	2	t	f
5278	length	降雨量	Output	\N	\N	\N	\N	\N	\N	mm		2020-07-27 11:41:04.284+08	2020-07-27 11:41:04.284+08	47e859b1-fd7c-4d91-b482-25d7a9547047	2	t	f
5279	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-07-31 11:10:04.101+08	2020-07-31 11:10:04.101+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5280	voltage	电压	Output	\N	\N	\N	\N	\N	\N	V		2020-07-31 11:10:43.543+08	2020-07-31 11:10:43.543+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5284	xCoordinate	坐标x	Output	\N			\N	\N	\N			2020-07-31 11:20:32.114+08	2020-07-31 11:20:58.966+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5285	yCoordinate	坐标y	Output	\N	\N	\N	\N	\N	\N			2020-07-31 11:23:54.573+08	2020-07-31 11:23:54.573+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5286	zCoordinate	坐标z	Output	\N	\N	\N	\N	\N	\N			2020-07-31 11:25:17.642+08	2020-07-31 11:25:17.642+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5287	rotateAngle	旋转角	Output	\N	\N	\N	\N	\N	\N	°		2020-07-31 11:26:11.771+08	2020-07-31 11:26:11.771+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5283	zAcceleration	加速度z	Output	\N			\N	\N	\N	g		2020-07-31 11:16:00.165+08	2020-07-31 11:26:26.313+08	8afcb657-9391-4be2-9527-fbc2142bdf64	2	t	f
5289	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-08-04 11:14:39.079+08	2020-08-04 11:14:39.079+08	c1159812-0b0e-4d84-bd67-8328afd12dc6	2	t	f
5290	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-08-05 16:56:38.248+08	2020-08-05 16:56:38.248+08	dd71ac62-451e-4f14-a231-1209612ec59d	2	t	f
5291	turbidity	浊度	Output	\N	\N	\N	2	\N	\N	NTU		2020-08-05 16:59:27.434+08	2020-08-05 16:59:27.434+08	dd71ac62-451e-4f14-a231-1209612ec59d	2	t	f
5293	PH	PH	Output	\N	\N	\N	2	\N	\N			2020-08-05 17:01:51.884+08	2020-08-05 17:01:51.884+08	dd71ac62-451e-4f14-a231-1209612ec59d	2	t	f
5294	oxy	溶解氧	Output	\N	\N	\N	2	\N	\N	mg/L		2020-08-05 17:02:24.036+08	2020-08-05 17:02:24.036+08	dd71ac62-451e-4f14-a231-1209612ec59d	2	t	f
5292	conductivity	导电率	Output	\N			2	\N	\N	μs/cm		2020-08-05 17:00:06.956+08	2020-08-05 17:02:37.836+08	dd71ac62-451e-4f14-a231-1209612ec59d	2	t	f
5295	readingNumber	电表示数	Output	\N	\N	\N	3	\N	\N	kWh		2020-08-13 09:49:10.433+08	2020-08-13 09:49:10.433+08	4dce787d-0acb-41d1-a959-a043d0546736	2	t	f
5296	rainfall	降雨量	Output	\N	\N	\N	\N	\N	\N	mm		2020-08-14 11:53:53.188+08	2020-08-14 11:53:53.188+08	06350cde-bd6e-495d-8ef5-c318d3694381	2	t	f
5297	humidity	土壤湿度	Output	\N	\N	\N	\N	\N	\N	%VO		2020-08-14 15:29:01.622+08	2020-08-14 15:29:01.622+08	dba91da4-00da-4cef-a91c-f39c97f9b45a	2	t	f
5298	temperature	土壤温度	Output	\N			\N	\N	\N	℃		2020-08-14 15:30:03.548+08	2020-08-14 15:36:04.769+08	dba91da4-00da-4cef-a91c-f39c97f9b45a	2	t	f
5299	northing	Y坐标	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:28:38.782+08	2020-08-14 16:28:38.782+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5300	height	Z坐标	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:28:57.381+08	2020-08-14 16:28:57.381+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5301	easting	X坐标	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:29:14.937+08	2020-08-14 16:29:14.937+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5302	eastingDiff	Dx	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:29:34.841+08	2020-08-14 16:29:34.841+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5303	northingDiff	Dy	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:30:00.591+08	2020-08-14 16:30:00.591+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5304	heightDiff	Dz	Output	\N	\N	\N	3	\N	\N	mm		2020-08-14 16:30:21.753+08	2020-08-14 16:30:21.753+08	a53c2dac-206d-44da-b18f-584b9ad1deab	2	t	f
5305	length	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-08-18 08:53:48.603+08	2020-08-18 08:53:48.603+08	6e72e2fc-da68-46a6-8a68-3022057b0937	2	t	f
5307	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-08-21 10:28:49.018+08	2020-08-21 10:28:49.018+08	9a584682-5906-4fd4-ad79-245e90061e02	2	t	f
5308	pressure	液位	Output	\N	\N	\N	\N	\N	\N	mm		2020-08-21 10:29:24.479+08	2020-08-21 10:29:24.479+08	9a584682-5906-4fd4-ad79-245e90061e02	2	t	f
5323	X	X轴	Output	\N	\N	\N	1	90	-90	°		2020-09-03 14:52:10.941+08	2020-09-03 14:52:10.941+08	88cb50e8-fbcc-4dd1-a18d-915017dbee86	2	t	f
5309	physicalvalue	雨量	Output	\N	\N	\N	2	\N	\N	mm		2020-08-27 16:22:16.988+08	2020-08-27 16:22:16.988+08	1caff493-5e1b-472f-a65f-502a9d9865bd	2	t	f
5310	anglex	x方向角度	Output	\N	\N	\N	\N	\N	\N	°		2020-08-27 17:24:53.567+08	2020-08-27 17:24:53.567+08	b387422f-44fa-4d9e-a701-d6c9c57d630d	2	t	f
5311	angley	y方向角度	Output	\N	\N	\N	\N	\N	\N	°		2020-08-27 17:25:27.171+08	2020-08-27 17:25:27.171+08	b387422f-44fa-4d9e-a701-d6c9c57d630d	2	t	f
5312	temperature	温度	Output	\N	\N	\N	1	\N	\N	℃		2020-09-01 10:32:27.495+08	2020-09-01 10:32:27.495+08	f2ad29ab-0075-41c4-9972-59da62b556f4	2	t	f
5346	pm1	PM1	Output	\N			2	\N	\N	ug/m³		2020-09-07 10:17:16.332+08	2020-09-07 10:25:06.224+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5313	temperature	温度	Output	\N			2	\N	\N	℃		2020-09-01 11:32:06.69+08	2020-09-01 14:39:46.052+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5314	humidity	湿度	Output	\N			2	\N	\N	%		2020-09-01 14:38:27.894+08	2020-09-01 14:39:52.308+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5347	ch2o	甲醛	Output	\N			2	\N	\N	mg/m³		2020-09-07 10:17:48.149+08	2020-09-07 10:25:44.469+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5321	X	X轴	Output	\N			2	90	-90	°		2020-09-02 17:55:17.167+08	2020-09-03 10:09:13.029+08	d59b49b6-2470-4652-aac0-5760f9cce697	2	t	f
5322	Y	Y轴	Output	\N			2	90	-90	°		2020-09-02 17:55:52.18+08	2020-09-03 10:09:16.505+08	d59b49b6-2470-4652-aac0-5760f9cce697	2	t	f
5324	Y	Y轴	Output	\N			1	90	-90	°		2020-09-03 14:52:27.956+08	2020-09-03 16:19:01.252+08	88cb50e8-fbcc-4dd1-a18d-915017dbee86	2	t	f
5325	acc_x_cur	加速度x轴当前值	Output	\N			\N	\N	\N	mg		2020-09-04 13:14:43.535+08	2020-09-04 13:16:57.074+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5326	acc_z_cur	加速度z轴当前值	Output	\N			\N	\N	\N	mg		2020-09-04 13:15:40.952+08	2020-09-04 13:17:05.252+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5327	acc_y_cur	加速度y轴当前值	Output	\N			\N	\N	\N	mg		2020-09-04 13:16:08.09+08	2020-09-04 13:17:13.498+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5328	tilt_x_init	倾角x轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:17:55.282+08	2020-09-04 13:17:55.282+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5329	tilt_y_init	倾角y轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:18:43.676+08	2020-09-04 13:18:43.676+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5330	tilt_z_init	倾角z轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:19:14.913+08	2020-09-04 13:19:14.913+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5331	tilt_z_cur	倾角z轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:19:50.275+08	2020-09-04 13:19:50.275+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5332	tilt_x_cur	倾角x轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:20:15.714+08	2020-09-04 13:20:15.714+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5333	tilt_y_cur	倾角y轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 13:20:56.884+08	2020-09-04 13:20:56.884+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5334	wire_cur	拉线当前值	Output	\N	\N	\N	\N	\N	\N	mm		2020-09-04 13:57:26.61+08	2020-09-04 13:57:26.61+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5335	wire_init	拉线初值	Output	\N	\N	\N	\N	\N	\N	mm		2020-09-04 13:58:10.75+08	2020-09-04 13:58:10.75+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5336	acc_x_cur	加速度x轴当前值	Output	\N	\N	\N	\N	\N	\N	mg		2020-09-04 14:55:26.525+08	2020-09-04 14:55:26.525+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5337	acc_z_cur	加速度z轴当前值	Output	\N	\N	\N	\N	\N	\N	mg		2020-09-04 14:58:11.399+08	2020-09-04 14:58:11.399+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5338	acc_y_cur	加速度y轴当前值	Output	\N	\N	\N	\N	\N	\N	mg		2020-09-04 15:06:49.457+08	2020-09-04 15:06:49.457+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5339	tilt_z_init	倾角z轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:14:21.31+08	2020-09-04 15:14:21.31+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5340	tilt_y_init	倾角y轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:14:50.949+08	2020-09-04 15:14:50.949+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5341	tilt_x_init	倾角x轴初值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:15:14.584+08	2020-09-04 15:15:14.584+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5342	tilt_x_cur	倾角x轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:15:44.101+08	2020-09-04 15:15:44.101+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5343	tilt_z_cur	倾角z轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:17:03.588+08	2020-09-04 15:17:03.588+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5344	tilt_y_cur	倾角y轴当前值	Output	\N	\N	\N	\N	\N	\N	°		2020-09-04 15:17:34.791+08	2020-09-04 15:17:34.791+08	ed73bd4c-f957-425b-bc61-b1a49b812aba	2	t	f
5315	pm25	PM2.5	Output	\N			2	\N	\N	ug/m³		2020-09-01 14:43:55.975+08	2020-09-07 10:24:55.521+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5345	pm10	PM10	Output	\N			2	\N	\N	ug/m³		2020-09-07 10:16:47.97+08	2020-09-07 10:25:02.186+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5316	tvoc	有机气态物质	Output	\N			2	\N	\N	mg/m³		2020-09-01 14:47:14.313+08	2020-09-07 10:58:35.834+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	2	t	f
5348	timcnt	定时个数	Output	\N	\N	\N	\N	\N	\N	\N		2020-09-07 10:52:55.361+08	2020-09-07 10:52:55.361+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5351	humigear	加湿器挡位	Output	\N	\N	\N	\N	\N	\N			2020-09-07 11:00:55.594+08	2020-09-07 11:00:55.594+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5352	wchargelock	无线充电开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 11:01:23.643+08	2020-09-07 11:01:23.643+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5319	NegativeO2lock	负氧离子开关	Output	\N			0					2020-09-01 14:55:37.033+08	2020-09-07 10:54:31.097+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5349	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 10:55:24.525+08	2020-09-07 10:55:24.525+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5350	humilock	加湿器开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 10:56:30.882+08	2020-09-07 10:56:30.882+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5318	childlock	儿童锁开关	Output	\N			0	\N	\N			2020-09-01 14:49:13.464+08	2020-09-07 10:56:58.05+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5320	powerlock	电源开关	Output	\N			0	\N	\N			2020-09-01 14:58:32.92+08	2020-09-07 10:57:25.931+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5317	windgear	风速挡位	Output	\N			0	10	0			2020-09-01 14:47:43.662+08	2020-09-07 10:58:03.672+08	d9afb1b0-b05b-4c6e-8805-c4eeedd19014	1	t	f
5354	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-09-07 16:13:13.353+08	2020-09-07 16:13:13.353+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	2	t	f
5355	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-09-07 16:14:40.722+08	2020-09-07 16:14:40.722+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	2	t	f
5356	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-07 16:15:06.036+08	2020-09-07 16:15:06.036+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	2	t	f
5359	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-07 16:16:26.763+08	2020-09-07 16:16:26.763+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	2	t	f
5364	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 16:18:48.838+08	2020-09-07 16:18:48.838+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5358	soft	软件版本号	Output	\N			0	\N	\N			2020-09-07 16:15:58.093+08	2020-09-22 14:19:38.096+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5362	water	水位感应开关	Output	\N			0	\N	\N		0:正常 1:缺水	2020-09-07 16:18:08.798+08	2020-09-22 14:37:51.147+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5361	mode	工作模式	Output	\N			0	\N	\N		0自动,1手动,2睡眠,3恒湿	2020-09-07 16:17:12.039+08	2020-09-22 19:46:04.604+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5532	stayCount	滞留人数	Output	\N			0	\N	\N	.	无	2020-11-04 10:43:43.023+08	2020-11-04 10:46:34.488+08	dd00727c-90ae-49ec-b8a5-9a89497b7d8c	1	t	f
5590	angley	y角度	Output	\N	\N	\N	\N	\N	\N	°		2020-11-27 10:03:48.408+08	2020-11-27 10:03:48.408+08	830b53c4-b4d6-4d85-9776-3b448ee62c5e	2	t	f
5366	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 16:19:26.116+08	2020-09-07 16:19:26.116+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5367	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-09-07 16:19:48.359+08	2020-09-07 16:19:48.359+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5369	alarmPic	图片	Output	\N	\N	\N	\N	\N	\N	\N		2020-09-10 11:15:15.546+08	2020-09-10 11:15:15.546+08	2862c1ac-f3a8-45b9-88e8-abd2591928d4	5	t	f
5370	angle	角度	Output	\N	\N	\N	\N	\N	\N	°		2020-09-11 13:29:23.101+08	2020-09-11 13:29:23.101+08	d140758d-3441-4156-9b00-7de4589d7f9c	2	t	f
5372	z	z	Output	\N			9	99999999	-99999999	mm		2020-09-11 14:36:39.59+08	2020-09-11 15:05:14.513+08	f928b4a7-3c4f-42bc-aa12-32d1b835c3e6	2	t	f
5373	x	x	Output	\N			9	99999999999	-999999999999	mm		2020-09-11 14:36:39.596+08	2020-09-11 15:05:17.876+08	f928b4a7-3c4f-42bc-aa12-32d1b835c3e6	2	t	f
5374	y	y	Output	\N			9	99999999	-99999999	mm		2020-09-11 14:36:39.6+08	2020-09-11 15:05:20.985+08	f928b4a7-3c4f-42bc-aa12-32d1b835c3e6	2	t	f
5375	capacity	水分	Output	\N	\N	\N	\N	\N	\N	%		2020-09-15 08:50:25.373+08	2020-09-15 08:50:25.373+08	c438d8c1-8b99-41e6-9cc0-5339b773c3bb	2	t	f
5376	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-09-15 08:51:15.467+08	2020-09-15 08:51:15.467+08	c438d8c1-8b99-41e6-9cc0-5339b773c3bb	2	t	f
5377	physicalvalue	位移	Output	\N			\N	\N	\N	mm		2020-09-15 08:59:09.158+08	2020-09-15 09:20:23.197+08	40df1f23-955c-462f-b233-785df1759d7f	2	t	f
5378	yCoordinate	y坐标	Output	\N	\N	\N	\N	\N	\N	mm		2020-09-17 16:42:41.369+08	2020-09-17 16:42:41.369+08	0ca15a19-3a6b-42c0-8336-096b8ebcc01d	2	t	f
5379	zCoordinate	z坐标	Output	\N	\N	\N	\N	\N	\N	mm		2020-09-17 16:42:41.376+08	2020-09-17 16:42:41.376+08	0ca15a19-3a6b-42c0-8336-096b8ebcc01d	2	t	f
5380	xCoordinate	x坐标	Output	\N	\N	\N	\N	\N	\N	mm		2020-09-17 16:42:41.381+08	2020-09-17 16:42:41.381+08	0ca15a19-3a6b-42c0-8336-096b8ebcc01d	2	t	f
5381	northing	Y坐标	Output	\N			3	\N	\N	m		2020-09-18 11:09:34.623+08	2020-09-18 11:11:47.464+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5382	heightDiff	Dz	Output	\N			3	\N	\N	m		2020-09-18 11:09:34.892+08	2020-09-18 11:11:51.162+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5383	northingDiff	Dy	Output	\N			3	\N	\N	m		2020-09-18 11:09:35.098+08	2020-09-18 11:11:55.525+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5384	eastingDiff	Dx	Output	\N			3	\N	\N	m		2020-09-18 11:09:35.364+08	2020-09-18 11:12:00.871+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5385	easting	X坐标	Output	\N			3	\N	\N	m		2020-09-18 11:09:35.638+08	2020-09-18 11:12:05.143+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5386	height	Z坐标	Output	\N			3	\N	\N	m		2020-09-18 11:09:36.917+08	2020-09-18 11:12:09.044+08	2b1cc86c-c2cf-4037-8280-b5ae28fcab8e	2	t	f
5387	timcnt	定时个数	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.224+08	2020-09-21 09:55:14.224+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5388	humigear	加湿器挡位	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.229+08	2020-09-21 09:55:14.229+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5389	pm1	PM1	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-09-21 09:55:14.234+08	2020-09-21 09:55:14.234+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5390	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-09-21 09:55:14.238+08	2020-09-21 09:55:14.238+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5391	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-09-21 09:55:14.242+08	2020-09-21 09:55:14.242+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5392	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-21 09:55:14.246+08	2020-09-21 09:55:14.246+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5393	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-09-21 09:55:14.25+08	2020-09-21 09:55:14.25+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5394	pm10	PM10	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-09-21 09:55:14.253+08	2020-09-21 09:55:14.253+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5395	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-21 09:55:14.257+08	2020-09-21 09:55:14.257+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	2	t	f
5396	wchargelock	无线充电开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.261+08	2020-09-21 09:55:14.261+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5397	NegativeO2lock	负氧离子开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.265+08	2020-09-21 09:55:14.265+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5398	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.271+08	2020-09-21 09:55:14.271+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5399	humilock	加湿器开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.275+08	2020-09-21 09:55:14.275+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5400	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.279+08	2020-09-21 09:55:14.279+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5401	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:14.283+08	2020-09-21 09:55:14.283+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5402	windgear	风速挡位	Output	\N	\N	\N	\N	10	0			2020-09-21 09:55:14.287+08	2020-09-21 09:55:14.287+08	1c1dcd9e-18a5-4a4b-a2c7-13abc5761fcc	1	t	f
5404	humigear	加湿器挡位	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.293+08	2020-09-21 09:55:16.293+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5406	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-09-21 09:55:16.301+08	2020-09-21 09:55:16.301+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5407	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-09-21 09:55:16.309+08	2020-09-21 09:55:16.309+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5408	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-21 09:55:16.315+08	2020-09-21 09:55:16.315+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5409	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-09-21 09:55:16.319+08	2020-09-21 09:55:16.319+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5411	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-09-21 09:55:16.326+08	2020-09-21 09:55:16.326+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5403	qtimer	定时关小时	Output	\N			0	\N	\N		设备端的定时关小时数，最大12H	2020-09-21 09:55:16.288+08	2020-11-09 18:01:45.712+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5368	humigear	加湿器档位	Output	\N			0				0自动 其他1-5 挡位	2020-09-07 16:20:09.121+08	2020-09-22 14:42:34.609+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5405	soft	软件版本号	Output	\N			0	\N	\N			2020-09-21 09:55:16.297+08	2020-11-09 14:12:09.104+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5410	hard	硬件版本号	Output	\N			0	\N	\N			2020-09-21 09:55:16.323+08	2020-11-09 14:12:50.06+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5412	clean	净化开关	Output	\N			0	\N	\N		代表在净化，用于后端聚集 统计净化时长	2020-09-21 09:55:16.33+08	2020-11-09 17:12:53.291+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5413	NegativeO2lock	负氧离子开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.334+08	2020-09-21 09:55:16.334+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5414	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.337+08	2020-09-21 09:55:16.337+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5415	humilock	加湿器开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.341+08	2020-09-21 09:55:16.341+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5416	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.345+08	2020-09-21 09:55:16.345+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5417	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-09-21 09:55:16.348+08	2020-09-21 09:55:16.348+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5418	windgear	风速挡位	Output	\N	\N	\N	\N	10	0			2020-09-21 09:55:16.352+08	2020-09-21 09:55:16.352+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5357	hard	硬件版本号	Output	\N			0	\N	\N			2020-09-07 16:15:38.028+08	2020-09-22 14:19:09.498+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5419	fixhumi	恒湿开关状态	Output	\N	\N	\N	\N	\N	\N	\N	1：打开   0：关闭	2020-09-22 14:37:01.836+08	2020-09-22 14:37:01.836+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	1	t	f
5420	fogs	总雾化量	Output	\N	\N	\N	2	\N	\N	L		2020-09-27 23:45:51.62+08	2020-09-27 23:45:51.62+08	d04cc631-3bc1-496c-af61-fd0ff0ff3e85	2	t	f
5421	speed	风速	Output	\N	\N	\N	3	\N	\N	m/s		2020-09-28 10:33:27.931+08	2020-09-28 10:33:27.931+08	7332ce81-93c4-4c1c-b659-caa2fc92a94a	2	t	f
5422	speed	速度	Output	\N	\N	\N	3	\N	\N	m/s		2020-09-28 10:33:27.944+08	2020-09-28 10:33:27.944+08	3817ac1f-6e39-4157-b1af-99d143da6fbf	2	t	f
5423	direction	风向	Output	\N	\N	\N	3	\N	\N	°		2020-09-28 10:45:02.897+08	2020-09-28 10:45:02.897+08	7a6e0cbd-c0db-4dd6-92e7-94092fc071dc	2	t	f
5424	direction	风向	Output	\N	\N	\N	3	\N	\N	°		2020-09-28 10:45:02.91+08	2020-09-28 10:45:02.91+08	e94da122-530a-4e1b-af6f-da5b6dfb2a29	2	t	f
5426	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-09-29 09:29:32.825+08	2020-09-29 09:29:32.825+08	59e10250-dfd7-4381-8c22-cca2e7a51ccc	2	t	f
5463	timcnt	定时个数	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.633+08	2020-10-10 10:46:03.633+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5425	physicalvalue	压强	Output	\N			4	5	0	kPa		2020-09-29 09:29:06.587+08	2020-09-29 10:18:12.164+08	59e10250-dfd7-4381-8c22-cca2e7a51ccc	2	t	f
5427	physicalvalue	压强	Output	\N			3	\N	\N	kPa		2020-09-29 10:17:03.032+08	2020-09-29 10:18:18.611+08	c76bd374-4160-4615-8ba7-63a2f19f790b	2	t	f
5428	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-09-29 10:18:44.02+08	2020-09-29 10:18:44.02+08	c76bd374-4160-4615-8ba7-63a2f19f790b	2	t	f
5429	rotation	回转角度	Output	\N			0	\N	\N	°		2020-09-29 11:19:58.829+08	2020-09-29 11:19:58.829+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5430	obliquity	塔机倾角	Output	\N			2	\N	\N	°		2020-09-29 11:19:58.837+08	2020-09-29 11:19:58.837+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5431	height	高度	Output	\N			2	\N	\N	m		2020-09-29 11:19:58.842+08	2020-09-29 11:19:58.842+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5432	Heightdeg	超载高度比	Output	\N			\N	\N	\N	%		2020-09-29 11:19:58.846+08	2020-09-29 11:19:58.846+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5433	moment	力矩	Output	\N			2	100	0	%		2020-09-29 11:19:58.85+08	2020-09-29 11:19:58.85+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5434	speed	风速	Output	\N			2	\N	\N	m/s		2020-09-29 11:19:58.854+08	2020-09-29 11:19:58.854+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5435	Rotationdeg	回转角度比	Output	\N			\N	\N	\N	%		2020-09-29 11:19:58.858+08	2020-09-29 11:19:58.858+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5436	Speeddeg	超载风速比	Output	\N	\N	\N	\N	\N	\N	%		2020-09-29 11:19:58.861+08	2020-09-29 11:19:58.861+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5437	Obliquitydeg	超载倾角比	Output	\N	\N	\N	\N	\N	\N	%		2020-09-29 11:19:58.865+08	2020-09-29 11:19:58.865+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5438	weight	额定重量	Output	\N			0	\N	\N	T		2020-09-29 11:19:58.868+08	2020-09-29 11:19:58.868+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5439	Weightdeg	超载重量比	Output	\N			0	\N	\N	%		2020-09-29 11:19:58.872+08	2020-09-29 11:19:58.872+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5440	Radiusdeg	超载幅度比	Output	\N			0	\N	\N	%		2020-09-29 11:19:59.046+08	2020-09-29 11:19:59.046+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5441	curweight	当前重量	Output	\N			0	\N	\N	T		2020-09-29 11:19:59.053+08	2020-09-29 11:19:59.053+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	1	t	f
5442	radius	幅度	Output	\N			2	\N	\N	m		2020-09-29 11:19:59.057+08	2020-09-29 11:19:59.057+08	fe84d4c4-d79f-4a80-bd65-950c4c044636	2	t	f
5443	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-09 14:21:36.084+08	2020-10-09 14:21:36.084+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5444	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-09 14:21:59.873+08	2020-10-09 14:21:59.873+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5445	anglez	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-09 14:22:30.082+08	2020-10-09 14:22:30.082+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5446	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-10-09 14:22:52.255+08	2020-10-09 14:22:52.255+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5464	humigear	加湿器挡位	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.639+08	2020-10-10 10:46:03.639+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5465	pm1	PM1	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-10-10 10:46:03.643+08	2020-10-10 10:46:03.643+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5466	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-10-10 10:46:03.647+08	2020-10-10 10:46:03.647+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5467	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-10-10 10:46:03.652+08	2020-10-10 10:46:03.652+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5468	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-10-10 10:46:03.655+08	2020-10-10 10:46:03.655+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5469	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-10-10 10:46:03.659+08	2020-10-10 10:46:03.659+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5470	pm10	PM10	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-10-10 10:46:03.663+08	2020-10-10 10:46:03.663+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5471	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-10-10 10:46:03.667+08	2020-10-10 10:46:03.667+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	2	t	f
5472	wchargelock	无线充电开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.67+08	2020-10-10 10:46:03.67+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5473	NegativeO2lock	负氧离子开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.674+08	2020-10-10 10:46:03.674+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5474	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.678+08	2020-10-10 10:46:03.678+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5475	humilock	加湿器开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.682+08	2020-10-10 10:46:03.682+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5476	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.685+08	2020-10-10 10:46:03.685+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5477	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:03.69+08	2020-10-10 10:46:03.69+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5478	windgear	风速挡位	Output	\N	\N	\N	\N	10	0			2020-10-10 10:46:03.693+08	2020-10-10 10:46:03.693+08	2a244b5c-9f1b-4432-8302-2fc036a91a14	1	t	f
5479	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:11.471+08	2020-10-10 10:46:11.471+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5480	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:11.477+08	2020-10-10 10:46:11.477+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5481	mode	工作模式	Output	\N			0	\N	\N		0自动,1手动,2睡眠,3恒湿	2020-10-10 10:46:11.481+08	2020-10-10 10:46:11.481+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5482	humigear	加湿器档位	Output	\N			0	\N	\N		0自动 其他1-5 挡位	2020-10-10 10:46:11.485+08	2020-10-10 10:46:11.485+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5483	water	水位感应开关	Output	\N			0	\N	\N		0:正常 1:缺水	2020-10-10 10:46:11.488+08	2020-10-10 10:46:11.488+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5484	soft	软件版本号	Output	\N			0	\N	\N			2020-10-10 10:46:11.491+08	2020-10-10 10:46:11.491+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5485	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-10-10 10:46:11.494+08	2020-10-10 10:46:11.494+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5486	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-10-10 10:46:11.497+08	2020-10-10 10:46:11.497+08	185c3316-9ed2-4a9c-b365-0691b303600f	2	t	f
5487	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-10-10 10:46:11.5+08	2020-10-10 10:46:11.5+08	185c3316-9ed2-4a9c-b365-0691b303600f	2	t	f
5488	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-10-10 10:46:11.504+08	2020-10-10 10:46:11.504+08	185c3316-9ed2-4a9c-b365-0691b303600f	2	t	f
5489	hard	硬件版本号	Output	\N			0	\N	\N			2020-10-10 10:46:11.509+08	2020-10-10 10:46:11.509+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5490	fixhumi	恒湿开关状态	Output	\N	\N	\N	\N	\N	\N	\N	1：打开   0：关闭	2020-10-10 10:46:11.513+08	2020-10-10 10:46:11.513+08	185c3316-9ed2-4a9c-b365-0691b303600f	1	t	f
5491	fogs	总雾化量	Output	\N	\N	\N	2	\N	\N	L		2020-10-10 10:46:11.517+08	2020-10-10 10:46:11.517+08	185c3316-9ed2-4a9c-b365-0691b303600f	2	t	f
5492	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-10-10 10:46:11.522+08	2020-10-10 10:46:11.522+08	185c3316-9ed2-4a9c-b365-0691b303600f	2	t	f
5493	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-10 14:25:24.929+08	2020-10-10 14:25:24.929+08	9ceb3806-c599-431c-b278-80ea9d6db7ba	2	t	f
5494	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-10 14:25:49.078+08	2020-10-10 14:25:49.078+08	9ceb3806-c599-431c-b278-80ea9d6db7ba	2	t	f
5495	anglez	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-10 14:26:15.408+08	2020-10-10 14:26:15.408+08	9ceb3806-c599-431c-b278-80ea9d6db7ba	2	t	f
5496	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-10-10 14:26:39.355+08	2020-10-10 14:26:39.355+08	9ceb3806-c599-431c-b278-80ea9d6db7ba	2	t	f
5497	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-10-13 10:09:58.011+08	2020-10-13 10:09:58.011+08	42d7c213-aa9e-4263-9e97-e57ed97f4342	2	t	f
5499	physicalvalue	应力	Output	\N			\N	\N	\N	Mpa		2020-10-13 10:10:48.967+08	2020-10-13 10:14:19.125+08	42d7c213-aa9e-4263-9e97-e57ed97f4342	2	t	f
5500	length	距离	Output	\N	\N	\N	2	\N	\N	m		2020-10-16 13:43:46.463+08	2020-10-16 13:43:46.463+08	8006946a-43de-49dc-b665-3603da448dec	2	t	f
5502	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-10-16 13:53:55.52+08	2020-10-16 13:53:55.52+08	2997a6da-3093-40f9-b0e3-00b1f8c383b1	2	t	f
5503	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-10-16 13:57:31.984+08	2020-10-16 13:57:31.984+08	8006946a-43de-49dc-b665-3603da448dec	2	t	f
5505	length	沉降	Output	\N	\N	\N	\N	\N	\N	mm		2020-10-19 14:20:08.557+08	2020-10-19 14:20:08.557+08	7aee0c4c-edb0-43e3-a3bc-9fbff9871499	2	t	f
5504	physicalvalue	应变	Output	\N			\N	\N	\N	με		2020-10-19 14:17:50.552+08	2020-10-19 15:42:19.611+08	7a954891-860b-4321-ab9b-290a023d288f	2	t	f
5506	offset	拉绳偏移量	Output	\N			\N	\N	\N	mm		2020-10-21 09:52:05.304+08	2020-10-21 09:53:39.778+08	036f8003-a82c-40bc-a175-7cb81f4da7c9	2	t	f
5507	xDataint	X轴原始值	Output	\N	\N	\N	\N	\N	\N	°		2020-10-21 11:42:45.483+08	2020-10-21 11:42:45.483+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5508	yDataint	Y轴原始值	Output	\N	\N	\N	\N	\N	\N	°		2020-10-21 11:43:18.264+08	2020-10-21 11:43:18.264+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5509	zDataint	Z轴原始值	Output	\N	\N	\N	\N	\N	\N	°		2020-10-21 11:43:51.332+08	2020-10-21 11:43:51.332+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5510	tempint	原始温度	Output	\N	\N	\N	\N	\N	\N	°		2020-10-21 11:44:26.932+08	2020-10-21 11:44:26.932+08	d7c62295-864c-44de-81e0-2cb9a03bf532	2	t	f
5511	type	在线状态	Output	\N	\N	\N	\N	\N	\N	\N		2020-10-21 16:17:58.444+08	2020-10-21 16:17:58.444+08	7257f8df-a9ef-4358-9754-228732a8953b	1	t	f
5512	physicalvalue	湿度	Output	\N			2	\N	\N	%		2020-10-23 17:03:59.958+08	2020-10-23 17:05:01.443+08	95a38af8-bdb9-4f10-ad6a-f3cccec12f59	2	t	f
5515	temperature	温度	Output	\N			2	\N	\N	℃		2020-10-26 13:25:34.118+08	2020-10-29 13:07:06.462+08	4200d327-7520-40f5-a476-fdb18a6c0e3e	2	t	f
5516	pressure	液位	Output	\N			3	\N	\N	mm		2020-10-26 13:25:34.217+08	2020-10-29 13:06:55.775+08	4200d327-7520-40f5-a476-fdb18a6c0e3e	2	t	f
5518	physicalvalue	位移	Output	\N	\N	\N	2	\N	\N	mm		2020-10-29 16:45:09.131+08	2020-10-29 16:45:09.131+08	e7114e7a-a8cd-4265-93bd-3d86a0ab5864	2	t	f
5519	physicalvalue	裂缝	Output	\N	\N	\N	\N	\N	\N	mm		2020-10-30 14:37:16.615+08	2020-10-30 14:37:16.615+08	77f66a9f-48f4-4970-b406-a8abc2aa39f9	2	t	f
5520	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-10-30 14:38:32.078+08	2020-10-30 14:38:32.078+08	77f66a9f-48f4-4970-b406-a8abc2aa39f9	2	t	f
5521	speed	风速	Output	\N	\N	\N	\N	\N	\N	m/s		2020-11-02 10:05:36.145+08	2020-11-02 10:05:36.145+08	f2b6d5a0-114e-4c45-9066-5a938d4f620a	2	t	f
5522	direction	风向	Output	\N	\N	\N	\N	\N	\N	°		2020-11-02 10:05:36.152+08	2020-11-02 10:05:36.152+08	f2b6d5a0-114e-4c45-9066-5a938d4f620a	2	t	f
5525	alarmState	报警类型	Output	\N	\N	\N	\N	\N	\N	\N		2020-11-02 14:14:05.358+08	2020-11-02 14:14:05.358+08	5bffec18-538b-4422-8cfa-c602ce69cb7e	1	t	f
5527	outCount	出流量	Output	\N	\N	\N	\N	\N	\N			2020-11-04 09:49:56.709+08	2020-11-04 09:49:56.709+08	dd00727c-90ae-49ec-b8a5-9a89497b7d8c	1	t	f
5528	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-11-04 09:57:18.252+08	2020-11-04 09:57:18.252+08	f4d0c081-5014-42df-8154-c7c3b4657cfb	2	t	f
5517	physicalvalue	轴力	Output	\N			\N	\N	\N	KN		2020-10-28 11:47:56.378+08	2020-11-11 16:51:23.111+08	ba00d9a2-f064-49eb-918c-0924558607bc	2	t	f
5529	humidity	湿度	Output	\N			2	\N	\N	%RH		2020-11-04 09:57:40.026+08	2020-11-04 09:58:37.958+08	f4d0c081-5014-42df-8154-c7c3b4657cfb	2	t	f
5530	length	位移	Output	\N	\N	\N	2	\N	\N	mm		2020-11-04 10:06:19.414+08	2020-11-04 10:06:19.414+08	e6bcf4a3-0d98-48a5-8a7d-401f96e01bfa	2	t	f
5531	physicalvalue	雨量	Output	\N	\N	\N	2	\N	\N	mm		2020-11-04 10:10:46.538+08	2020-11-04 10:10:46.538+08	257470bc-2299-4185-a68b-b194c1b926ad	2	t	f
5526	inCount	进流量	Output	\N			0	\N	\N	.	无	2020-11-04 09:49:40.407+08	2020-11-04 10:48:49.703+08	dd00727c-90ae-49ec-b8a5-9a89497b7d8c	1	t	f
5533	PM2_5H	pm2.5上限	Output	\N			1	\N	\N	ug/m³		2020-11-09 15:10:56.207+08	2020-11-09 15:11:36.533+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5534	PM2_5L	pm2.5下限	Output	\N			1	\N	\N	ug/m³		2020-11-09 15:11:23.888+08	2020-11-09 15:11:40.827+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5536	CLEAN_M	净化量	Output	\N	\N	\N	1	\N	\N	m³		2020-11-09 15:13:58.005+08	2020-11-09 15:13:58.005+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5535	USE_M	滤芯使用(分钟)	Output	\N			0	\N	\N	min		2020-11-09 15:12:47.612+08	2020-11-09 15:23:34.579+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5538	water	水位感应	Output	\N	\N	\N	\N	\N	\N	\N	0:正常 1:缺水	2020-11-09 17:40:59.979+08	2020-11-09 17:40:59.979+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5539	mode	工作模式	Output	\N	\N	\N	\N	\N	\N		设备工作模式 0自动 1手动 2睡眠	2020-11-09 17:45:30.317+08	2020-11-09 17:45:30.317+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5541	airs	本次净化量	Output	\N	\N	\N	1	\N	\N	m³		2020-11-09 17:53:11.53+08	2020-11-09 17:53:11.53+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5540	fogs	本次开机加湿量	Output	\N			1	\N	\N	L		2020-11-09 17:52:36.298+08	2020-11-09 17:53:29.201+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	2	t	f
5542	length	水位	Output	\N	\N	\N	2	\N	\N	mm		2020-11-10 09:01:05.491+08	2020-11-10 09:01:05.491+08	ce6a00e6-475a-4ecd-8890-b523c3c65e53	2	t	f
5543	length	水位	Output	\N	\N	\N	\N	\N	\N	mm		2020-11-10 15:56:53.586+08	2020-11-10 15:56:53.586+08	fc0dc028-86e5-4a74-a75b-15c2d9b30d63	2	t	f
5544	smartlock	智能开关	Output	\N	\N	\N	\N	\N	\N	\N	1：打开   0：关闭	2020-11-10 16:20:04.14+08	2020-11-10 16:20:04.14+08	9fbfcc1f-f555-4602-a9c4-d92dbd99bd94	1	t	f
5550	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-11-11 09:55:32.342+08	2020-11-11 09:55:32.342+08	5fd6dff1-680f-410f-9631-e645a33bddda	2	t	f
5585	physicalvalue	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-11-19 09:22:03.293+08	2020-11-19 09:22:03.293+08	cfcac206-4e6f-41f2-b40c-a9294cb606d7	2	t	f
5551	humigear	加湿器挡位	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:31.999+08	2020-11-11 17:46:31.999+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5552	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-11-11 17:46:32.006+08	2020-11-11 17:46:32.006+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5553	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-11-11 17:46:32.011+08	2020-11-11 17:46:32.011+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5554	ch2o	甲醛	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-11-11 17:46:32.015+08	2020-11-11 17:46:32.015+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5555	pm25	PM2.5	Output	\N	\N	\N	2	\N	\N	ug/m³		2020-11-11 17:46:32.019+08	2020-11-11 17:46:32.019+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5556	tvoc	有机气态物质	Output	\N	\N	\N	2	\N	\N	mg/m³		2020-11-11 17:46:32.024+08	2020-11-11 17:46:32.024+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5557	qtimer	定时关小时	Output	\N			0	\N	\N		设备端的定时关小时数，最大12H	2020-11-11 17:46:32.028+08	2020-11-11 17:46:32.028+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5558	PM2_5H	pm2.5上限	Output	\N			1	\N	\N	ug/m³		2020-11-11 17:46:32.032+08	2020-11-11 17:46:32.032+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5559	windgear	风速挡位	Output	\N	\N	\N	\N	10	0			2020-11-11 17:46:32.036+08	2020-11-11 17:46:32.036+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5560	soft	软件版本号	Output	\N			0	\N	\N			2020-11-11 17:46:32.04+08	2020-11-11 17:46:32.04+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5561	hard	硬件版本号	Output	\N			0	\N	\N			2020-11-11 17:46:32.044+08	2020-11-11 17:46:32.044+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5562	clean	净化开关	Output	\N			0	\N	\N		代表在净化，用于后端聚集 统计净化时长	2020-11-11 17:46:32.047+08	2020-11-11 17:46:32.047+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5563	NegativeO2lock	负氧离子开关	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:32.05+08	2020-11-11 17:46:32.05+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5564	uvlock	UV杀菌灯开关	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:32.054+08	2020-11-11 17:46:32.054+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5565	humilock	加湿器开关	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:32.057+08	2020-11-11 17:46:32.057+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5566	childlock	儿童锁开关	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:32.061+08	2020-11-11 17:46:32.061+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5567	powerlock	电源开关	Output	\N	\N	\N	\N	\N	\N			2020-11-11 17:46:32.065+08	2020-11-11 17:46:32.065+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5568	USE_M	滤芯使用(分钟)	Output	\N			0	\N	\N	min		2020-11-11 17:46:32.069+08	2020-11-11 17:46:32.069+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5569	CLEAN_M	净化量	Output	\N	\N	\N	1	\N	\N	m³		2020-11-11 17:46:32.073+08	2020-11-11 17:46:32.073+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5570	PM2_5L	pm2.5下限	Output	\N			1	\N	\N	ug/m³		2020-11-11 17:46:32.078+08	2020-11-11 17:46:32.078+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5571	smartlock	智能开关	Output	\N	\N	\N	\N	\N	\N	\N	1：打开   0：关闭	2020-11-11 17:46:32.082+08	2020-11-11 17:46:32.082+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5572	fogs	本次开机加湿量	Output	\N			1	\N	\N	L		2020-11-11 17:46:32.086+08	2020-11-11 17:46:32.086+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5573	airs	本次净化量	Output	\N	\N	\N	1	\N	\N	m³		2020-11-11 17:46:32.09+08	2020-11-11 17:46:32.09+08	468aada9-eeb5-4174-a21f-73f4ac420d78	2	t	f
5574	mode	工作模式	Output	\N	\N	\N	\N	\N	\N		设备工作模式 0自动 1手动 2睡眠	2020-11-11 17:46:32.093+08	2020-11-11 17:46:32.093+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5575	water	水位感应	Output	\N	\N	\N	\N	\N	\N	\N	0:正常 1:缺水	2020-11-11 17:46:32.097+08	2020-11-11 17:46:32.097+08	468aada9-eeb5-4174-a21f-73f4ac420d78	1	t	f
5576	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-11-16 09:26:32.45+08	2020-11-16 09:26:32.45+08	eaa7d913-e972-4a8b-9bb6-870673b450a2	2	t	f
5577	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2020-11-16 09:26:32.455+08	2020-11-16 09:26:32.455+08	eaa7d913-e972-4a8b-9bb6-870673b450a2	2	t	f
5578	am	幅值	Output	\N	\N	\N	3	\N	\N	mv		2020-11-16 09:26:32.46+08	2020-11-16 09:26:32.46+08	eaa7d913-e972-4a8b-9bb6-870673b450a2	2	t	f
5579	physicalvalue	应力	Output	\N	\N	\N	4	\N	\N	kN		2020-11-16 09:26:32.463+08	2020-11-16 09:26:32.463+08	eaa7d913-e972-4a8b-9bb6-870673b450a2	2	t	f
5580	waterlevel	水位	Output	\N	\N	\N	4	\N	\N	m		2020-11-16 10:21:24.8+08	2020-11-16 10:21:24.8+08	2997a6da-3093-40f9-b0e3-00b1f8c383b1	2	t	f
5581	frequency	频率	Output	\N			3	\N	\N	Hz		2020-11-16 13:58:24.278+08	2020-11-16 13:58:45.333+08	3a1eee94-6d31-4cfe-a9cf-c2522302fa16	2	t	f
5583	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2020-11-16 13:59:55.049+08	2020-11-16 13:59:55.049+08	3a1eee94-6d31-4cfe-a9cf-c2522302fa16	2	t	f
5584	am	幅值	Output	\N	\N	\N	4	\N	\N	mv		2020-11-16 14:00:15.858+08	2020-11-16 14:00:15.858+08	3a1eee94-6d31-4cfe-a9cf-c2522302fa16	2	t	f
5586	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-11-19 09:30:53.095+08	2020-11-19 09:30:53.095+08	cfcac206-4e6f-41f2-b40c-a9294cb606d7	2	t	f
5548	anglex	X轴角度	Output	\N			2	\N	\N	°		2020-11-11 09:55:32.318+08	2021-01-18 17:20:53.943+08	5fd6dff1-680f-410f-9631-e645a33bddda	2	t	f
5587	physicalvalue	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-11-26 10:49:59.115+08	2020-11-26 10:49:59.115+08	ec43a63c-84a3-4a0a-964e-79fa8af558e7	2	t	f
5588	physicalvalue	水位	Output	\N	\N	\N	\N	\N	\N	m		2020-11-26 13:54:13.843+08	2020-11-26 13:54:13.843+08	6c6317e7-c5c4-4ef8-ab38-3da0e4824f91	2	t	f
5589	anglex	x角度	Output	\N	\N	\N	\N	\N	\N	°		2020-11-27 10:03:26.934+08	2020-11-27 10:03:26.934+08	830b53c4-b4d6-4d85-9776-3b448ee62c5e	2	t	f
5592	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-11-27 10:04:38.266+08	2020-11-27 10:04:38.266+08	830b53c4-b4d6-4d85-9776-3b448ee62c5e	2	t	f
5593	data_in	进的人数	Output	\N	\N	\N	\N	\N	\N	人次		2020-12-03 17:40:46.31+08	2020-12-03 17:40:46.31+08	aa8f7231-23cf-47e0-a8cb-f045759a3304	1	t	f
5594	data_out	出的人数	Output	\N			0	\N	\N	人次		2020-12-03 17:40:46.589+08	2020-12-03 17:40:56.54+08	aa8f7231-23cf-47e0-a8cb-f045759a3304	1	t	f
5595	co	一氧化碳	Output	\N	\N	\N	2	\N	\N	ppm		2020-12-08 17:09:25.387+08	2020-12-08 17:09:25.387+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5596	ch4	甲烷	Output	\N	\N	\N	2	\N	\N	ppm		2020-12-08 17:10:03.597+08	2020-12-08 17:10:03.597+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5597	h2s	硫化氢	Output	\N	\N	\N	2	\N	\N	ppm		2020-12-08 17:10:28.324+08	2020-12-08 17:10:28.324+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5598	o3	臭氧	Output	\N	\N	\N	3	\N	\N	ppm		2020-12-08 17:10:49.8+08	2020-12-08 17:10:49.8+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5599	temperature	湿度	Output	\N	\N	\N	2	\N	\N	℃		2020-12-08 17:11:39.799+08	2020-12-08 17:11:39.799+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5600	humidity	湿度	Output	\N	\N	\N	2	\N	\N	%		2020-12-08 17:11:55.868+08	2020-12-08 17:11:55.868+08	82830f9f-f318-4308-babc-79341cb03954	2	t	f
5601	distance	标签与基站距离	Output	\N	\N	\N	3	\N	\N	m		2020-12-09 14:16:34.845+08	2020-12-09 14:16:34.845+08	47875511-0ac0-4938-a38b-277669f302e9	2	t	f
5602	state	标签状态	Output	\N	\N	\N	\N	\N	\N		0正常 1电压低 2紧急报警	2020-12-09 14:17:23.637+08	2020-12-09 14:17:23.637+08	47875511-0ac0-4938-a38b-277669f302e9	1	t	f
5603	station_id	基站ID	Output	\N	\N	\N	\N	\N	\N			2020-12-09 14:18:09.02+08	2020-12-09 14:18:09.02+08	47875511-0ac0-4938-a38b-277669f302e9	5	t	f
5605	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-11 09:12:02.824+08	2020-12-11 09:12:02.824+08	dbbe4022-fbd5-42cc-9e58-233046723571	2	t	f
5604	anglex	x轴角度	Output	\N			\N	\N	\N	°		2020-12-11 09:11:28.358+08	2020-12-11 09:56:58.575+08	dbbe4022-fbd5-42cc-9e58-233046723571	2	t	f
5606	physicalvalue	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-12-11 10:18:23.532+08	2020-12-11 10:18:23.532+08	cfb7053c-3698-4308-9245-c7fdfb84a202	2	t	f
5607	physicalvalue	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-12-11 10:19:17.142+08	2020-12-11 10:19:17.142+08	5bf561bf-7398-4a8f-aaaf-4f7b695d0020	2	t	f
5608	physicalvalue	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-11 10:21:02.83+08	2020-12-11 10:21:02.83+08	bf13586b-7b53-4c49-8131-f81bb6128330	2	t	f
5610	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-16 15:30:06.056+08	2020-12-16 15:30:06.056+08	4b302156-72de-4f74-a828-06b1e47938a3	2	t	f
5611	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-12-16 15:30:46.778+08	2020-12-16 15:30:46.778+08	4b302156-72de-4f74-a828-06b1e47938a3	2	t	f
5612	physicalvalue	应变	Output	\N	\N	\N	\N	\N	\N	με		2020-12-16 15:32:57.646+08	2020-12-16 15:32:57.646+08	4b302156-72de-4f74-a828-06b1e47938a3	2	t	f
5613	physicalvalue	受力	Output	\N	\N	\N	\N	\N	\N	KN		2020-12-16 15:35:33.678+08	2020-12-16 15:35:33.678+08	9acc6ecb-52ee-4070-8fe5-6e893642d30e	2	t	f
5614	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-12-16 15:35:33.721+08	2020-12-16 15:35:33.721+08	9acc6ecb-52ee-4070-8fe5-6e893642d30e	2	t	f
5615	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-16 15:35:33.76+08	2020-12-16 15:35:33.76+08	9acc6ecb-52ee-4070-8fe5-6e893642d30e	2	t	f
5616	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-16 15:38:50.397+08	2020-12-16 15:38:50.397+08	bd26c9fd-802a-4cca-8f55-3a27e7bfb026	2	t	f
5617	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2020-12-16 15:38:50.589+08	2020-12-16 15:38:50.589+08	bd26c9fd-802a-4cca-8f55-3a27e7bfb026	2	t	f
5618	physicalvalue	受力	Output	\N	\N	\N	\N	\N	\N	KN		2020-12-16 15:38:50.611+08	2020-12-16 15:38:50.611+08	bd26c9fd-802a-4cca-8f55-3a27e7bfb026	2	t	f
5619	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-21 17:00:24.193+08	2020-12-21 17:00:24.193+08	09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc	2	t	f
5620	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-21 17:00:24.208+08	2020-12-21 17:00:24.208+08	09252fcf-2e4d-42ea-b1a0-04b8fd99c5dc	2	t	f
5621	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-22 08:41:29.422+08	2020-12-22 08:41:29.422+08	31ecb271-8866-4680-add6-52e257911749	2	t	f
5623	accelerationy	加速度y	Output	\N	\N	\N	\N	\N	\N	mg		2020-12-22 08:43:46.851+08	2020-12-22 08:43:46.851+08	31ecb271-8866-4680-add6-52e257911749	2	t	f
5622	accelerationx	加速度x	Output	\N			\N	\N	\N	mg		2020-12-22 08:42:20.743+08	2020-12-22 08:43:56.716+08	31ecb271-8866-4680-add6-52e257911749	2	t	f
5624	accelerationz	加速度z	Output	\N	\N	\N	\N	\N	\N	mg		2020-12-22 08:44:31.287+08	2020-12-22 08:44:31.287+08	31ecb271-8866-4680-add6-52e257911749	2	t	f
5625	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-24 15:08:13.973+08	2020-12-24 15:08:13.973+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	2	t	f
5626	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-24 15:08:48.6+08	2020-12-24 15:08:48.6+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	2	t	f
5627	anglez	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2020-12-24 15:09:22.21+08	2020-12-24 15:09:22.21+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	2	t	f
5628	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-24 15:09:52.059+08	2020-12-24 15:09:52.059+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	2	t	f
5629	voltage	电压	Output	\N			\N	\N	\N	V		2020-12-24 15:13:12.777+08	2020-12-25 14:47:53.737+08	b7a0ef5f-adce-4d74-808d-e8cb24d7955b	2	t	f
5630	anglex	X轴角度	Output	\N	\N	\N	4	\N	\N	°		2020-12-29 14:11:13.141+08	2020-12-29 14:11:13.141+08	6680d7d5-905b-4311-8a63-a8c11b0c765a	2	t	f
5631	angley	Y轴角度	Output	\N	\N	\N	4	\N	\N	°		2020-12-29 14:11:13.765+08	2020-12-29 14:11:13.765+08	6680d7d5-905b-4311-8a63-a8c11b0c765a	2	t	f
5637	physicalvalue	温度	Output	\N	\N	\N	\N	\N	\N	℃		2020-12-31 14:26:55.477+08	2020-12-31 14:26:55.477+08	3cd111a3-296e-4cfe-af80-2d206f3a2b36	2	t	f
5638	physicalvalue	位移	Output	\N	\N	\N	\N	\N	\N	mm		2020-12-31 14:28:18.777+08	2020-12-31 14:28:18.777+08	e673c024-edd4-495c-a9a9-c5c6306ed6d0	2	t	f
5636	physicalvalue	微应变	Output	\N			\N	\N	\N	με		2020-12-31 14:25:20.913+08	2021-01-05 14:01:56.339+08	8cb0c7e1-fe83-4b63-9f7f-7598487ef57a	2	t	f
5640	northing	Y坐标	Output	\N			3	\N	\N	m		2021-01-07 10:07:18.761+08	2021-01-18 10:59:25.908+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5648	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2021-01-07 16:03:22.682+08	2021-01-07 16:03:22.682+08	68049b31-8deb-465e-a468-2cbafc9b8023	5	t	f
5653	northingDiff	Dy	Output	\N			3	\N	\N	m		2021-01-08 17:52:36.899+08	2021-01-18 10:58:47.009+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5654	heightDiff	Dz	Output	\N			3	\N	\N	m		2021-01-08 17:53:00.123+08	2021-01-18 10:58:52.67+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5657	lengthDiff	Ds	Output	\N			\N	\N	\N	m		2021-01-18 10:44:25.965+08	2021-01-18 10:59:00.325+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5644	heightDiff	Dz	Output	\N			3	\N	\N	m		2021-01-07 10:11:42.053+08	2021-01-18 10:59:20.25+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5639	easting	X坐标	Output	\N			3	\N	\N	m		2021-01-07 10:06:48.804+08	2021-01-18 10:59:31.332+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5641	height	Z坐标	Output	\N			3	\N	\N	m		2021-01-07 10:08:36.833+08	2021-01-18 10:59:36.919+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5642	eastingDiff	Dx	Output	\N			3	\N	\N	m		2021-01-07 10:09:45.113+08	2021-01-18 10:59:42.465+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5643	northingDiff	Dy	Output	\N			3	\N	\N	m		2021-01-07 10:10:12.354+08	2021-01-18 10:59:47.748+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5645	addeastingDiff	sDx	Output	\N			3	\N	\N	m		2021-01-07 10:16:03.86+08	2021-01-18 10:59:57.467+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5646	addnorthingDiff	sDy	Output	\N			3	\N	\N	m		2021-01-07 10:17:42.08+08	2021-01-18 11:00:03.815+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5647	addheightDiff	sDz	Output	\N			3	\N	\N	m		2021-01-07 10:18:41.934+08	2021-01-18 11:00:09.743+08	a68a5258-d2d1-40df-beb0-710a190c1175	2	t	f
5649	easting	x坐标	Output	\N			3	\N	\N	m		2021-01-08 17:49:56.385+08	2021-01-18 10:58:07.821+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5655	windSpeed	风速分类	Output	\N			2	1000	0	m/s		2021-01-14 14:38:10.135+08	2021-01-14 16:59:22.024+08	a9e161b5-80ac-44f8-b7e3-eab4baaab9d8	2	t	f
5650	northing	y坐标	Output	\N			3	\N	\N	m		2021-01-08 17:50:51.498+08	2021-01-18 10:58:12.481+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5651	height	z坐标	Output	\N			3	\N	\N	m		2021-01-08 17:51:15.238+08	2021-01-18 10:58:17.56+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5652	eastingDiff	Dx	Output	\N			3	\N	\N	m		2021-01-08 17:52:17.544+08	2021-01-18 10:58:25.456+08	9b7b4ca9-1a16-402d-a1bc-a4ea6f95db22	2	t	f
5659	gy	Y轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-01-18 12:37:46.535+08	2021-01-18 12:37:46.535+08	b0ddaaab-3ad2-4674-a102-dc2459657a7d	2	t	f
5660	gz	Z轴加速度	Output	\N	\N	\N	\N	\N	\N			2021-01-18 12:37:46.54+08	2021-01-18 12:37:46.54+08	b0ddaaab-3ad2-4674-a102-dc2459657a7d	2	t	f
5658	gx	X轴加速度	Output	\N			\N	\N	\N	mg		2021-01-18 12:37:46.529+08	2021-01-18 12:38:25.505+08	b0ddaaab-3ad2-4674-a102-dc2459657a7d	2	t	f
5661	x	X轴倾斜角度	Output	\N	\N	\N	\N	\N	\N	°		2021-01-18 14:02:07.855+08	2021-01-18 14:02:07.855+08	d1124662-5294-40cf-a8cb-6cac92776c40	2	t	f
5662	y	Y轴倾斜角度	Output	\N	\N	\N	\N	\N	\N	°		2021-01-18 14:02:07.883+08	2021-01-18 14:02:07.883+08	d1124662-5294-40cf-a8cb-6cac92776c40	2	t	f
5663	z	Z轴倾斜角度	Output	\N	\N	\N	\N	\N	\N	°		2021-01-18 14:02:08.166+08	2021-01-18 14:02:08.166+08	d1124662-5294-40cf-a8cb-6cac92776c40	2	t	f
5656	windDirection	风向	Output	\N			2			°		2021-01-14 14:38:46.893+08	2021-01-19 11:44:44.92+08	a9e161b5-80ac-44f8-b7e3-eab4baaab9d8	2	t	f
5664	angle	倾斜角度	Output	\N	\N	\N	\N	\N	\N	°		2021-01-18 14:02:08.19+08	2021-01-18 14:02:08.19+08	d1124662-5294-40cf-a8cb-6cac92776c40	2	t	f
5665	trend	方向角度	Output	\N	\N	\N	\N	\N	\N	°		2021-01-18 14:02:08.254+08	2021-01-18 14:02:08.254+08	d1124662-5294-40cf-a8cb-6cac92776c40	2	t	f
5666	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2021-01-18 14:04:59.394+08	2021-01-18 14:04:59.394+08	1de99810-efe3-468a-a89b-0d42d5933634	2	t	f
5667	waterrate	含水率	Output	\N	\N	\N	\N	\N	\N	%		2021-01-18 14:09:49.697+08	2021-01-18 14:09:49.697+08	cd504e3c-bb6a-472e-bf23-eac4d2c0ca1a	2	t	f
5668	waterlevel	泥水位	Output	\N	\N	\N	\N	\N	\N	m		2021-01-18 14:14:29.651+08	2021-01-18 14:14:29.651+08	cff46266-6321-44f0-a893-0a66249826b1	2	t	f
5549	angley	Y轴角度	Output	\N			2	\N	\N	°		2020-11-11 09:55:32.334+08	2021-01-18 17:21:01.042+08	5fd6dff1-680f-410f-9631-e645a33bddda	2	t	f
5703	x	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-04 15:51:27.639+08	2021-02-04 15:51:27.639+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	2	t	f
5704	y	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-04 15:51:52.693+08	2021-02-04 15:51:52.693+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	2	t	f
5705	z	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-04 15:52:20.944+08	2021-02-04 15:52:20.944+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	2	t	f
5677	jsonfileexts	\N	Constant	\N	\N	.a,.d,.dx,.dex,.m	\N	\N	\N	\N		2021-01-22 17:17:12.065+08	2021-01-22 17:17:12.065+08	cd020968-8d12-4951-a6bb-0658b8ea6799	5	t	f
5721	angley	Y轴位移	Output	\N			4	\N		mm		2021-02-05 15:29:31.06+08	2021-02-05 15:30:23.295+08	99112554-2cb9-43fc-adef-6068fdb897a7	2	t	f
5706	angle	倾斜	Output	\N	\N	\N	\N	\N	\N	°		2021-02-04 15:52:38.784+08	2021-02-04 15:52:38.784+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	2	t	f
5684	length	距离	Output	\N	\N	\N	3	\N	\N	m		2021-01-26 15:42:40.697+08	2021-01-26 15:42:40.697+08	2df0457d-dcdc-43a8-b9be-cde18d3e3f6f	2	t	f
5685	length	距离	Output	\N			2	\N	\N	m		2021-01-26 15:59:08.537+08	2021-01-26 15:59:22.394+08	b781e844-b4da-4a6b-9420-bd6796c7188b	2	t	f
5707	trend	方向角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-04 15:52:54.992+08	2021-02-04 15:52:54.992+08	074a59c4-fb97-4bb9-9835-8c6463a9dd8a	2	t	f
5708	displacement	位移	Output	\N			4	\N	\N	mm		2021-02-04 16:08:03.935+08	2021-02-04 16:08:10.47+08	5cecb8ee-3d0b-41dd-8293-4108719a7e08	2	t	f
5689	xlength	X	Output	\N			\N	\N	\N	mm		2021-01-27 14:24:00.992+08	2021-01-28 08:46:45.309+08	4f43df6e-9984-45bb-9ec3-62e789fb6b72	2	t	f
5690	ylength	Y	Output	\N			\N	\N	\N	mm		2021-01-27 14:24:55.012+08	2021-01-28 08:46:53.738+08	4f43df6e-9984-45bb-9ec3-62e789fb6b72	2	t	f
5691	zlength	Z	Output	\N			\N	\N	\N	mm		2021-01-27 14:25:33.899+08	2021-01-28 08:47:00.866+08	4f43df6e-9984-45bb-9ec3-62e789fb6b72	2	t	f
5692	xacceleration	x加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-01-28 08:54:46.233+08	2021-01-28 08:54:46.233+08	c9b1921e-62db-4dc5-b15b-663afe09388e	2	t	f
5693	yacceleration	y加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-01-28 08:55:29.871+08	2021-01-28 08:55:29.871+08	c9b1921e-62db-4dc5-b15b-663afe09388e	2	t	f
5694	zacceleration	z加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-01-28 08:55:53.591+08	2021-01-28 08:55:53.591+08	c9b1921e-62db-4dc5-b15b-663afe09388e	2	t	f
5686	x	x方向位移	Output	\N			\N	\N	\N	mm		2021-01-27 14:12:22.051+08	2021-01-28 08:59:16.485+08	ad519e49-e9a4-46e1-8166-c56e97bac6d5	2	t	f
5687	y	y方向位移	Output	\N			\N	\N	\N	mm		2021-01-27 14:12:51.624+08	2021-01-28 08:59:23.28+08	ad519e49-e9a4-46e1-8166-c56e97bac6d5	2	t	f
5688	z	z方向位移	Output	\N			\N	\N	\N	mm		2021-01-27 14:13:25.332+08	2021-01-28 08:59:31.284+08	ad519e49-e9a4-46e1-8166-c56e97bac6d5	2	t	f
5695	rainfall	降雨量	Output	\N	\N	\N	\N	\N	\N	mm		2021-01-28 09:38:19.247+08	2021-01-28 09:38:19.247+08	7dbd6789-715f-43ad-94d2-ca3ede2c52e2	2	t	f
5696	daily_rainfall	日降雨量	Output	\N	\N	\N	\N	\N	\N	mm		2021-01-28 09:38:53.486+08	2021-01-28 09:38:53.486+08	7dbd6789-715f-43ad-94d2-ca3ede2c52e2	2	t	f
5697	length	水位	Output	\N	\N	\N	\N	\N	\N	m		2021-01-28 09:49:29.27+08	2021-01-28 09:49:29.27+08	d0e4aa6d-cc64-4e1d-9ce4-a91c1fd76e87	2	t	f
5698	length	裂缝	Output	\N	\N	\N	\N	\N	\N	mm		2021-01-28 09:50:22.31+08	2021-01-28 09:50:22.31+08	40e24053-00bb-4c0d-9d0d-6b44178ab0f2	2	t	f
5699	soil_moisture	土壤含水率	Output	\N	\N	\N	\N	\N	\N	%		2021-01-28 10:03:29.741+08	2021-01-28 10:03:29.741+08	532e0ecd-69b7-4dc4-945e-e4503cb4f4de	2	t	f
5700	physicalvalue	Z轴加速度	Output	\N			\N	\N	\N	g		2021-01-29 10:42:07.717+08	2021-01-29 10:42:14.668+08	e983c3bb-0606-43f3-ad7a-0a1c80bf1df4	2	t	f
5701	physicalvalue	Y轴加速度	Output	\N			\N	\N	\N	g		2021-01-29 11:01:03.918+08	2021-01-29 11:01:12.771+08	fc3a3026-9e74-4e31-9927-3936778248b5	2	t	f
5702	physicalvalue	X轴加速度	Output	\N	\N	\N	\N	\N		g		2021-01-29 11:02:09.323+08	2021-01-29 11:02:09.323+08	2364818e-4cde-4614-a15d-7a127ceabf7d	2	t	f
5709	temperature	温度	Output	\N			\N	\N	\N	℃		2021-02-04 16:17:08.471+08	2021-02-04 16:17:20.233+08	2940ee26-449d-4390-8707-b8e0b150faad	2	t	f
5710	waterlevel	泥水位	Output	\N	\N	\N	\N	\N	\N	m		2021-02-05 15:01:40.068+08	2021-02-05 15:01:40.068+08	bf24a684-40ba-4a05-9745-dfad12c4a4a2	2	t	f
5711	waterrate	含水率	Output	\N			\N	\N	\N	%		2021-02-05 15:03:42.661+08	2021-02-05 15:03:50.029+08	8ebf5c23-cb3c-4f9f-a506-a3d125575921	2	t	f
5712	gx	X轴加速度	Output	\N			\N	\N	\N	mg		2021-02-05 15:04:47.094+08	2021-02-05 15:04:53.537+08	68beb8e6-51d2-40db-8cae-5ba79d4cf5c6	2	t	f
5713	gy	Y轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-02-05 15:05:17.38+08	2021-02-05 15:05:17.38+08	68beb8e6-51d2-40db-8cae-5ba79d4cf5c6	2	t	f
5714	gz	Z轴加速度	Output	\N	\N	\N	\N	\N	\N	mg		2021-02-05 15:05:32.343+08	2021-02-05 15:05:32.343+08	68beb8e6-51d2-40db-8cae-5ba79d4cf5c6	2	t	f
5715	temperature	温度	Output	\N			2	\N	\N	℃		2021-02-05 15:13:34.157+08	2021-02-05 15:13:39.661+08	915fe37c-0682-4390-8b9c-06edc2294532	2	t	f
5716	frequency	频率	Output	\N	\N	\N	3	\N	\N	Hz		2021-02-05 15:15:17.682+08	2021-02-05 15:15:17.682+08	915fe37c-0682-4390-8b9c-06edc2294532	2	t	f
5717	am	幅值	Output	\N	\N	\N	2	\N	\N	mv		2021-02-05 15:15:40.259+08	2021-02-05 15:15:40.259+08	915fe37c-0682-4390-8b9c-06edc2294532	2	t	f
5718	physicalvalue	应力	Output	\N			4	\N	\N	Kn		2021-02-05 15:16:06.181+08	2021-02-05 15:16:13.089+08	915fe37c-0682-4390-8b9c-06edc2294532	2	t	f
5719	physicalvalue	雨量	Output	\N			2	\N	\N	mm		2021-02-05 15:20:00.866+08	2021-02-05 15:20:04.195+08	d9456b27-5a08-40b3-bac7-967d99928997	2	t	f
5720	anglex	X轴位移	Output	\N			4	\N	\N	mm		2021-02-05 15:21:21.056+08	2021-02-05 15:21:37.222+08	99112554-2cb9-43fc-adef-6068fdb897a7	2	t	f
5730	outCount	出	Output	\N	\N	\N	\N	\N	\N	人		2021-02-23 13:13:14.933+08	2021-02-23 13:13:14.933+08	3d7d32da-438a-4e22-8879-eb3b7b2f98d2	1	t	f
5723	temperature	温度	Output	\N	\N	\N	2	\N	\N	℃		2021-02-09 14:17:54.338+08	2021-02-09 14:17:54.338+08	05a8211d-6e5e-4a0a-98d2-f84900bba1a5	2	t	f
5722	waterlevel	水位	Output	\N			4	\N	\N	m		2021-02-09 14:17:35.005+08	2021-02-09 14:17:59.51+08	05a8211d-6e5e-4a0a-98d2-f84900bba1a5	2	t	f
5724	x	X位置	Output	\N			4	\N	\N	mm		2021-02-09 17:31:30.435+08	2021-02-09 17:31:35.225+08	5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb	2	t	f
5725	y	Y位置	Output	\N	\N	\N	4	\N	\N	mm		2021-02-09 17:31:50.835+08	2021-02-09 17:31:50.835+08	5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb	2	t	f
5726	z	Z位置	Output	\N	\N	\N	4	\N	\N	mm		2021-02-09 17:32:03.557+08	2021-02-09 17:32:03.557+08	5fdff23a-1bda-42fc-bde0-fc7f6fe1b4cb	2	t	f
5727	length	距离	Output	\N	\N	\N	2	\N	\N	m		2021-02-20 15:02:27.358+08	2021-02-20 15:02:27.358+08	5b2e7aad-4a66-4797-8897-7eefc972e1f9	2	t	f
5728	temperature	温度	Output	\N			2	\N	\N	℃		2021-02-20 15:02:43.609+08	2021-02-20 15:02:49.104+08	5b2e7aad-4a66-4797-8897-7eefc972e1f9	2	t	f
5729	inCount	进	Output	\N	\N	\N	\N	\N	\N	人		2021-02-23 13:12:58.508+08	2021-02-23 13:12:58.508+08	3d7d32da-438a-4e22-8879-eb3b7b2f98d2	1	t	f
5731	stayCount	滞	Output	\N	\N	\N	\N	\N	\N	人		2021-02-23 13:13:33.741+08	2021-02-23 13:13:33.741+08	3d7d32da-438a-4e22-8879-eb3b7b2f98d2	1	t	f
5732	A_phase_volt	A项电压	Output	\N			1	\N	\N	V		2021-02-24 09:26:08.44+08	2021-02-24 10:28:08.403+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5751	B_power_factor	B相功率因数	Output	\N	\N	\N	1	\N	\N			2021-02-24 10:44:54.187+08	2021-02-24 10:44:54.187+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5733	B_phase_volt	B相电压	Output	\N			1	\N	\N	V		2021-02-24 09:27:38.927+08	2021-02-24 10:28:17.867+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5734	C_phase_volt	C相电压	Output	\N			1	\N	\N	V		2021-02-24 09:29:07.753+08	2021-02-24 10:28:26.551+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5738	A_phase_current	A相电流	Output	\N	\N	\N	2	\N	\N	A		2021-02-24 10:29:52.576+08	2021-02-24 10:29:52.576+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5739	B_phase_current	B项电流	Output	\N	\N	\N	2	\N	\N	A		2021-02-24 10:30:41.778+08	2021-02-24 10:30:41.778+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5740	C_phase_current	C相电流	Output	\N	\N	\N	2	\N	\N	A		2021-02-24 10:31:10.916+08	2021-02-24 10:31:10.916+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5741	total_phase_current	三项电流矢量和	Output	\N	\N	\N	2	\N	\N	A		2021-02-24 10:32:03.167+08	2021-02-24 10:32:03.167+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5742	A_active_power	A相有功功率	Output	\N			3	\N	\N	KW		2021-02-24 10:35:07.803+08	2021-02-24 10:35:21.549+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5743	B_active_power	B相有功功率	Output	\N			3	\N	\N	KW		2021-02-24 10:36:09.688+08	2021-02-24 10:37:56.365+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5744	C_active_power	C相有功功率	Output	\N	\N	\N	3	\N	\N	KW		2021-02-24 10:38:30.079+08	2021-02-24 10:38:30.079+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5745	total_active_power	总有功功率	Output	\N	\N	\N	3	\N	\N	KW		2021-02-24 10:39:14.911+08	2021-02-24 10:39:14.911+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5750	A_power_factor	A相功率因数	Output	\N	\N	\N	1	\N	\N			2021-02-24 10:44:24.262+08	2021-02-24 10:44:24.262+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5752	C_power_factor	C相功率因数	Output	\N	\N	\N	1	\N	\N			2021-02-24 10:45:19.64+08	2021-02-24 10:45:19.64+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5753	total_power_factor	总功率因数	Output	\N	\N	\N	1	\N	\N			2021-02-24 10:45:45.054+08	2021-02-24 10:45:45.054+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5754	frequency	频率	Output	\N	\N	\N	\N	\N	\N	HZ		2021-02-24 10:46:19.581+08	2021-02-24 10:46:19.581+08	e9332808-1b40-44af-9aeb-7c21643b1e80	1	t	f
5755	total_energy	总有功电能	Output	\N	\N	\N	2	\N	\N	KW		2021-02-24 10:49:12.821+08	2021-02-24 10:49:12.821+08	e9332808-1b40-44af-9aeb-7c21643b1e80	2	t	f
5756	anglex	x轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 13:50:07.995+08	2021-02-24 13:50:07.995+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5757	angley	y轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 13:50:35.251+08	2021-02-24 13:50:35.251+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5758	anglez	z轴角度	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 13:51:05.733+08	2021-02-24 13:51:05.733+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5759	temperature	温度	Output	\N	\N	\N	\N	\N	\N	℃		2021-02-24 14:29:19.624+08	2021-02-24 14:29:19.624+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5760	xDataint	x角度原始值	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 14:30:30.623+08	2021-02-24 14:30:30.623+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5761	yDataint	y角度原始值	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 14:31:02.598+08	2021-02-24 14:31:02.598+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5762	zDataint	z角度原始值	Output	\N	\N	\N	\N	\N	\N	°		2021-02-24 14:33:03.491+08	2021-02-24 14:33:03.491+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
5763	tempint	温度原始值	Output	\N	\N	\N	\N	\N	\N	℃		2021-02-24 14:34:18.693+08	2021-02-24 14:34:18.693+08	487f64fc-b23f-4c0e-ac96-c610a0ff7a08	2	t	f
1515	physicalvalue	荷载	Output	\N			4			kN		2018-01-23 14:53:15.414+08	2021-03-02 13:54:31.99+08	fd91ebd4-1201-4b5b-a5a0-e4636fb4ecbd	2	t	f
5582	physicalvalue	荷载	Output	\N			4	\N	\N	kN		2020-11-16 13:59:17.627+08	2021-03-02 13:55:01.104+08	3a1eee94-6d31-4cfe-a9cf-c2522302fa16	2	t	f
1531	physicalvalue	荷载	Output	\N			4			kN		2018-01-23 14:53:16+08	2021-03-02 13:58:47.888+08	1933583a-00cd-4d11-99f5-76e7dbeaa81c	2	t	f
2032	physicalvalue	荷载	Output	\N			4			kN		2018-03-26 15:38:00.781+08	2021-03-02 13:58:59.116+08	5c6f4070-1acc-4ac2-91d6-b7420f02a37b	2	t	f
\.


--
-- Name: CapabilityProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."CapabilityProperty_id_seq"', 5763, true);


--
-- Data for Name: CompanyCertification; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."CompanyCertification" (id, type, name, "licenseId", "licenseImg", status, "adminName", "cardId", "frontImg", "reverseImg", reason, contacts, address, mobile, email, "desc", "createdAt", "updatedAt", "userId") FROM stdin;
99c62079-61a2-43dd-8f21-56f2e5ee93c1	company	北京瑞芬星通科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.055+08	2017-08-18 16:06:34.055+08	\N
64b7da01-1590-4463-a876-dc5361a44ea3	company	南京葛南实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.207+08	2017-08-18 16:06:34.207+08	\N
75550b31-94ff-4cdb-8edf-58be82f14825	company	成都中科测控有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.228+08	2017-08-18 16:06:34.228+08	\N
dbb9f902-6164-48d4-9267-87212c2623b8	company	西安精准测控有限责任公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.261+08	2017-08-18 16:06:34.261+08	\N
456816c0-fc8b-4628-85f6-07462e341a55	company	邯郸市清胜电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.284+08	2017-08-18 16:06:34.284+08	\N
800df2a1-c8a1-4504-a23d-31e144a8eafb	company	北京长英新业数码科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.31+08	2017-08-18 16:06:34.31+08	\N
fcac06b9-62b0-46bd-95c2-d253fbed9ee2	company	上海蒙朗物联网科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.336+08	2017-08-18 16:06:34.336+08	\N
83c1b532-3aaa-4ea5-aee6-7568ee471625	company	北京岩信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.359+08	2017-08-18 16:06:34.359+08	\N
8a54c4d8-97a1-441a-ab18-748cf8c39fe4	company	浙江苍南仪表集团有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.381+08	2017-08-18 16:06:34.381+08	\N
91555045-65a7-43d9-b4a0-a9c3dfafba4e	company	广州乐享电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.405+08	2017-08-18 16:06:34.405+08	\N
b7ee52a4-a271-47f3-9841-d18e30bdea8c	company	深圳市科润美科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.439+08	2017-08-18 16:06:34.439+08	\N
0bebcb27-2c41-494a-81dd-39f393253d51	company	北京精波仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.459+08	2017-08-18 16:06:34.459+08	\N
3271fc87-bfce-4c92-891a-009ab472d9b6	company	北京东方中恒科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.479+08	2017-08-18 16:06:34.479+08	\N
2d1ef0ee-bd03-457f-832c-d67f15969760	company	深圳市中天智能系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.499+08	2017-08-18 16:06:34.499+08	\N
49040276-7c98-4926-a147-101d2f94d10f	company	河北先河环保科技股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.521+08	2017-08-18 16:06:34.521+08	\N
bbdd3430-f35d-433c-aa6a-125e3f7c6a96	company	无锡北微传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.542+08	2017-08-18 16:06:34.542+08	\N
ae3bcb8b-9c57-4128-924f-9a275a36cd2c	company	无锡慧联信息科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.561+08	2017-08-18 16:06:34.561+08	\N
a173ddc0-1e88-4dee-9db5-64f1a56d3d7e	company	福州创思万维信息技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.58+08	2017-08-18 16:06:34.58+08	\N
a19971cb-11f5-4f93-b19b-31b415328e8d	company	北京纳微时代科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.598+08	2017-08-18 16:06:34.598+08	\N
b8f113f9-c8ac-4e2b-840b-5ccec1c619f8	company	江西飞尚科技有限公司			authenticated					\N	\N	江西南昌	\N	\N	\N	2017-08-18 16:06:33.479+08	2017-08-18 16:06:33.479+08	\N
51fecf4f-f97b-442b-b93d-548f6779d778	company	上海直川电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.065+08	2017-08-18 16:06:34.065+08	\N
4e10d71a-e70a-4706-a390-dd655d6de5d7	company	厦门才茂通信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.36+08	2017-08-18 16:06:33.36+08	\N
c201dec9-ee9f-43e3-8a6d-fac13848903a	company	厦门四信通信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.393+08	2017-08-18 16:06:33.393+08	\N
18b5b1ad-a0bf-4cdc-b7d0-6fbffbe8ee10	company	深圳市宏电技术股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.43+08	2017-08-18 16:06:33.43+08	\N
2508c024-0274-4bcb-9724-307454d86f15	company	上海牧坤电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.458+08	2017-08-18 16:06:33.458+08	\N
44cd7a8a-4b58-46aa-99b0-b2a8c4cbc155	company	工讯科技(深圳)有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.504+08	2017-08-18 16:06:33.504+08	\N
5bec08df-d7c4-446a-b553-f86f5fefad0c	company	北京亚飞安智科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.529+08	2017-08-18 16:06:33.529+08	\N
e934c3dd-e1dc-4780-8537-af7418b0191b	company	基康仪器股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.551+08	2017-08-18 16:06:33.551+08	\N
0651a900-2b10-4df3-baf2-819a42b03318	company	麦克传感器股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.583+08	2017-08-18 16:06:33.583+08	\N
e1b6ea8c-209a-41ee-8004-cfe22f48b457	company	北京九纯健科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.597+08	2017-08-18 16:06:33.597+08	\N
5924784c-765f-447b-9c9e-92ae33cd1913	company	长沙金码高科技实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.612+08	2017-08-18 16:06:33.612+08	\N
a878573a-9380-4d40-90bd-dbdeb97ad11c	company	温州市华云仪器设备有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.626+08	2017-08-18 16:06:33.626+08	\N
f6c6ddf5-52d1-4cdf-bdd0-2e58d8fcfc92	company	上海云扬智能控制科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.639+08	2017-08-18 16:06:33.639+08	\N
16b55bb7-a58d-411e-80e9-38c8d785954a	company	上海盖勒克国际贸易有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.65+08	2017-08-18 16:06:33.65+08	\N
597603cf-2fd1-4e5d-b535-8e8f6bc242f7	company	北京飞拓信达激光技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.671+08	2017-08-18 16:06:33.671+08	\N
9bd7d189-dacc-4ba3-8445-5fa87f2873e0	company	济南博林自动化设备有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.682+08	2017-08-18 16:06:33.682+08	\N
40dcc623-c0b2-4823-81bd-8f7fdec905d4	company	深圳市信为科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.692+08	2017-08-18 16:06:33.692+08	\N
bc67a9df-a427-4051-95d7-b54efea7766c	company	深圳市欧赛龙科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.704+08	2017-08-18 16:06:33.704+08	\N
d6a0231c-f055-4bf5-bc49-7c4773e5f61c	company	北京替帝西交通科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.715+08	2017-08-18 16:06:33.715+08	\N
61f38983-bdda-4437-985a-02394d20641d	company	上海江晶翔电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.727+08	2017-08-18 16:06:33.727+08	\N
57b4c545-7976-4681-968d-e0453edd5bf4	company	武汉中科能慧科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.739+08	2017-08-18 16:06:33.739+08	\N
5f162854-ac8a-485e-b133-7898778767ab	company	承德热河克罗尼仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.755+08	2017-08-18 16:06:33.755+08	\N
66fbe8a1-4978-41c4-af06-1c29a36bbb60	company	深圳市华利奥电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.771+08	2017-08-18 16:06:33.771+08	\N
5dedacd5-4765-4533-ab53-e2eac621c1bd	company	上海清淼光电科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.782+08	2017-08-18 16:06:33.782+08	\N
d809418f-b16f-4758-b06d-0b21958adabd	company	重庆唐天科技有限责任公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.795+08	2017-08-18 16:06:33.795+08	\N
a7d7f0b9-8951-4bed-861a-93cef592a5aa	company	长沙亿拓土木工程监测仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:33.81+08	2017-08-18 16:06:33.81+08	\N
d0004fed-dd3d-4acb-876b-c02ebbec2acf	company	盐城恒嘉物联网科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.042+08	2017-08-18 16:06:34.042+08	\N
d2df94ff-b34f-4293-9e42-2aa3c4778165	company	南京基泰土木仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.076+08	2017-08-18 16:06:34.076+08	\N
662edc70-ff87-42d3-a0cc-98454dd2f4a4	company	上海司南卫星导航技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.085+08	2017-08-18 16:06:34.085+08	\N
f11d3b57-8208-4ef8-a621-9b9d616c5d3f	company	上海华测导航技术股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.096+08	2017-08-18 16:06:34.096+08	\N
0835a353-d5ec-4c0c-a7e1-8ac61ab4d6e1	company	上海天贺自动化仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.145+08	2017-08-18 16:06:34.145+08	\N
8f2ff4e4-f7df-4a7a-b09f-e7ec668c18e5	company	西安北瑞三元仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.164+08	2017-08-18 16:06:34.164+08	\N
ea8005eb-cc8f-41c9-a3a7-803163ca7ccf	company	上海辉格科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.187+08	2017-08-18 16:06:34.187+08	\N
ff64ccf7-eb3c-4ba1-b2d3-4d5a223ab36a	company	西安中铭电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.617+08	2017-08-18 16:06:34.617+08	\N
91ef2ab5-a5b5-4bd6-87a5-aeef97c9afe7	company	上海结成实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.638+08	2017-08-18 16:06:34.638+08	\N
a9a2299b-675b-41f1-82aa-9147ffac9622	company	北京华鉴科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.662+08	2017-08-18 16:06:34.662+08	\N
4406e759-2502-4571-9177-01db4a2e1f5a	company	深圳市日业电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.68+08	2017-08-18 16:06:34.68+08	\N
23142dd5-3edf-4339-8607-8a96e009aa0c	company	烟台凯米斯仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.71+08	2017-08-18 16:06:34.71+08	\N
ea7a17ff-a805-45a2-bcfe-e0e98c2119b0	company	深圳简测科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.728+08	2017-08-18 16:06:34.728+08	\N
42c89a2a-4dc9-4720-a345-69c86a26ec6f	company	上海誉煊电子技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.753+08	2017-08-18 16:06:34.753+08	\N
6026a87e-0107-4ba0-80f5-e32562ec9400	company	上海科旗仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.777+08	2017-08-18 16:06:34.777+08	\N
b555b986-881c-437f-b081-5a7bc4d6ecde	company	上海物联网有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.799+08	2017-08-18 16:06:34.799+08	\N
2c8a71a2-958c-49f9-9c59-623939771197	company	北京迪辉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.112+08	2017-08-18 16:06:34.112+08	\N
90f4ac6e-870e-4869-a61b-d285fa63ec47	company	上海华测创时测控科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.155+08	2017-08-18 16:06:34.155+08	\N
e4ad4af0-594b-4780-9633-7d4af9960778	company	中铁大桥科学研究院有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.176+08	2017-08-18 16:06:34.176+08	\N
67cd2ae1-aae0-4518-8af3-1b37fee1dd02	company	北京通联四方科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.198+08	2017-08-18 16:06:34.198+08	\N
7b34295c-0a97-4d1f-a594-526a19f0dd4f	company	上海拜安传感技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.218+08	2017-08-18 16:06:34.218+08	\N
97370f6e-e6f1-4942-a31e-3dd91efb0328	company	杭州迈煌科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.245+08	2017-08-18 16:06:34.245+08	\N
19f6eb6b-28e5-432d-816e-cb049d4a2ca4	company	武汉承拓电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.273+08	2017-08-18 16:06:34.273+08	\N
aab4a420-d895-4f4f-ab7e-8c68dc31062c	company	邯郸开发区清易电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.295+08	2017-08-18 16:06:34.295+08	\N
eea220f4-553b-43c2-97af-2aa64208defd	company	上海域信测控技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.324+08	2017-08-18 16:06:34.324+08	\N
3cd17789-bbb4-438f-b522-cf15bf7c19db	company	石家庄和嘉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.348+08	2017-08-18 16:06:34.348+08	\N
61fdbcf6-b829-431e-844d-6e4d083c43ff	company	河南库瑞克电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.371+08	2017-08-18 16:06:34.371+08	\N
ff3552f7-ef00-476c-8005-ce560577c50d	company	上海萨法尔信息工程有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.393+08	2017-08-18 16:06:34.393+08	\N
7fcc4e1c-9279-4bea-88c8-b83462d7df18	company	北京欧柏泰克测控系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.416+08	2017-08-18 16:06:34.416+08	\N
14220722-dbfb-4db3-a0dc-a9c695401532	company	上海麦伦仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.449+08	2017-08-18 16:06:34.449+08	\N
c7fceb96-46a2-4a1f-8a54-a12c63b1537e	company	北京慧博新锐科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.469+08	2017-08-18 16:06:34.469+08	\N
677dc4e9-9428-45de-adac-46dbd0750922	company	郑州易度传感技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.49+08	2017-08-18 16:06:34.49+08	\N
b7338b55-ea09-4b84-8059-d6c89d7c3f14	company	广州起重机械有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.509+08	2017-08-18 16:06:34.509+08	\N
fdbf6c14-95c7-4621-a23a-f07c52417c0a	company	深圳市七七星宇科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.532+08	2017-08-18 16:06:34.532+08	\N
40cd1440-bf75-4b45-ab28-12fe07358090	company	无锡迈科传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.551+08	2017-08-18 16:06:34.551+08	\N
582de198-f984-4ab4-a766-a303f78f4da9	company	上海集睿信息科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.57+08	2017-08-18 16:06:34.57+08	\N
73261520-9aa8-4309-b9c2-db6715f13937	company	南通中天精密仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.589+08	2017-08-18 16:06:34.589+08	\N
5c47345b-e0e6-46f6-84d1-32c86a7e9231	company	天津北斗星创科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.607+08	2017-08-18 16:06:34.607+08	\N
3c15bf43-e5b6-4cef-80ec-4e1e420af1a0	company	武汉富源飞科电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.627+08	2017-08-18 16:06:34.627+08	\N
36f3c479-2166-4dda-8ab0-c4b93aec0736	company	天津拓安科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.653+08	2017-08-18 16:06:34.653+08	\N
688d030e-ccfa-4014-b7d1-8490867789a3	company	上海沃陆电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.671+08	2017-08-18 16:06:34.671+08	\N
caf66f13-f035-4cb2-a701-92e7ff358715	company	北京智如泉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.7+08	2017-08-18 16:06:34.7+08	\N
23700276-659e-42cc-8c79-f50823e1b13f	company	湖南湘银河传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.719+08	2017-08-18 16:06:34.719+08	\N
9daaab37-8e1a-4efa-8ac7-3c93da295a90	company	锐研智华电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.739+08	2017-08-18 16:06:34.739+08	\N
ac66a802-e2ee-48cc-8a9e-b3e35ca07d67	company	北京星仪传感器技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.765+08	2017-08-18 16:06:34.765+08	\N
f9ea1efe-1070-47ef-b688-d31113d2c511	company	北京阿尔泰科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.787+08	2017-08-18 16:06:34.787+08	\N
abbf041d-172c-4086-93b4-31bb0e2e83a5	company	徕卡测量系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:06:34.811+08	2017-08-18 16:06:34.811+08	\N
74c38e2c-4971-46b3-bee6-8a51f116213a	company	厦门才茂通信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.143+08	2017-08-18 16:25:24.143+08	\N
005e2048-b7e8-4f7c-847f-e9918a66414d	company	工讯科技(深圳)有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.374+08	2017-08-18 16:25:24.374+08	\N
68250dfb-d57f-4895-9658-245ee80b2495	company	上海辉格科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.169+08	2017-08-18 16:25:25.169+08	\N
e3ca47a2-cd34-4d73-8fd7-18ce41c58460	company	北京九纯健科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.471+08	2017-08-18 16:25:24.471+08	\N
941c9c57-031c-4e4c-9a2b-5e544e387274	company	长沙金码高科技实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.484+08	2017-08-18 16:25:24.484+08	\N
8764ca24-be3e-4633-8dae-a8a100346a7c	company	温州市华云仪器设备有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.497+08	2017-08-18 16:25:24.497+08	\N
7ee73cad-16da-4534-8e6b-c7d587c2597f	company	上海盖勒克国际贸易有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.524+08	2017-08-18 16:25:24.524+08	\N
11834ff5-6bb0-446f-91d0-1e2e48153c90	company	北京飞拓信达激光技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.538+08	2017-08-18 16:25:24.538+08	\N
82be60e4-7d72-48fd-91ab-c8616819b103	company	济南博林自动化设备有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.663+08	2017-08-18 16:25:24.663+08	\N
3a8d9a71-ba47-4661-add4-fef01940e609	company	北京聚道合盛科技有限公司	********	http://images.theiota.cn/upload/companycert/upload_162216c2f3c1d37035e9440da5ca454c.png	authenticated	iota	130243196710242345	http://images.theiota.cn/upload/companycert/upload_36a30b5acf2c5b56024325d95355cc62.png	http://images.theiota.cn/upload/companycert/upload_4c7d24f5daa22391c9ddba5f51bd17c5.png	\N	\N	\N	\N	\N	\N	2017-10-30 18:17:53.222+08	2017-10-30 18:30:00.974+08	\N
db67f5e1-713c-48f9-82f3-c2e24093b97f	company	浙江富马仪表有限公司	4234324	http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/c1ce7c48-81c6-493f-816c-07e9d1248ced/companyCertification.png	authenticated	周周	321123233433434535	http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/896c0661-3ec5-4080-a702-8b3173900b34/companyCertification.png	http://images.theiota.cn/upload/companycert/10f6acf8-d569-4bb6-8f23-f97b1664d309/56f9ef4a-9edb-4704-99d4-ddc71cdd2d6a/companyCertification.png	  	\N	\N	\N	\N	\N	2017-12-11 16:20:17.803+08	2017-12-11 16:24:36.638+08	\N
25d5aac3-c08f-4378-9244-570cf8a1cb3e	company	千寻位置网络有限公司	43423423434	http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/000f724d-3af7-4359-9288-f723683c5fb9/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/1f9b3312-13d6-47e9-92c0-896d00192768/companyCertification.png	http://images.theiota.cn/upload/companycert/a971c084-cc83-4e41-80f6-c8de9df9b9d6/8b5b7dd2-d6c9-4709-ae0b-c518d2373640/companyCertification.png	   	\N	\N	\N	\N	\N	2017-12-15 10:08:41.914+08	2017-12-15 11:20:55.391+08	\N
c19672de-3563-44f5-9189-5ac688227e4c	company	北京昆仑海岸传感技术有限公司	123	http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/ca0c7e80-a462-4936-87be-f4166e90a3b1/companyCertification.png	authenticated	小小	320882199702021212	http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/02264413-4731-4cd1-bbd5-03507d3bf7b8/companyCertification.png	http://images.theiota.cn/upload/companycert/352a31c7-1e5e-4c52-85f6-2fa692d0fda9/32cb124d-569e-4991-940c-e9630f0058e5/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-20 16:24:23.296+08	2017-12-20 16:27:59.173+08	\N
05ef6403-9f87-4092-8b09-be1cfc2f9369	company	锦州阳光气象科技有限公司	1234	http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/fc93f80e-1aff-4452-9b7d-5894f2527674/companyCertification.png	authenticated	武庚	320882199205051212	http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/d1437fd8-f6bd-4624-9328-79b78b98d145/companyCertification.png	http://images.theiota.cn/upload/companycert/e54b85b0-151e-4b74-b360-a8ae65addd46/c09fe854-16d8-409d-908b-1002e2907f0e/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-03-30 09:34:24.331+08	2018-03-30 09:52:16.718+08	\N
87ffcc1e-399b-4921-b6c6-068de960a5ed	company	北京天海科科技发展有限公司	123	http://images.theiota.cn/upload/companycert/upload_326d578ec8d4167537eaecf620806ae8.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/upload_d3dc8375346e9538cea7f6b7001752ad.png	http://images.theiota.cn/upload/companycert/upload_2a47d3455da122ec76dbd93f2fd38ecf.png	\N	\N	\N	\N	\N	\N	2017-11-07 09:40:28.432+08	2017-11-07 09:40:52.318+08	\N
2978b1a9-8de8-4566-838d-04f7916573c1	company	深圳市智翔宇仪器设备有限公司	1234	http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/39be084d-1c43-4d6b-b2ae-debb3e9e195a/companyCertification.png	authenticated	吴先生	320885156312120212	http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/8dc386b9-9acf-45d1-ad8f-21f5e4de1e5f/companyCertification.png	http://images.theiota.cn/upload/companycert/d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe/1b22cd6b-c0a7-443f-8c48-84faebea261d/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-03-30 10:39:47.967+08	2018-03-30 10:45:50.112+08	\N
6069ac3a-b89b-49a3-9472-d2a4a093a479	company	北京赛斯尔自控工程有限公司	123	http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/3ce0855d-f131-4251-8ee3-49a38b603f19/companyCertification.png	authenticated	小红	320882199912341234	http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/9bbb239b-4c20-4d9b-ae6b-d861a1f2f3be/companyCertification.png	http://images.theiota.cn/upload/companycert/42ed9887-912b-4ce0-b062-3f3e0c22fa74/fa15717c-3310-4516-a869-4b5969295af9/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-20 16:26:22.364+08	2017-12-20 16:28:09.788+08	\N
e65ebdf0-aaff-4a5f-97a6-c69a5cafea9d	company	 杭州美仪自动化有限公司	123	http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/b9ccddb1-dff9-40b8-b34b-b3af8c145ac7/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/2976ea4b-0f56-4962-80ef-17b44c83674e/companyCertification.png	http://images.theiota.cn/upload/companycert/7e6cf67e-f12a-4d9f-addf-b551148dc2b4/f96f79ef-916c-4280-b186-8a8707f1ce59/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-17 11:40:21.415+08	2018-01-17 11:41:14.714+08	\N
13492746-695e-43ee-955f-56eda5ce677c	company	杭州美仪自动化有限公司	3423423	http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/61b273fa-fc5d-45b8-bcee-d2d53374d3c3/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/685bbed8-a02b-44b0-948d-c1aed3053d9f/companyCertification.png	http://images.theiota.cn/upload/companycert/095856ee-a9d4-4d58-9ecc-8e832e82ab8b/ca2b854f-28bb-486e-81a8-d9aeb0fed633/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-05 16:01:19.073+08	2018-01-05 16:02:16.25+08	\N
07d25988-cf05-433e-bcb0-eba6042997f1	company	济南仁硕电子科技有限公司	1234	http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/dc257aa2-3526-4f5e-8a7e-2ead9144b0bb/companyCertification.png	authenticated	阿毛	123456789876543	http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/4edd1e2b-a9b1-4aad-bb53-276e3fb71b0e/companyCertification.png	http://images.theiota.cn/upload/companycert/943913b0-23c7-43a9-a1d6-a7e59ed719d0/3412796c-a7b0-4907-8387-cd208101d397/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-09 11:03:50.638+08	2018-01-23 17:36:28.453+08	\N
e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	company	武汉华岩电子有限责任公司	123456	http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/1ca95e50-3aa4-4290-a093-1db85a57096f/companyCertification.png	authenticated	雷横	320882199504061218	http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/9cfca89a-42bc-49e9-9ec6-07b54173ea04/companyCertification.png	http://images.theiota.cn/upload/companycert/06551138-8f00-4269-9a6d-4e5fa26c71cc/4f61c5e0-ac21-49c3-82c6-dd8e2ce0154b/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-11-26 16:10:20.288+08	2018-11-26 16:10:28.378+08	\N
12f8ac3d-c8bf-4da6-aebd-cacf92e0a702	company	深圳市赛昂斯科技有限公司	1234	http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/cc3b0855-2328-4295-b90c-7efdd28a57ee/companyCertification.png	authenticated	李晨	320882198605281212	http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/22a06076-f2b1-4322-a02a-aed51a87f226/companyCertification.png	http://images.theiota.cn/upload/companycert/86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307/efc7b3ba-95c9-4813-8a42-cce187f34488/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-08 15:03:23.626+08	2018-01-08 15:04:32.064+08	\N
0a638ade-14a7-4e31-b102-953f910425a8	company	上海隼星传感技术有限公司	3423423	http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/0c4500a5-d922-47d6-8c1b-23053b26ea39/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/6cf6e953-45be-4957-b099-5b16c27d8050/companyCertification.png	http://images.theiota.cn/upload/companycert/8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12/d0186c9e-9bce-4f16-903d-ae35409dbab8/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-02-11 17:11:36.732+08	2018-02-12 09:15:22.308+08	\N
f26ae825-10ca-4d2d-a941-201f9f663eea	company	西安兴航测控科技有限公司	123	http://images.theiota.cn/upload/companycert/upload_3ec47a4f1e54468a63071014908694f2.png	authenticated	阿兰	123321199876665555	http://images.theiota.cn/upload/companycert/upload_403e7ac67245fda4a930695acd6d111f.png	http://images.theiota.cn/upload/companycert/upload_32b57ae88a4226edf187beab27f86711.png	\N	\N	\N	\N	\N	\N	2017-11-22 10:50:32.098+08	2017-11-22 10:52:55.603+08	\N
ef596a09-07a9-4dad-b937-090093da864b	company	北京光电所	345367564	http://images.theiota.cn/upload/companycert/upload_e13146657977af60596fffc42c87c493.png	authenticated	周良飞	321123233433434535	http://images.theiota.cn/upload/companycert/upload_fd979129d8e0c5c913a906d474cfd2d4.png	http://images.theiota.cn/upload/companycert/upload_4d7677cdca7c34dceca558979b53c9c5.png	\N	\N	\N	\N	\N	\N	2017-12-05 13:32:30.497+08	2017-12-05 13:33:01.855+08	\N
60ac81b6-ad47-402a-8527-9d9e815b886a	company	绵阳市湘蜀电子科技有限公司	1234	http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/708f1c1c-ccc9-44ab-8ca0-cd9b8895c025/companyCertification.png	authenticated	阿郎	320882199905281214	http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/30b6d12a-a1a4-43ab-96e3-d29d5eccf86d/companyCertification.png	http://images.theiota.cn/upload/companycert/dbfb6012-f2a3-4e35-b214-d014eba687e4/b687270d-42e0-46e4-87a2-b243ea84eec4/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-21 10:14:16.847+08	2017-12-21 10:19:00.993+08	\N
327eb1d2-7493-4c0b-b277-338edd768927	company	北京宝力马传感技术有限公司	123	http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/62226c82-20cc-40f2-a4eb-039ac6b16627/companyCertification.png	authenticated	孙小红	320882199905271234	http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/563c205b-51ca-44fc-8e8f-82738e03c67c/companyCertification.png	http://images.theiota.cn/upload/companycert/59924975-bf9a-49ef-8bb4-239e5eb716f4/932adc0b-b1fe-42fa-b65f-af5237a4abc7/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-20 16:17:43.397+08	2017-12-20 16:27:48.329+08	\N
e4ffaaab-d158-4e82-8c50-074c731d0f8d	company	北京杰成物联科技有限公司	3423423	http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/329eb249-b0c8-4572-9df3-8e00e8e60539/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/83359851-73de-45bc-a68d-859b9637079f/companyCertification.png	http://images.theiota.cn/upload/companycert/299decdb-5902-4e11-afcb-9e08926723fc/e190c33b-7afc-41f6-9533-e065d21e81bc/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-25 10:57:13.144+08	2017-12-25 11:08:17.194+08	\N
c787fe3f-81b1-443e-bcc2-f95da51465cd	company	深圳市永阳新能源科技有限公司	1234	http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/8bfdef01-46e5-4600-9fbf-7b9de46ecf9b/companyCertification.png	authenticated	阿毛	320882155512141214	http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/7fbbd7fb-85cd-4df2-9a26-7fd53e693c6b/companyCertification.png	http://images.theiota.cn/upload/companycert/414bf334-23bf-4e6d-aa00-230325261d81/4b32eea9-27b7-4d6b-8bf3-cf9c6d761737/companyCertification.png	\N	\N	\N	\N	\N	\N	2017-12-21 16:46:31.416+08	2017-12-21 16:48:10.405+08	\N
28384069-379b-427a-8293-4558a6fdff7c	company	厦门四信通信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.183+08	2017-08-18 16:25:24.183+08	\N
bb73aebb-0d8d-49b2-80d9-b2d909e304a1	company	深圳市宏电技术股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.227+08	2017-08-18 16:25:24.227+08	\N
2f5601db-b76e-4770-9af3-4f1825703d4d	company	上海牧坤电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.296+08	2017-08-18 16:25:24.296+08	\N
4f26e7d9-d058-4d09-86dd-8264282fa0b0	company	北京亚飞安智科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.424+08	2017-08-18 16:25:24.424+08	\N
b28ef84f-ad39-4657-8465-7968e542bdcd	company	基康仪器股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.443+08	2017-08-18 16:25:24.443+08	\N
06a180f1-88d0-4ef8-800f-c9175f55215d	company	麦克传感器股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.457+08	2017-08-18 16:25:24.457+08	\N
6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	company	深圳市信为科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.776+08	2017-08-18 16:25:24.776+08	\N
d07843e8-b696-4b7d-87ad-502f03b59ec0	company	深圳市欧赛龙科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.799+08	2017-08-18 16:25:24.799+08	\N
de8b006d-85f7-4436-9c98-4d3e741fcc91	company	北京替帝西交通科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.817+08	2017-08-18 16:25:24.817+08	\N
6c43ca35-bfee-404e-afa5-8cc4ca7fb92f	company	上海江晶翔电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.842+08	2017-08-18 16:25:24.842+08	\N
66a47769-cf2c-4708-bde1-48eae1617ade	company	武汉中科能慧科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.86+08	2017-08-18 16:25:24.86+08	\N
901a8f49-757a-40c6-9c1a-81c0ee8dc70b	company	承德热河克罗尼仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.879+08	2017-08-18 16:25:24.879+08	\N
047fe32b-391b-4e00-85df-440d3b30a0e0	company	深圳市华利奥电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.896+08	2017-08-18 16:25:24.896+08	\N
945dc90b-2494-4242-ac50-3068ac34de42	company	上海清淼光电科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.916+08	2017-08-18 16:25:24.916+08	\N
b1288075-7ee2-4ec7-a49f-efe9848eb49a	company	重庆唐天科技有限责任公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.935+08	2017-08-18 16:25:24.935+08	\N
f212e468-a42c-4a63-bdc8-93e5e9540fde	company	长沙亿拓土木工程监测仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.966+08	2017-08-18 16:25:24.966+08	\N
17f054b5-a0bc-417d-98cc-cd33881d5f86	company	盐城恒嘉物联网科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.984+08	2017-08-18 16:25:24.984+08	\N
19a42196-a096-4d6a-84d1-67d7c3030605	company	北京瑞芬星通科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.002+08	2017-08-18 16:25:25.002+08	\N
bdebe97d-391f-4db6-bc26-a7f3fd6ac130	company	上海直川电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.017+08	2017-08-18 16:25:25.017+08	\N
a4ea8d4c-a663-48d2-a163-47085a402235	company	南京基泰土木仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.033+08	2017-08-18 16:25:25.033+08	\N
a53ff2c9-fe4b-40b2-9384-d238618466ce	company	上海司南卫星导航技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.045+08	2017-08-18 16:25:25.045+08	\N
b7991d25-58bc-44e2-a4aa-ba40bd21e595	company	上海华测导航技术股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.059+08	2017-08-18 16:25:25.059+08	\N
0c9fca00-5fd3-43ef-8264-09333066ff13	company	北京迪辉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.085+08	2017-08-18 16:25:25.085+08	\N
abe1595a-5e65-4b76-9b3b-b77ea9626c16	company	上海天贺自动化仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.106+08	2017-08-18 16:25:25.106+08	\N
7c4ecd66-e051-42e2-87c7-2df59811c9e3	company	上海华测创时测控科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.12+08	2017-08-18 16:25:25.12+08	\N
4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907	company	西安北瑞三元仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.13+08	2017-08-18 16:25:25.13+08	\N
7f8a3e61-0645-4b79-b376-92677a049f62	company	中铁大桥科学研究院有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.158+08	2017-08-18 16:25:25.158+08	\N
4f3d93c3-5322-4bef-b358-e98b1589874d	company	南京葛南实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.193+08	2017-08-18 16:25:25.193+08	\N
3b5bd980-85d1-47f2-a11f-ddb81a776f3c	company	成都中科测控有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.213+08	2017-08-18 16:25:25.213+08	\N
3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4	company	西安精准测控有限责任公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.242+08	2017-08-18 16:25:25.242+08	\N
ddff4e34-2418-447f-b236-f346fd2beffe	company	邯郸市清胜电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.264+08	2017-08-18 16:25:25.264+08	\N
a1132fa4-352a-4b5e-b0e9-d2d4d0df290e	company	北京长英新业数码科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.284+08	2017-08-18 16:25:25.284+08	\N
a74b3366-a96b-4ac5-90c6-e07851706a72	company	上海蒙朗物联网科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.306+08	2017-08-18 16:25:25.306+08	\N
3f3e4806-08db-428f-9b63-a18f64c64081	company	北京岩信科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.326+08	2017-08-18 16:25:25.326+08	\N
90ff2cb3-6e2f-4da8-a666-8c59808d2b1b	company	浙江苍南仪表集团有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.345+08	2017-08-18 16:25:25.345+08	\N
f2991a3d-1f9e-4b1b-a5c5-0b1996702fd8	company	广州乐享电子有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.368+08	2017-08-18 16:25:25.368+08	\N
2bbaee41-1980-459c-8053-311857717ee9	company	深圳市科润美科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.392+08	2017-08-18 16:25:25.392+08	\N
45db210e-6095-414d-8ba7-4cf87583d293	company	北京精波仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.42+08	2017-08-18 16:25:25.42+08	\N
d333c854-fe3b-4c2a-80d1-6ad0360dcbd6	company	北京东方中恒科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.443+08	2017-08-18 16:25:25.443+08	\N
1ca185e6-113a-46a4-94d2-e3e967323ae9	company	深圳市中天智能系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.464+08	2017-08-18 16:25:25.464+08	\N
6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d	company	河北先河环保科技股份有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.487+08	2017-08-18 16:25:25.487+08	\N
4cd4dbf8-c29d-429f-8128-50313b373292	company	无锡慧联信息科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.531+08	2017-08-18 16:25:25.531+08	\N
a788cc98-2cdf-451a-ad80-d370c161e448	company	福州创思万维信息技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.558+08	2017-08-18 16:25:25.558+08	\N
485c9ff0-3616-4b61-a3a0-eab1e99472dd	company	北京纳微时代科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.577+08	2017-08-18 16:25:25.577+08	\N
db1d3a8b-3193-4d57-a9c2-eda69102115c	company	西安中铭电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.6+08	2017-08-18 16:25:25.6+08	\N
d16cdfd2-9b57-4e88-9c4d-462a066f8642	company	上海结成实业有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.623+08	2017-08-18 16:25:25.623+08	\N
6960c889-9031-47f4-98f7-e80cfe3ecdb4	company	北京华鉴科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.648+08	2017-08-18 16:25:25.648+08	\N
17b1bddd-ba2c-4741-bc3e-47dabe99edfa	company	深圳市日业电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.668+08	2017-08-18 16:25:25.668+08	\N
857d131f-a356-42fe-b772-25f1efbc8f56	company	烟台凯米斯仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.685+08	2017-08-18 16:25:25.685+08	\N
b9950ec7-4c09-467c-a9dd-092f2a6d2b28	company	深圳简测科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.704+08	2017-08-18 16:25:25.704+08	\N
7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	company	上海誉煊电子技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.728+08	2017-08-18 16:25:25.728+08	\N
2709d56e-f4c3-49c5-8dc4-ad41a2c31275	company	上海科旗仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.751+08	2017-08-18 16:25:25.751+08	\N
bbfeac1a-1c70-45d1-9180-d63be822d7f2	company	上海物联网有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.769+08	2017-08-18 16:25:25.769+08	\N
ff833378-60d7-444b-84a6-b01df07bd336	company	北京通联四方科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.18+08	2017-08-18 16:25:25.18+08	\N
2169a008-9684-4625-b3ba-389b70c17ad1	company	上海拜安传感技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.203+08	2017-08-18 16:25:25.203+08	\N
03230a76-0bdd-4049-bbfc-e3dee78c4b6e	company	杭州迈煌科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.227+08	2017-08-18 16:25:25.227+08	\N
5f2040a8-8da6-4f79-bcb6-9b2480beea45	company	武汉承拓电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.253+08	2017-08-18 16:25:25.253+08	\N
7d219f94-2da6-4390-9a2f-828bdaf2519e	company	邯郸开发区清易电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.274+08	2017-08-18 16:25:25.274+08	\N
f7eb4ae6-ce4d-4013-ab1e-5a49e96718eb	company	上海域信测控技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.296+08	2017-08-18 16:25:25.296+08	\N
c51f8de0-c442-4529-bbae-fe7df077f84e	company	石家庄和嘉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.316+08	2017-08-18 16:25:25.316+08	\N
ff2281cb-1d19-4ad7-a65d-f9f7f8ffe664	company	河南库瑞克电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.336+08	2017-08-18 16:25:25.336+08	\N
ffc05365-a153-47ec-a7d9-d13bd3cf93d1	company	上海萨法尔信息工程有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.355+08	2017-08-18 16:25:25.355+08	\N
f755e725-5da2-4b87-b08d-d65d8baf825c	company	北京欧柏泰克测控系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.38+08	2017-08-18 16:25:25.38+08	\N
27a4762a-7072-4c30-b8a6-0a95b580755c	company	上海麦伦仪表有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.406+08	2017-08-18 16:25:25.406+08	\N
99a06fa1-997b-4272-ab56-540c76cebfb4	company	北京慧博新锐科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.431+08	2017-08-18 16:25:25.431+08	\N
d49373e3-515f-40be-b462-0eba8793f89c	company	郑州易度传感技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.454+08	2017-08-18 16:25:25.454+08	\N
52b36a13-6a6b-47f0-83db-afdc362967ff	company	广州起重机械有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.475+08	2017-08-18 16:25:25.475+08	\N
5937e415-c322-42e4-bddb-3c509b8ac82e	company	深圳市七七星宇科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.496+08	2017-08-18 16:25:25.496+08	\N
80c18b02-bea5-4076-b124-30d8f067dc78	company	无锡迈科传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.52+08	2017-08-18 16:25:25.52+08	\N
17f1fbd7-aae7-4114-8811-c4d078b171b3	company	上海集睿信息科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.544+08	2017-08-18 16:25:25.544+08	\N
dd99d0cd-27ad-42ff-869e-e00c51c5c62a	company	南通中天精密仪器有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.568+08	2017-08-18 16:25:25.568+08	\N
a5f361c3-c76c-40ff-9912-28ab7f6721e2	company	天津北斗星创科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.588+08	2017-08-18 16:25:25.588+08	\N
43808b4c-bc54-40c6-91ad-520570c3c0da	company	武汉富源飞科电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.611+08	2017-08-18 16:25:25.611+08	\N
7807e21f-ca6b-4288-bd9e-55308d129f30	company	天津拓安科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.639+08	2017-08-18 16:25:25.639+08	\N
f37c3e11-9862-4da5-b127-35b5efe162dd	company	上海沃陆电气有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.658+08	2017-08-18 16:25:25.658+08	\N
6327bc29-4615-4eda-aa87-f534d179265f	company	北京智如泉科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.677+08	2017-08-18 16:25:25.677+08	\N
1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	company	湖南湘银河传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.695+08	2017-08-18 16:25:25.695+08	\N
82af10d4-f6f0-4e09-84ce-7053d4b42940	company	锐研智华电子科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.716+08	2017-08-18 16:25:25.716+08	\N
4e512f12-08de-4514-8da9-73b4b6c587f3	company	北京星仪传感器技术有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.74+08	2017-08-18 16:25:25.74+08	\N
f6f7a405-3c13-4d2b-b6e4-0f071c43ba84	company	北京阿尔泰科技发展有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.76+08	2017-08-18 16:25:25.76+08	\N
cde1d1ef-6811-4c85-b365-c8dc7be87675	company	徕卡测量系统有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.781+08	2017-08-18 16:25:25.781+08	\N
509f878b-22a0-470a-81c5-b802c4b1e5b5	company	天津佳建科技有限公司	1234512345	http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/dccc9941-ad73-4d39-a115-d0a7340a0c1c/companyCertification.png	authenticated	阿兰	123412341234123412	http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/962b36fe-559a-4ee1-8703-2a13a2b13a6b/companyCertification.png	http://images.theiota.cn/upload/companycert/abc9e573-4426-4eee-b858-7d309e181f99/fa0648e8-cac0-4431-9b00-ef2386936a24/companyCertification.png	公司名称\n	\N	\N	\N	\N	\N	2018-03-13 23:56:56.5+08	2018-03-29 17:58:04.975+08	\N
2249ba53-148c-4f52-a223-5baccdb2b356	company	武汉宇佳科技有限公司	1234	http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/5857fa1c-41c2-4de9-8bc7-d6dd7c2b38ad/companyCertification.png	authenticated	刘邦	123456789123456	http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/16d1bb8b-8920-4e77-a3d3-c7b5680985a7/companyCertification.png	http://images.theiota.cn/upload/companycert/83c80841-82ec-434a-835a-9907f3b225a5/f3e54040-5e11-4ff1-88cf-cb08af11da87/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-09 14:03:01.061+08	2018-03-29 17:58:32.475+08	\N
a7daadbf-4efe-4bfd-a3a7-d162263502dd	company	江苏哲勤科技有限公司	1234	http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/0c4be8af-76d5-4e2e-ba2e-ee3eae746291/companyCertification.png	authenticated	阿考	123456789789456	http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/d2b97154-debb-410e-b89f-a56dcf15db6a/companyCertification.png	http://images.theiota.cn/upload/companycert/ca665fe1-0d75-4314-9b41-9eb59507d940/94f77500-626e-4aeb-a071-9088de0e5270/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-09 11:28:10.643+08	2018-03-29 17:58:17.561+08	\N
82e912a1-10ca-41af-ad56-79cc088ef375	company	山东仁科测控技术有限公司	3423423	http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/6331f5f9-6fc1-4226-aea3-8cdf18fc1c5b/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/010a4e65-3eba-4dfa-86e3-7bd163017a53/companyCertification.png	http://images.theiota.cn/upload/companycert/4a675a7d-e35c-478e-b8f1-ae01437c8281/a5d6b547-2467-4cea-bf29-55ee6a29f634/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-18 17:30:18.216+08	2018-01-18 17:31:02.466+08	\N
eea84701-c78b-4752-96fa-75ea7dd649d4	company	河北路凯铁路有限公司	1234	http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/06f75941-2d0a-43ce-a0be-620bf9669207/companyCertification.png	authenticated	戴立忍	320882199209091	http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/3df33417-2c3e-4f73-8c82-84dd3435dd1d/companyCertification.png	http://images.theiota.cn/upload/companycert/eb23c67c-17aa-4909-8bba-8119130ed7f8/80d84d37-ca1c-4626-9efc-e221dadc86ad/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-03-09 19:05:05.822+08	2018-03-11 16:01:16.308+08	\N
bf8bba7f-0800-4785-ae97-c4698b720c38	company	山东仁科测控技术有限公司	123	http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/2c968f02-874a-4c6a-ba1d-dfce3aead59e/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/c7d92b85-958c-4584-87c9-fe54fb3ed64e/companyCertification.png	http://images.theiota.cn/upload/companycert/c526123b-28bf-4a01-9c10-c630b8d0dec4/ff32755e-340f-486d-a368-ad48068094ff/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-23 09:33:43.215+08	2018-01-23 17:33:51.179+08	\N
dec876d4-09b0-4aa0-b12b-bcb3ba8f295a	company	上海搜博实业有限公司	3423423	http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/d0b4b950-fae1-4e07-8054-34c931f25b25/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/e3f83078-2d5f-4915-952b-0c8a04d8bb4a/companyCertification.png	http://images.theiota.cn/upload/companycert/76ba35a6-d733-40eb-b290-6538f9e9c77f/3c841999-9743-494b-b869-dc66c6def236/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-01-30 17:39:41.548+08	2018-01-30 17:40:17.979+08	\N
c016deb0-edb2-4cb3-93ad-3150c8db04ac	company	杭州房安网络科技有限公司	3423423	http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/650917c7-52f7-4b7a-8913-c1441002e6bc/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/a2c8faf1-f24c-4e5b-8342-d080f08872d4/companyCertification.png	http://images.theiota.cn/upload/companycert/0be11993-6e55-415e-b770-792f29f98f9f/96e28651-c1ad-4234-a731-741373893539/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-05-29 16:19:02.278+08	2018-05-29 16:29:18.134+08	\N
db1e176b-c3c8-47b1-808b-7e33570add81	company	上海融频电子科技有限公司	3423423	http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/97a38b08-6085-4d36-af1a-87b953daf6a3/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/7296fc34-89d9-4303-a4b6-7ecdf8426cc4/companyCertification.png	http://images.theiota.cn/upload/companycert/ef70d798-67c0-4772-9639-3d9b805f5941/71a2a527-ea87-412d-95c2-cc5a0f3e99ee/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-02-05 14:52:12.138+08	2018-02-05 14:55:30.902+08	\N
6e220b49-d187-44a7-b1bb-6e494763021d	company	武汉云传通测科技有限公司	1234	http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/80cbd0b9-c850-4a11-abff-02883e720f3c/companyCertification.png	authenticated	云传通	320882199505051212	http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/bfb240b6-575b-4d00-92f7-f4987078241d/companyCertification.png	http://images.theiota.cn/upload/companycert/b8127c53-f372-4ef5-bad6-8520cde9e94f/70519581-dc77-40a4-b53a-3922c3bd59d2/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-02-09 13:56:41.749+08	2018-03-29 17:58:23.261+08	\N
003a11c4-85db-4f09-a55a-02b1144840ad	company	溧阳市超源仪器厂	3423423	http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/3ad5d1fb-b570-4a68-b475-1c3504c6e6fa/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/c44a43b9-8ced-4a64-be1c-099beb8a298d/companyCertification.png	http://images.theiota.cn/upload/companycert/5b0d5739-36a1-4e88-a838-7ac252171dc6/3d5e9db1-1823-447f-9e94-673a8b575015/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-02-11 17:17:25.981+08	2018-02-12 09:15:32.196+08	\N
cfe75451-de08-456e-a858-16ed82f63574	company	深圳市米朗科技有限公司	3423423	http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/fbd15f32-e257-4d67-bc13-bd796f439969/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/6e21a3ac-67c8-4b31-930b-dfee790f11a3/companyCertification.png	http://images.theiota.cn/upload/companycert/e39ef519-bfb9-4a75-9cd1-fb18e5e29559/8ffd9454-ded7-4c42-a72b-89298107a1ef/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-02-28 16:03:31.764+08	2018-02-28 16:11:36.198+08	\N
71110a7c-82f3-4a69-ba1f-179018d3fc1b	company	国电南京自动化股份有限公司	1234	http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/214cbc42-27a4-4135-81c0-4f462032db94/companyCertification.png	authenticated	武庚	320882199802141218	http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/17a17efc-291f-42ab-bef3-44fe84154dae/companyCertification.png	http://images.theiota.cn/upload/companycert/6d7887f9-566b-4a52-a1d6-cba8c439173a/e617e412-45b5-43db-a4cb-1521c4c84641/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-03-14 14:46:59.807+08	2018-03-14 16:26:24.84+08	\N
69ff6b39-2d8c-443e-939d-f6c087588d22	company	常州金土木工程仪器有限公司	1234	http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/d381fb1e-f0d5-4bab-8997-009522477110/companyCertification.png	authenticated	李雷	320882199505051213	http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/2e77a3fc-b82b-4146-8ab3-664b66291388/companyCertification.png	http://images.theiota.cn/upload/companycert/d5fa5193-b237-4a60-b82a-165c033e2596/9fab7b97-bbeb-4da4-954c-a9c9cf86ed7e/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-03-14 14:53:56.313+08	2018-03-14 16:26:17.335+08	\N
cfd55b15-fe53-4c95-87a6-daddbc4fb638	company	北京安信卓越信息科技有限公司	00	http://images.theiota.cn/upload/companycert/upload_8f051e6e3a41032e158a915b21a8663f.png	authenticated	00	000000000000000	http://images.theiota.cn/upload/companycert/upload_f70d32ba7bd3d9d8eb65d65a81eb73ad.png	http://images.theiota.cn/upload/companycert/upload_1130bfc838b88d4980241a30aba0775c.png	  	\N	\N	\N	\N	\N	2017-08-16 22:24:26.461+08	2018-01-08 14:53:51.804+08	\N
48556475-af79-4323-bab2-38274bcb8563	company	深圳市莫尼特仪器设备有限公司	1234	http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/412ceb38-1019-4395-b49a-3efb9edcba42/companyCertification.png	authenticated	刘平	320882012312341215	http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/869828fb-8997-42d5-a1b2-44cf9199cb21/companyCertification.png	http://images.theiota.cn/upload/companycert/ddbc4ad1-b448-4bed-82b8-f33fb5264f35/d52873eb-04c2-49aa-b224-1a8449825ff4/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-04-04 16:42:36.103+08	2018-04-04 16:51:02.232+08	\N
78f556c0-d435-40e7-aece-08b652e146f0	company	常州比天智能科技有限公司	1.0	http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/0a2589a9-299c-4def-b1d2-d5e4db844115/companyCertification.png	authenticated	徐宁	320882199504061218	http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/eb37d273-a98b-4b74-addb-d66defc085e0/companyCertification.png	http://images.theiota.cn/upload/companycert/cb9f2b84-b356-4721-b75e-da2a575068f4/306b1133-f9cb-4d91-ae83-3d288f567377/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-20 17:27:49.235+08	2018-09-20 17:31:08.57+08	\N
753cecef-e0f0-47e7-8336-915f8d09bc74	company	北京中电华劳科技有限公司	123	http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/96cec3c1-8bfe-4985-96fd-f8bb4b77a0bd/companyCertification.png	authenticated	阿兰	321123233433434535	http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/7ffdc81c-150a-4330-926a-78844880d6ff/companyCertification.png	http://images.theiota.cn/upload/companycert/d3ab1979-3439-47ba-aa98-82b61a9d6260/fe019e55-2a0c-4964-bc11-7544c1035692/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-05-07 11:26:59.831+08	2018-05-07 11:30:40.801+08	\N
090ff792-d47f-4b12-b31e-71402175f9b0	company	北京飞超风速控制仪器有限责任公司	1234	http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/91373917-9bf6-4118-8ffe-1be6a05a7e9b/companyCertification.png	authenticated	范冰冰	123456789123456789	http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/14f6dd25-319e-4bac-bd17-b045852f5ca5/companyCertification.png	http://images.theiota.cn/upload/companycert/1a285b38-8605-48ec-ba06-16f5942bee81/c3e1bb8d-49fb-4b86-87b1-1eb4b9b72e03/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-05-28 11:49:14.974+08	2018-05-28 15:04:37.176+08	\N
461483be-7de4-49d4-86a6-fa6ac432d4fd	company	tester	1234	http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/9edacf5f-3af4-4e9a-a19b-6bb5aa79e402/companyCertification.png	authenticated	阿兰	320882012312341215	http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/349eb3a6-4cf0-4954-aa6b-84e97e3baad4/companyCertification.png	http://images.theiota.cn/upload/companycert/1b2d8739-627e-4b7d-9480-3eee6e9396fe/90e03791-0e28-4a6a-8c2e-07dfe6db30b4/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-07-26 15:12:33.519+08	2018-07-26 15:12:52.045+08	\N
8dbfb926-2572-4bb5-bab4-96aba1ea8589	company	iota	111111	http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/37f11dca-6aa0-49b9-9ee0-26b17b45b4dc/companyCertification.png	authenticated	w	111111111111111	http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/fb6037e4-935b-473c-80fe-3a0ec09fe1c6/companyCertification.png	http://images.theiota.cn/upload/companycert/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/61f61431-4712-4dbc-b83f-7741af8ecf54/companyCertification.png	\N	王	南京	13813084239	wang.liang@theiota.cn	测试	2017-12-06 18:54:44.567+08	2019-04-26 16:23:57.821+08	\N
b2cdf84b-2f7e-4c47-9132-a579b62a3926	company	新会康宇测控仪器仪表工程有限公司	1234	http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/a61460bc-ce5e-45a3-84a3-e86b8eedf977/companyCertification.png	authenticated	宋江	320882012312341215	http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/177f6c88-e64d-4912-9a10-04a032e4bc2a/companyCertification.png	http://images.theiota.cn/upload/companycert/ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c/09fd6c23-de1e-443e-bf41-18cc57b88b84/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-05-29 11:33:40.443+08	2018-05-29 11:34:00.256+08	\N
e4d74414-07db-4754-a1fd-efb51f257864	company	长沙市三智电子科技有限公司	1234	http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/06519fab-30b2-405d-86d5-771a5908d8c1/companyCertification.png	authenticated	卢俊义	320882012312341215	http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/dd16020e-fdb3-40c0-bc7f-02707251ce70/companyCertification.png	http://images.theiota.cn/upload/companycert/abe57a42-14ab-448b-b96f-14875e86ca40/84347de2-99e8-4a7f-9918-1a0460976ec6/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-05-30 11:12:50.624+08	2018-05-30 11:39:45.64+08	\N
631adf16-ff91-4949-8e6f-e13680319751	company	湖南三智盈科传感器技术有限公司	123456	http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/ad21bcad-c870-4987-997c-2c6692e8c10b/companyCertification.png	authenticated	阮小二	320882199504061218	http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/67dbd942-ae2f-4db9-96c6-0cb53c8bcea3/companyCertification.png	http://images.theiota.cn/upload/companycert/fa5611e2-d726-4e8f-a22c-632ef7ab7148/18e09046-5901-4339-96d7-0d600ef1b53c/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-12-18 10:06:21.57+08	2018-12-18 10:06:29.727+08	\N
9f0e639f-37d3-4661-bf82-808a6291df48	company	上海协堡电子有限公司	1234	http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/725990fe-cea5-47a3-8040-e72372416046/companyCertification.png	authenticated	吴用	320882012312341215	http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/56ec3331-a8bd-41b9-a8ae-7bab0467ac3d/companyCertification.png	http://images.theiota.cn/upload/companycert/9ea59fd2-e55b-4853-a447-0911d3b8b8dd/d9d15834-b3aa-455c-ba28-31a44ef94555/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-07 14:02:24.669+08	2018-06-07 14:02:33.96+08	\N
6a7e732d-908a-424d-a55c-6fe5b860e266	company	北京齐开科技有限公司	1234	http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/c82b03a2-07ad-4a76-88c3-9b18352ef1d3/companyCertification.png	authenticated	林冲	320882199502141218	http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/958b6e30-1581-4cdd-876e-0e68f61eec5e/companyCertification.png	http://images.theiota.cn/upload/companycert/36b70d6d-c974-4742-9257-b555027d36cd/a5e75b59-80ce-4fcc-a73e-54b18a686624/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-11 14:57:48.815+08	2018-06-11 14:57:58.139+08	\N
ef17730e-9732-4152-9aae-d996160e4d7e	company	建岩（上海）信息科技有限公司	12345	http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/8b03f4a8-d6fc-41d4-a6b9-2aa7af193bad/companyCertification.png	authenticated	公孙胜	320882199605061215	http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/35b141b6-2657-4f79-bcd6-0a845e568220/companyCertification.png	http://images.theiota.cn/upload/companycert/49441bc3-dbb9-4880-b691-70b9c5644a9d/f23a41da-4a3f-4dea-a5ee-e595bd295007/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-21 09:36:49.815+08	2018-06-21 09:37:20.612+08	\N
40f627af-dfd1-4cd2-9921-110d47d4461c	company	湖南聚创路桥科技有限公司	12345	http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/33b8cb78-a81b-4542-8d61-e6797cba4713/companyCertification.png	authenticated	秦明	320882012312341215	http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/aa6198b8-c3df-4690-8a25-1b55ef7f8df4/companyCertification.png	http://images.theiota.cn/upload/companycert/a8df2f4a-3e2f-49f5-b1e2-b866493ade49/6bc9d356-ae8a-4556-b6c8-9a7cc06afb88/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-19 09:31:11.721+08	2018-06-19 09:31:22.006+08	\N
b2f45a02-4a2f-49df-87e8-8e9b68269ebd	company	无锡北微传感科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:25.509+08	2017-08-18 16:25:25.509+08	\N
c97bb430-7074-4413-a0d1-020b7af60aa7	company	湖南国瑞仪器有限公司	2212	http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/bfe31f7f-8224-41ca-a798-abb97107aa58/companyCertification.png	authenticated	国瑞	320882199502141218	http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/d6d96d8b-25ba-47bf-9778-1fdd584253ca/companyCertification.png	http://images.theiota.cn/upload/companycert/8e1adf17-9018-4c44-bc9b-ff70bcca029a/3eb2a409-ac6c-432b-a225-6645776a0b43/companyCertification.png	\N	\N	湖南	\N	\N	\N	2017-12-20 14:14:40.855+08	2017-12-20 14:17:29.636+08	\N
c41ab05c-aa3d-4d60-9dc3-217323b6e9c7	company	上海云扬智能控制科技有限公司			authenticated					\N	\N	\N	\N	\N	\N	2017-08-18 16:25:24.51+08	2017-08-18 16:25:24.51+08	\N
97778045-09eb-4db5-8ee0-8f2607e6248f	company	深圳迪振恩科技有限公司	1234	http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/bf4793d2-44ba-4654-8eb0-fe95b4d3b826/companyCertification.png	authenticated	呼延灼	320882012312341215	http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/b6778772-f866-4fed-a90e-f2a9188bb8a5/companyCertification.png	http://images.theiota.cn/upload/companycert/594398cf-af7f-421b-9b42-1cca38c79620/7708f724-28aa-4d37-896e-cf79b51f2d3f/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-20 10:14:02.556+08	2018-06-20 10:15:18.13+08	\N
d63e78b1-32cf-4aca-a896-5c83ebce7b8d	company	北京华康科技有限公司	1234	http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/0337d7a4-84c8-49c0-acbf-cb711d53a58a/companyCertification.png	authenticated	花荣	320882012312341215	http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/b212e584-e1ff-438c-acd1-0a4eb5c13ae2/companyCertification.png	http://images.theiota.cn/upload/companycert/7e13f613-ffd9-4865-800a-0ca768ab2a28/d2d332d6-8051-4fbb-8360-d407140cb770/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-22 16:21:26.589+08	2018-06-22 16:24:24.476+08	\N
a4159319-ff56-456e-9cd0-1b2bc9ec6ede	company	上海盛迪传感技术有限公司	1234	http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/3f347a59-746f-4b30-8b6d-e355bf8a04f7/companyCertification.png	authenticated	关胜	320882012312341215	http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/a724abbd-8035-4657-8d40-60af37f07bd1/companyCertification.png	http://images.theiota.cn/upload/companycert/6708aba6-65f9-4ec3-bfc2-227628154ff3/6067e8dc-866f-4bcb-8835-0ead0683c585/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-25 15:16:38.678+08	2018-06-25 15:16:47.899+08	\N
05617d93-ff63-40e6-8d83-86ec25e6728c	company	溧阳市伟涵仪器厂	1234	http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/4923c34e-7eba-4812-b495-7a2a493c55b6/companyCertification.png	authenticated	柴进	320882012312341215	http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/ae4bddc5-db2e-4331-beea-52715d619cfd/companyCertification.png	http://images.theiota.cn/upload/companycert/dd7cacfc-a0f8-4d19-86b1-db4c80849dd5/117c514c-d5a3-42fa-ac10-2dc7af887512/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-06-27 13:54:17.144+08	2018-06-27 13:54:24.158+08	\N
7d8a96cd-b3b1-43a6-8ad4-69466c74da0b	company	南京铭奥仪器设备有限公司	3423423	http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/836b3ec4-620d-4fd9-850d-8cacf9e80392/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/eae14e61-9a32-4ef8-a75d-679a264f01d0/companyCertification.png	http://images.theiota.cn/upload/companycert/e09d681f-e39b-4915-8e87-af54bdd0e815/327708e2-aee9-4828-9e89-ed9e223fca59/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-07-13 16:29:06.193+08	2018-07-13 16:29:42.817+08	\N
1c4462b3-04af-43ab-8050-febf9bbc0438	company	北京中胜仪表科技有限公司	1234	http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/44f014dd-8766-4da2-baaa-a7def79420db/companyCertification.png	authenticated	李应	320882012312341215	http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/f6da1342-55fa-41a9-8648-ef15b41eff96/companyCertification.png	http://images.theiota.cn/upload/companycert/78592d42-1fcc-45bb-8a00-8e246186e702/bb70a156-fac0-49d2-b751-b06bf66864c1/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-07-13 16:21:43.218+08	2018-07-13 16:22:18.543+08	\N
10c8af19-c2ad-4e25-be28-63f5a359a41c	company	佛山市昊胜传感物联科技有限公司	1234	http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/ece8746c-5c52-486f-8857-e2db399897cf/companyCertification.png	authenticated	朱仝	320882199502141218	http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/407813ef-acea-41fa-9549-33484d64e666/companyCertification.png	http://images.theiota.cn/upload/companycert/01fdd48b-2211-42be-9e66-b2a76c84567d/98a65083-2f47-49b8-bc64-09f0c40e2753/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-07-25 16:45:21.028+08	2018-07-25 16:45:30.508+08	\N
8c9b2c27-6501-4173-8be0-3d4b34466fe4	company	北京数泰科技有限公司	1234	http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/36505ef8-dcba-431a-aa67-9ab52f1ded76/companyCertification.png	authenticated	鲁智深	320882199502141218	http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/84b0c380-db21-446b-9324-b02b84389222/companyCertification.png	http://images.theiota.cn/upload/companycert/0fdb9c51-6450-4966-9f8f-4a0af9a70f00/624c478b-ffa1-4569-bf6b-a63e2010898f/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-08-02 17:09:21.928+08	2018-08-02 17:11:42.417+08	\N
77ef3aea-fa21-4060-b06d-7dbca886f953	company	陕西恒瑞测控系统有限公司	3423423	http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/7228e9f5-5825-40a3-90a5-56e247746995/companyCertification.png	authenticated	alan	321123233433434535	http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/12f8ef8a-4e03-422d-9c0d-bb65812d53a4/companyCertification.png	http://images.theiota.cn/upload/companycert/df6e436e-e4a6-4b25-b1c7-175209753c0f/66915856-5d41-47c5-bf85-a2694b3ef472/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-08-10 17:16:35.643+08	2018-08-10 17:16:53.047+08	\N
08c10c0f-5ba8-4cc6-851f-4eec44349187	company	深圳市建恒测控股份有限公司	1234	http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/6b5e21ca-8ea5-4e95-bfd1-ada79a911b2f/companyCertification.png	authenticated	武松	320882012312341215	http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/c97499a0-c460-448e-b021-a04b9e70e4ac/companyCertification.png	http://images.theiota.cn/upload/companycert/762b9963-18af-4789-afed-88df57b2a556/e20a8c6e-2d5f-4b69-a9f2-838ab44cc882/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-08-13 14:26:16.784+08	2018-08-13 14:26:35.749+08	\N
ffca7b99-078d-433f-b30f-26ca16279162	company	湖南长宜物联科技有限公司	1234	http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/b865cd93-9918-41b3-bed2-48fd1fe24e65/companyCertification.png	authenticated	董平	320882199504061218	http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/1d74964c-a16f-4db0-b3eb-d3ce1880530d/companyCertification.png	http://images.theiota.cn/upload/companycert/0235a43b-3369-4639-a955-05e9962ecc4c/4faa9576-94dd-49b5-96d6-cb4cacc4b5ce/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-08-17 10:53:35.401+08	2018-08-17 16:25:43.478+08	\N
61c4abf0-191f-4d2c-a609-8aef64771259	company	北京首瑞大同测控技术有限公司	123456	http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/eaafb7e6-d498-4369-beeb-dcacf5aac49d/companyCertification.png	authenticated	张清	320882199504061218	http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/c94c012f-082d-43f8-b9e9-0d7e6c23ba13/companyCertification.png	http://images.theiota.cn/upload/companycert/958dfd18-eea0-480e-98bc-edc9da0e0ae3/1d68a541-4cbe-4250-9eaf-b8c62876b841/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-05 09:54:00.533+08	2018-09-05 09:54:39.842+08	\N
980b9cf9-1073-4a81-b777-0d29ac8237d2	company	厦门忻德信息技术有限公司	123456	http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/95a2de70-84d2-4e5a-8401-cf98e02472c5/companyCertification.png	authenticated	杨志	320882199504061218	http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/f1f03e5b-40fe-4167-8b03-a01f7f470f5a/companyCertification.png	http://images.theiota.cn/upload/companycert/2cdb8012-dd24-4570-b6c0-be0c8ca414f5/67e42fb7-9284-4082-b32d-aa1c22b0d193/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-10 09:30:26.752+08	2018-09-10 09:31:09.891+08	\N
0958879e-b6da-457a-80ba-b12d983a9214	company	南京盛亿科技有限公司	123456	http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/2574abb2-8188-441a-a8c1-21c05b630887/companyCertification.png	authenticated	杨志	320882199504061218	http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/52d8f861-2d6b-4494-ab7d-30ea068893c0/companyCertification.png	http://images.theiota.cn/upload/companycert/d8e712e8-731c-45ed-8c90-23504d4e7daf/2ac49965-a6aa-441a-8f81-22982c0c5210/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-13 16:57:11.546+08	2018-09-13 16:58:11.938+08	\N
a7dfdb07-3943-4248-bb47-f4c2678c660a	company	南京丹陌电子科技有限公司	123456	http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/c3875d8a-4598-4ea0-937c-381335bbd738/companyCertification.png	authenticated	索超	320882199504061218	http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/240eb803-71ec-402c-b6d6-2848877c6151/companyCertification.png	http://images.theiota.cn/upload/companycert/e39dc160-cb1a-4c7d-b432-ecfe08799164/46b03568-340e-4f2f-a517-2e5b7c273971/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-26 17:01:51.02+08	2018-09-26 17:01:58.136+08	\N
dd0e7237-b29b-4138-9db6-536278036161	company	长沙弘汇电子科技有限公司	123456	http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/ce5302d2-412a-469c-b105-aa61fd810173/companyCertification.png	authenticated	戴宗	320882199504061218	http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/c52d23b7-38df-491e-9c5d-0740f17ed4f2/companyCertification.png	http://images.theiota.cn/upload/companycert/b62a05b7-00f6-49f0-a9d4-c3ffa17b7340/18980ca4-0a10-4dd6-b525-63ee3bc5ad2f/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-09-29 15:33:12.142+08	2018-09-29 15:33:20.074+08	\N
a32c47a2-7dc4-458d-8169-e88a5b0e82de	company	杭州美控自动化技术有限公司	3232141414124	http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/69edf7ee-fe56-474a-8252-c48bf089d5a5/companyCertification.png	authenticated	俞晓雷	321102199207181019	http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/ffc6c3dd-2230-4aeb-bb3d-8eb42bd465be/companyCertification.png	http://images.theiota.cn/upload/companycert/849e9b08-1181-436a-a106-cc6b0d3ffdc5/bfba7127-2495-4c75-8870-d1eb2030d962/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-09 10:53:52.184+08	2018-10-09 10:54:00.962+08	\N
21da3935-62c3-4b0d-bd28-16921600432a	company	桂林市光明科技实业有限公司	123456	http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/4e162eca-73a9-4409-a051-3df060e546f7/companyCertification.png	authenticated	刘唐	320882199504061218	http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/4919218a-f2c8-4410-b86d-b723fc78010a/companyCertification.png	http://images.theiota.cn/upload/companycert/7d1ecbc8-319d-43ec-9a0b-67d1f713fb36/8df5fe28-e1f8-4547-85fa-5bf6464c07c0/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-10 09:28:08.564+08	2018-10-10 09:28:20.479+08	\N
ed558307-bbb9-422b-8705-205ffb6d95f6	company	北京剑灵科技有限公司	JLxaw123345	http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/0c763071-b259-4905-a3dd-6cd5f647d85c/companyCertification.png	authenticated	谌月岑	321102199207181019	http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/2c0db241-da27-480f-9e61-56813eb20a16/companyCertification.png	http://images.theiota.cn/upload/companycert/19d97e00-b313-443e-b2cd-40bce48c0f05/374b8c47-ad84-4c75-8b15-b370a43e6085/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-12 10:30:18.033+08	2018-10-12 10:33:24.687+08	\N
ee936773-3935-4a6f-a962-2b0fd1a5c77e	company	上海蓝居智能科技有限公司	shlanjuznkj	http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/66c4be53-c0ee-4c4a-9c2a-fc239af4cc06/companyCertification.png	authenticated	王长宝	321102199823412	http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/8bd8b6db-a4e6-4a4f-9b3d-fd4ae7da86cf/companyCertification.png	http://images.theiota.cn/upload/companycert/d7992dd9-6356-40b2-ae7d-78cb5508b40c/5de6dd1a-11c1-4403-a972-3858908498d9/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-15 16:48:24.484+08	2018-10-15 16:48:33.291+08	\N
c1ba779a-7a7c-482c-9d5f-4ee4dcb1fc11	company	北京九旭阳光节能设备有限公司	xxxxxxxxxxxx	http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/33b012e5-7351-430a-9675-6dc0ddc7d5b8/companyCertification.png	authenticated	者成天	321102199207091023	http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/a2b94dbc-14cc-4c53-a784-23a2aa64cd35/companyCertification.png	http://images.theiota.cn/upload/companycert/a5ba2211-a3c8-43b2-a4e8-2e87ccc03805/b1fa86b6-751c-4798-ab39-17357e44a66e/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-17 15:12:26.026+08	2018-10-17 15:12:46.369+08	\N
db5fa7ec-7e67-493b-9ca5-75958f27ba5e	company	天津市丽景微电子设备有限公司	123456	http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/9bae7ce8-0659-4e59-aee5-e1b535d86a72/companyCertification.png	authenticated	李逵	320882199504061218	http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/afbaf1fc-cf3d-4e0b-b7c0-a93fca1fd0bc/companyCertification.png	http://images.theiota.cn/upload/companycert/564b6c70-39c1-423b-9eed-89d2dcdbc2a4/423bd70b-50f7-40aa-8f43-e05bee6e7e25/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-18 15:00:12.315+08	2018-10-18 15:00:20.208+08	\N
255aa9dd-04f8-4987-8634-ed802143a025	company	宁波智哲信息科技有限公司	12343265657	http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/d1a437aa-fb4f-4efc-8790-8e2761a213c2/companyCertification.png	authenticated	金庸	321125413512352	http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/9d505968-d745-4516-9e42-3fa3fc6382ff/companyCertification.png	http://images.theiota.cn/upload/companycert/750185f8-2901-4e59-a173-708c3f84f270/cb375d1d-356f-4b03-b448-3505913b81bf/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-10-31 10:46:56.9+08	2018-10-31 10:47:07.478+08	\N
4ef87106-170b-4ad8-96bf-051cc45e7da1	company	石家庄铁道大学	2156141	http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/16e2f9f6-bc23-46c8-9c87-7b64792cb282/companyCertification.png	authenticated	five	321154353462223	http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/4ce223cb-6e0b-41ae-af8d-188d4ad6f522/companyCertification.png	http://images.theiota.cn/upload/companycert/6b927c2a-ce23-4bf8-9f83-7307d2856c61/9e3a7da8-9883-4ec7-8bdd-34663fc64d7c/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-11-09 11:24:39.721+08	2018-11-09 11:25:36.455+08	\N
c10a7b15-97f0-451e-a15c-537f9ba147ff	company	深圳心谱智能系统工程公司	3212547673	http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/edfebcfb-a5df-452c-ace1-648f6dddb0ec/companyCertification.png	authenticated	five	321254357468435	http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/c40128a2-c2dc-4b44-b4d6-a7ef9e0309ae/companyCertification.png	http://images.theiota.cn/upload/companycert/ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c/5af8d7a2-f820-4908-a928-9f0285b1e96d/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-11-10 15:48:01.32+08	2018-11-10 15:48:35.86+08	\N
58e23a26-8332-454f-b122-3e18a3125b26	company	长沙煊隆电子科技有限公司	123456	http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/12d69011-f594-45dd-9bc4-82cecf89eac5/companyCertification.png	authenticated	史进	320882199504061218	http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/65192584-e02f-41df-bb27-e65e638e7d14/companyCertification.png	http://images.theiota.cn/upload/companycert/5619f241-827a-4e15-b2af-f2666e57ce48/e4a6d46e-2c4b-4479-923e-900f72057a4b/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-11-23 14:58:22.903+08	2018-11-23 14:58:35.211+08	\N
f4ba6f51-e553-4525-a4a8-742e041949bd	company	成都众山科技有限公司	123456	http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/20ed4015-e8c7-4b38-b826-de9ae6e34ccb/companyCertification.png	authenticated	穆弘	320882199504061218	http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/f414ab3b-ca7a-415a-8f49-70268a1d02ed/companyCertification.png	http://images.theiota.cn/upload/companycert/cde952f9-77ff-4bbe-9a36-cdc05fe8212a/b9a078cf-4856-42a8-85e9-1067eca95e63/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-11-23 16:15:35.999+08	2018-11-23 16:15:43.137+08	\N
c4138de9-d2c3-4774-88dc-fd597cf6e8f9	company	永正传感（杭州）有限公司	123456	http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/eb6bbd6c-aba0-47af-b880-6990fd12e615/companyCertification.png	authenticated	李俊	320882199504061218	http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/55c8587b-a452-4cce-b30e-1d94625d5dd8/companyCertification.png	http://images.theiota.cn/upload/companycert/b1797f0b-c735-409e-89f5-ab695859f076/36cfe4a9-1cb5-4208-9822-e0c8e79a552b/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-12-08 16:33:03.64+08	2018-12-08 16:33:20.613+08	\N
19d2071b-8a31-4f00-a984-a02a81fd50f7	company	北京为韵科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/2bc9ac9f-f20d-45e3-b38c-8b31291fd421/companyCertification.png	authenticated	黄金国	140233198005247789	http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/553c0567-ae3e-4c7c-bc48-dd639d5788d8/companyCertification.png	http://images.theiota.cn/upload/companycert/650f75b2-4e3f-4393-8edb-0308c73e15b6/e667dff7-78fe-4b1c-bcfb-2aaaf66f85c9/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-06-18 16:32:11.415+08	2020-06-18 16:32:38.907+08	\N
b90d5ecb-ddfc-42fb-bb9f-0492f4b2a4f9	company	辽宁东仪自控技术股份有限公司	123456	http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/667923f4-15b0-4642-8905-2a4788491c50/companyCertification.png	authenticated	张横	320882199504061218	http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/cb58ba3b-4498-4f65-abcd-890faaffed0a/companyCertification.png	http://images.theiota.cn/upload/companycert/632bb218-8da7-4d91-b83d-70879c562d74/9bc21a0e-b689-4c8e-b6ba-4e978973d5c2/companyCertification.png	\N	\N	\N	\N	\N	\N	2018-12-25 11:46:18.613+08	2018-12-25 11:46:27.94+08	\N
509162c9-010c-490b-be14-d9d43e191e1c	company	广东江威传感科技有限公司	123456	http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/41db81f9-790d-48fe-997f-99928872ebaa/companyCertification.png	authenticated	阮小五	320882199504061218	http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/8c986eea-a71c-4a7d-8bcc-04dc2e5599cf/companyCertification.png	http://images.theiota.cn/upload/companycert/dade7e83-25b6-4932-993c-6d886fec9843/44d665ca-a5e4-4b16-b17f-b313079ef521/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-01-19 09:18:24.455+08	2019-01-19 09:18:31.734+08	\N
873b0693-0abd-4a9b-979e-7553ac29821d	company	abc	abc	http://images.theiota.cn/upload/companycert/upload_6b975392b7744e8cb5f14948c3fb3433.png	failed	abc	111111111111111111	http://images.theiota.cn/upload/companycert/upload_35a0e1ce2112928e038b95db9e00c0d0.png	http://images.theiota.cn/upload/companycert/upload_c5c90c0c61749f8d88fc7c53402acff7.png	 	\N	\N	\N	\N	\N	2017-09-23 16:24:28.453+08	2018-01-08 14:53:02.483+08	\N
db593efc-030f-4b47-b7e1-b49795714439	company	湖南北斗星空自动化科技有限公司	123456	http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/deba4787-9e8d-47c8-a72b-2c525a7c7936/companyCertification.png	authenticated	解珍	320882199504061218	http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/d8383cdd-509d-425e-8821-5a6d0171b914/companyCertification.png	http://images.theiota.cn/upload/companycert/3bc407e4-dd38-4be8-9659-2f9aac78956a/9712191e-b90c-4e81-a392-717cdd2d905d/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-03-04 16:18:07.232+08	2019-03-04 16:18:27.956+08	\N
4f8482c3-8bc4-4b8c-af3c-c935faed0aef	company	北京SOIL仪器有限公司	123456	http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/4bea30a0-a1fd-4bdd-804d-cd7776d74d69/companyCertification.png	authenticated	阮小七	320882199504061218	http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/408f0fe2-f8ee-4ec9-9d0d-f66779228911/companyCertification.png	http://images.theiota.cn/upload/companycert/679f43f2-ff7d-440f-9e36-6ad3beb8d574/c8353be2-b462-4bf1-93a3-bf5b9e849838/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-02-22 11:30:40.453+08	2019-02-22 11:30:51.91+08	\N
6953cb17-93d1-43e9-b65a-2b0990bc0049	company	常州惠和工程科技有限公司	123456	http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/600dd9c8-1902-408f-92ac-48ad70e933bc/companyCertification.png	authenticated	杨雄	320882199504061218	http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/0776d000-dc38-4d72-864c-ba4a6a491fd0/companyCertification.png	http://images.theiota.cn/upload/companycert/8bb8c871-dd83-4665-8378-1ae66927181a/8f5de13b-325e-49c8-b824-b969fc970f4e/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-02-22 17:11:49.946+08	2019-02-22 17:12:14.735+08	\N
d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	company	江西一芯科技有限公司	123456	http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/14bb5ecf-3cb5-4255-8275-2c800d3931fe/companyCertification.png	authenticated	石秀	320882199604061218	http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/16135678-8ae2-4f33-93fb-1b7ede7b638c/companyCertification.png	http://images.theiota.cn/upload/companycert/67c8b9e9-38d6-4c9a-8772-9c96d78121ed/af215144-eb42-4ede-a7e8-579650c6b1f2/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-02-25 11:29:53.706+08	2019-02-25 11:30:04.424+08	\N
e78edb7a-da87-4973-8c4b-ab7b13833072	company	智性科技南通有限公司	123456	http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/b1048106-5737-4f31-ad1a-506016efc112/companyCertification.png	authenticated	解宝	320882199504061218	http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/8ff8d94d-6f45-4610-a4ef-74beafff25bd/companyCertification.png	http://images.theiota.cn/upload/companycert/f6ce26a9-3ae2-4845-9e60-cbeae08428e4/eeb6c497-9460-42e7-bae0-2bd4563412b3/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-03-25 15:42:00.43+08	2019-03-25 15:42:09.602+08	\N
a78c9ea6-7625-4604-8b4c-15c694154389	company	济南长汇自动化设备有限公司	123456	http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/41bb232e-ce50-422f-b2b0-820d67df005d/companyCertification.png	authenticated	燕青	320882199504061218	http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/3f997ddd-a985-4dd2-b707-0d2de8a994ff/companyCertification.png	http://images.theiota.cn/upload/companycert/30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e/36b995db-2056-4aff-98f6-95537e0497e7/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-03-27 10:27:01.222+08	2019-03-27 10:27:23.523+08	\N
2aa3d1c2-45fe-4f61-96a4-654d13cc4b34	company	武汉承拓	112312312312	http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/03b099f1-f82a-4405-b443-658c95d97acd/companyCertification.png	authenticated	王华阿	321231233322122	http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/f8621dc7-a66e-4fdf-9747-5370def69b4b/companyCertification.png	http://images.theiota.cn/upload/companycert/aed14e79-005c-4916-afac-c1b60faeca1b/7bd631f5-f22b-4b8e-b409-09cd3fab13b7/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-04-16 09:13:46.395+08	2019-04-16 09:14:03.12+08	\N
77c8175d-d8bb-466e-a914-20957a0c6c49	company	山东高速工程检测有限公司	123456	http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/dfade675-2f36-4c3f-8b8f-cc9b76bd9327/companyCertification.png	authenticated	于文文	320882198906101218	http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/1f3fc82c-7f58-44a3-8669-4e95490e3f4c/companyCertification.png	http://images.theiota.cn/upload/companycert/9b82d18b-98eb-4042-bb16-f05b923a0688/ca00e781-7861-4c96-91ee-a26b8de4f94a/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-04-23 17:29:45.636+08	2019-04-23 17:29:52.205+08	\N
05074f6f-1e7f-4d0d-a2dd-9548f9799fdf	company	苏州瑞茨柏工程监测技术有限公司	123456	http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/9e015402-719e-4645-b7af-a56c94078fc9/companyCertification.png	authenticated	白百合	320882199504061218	http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/bab20fcd-1fd1-40e5-aa66-c2733f6909fc/companyCertification.png	http://images.theiota.cn/upload/companycert/a002a7f5-f9ea-42a5-83d0-5f63f88e3b87/9e63390b-73d9-41f6-beb9-03dfd072fa4d/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-04-29 15:12:32.164+08	2019-04-29 15:20:05.024+08	\N
23ddab0a-3351-496e-a544-4e988d67b576	company	上海建工集团	123456	http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/150c5133-86a4-4b72-b6c2-1597bda9d17a/companyCertification.png	authenticated	丁弈	320882199504061218	http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/ff6c90ea-767d-485d-b18b-cce07fa7a48c/companyCertification.png	http://images.theiota.cn/upload/companycert/19fa25f4-9ba9-4e93-9025-e67b34db9cf7/ecbfd92a-30a6-457b-8186-97d538ab27dc/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-05-13 16:34:02.33+08	2019-05-13 16:34:18.778+08	\N
d4d2115f-fe6e-410d-9b82-2b21fa4fade1	company	浙江乐孚信息科技有限公司	232343454太	http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/973d72bc-b098-48e9-8e78-17f6b60c2cc5/companyCertification.png	authenticated	李爽	130632198705246427	http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/14a2292f-bdbb-4ac1-8961-7dd7498a65ad/companyCertification.png	http://images.theiota.cn/upload/companycert/9842b3d6-0a7d-4d67-84be-d0132d1b3e30/9e187b67-76d7-44e0-bf33-003b823d2d64/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-05-09 09:33:22.636+08	2019-05-09 11:06:09.365+08	\N
fe723f98-2007-4786-8a13-7b8cf97e9fb0	company	北京中交众成科技有限公司	4124324354343244324	http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/71a4fb06-74fd-4a9c-89bf-bae00a76cee3/companyCertification.png	authenticated	周小	130401199603182882	http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/dcd6dfd0-4484-48be-9f59-63389a84402c/companyCertification.png	http://images.theiota.cn/upload/companycert/bda7431e-46ed-40b2-bf13-b511219a8fcb/a6b7003c-a47e-4c86-b6f1-1a11e581ae88/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-05-14 09:43:25.763+08	2019-05-14 09:45:01.201+08	\N
4151ce66-cea2-470e-b9d6-1a9915f98dc4	company	稳控科技	132444555	http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/8fde7403-60dc-486e-aedb-7ab95fd6d843/companyCertification.png	authenticated	林小杰	130404188024425	http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/40fd1282-151a-4c34-a9b7-28ce4c005bf6/companyCertification.png	http://images.theiota.cn/upload/companycert/e3714b5a-b240-4f8f-a8c3-9067a3fffb04/5f4df2e5-76b8-4425-a725-dc481ab4aaa0/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-05-15 10:42:05.858+08	2019-05-15 10:43:11.701+08	\N
1b8a807b-0029-4862-b3e8-f0e60c713a62	company	上海如应仪器有限公司	123456	http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/b8dffb8c-14e1-4e55-8c45-157e97bc1610/companyCertification.png	authenticated	肖文艳	320882199504061218	http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/e1e09407-aed6-4ae7-8a7b-87f499f712e6/companyCertification.png	http://images.theiota.cn/upload/companycert/8d2f03c7-32a2-42e4-befc-7dde5c965472/836bd440-e0c9-49b5-af86-3f29e8dce2f8/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-06-21 16:28:11.372+08	2019-06-21 16:29:01.375+08	\N
3f71a23d-2762-47d5-8d94-12f9671d4b53	company	深圳奕帆科技有限公司	2323434343	http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/211061ac-7fe4-42cb-8091-e9216e7f1643/companyCertification.png	authenticated	林森	130633178903216574	http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/32edf568-0593-47eb-aadd-e752ef831183/companyCertification.png	http://images.theiota.cn/upload/companycert/6879ee09-86fe-48d2-a3ff-bd5395d66a27/bf3aa1d9-b912-4fbe-b67e-c5ca1e7ba6a7/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-06-25 11:55:00.085+08	2019-06-25 11:57:34.384+08	\N
4f42d31f-9c35-41b4-a21a-96b2e2e24619	company	华南理工	12344	http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/4a5945de-8fa4-4731-9ee2-8fdc7676895c/companyCertification.png	authenticated	王五	140602199808251200	http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/0992274a-6236-41aa-9921-1fd7b96fe092/companyCertification.png	http://images.theiota.cn/upload/companycert/736d5c22-d6ac-4577-9782-0f95345ea1d5/63255d2a-e429-489e-b16e-0c4de05a1f90/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-07-16 15:39:40.739+08	2019-07-16 15:42:30.403+08	\N
01f46e8d-4d8a-4474-8860-b7f71abb616f	company	陕西恒瑞测控系统有限公司	123456	http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/45f3f6f7-6103-457f-b26d-3599a756d057/companyCertification.png	authenticated	韩非	320882199504061218	http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/4fb96d61-1b91-4a53-b51d-0ed4692778bc/companyCertification.png	http://images.theiota.cn/upload/companycert/802a6ad5-5ee7-4234-8c91-32aa074a0685/5792a8b2-eab5-4f03-9a49-2a7e4c0e6a14/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-07-22 16:13:10.697+08	2019-07-22 16:13:50.089+08	\N
396c7a87-c01f-4fc0-84bb-813f5525e16a	company	泰斯特仪器有限公司	23123232133233213	http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/b65e2c49-ade4-4968-9cf5-0b38797547b0/companyCertification.png	authenticated	大师赛	130633178908217689	http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/f96659b0-638b-4cfc-a059-88f0d41b01a2/companyCertification.png	http://images.theiota.cn/upload/companycert/6c3cbbd8-b774-4955-897d-3333586385c6/da28525b-c30f-4a33-860e-a2ded9276a80/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-08-05 15:38:35.496+08	2019-08-05 15:39:45.724+08	\N
dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8	company	杭州国翌科技有限公司	1213141234214	http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/05b67ee7-80c0-418b-bdd8-25704afa7543/companyCertification.png	authenticated	李天	140602199008162389	http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/619488e2-4dbb-4d28-bd6d-b04e624b9bc5/companyCertification.png	http://images.theiota.cn/upload/companycert/3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c/d2a8c492-570a-486a-9cfc-e6c72b5d24a2/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-08-13 10:34:15.813+08	2019-08-13 10:34:32.798+08	\N
18e3930c-9d6c-4d92-b0f0-e781fb407078	company	江苏华通工程检测有限公司	34343543524242	http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/d85d879f-e8dd-471b-b36d-e0f74a0c6835/companyCertification.png	authenticated	朱骄健 	140544199705106789	http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/55215368-bb6e-476a-b80d-2387a5ed2cfa/companyCertification.png	http://images.theiota.cn/upload/companycert/d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44/79651ab0-e125-4b76-a7ce-d69bd685ec67/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-08-13 17:46:23.979+08	2019-08-13 17:47:01.466+08	\N
ced3128b-5650-474d-99ae-4496d3d0ea97	company	南京巡天科技有限公司	281798239873921792	http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/49b06880-bc22-47fc-9409-b9aa4b98c789/companyCertification.png	authenticated	邓世昌	128371027308217012	http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/f8e874a2-cfb3-409d-99bf-600e96e8467d/companyCertification.png	http://images.theiota.cn/upload/companycert/a59371d0-7a5c-473a-83f2-41b31b9096e1/d0550c56-94d6-4685-86b1-038b4e3af694/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-08-27 10:10:55.798+08	2019-08-27 10:11:18.405+08	\N
c6b69110-10f2-4697-afcf-eb74f9e4a777	company	浙江博远电子科技有限公司	1212341234124	http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/8b0a6a0a-d5a2-40bf-be5e-628b5497639a/companyCertification.png	authenticated	宝源	140602199012124356	http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/6779188f-e6ef-435d-a9c8-05f6cda07ffd/companyCertification.png	http://images.theiota.cn/upload/companycert/17ecfb0a-03a3-45eb-8d52-4794676c3a0a/e4b4136b-af3a-4a92-8c56-d492f8dd5d43/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-08-23 14:12:44.85+08	2019-08-23 14:13:10.329+08	\N
905fa2c7-2244-487a-8dad-605e4d58e3d1	company	成都泰测科技有限公司	2324234343432432	http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/74d234cb-870e-4c28-8fcf-d29e2762f1f6/companyCertification.png	authenticated	张飞	142345189009272345	http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/33d8f371-586c-42b4-b988-d3ad07e32d46/companyCertification.png	http://images.theiota.cn/upload/companycert/4da26159-9a73-4068-a2b4-227aaac64a94/e802e207-152e-49b4-a81d-32452c940fa0/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-09-05 11:16:30.708+08	2019-09-05 11:17:03.853+08	\N
06a9522a-1277-41df-a73c-54910c8bddd8	company	深圳市大豪电子有限公司	34343432424234	http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/dcf25823-c325-4345-967e-704d00f459d4/companyCertification.png	authenticated	王大锤	140566178909235678	http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/714ebabb-f5d5-49df-b780-bc06b96117ed/companyCertification.png	http://images.theiota.cn/upload/companycert/56c7bc15-9ef6-4a82-984f-27e061f13a51/40409a31-d35b-42a4-8818-ff498aa8b464/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-09-30 09:52:25.689+08	2019-09-30 09:53:58.768+08	\N
3a3342dd-c0d1-4814-b0d4-99c105d0f91c	company	徐州市伟思水务科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/cc728cbf-92b9-4caa-814b-92fd7f8fcc7b/companyCertification.png	authenticated	徐飞	134265187709234527	http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/c4fea4a7-5b50-4bf7-bc50-c42c84a94978/companyCertification.png	http://images.theiota.cn/upload/companycert/f088bb87-39b0-458f-931f-e752ffa5cb07/e962e3c8-12cb-414b-b5e5-d61700989994/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-10-14 11:35:32.764+08	2019-10-14 11:37:06.727+08	\N
b5a689a1-1523-47c7-ab4b-96b2d01cc461	company	任丘市新北仪器厂	343435453252	http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/5165c56f-13be-48ec-bc4d-b08d68cccca2/companyCertification.png	authenticated	石飞	120345189003216423	http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/79261e3c-d660-4de9-baef-d150df47d665/companyCertification.png	http://images.theiota.cn/upload/companycert/c8fac2b3-4360-47e4-91ab-2d6f3b3973e6/58ee030a-b87b-4e57-a57f-3444d6ba0bde/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-10-29 09:04:27.849+08	2019-10-29 09:05:21.947+08	\N
3825bcfe-887b-4c7e-825d-9e824d753aaf	company	上海航鼎电子科技发展有限公司	343435453252	http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/4d6f4387-1033-4063-863e-bb472a7f19bc/companyCertification.png	authenticated	萨驰	140456175609145432	http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/bfa02f9e-2376-4641-b338-34fe8a86a660/companyCertification.png	http://images.theiota.cn/upload/companycert/fff3496c-71e7-4ca5-abe5-9de748ac5a63/52bcd77a-1996-4878-81dd-f6e35de21b5a/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-01 14:06:43.126+08	2019-11-01 14:08:59.481+08	\N
b44a2f42-face-4c8f-a783-1cfb1757c880	company	丹东金帆土木工程仪器有限公司	123124123412341234	http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/cecf4bea-d0af-460a-8b90-fb0461b35cbd/companyCertification.png	authenticated	李丹	140602197809123214	http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/c2ba5135-db2f-4051-9486-60f3e0597cd1/companyCertification.png	http://images.theiota.cn/upload/companycert/123d97a2-af89-4fcd-87be-bf4e587c1495/3d6d3720-5301-4119-bb2b-1f99cc69c5c1/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-18 11:18:57.795+08	2019-11-18 11:19:36.608+08	\N
3ddc40b2-b032-43be-ae73-a64ab2cf1827	company	上海市政工程设计研究总院	343435453252	http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/43789c56-d67c-4e0f-845f-8869ca56c4f4/companyCertification.png	authenticated	杨洋	137322189008074523	http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/4d62cf75-81ad-4fce-99a9-2f56aacd1c75/companyCertification.png	http://images.theiota.cn/upload/companycert/e2534302-c06d-4ddf-8857-7011bfdde945/60bcf1be-4d3c-4a44-9a81-d7d7ee601443/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-05 09:08:23.233+08	2019-11-05 09:10:13.312+08	\N
f3f08d8d-1644-4a97-b5ab-a94039b1907c	company	成都安阶监测科技有限公司	12131231234123	http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/78717016-0b71-44e5-b9f0-c201220059b3/companyCertification.png	authenticated	李福	140609198509181231	http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/c0bcb7da-f063-4b59-98b2-720d65e41939/companyCertification.png	http://images.theiota.cn/upload/companycert/8d49238d-6e0e-421c-adaf-f7472ec0b50e/3694cee4-4dc4-4b76-8b9a-e4350365d4bb/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-09-29 10:28:51.448+08	2019-09-29 10:30:49.297+08	\N
230cf38f-fd43-4b78-93b2-05620d4eab9f	company	北京联睿科科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/a57bd1b0-75a1-4d4f-80c4-89039077fbd6/companyCertification.png	authenticated	李雷雷	120344198709082345	http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/416068f9-c48d-4c0c-8d17-aac4cf1eee48/companyCertification.png	http://images.theiota.cn/upload/companycert/bfe504c8-b84a-43ec-831a-5ce698db9950/0ed4a275-ba46-42df-8d74-12565270a45e/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-27 08:59:59.667+08	2019-11-27 09:01:41.804+08	\N
752f5c02-d042-481d-ba52-83c0a4d969ae	company	北京腾晟桥康科技有限公司	1212	http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/c575db66-e0b2-443f-8fe0-43f2cb1cb93d/companyCertification.png	authenticated	王天和	140602197509231203	http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/dcdb65cd-957b-46e3-9b9b-4a902af77bb6/companyCertification.png	http://images.theiota.cn/upload/companycert/158a00b4-7170-4f1e-acd7-81e38c57b8da/a1b33b19-6767-4b74-97b3-baa8fded4746/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-14 13:13:39.766+08	2019-11-14 13:16:10.515+08	\N
3ced2ad4-50ab-4f5d-b3ca-fc19063f1879	company	北京思莫特科技有限公司	2341234123412	http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/aa2714f8-820e-4801-b823-e5e46a11b165/companyCertification.png	authenticated	斯模特	140601198609192367	http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/b62578e4-4d62-48e1-afc4-b614ee464ae2/companyCertification.png	http://images.theiota.cn/upload/companycert/ccef8df0-e1f5-46be-a5b7-040285b1b6e8/4980f7bc-dd8e-457e-9f24-ac5539d92346/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-11-22 09:35:37.599+08	2019-11-22 09:39:44.261+08	\N
415309d1-0dfa-4a51-9446-c5d96a8357c2	company	江西飞尚科技有限公司			authenticated					\N	\N	飞尚	\N	\N	\N	2017-08-18 16:25:24.324+08	2017-08-18 16:25:24.324+08	\N
cb22fffc-27b3-479c-94ca-4117bb9483f3	company	湖南五岳监控测量技术有限公司	343435453252	http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/d6fd7769-5a24-41e4-8e7f-99a1bf456904/companyCertification.png	authenticated	王和平	124355178909128899	http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/cbf7f4f7-0293-490c-b440-c7d76496fe43/companyCertification.png	http://images.theiota.cn/upload/companycert/7883c07e-5754-4740-b90b-836def9cb38e/891db26a-77d6-4b0e-b01c-beb80f0ec2af/companyCertification.png	\N	\N	\N	\N	\N	\N	2019-12-06 10:29:18.413+08	2019-12-06 10:30:56.722+08	\N
1b270ac5-34e5-47e7-8d67-926c4783bf6d	company	宜兴市中岩土木工程仪器厂	343435453252	http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/3c1b41c4-b52b-4dc4-b641-7ab964eca6eb/companyCertification.png	authenticated	刘芳	189234197809231234	http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/5d115731-71ed-4b53-8c74-ffa8ec537680/companyCertification.png	http://images.theiota.cn/upload/companycert/4fd9bf53-3722-4a0e-9145-178e3be83216/6d75586f-0e5d-4921-9d50-bb10d0893677/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-04-09 16:34:07.857+08	2020-04-09 16:34:18.431+08	\N
334b593d-da3a-4d6b-a756-36e82b6e882e	company	厦门乐钢材料科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/f4bf055e-3535-4db5-9e09-96eebe5524c6/companyCertification.png	authenticated	林晨	130233198009082311	http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/9975f7f2-18a6-4e47-8e28-120dcbee99fa/companyCertification.png	http://images.theiota.cn/upload/companycert/4ed578c6-f98d-4d94-b1b3-472e1ced51bd/099c11a4-cf7c-4f4e-90bc-96ec13278f02/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-05-09 17:21:36.396+08	2020-05-09 17:22:23.652+08	\N
004b1a1d-6d36-45c7-9e9d-2e3a3ecdc5c1	company	上海奔信信息科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/b93c9b99-795e-409d-97d1-131b9222141a/companyCertification.png	authenticated	李飞	132366187609183245	http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/8a829a37-6b14-41fc-9260-b3599b69e8a5/companyCertification.png	http://images.theiota.cn/upload/companycert/28bc5952-cfc7-4d3a-a922-92c82d003b20/061df515-5810-4936-ac6b-88ce25be6924/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-05-14 15:00:53.289+08	2020-05-22 08:44:22.77+08	\N
92d41b9e-5436-4c25-b181-973fa389f185	company	长沙岩康电子科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/b8c1db71-8b90-4eff-8a4c-731e1d443683/companyCertification.png	authenticated	易小飞	134233187905278900	http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/cb93529f-2eb0-4a13-9ab7-9e94b2e64776/companyCertification.png	http://images.theiota.cn/upload/companycert/90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0/897942de-377e-4964-89ff-bf389b78c57e/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-06-05 14:29:43.341+08	2020-06-05 14:42:17.63+08	\N
73386ae5-ef81-46d7-97d1-617a84709958	company	深圳市问源工程科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/26e4babb-5a96-4884-8ebf-ebcbf104c093/companyCertification.png	authenticated	王鹏	123233179008096789	http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/8ce864c0-67f4-4ff2-b5d7-d60f168a9cb6/companyCertification.png	http://images.theiota.cn/upload/companycert/38913139-1273-4b5a-9155-e4aff0fc89ee/0f1fb6b5-9a71-444c-9957-467ae8da056d/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-06-12 13:45:26.15+08	2020-06-12 13:45:38.763+08	\N
de2f4d46-1d32-4109-b909-a013dabfa58a	company	广州市晟探测控技术有限公司	343435453252	http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/880f17a7-7843-467d-99a5-7b340091305d/companyCertification.png	authenticated	老臣	148344197806216543	http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/c8f404eb-dff7-4db0-b5d9-17324d29593b/companyCertification.png	http://images.theiota.cn/upload/companycert/4f529033-1917-4df3-80db-81efffdf28bf/d1f2364f-17eb-4335-8e65-3ea2fc456c26/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-07-01 10:57:05.746+08	2020-07-01 10:57:42.717+08	\N
8b21d12e-9bf9-4c00-8380-74aec0c58771	company	美国Campbell	343435453252	http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/6900a536-cef2-470f-886a-e31f92598026/companyCertification.png	authenticated	吴全满	132455190809127890	http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/15b935f3-c7bc-4052-be0a-20ff19556e11/companyCertification.png	http://images.theiota.cn/upload/companycert/f38c8678-6245-4d4c-b6c2-b753ffe51a91/e3676d35-2d87-4c05-9312-669d26d647e7/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-07-07 09:20:38.199+08	2020-07-07 09:21:19.227+08	\N
1d34edcf-e610-4987-980e-dbf2fa6a803a	company	北京中弘泰科科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/4749a577-a52e-4c57-8e7e-f2bdb904f7f1/companyCertification.png	authenticated	张大大	134566178907218900	http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/da3bbf75-4b5b-439f-bb73-0d61b66a57ba/companyCertification.png	http://images.theiota.cn/upload/companycert/10b1641f-9368-4783-ab0f-85301fbe0b57/e0e70510-2d26-4126-a8ae-401d2e9f55cf/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-07-20 08:44:19.049+08	2020-07-20 08:44:40.513+08	\N
9cfcaef5-1af4-4e58-a074-4321b6cc7379	company	北京道冲泰科科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/104a3f3f-e0de-4881-a142-d04475d66807/companyCertification.png	authenticated	张太可	132677198007214567	http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/d0e3c18b-a7ca-4dfc-8815-dfe2c92bed14/companyCertification.png	http://images.theiota.cn/upload/companycert/9fb7fa83-8261-4c7b-bc2f-d21a24bc7105/e446834f-3344-4735-b2e0-dcfd5ef473a9/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-07-20 13:48:53.956+08	2020-07-20 13:49:07.899+08	\N
57a0b61a-7418-4200-9df8-2389ceabf0ab	company	杭州予渔物联网技术有限公司	343435453252	http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/c9dad8f0-e96f-4914-82cd-6f6bc53b1b12/companyCertification.png	authenticated	施洁	120344198708012345	http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/4b91bfe3-cd4a-4c14-b403-61bcc22e4e32/companyCertification.png	http://images.theiota.cn/upload/companycert/1c2a6d1f-3ebd-47dd-80b6-db55d55982d8/b8eaa4f6-2b2d-4aba-b68f-80002884df50/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-09-02 11:05:09.335+08	2020-09-02 11:05:33.362+08	\N
68cc623e-fd96-49f5-990a-55796a248cf2	company	Test-LYL	Test-LYL	http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/b0c74d79-98b5-499d-b488-137804006fb6/companyCertification.png	authenticated	LYL	32110219890615631X	http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/a94ef5ca-36cc-4211-84fb-7a49e91f85ed/companyCertification.png	http://images.theiota.cn/upload/companycert/0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273/7366b2e2-d536-4294-b0e9-862383009a56/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-09-01 14:36:48.371+08	2020-09-01 14:37:41.586+08	\N
555ecb6e-3561-4461-b2f9-f9fbeb6e5a48	company	江西飞尚科技有限公司智能家居集团	123456789	http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/e36f96e5-914b-4308-8ff3-6beefb75f8cf/companyCertification.png	authenticated	东皇太一	320882000000001314	http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/e6508dbe-31d0-425c-a741-56f6f81596f5/companyCertification.png	http://images.theiota.cn/upload/companycert/f2b3bb46-fba2-4a7a-a1f9-b88d86826cce/ac7bee0a-d7b7-4de3-9943-04c546786ced/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-09-07 16:00:07.952+08	2020-09-07 16:00:30.735+08	\N
ade25a08-2f33-44ac-8a49-a4fe690e3a57	company	杭州予渔物联网技术有限公司	1234	http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/52799fbf-aff4-44c3-a2f8-50555d2d29b1/companyCertification.png	authenticated	予渔	320882151546461212	http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/792dde2b-0819-4d4b-be7c-b398bfea5aa1/companyCertification.png	http://images.theiota.cn/upload/companycert/19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2/9f8ee23b-9604-4775-ba9b-89179ad9d4cc/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-09-11 14:32:56.667+08	2020-09-11 14:33:23.096+08	\N
b5ea9716-5d8c-450c-971e-33e25652dea1	company	云享空间测试	1234	http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/9dd4fa8d-6257-4fca-8259-36f048cb539d/companyCertification.png	authenticated	东皇太一	320882000000001314	http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/f64e4b20-003f-4c91-9dcb-2af681a30d46/companyCertification.png	http://images.theiota.cn/upload/companycert/f9927e7e-69c2-439e-916f-4981e6821dfa/a85446fe-c31e-41d2-abb8-229c61d77d49/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-10-10 10:45:21.527+08	2020-10-10 10:45:41.897+08	\N
5646c79d-1071-4fa1-ba75-ffc8abf95e65	company	南京工业大学	343435453252	http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/187119fb-1bda-4802-98cf-5bc596f06fe9/companyCertification.png	authenticated	申志福	120344198708012345	http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/7708e325-6d00-4afd-9f8d-0643b811bc27/companyCertification.png	http://images.theiota.cn/upload/companycert/55ecba2d-f3da-4ebb-b58d-7cc16522faad/56269167-805a-40d9-8c1a-3c9189bef589/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-10-30 16:38:40.952+08	2020-10-30 16:38:51.889+08	\N
b368dca7-d851-4853-bf37-d16c775a9d9e	company	有数（深圳）智能科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/551335c0-9173-47d1-91f8-cd4ce7de955e/companyCertification.png	authenticated	杜总	120344198708012345	http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/3b78b679-6fa8-42a1-9dde-eadb654b0131/companyCertification.png	http://images.theiota.cn/upload/companycert/eb348dfa-0075-47b5-b190-4e10b6c5c6be/3f75f573-9990-4ab0-8a47-c5579ddd2219/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-12-11 16:46:03.399+08	2020-12-11 16:46:38.615+08	\N
ce4fbec7-4440-489a-be8b-fd328339df21	company	同济大学	343435453252	http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/6a8b1102-b542-4ac4-9190-024f276ce2d5/companyCertification.png	authenticated	洪工	120344198708012345	http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/a8e9c51b-40be-4c14-adf9-921bd1a89c3b/companyCertification.png	http://images.theiota.cn/upload/companycert/5dfa1ffb-543a-43a7-9de1-30f0303e05d1/11b11bc9-ab30-4944-baa7-deed8503bc00/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-12-11 15:40:09.446+08	2020-12-11 15:40:46.613+08	\N
995100fe-ae10-4774-a39f-817f580c578c	company	安测仪器设备有限公司	343435453252	http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/775d5f37-7c59-4efe-b47d-449d4208ebe2/companyCertification.png	authenticated	柳总	120344198708012345	http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/02c87770-e416-4d5d-a375-8216f882055f/companyCertification.png	http://images.theiota.cn/upload/companycert/7471567c-43bd-422d-9d05-9742a9a517c5/94ebba6d-3340-4dfa-8bca-4253b34b8983/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-12-17 09:57:09.645+08	2020-12-17 09:59:33.433+08	\N
d1c2b73f-7215-4523-bb92-43041584ab1a	company	湖北三思科技股份有限公司	343435453252	http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/c6b37b48-67e8-48b2-a1a9-c036ae429c98/companyCertification.png	authenticated	皮卡丘	120344198708012345	http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/d2f35106-cc68-45ac-b2e8-603f7f0ae139/companyCertification.png	http://images.theiota.cn/upload/companycert/9f26c140-684e-41f5-80a9-b0c1f660b9f7/0bda2c40-a2b6-4c19-9ac0-6fe98bb5eca0/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-12-22 09:47:20.746+08	2020-12-22 09:48:27.909+08	\N
3b23d906-05d9-484e-9f08-7a68831770e8	company	北京城安在线科技有限公司	343435453252	http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/ac040d59-0b15-4e41-b221-91de5865086d/companyCertification.png	authenticated	杨柯	120344198708012345	http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/b8e66a0c-baae-4fd1-933b-630ff0a6944e/companyCertification.png	http://images.theiota.cn/upload/companycert/17e2c509-1128-42d6-89b5-5058d7a2a5cd/82f37bc2-ce63-45b5-a5af-60a0062379ca/companyCertification.png	\N	\N	\N	\N	\N	\N	2020-12-24 17:32:30.801+08	2020-12-24 17:32:53.635+08	\N
9d5e90d5-269a-4683-9010-34bd32ed70f6	company	天津大学	343435453252	http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/685bfca6-900c-4663-bb42-4d202c048c53/companyCertification.png	authenticated	徐杰	120344198708012345	http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/30bd15b2-c89e-4adf-bd55-d415eb51f070/companyCertification.png	http://images.theiota.cn/upload/companycert/256d53e2-0a91-4903-9753-736649588b98/39a046af-4e66-4ed1-ac8b-aee462f89a1a/companyCertification.png	\N	\N	\N	\N	\N	\N	2021-01-04 09:56:09.502+08	2021-01-04 09:57:48.808+08	\N
897e5bb1-9d4c-484c-b565-397bd37d5c55	company	华东勘测设计研究院有限公司	343435453252	http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/59496fb6-87da-4591-8d9a-80cf3578cde9/companyCertification.png	authenticated	冯磊	120344198708012345	http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/dfead645-b692-4fc2-8864-c1af4d223a6c/companyCertification.png	http://images.theiota.cn/upload/companycert/611a5d96-e77e-4ca6-925d-30609b1f57df/5a2160c6-3c1d-4a9e-8f6e-eb9410addc8d/companyCertification.png	\N	\N	\N	\N	\N	\N	2021-01-08 14:03:01.676+08	2021-01-08 14:03:35.462+08	\N
\.


--
-- Data for Name: Dashboard; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Dashboard" (id, colspan, height, type, source, option, "createdAt", "updatedAt", "userId") FROM stdin;
\.


--
-- Data for Name: Device; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Device" (id, name, properties, "createdAt", "updatedAt", "thingId", "deviceMetaId") FROM stdin;
\.


--
-- Data for Name: DeviceCapability; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceCapability" (id, properties, "createdAt", "updatedAt", "deviceId", "capabilityMetaId", "deviceInterfaceId", "protocolMetaId") FROM stdin;
\.


--
-- Data for Name: DeviceCertification; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceCertification" (id, status, reason, "createdAt", "updatedAt", "userId", "deviceMetaId") FROM stdin;
\.


--
-- Data for Name: DeviceInterface; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceInterface" (id, properties, "createdAt", "updatedAt", "deviceId", "deviceMetaInterfaceId") FROM stdin;
\.


--
-- Data for Name: DeviceMeta; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceMeta" (id, name, "createBy", "belongTo", investor, public, image, model, "desc", "createdAt", "updatedAt", "vendorId", category) FROM stdin;
98a8fd6f-cab9-47d3-88aa-8832962c931c	测试设备	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	f		1	测试设备	2017-09-19 16:23:55.22+08	2017-09-19 16:23:55.22+08	\N	0
cff552ac-d565-4a44-8400-e0f4382ce853	光照传感器	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	t		RY-G/W	锐研智华	2017-11-16 13:50:55.914+08	2017-11-30 11:43:13.97+08	82af10d4-f6f0-4e09-84ce-7053d4b42940	0
345d6324-7330-4d26-a786-a6823849f483	Kafka	fc6bae74-2409-47c4-8374-d3673978188a	fc6bae74-2409-47c4-8374-d3673978188a	fc6bae74-2409-47c4-8374-d3673978188a	f		1	测试Kafka	2017-11-30 15:01:46.296+08	2017-11-30 15:01:46.296+08	\N	0
0357e07d-3afb-4d4b-b196-766688a5b2b2	拉杆式位移计	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	t		LWF-150-R5*	上海江晶翔拉杆式位移计	2017-09-16 12:22:16.684+08	2017-10-10 11:48:01.032+08	6c43ca35-bfee-404e-afa5-8cc4ca7fb92f	0
6888837c-236d-4a0a-871e-ea506429a386	振弦采集仪	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		FS32		2017-08-12 17:28:55.296+08	2017-10-23 10:40:32.96+08	\N	0
26ceb3f3-78b3-4b0a-910b-a5bc39218370	abc工业级	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2017-11-09 11:07:51.823+08	2017-11-09 11:07:51.823+08	\N	0
8015ec05-fd08-4afb-b018-3bc916702f96	DTU	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	t		CM6550P/CM6560P		2017-11-13 17:17:59.765+08	2017-11-13 17:34:05.113+08	74c38e2c-4971-46b3-bee6-8a51f116213a	0
9e56c900-b85f-4abd-b53f-3162016875ad	表面智能数码弦式应变计	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMZX-212HAT	 搭配金码新型总线采集仪    无公式 采集仪上来就是数据	2018-01-05 18:09:59.81+08	2018-03-29 09:31:36.405+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
04cb319d-9e45-4534-8be6-5f1f4aef7740	气体浓度监测仪	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	f		EX-14		2017-11-29 09:23:59.543+08	2017-11-29 09:23:59.543+08	\N	0
831ab1f7-fe76-4152-b7a0-3359bdf7c3bd	静力水准仪	619160fc-a159-4566-9781-9e2c2f217324	619160fc-a159-4566-9781-9e2c2f217324	619160fc-a159-4566-9781-9e2c2f217324	t		jct2100		2017-09-16 14:12:58.163+08	2017-10-10 11:47:12.712+08	6327bc29-4615-4eda-aa87-f534d179265f	0
f86c7d29-f504-474d-8665-d484e5c41e8a	CO2传感器	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	t		RY-VS09	锐研智华	2017-11-16 17:03:23.898+08	2017-11-21 17:25:47.85+08	82af10d4-f6f0-4e09-84ce-7053d4b42940	0
be246ea1-fd75-4151-92c6-54b278d11287	温湿度变送器	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	t		JCJ107XT	北京九纯健科技发展有限公司温湿度变送器	2017-09-29 15:08:42.922+08	2017-10-10 11:48:11.155+08	e3ca47a2-cd34-4d73-8fd7-18ce41c58460	0
bd742efe-04d8-4e90-9799-dd3830baf3ca	光照度传感器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DZD-T8W1		2017-11-29 18:00:44.737+08	2018-01-11 10:10:36.62+08	\N	4
a300435b-3982-4694-aab4-48ba853d838e	裂缝计	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65B5000	华岩裂缝计	2017-11-17 09:33:02.95+08	2018-12-28 11:16:20.902+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
1fbfe6ef-ffff-4bd9-936a-67d9665006be	DTU	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	t		CM3150P/CM3160P		2017-08-24 15:25:01.49+08	2017-11-13 17:33:49.086+08	74c38e2c-4971-46b3-bee6-8a51f116213a	0
f8ec9655-408b-46e4-96f3-a8fcc382230a	DTU	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	t		CM510-21H/T/F		2017-11-13 17:20:33.764+08	2017-11-13 17:34:08.823+08	74c38e2c-4971-46b3-bee6-8a51f116213a	0
abb38d23-09f3-48fc-b9ee-4dfaf1db995b	PM2.5检测仪	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	t		HCT-300	气体探测器	2017-10-31 15:05:36.875+08	2017-12-12 11:39:23.267+08	3a8d9a71-ba47-4661-add4-fef01940e609	0
e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	静力水准仪	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH02-E10		2017-12-04 13:47:01.121+08	2017-12-21 10:55:49.325+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
131c98fc-2216-4f0f-9cd3-581d88f9affd	温湿度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WSD-01M	江西飞尚科技有限公司温湿度传感器	2017-08-26 15:51:32.525+08	2019-07-23 21:31:53.71+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7e6111e8-0a68-4af8-92ae-6238b7f3c631	单轴倾角仪	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		RF-LCA316T	固定测斜仪	2017-09-19 20:20:53.697+08	2018-03-29 14:24:32.214+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
584a210b-20f2-49cf-906a-9d6b4883af09	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～2000kpa]	麦克传感器股份有限公司数字液压变送器	2017-09-06 18:47:18.536+08	2019-01-02 10:51:46.239+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
0cbe0018-ac32-4dfd-ba20-7c6e9658a553	智能孔隙水压计	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMZX-5510HAT		2018-01-05 17:57:19.717+08	2018-03-29 09:31:31.511+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
e2d93988-c0e0-4581-b406-e43e455f7864	风速仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M11		2017-11-29 00:32:41.319+08	2018-01-09 11:30:28.642+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
d08c2f42-3528-4b5f-9f34-04deac7051c1	111	00cf911c-3531-4665-a358-3d31d36f0bdd	00cf911c-3531-4665-a358-3d31d36f0bdd	00cf911c-3531-4665-a358-3d31d36f0bdd	f		111		2018-01-09 21:37:46.419+08	2018-01-09 21:37:46.419+08	\N	1
666e753c-f0b0-478d-b5f5-839117db13f9	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T16		2018-01-08 16:27:56.724+08	2018-01-09 11:30:18.91+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
823921c0-40e3-46c6-809c-804adcf828ce	温湿度变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DWS-T5		2017-11-29 17:55:29.398+08	2018-01-11 09:35:13.78+08	\N	4
fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b	双轴倾角仪	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		RF-ACA826T	北京瑞芬星通科技双轴倾角仪协议	2017-09-22 17:34:24.729+08	2018-03-29 14:24:34.529+08	19a42196-a096-4d6a-84d1-67d7c3030605	0
2420aadc-c220-4ce6-bfe9-c21d79ce827f	雨量计	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DYL-T*W1/3		2017-11-29 17:57:56.239+08	2018-01-11 17:51:46.383+08	\N	4
31ec0204-1cc6-475a-bd8b-39ad4cda3a25	DTU_11011301	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		CM1306EP		2017-08-28 11:19:40.966+08	2017-08-28 11:19:40.966+08	\N	0
99e46759-26c1-4aa3-8e57-9818fc111906	abc采集	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2017-10-31 17:57:38.19+08	2017-10-31 17:57:38.19+08	\N	0
eb1c1781-cea9-411f-8c15-39aafc8ee62c	压力传感器	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	t		OPINE-2088		2017-09-16 15:21:21.412+08	2017-10-10 11:47:24.75+08	f755e725-5da2-4b87-b08d-d65d8baf825c	0
d3245ff1-0781-49bd-b37c-e245a350a709	单轴倾角仪	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	t		EAC-TCQ-2	北京东方中恒科技单轴倾角仪	2017-09-25 10:44:21.658+08	2017-10-10 11:47:43.324+08	d333c854-fe3b-4c2a-80d1-6ad0360dcbd6	0
409f2510-dd44-4990-b530-096bf2bcb592	位移传感器	a8a291bf-9873-4ca2-b876-bf54a06f38dd	a8a291bf-9873-4ca2-b876-bf54a06f38dd	a8a291bf-9873-4ca2-b876-bf54a06f38dd	t		SDMS	北京光电所	2017-12-04 14:33:34.372+08	2017-12-05 13:33:45.661+08	ef596a09-07a9-4dad-b937-090093da864b	0
8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125	温湿压传感器	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	t		RY-WSY	锐研华测	2017-10-31 16:29:27.897+08	2017-11-13 16:34:27.013+08	82af10d4-f6f0-4e09-84ce-7053d4b42940	0
c8b20fe8-531f-47aa-96cd-3d48ea0bc238	压力式水位计	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	t		HR8003		2018-08-07 15:28:19.786+08	2018-08-10 17:17:13.813+08	77ef3aea-fa21-4060-b06d-7dbca886f953	4
2e0d00cd-a321-4504-b716-41813848cbdb	内埋式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-NM30	内埋式应变计	2018-03-26 11:16:13.086+08	2019-11-22 15:39:56.645+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	风速风向采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-FLYINGWIS-CFF2D3H	江西飞尚风速风向仪	2017-09-04 14:12:42.458+08	2018-07-09 15:31:17.394+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
3bf186e9-5049-40e4-ba57-b40d90cd1543	温度传感器	111647f0-416f-4e83-83fa-846fa9806308	111647f0-416f-4e83-83fa-846fa9806308	111647f0-416f-4e83-83fa-846fa9806308	t		DS18B20-TO-92	福州创思万维信息技术有限公司温度传感器	2017-09-25 10:54:34.157+08	2017-10-10 11:47:33.324+08	a788cc98-2cdf-451a-ad80-d370c161e448	0
990ac51b-201f-4818-8ac0-06e9997719ed	测斜仪	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		FS1503		2017-08-12 17:30:28.129+08	2017-08-28 11:20:33.311+08	\N	0
40b8c657-2644-4ce2-b490-cf61523a4012	激光测距仪	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	t		YF-YJA03		2017-11-30 15:14:59.436+08	2017-12-20 14:26:52.461+08	4f26e7d9-d058-4d09-86dd-8264282fa0b0	4
6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	固定式测斜仪	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	t		SST2200	量程(-30,30)	2017-12-06 10:37:27.461+08	2017-12-21 09:37:08.11+08	68250dfb-d57f-4895-9658-245ee80b2495	4
bfc79caf-826f-4f9d-a709-241529e118b5	风速仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M12		2018-01-08 16:54:49.738+08	2018-01-09 11:29:54.691+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
f5d141ad-ea96-4398-8712-2a802af988f8	双轴倾角仪	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH01-A30		2017-12-04 12:57:26.158+08	2017-12-21 10:54:41.606+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
93f84dd4-087b-46ef-bdda-9db4adfdb16b	静力水准仪	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	t		CYW11-L5		2017-11-30 13:55:54.566+08	2017-12-20 14:26:05.498+08	4e512f12-08de-4514-8da9-73b4b6c587f3	4
d87be87a-12ba-4e65-97ba-816bcb3e2e62	数字式沉降仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-510	上海隼星传感技术有限公司	2017-11-17 09:45:45.961+08	2018-02-12 10:17:17.004+08	0a638ade-14a7-4e31-b102-953f910425a8	4
b0a937d5-432e-4a49-b044-e4b66d649f52	自动化气象站	dbfb6012-f2a3-4e35-b214-d014eba687e4	dbfb6012-f2a3-4e35-b214-d014eba687e4	dbfb6012-f2a3-4e35-b214-d014eba687e4	t		AWS013		2017-12-05 10:50:36.363+08	2017-12-21 10:38:46.847+08	60ac81b6-ad47-402a-8527-9d9e815b886a	4
ed599be6-4811-4a09-a065-4b29586a4c00	CO探测器	26239c31-9c6a-4328-a8e8-625102c55e2d	26239c31-9c6a-4328-a8e8-625102c55e2d	26239c31-9c6a-4328-a8e8-625102c55e2d	t		CRGD-D01		2017-09-04 20:41:19.193+08	2018-01-05 10:26:55.16+08	ff2281cb-1d19-4ad7-a65d-f9f7f8ffe664	4
fbc83633-74fd-494b-b1b7-75d289358b27	三轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M65		2018-01-08 16:50:48.886+08	2018-01-09 11:29:37.054+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	PM2.5监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_PM2.5		2017-12-01 15:00:04.212+08	2018-03-30 14:38:51.904+08	\N	4
7c42d86a-5801-4ef2-94df-2b5c702ff7f5	变频器	28e14628-e071-41c6-a2b7-dca0773f996f	28e14628-e071-41c6-a2b7-dca0773f996f	28e14628-e071-41c6-a2b7-dca0773f996f	f		vL1000T0015g		2017-12-06 16:09:36.023+08	2018-11-19 17:00:58.36+08	\N	4
80e5052f-477a-4e27-a3bc-0ec95ab3d4a2	三轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M66		2018-01-08 16:50:48.383+08	2018-01-09 11:29:34.237+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
e8d9a100-9650-4afc-a260-9c7bcdea9263	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[-100～0kpa]	MPM47xx[-100～0kpa]	2017-11-29 11:09:17.117+08	2019-01-02 10:51:56.268+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
6629f27c-b28d-400b-9355-71e81a910b2b	法兰式温度一体化变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DWB	迪辉旗下其他品牌	2017-11-29 17:46:58.789+08	2018-01-10 17:00:45.909+08	\N	4
92d06569-3e06-4ceb-91e5-d28589632145	轴力计	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	t		TL-FLJ		2018-01-08 11:44:22.147+08	2018-07-09 17:55:53.697+08	ff833378-60d7-444b-84a6-b01df07bd336	4
a0bf9003-9dbd-4cc7-8bea-7da81ce69f32	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVG12B	深圳市信为LVDT裂缝计	2017-09-04 19:04:13.324+08	2018-01-17 17:36:58.02+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
16ca7eed-6c64-4c4b-a495-6c5f785b86cd	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～100kpa]		2017-11-29 15:24:41.533+08	2019-01-02 10:52:04.586+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
a1a0ce1a-3883-4148-8bd7-a94ce938e39b	DTU	064081fe-2c2c-40ca-9d46-c654a2adb949	064081fe-2c2c-40ca-9d46-c654a2adb949	064081fe-2c2c-40ca-9d46-c654a2adb949	t		F2114	移动2G	2017-08-24 15:48:10.409+08	2019-07-11 16:48:33.03+08	28384069-379b-427a-8293-4558a6fdff7c	0
5e052852-cf91-4092-8497-41556a0c10b8	采集仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		111		2019-11-25 13:10:42.685+08	2019-11-25 13:10:42.685+08	\N	1
aa9f0751-4576-42b2-b09b-a6c3959955df	十五要素自动气象站	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHQXZ603	十五要素自动气象站	2017-09-16 16:10:09.698+08	2017-10-10 11:47:55.828+08	66a47769-cf2c-4708-bde1-48eae1617ade	0
3f80f427-4615-44ae-b2e8-e783733d0ea5	激光粉尘仪	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	t		LD-5		2017-11-20 16:42:59.945+08	2017-11-21 09:25:35.605+08	3a8d9a71-ba47-4661-add4-fef01940e609	0
cbc19e42-a8ba-4a12-83f9-6ef1469df546	123213213	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f		12312312321	啊好的卡刷道具卡撒可见度撒扩大就开始大家ask好的卡视角的卡手机导航季卡圣诞节贺卡设计活动空间啊实打实接口和大师客户端就喀什的健康撒谎的空间撒谎的卡仕达卡仕达凯撒会打瞌睡的卡是大神带我i啊大家啊是	2017-09-30 11:42:38.202+08	2017-09-30 11:43:14.878+08	\N	0
ec223bfa-7244-4458-8180-4205fd31ac24	多通道磁通量采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CTL		2018-03-02 16:15:39.575+08	2019-11-25 15:27:06.066+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
ab34de76-f758-4311-8bfc-dc7054a58ecf	气体罗茨流量计	b4b3a303-1848-4507-bec8-d33983641e32	b4b3a303-1848-4507-bec8-d33983641e32	b4b3a303-1848-4507-bec8-d33983641e32	t		LLQ-××(Z)	浙江苍南仪表集团有限公司气体流量计	2017-09-12 17:57:39.225+08	2017-09-12 17:57:39.225+08	90ff2cb3-6e2f-4da8-a666-8c59808d2b1b	0
57bf451a-e6f5-4df5-a4a7-c2c42a46546f	PM2.5PM10传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NH179-PM	能慧科技	2017-11-23 10:44:00.873+08	2017-11-23 11:41:54.599+08	66a47769-cf2c-4708-bde1-48eae1617ade	0
f1fc4840-f3c9-4752-a703-b0bef637f3ee	风向传感器	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	f		YCT-FX		2018-03-05 10:59:51.135+08	2018-03-05 10:59:51.135+08	\N	4
c094bbbe-bc2a-4223-bba7-539edb03d3b0	双轴倾角仪	24e71772-7488-412d-9acd-26a89f47937c	24e71772-7488-412d-9acd-26a89f47937c	24e71772-7488-412d-9acd-26a89f47937c	t		LVT426-90	无锡迈科传感科技有限公司双轴倾角仪	2017-09-20 16:26:18.669+08	2017-10-10 11:47:19.696+08	80c18b02-bea5-4076-b124-30d8f067dc78	0
6f16c6fa-6d60-481b-95ec-e450227fe268	温湿度传感器	bf10bcff-4fbf-4292-a58d-eb368da87223	bf10bcff-4fbf-4292-a58d-eb368da87223	bf10bcff-4fbf-4292-a58d-eb368da87223	t		HJ-TH802		2017-09-18 20:53:58.366+08	2017-10-10 11:47:29.651+08	c51f8de0-c442-4529-bbae-fe7df077f84e	0
193a9dcf-959d-4cd5-a186-637c11ae97a0	温度传感器	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	t		JCJ100R	九纯健温度传感器	2017-08-28 20:41:57.355+08	2017-10-10 11:48:08.029+08	e3ca47a2-cd34-4d73-8fd7-18ce41c58460	0
f5e0fd8e-6d70-4dd7-830f-42efadf389f5	abc-测斜	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2017-10-31 18:02:48.563+08	2017-10-31 18:02:48.563+08	\N	0
6d1f494d-6e60-4181-85ee-115ea3586c6d	测试	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	f		测试		2017-10-07 20:50:21.222+08	2017-10-07 20:50:21.222+08	\N	0
0c5d070d-fb83-4f78-acc0-a0bd12be6cc2	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～20kpa]		2017-11-29 11:10:16.84+08	2019-01-02 10:52:00.247+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
5ce1bb8e-5512-48aa-9842-c5ea7754f340	风速传感器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DFS-T		2017-11-29 17:32:42.13+08	2018-01-10 09:10:20.413+08	\N	4
e889420f-f8d0-4e0d-aab2-1f2f965e75bb	激光测距仪	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	t		YF-YJA10		2017-11-30 15:18:38.801+08	2017-12-20 14:26:47.032+08	4f26e7d9-d058-4d09-86dd-8264282fa0b0	4
aa86893b-e991-4c57-94a7-b29e7349fe50	高精度数字称重变送器	e7d33a6c-15b9-405b-bf65-a6c054704291	e7d33a6c-15b9-405b-bf65-a6c054704291	e7d33a6c-15b9-405b-bf65-a6c054704291	t		RW-PT01D	接模拟量设备 测力传感器柱式 LCS-C7（2-2000KN）	2017-12-06 15:17:54.523+08	2017-12-21 17:00:49.064+08	abe1595a-5e65-4b76-9b3b-b77ea9626c16	4
7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e	双轴倾角仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M25		2017-11-29 00:29:38.334+08	2018-01-09 11:30:05.238+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
5bc92012-60a1-48ac-840f-575cb4e94c48	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S02		2017-09-12 20:28:25.939+08	2018-01-05 16:40:18.396+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
c7528fab-94f4-4110-9aaf-8964afa09c20	温湿度变送器	78cc8a41-1d48-4575-81ea-c08479cb15d4	78cc8a41-1d48-4575-81ea-c08479cb15d4	78cc8a41-1d48-4575-81ea-c08479cb15d4	t		YT-DY-0102	长沙亿拓传感科技	2017-09-12 17:44:24.644+08	2018-01-05 10:31:24.713+08	f212e468-a42c-4a63-bdc8-93e5e9540fde	4
42b1e83a-cc6f-4051-8187-75dab10af0b1	设备1	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f		ttt	ttt	2018-01-05 18:21:38.304+08	2018-01-05 18:21:38.304+08	\N	2
6e9cc5a0-a0ab-49f5-bf77-13164ed09055	湿度变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DHB-T*W1/3		2017-11-29 17:37:50.895+08	2018-01-10 16:17:56.254+08	\N	4
55be82a9-bf1f-4e1d-bca3-d76fc60beca3	土壤温湿度传感器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DSW-T2W		2017-11-29 17:43:55.651+08	2018-01-10 16:45:02.785+08	\N	4
6f1f679a-d9b7-4fe3-945d-8b83105284a8	称重仪	9782b3cb-2975-4a3a-ab17-630d68c144dc	9782b3cb-2975-4a3a-ab17-630d68c144dc	9782b3cb-2975-4a3a-ab17-630d68c144dc	t		FS-TDXV	北京替帝西交通科技有限公司	2017-09-25 19:45:57.193+08	2018-05-09 17:03:54.182+08	de8b006d-85f7-4436-9c98-4d3e741fcc91	0
13126536-b6af-48d0-b43e-25144b65dd8d	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～50kpa]		2017-11-29 11:11:42.614+08	2019-01-02 10:52:02.361+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
65bd339b-0469-4019-8c96-55a6dbc6b697	激光测距仪	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	t		CHT-GHLMXXC	武汉承拓电子科技有限公司激光测距仪	2017-09-12 18:08:25.075+08	2019-04-16 09:52:43.457+08	5f2040a8-8da6-4f79-bcb6-9b2480beea45	0
f3ad3df8-e1ad-4e05-b479-185ac5ae8602	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～10kpa]		2017-11-29 11:09:49.4+08	2019-01-02 10:51:58.205+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
af95a9b9-46f4-4714-b286-3b7a92ef7c43	d	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f		1		2018-08-09 08:30:07.955+08	2018-08-09 08:30:07.955+08	\N	0
337651d1-80e3-4b07-9e87-79d5e20547aa	DTU	c2df3138-3fc0-4bba-ad0d-80e892055123	c2df3138-3fc0-4bba-ad0d-80e892055123	c2df3138-3fc0-4bba-ad0d-80e892055123	t		H7210		2017-08-24 15:39:23.246+08	2017-11-13 17:46:25.919+08	bb73aebb-0d8d-49b2-80d9-b2d909e304a1	0
b1b251a9-2555-415d-996f-88df44f4df3c	xx	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f		ddd		2018-01-08 12:02:17.327+08	2018-01-08 12:02:17.327+08	\N	1
6bd546bc-55b0-4ee4-8b58-34feec8cdb6c	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～5mH2O]		2017-11-29 15:40:18.338+08	2019-01-02 10:52:09.109+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
5fc4a5d5-9307-4ab0-9fb1-7f017c432911	风速传感器	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	f		YCT-FS		2018-03-05 09:35:14.826+08	2018-03-05 10:26:08.011+08	\N	4
65f4e736-8261-40cc-b3b8-948ab0e4252e	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～50mH2O]		2017-11-29 15:47:20.462+08	2019-01-02 10:52:11.585+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
3b4d2618-c6ec-4efc-a159-501ad68fd36e	测微计	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		111		2019-11-25 13:12:43.513+08	2019-11-25 13:12:43.513+08	\N	4
c52cea56-d5aa-4b14-ad9f-05fb6974e528	双轴倾角仪	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	t		QXJH1	天海科	2017-11-06 11:16:45.182+08	2017-11-07 09:41:36.267+08	87ffcc1e-399b-4921-b6c6-068de960a5ed	0
43e2a07a-c33e-4e54-ba5e-0a948ae4ba61	双轴倾角仪	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	t		QXJH2	天海科	2017-11-06 15:04:16.8+08	2017-11-07 09:41:46.004+08	87ffcc1e-399b-4921-b6c6-068de960a5ed	0
b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	高温熔体压力传感器	49c6faf4-6972-4d51-9e7c-c6df38c9686c	49c6faf4-6972-4d51-9e7c-c6df38c9686c	49c6faf4-6972-4d51-9e7c-c6df38c9686c	t		GYC-1_MIK-RX6000C		2017-12-06 12:00:43.61+08	2018-03-29 09:29:48.917+08	d16cdfd2-9b57-4e88-9c4d-462a066f8642	4
684a2261-481c-4504-9f4b-665baf97aae6	智能固定式测斜仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMQJ-7430	搭配金码新型总线采集仪	2018-01-08 08:03:31.83+08	2018-03-29 09:31:28.732+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
22d007b2-5200-4bf6-85dc-c755a7a75bcf	温度传感器	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	t		LTM8662		2017-12-01 09:59:04.581+08	2018-06-05 14:54:20.492+08	a1132fa4-352a-4b5e-b0e9-d2d4d0df290e	4
d51cfe97-0f8a-4f38-95fb-34208b171056	气体涡轮流量计	5343c9e2-a32e-4c69-97bb-6e526464cb93	5343c9e2-a32e-4c69-97bb-6e526464cb93	5343c9e2-a32e-4c69-97bb-6e526464cb93	t		KRN-KGT	承德热河克罗尼仪表气体涡轮流量计	2017-08-26 15:45:06.802+08	2017-08-26 15:45:06.802+08	901a8f49-757a-40c6-9c1a-81c0ee8dc70b	0
b3014b29-7547-4c85-a147-7ab37d6c328f	高浓度CO2变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DCO2-T3	原DCO2-T*W1/3	2017-11-29 16:58:58.182+08	2018-01-09 17:43:03.053+08	\N	4
e015d9d3-542e-4d54-80c6-39db4ba20877	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～20mH2O]		2017-11-29 15:51:55.313+08	2019-01-02 10:52:14.174+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
24b365fd-4e6e-4800-ad48-d3f082c9b2b8	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～100mH2O]		2017-11-29 15:56:44.935+08	2019-01-02 10:52:16.518+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
f5c42818-e09f-4cb7-b7cb-63b18e8829a9	激光测距仪	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	t		YF-YJA30		2017-11-30 15:25:27.882+08	2017-12-20 14:26:44.318+08	4f26e7d9-d058-4d09-86dd-8264282fa0b0	4
8d1d1382-984f-4aa9-8e57-c2a2c21e0c06	无线温度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M34		2017-11-29 00:28:40.923+08	2018-01-09 11:34:49.472+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
21d99b83-6a52-4465-90c4-125d8330e1c1	分体超声波液位计	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	t		ML-F21		2017-12-06 14:12:59.635+08	2017-12-21 17:01:49.904+08	27a4762a-7072-4c30-b8a6-0a95b580755c	4
5cb8cbd8-060a-431e-836d-22a0b745dc9f	设备一	3de70932-58e5-4e57-ae58-3d1fca145b71	3de70932-58e5-4e57-ae58-3d1fca145b71	3de70932-58e5-4e57-ae58-3d1fca145b71	f		A01		2019-09-18 13:22:10.836+08	2019-09-18 13:22:10.836+08	\N	0
0cffe018-1007-40ed-ac19-a399517129af	A设备	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f		YEEJOIN		2018-01-22 10:20:44.454+08	2018-01-22 10:20:44.454+08	\N	2
3462227d-e989-421c-9f48-c0ae7a573b78	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～3.5mH2O]		2017-11-29 15:35:17.588+08	2019-01-02 10:52:06.858+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T11		2017-11-29 00:26:45.981+08	2018-01-09 11:34:52.568+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
dfbedf15-8cef-4760-9cad-efaab883db3d	无线倾角反馈器	c418cbf6-8903-45be-a0da-bcccfeda9ac0	c418cbf6-8903-45be-a0da-bcccfeda9ac0	c418cbf6-8903-45be-a0da-bcccfeda9ac0	t		XH600ML	西安兴航测控科技有限公司	2017-11-21 15:57:22.465+08	2018-07-23 11:37:52.546+08	f26ae825-10ca-4d2d-a941-201f9f663eea	4
8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	tomcat-172.16.10.152	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f		apache-tomcat-7.0.75	apache-tomcat-7.0.75	2018-01-09 10:35:25.626+08	2018-01-09 10:35:25.626+08	\N	1
cb339f74-5895-4180-a0dc-a3cf12151b0b	无线温度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M35		2018-01-08 17:03:46.464+08	2018-01-09 11:29:25.726+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
217607ad-e8e6-4940-91ff-dc4d831cccbc	三轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M61		2017-11-29 00:31:39.117+08	2018-01-09 11:30:31.719+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
97463615-eb6e-4836-86a1-a282e935ed5d	温湿度CO2光照变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DWSCZ-T8		2017-11-29 17:49:21.388+08	2018-01-10 17:07:28.611+08	\N	4
cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e	温湿度大气压变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DWSP-T5	无公式	2017-11-29 17:52:19.002+08	2018-01-11 09:34:08.746+08	\N	4
0df6f7cc-b408-4936-8fee-d5344c2d8ae9	思维2323	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	f		3434		2018-01-17 13:45:21.829+08	2018-01-17 13:45:21.829+08	\N	0
e833a38c-2409-474d-8d23-86ff4d45b199	激光测距仪	756e574c-b410-4312-99d3-13d78e3cde5a	756e574c-b410-4312-99d3-13d78e3cde5a	756e574c-b410-4312-99d3-13d78e3cde5a	t		SY-L01	深圳市七七星宇激光测距仪	2017-09-13 10:00:10.846+08	2017-09-13 10:00:10.846+08	5937e415-c322-42e4-bddb-3c509b8ac82e	0
84747787-27a7-463d-bd03-9ee55d84fea0	雨量计	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	f		YCT-YL		2018-03-05 10:52:42.552+08	2018-03-05 10:52:42.552+08	\N	4
9604d366-28f8-4291-a5bd-5d049b1e90eb	气体浓度监测传感设备	352bd9cd-bfc9-433a-be60-afa9421c71bf	352bd9cd-bfc9-433a-be60-afa9421c71bf	352bd9cd-bfc9-433a-be60-afa9421c71bf	t		HJ-100	盐城恒嘉物气体浓度监测仪	2017-09-05 10:54:48.222+08	2017-09-05 10:54:48.222+08	17f054b5-a0bc-417d-98cc-cd33881d5f86	0
7697d048-c21e-4b28-8c88-a59de01bae96	PC	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	f		WIN7	gg	2018-01-26 09:39:05.299+08	2018-01-26 09:39:05.299+08	\N	1
05d70310-6689-4174-b4ae-274ab5e8f287	光照传感器	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	t		QY-150A	光照度传感器	2017-09-06 20:01:37.332+08	2017-09-06 20:01:37.332+08	ddff4e34-2418-447f-b236-f346fd2beffe	0
a8add874-7ace-4c3b-a044-8d6da02a9257	测试设备02	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f		Test-002	测试设备02	2018-01-08 13:36:45.735+08	2018-01-08 13:36:45.735+08	\N	1
39dc1e20-9e5e-4776-8459-5354261926fd	静力水准仪	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	t		TCJ100		2017-08-31 16:57:12.36+08	2017-10-10 11:47:40+08	d333c854-fe3b-4c2a-80d1-6ad0360dcbd6	0
fe65a1cd-2040-403c-bb6f-529d4063bc45	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVH20		2017-11-28 16:54:43.321+08	2018-01-17 17:36:55.182+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
34e17d2c-cfa7-42a7-88d0-fc64f13f68c2	温湿度传感器	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	t		LTM8901		2017-09-18 21:05:58.998+08	2017-10-10 11:47:46.327+08	a1132fa4-352a-4b5e-b0e9-d2d4d0df290e	0
393862fc-cfec-404b-873d-c42f5e22bc61	高速动态称重采集仪	1b5ae589-18e9-4263-96b2-dd30c0357ae1	1b5ae589-18e9-4263-96b2-dd30c0357ae1	1b5ae589-18e9-4263-96b2-dd30c0357ae1	f		QSY7718B		2017-11-10 14:03:39.822+08	2017-11-10 14:03:39.822+08	\N	0
1c210656-dc67-470f-b8c3-d653c82e3bb0	固定盒式倾角仪	63e00acb-9caf-4e8b-9460-a5d7507278b7	63e00acb-9caf-4e8b-9460-a5d7507278b7	63e00acb-9caf-4e8b-9460-a5d7507278b7	f		JR-D900	上海集睿信息科技有限公司固定盒式倾角仪	2017-09-21 10:57:18.417+08	2017-10-10 11:47:15.654+08	17f1fbd7-aae7-4114-8811-c4d078b171b3	0
0c5bca0d-95b8-416e-865b-1f09bb49285f	倾斜计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-8300	北京华鉴倾角传感器	2017-09-07 14:40:21.281+08	2018-06-14 15:01:20.214+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
8e782506-4bab-4798-9e24-315107e3cc15	液位计	53eab53b-1a19-4820-b536-c5c56fda6e6f	53eab53b-1a19-4820-b536-c5c56fda6e6f	53eab53b-1a19-4820-b536-c5c56fda6e6f	t		MP3530	上海蒙朗液位计	2017-09-06 19:30:23.422+08	2017-12-21 17:01:42.588+08	a74b3366-a96b-4ac5-90c6-e07851706a72	4
38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	激光测距仪	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	t		YF-YJA80	北京亚飞激光测距仪	2017-08-24 20:03:54.267+08	2017-12-20 14:26:55.818+08	4f26e7d9-d058-4d09-86dd-8264282fa0b0	4
870242c3-963d-417d-85fa-21add06c9e0a	闭环磁通量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CCTB018	江西飞尚	2017-08-26 16:17:23.284+08	2019-06-14 09:57:20.662+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a3b4fd36-dd87-463c-84af-254647a24cc5	双轴倾角仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M27		2018-01-08 17:10:40.66+08	2018-01-09 11:29:00.953+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
b3f251c1-ab5e-4427-8b38-9180d6544783	温湿度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WSD-01T		2017-08-28 21:20:45.552+08	2018-07-31 17:16:15.235+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c9946e27-bce7-41eb-b341-d6b03a7f115f	固定杆式测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GGC01	江西飞尚导轮式固定测斜仪	2017-09-04 09:36:21.614+08	2019-07-22 08:48:34.775+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
9110f259-e269-446d-afa3-798069f4534d	内埋式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-NM15	振弦 采集仪	2017-08-26 15:59:26.836+08	2018-07-31 15:21:22.761+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
9e8050a9-f38a-45c3-a02b-40670bdf19b7	盒式固定测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-HGC01	Modbus 盒式固定测斜仪	2017-08-28 20:27:04.091+08	2019-07-23 21:17:25.531+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f9cf9002-bdbd-458c-8534-37db6183e217	激光测距仪	4544878d-c203-4924-a38f-5486d69d7613	4544878d-c203-4924-a38f-5486d69d7613	4544878d-c203-4924-a38f-5486d69d7613	t		GLS-B40	激光测距仪	2017-09-08 09:20:57.922+08	2017-12-21 11:29:22.002+08	7ee73cad-16da-4534-8e6b-c7d587c2597f	4
112843b4-e834-4892-9ef3-260fe3d90c24	静力水准仪	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	t		CJ-40-SMS-P800	北京岩信静力水准仪	2017-09-02 14:31:47.759+08	2018-11-17 16:00:47.944+08	3f3e4806-08db-428f-9b63-a18f64c64081	4
28abcb7f-eb40-406b-a798-fc280b30638e	双轴倾角仪	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	t		BWM426	无锡北微双轴倾角仪	2017-09-02 14:47:06.912+08	2018-01-09 11:40:11.496+08	b2f45a02-4a2f-49df-87e8-8e9b68269ebd	0
8e812d09-7b95-4c07-ad74-d4c66104e7a7	振弦式拉伸式伸缩仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9450		2018-01-08 08:30:38.752+08	2018-03-29 09:31:03.923+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
223ac440-c7b0-4005-8144-f33ce926d9bf	千斤顶式土压计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9820		2018-01-08 08:17:08.552+08	2018-03-29 09:31:26.139+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
0a25e0b7-784b-46fb-8fa3-d1a99593f343	激光测距仪	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	t		FTM-50S	北京飞拓信达激光测距仪	2017-09-02 14:59:34.552+08	2018-03-16 11:28:53.479+08	11834ff5-6bb0-446f-91d0-1e2e48153c90	4
ca7ff65b-b5a0-49f3-ad0b-6821012604ce	称重仪(含视频)	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DLQ	江西飞尚大连称重仪(含视频)	2017-09-25 20:40:46.363+08	2018-05-09 17:27:22.03+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	0
a8a32974-fa53-4e18-a264-58c885d3c409	声级计	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	t		QY-ZS	邯郸开发区清易电子科技有限公司噪声传感器	2017-09-12 19:48:22.274+08	2017-09-12 19:48:22.274+08	7d219f94-2da6-4390-9a2f-828bdaf2519e	0
d523046b-7e32-486b-a1ab-cac779eb6209	风速仪	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	t		QY-FS	邯郸开发区清易电子科技有限公司风速仪	2017-09-13 09:13:35.734+08	2017-09-13 09:13:35.734+08	7d219f94-2da6-4390-9a2f-828bdaf2519e	0
6850f742-c5b7-4984-b1ef-d01b16015eb9	电子水尺	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	t		BRL700	西安北瑞三元仪表静力水准仪	2017-09-14 14:41:42.352+08	2017-09-14 14:41:42.352+08	4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907	0
ac3a0caf-7018-44d2-9337-32c7194ec412	氨气检测仪	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	t		DTN660-NH3	深圳市华利奥电子氨气检测仪	2017-09-14 14:47:52.13+08	2017-09-14 14:47:52.13+08	047fe32b-391b-4e00-85df-440d3b30a0e0	0
c1738ab8-25cd-4216-823d-0159c2d9fc82	温度计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		HQWD		2018-08-15 17:13:27.441+08	2019-03-05 14:26:04.385+08	0a638ade-14a7-4e31-b102-953f910425a8	4
a96f169e-56b9-49c8-a5cd-caade25fbf14	甲烷检测仪	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	t		DTN660-CH4	深圳市华利奥电子甲烷检测仪	2017-09-14 14:50:50.759+08	2017-09-14 14:50:50.759+08	047fe32b-391b-4e00-85df-440d3b30a0e0	0
3415a2e9-2c44-402f-872c-f0187cef058f	硫化氢检测仪	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	t		DTN660-H2S	深圳市华利奥电子硫化氢检测仪	2017-09-14 14:53:06.067+08	2017-09-14 14:53:06.067+08	047fe32b-391b-4e00-85df-440d3b30a0e0	0
cdf69820-94cb-45a3-acfe-21aa83737595	磁致伸缩液位传感器	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	t		SPH-LS100-GM-1-005-M	上海萨法尔信息工程有限公司电感式变形测量传感器\t	2017-09-14 17:27:01.174+08	2017-09-14 17:27:01.174+08	ffc05365-a153-47ec-a7d9-d13bd3cf93d1	0
2078f06f-be3c-4d10-90b1-200f3bdb00ae	PCL/485变送器	33ff4c6f-7e37-416c-b813-7c2ec986afdf	33ff4c6f-7e37-416c-b813-7c2ec986afdf	33ff4c6f-7e37-416c-b813-7c2ec986afdf	t		PCL/485	广州起重机械有限公司	2017-09-14 19:37:28.661+08	2017-09-14 19:37:28.661+08	52b36a13-6a6b-47f0-83db-afdc362967ff	0
92597060-2385-438d-8a9e-25fee05e4e31	盐分浓度传感器	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	t		MH-TYS	杭州迈煌科盐分浓度检测仪	2017-09-14 20:24:31.979+08	2017-09-14 20:24:31.979+08	03230a76-0bdd-4049-bbfc-e3dee78c4b6e	0
80dbb37c-0408-4a0b-8ef5-dc1acd7c303b	大气负氧离子监测仪	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	t		lon-BEST	重庆唐天大气负氧离子监测仪	2017-09-14 20:36:40.059+08	2017-09-14 20:36:40.059+08	b1288075-7ee2-4ec7-a49f-efe9848eb49a	0
b00292b1-f8e5-46c1-808a-dff46e9557ff	DTU	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	fe6555a4-48c2-4354-b5b3-ab13f7ff2b16	t		CM8150P/CM8250P/CM83		2017-11-13 17:20:19.311+08	2017-11-13 17:34:01.546+08	74c38e2c-4971-46b3-bee6-8a51f116213a	0
a7c51497-66e3-4e63-aa6f-7b243fb8ea77	静力水准仪	d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44	d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44	d30f8980-fb5a-4dfa-a706-1dd2eb2e0e44	t		HT-001		2019-08-13 17:52:48.297+08	2019-08-14 18:12:56.339+08	18e3930c-9d6c-4d92-b0f0-e781fb407078	4
1c909cc1-bb51-4e83-824c-31fb278ce026	噪声仪	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	http://images.theiota.cn/upload/meta_devices/upload_2f0abccc70252e1c3d7ef9eb7cb5101c.png	111		2017-09-26 10:30:13.26+08	2017-11-23 17:25:52.849+08	\N	0
180c854a-5ace-4044-babd-b270f98fde6b	CLAA噪声	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	\N	http://images.theiota.cn/upload/meta_devices/f16833ab-a4a4-45f5-9b39-ad2c66e488f6/69d0ee8e-d752-4520-bfea-8f9716613d77/device.png	CLAA_Lora	中兴展厅, CLAA Lora协议	2017-08-28 19:10:01.737+08	2017-12-06 18:59:24.828+08	\N	0
183c2cd5-5a53-4985-80aa-33a6ce2f82d4	倾角传感器	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	t		PM-TSI/II-D		2017-12-07 11:43:58.681+08	2017-12-21 16:24:59.835+08	3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4	4
96870c78-2ed9-4141-9438-e9415cd6eeb8	倾角仪	52e1e749-befb-43b5-82a2-cc176deaef5b	52e1e749-befb-43b5-82a2-cc176deaef5b	52e1e749-befb-43b5-82a2-cc176deaef5b	t		ZCT260K-LBS-BUS-B1-3		2017-09-08 17:28:38.365+08	2017-12-11 11:10:47.95+08	bdebe97d-391f-4db6-bc26-a7f3fd6ac130	4
497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	智能温湿度变送器	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	t		PKTH300A		2017-09-11 20:33:20.817+08	2017-12-21 16:55:19.24+08	f7eb4ae6-ce4d-4013-ab1e-5a49e96718eb	4
cf03d97a-0c99-494f-821d-da2dc02126dc	基泰4通道振弦采集仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU-4D-ZX		2017-09-09 15:51:25.978+08	2018-05-10 17:50:25.147+08	a4ea8d4c-a663-48d2-a163-47085a402235	1
ac32d002-0463-4bc7-a307-86236e6307a7	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～1000kpa]		2017-11-29 10:55:39.895+08	2019-01-02 10:51:48.214+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
3c8c9002-2d60-43f0-9a2c-52daa53cab54	振弦式裂缝计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9420		2018-01-08 08:30:39.67+08	2018-03-29 09:31:01.912+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
5dcdefa3-da3c-4745-828c-d97fae30d82d	大气压传感器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f		DQY-T5	原型号DQY-T*W1/3	2017-11-29 17:40:19.246+08	2018-01-10 16:38:57.228+08	\N	4
b75d2a21-d798-498b-966f-75375c6967ff	simulator	8938a232-4fc1-469a-8f34-6baad819d6d7	8938a232-4fc1-469a-8f34-6baad819d6d7	8938a232-4fc1-469a-8f34-6baad819d6d7	f		1		2018-11-28 15:02:30.522+08	2018-11-28 15:02:30.522+08	\N	4
eccb6310-f340-4668-9469-3df210aa471d	水位计	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	t		BRL500	西安北瑞三元仪表静力水准仪	2017-09-14 14:34:58.897+08	2019-07-11 16:58:01.249+08	4c1e5bf3-2258-4e8b-b1ed-49f91b4d2907	0
b56e401a-75e7-47ea-84db-6638fd421792	静力水准仪	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	t		NW-102	电感式变形测量传感器	2017-09-09 11:32:45.89+08	2018-07-04 12:35:21.114+08	485c9ff0-3616-4b61-a3a0-eab1e99472dd	4
ae93a369-2ef8-4e20-83d6-d2f89076b115	固定测斜仪	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	t		TL_GS230	非采集仪	2017-09-09 14:39:09.774+08	2018-07-10 10:48:33.42+08	ff833378-60d7-444b-84a6-b01df07bd336	4
fd8e5a82-2b93-4d83-9132-4666b974079d	超声波风速风向仪	9f1dab8d-8776-4895-af81-ece24218042c	9f1dab8d-8776-4895-af81-ece24218042c	9f1dab8d-8776-4895-af81-ece24218042c	t		A60F-2D2	深圳市欧赛龙科技有限公司	2017-09-14 20:56:17.128+08	2017-12-21 16:52:25.594+08	d07843e8-b696-4b7d-87ad-502f03b59ec0	4
5fcd559a-c3dc-4c38-acde-b4b1749b4ab3	PH变送器	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	t		PHG-202		2017-12-07 15:20:39.521+08	2017-12-21 15:52:13.124+08	857d131f-a356-42fe-b772-25f1efbc8f56	4
8583cb29-4726-4532-9530-a5b338d3483c	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S250		2017-12-08 15:30:34.563+08	2018-01-05 16:40:08.17+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
4255e295-7830-45af-ab7c-44fee1668641	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S70		2017-12-08 15:02:49.605+08	2018-01-09 11:38:25.505+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
d32b2513-a8bb-465c-aabf-0832f355ef6b	双轴倾角仪（陀螺仪）	72b27c58-7a56-421c-ab86-abc0a0842cc7	72b27c58-7a56-421c-ab86-abc0a0842cc7	72b27c58-7a56-421c-ab86-abc0a0842cc7	f		VG100		2017-09-19 20:40:00.04+08	2017-12-08 10:00:16.76+08	4cd4dbf8-c29d-429f-8128-50313b373292	4
89ac2618-0c0c-45b5-a8a1-401e2c16189c	挠度沉降传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		DEFRC65J		2018-08-09 14:40:14.947+08	2018-08-10 17:40:27.802+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
24064f03-7c7e-493b-99f2-c926717d28fc	拉线式位移传感器	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	t		BL40	济南博林自动化设备有限公司	2017-12-12 10:23:59.537+08	2020-07-14 17:02:15.596+08	82be60e4-7d72-48fd-91ab-c8616819b103	4
a30d283e-1af2-4531-ab6b-be1186799eea	固定杆式测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GGC01O	老版本	2017-12-14 16:55:58.263+08	2018-07-23 17:15:59.682+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S60		2017-12-08 14:57:53.997+08	2018-01-09 11:38:27.966+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
41da65aa-dd1b-4a8f-8758-13f624e45dad	温湿度变送器	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	t		WS302M2A-T4	T4	2017-12-13 13:40:01.317+08	2017-12-21 10:17:54.154+08	327eb1d2-7493-4c0b-b277-338edd768927	4
b475bf8f-00a0-457f-ad96-95b187dba62f	温湿度变送器	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	t		WS302M2A-T2	T2	2017-12-13 13:21:56.906+08	2017-12-21 10:17:35.717+08	327eb1d2-7493-4c0b-b277-338edd768927	4
14bab7df-524d-4a64-a618-23d4ebcc9b5e	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S30		2017-12-08 14:54:02.525+08	2018-01-09 11:38:30.333+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
8cf5725f-9e2d-447c-b261-cc810a1ed07b	1132	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		11		2017-12-13 17:36:48.215+08	2017-12-13 17:36:48.215+08	\N	0
ea797ffb-87b5-4e0a-8da4-7f627c347b2f	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S200		2017-12-08 15:23:44.895+08	2018-01-09 11:38:37.023+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
34424e2a-ca3d-47c4-8275-532ca1986c8c	千寻传输	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f		HTTP		2017-12-13 14:13:06.331+08	2017-12-14 16:54:22.228+08	\N	2
10018134-99f1-486e-8071-dc652f44d152	温湿度变送器(温湿度传感器）	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	t		JWSK-6		2017-12-12 14:41:03.865+08	2017-12-21 10:13:18.193+08	c19672de-3563-44f5-9189-5ac688227e4c	4
5cd62211-11dd-4deb-83bf-2873ae7dd42f	温湿度变送器	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	t		WS302M2A-T1	T1	2017-12-13 13:09:16.224+08	2017-12-21 10:17:01.181+08	327eb1d2-7493-4c0b-b277-338edd768927	4
16f7e5ff-fb7a-4aa6-a701-9776f7638689	温湿度变送器	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	t		WS302M2A-T5	T5	2017-12-13 13:46:22.542+08	2017-12-21 10:18:00.185+08	327eb1d2-7493-4c0b-b277-338edd768927	4
77d3bafd-4986-4848-b3c9-dfe847c6750e	双轴倾角仪	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	t		BWK226		2017-09-07 20:31:18.854+08	2017-12-21 16:44:37.087+08	b2f45a02-4a2f-49df-87e8-8e9b68269ebd	4
405df805-9088-45a7-b4b2-763299e0c57b	超声波风速风向仪	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	t		CFF2D3H	深圳市智翔宇仪器设备有限公司	2017-12-12 11:55:07.928+08	2018-03-30 14:38:54.611+08	2978b1a9-8de8-4566-838d-04f7916573c1	4
ef629030-d691-43fa-b6b4-b1465e60dace	流量计	10f6acf8-d569-4bb6-8f23-f97b1664d309	10f6acf8-d569-4bb6-8f23-f97b1664d309	10f6acf8-d569-4bb6-8f23-f97b1664d309	t		FLTD-100C	富马	2017-12-11 15:27:02.991+08	2018-07-23 11:36:34+08	db67f5e1-713c-48f9-82f3-c2e24093b97f	4
4d5a3f58-0eda-4443-9dcc-c64bb1785d88	气象传感器	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	t		WXA100-06M		2017-12-07 14:20:25.142+08	2017-12-21 15:57:12.947+08	db1d3a8b-3193-4d57-a9c2-eda69102115c	4
7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	超高精度双轴倾角传感器	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	t		BWS2000		2017-12-07 10:18:13.486+08	2017-12-21 16:44:40.397+08	b2f45a02-4a2f-49df-87e8-8e9b68269ebd	4
dc5bdee9-14f3-4040-ad1c-faf008358890	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S1000		2017-12-08 15:40:02.598+08	2018-01-05 16:40:11.794+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
ceed540f-d7a3-48bc-b8d0-e861e21499a4	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S100		2017-12-08 15:09:50.768+08	2018-01-05 16:40:14.467+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S12		2017-12-08 14:40:29.003+08	2018-01-05 16:40:20.934+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
0fc23377-9f3d-4511-ab1b-8b8df0259d2f	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S12P		2017-12-08 14:49:12.879+08	2018-01-05 16:40:23.296+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
ae356f39-ab83-4ac9-b847-31391780a6c5	sadfsdaf	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	f		asdfsda	asdf	2018-03-12 17:55:34.54+08	2018-03-12 17:55:34.54+08	\N	4
61db6668-b790-47e8-9429-55bfa4f98b90	粉尘检测仪	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	t		HCT-300-1	监测PM2.5、PM10.0和TSP	2017-12-14 14:22:34.574+08	2017-12-14 15:07:33.131+08	3a8d9a71-ba47-4661-add4-fef01940e609	4
4d48086d-804a-426d-9867-0e87efdc74fe	静力水准仪	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	t		TCCJ07-1	东方中恒	2017-12-18 10:57:40.195+08	2017-12-18 14:31:08.183+08	d333c854-fe3b-4c2a-80d1-6ad0360dcbd6	4
7776a9dc-8e14-417c-a5fe-4b1dd1c869d7	千寻见微	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	t		FindMM		2017-12-13 13:59:30.892+08	2017-12-18 17:15:45.518+08	25d5aac3-c08f-4378-9244-570cf8a1cb3e	4
6af0f3be-6cb5-43c8-a588-490e10fdf4b7	温湿度传感器	414bf334-23bf-4e6d-aa00-230325261d81	414bf334-23bf-4e6d-aa00-230325261d81	414bf334-23bf-4e6d-aa00-230325261d81	t		YY-TF100		2017-12-21 16:37:36.666+08	2017-12-21 16:51:40.725+08	c787fe3f-81b1-443e-bcc2-f95da51465cd	4
7e5507c8-b21b-47c0-b9de-f79f09875fc7	扬尘设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		HC-500	合肥汇宸智能控制有限公司	2019-11-25 17:26:39.995+08	2019-11-25 17:28:50.279+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1ac45c30-affc-479b-8ad6-3d63d1fa33f3	气象站	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	f		NL-GPS-26	锦州阳光气象科技有限公司	2017-12-20 10:35:00.76+08	2017-12-20 10:35:00.76+08	\N	4
cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	温湿传感器	6aecaca4-ae30-42e7-9963-28713a74a311	6aecaca4-ae30-42e7-9963-28713a74a311	6aecaca4-ae30-42e7-9963-28713a74a311	f		X001		2017-12-20 15:39:26.987+08	2017-12-20 15:39:26.987+08	\N	4
5e7775c1-0766-436e-b701-b1102833b98d	轴力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZL30	配套 飞尚 多通道振弦采集仪	2018-01-23 14:46:19.404+08	2019-11-26 10:18:43.468+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
701ab719-e85b-4428-ad59-1b7adff31c56	静力水准仪	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HCCS-HC	上海华测创时测控科技有限公司	2017-12-18 17:23:33.713+08	2018-03-08 17:28:43.503+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
ac8a15b2-1daa-48ce-b77f-52e2429c66bd	CO大气监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_CO		2017-12-20 13:59:41.238+08	2018-03-30 14:38:46.707+08	\N	4
5e96e066-3520-443f-80a4-9a3a1a7badd6	PM10监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_PM10		2017-12-20 13:51:02.564+08	2018-03-30 14:38:44.125+08	\N	4
676795c3-0d71-441d-aa0e-62b82dff8193	SO2监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_SO2		2017-12-20 14:03:22.667+08	2018-03-30 14:38:49.178+08	\N	4
1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	温度监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_WD		2017-12-01 15:05:58.342+08	2018-03-30 14:38:40.388+08	\N	4
6bf32a53-c1d4-4014-b0b9-da1af43bda76	NO2监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_NO2		2017-12-20 15:25:01.207+08	2018-03-30 14:38:37.839+08	\N	4
2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	网络型温湿度传感器	42ed9887-912b-4ce0-b062-3f3e0c22fa74	42ed9887-912b-4ce0-b062-3f3e0c22fa74	42ed9887-912b-4ce0-b062-3f3e0c22fa74	t		TH-802		2017-12-12 14:08:56.82+08	2017-12-21 10:05:14.545+08	6069ac3a-b89b-49a3-9472-d2a4a093a479	4
63b7958b-9b1b-49ca-b01c-62ebe4df6376	温湿度变送器	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	t		WS302M2A-T3	T3	2017-12-13 13:27:21.356+08	2017-12-21 10:17:47.044+08	327eb1d2-7493-4c0b-b277-338edd768927	4
2975be5f-7c2a-41d3-9157-e723ecfa9120	位移计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		MSS050F		2018-08-09 14:40:18.299+08	2018-08-10 17:40:30.229+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
3da31fde-9ea8-406f-9a1b-4a9932dbc2df	湿度监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_humi		2017-12-20 15:44:31.13+08	2018-03-30 14:38:32.738+08	\N	4
ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	O3监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_O3		2017-12-20 15:39:19.334+08	2018-03-30 14:38:35.193+08	\N	4
0eb7e920-0359-4b8b-b604-14bc1136e8f5	浊度数字式传感器	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	t		ZS-710		2017-12-19 14:21:58.71+08	2017-12-21 15:51:25.872+08	857d131f-a356-42fe-b772-25f1efbc8f56	4
ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	双轴倾角仪	72b27c58-7a56-421c-ab86-abc0a0842cc7	72b27c58-7a56-421c-ab86-abc0a0842cc7	72b27c58-7a56-421c-ab86-abc0a0842cc7	t		LIS326H	无锡慧联信息科技有限公司	2017-12-08 09:55:09.523+08	2017-12-21 16:28:37.806+08	4cd4dbf8-c29d-429f-8128-50313b373292	4
f90de97b-b6e8-417a-b628-7b8e4bb9e335	振弦式钢筋应力计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9011		2018-01-08 08:30:41.358+08	2018-03-29 09:30:55.888+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
4a0f1cd5-1e52-4ec3-8976-0b1f82031d28	固定杆式测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GGC01O		2018-03-15 14:28:52.089+08	2018-06-25 11:33:54.129+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
7c1b8df9-4088-4cc7-b07b-3299d827d7d0	结冰监测传感器	299decdb-5902-4e11-afcb-9e08926723fc	299decdb-5902-4e11-afcb-9e08926723fc	299decdb-5902-4e11-afcb-9e08926723fc	t		JCI-1600	北京杰成物联科技有限公司	2017-12-21 11:15:16.26+08	2018-01-30 17:41:32.836+08	e4ffaaab-d158-4e82-8c50-074c731d0f8d	4
466241f9-ceea-4552-b9c6-114413124018	VOC监测仪	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f		GRI-IAT_VOC		2017-12-20 15:48:48.764+08	2018-03-30 14:38:30.414+08	\N	4
44c42c98-a486-411a-8813-c6ba48aab00c	振弦式支撑应变计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9000		2018-01-08 08:30:41.926+08	2018-03-29 09:30:52.764+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
1f342dfc-9de3-4d9e-b772-416fa0bfe58a	LoRa室内网关C8100	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	t		C8100		2018-08-14 16:36:12.208+08	2018-08-17 16:26:35.879+08	ffca7b99-078d-433f-b30f-26ca16279162	1
bbcd2556-3714-4360-80d1-af1f8be94404	盒式测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-HGC01-BW		2018-08-24 09:09:28.299+08	2018-08-24 09:55:27.563+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
3f564278-8edf-4fe7-a35e-21b91e6d4129	tcp	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1		2018-06-15 17:08:39.581+08	2018-06-15 17:08:39.581+08	\N	0
099c6283-519f-4946-aa9d-f0059a76b832	轴力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZL40	配套 飞尚 多通道振弦采集仪	2018-01-23 14:46:19.61+08	2019-11-26 10:18:47.672+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6	奥术大师多	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	f		123	奥术大师多	2018-01-22 11:12:08.459+08	2018-01-22 11:12:08.459+08	\N	1
5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	空气湿度计	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	f		RSWSI2026_		2018-01-09 11:10:39.23+08	2018-01-09 11:12:25.09+08	\N	4
c7f01571-7f09-4bef-99d3-fdc2da5fcaa2	双轴倾角仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M26		2018-01-08 17:10:41.65+08	2018-01-09 11:28:54.288+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
c36c08c3-4f22-474e-b748-c6c32288c802	空气温湿度传感器	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	t		THA-01	无公式	2018-01-08 14:10:26.876+08	2018-12-14 11:38:39.466+08	dd99d0cd-27ad-42ff-869e-e00c51c5c62a	4
cc6193d5-14b6-4231-a6f6-905db9c4a33c	倾角传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		INCHY5		2018-08-09 14:55:00.86+08	2018-08-10 17:40:32.858+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
f65db984-9da0-4cef-a9ea-7de5e02ef42f	基泰单通道采集仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU-1R	485信号	2018-01-10 15:59:36.186+08	2018-05-11 14:30:41.116+08	a4ea8d4c-a663-48d2-a163-47085a402235	1
abefa36d-6587-4818-bb39-e14a51c26b4e	双轴数字型垂直安装倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		SCA126V-30	北京瑞芬	2018-01-18 15:22:34.685+08	2018-03-29 14:25:08.525+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
79ef29a0-9796-43ce-957d-952d3b16d70a	双轴数字型垂直安装倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		SCA126V-60	北京瑞芬	2018-01-18 15:22:34.864+08	2018-03-29 14:25:06.17+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
c0cde67c-9734-4a3c-bb52-0caba0ae8724	锚索计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MS05	配套飞尚 多通道振弦采集仪	2018-01-23 14:49:59.702+08	2021-03-02 14:01:12.709+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
09e8eef6-6b70-4cda-84c2-a7680f7a535f	风速传感器	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	t		ZFS-M	无公式	2018-01-08 13:55:43.513+08	2018-12-14 11:38:35.185+08	dd99d0cd-27ad-42ff-869e-e00c51c5c62a	4
e3713c95-6aa3-4a2e-ad89-579a16cb1a03	振弦式土压力计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9800		2018-01-08 08:30:38.137+08	2018-03-29 09:31:06.929+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
e47f8159-ee4b-45c0-b827-30b69d0328d8	全温补高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		ACA626T-30	北京瑞芬	2018-01-16 10:33:58.375+08	2018-03-29 14:24:41.022+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
6a6797bd-fdda-4b37-bbab-ce377a01521b	风向传感器	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	t		ZFX-M	无公式	2018-01-08 14:03:13.644+08	2018-12-14 11:38:32.978+08	dd99d0cd-27ad-42ff-869e-e00c51c5c62a	4
eee64353-8241-4a69-a2ed-5e42bbf4450c	无应力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-WYL-15	无应力计	2018-01-23 15:06:34.91+08	2018-03-02 10:06:38.319+08	\N	4
ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3	温湿度传感器	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	t		RS-WS-N01-8		2018-01-23 17:19:51.356+08	2018-04-16 17:33:22.427+08	07d25988-cf05-433e-bcb0-eba6042997f1	4
c0b0b779-cafb-4d7f-b4ff-64534e422738	双轴数字型垂直安装倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		SCA126V-10	北京瑞芬	2018-01-18 15:22:34.501+08	2018-03-29 14:24:58.237+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
098ca922-fd35-4605-abc8-f65640f8f879	静力水准仪	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f		WH-SZ01-500R		2018-09-11 14:37:10.387+08	2018-09-11 14:37:10.387+08	\N	4
ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5	双轴数字型垂直安装倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		SCA126V-90	北京瑞芬	2018-01-18 15:22:35.024+08	2018-03-29 14:25:03.788+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
c02185df-1224-4e63-aab4-3d284c8bb526	高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		HCA526T-10	北京瑞芬	2018-01-16 09:44:42.405+08	2018-03-29 14:24:36.536+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
e60e191c-767a-479d-a33e-589622634060	基泰集成箱	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU16H	华测 协议	2018-03-13 17:32:48.253+08	2018-04-11 15:58:18.936+08	a4ea8d4c-a663-48d2-a163-47085a402235	1
6a257a93-25ef-48f8-bdd7-0a4674c83a7c	噪声	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2018-06-06 18:05:16.194+08	2018-06-06 18:05:16.194+08	\N	0
078b521f-572a-48bb-b327-09f918ef1e92	路由器yeejoin-haha	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f		h3c-901	h3c路由器	2018-01-08 09:46:41.133+08	2018-01-08 09:46:41.133+08	\N	2
90a2bc12-2214-43ff-9154-9b9212de2c10	轴力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZL10	配套 飞尚 多通道振弦采集仪	2018-01-23 14:46:18.981+08	2019-11-26 10:18:33.856+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
3a8c62b6-14dc-497e-90e8-68c2160e7d08	振弦式锚索计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-1204	（振弦式）和采集仪一起使用	2018-03-07 17:18:03.898+08	2018-03-29 09:31:49.435+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
70c53b9c-f7ec-48ce-b790-bd96754d2d3b	无线倾角计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f		RN635		2019-09-10 14:47:17.454+08	2019-09-10 14:47:17.454+08	\N	4
384f80e3-ad51-400e-b0aa-8a3885961cec	振弦式应变计	abc9e573-4426-4eee-b858-7d309e181f99	abc9e573-4426-4eee-b858-7d309e181f99	abc9e573-4426-4eee-b858-7d309e181f99	t		GBB-110		2018-03-13 23:09:59.892+08	2018-03-30 09:52:47.382+08	509f878b-22a0-470a-81c5-b802c4b1e5b5	4
aa64719f-ac6f-463c-83c5-dcdbd25be81e	智能弦式数码应变计	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	f		JMZX-212HAT	长沙金码测控科技股份有限公司	2017-12-28 20:13:20.322+08	2017-12-28 20:13:20.322+08	\N	4
45aee45b-bc26-4ac7-a8ed-3dcbe187b2de	光纤光栅解调仪	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	f		JEME-iFBG-S		2018-01-08 16:15:24.164+08	2018-03-12 17:01:20.427+08	\N	1
4866de4e-56ad-435f-a21b-0f2b00011e12	弦式传感器采集仪	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	t		SCI-VW1008		2018-01-08 15:25:13.464+08	2018-03-30 09:53:02.923+08	12f8ac3d-c8bf-4da6-aebd-cacf92e0a702	1
46ad9444-1665-48d6-bb9a-37cee37d1604	TCXC振弦式数据采集模块	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	f		TCZX1008	东方中恒	2018-01-03 13:53:36.23+08	2018-01-03 13:53:36.23+08	\N	1
92bad770-f845-4bd8-8e2b-55e5343a2201	土壤水分计	ca665fe1-0d75-4314-9b41-9eb59507d940	ca665fe1-0d75-4314-9b41-9eb59507d940	ca665fe1-0d75-4314-9b41-9eb59507d940	t		MS-10		2018-01-09 11:31:58.803+08	2018-03-30 09:53:20.633+08	a7daadbf-4efe-4bfd-a3a7-d162263502dd	4
6bd84b2f-3226-42ea-94b6-f740a5b60878	应变计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		VWSGK40		2018-08-09 16:19:28.502+08	2018-08-10 17:40:44.7+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
30519425-7bd8-440f-83ea-f9da4767faf9	控制设备	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	f		v1.2		2018-01-03 23:06:41.706+08	2018-01-03 23:06:41.706+08	\N	1
34eeec21-d4e0-4716-a88e-42267e349980	传输设备	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	f		v1.2		2018-01-03 23:08:28.575+08	2018-01-03 23:08:28.575+08	\N	2
e2d104b1-9c57-4a16-8d05-07817bc8b785	振弦式钢筋应力计	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	t		SCI-GJJ		2018-01-08 15:14:58.242+08	2018-03-30 09:53:07.392+08	12f8ac3d-c8bf-4da6-aebd-cacf92e0a702	4
1f00228f-9138-4060-9b9b-1ae22f803af7	智能数码静力水准仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMDL-6220AD	业务侧压强转换公式Δh=(Pi-P0)/(ρ*g)	2018-01-05 17:40:36.038+08	2018-01-11 14:37:56.298+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
6a8343f7-8c07-4851-8924-f8d4f1f5ab78	压力式窨井液位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-XIHU-SEWER-WATER	YF-17	2018-01-04 11:56:59.87+08	2018-01-04 11:56:59.87+08	\N	4
e718c1a2-1c56-4da0-8cb3-36445c6b4f26	双轴倾角仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M26A		2018-01-08 17:10:41.144+08	2018-01-09 11:28:57.068+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
2dfa1f51-0e5a-4e11-a86d-f8487d602ebf	模拟量转485模块	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	t		RS-*-485-*	建大仁科	2018-01-16 16:49:43.474+08	2018-07-23 11:31:40.963+08	82e912a1-10ca-41af-ad56-79cc088ef375	1
e58ee78a-e499-483c-acc8-a42683d62149	磁致伸缩式静力水准仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU4-MSL570	只接采集仪，不单独接DTU	2017-12-29 17:39:54.956+08	2018-06-07 13:41:49.815+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
4d523084-bf91-421f-bafc-f278a63c5541	压力变送器	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	t		SUP-P300	杭州美仪自动化有限公司	2018-01-03 16:19:19.136+08	2018-03-27 11:06:32.835+08	e65ebdf0-aaff-4a5f-97a6-c69a5cafea9d	4
279c47e7-04c2-4841-8fdd-263a5f4af93a	tcp	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2018-06-15 17:09:27.638+08	2018-07-24 17:59:03.227+08	\N	0
9bdf8d5c-e571-4dd4-9614-0099745b0a73	内埋式应变计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9200		2018-01-08 08:30:40.825+08	2018-03-29 09:30:58.029+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
f2c96428-649e-47e9-9b6f-e5749195cb33	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVG20		2017-11-28 16:58:15.923+08	2018-01-17 17:37:01.65+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
0d7661f6-5ce5-490a-9520-ad56ba769d79	便携式多路测量仪	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	t		MP-406logo		2018-01-08 14:19:21.202+08	2018-12-14 11:38:41.67+08	dd99d0cd-27ad-42ff-869e-e00c51c5c62a	1
85ba72e3-3754-4b11-a144-757d7a01f1dc	温湿度计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH06-E01	湖南湘银河传感科技有限公司	2018-01-23 14:02:27.1+08	2018-01-23 15:04:19.33+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
4e3f8da9-5108-45ea-a042-dfab49718c5b	水位计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-650		2018-08-15 09:48:18.548+08	2018-09-21 16:39:41.456+08	0a638ade-14a7-4e31-b102-953f910425a8	4
1c332609-ad1d-4066-b0fa-67df29181432	高精度激光测距传感器	4544878d-c203-4924-a38f-5486d69d7613	4544878d-c203-4924-a38f-5486d69d7613	4544878d-c203-4924-a38f-5486d69d7613	t		GLS-B80		2018-01-23 15:32:11.04+08	2018-04-16 17:35:29.18+08	7ee73cad-16da-4534-8e6b-c7d587c2597f	4
6c0d843c-169e-49b8-8dde-188699cc3077	振弦式钢筋应力计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VR200		2018-01-04 12:11:30.163+08	2018-12-28 15:38:34.649+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
f5f27d3f-b8fd-44ee-97e2-8a78748a424f	振弦式表面应变计	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	t		SCI-YBJ-BM		2018-01-08 15:10:26.494+08	2018-03-30 09:52:53.374+08	12f8ac3d-c8bf-4da6-aebd-cacf92e0a702	4
2fd2ebfb-7858-40db-91a8-d933269ccf64	弦式仪器采集仪	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	t		CWM80x		2018-01-08 15:32:40.748+08	2018-07-09 17:55:51.021+08	ff833378-60d7-444b-84a6-b01df07bd336	1
aa0e3416-fabe-4415-a848-d6cd84a500dd	声光报警器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		YX-02K		2019-08-19 10:39:47.463+08	2019-08-20 09:32:05.41+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
31cb6c0b-e369-46b0-9be4-1de3737503fc	激光测距仪	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	t		RLM-S150		2017-12-08 15:16:37.871+08	2018-01-09 11:38:34.295+08	7c29d0cc-a433-46a9-a6e5-e232dd7a4fcc	4
5c18688a-731b-40d0-b4dd-4ba002026bb3	振弦式表面应变计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9250		2018-01-08 08:30:40.244+08	2018-03-29 09:30:59.959+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
68cb03f4-a381-4eaa-9068-d375ae3500e8	振弦式钢筋计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-1203	（振弦式）和采集仪一起使用	2018-03-07 17:15:48.169+08	2018-03-29 09:31:47.2+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
448efd11-ceec-4f64-93a0-ad7133e38b8d	沉降仪	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	f		BP0-CJ	（搭配采集仪）	2018-01-08 17:33:37.615+08	2018-03-19 15:50:14.106+08	\N	4
607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e	振弦式渗压计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4500SV	配套 基康 (振弦)自动化数据采集仪  原公式水位可直接用振弦公式	2018-01-05 14:53:22.507+08	2018-03-23 11:37:04.901+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
0530f690-1f3c-430e-97c7-6dc82f96fd47	振弦式渗压计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4500AL	配套 基康 (振弦)自动化数据采集仪  原公式水位可直接用振弦公式	2018-01-05 11:07:01.119+08	2018-03-23 14:13:29.826+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
35d1f34b-ccac-4110-9bb6-7e0a3327ef18	振弦式位移传感器	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4450	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:07:00.262+08	2018-03-23 14:13:33.027+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
27f99320-b0dc-4b93-bc24-f5ccf9337356	振弦式喷射混凝土压力盒	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4850NATM	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:07:03.185+08	2018-03-23 14:13:26.857+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
fb1119c8-c430-4066-9f02-60a558d92a68	双轴倾角计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU4-MI600T	南京基泰	2018-01-04 15:33:35.004+08	2018-06-07 10:23:17.938+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
2dead818-122a-42d9-8f52-3aa8d92ab0c3	闭环磁通量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BCT18J-250J	江西飞尚	2018-01-08 19:28:51.331+08	2019-06-14 09:57:31.191+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d14c6b02-4298-4713-b970-eba0aafee88b	振弦式钢索计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4410	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:07:00.02+08	2018-03-23 14:13:39.944+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
7789641b-3a02-4369-b80e-894bacaa5cec	位移计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		MSS150		2018-08-10 09:48:55.477+08	2018-08-10 17:41:01.721+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
17c35362-c638-46de-bea3-840893daf864	振弦式埋入式应变计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4210RCC	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:06:58.797+08	2018-03-23 11:36:58.721+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
feb1fe0d-208d-41cf-9533-596f78fa835c	振弦式表面裂缝计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4420	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:07:00.137+08	2018-03-23 14:13:37.616+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
87bf38c3-0b08-4bcf-98b4-12060fd9a345	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-100	深圳市米朗科技有限公司	2018-02-28 16:21:13.683+08	2018-03-06 14:58:00.343+08	cfe75451-de08-456e-a858-16ed82f63574	4
e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	振弦式应变计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VS100B		2018-01-04 13:43:26.988+08	2018-03-22 14:51:36.611+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e	单轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M62		2018-01-08 15:12:21.591+08	2018-01-09 11:30:25.545+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
157090bc-b53c-4ae3-94fc-4b3804ed6433	液位计	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	f		BP0-YW	（搭配采集仪）	2018-01-08 17:35:44.845+08	2018-03-19 15:50:20.138+08	\N	4
30da8546-87f0-4a5c-bd4f-f9919c954c82	振弦式埋入式应变计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4210	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:06:58.388+08	2018-03-23 11:36:56.616+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
660c0ba2-d714-4ad3-8166-a1fa25a9d7d1	振弦式土压力盒	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VSP520S		2018-01-04 13:57:54.926+08	2019-08-05 11:37:01.354+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
addad535-5578-4010-9d74-dbeab2b9e9eb	全温补高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		ACA626T-90	北京瑞芬	2018-01-16 10:34:00.716+08	2018-03-29 14:24:45.646+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
d8860bee-374c-497a-a33a-258af59e3690	振弦式孔隙水压力计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VP500		2018-01-04 11:48:49.698+08	2018-03-23 14:13:04.342+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
ba349741-3d03-49c6-a2cf-9e2156fd36c4	振弦式固定式测斜仪（MEMS）	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-6150D-2	双轴	2018-01-05 11:06:57.93+08	2018-03-29 15:34:59.593+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
ff38a597-0318-47bb-a647-5ad78dd2dca8	全温补高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		ACA626T-60	北京瑞芬	2018-01-16 10:33:59.639+08	2018-03-29 14:24:43.308+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
1fff247a-6494-4752-91b7-74565fa1f314	传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		123		2019-10-11 14:16:26.972+08	2019-10-11 14:16:26.972+08	\N	0
5dced7e6-e4c2-4e43-82a2-6b994fb790b4	称重传感器	5355fb27-5945-43ae-bc43-697b572a7363	5355fb27-5945-43ae-bc43-697b572a7363	5355fb27-5945-43ae-bc43-697b572a7363	f		DL101	上海尚衡电子有限公司	2018-03-06 16:50:09.43+08	2018-03-06 16:50:09.43+08	\N	4
d53887ba-c67a-4b45-a1ed-1a61fbde6c4c	综合采集模块	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMZX-16A	目前只有 孔隙水压传感器搭配	2018-01-11 11:13:31.319+08	2018-03-29 09:31:20.223+08	941c9c57-031c-4e4c-9a2b-5e544e387274	1
85f5b6fd-92cc-4d22-9dff-952c59003e3f	风速传感器	83c80841-82ec-434a-835a-9907f3b225a5	83c80841-82ec-434a-835a-9907f3b225a5	83c80841-82ec-434a-835a-9907f3b225a5	t		YJ-FS100	模拟量输出  风速0-70	2018-01-09 14:14:58.417+08	2018-03-30 09:53:16.461+08	2249ba53-148c-4f52-a223-5baccdb2b356	4
6aa982a5-d7a3-48ee-b1dc-afe4686ce796	孔隙水压力计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9500		2017-11-25 11:53:42.317+08	2018-03-29 09:31:23.937+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
0dcb57e3-244f-44d3-8f9c-a50fc74481a8	四路模拟量采集模块	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	t		ZL-524		2018-01-08 18:26:58.101+08	2018-07-23 09:10:48.013+08	c41ab05c-aa3d-4d60-9dc3-217323b6e9c7	1
cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f	北斗星创采集仪	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	f		BP-Collector	占位  型号未知	2018-01-08 17:44:21.334+08	2018-03-19 15:50:22.39+08	\N	1
8bab3e11-dc23-4082-97ec-a04e78fa19c3	锚索计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MS40	配套飞尚 多通道振弦采集仪	2018-01-23 14:53:15.962+08	2021-03-02 14:00:51.693+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
bbfa13d3-fd42-4230-97e6-792463dbaf85	锚索计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MS10	配套飞尚 多通道振弦采集仪	2018-01-23 14:53:15.164+08	2021-03-02 14:01:07.952+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
58647986-2640-4318-902a-5ee7d04150ef	新总线型采集模块	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f		JMJK-II		2018-01-11 10:36:37.36+08	2018-03-08 17:28:53.883+08	\N	1
608c11f3-91d9-4d92-9459-a4f7eb20bf1d	光纤光栅温度传感器	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	f		JEME-iFBG-JFSS-01T	无公式	2018-01-02 17:33:10.069+08	2018-03-12 17:01:16.293+08	\N	4
1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	锚索计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MS30	配套飞尚 多通道振弦采集仪	2018-01-23 14:53:15.764+08	2021-03-02 14:00:56.507+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
64d50498-d37a-4f4a-99f8-2268e82a035e	三轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M63		2018-01-08 16:50:49.799+08	2018-01-09 11:29:40.045+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
f9331a24-582f-45b8-bea8-b919ffd48516	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T15		2018-01-08 16:27:57.438+08	2018-01-09 11:30:00.134+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
e5b27a73-2d4c-4b53-8bcd-86583097a730	温湿度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M33	牧坤	2017-11-01 15:38:54.164+08	2018-01-09 11:35:04.901+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
0beb606c-f306-4476-8526-31646c8107e5	风向传感器	83c80841-82ec-434a-835a-9907f3b225a5	83c80841-82ec-434a-835a-9907f3b225a5	83c80841-82ec-434a-835a-9907f3b225a5	t		YJ-FX100	模拟量输出	2018-01-09 14:07:31.153+08	2018-03-30 09:53:12.3+08	2249ba53-148c-4f52-a223-5baccdb2b356	4
537cf41f-69a4-47de-81ee-63485ab8df1d	开环磁通量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CCTK018	江西飞尚	2018-01-08 19:23:48.674+08	2019-06-14 09:57:26.826+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
145b9864-56d6-41e0-9a6c-3c68394e65e7	裂缝计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		CRA4420		2018-08-10 09:21:02.376+08	2018-08-10 17:40:47.566+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
b914a394-bbd8-4ff4-857e-02a2d8eb6d25	11	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f		212		2018-01-22 17:01:19.494+08	2018-01-22 17:21:22.238+08	\N	1
5f908b85-0f3a-48c0-bc83-8e191731a754	温湿度传感器	7208e2c1-ccf7-46f5-b073-bbab61904cf2	7208e2c1-ccf7-46f5-b073-bbab61904cf2	7208e2c1-ccf7-46f5-b073-bbab61904cf2	t		KM-XD300D-HT	深圳市科润美科技有限公司	2018-01-08 17:34:18.69+08	2018-01-17 18:00:00.506+08	2bbaee41-1980-459c-8053-311857717ee9	4
f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	锚索计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MS20	锚索计	2018-01-23 14:53:15.373+08	2021-03-02 14:01:01.621+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ecfacbbe-037c-42cb-89ce-68a2e6170758	振弦式钢筋计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4911-210	配套 基康 (振弦)自动化数据采集仪	2018-01-05 11:07:03.685+08	2018-03-23 11:37:00.639+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
3eb1b2e4-ba3a-4329-a821-33a7f5bec873	测缝计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH02-I10	湖南湘银河传感科技有限公司	2018-01-23 14:05:00.636+08	2018-01-23 15:04:16.386+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
b750e865-af38-40e9-a478-16fefb4cb618	振弦式单点位移计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-A3	配套 基康 (振弦)自动化数据采集仪 	2018-01-05 11:07:04.188+08	2018-03-23 11:37:02.792+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
bc476c11-0887-40fb-ae9e-06ab514a44c0	温湿度传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-WSD-01T		2018-01-05 16:29:05.814+08	2018-04-09 16:07:46.575+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
abfa6634-cca0-4696-b67e-1c2eb2e57c9b	振弦式钢筋计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4911-300	配套 基康 (振弦)自动化数据采集仪	2018-01-05 15:11:20.7+08	2018-03-23 11:37:14.172+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
d2a5375c-0240-4435-9b8f-a62372fafaca	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY04	配套飞尚多通道振弦采集仪	2018-01-05 15:36:58.408+08	2018-12-06 11:55:48.797+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY08	配套飞尚多通道振弦采集仪	2018-01-05 15:36:59.027+08	2018-12-06 11:55:52.379+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
780ffe7d-7369-4d2f-9184-32790466f2ba	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY10	配套飞尚多通道振弦采集仪	2018-01-05 15:36:59.844+08	2018-12-06 11:26:19.127+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	轴力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZL20	配套 飞尚 多通道振弦采集仪	2018-01-23 14:46:19.178+08	2019-11-26 10:18:38.435+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f63309ff-a714-4bd7-9052-30c217fa982e	挠度传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		DEF110E		2018-08-10 09:43:03.956+08	2018-08-10 17:40:58.295+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
175e2759-ae38-4ac5-a62c-6ed4877f3863	多通道振弦采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-F32	modbus 多通道振弦采集仪	2018-01-05 11:16:01.978+08	2019-12-13 11:30:45.217+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
abaf6bf4-288f-4d21-9fab-515213e6dcac	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY02	配套飞尚多通道振弦采集仪	2018-01-05 15:33:22.322+08	2018-12-06 11:55:46.686+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb	电压电流类采集仪	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-4108	8通道	2018-08-10 09:23:32.703+08	2018-08-10 17:40:49.88+08	40f627af-dfd1-4cd2-9921-110d47d4461c	1
b6095ab3-88ff-4a71-8f42-f0656b301e1e	内埋式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-NM50	配套 飞尚 多通道采集仪	2018-01-05 11:50:25.104+08	2018-07-31 15:21:27.245+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b	6通道无线数据采集单元	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f		T420		2018-08-24 15:26:31.7+08	2018-08-24 15:27:16.328+08	\N	1
9a9aa01c-948e-49a2-964f-cee49def906c	湿度传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		THD7202-H		2018-08-10 09:35:53.04+08	2018-08-10 17:40:55.882+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
c50b3ecc-a416-4991-b64f-f2c79d8d1848	振弦式钢筋计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4911-400	配套 基康 (振弦)自动化数据采集仪	2018-01-05 15:11:19.824+08	2018-03-23 11:37:11.951+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	表面式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BM15	表面式应变计	2018-01-05 12:01:35.785+08	2018-07-31 15:21:29.471+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
24ff3733-db3f-4d37-b90a-edd44a77e054	3	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f		3		2018-03-07 16:15:57.23+08	2018-03-07 16:15:57.23+08	\N	2
11f0a3dc-13ad-4c40-ae16-1b2f1d139564	表面式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BM30	表面式应变计	2018-01-05 14:02:09.782+08	2018-07-31 15:21:31.786+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	内埋式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-NM30	配套 飞尚 多通道采集仪	2018-01-05 11:50:22.281+08	2018-07-31 15:21:25.105+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2574b00e-2491-471c-925a-5b713afa9561	(振弦)自动化数据采集仪	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-Micro-40N	基康采集仪	2018-01-05 11:47:57.113+08	2018-05-28 18:08:13.879+08	b28ef84f-ad39-4657-8465-7968e542bdcd	1
a5da9800-2b00-4701-8793-3aaad3e140f6	固定倾斜仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-830		2018-08-15 10:53:47.742+08	2018-09-21 16:39:38.137+08	0a638ade-14a7-4e31-b102-953f910425a8	4
a5766cb2-27a1-4d0a-939b-ac6aa0871a81	振弦式地锚荷重计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9900-50T		2018-08-24 15:55:16.944+08	2018-08-24 16:46:27.622+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
424f45f6-916c-4383-bce4-c71153f82e63	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY20	配套飞尚多通道振弦采集仪	2018-01-05 15:48:51.349+08	2018-12-06 11:26:21.356+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
307cf077-4fd9-4e6c-a60b-33fddf42a0e4	温度传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		THD7202-T		2018-08-10 09:33:09.084+08	2018-08-10 17:40:53.384+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
db974c14-3d61-403d-b847-e0523ad53964	翻斗式雨量计	7370f07e-1811-46e8-a775-d25a9ccd4a52	7370f07e-1811-46e8-a775-d25a9ccd4a52	7370f07e-1811-46e8-a775-d25a9ccd4a52	t		TY-R4	上海物联网有限公司	2018-01-09 15:01:35.175+08	2018-01-12 11:31:59.855+08	bbfeac1a-1c70-45d1-9180-d63be822d7f2	4
5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	温湿度传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-WSD-01M	江西飞尚科技有限公司温湿度传感器	2018-01-05 16:29:20.57+08	2019-03-15 16:43:27.397+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
771be2fa-a2f9-4ba8-8c08-76b091627b87	固定杆式测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GGC01M	江西飞尚导轮式固定测斜仪	2018-01-05 16:27:59.061+08	2019-03-15 16:43:06.316+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
2663fcb4-832b-4bd9-ac6e-4a58835355cb	节点传感器	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	t		SMTN-MJ		2019-11-26 16:13:30.977+08	2019-11-27 09:23:01.936+08	3ced2ad4-50ab-4f5d-b3ca-fc19063f1879	4
f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	锚索测力计	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	t		TL-XHL		2018-01-08 11:40:11.751+08	2018-07-09 17:55:46.305+08	ff833378-60d7-444b-84a6-b01df07bd336	4
2d9520e9-143b-48c2-960f-5c9dca7a21b4	内埋式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-NM15	内埋式应变计	2018-01-05 16:26:30.075+08	2018-06-26 10:46:05.806+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
72b0bf25-78ae-4ab5-995b-c83cfbf52484	高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		HCA526T-60	北京瑞芬	2018-01-16 10:34:03.974+08	2018-03-29 14:24:53.144+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
4253e350-b64f-4b81-b19b-bcd45c6181ad	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVG36-40C	深圳市信为LVDT裂缝计	2018-01-08 10:24:01.997+08	2018-01-17 17:37:16.988+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
0bae88b4-e518-4869-96ea-c833160a9914	高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		HCA526T-90	北京瑞芬	2018-01-16 10:34:04.384+08	2018-03-29 14:24:50.774+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
c53d6302-b66b-40f4-b190-4d5447180ba7	单轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M68		2018-01-08 16:22:25.011+08	2018-01-09 11:30:07.943+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T13		2018-01-08 16:27:58.774+08	2018-01-09 11:30:10.793+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
b1c85f0b-c610-4243-83a4-3a1e87b411ad	钢筋计	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	t		TL-XJG		2018-01-08 10:43:07.551+08	2018-07-09 17:55:48.988+08	ff833378-60d7-444b-84a6-b01df07bd336	4
f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b	风速仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M14		2018-01-08 16:54:47.924+08	2018-01-09 11:29:43.749+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
de0bfd26-fb8e-4f9d-8e0a-0119650952c6	风速仪	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M13		2018-01-08 16:54:48.904+08	2018-01-09 11:29:46.264+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T14		2018-01-08 16:27:58.078+08	2018-01-09 11:30:16.047+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
22dc1e96-f05a-4752-bebf-9d3c1285dace	单轴加速度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M67		2018-01-08 16:22:24.845+08	2018-01-09 11:30:22.093+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
29aa5799-e271-4913-8e21-04edddaa5be1	空气温度计	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	f		RSWSI2026	搭配采集仪	2018-01-08 18:24:45.253+08	2018-03-29 11:39:19.144+08	\N	4
f55d7414-2db9-4c07-ad9b-34637318171e	土壤湿度传感器	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	t		MP-508B	锐研智华电子科技有限公司	2018-01-08 19:23:06.689+08	2018-12-15 09:31:31.478+08	82af10d4-f6f0-4e09-84ce-7053d4b42940	4
0d123bba-3d2e-4252-a27e-af567da8aca1	高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		HCA526T-5	北京瑞芬	2018-01-16 11:50:37.224+08	2018-03-29 14:24:48.494+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
931fef11-654a-4f36-bf37-dbc168c46e84	渗压计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH04-C03		2018-01-23 14:10:45.5+08	2020-11-11 17:23:45.956+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVG36-8C	深圳市信为LVDT裂缝计	2018-01-08 10:24:01.139+08	2018-01-17 17:37:03.983+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
0b9ab6dc-b8e5-4f20-a507-567be8892e4f	振弦采集仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T440	南京基泰32通道采集仪	2018-08-15 13:45:10.773+08	2018-09-21 16:39:34.425+08	0a638ade-14a7-4e31-b102-953f910425a8	1
0eab3179-48cc-4e55-8ec9-b7516415aa75	LVDT裂缝计	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	t		SDVB20M-5A	深圳市信为LVDT裂缝计	2018-01-08 10:24:02.571+08	2018-01-17 17:37:14.197+08	6ef6a382-2a9c-46f8-8c9a-4660c726bfdd	4
7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	融合终端	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f		v1.1		2018-01-24 22:05:34.223+08	2018-01-24 22:49:58.63+08	\N	2
342fde79-43b6-4d56-b5bc-37de3056e9fd	倾角传感器	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		INC628T		2018-08-10 09:50:00.665+08	2018-08-10 17:41:06.76+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
b0a93683-5c88-4f1d-81de-5e41fed44566	振弦采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-F32M	modbus 32通道振弦采集仪	2018-01-05 16:27:38.091+08	2018-07-23 11:17:06.941+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
1e0d3ad9-26a9-427e-be48-685ffe3e84b7	多通道振弦采集仪	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600	上海华测创时测控科技有限公司 	2018-01-05 16:48:16.693+08	2018-03-29 09:31:15.703+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	1
7802bcc3-5fdb-441d-a57a-a89ca2ec158b	振弦式土压力计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-1204	（振弦式）和采集仪一起使用	2018-01-05 16:34:09.762+08	2018-03-29 09:31:42.936+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
930f1b29-d056-40a8-9b86-62829634874c	无线数据采集仪	abc9e573-4426-4eee-b858-7d309e181f99	abc9e573-4426-4eee-b858-7d309e181f99	abc9e573-4426-4eee-b858-7d309e181f99	t		DL-ES2108		2018-01-08 18:00:05.687+08	2018-07-24 18:05:18.94+08	509f878b-22a0-470a-81c5-b802c4b1e5b5	1
d55af283-4d11-4eb7-8099-890d98bfcc0c	振弦式轴力计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-ZL110	（振弦式）和采集仪一起使用	2018-01-05 16:50:29.977+08	2018-03-29 09:31:45.074+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
9abfc35c-6cff-489a-8257-b868954725f4	振弦式内埋式应变计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-1201	（振弦式）和采集仪一起使用	2018-01-05 16:18:59.231+08	2018-03-29 09:31:51.491+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
5eb050b5-8b57-4528-adce-b3633e613b6c	振弦式表面式应变计	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	t		HC-Z1600-1202	（振弦式）和采集仪一起使用	2018-01-05 16:34:08.785+08	2018-03-29 09:31:53.887+08	7c4ecd66-e051-42e2-87c7-2df59811c9e3	4
70177dd0-b5ab-45c0-8338-a6f69138f85f	高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		HCA526T-30	北京瑞芬	2018-01-16 10:34:03.643+08	2018-03-29 14:24:55.664+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
3553eba2-db23-4cb8-b96d-e0d443644324	光栅光纤解调仪	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	t		FT810-8		2018-08-16 15:26:39.98+08	2018-11-22 16:21:22.471+08	2169a008-9684-4625-b3ba-389b70c17ad1	1
49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae	振弦式渗压计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4500S	配套 基康 (振弦)自动化数据采集仪  原公式水位可直接用振弦公式	2018-01-05 14:53:24.803+08	2018-03-23 11:37:07.437+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
7bd233a3-8bb9-45d7-8298-278d0288de46	测试拜安裂缝计	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	f		baian-lf		2018-08-16 16:25:36.764+08	2018-08-16 16:30:25.379+08	\N	4
ada233fb-1f59-4f50-991c-049331716bbf	振弦式钢筋应力计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-950		2018-08-15 14:40:50.438+08	2018-09-21 16:39:14.773+08	0a638ade-14a7-4e31-b102-953f910425a8	4
e6a3a1f5-2a8f-48a0-9758-407065bae1e9	振弦式量水堰计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4675LV	配套 基康 (振弦)自动化数据采集仪   原公式水位可直接用振弦公式	2018-01-05 14:57:25.89+08	2018-03-23 11:37:09.71+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
a54c400e-8b31-47ec-9820-550d04916f47	无线温度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M37		2018-01-08 17:03:45.936+08	2018-01-09 11:29:31.498+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
d3ae39b6-419c-4d57-a353-69768f82908a	激光位移传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		T12		2018-01-08 16:27:59.724+08	2018-01-09 11:30:13.425+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
947fdddf-6d80-4972-88cc-601559ca3458	光纤光栅应变传感器	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	f		JEME-iFBG-JFSS-04	无公式	2018-01-08 16:40:09.748+08	2018-03-12 17:01:24.298+08	\N	4
56e2d696-3384-449a-9072-46e2a18adbc8	多通道应变采集仪	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	t		YBY-6010		2018-09-19 17:31:06.039+08	2018-09-26 17:13:14.055+08	05617d93-ff63-40e6-8d83-86ec25e6728c	1
7d457a8b-5537-4186-bd68-df0c5868ef7e	host	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	f		1.0.0	主机	2018-01-09 17:00:52.097+08	2018-03-15 11:44:04.544+08	\N	2
933a027b-e620-4a6e-8340-d10c7aa29009	无线温度传感器	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M36		2018-01-08 17:03:46.148+08	2018-01-09 11:29:28.351+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
209249f3-7316-4e7d-a3bf-df78afc260eb	振弦式地锚荷重计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9900-200T		2018-08-24 16:11:23.697+08	2018-08-24 16:46:31.466+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
301f43b2-e055-4169-8a27-c3d69b246a19	表面式应变计	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	f		TCBM-150	搭配采集仪	2018-01-12 10:08:09.306+08	2018-01-12 10:10:16.962+08	\N	4
962c0a4a-535e-4f86-a25c-f38e3aa6f144	位移计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-7300		2018-01-08 11:06:18.378+08	2018-03-29 09:30:50.706+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
9f845f40-f7bf-4fe7-828e-8f488aff934e	振弦式埋入式应变计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-920		2018-08-15 14:38:59.631+08	2018-09-21 16:39:22.767+08	0a638ade-14a7-4e31-b102-953f910425a8	4
d6fe2897-a3e2-4aa8-9ba2-459831131cfa	静力水准仪	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	t		HR8066		2018-08-07 15:28:53.892+08	2018-08-10 17:17:16.873+08	77ef3aea-fa21-4060-b06d-7dbca886f953	4
0a341896-3c5d-4e60-af19-fe5f645c6967	水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YWJ-JW		2019-01-19 17:15:44.532+08	2019-08-22 11:38:20.446+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
1489127c-8f48-448b-a86e-1604f08894ce	能见度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-NJD	提取	2018-04-02 15:54:14.31+08	2018-04-02 17:05:50.473+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
19bb2b93-6e2e-4861-95df-67a68bc71fc4	直线位移传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZWY-50		2018-09-25 10:58:50.727+08	2019-08-22 14:10:52.902+08	005e2048-b7e8-4f7c-847f-e9918a66414d	0
4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	锚索计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-MS30		2018-04-16 16:01:22.128+08	2019-09-10 15:45:49.278+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
9297adfa-1972-45e3-a5c4-0f31a0acbe84	表面式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-BM50	内埋式应变计	2018-03-26 11:27:35.43+08	2019-11-22 15:37:13.501+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b0c20a76-7e51-479c-9837-1516be5a1567	振弦式土压力计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-660		2018-08-15 14:40:39.257+08	2018-09-21 16:39:11.41+08	0a638ade-14a7-4e31-b102-953f910425a8	4
77d8ba09-082d-405d-aeca-9a0d66f902c3	DAM-3055	406df859-191e-4c39-9faf-18b70e060d97	406df859-191e-4c39-9faf-18b70e060d97	406df859-191e-4c39-9faf-18b70e060d97	t		16路模拟量输入模块采集仪		2018-03-14 08:03:41.071+08	2018-03-30 09:53:24.487+08	f6f7a405-3c13-4d2b-b6e4-0f071c43ba84	1
362018b7-e626-4eab-a6ad-214d85cfcc03	多点位移计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DWY-20	配套 飞尚 多通道采集仪	2018-01-24 11:34:50.373+08	2018-03-27 11:06:23.397+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d52af3c0-c4b0-4091-96c6-ac3e97535f92	盒式固定测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-HGC01O	Modbus 盒式固定测斜仪	2018-03-15 14:36:49.744+08	2018-06-25 11:33:51.795+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
3454606f-226a-4f3a-95d1-8aa7f602bfec	测试	c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10	c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10	c5e9fae9-aa0f-461b-a663-cb9fc8ff6d10	f		测试	测试	2018-03-20 16:00:18.48+08	2018-03-20 18:35:46.153+08	\N	2
e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	多点位移计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DWY-05	配套 飞尚 多通道采集仪	2018-01-24 11:34:49.455+08	2018-03-27 11:06:25.926+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1e20c41f-4f52-4d61-94e4-ae8496163aed	九轴全姿态电子罗盘	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	t		SEC295		2018-04-03 12:41:11.887+08	2018-05-07 21:06:01.546+08	b2f45a02-4a2f-49df-87e8-8e9b68269ebd	4
fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	振弦式土压力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TY02	振弦式土压力计	2018-03-26 11:41:39.42+08	2018-06-25 10:48:19.281+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b3b4f0f1-7cdc-4892-9e6a-f4936931472c	温湿度计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-TS485		2018-03-20 17:29:17.039+08	2018-04-11 15:44:02.384+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
10f69514-4a4b-4ecd-a318-f8bf0c81a965	振弦式测缝(位移)计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VJ400	频率温度	2018-01-04 11:19:16.703+08	2018-03-22 14:51:33.958+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
4e281788-df68-4193-bbe0-9159eee1f24e	MCU32分布式自动测量单元	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU-32	南京基泰32通道采集仪	2017-12-29 17:15:38.753+08	2018-03-23 11:11:20.332+08	a4ea8d4c-a663-48d2-a163-47085a402235	1
83d8bf62-35f8-48c5-afa2-0d454cb19f70	裂缝计	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-LF		2018-03-26 17:36:26.27+08	2018-03-27 11:10:30.869+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	振弦式土压力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TY10	振弦式土压力计	2018-03-26 11:43:23.154+08	2018-06-25 10:48:24.43+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
f30482b9-b518-4048-8217-bd64158911e6	振弦式土压力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TY20	振弦式土压力计	2018-03-26 11:43:24.163+08	2018-06-25 10:48:32.887+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
61f09dd0-ba56-40e4-a2d1-45dab1143900	光栅光纤温度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-GX-WD		2018-03-16 11:37:21.285+08	2018-04-02 09:34:53.831+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
a9d42f6d-8409-415c-937e-aea8bebf7a50	振弦式土压力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TY04	振弦式土压力计	2018-03-26 11:43:22.682+08	2018-06-25 10:48:21.522+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
5efb0ea9-ca31-4a41-9389-be6c24b3ad2c	O2气体探测器	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	t		O2		2018-05-03 10:35:59.167+08	2018-05-07 11:38:50.234+08	753cecef-e0f0-47e7-8336-915f8d09bc74	4
ae8d62c1-09f0-4fcd-bc62-add087919ff0	Ex气体探测器	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	t		Ex		2018-05-03 10:37:15.469+08	2018-05-07 11:38:54.177+08	753cecef-e0f0-47e7-8336-915f8d09bc74	4
fdef19ae-68f1-4ad5-937b-3cb60e20d8ce	应变计	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-NM03		2018-05-10 17:53:00.775+08	2018-05-10 17:53:00.775+08	\N	4
b3da87da-9dc0-443c-960e-ccea1c35f87e	液位传感器（测试）	406df859-191e-4c39-9faf-18b70e060d97	406df859-191e-4c39-9faf-18b70e060d97	406df859-191e-4c39-9faf-18b70e060d97	f		ZL-YW	测试用	2018-03-14 08:24:49.328+08	2018-03-14 09:21:05.771+08	\N	4
4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee	振弦式二次感应土压力计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-V2000A(C)	配套 基泰MCU32采集仪	2018-03-14 15:32:53.585+08	2018-03-29 15:34:53.551+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
12a0ae21-df74-42b4-94ce-492125b941bd	光栅光纤应变传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-GX-YB		2018-03-21 09:54:46.393+08	2018-04-02 09:35:01.775+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
4696ff30-0685-4f87-bc16-25d640a014a6	VS型振弦式应变计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-VS100		2018-01-17 17:52:43.799+08	2018-03-23 14:12:57.463+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
6c650368-cf3e-4a75-a30d-01b2a37356fb	锚索计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-MS05		2018-04-16 14:07:58.001+08	2018-04-16 17:55:39.626+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
780de52c-47eb-46cb-b77b-3d919bae5ffb	温度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WD120T		2018-01-24 11:26:28.337+08	2018-03-26 16:50:30.763+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d32eacce-7db0-4c15-b17c-f1d870389c14	盒式固定测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-HGC01M	Modbus 盒式固定测斜仪	2018-01-05 16:28:13.389+08	2019-08-22 11:41:16.33+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
290b9462-1958-4dce-a86f-a0f1c503c660	压力式水位计	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	t		HR8006		2018-08-10 13:58:44.431+08	2018-08-10 17:17:20.041+08	77ef3aea-fa21-4060-b06d-7dbca886f953	4
fbe11da9-a717-4a5e-bd90-93f394b46ccc	CO气体探测器	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	t		CO		2018-05-03 10:34:23.741+08	2018-05-07 13:54:25.585+08	753cecef-e0f0-47e7-8336-915f8d09bc74	4
c841ad96-ea6e-4050-b317-a0d79fecbead	迪辉采集仪	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	t		C1W1Z		2018-03-16 09:57:17.059+08	2018-03-19 15:49:56.873+08	0c9fca00-5fd3-43ef-8264-09333066ff13	1
1e7003bf-2cd1-4dcb-9ad9-116151f49ae6	空气质量监测仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-AQI	提取\n	2018-04-02 16:51:42.723+08	2018-04-02 17:12:07.764+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
003540d0-616c-4611-92c1-1cd31005eabf	雨量计	680b589c-4603-4011-a8df-f37373ad8930	680b589c-4603-4011-a8df-f37373ad8930	680b589c-4603-4011-a8df-f37373ad8930	t		FS-YL	温州市华云仪器设备有限公司雨量计	2017-09-12 17:44:48.552+08	2018-04-04 09:31:21.312+08	8764ca24-be3e-4633-8dae-a8a100346a7c	4
67b821eb-caf8-4352-a59b-360e7c9a3ad9	cexie	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-GH		2018-05-10 17:55:50.397+08	2018-05-10 17:55:50.397+08	\N	4
27930598-2f6e-4932-a816-9685f17969b5	多点位移计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DWY-10	配套 飞尚 多通道采集仪	2018-01-24 11:33:34.499+08	2018-03-26 17:24:51.051+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1bda935e-56de-4365-b60e-f02d19299795	表面式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-BM15	江西飞尚内埋式应变计	2018-03-26 11:24:13.103+08	2019-11-22 15:37:07.917+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
fb7bb438-ec7d-41fa-b7f5-737c395901bc	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-A30		2018-06-07 15:37:44.381+08	2020-06-10 13:51:13.233+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
c8fd3080-b416-4381-8bcc-e84c12471281	振动传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		DRHT-EXT-ZD	虚拟	2018-03-16 11:58:51.494+08	2018-06-11 10:44:55.738+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
0d00f0b6-190e-430c-a626-c3e5efd2828c	钢筋应力计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-C		2018-06-01 16:26:56.729+08	2018-12-29 17:12:26.574+08	631adf16-ff91-4949-8e6f-e13680319751	4
38b81b7d-bb3e-4885-aaea-6035faf20d1b	激光测距仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-80-Z		2018-01-24 11:05:24.798+08	2019-06-14 15:43:20.22+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
4c79d9ed-386d-4540-bff3-82caf4d9d329	应变采集仪	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZDQ-ZX	应变采集仪	2018-06-01 16:02:25.951+08	2018-12-29 17:12:23.305+08	631adf16-ff91-4949-8e6f-e13680319751	1
e458516d-60cf-4395-8ec5-df491ae97d3e	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-C30		2018-06-07 14:25:03.217+08	2018-12-20 09:24:53.306+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
5ac91988-c93a-4176-9f33-7c6ba110590f	磁致伸缩水位计	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	t		KYDM-FP1M-600		2018-05-29 11:41:59.932+08	2018-05-29 13:36:59.675+08	b2cdf84b-2f7e-4c47-9132-a579b62a3926	4
077f4241-fe27-4cbc-9918-cf5b8d1c8283	单轴倾角仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU1R-MI600E	接单通道485采集仪	2018-05-11 10:41:15.488+08	2018-05-18 09:49:53.367+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
c9a11ba9-fb0d-4a82-b480-7539948c9b56	双轴倾角仪	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	t		QKQH2-485	协议同无锡北微BWK426	2018-06-11 14:59:44.579+08	2018-06-12 14:11:51.712+08	6a7e732d-908a-424d-a55c-6fe5b860e266	4
9aff4ead-342b-40e8-b365-6a53212df7dd	云盒	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-T2		2018-06-19 09:45:35.591+08	2018-06-19 10:11:46.09+08	40f627af-dfd1-4cd2-9921-110d47d4461c	1
1991c0ef-7dd2-4290-ad34-c8bc82161d2f	激光测距仪	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		MSSLD5		2018-06-19 09:50:26.157+08	2018-06-19 10:11:50.733+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
5838090c-ced5-4fb2-9320-53c516ee9b33	test01	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	f		test01		2018-07-03 19:14:02.247+08	2018-07-03 19:14:02.247+08	\N	4
2bd37bef-1f44-47e9-8086-b0343328eb0c	testshebi	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	f		1.0		2018-07-10 11:55:47.357+08	2018-07-10 11:55:47.357+08	\N	4
717279c9-81b5-4bfe-8dd3-906297d70e41	称重传感器	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	t		BHL-5T	济南博林自动化设备有限公司	2018-03-19 14:57:03.359+08	2018-04-02 11:07:17.213+08	82be60e4-7d72-48fd-91ab-c8616819b103	4
1d48c633-6d83-4b96-a572-6f59a0100c9b	振弦式单点沉降计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-B-LG-100	配套 飞尚 多通道采集仪	2018-01-24 11:30:26.753+08	2018-03-26 16:50:19.742+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d31031ab-0237-41a5-adc0-867c1e9952f7	表面式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-BM30	内埋式应变计	2018-03-26 11:27:33.44+08	2019-11-22 15:37:11.341+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
efdb6604-3283-41b2-9a30-aa532a49d897	温度传感器	420dc3f1-45b2-42e3-a021-6eb9fa3f5769	420dc3f1-45b2-42e3-a021-6eb9fa3f5769	420dc3f1-45b2-42e3-a021-6eb9fa3f5769	f		111111		2018-05-11 15:45:31.12+08	2018-05-11 15:45:31.12+08	\N	2
6ac55754-f252-4ba5-ba9c-72a158734b97	导轮固定测斜仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GGC01-CL	单轴传感器	2018-10-05 09:56:54.394+08	2020-04-05 12:10:19.699+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b55b3b15-5db9-4946-a5a9-b0d352de6a24	风速风向传感器传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHFSX48	配套 BGK-Micro-40D	2018-03-15 16:51:58.425+08	2018-03-16 11:28:56.922+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
9d6f5e3b-2821-48f0-b5c5-997baf346f39	倾角传感器	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	t		LFQJ01	设备主动上传	2018-05-29 14:51:48.717+08	2018-05-29 16:30:43.625+08	c016deb0-edb2-4cb3-93ad-3150c8db04ac	4
7c2ff6f1-5bb6-4736-91cd-1bd068e760aa	风速风向传感器	1a285b38-8605-48ec-ba06-16f5942bee81	1a285b38-8605-48ec-ba06-16f5942bee81	1a285b38-8605-48ec-ba06-16f5942bee81	t		FC-5SX	模拟量传感器	2018-05-28 14:03:33.949+08	2018-05-28 15:43:34.788+08	090ff792-d47f-4b12-b31e-71402175f9b0	4
874e1ee5-94fe-49aa-94b0-6d6bfef680bc	单轴倾角仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MI600E	单独使用  不接采集仪	2018-03-15 17:10:39.884+08	2018-04-17 16:13:22.836+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
c15c6be6-83b0-47ea-ac05-38d625eb8ac8	单轴倾角仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU4-MI600E	单独使用  不接采集仪	2018-04-02 17:17:24.074+08	2018-05-18 09:49:51.045+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
8185c197-338c-42e3-acfc-acba2bb1b180	静力水准仪	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	t		MIC-TD-SM		2018-04-04 16:47:18.027+08	2018-04-08 16:22:03.805+08	48556475-af79-4323-bab2-38274bcb8563	4
219cbb09-9c49-4167-846d-00a8bdfadb9a	绳索张力传感器	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	t		LKCG-Z-1T-485	实际型号 未知   一个变送器对应一个传感器	2018-01-23 10:22:18.296+08	2018-05-21 15:39:30.242+08	eea84701-c78b-4752-96fa-75ea7dd649d4	4
bbf47be7-1d85-4e1b-b356-70be269a0d32	多通道振动采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iZD08	云振动采集仪	2018-03-28 14:52:06.903+08	2018-09-10 17:11:43.42+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
78540227-fdf9-47ed-841e-7b76fed0f788	测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX_Inclinometer	设备主动上传	2018-05-28 10:45:28.317+08	2018-05-28 10:45:28.317+08	\N	4
9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	压差式变形测量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LTG-Y200-Z	压差式变形测量传感器	2018-01-24 11:19:06.355+08	2019-06-14 15:31:21.625+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
4a84b11e-7f79-47ff-b530-6cbc5615b491	超高精度数字双轴倾角传感器	af8080e1-5282-4133-81ad-97ba568cf313	af8080e1-5282-4133-81ad-97ba568cf313	af8080e1-5282-4133-81ad-97ba568cf313	f		CY-QJ02-15R	溧阳市超源仪器厂	2018-04-24 09:41:01.38+08	2018-04-24 09:41:01.38+08	\N	4
ed5ede03-616b-4df7-b741-eea396939ecf	倾角仪	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	f		jmqj-7330adx		2018-05-09 10:42:20.025+08	2018-05-09 10:42:20.025+08	\N	4
51654fb3-cd61-405e-890f-ade3931c8b7e	振动传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-ZD	通用	2018-06-04 18:00:22.394+08	2018-06-04 18:02:38.895+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
66717a8f-3c59-41e0-ab21-bf6bcdde55ea	激光测距仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-A30		2018-06-07 15:54:22.257+08	2018-06-07 15:59:42.259+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
2d547109-73ea-48f5-99b8-48dd9236e19b	http传感器	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	f		testhttpmodel		2018-06-13 16:57:27.849+08	2018-06-13 16:57:40.211+08	\N	4
727fa9b6-b621-41cb-b084-ef3f74f7c496	裂缝传感器	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	t		BT-LF01-01R		2018-04-10 09:58:21.444+08	2018-09-20 17:33:08.533+08	78f556c0-d435-40e7-aece-08b652e146f0	4
b15a4ae0-8100-4809-978d-50914fdc2f32	裂缝计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		CRAB5KB		2018-06-19 09:48:17.006+08	2018-06-19 10:11:48.597+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
af1cd7e8-52e1-4411-9c9a-20bc82a2786d	盒式固定测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-HGC01O	老版本	2017-12-14 16:49:47.934+08	2018-07-23 17:16:02.432+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
bbedec49-a055-4238-9e60-98ad22b84379	风压传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-FYL		2018-08-10 14:52:45.116+08	2018-08-10 15:28:49.609+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY01C	工讯科技(深圳)有限公司	2018-04-08 14:00:40.978+08	2018-08-07 19:04:31.379+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
8b83567e-d874-40f2-a7e4-f78d6cb5415c	基泰四通道RS485采集仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU-4R-SZ		2018-04-02 17:21:29.441+08	2018-06-07 13:17:06.1+08	a4ea8d4c-a663-48d2-a163-47085a402235	1
cf54dd7a-2c8a-4f16-9f92-7484af585f13	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY02C	工讯科技(深圳)有限公司	2018-04-08 14:06:24.491+08	2018-08-07 19:04:29.103+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
50600703-5c4c-4ceb-a44d-d0b79882b1dc	振弦式单点沉降计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-B-LG-200	配套 飞尚 多通道采集仪	2018-01-24 11:32:24.979+08	2018-03-26 16:56:46.441+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
28d8942e-d1ab-40ee-878a-c3b2f60da896	差阻式应变计	6d7887f9-566b-4a52-a1d6-cba8c439173a	6d7887f9-566b-4a52-a1d6-cba8c439173a	6d7887f9-566b-4a52-a1d6-cba8c439173a	t		DI-10	配套 基泰MCU32采集仪	2018-03-14 15:54:05.894+08	2018-03-23 15:00:14.835+08	71110a7c-82f3-4a69-ba1f-179018d3fc1b	4
324eb312-14cd-4931-a6e0-f84880fb8ac5	fdds	cb3f6958-fdbf-441d-8009-1fb1ecc61589	cb3f6958-fdbf-441d-8009-1fb1ecc61589	cb3f6958-fdbf-441d-8009-1fb1ecc61589	f		gff		2018-04-24 15:29:24.93+08	2018-04-24 15:29:24.93+08	\N	4
ee21c9a6-d51b-4f10-83cc-8c9611003cfa	分布式智能云采集系统	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-iFWL-JD	节点	2018-03-15 13:49:32.756+08	2018-04-09 16:13:00.735+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
63429c67-5b55-4b88-998c-65d4464623c8	百叶外壳气温气湿气压传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHF121	配套 BGK-Micro-40D	2018-03-15 16:52:12.15+08	2018-03-16 11:29:00.059+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d	地灾	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		disaster		2019-12-04 17:52:07.964+08	2019-12-04 17:52:07.964+08	\N	4
09252236-560b-47e1-bf81-f774d303ba26	压电式振动传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZD-S10		2018-03-28 14:54:49.031+08	2019-10-30 09:40:28.846+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5d399cb2-7e5a-4a27-bff0-e1769f43499d	振弦式应变计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-V5000B	配套 基泰MCU32采集仪	2018-03-14 15:32:30.948+08	2018-03-29 15:34:45.855+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
aa6f3b0e-9bd2-41e8-801d-730aca3e32fb	振弦式孔隙水压力计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-V3000	配套 基泰MCU32采集仪	2018-03-14 15:32:44.472+08	2018-03-29 15:34:49.399+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
35046949-3e59-43c1-8898-bfc7995c3da9	固定式倾斜计	abe57a42-14ab-448b-b96f-14875e86ca40	abe57a42-14ab-448b-b96f-14875e86ca40	abe57a42-14ab-448b-b96f-14875e86ca40	f		SZZX-DGXXAD		2018-05-30 20:45:30.276+08	2018-05-30 20:45:30.276+08	\N	4
d75d2473-6ed4-437c-8509-682f55d0d407	内埋式应变计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH03-A30	湖南湘银河传感科技有限公司	2018-04-11 09:27:08.912+08	2018-04-26 00:01:41.03+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
08ca737d-d94b-46f2-bb48-33327b7fc0eb	张力变送器	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	t		LKBSY-Z-485	 原 河北荣欧电子有限公司  SX-TJ40	2018-01-23 10:17:42.558+08	2018-04-27 14:42:34.401+08	eea84701-c78b-4752-96fa-75ea7dd649d4	1
3b03e747-cc81-4f6e-9ccf-f828a5534096	119	81751935-b378-45c5-b60a-eeff63ea4460	81751935-b378-45c5-b60a-eeff63ea4460	81751935-b378-45c5-b60a-eeff63ea4460	f		119		2018-05-09 11:11:01.647+08	2018-05-09 11:11:01.647+08	\N	4
34e0efb7-3081-4432-acb3-1f21d62ace7a	采集卡	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	t		K8662		2018-06-05 14:51:24.803+08	2018-06-05 14:54:01.667+08	a1132fa4-352a-4b5e-b0e9-d2d4d0df290e	1
7674c64d-e09e-4257-8726-c64a26ed309a	锚索计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-MS10		2018-04-16 16:00:53.258+08	2018-04-16 17:55:42.135+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
aee112f2-97fd-415e-b3b8-7009ea712ab1	分布式智能云采集系统	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-V2.10	节点	2018-03-08 18:55:40.778+08	2019-11-21 10:09:31.817+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
40a69ace-03f8-4acf-8cf7-6acf43ac2de8	振弦式压力计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-Y1800	配套 基康 振弦采集仪	2018-05-28 10:50:00.15+08	2018-05-28 15:41:49.299+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	温度传感器	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	t		ZL-WD		2017-12-19 17:47:35.432+08	2018-05-21 15:22:10.01+08	c41ab05c-aa3d-4d60-9dc3-217323b6e9c7	4
260e307b-9a7c-4f75-90cd-79710a7d0221	激光测距仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-C30		2018-06-07 15:54:34.22+08	2018-06-07 15:59:44.453+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
4efc7878-409b-4195-b3e6-ed93b829fed9	虚拟DTU网关	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT	通过dtu上报的文件解析	2018-06-14 10:34:18.647+08	2018-06-14 14:17:04.359+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	1
aee912ea-c6a4-4a83-9869-2506e911841f	asd	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	f		asd		2018-01-26 10:53:57.362+08	2018-01-26 10:53:57.362+08	\N	0
28e16f07-c183-4d20-a706-d507fadf1469	11	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f		111		2018-01-30 14:12:41.414+08	2018-01-30 14:12:41.414+08	\N	1
745e1f26-ee66-45dd-9606-052a34a944fc	风速传感器	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	t		SM5386B		2018-01-30 17:38:49.91+08	2018-01-30 17:41:25.128+08	dec876d4-09b0-4aa0-b12b-bcb3ba8f295a	4
67becf68-18c7-4ab3-83b2-d306f89bd25d	烟雾传感器	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	t		SM3571B	上海搜博实业有限公司	2018-01-30 17:26:52.463+08	2018-01-30 17:41:28.959+08	dec876d4-09b0-4aa0-b12b-bcb3ba8f295a	4
bcc5cadb-0395-464b-8ead-ac3917b49e30	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-200	深圳市米朗科技有限公司	2018-02-28 16:21:12.162+08	2018-03-06 14:57:47.568+08	cfe75451-de08-456e-a858-16ed82f63574	4
12adcb99-432b-46f5-9240-dad30ec75ea6	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-250	深圳市米朗科技有限公司	2018-02-28 16:01:53.158+08	2018-03-06 14:57:52.104+08	cfe75451-de08-456e-a858-16ed82f63574	4
22827d64-06e1-4752-a0b6-3cf6fb36cd21	trgdg	e803485f-247f-4792-8d98-37b9a2a70d2e	e803485f-247f-4792-8d98-37b9a2a70d2e	e803485f-247f-4792-8d98-37b9a2a70d2e	f		4		2018-02-02 16:19:55.404+08	2018-02-02 16:19:55.404+08	\N	2
8e752366-9256-4bab-a79b-276a89aea484	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-150	深圳市米朗科技有限公司	2018-02-28 16:21:13.112+08	2018-03-06 14:57:56.127+08	cfe75451-de08-456e-a858-16ed82f63574	4
edcdb4a2-9f82-46d7-bba1-3ebb4f69483e	test2	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	f		123		2018-02-06 17:44:49.256+08	2018-02-06 17:44:49.256+08	\N	2
0f4f59de-cde7-4aec-a402-703e5426bb76	压差式变形测量传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YC-200	压差式变形测量传感器	2018-02-05 11:21:49.783+08	2019-01-02 10:09:55.433+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
7faf119d-7804-470c-a448-516d681cce6b	111	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f		2	1	2018-03-28 15:40:02.837+08	2018-03-28 15:40:02.837+08	\N	4
d148ae2e-c0dd-4e57-a0e8-833d32107f31	液压式静力水准仪	ef70d798-67c0-4772-9639-3d9b805f5941	ef70d798-67c0-4772-9639-3d9b805f5941	ef70d798-67c0-4772-9639-3d9b805f5941	t		RP-1101	上海融频电子科技有限公司	2018-02-05 14:54:12.658+08	2018-03-29 17:27:27.346+08	db1e176b-c3c8-47b1-808b-7e33570add81	4
9497edfc-bee0-4aac-b65d-2f1af60cc760	test	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	f		test	123	2018-02-06 16:34:19.384+08	2018-02-06 16:34:19.384+08	\N	1
167d20c6-d128-4532-9974-d4a55788823e	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-50	深圳市米朗科技有限公司	2018-02-28 16:21:14.316+08	2018-03-06 14:58:04.439+08	cfe75451-de08-456e-a858-16ed82f63574	4
1a6ea847-974c-49f4-b1e6-452665775d49	融入	7a168bfe-18ce-463d-87c0-bb4f221d7942	7a168bfe-18ce-463d-87c0-bb4f221d7942	7a168bfe-18ce-463d-87c0-bb4f221d7942	f		11123221		2018-02-27 16:28:09.403+08	2018-02-27 16:28:09.403+08	\N	0
5ecfc751-afb0-4596-a6f7-85a31eca40c3	智能数码静力水准仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMDL-6220ADT	带温度  业务侧压强转换公式Δh=(Pi-P0)/(ρ*g)	2018-02-07 09:45:44.205+08	2018-02-07 11:27:18.704+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
aaa7d270-43dc-4864-bb0a-967c33658698	位移计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	f		T-700-25MM		2018-02-07 16:40:02.698+08	2018-02-07 16:40:02.698+08	\N	4
ee8205dc-c9b0-4c29-b85f-9a54216ab198	数据采集仪	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	f		YC-M800		2018-02-09 14:00:32.667+08	2018-02-09 14:00:32.667+08	\N	1
c98659b5-30ec-471f-9654-41f5f8df47b0	表面应变计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-900		2018-02-11 16:58:21.729+08	2018-02-12 10:17:31.996+08	0a638ade-14a7-4e31-b102-953f910425a8	4
fdf34922-d64e-4616-9313-96d7d94b8412	数字式倾角仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-800-Y		2018-02-11 17:07:24.764+08	2018-02-12 10:17:38.284+08	0a638ade-14a7-4e31-b102-953f910425a8	4
699b9288-1402-48ab-ae80-31eacc42652e	1	2d6cc626-0499-4724-8803-602deb42bcb4	2d6cc626-0499-4724-8803-602deb42bcb4	2d6cc626-0499-4724-8803-602deb42bcb4	f		1		2018-04-27 16:05:28.259+08	2018-04-27 16:05:28.259+08	\N	4
b53146b9-7737-46cd-a305-e2c9cb286d3d	倾角仪	5b0d5739-36a1-4e88-a838-7ac252171dc6	5b0d5739-36a1-4e88-a838-7ac252171dc6	5b0d5739-36a1-4e88-a838-7ac252171dc6	t		YHQ1000-15	溧阳市超源仪器厂	2018-02-11 17:16:18.657+08	2018-02-12 10:17:47.449+08	003a11c4-85db-4f09-a55a-02b1144840ad	4
7fefd73e-8fd9-48a6-8d7a-76f5796a8197	数字式倾角仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-800-X		2018-02-06 17:17:32.179+08	2018-02-12 10:26:49.834+08	0a638ade-14a7-4e31-b102-953f910425a8	4
9137c92c-6de6-4b00-bafc-a995288280f7	位移计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-700-25MM		2018-02-06 17:32:56.511+08	2018-02-12 10:26:54.672+08	0a638ade-14a7-4e31-b102-953f910425a8	4
a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	智能静力水准仪	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		JL-1		2018-02-27 09:46:30.751+08	2018-04-17 11:52:08.323+08	4f3d93c3-5322-4bef-b358-e98b1589874d	4
0f069d0a-8f7e-4480-b864-201a86725331	http设备	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2018-08-17 11:17:05.429+08	2018-08-17 11:17:05.429+08	\N	0
0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b	mqtt设备	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		q		2018-08-17 11:27:21.513+08	2018-08-17 11:27:21.513+08	\N	0
2e2456a6-9738-456c-abf1-94d5ebad124a	压差式变形测量传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YC-500	压差式变形测量传感器	2018-02-05 11:22:03.782+08	2019-01-02 10:09:57.588+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
36918a6c-395e-4f8c-93b1-7ca400374cf8	6通道无线数据采集单元	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	f		T-420		2018-02-07 16:37:15.373+08	2018-03-19 15:54:18.243+08	\N	1
388cca81-7338-40d3-ba1f-89ec9d5aa2f7	振弦式应变传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-YB		2018-03-25 19:20:49.922+08	2018-03-26 17:28:24.319+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
1f16c362-1f8e-4cbc-8b2c-8f43dd306390	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-350	深圳市米朗科技有限公司	2018-02-28 16:48:44.493+08	2018-03-06 14:58:22.914+08	cfe75451-de08-456e-a858-16ed82f63574	4
d54f6d25-04dc-4847-8dda-9c54d54b2d8f	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-500	深圳市米朗科技有限公司	2018-02-28 16:48:46.676+08	2018-03-06 14:58:32.565+08	cfe75451-de08-456e-a858-16ed82f63574	4
a570a2de-ca66-488a-a078-6c6b14b71f2a	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-450	深圳市米朗科技有限公司	2018-02-28 16:48:46.005+08	2018-03-06 14:58:36.183+08	cfe75451-de08-456e-a858-16ed82f63574	4
8571c1b0-8472-45b5-955f-5a7614a2f08c	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-400	深圳市米朗科技有限公司	2018-02-28 16:48:45.373+08	2018-03-06 14:58:40.164+08	cfe75451-de08-456e-a858-16ed82f63574	4
00b58795-1a49-4171-b60f-a0e32a25f6f6	倾角补偿三维电子罗盘	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	t		SEC345		2018-04-03 11:53:08.683+08	2018-04-04 09:31:10.893+08	b2f45a02-4a2f-49df-87e8-8e9b68269ebd	4
1f6ae927-989f-48b3-9fa4-18518326953b	振弦式埋入式应变计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4200	配套 基态MCU32 采集仪 基康也通用	2018-03-14 16:17:20.804+08	2018-03-23 11:36:50.814+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
fa0123d0-7db7-4412-9670-53175d0c2c40	分布式智能云采集系统	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-iFWL-WG	云网关	2018-03-15 13:45:07.079+08	2019-09-24 11:53:47.581+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
da7a3b52-f9fb-4e4c-bf41-dda355ec5585	testpost	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f		testpost		2018-05-31 07:52:27.744+08	2018-05-31 07:52:27.744+08	\N	4
22fee831-1acb-498b-a4f4-c73ca9e48eac	(RS485)自动化数据采集仪	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-Micro-40D	(无公式)  D系列只接基康485	2018-03-09 16:27:20.874+08	2018-03-28 11:23:57.763+08	b28ef84f-ad39-4657-8465-7968e542bdcd	1
86cc781e-642b-40ee-b49f-1e94aec669ae	工作站	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX_GZZ		2018-03-16 13:57:33.019+08	2018-05-23 10:56:41.017+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	1
1f3f14a2-a6d4-44a5-859b-3406794e7b37	孔隙水压计	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	f		BP0-KY	振弦公式转水压（搭配采集仪）	2018-01-08 17:19:40.364+08	2018-03-19 15:50:16.542+08	\N	4
4142b1cc-3576-456b-b0e4-31e68cc16b32	LVDT裂缝计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-LF10	LVDT裂缝计	2018-04-08 14:40:13.988+08	2019-08-22 11:42:55.111+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
65b984f5-c294-49fa-8433-510d38416095	温湿度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-WSD		2018-03-26 13:57:13.714+08	2018-03-26 17:26:42.873+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	锚索计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-MS40		2018-04-16 16:14:50.346+08	2018-04-16 17:55:34.355+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	锚索计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-MS20		2018-04-16 16:00:54.771+08	2018-04-16 17:55:45.012+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
0363c038-6fa5-4290-adaf-c9afa18f1171	气体采集仪	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	t		SY-01		2018-05-03 08:54:32.771+08	2018-05-07 11:38:41.004+08	753cecef-e0f0-47e7-8336-915f8d09bc74	1
1cfa35c8-129a-45eb-9304-2b105bc22380	风速风向仪	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHFS47		2018-05-09 13:55:22.679+08	2018-05-09 16:35:25.183+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
8fb33fdb-3378-44a4-8e48-ec79ff29a37e	PM2.5监测仪	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	t		XHPM2000E		2018-04-03 11:52:10.931+08	2018-05-17 09:38:57.376+08	6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d	4
21c691a7-7a5a-4262-a3fe-cedb0c37e5fe	称重传感器	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	t		LKCG-C-1T-485		2018-03-09 14:51:58.789+08	2018-05-21 15:39:33.822+08	eea84701-c78b-4752-96fa-75ea7dd649d4	4
e5c11c48-0e03-4229-b879-a487b7cda972	test	af7e2920-f377-444d-be96-71bc0c02c747	af7e2920-f377-444d-be96-71bc0c02c747	af7e2920-f377-444d-be96-71bc0c02c747	f		sssss		2018-05-17 10:26:47.524+08	2018-05-17 10:26:47.524+08	\N	2
200655be-879b-4a82-8a17-1ff1ccb9f961	电流输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		SCA-128T	双轴接不同通道 类似单轴	2018-05-28 11:45:20.145+08	2018-06-01 10:39:02.789+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
f4976287-96c1-42a2-aedf-0d8e8ab739c5	双轴倾角仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MI600E-D	单独使用  不接采集仪	2018-03-29 13:37:27.97+08	2018-11-06 19:45:27.964+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
df1112e3-a161-4260-850f-8f6644389623	静力水准仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU32-MSL570		2018-08-17 11:33:00.257+08	2018-08-17 11:38:46.917+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
c7cd0af4-425e-42e5-a5ad-cc2b9369c84b	锚索测力计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-T		2018-06-01 16:29:14.98+08	2018-12-29 17:12:29.092+08	631adf16-ff91-4949-8e6f-e13680319751	4
3f493145-8216-487c-b145-d58dacf9c570	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY10C	工讯科技(深圳)有限公司	2018-04-08 14:06:27.652+08	2018-08-07 19:04:38.533+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
83881bee-4e8c-4ad6-a11f-45810d035b3d	液压式静力水准仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9410	同 融频电子	2018-05-17 13:55:17.784+08	2019-09-23 09:08:45.785+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	钢筋计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GJ28	配套飞尚多通道振弦采集仪	2018-01-05 14:53:53.022+08	2019-11-09 10:53:15.031+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c69575ab-795c-45ec-8901-f370255beff1	传感器挂公式	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	t		restModel		2018-03-01 14:29:42.722+08	2018-03-01 14:37:59.999+08	4e512f12-08de-4514-8da9-73b4b6c587f3	4
4d3ecec5-32b4-4d9b-aa02-a08275dd10c7	振弦式应变计	6d7887f9-566b-4a52-a1d6-cba8c439173a	6d7887f9-566b-4a52-a1d6-cba8c439173a	6d7887f9-566b-4a52-a1d6-cba8c439173a	t		NZVS	配套 基泰MCU32采集仪	2018-03-14 15:53:53.99+08	2018-03-23 15:00:09.564+08	71110a7c-82f3-4a69-ba1f-179018d3fc1b	4
ea2cc9e5-072a-4994-a232-f79655536c64	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY04C	工讯科技(深圳)有限公司	2018-04-08 14:06:26.067+08	2018-08-07 19:04:33.392+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
10ac4010-ff56-4d05-9e45-55f84f4292aa	直线位移传感器	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	t		FS-ZWY-300	深圳市米朗科技有限公司	2018-02-28 16:48:43.038+08	2018-03-06 14:58:18.085+08	cfe75451-de08-456e-a858-16ed82f63574	4
6de7929d-736b-4c4e-a1c3-e7550a7b6d31	振弦式地锚荷重计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9900-100T		2018-08-24 16:11:22.973+08	2018-08-24 16:46:29.545+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
46272932-067d-4fa2-87ac-85a866b4f691	单轴倾角仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU32-MI600E	接单通道485采集仪	2018-08-17 11:39:56.595+08	2018-08-17 11:40:28.203+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
b0493f78-0950-47ac-bf5f-27797da84f44	振弦式地锚荷重计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9900-300T		2018-08-24 16:11:25.501+08	2018-08-24 16:46:33.581+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
526c42ea-d9a9-48d1-9862-b3118a7ef211	模拟GNSS	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-GNSS	虚拟的GNNS设备，非直接接入使用	2018-03-20 09:46:35.546+08	2018-03-26 17:03:01.876+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
901073b9-b411-427c-9eb6-43a935ec8c27	倾角仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		jmqj-7330adx		2018-05-10 09:13:20.638+08	2018-05-10 14:30:57.188+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
8c2579cd-6aca-4902-a9d6-61e916a4541e	测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		AX-EXT-CX		2018-03-26 16:47:53.755+08	2018-03-26 17:25:40.963+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	4
82db02f1-7f86-44cf-b9a4-d32e28672a84	弦式传感器采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-VW1008	同SCI	2018-05-17 14:43:39.92+08	2018-07-23 11:17:04.727+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
02513eed-ba94-456b-86e0-89ea996b879d	内埋式应变计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-NM50	内埋式应变计	2018-03-26 11:16:11.479+08	2018-06-25 10:48:43.306+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
563221c8-bdb4-4511-b781-25cab72585a7	磁致伸缩式静力水准仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MSL570-485	485单独使用  不接采集仪	2018-05-31 14:37:08.554+08	2018-05-31 14:50:15.258+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6	多通道采集仪	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		gn-NGN		2018-04-12 09:54:19.717+08	2018-04-18 11:28:51.092+08	4f3d93c3-5322-4bef-b358-e98b1589874d	1
cda0b115-60d6-4169-8f45-4a92d6801fb3	PM10监测仪	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	t		XHPM2000E_PM10		2018-04-03 11:39:47.177+08	2018-05-17 09:38:59.775+08	6fa763bc-933a-4b3d-a15f-a9cb6dba7d3d	4
88155a32-3321-4f89-86ba-c204d101cce7	多通道振弦采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-F16	modbus 多通道振弦采集仪	2018-06-15 09:39:55.588+08	2018-07-23 11:17:00.705+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
899dde06-bd1d-4215-963e-23596c3fda7f	123456	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	f	http://images.theiota.cn/upload/meta_devices/5080baff-a15e-42e5-ae75-58f9b31c4576/8a7fdd49-ceba-42de-9a6d-0d0b82601fdb/device.png	12	12	2018-05-28 17:34:00.439+08	2018-05-28 17:36:01.665+08	\N	1
e442b9a5-066f-4cde-b5f3-9709a193c328	123123	e8f15908-b10c-4602-a99d-08d8e689d90b	e8f15908-b10c-4602-a99d-08d8e689d90b	e8f15908-b10c-4602-a99d-08d8e689d90b	f		123123		2018-07-06 17:14:37.665+08	2018-07-06 17:14:37.665+08	\N	1
94540a5f-cb58-4a32-a605-05002a4391ed	11	7875d87e-9ef3-4446-a656-f77742d708a8	7875d87e-9ef3-4446-a656-f77742d708a8	7875d87e-9ef3-4446-a656-f77742d708a8	f		1		2018-07-10 14:47:24.847+08	2018-07-10 14:47:24.847+08	\N	1
7475ac58-b627-442e-b8fc-259c0c1561e7	静力水准仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-J02A		2018-09-26 14:38:16.178+08	2018-09-26 15:23:11.917+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
db345382-4b53-424d-b563-909bfe0a36cd	DT振弦式应力计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT-yingli		2018-09-07 11:22:10.515+08	2018-10-19 10:02:14.994+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
8cb3528e-cadf-463e-9db2-003bb899ebb6	光电光栅温度传感器	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	t		BA-OFT200		2018-08-10 17:03:20.984+08	2018-08-16 16:30:56.069+08	2169a008-9684-4625-b3ba-389b70c17ad1	4
e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2	SO2传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		SO2-C0/1		2018-06-20 10:35:52.471+08	2018-06-21 18:06:15.954+08	\N	4
e2b308df-8629-49a6-ab1d-397df5ab4e45	NO2传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		NO2-C/1		2018-06-20 10:35:53.27+08	2018-06-21 18:06:24.285+08	\N	4
030c456b-e97a-42a6-93b7-a6f48fcce4a6	光电光栅埋入式应变计	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	t		BA-OFS50E		2018-08-10 16:23:43.215+08	2018-08-16 16:30:58.259+08	2169a008-9684-4625-b3ba-389b70c17ad1	4
6c5b2840-b01d-4bb3-8ab1-a831b3880184	DT倾角传感器	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT-QJ		2018-09-07 11:18:27.951+08	2019-09-25 10:32:05.802+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
8b635501-4320-49f5-b573-e4193d4e31b6	表面应变计	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	t		WHYB		2018-09-19 17:32:06.989+08	2018-09-26 17:13:16.686+08	05617d93-ff63-40e6-8d83-86ec25e6728c	4
d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90	振弦式应变计	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	f		HHDZ-VS100B		2018-09-29 15:46:46.72+08	2018-09-30 16:23:39.295+08	\N	4
99c61d5d-4b9d-4fca-9d8c-e6d530b15871	多通道振弦采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-F32O	统一协议  老版本	2018-08-27 14:20:09.984+08	2018-08-27 16:01:46.926+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
a03158bb-03f2-4da6-9ef0-10b837caab9e	水质采集仪	750185f8-2901-4e59-a173-708c3f84f270	750185f8-2901-4e59-a173-708c3f84f270	750185f8-2901-4e59-a173-708c3f84f270	f		SMARTIT-SOIP		2018-11-05 09:08:45.106+08	2018-11-05 10:00:07.148+08	\N	1
00e107aa-a84e-4014-98e7-f0aa931b22ae	固定倾斜仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU32-MI600		2018-09-11 15:57:59.799+08	2018-09-11 16:20:40.256+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
a99d7cc9-7afe-4415-93dd-bcdc193c5121	振弦式测缝(位移)计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-700	频率温度	2018-08-15 14:39:57.298+08	2018-09-21 16:39:07.361+08	0a638ade-14a7-4e31-b102-953f910425a8	4
c1831563-faaf-4e2a-9d49-6b483abbd040	水质传感器	750185f8-2901-4e59-a173-708c3f84f270	750185f8-2901-4e59-a173-708c3f84f270	750185f8-2901-4e59-a173-708c3f84f270	t		SMARTIT		2018-10-31 18:04:59.727+08	2019-10-24 14:16:04.275+08	255aa9dd-04f8-4987-8634-ed802143a025	4
4a91ace7-e5da-44c8-843d-43fb6a130847	电表	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		DDZY9898-Q		2018-10-26 17:54:01.943+08	2018-11-02 13:58:45.899+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cce8a8e4-cd65-4f13-a554-eb06fa2b7caa	温度传感器	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GTT-1		2018-10-11 09:06:27.298+08	2018-10-11 09:08:33.852+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
a5dda81c-6a85-4e7b-97f3-be45b980646e	坑位	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-toilet-pit		2018-10-26 16:15:49.368+08	2018-11-02 14:56:36.007+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
e5ed186c-f248-4b06-ae1c-8ada54d1c67d	液位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MPM4700		2018-10-09 17:02:23.452+08	2018-10-11 15:18:56.586+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b91bca75-6908-439e-9860-f0debec0bf10	虚拟DTU	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	t		BA-V-WG		2018-11-22 16:01:39.284+08	2018-11-22 16:21:24.497+08	2169a008-9684-4625-b3ba-389b70c17ad1	1
830b9ca6-451c-480a-8013-67108cd4173f	温湿度传感器	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	t		XP-WSD		2018-11-13 15:36:10.361+08	2018-11-14 10:13:38.416+08	c10a7b15-97f0-451e-a15c-537f9ba147ff	4
f125a65b-639e-46f7-8b52-6d2f4f2a064a	空气质量传感器	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	t		XP-KQZL		2018-11-13 16:37:13.334+08	2018-11-14 10:13:41.016+08	c10a7b15-97f0-451e-a15c-537f9ba147ff	4
5e44f909-0d21-4d00-82f5-d3502e192e18	塔机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DYL		2018-11-09 17:35:43.397+08	2018-11-27 13:57:19.928+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f12a248f-faab-43f2-bfbe-088da7f471dc	倾角式静力水准仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMQJ-6210AD		2018-11-16 14:10:42.785+08	2018-11-20 16:55:42.453+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
87a47520-e1a3-474c-b8b2-b1fd5dd521a9	多点位移计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9420-5		2018-11-23 10:32:50.884+08	2018-11-23 10:35:47.232+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb	dtu	8938a232-4fc1-469a-8f34-6baad819d6d7	8938a232-4fc1-469a-8f34-6baad819d6d7	8938a232-4fc1-469a-8f34-6baad819d6d7	f		2		2018-11-28 15:04:48.326+08	2018-11-28 15:04:48.326+08	\N	0
c6a59efb-40c2-4104-9b26-7895bb8e072d	高频雷达液位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-Y01		2018-12-03 10:28:58.181+08	2018-12-03 10:45:29.812+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0209176c-7c91-4fe0-9a00-e751fe24c8f8	土壤PH传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHPH49		2018-11-20 15:19:51.004+08	2018-12-13 09:14:20.791+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
d116c1db-0a8e-4cd7-a021-6dedf5987ec4	O3传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		O3-C/5		2018-06-20 10:35:54.627+08	2018-06-20 10:45:39.698+08	\N	4
bfa4cd6a-f4fc-4087-8322-c0dd793cfd39	温度传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		SHT11_T		2018-06-20 11:04:00.661+08	2018-06-20 11:07:23.528+08	\N	4
f88c2cc7-2f89-40e1-ab48-28a17b001737	湿度传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		SHT11_H		2018-06-20 11:04:01.385+08	2018-06-20 11:09:55.906+08	\N	4
4c874d9f-456e-420e-9057-3a8c7de8368c	PM2.5传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		DZ5003_PM25		2018-06-20 11:04:02.537+08	2018-06-20 11:12:46.313+08	\N	4
b58bb3be-9cea-460b-b91b-0281432cc158	PM10传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		DZ5003_PM10		2018-06-20 11:13:47.038+08	2018-06-20 11:14:06.61+08	\N	4
0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01		2018-06-27 13:44:52.475+08	2018-12-24 16:07:38.893+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
624610fd-38ca-4e72-92c8-0492eb66412a	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY03C	工讯科技(深圳)有限公司	2018-04-08 14:06:25.43+08	2018-08-07 19:04:25.841+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
a045d540-6405-495e-af5f-ea705c094472	倾角仪	7e13f613-ffd9-4865-800a-0ca768ab2a28	7e13f613-ffd9-4865-800a-0ca768ab2a28	7e13f613-ffd9-4865-800a-0ca768ab2a28	t		HK-LRQJ		2018-06-25 09:05:33.095+08	2018-08-17 16:41:33.303+08	d63e78b1-32cf-4aca-a896-5c83ebce7b8d	4
b2d406aa-3d16-4f6a-a0cf-201673678a8f	位移计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-WY02		2018-06-21 13:39:44.91+08	2019-05-07 16:25:45.636+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
9fbee940-6591-45b4-a3a9-83abc9c76e85	位移传感器	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	t		LFWY01		2018-06-21 10:55:46.955+08	2018-06-21 16:54:42.511+08	c016deb0-edb2-4cb3-93ad-3150c8db04ac	4
cf379e04-548b-4a35-bafd-4ce52ae84b07	CO传感器	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		CO-C/200		2018-06-20 10:32:24.747+08	2018-06-21 18:06:18.72+08	\N	4
6e1d3878-3ea2-4c73-9137-0ef98781be0c	雨量计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YL		2018-04-11 16:24:01.242+08	2019-08-22 14:29:59.432+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
9c410206-a22f-4b1c-b86f-32fda9f61ca2	无线数传电台	7e13f613-ffd9-4865-800a-0ca768ab2a28	7e13f613-ffd9-4865-800a-0ca768ab2a28	7e13f613-ffd9-4865-800a-0ca768ab2a28	t		HK_LoRa_Hub		2018-06-22 17:30:28.384+08	2018-06-26 10:17:45.589+08	d63e78b1-32cf-4aca-a896-5c83ebce7b8d	1
aa4c3887-4040-4ac1-a908-4ae45f754c3b	压差式静力水准仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-J03B		2018-06-21 13:53:07.624+08	2019-06-28 14:58:52.87+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
0f179575-cae8-4888-a644-1b66be3f8de2	大气质量监测仪	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	t		DZ-IGASQ		2018-06-20 10:26:27.042+08	2019-02-28 09:55:03.369+08	97778045-09eb-4db5-8ee0-8f2607e6248f	4
a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca	网关	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		9000A		2018-06-26 10:32:46.554+08	2018-06-26 10:32:46.554+08	\N	4
793d9a65-784f-4f17-840d-51ac6a2f2ddd	应变计	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		VWSDJ3KB		2018-08-09 15:00:04.564+08	2018-08-10 17:40:35.751+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
847fb856-ef0a-493b-9a30-d2876243481a	温度数据采集分析系统	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	t		ZY-311/T-8		2018-06-27 14:02:16.346+08	2018-06-28 16:37:23.514+08	05617d93-ff63-40e6-8d83-86ec25e6728c	1
9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	压差式变形测量传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YC-1000	压差式变形测量传感器	2018-02-05 11:21:19.464+08	2019-01-02 10:09:50.497+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8	电磁流量计	8877092c-862c-4569-a8b7-b125dea3214f	8877092c-862c-4569-a8b7-b125dea3214f	8877092c-862c-4569-a8b7-b125dea3214f	f		FK-LDG-MK		2018-06-28 15:28:03.034+08	2018-06-28 15:28:03.034+08	\N	4
d56a9be3-7a4a-4c75-91ec-f524bb273574	投入式液位变送器	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	t		SDG-220		2018-06-25 15:29:28.067+08	2018-06-28 15:36:08.353+08	a4159319-ff56-456e-9cd0-1b2bc9ec6ede	4
948c741a-f999-4abe-ae1f-64c23e27462c	温度传感器	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	t		WH-PT100		2018-06-27 14:04:58.273+08	2018-06-28 16:19:37.98+08	05617d93-ff63-40e6-8d83-86ec25e6728c	4
f698a0a5-7e2b-4c2e-a66f-c33ff5f05689	振弦采集仪	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-4238	8通道	2018-08-09 16:17:22.291+08	2018-08-10 17:40:41.482+08	40f627af-dfd1-4cd2-9921-110d47d4461c	1
20e28988-ea9b-4757-9f79-22dce525207a	温度传感器	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	t		NEWD-100	纳微	2018-07-02 10:37:28.255+08	2018-07-03 11:06:29.506+08	485c9ff0-3616-4b61-a3a0-eab1e99472dd	4
c631f2ea-9e5c-415a-b56e-9d96c600e527	分布式智能索具云采集系统	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-SJJD-V1.10	索具节点	2018-08-28 17:55:20.377+08	2019-06-14 09:36:40.764+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
681c7dfc-f592-4339-a323-7a0ef757fd22	ff	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f	http://images.theiota.cn/upload/meta_devices/8ec5f3e2-2dbe-41bd-bdb4-034203f0964f/45e06240-5385-4963-a792-b9854372075d/device.png	ff		2018-09-10 15:27:55.542+08	2018-09-10 15:27:55.542+08	\N	0
51c68d6c-029d-4a88-8802-335e6e6ddf6c	采集仪	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	f		NJSY_		2018-09-13 17:12:19.003+08	2018-09-13 17:12:19.003+08	\N	1
2e84b34b-d5cd-4b0a-b118-8b6835bab0ff	test	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f	http://images.theiota.cn/upload/meta_devices/8ec5f3e2-2dbe-41bd-bdb4-034203f0964f/ac1100ad-d49f-4ea7-b775-ac24c43cea50/device.png	2		2018-09-10 15:41:24.752+08	2018-09-10 15:41:24.752+08	\N	0
6dab819c-b584-4aea-bf13-c12a6a595abb	云盒	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-T3		2018-08-09 16:03:13.754+08	2018-08-10 17:40:38.704+08	40f627af-dfd1-4cd2-9921-110d47d4461c	1
515030fd-3993-442a-89f7-ca844c5671c0	静立水准仪	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	t		NWJL-B-102		2018-07-04 12:31:15.214+08	2018-07-04 12:32:10.337+08	485c9ff0-3616-4b61-a3a0-eab1e99472dd	4
ebd999bc-a789-48f2-ac00-a15049b09e50	包芯温度无线传感器	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	t		C6000-4T		2018-08-14 16:18:30.081+08	2018-08-17 16:26:22.046+08	ffca7b99-078d-433f-b30f-26ca16279162	4
e405d9f6-8b46-4089-94e2-1437036d040b	烟包水分测试仪无线传感器	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	t		C6000-MTH		2018-08-14 16:31:33.427+08	2018-08-17 16:26:32.443+08	ffca7b99-078d-433f-b30f-26ca16279162	4
2425cf54-e1bc-4c75-ac7b-62b039f29548	数字水位计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU32-GT560		2018-08-30 16:11:13.757+08	2018-08-30 16:14:21.742+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
427e8976-edd3-4467-8900-587c12fbf6cf	固定测斜仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-X15		2018-07-09 11:43:50.71+08	2018-07-09 14:25:49.595+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
72fb9e20-7c7b-4ccb-9da1-d8600223beca	振弦式数据采集仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-5000		2018-01-08 15:50:34.791+08	2018-09-10 14:41:35.665+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	1
d4255121-8115-4412-9778-4e29402a1720	倾角传感器	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	t		PM-TS I/II-DL		2019-12-06 11:22:34.027+08	2019-12-06 11:50:30.159+08	3b9938e0-6bf0-47c9-b7af-c61b5a7bdea4	4
8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	风速仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-FY-FS	武汉富源飞科电子科技有限公司	2018-07-11 10:25:55.115+08	2019-09-19 16:42:29.539+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
e689bb3a-b7ce-4502-9042-c07f89958809	采集仪	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	t		SMS-CJ40		2018-11-17 14:04:21.023+08	2018-11-17 16:00:50.708+08	3f3e4806-08db-428f-9b63-a18f64c64081	1
a1d2070f-926a-42a1-8bf8-a39b89eb4c92	温湿度传感器	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	f		NJSY_Seneor		2018-09-13 17:17:20.634+08	2018-09-13 17:17:20.634+08	\N	4
b9829d8a-9088-455a-ad16-9a814303b909	数据采集仪	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	t		BT-A01-016		2018-04-09 08:03:04.733+08	2018-09-20 17:32:56.368+08	78f556c0-d435-40e7-aece-08b652e146f0	1
32349c76-d117-4331-8a10-9b7ea057c2ab	飞尚称重仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CZ		2018-07-04 16:49:20.242+08	2019-08-05 14:45:19.059+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
b15e4068-3a0b-43cf-898a-151d9a211756	振弦式孔隙水压力计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f		GT-VP500		2018-08-15 14:41:47.939+08	2018-09-21 16:41:33.575+08	\N	4
7737cd79-82ca-472e-ba8c-5ed79fde2e70	表面应变计	e39dc160-cb1a-4c7d-b432-ecfe08799164	e39dc160-cb1a-4c7d-b432-ecfe08799164	e39dc160-cb1a-4c7d-b432-ecfe08799164	t		DMYB		2018-09-26 17:10:21.444+08	2018-09-26 17:15:37.703+08	a7dfdb07-3943-4248-bb47-f4c2678c660a	4
ba3d723e-88ac-4e9a-976f-43d43081e621	塔机监测传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TDJC05-V1.00		2018-08-17 15:55:31.627+08	2020-09-29 11:17:05.074+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
b440e042-3173-43c6-887c-3cf4ce8a49e4	水表	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		LSX-DN20		2018-11-02 11:05:43.301+08	2018-12-15 15:10:49.748+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	微功耗扬尘	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		MicroPower-Weather		2018-10-24 10:46:54.966+08	2019-03-04 09:18:54.66+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
706988da-65c8-4388-a4ab-47e553cd1085	sourceld	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f		2		2018-11-05 11:05:43.232+08	2018-11-05 11:05:43.232+08	\N	0
7734e171-78b3-4a47-bccf-b812a1cf30f3	扬尘设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YCJC-V1.00		2018-11-10 11:08:27.792+08	2018-11-12 08:32:51.301+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
177e7e33-3dae-4163-8d7d-1778e70b4a8b	液位水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-93420-HT		2018-10-11 14:47:31.895+08	2018-10-29 15:41:43.367+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
9fab42c0-0c95-4fd2-a470-08437473a2f4	气象监测站	e09d681f-e39b-4915-8e87-af54bdd0e815	e09d681f-e39b-4915-8e87-af54bdd0e815	e09d681f-e39b-4915-8e87-af54bdd0e815	t		WatchDog2475		2018-07-05 14:21:10.229+08	2018-11-12 11:05:15.51+08	7d8a96cd-b3b1-43a6-8ad4-69466c74da0b	4
b349f69a-d7bb-4bee-aa65-6d250e1a7ae8	数字采集器	db720076-c60b-454c-9066-38f2b9c84634	db720076-c60b-454c-9066-38f2b9c84634	db720076-c60b-454c-9066-38f2b9c84634	f		WOLUCAIJIQI2		2018-11-20 15:38:42.523+08	2018-11-20 15:45:38.419+08	\N	1
27503c42-1dec-4321-ad45-eab67190afb5	空气质量传感器	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	t		U-SKY100		2018-10-16 11:55:50.845+08	2018-11-28 15:40:50.494+08	ee936773-3935-4a6f-a962-2b0fd1a5c77e	4
09ebfc15-19c9-4e5f-bacb-5e81ec5ef026	simulator	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		1		2018-11-23 20:45:12.794+08	2018-11-24 16:00:45.728+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	2
a1120cb3-3d96-45cc-81df-36f6c64d505c	test	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		dd		2018-11-28 10:41:03.631+08	2018-11-28 10:41:03.631+08	\N	0
70dd7ed7-45de-4c9c-a299-7c0686775dc3	压差式静力水准仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-J03A	建岩（上海）信息科技有限公司	2018-07-09 10:14:00.831+08	2019-06-28 14:59:01.304+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
dc4b89d8-51e0-4b94-91d7-92d61a59a696	光纤光栅采集仪	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	t		GM8050		2018-10-10 11:24:53.682+08	2019-01-23 17:14:27.03+08	21da3935-62c3-4b0d-bd28-16921600432a	1
d8b7d673-b192-4f7a-84d9-0946b8d30f41	智能流量积算仪	30733da7-f918-41cd-85ed-8b5b0b55b0e6	30733da7-f918-41cd-85ed-8b5b0b55b0e6	30733da7-f918-41cd-85ed-8b5b0b55b0e6	f		TMCS-90I3-B1		2018-07-10 17:19:28.445+08	2018-07-10 17:19:28.445+08	\N	4
6b2b2d8d-a99b-4052-9a48-2c12125e2f41	超声波流量计	762b9963-18af-4789-afed-88df57b2a556	762b9963-18af-4789-afed-88df57b2a556	762b9963-18af-4789-afed-88df57b2a556	t		DCT1158		2018-08-13 10:56:46.605+08	2018-08-13 14:26:48.952+08	08c10c0f-5ba8-4cc6-851f-4eec44349187	4
3746abdd-af23-4d98-bca0-f29909e0d0c3	氧气、二氧化碳、温湿度四合一无线传感器	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	t		C6000-YC		2018-08-14 16:26:33.73+08	2018-08-17 16:26:30.025+08	ffca7b99-078d-433f-b30f-26ca16279162	4
1c431af0-8407-422f-8823-82fe58af024f	集中采集器	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f		TIA01		2018-09-10 17:10:05.044+08	2018-09-10 17:10:05.044+08	\N	1
5c6b67cd-fe7a-472e-8907-63baa655cb42	温度计	958dfd18-eea0-480e-98bc-edc9da0e0ae3	958dfd18-eea0-480e-98bc-edc9da0e0ae3	958dfd18-eea0-480e-98bc-edc9da0e0ae3	t		SRDT-PT1000		2018-09-05 09:55:00.341+08	2018-09-12 16:52:02.57+08	61c4abf0-191f-4d2c-a609-8aef64771259	4
5f1f2736-2744-4339-b456-50c5626ea641	升降机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DYZ-A		2018-11-15 15:46:09.069+08	2018-11-27 13:57:22.822+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
fbc0de18-03f7-421b-b7d4-4440a7c96791	双轴倾角仪带温度	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	t		BT-QJ02-15R-T		2018-04-09 08:05:14.703+08	2018-09-20 17:32:59.777+08	78f556c0-d435-40e7-aece-08b652e146f0	4
7ce5e1fb-e335-4fa0-928d-9b1032350ab8	锚索计	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	t		DH101		2019-10-09 13:11:20.965+08	2019-10-09 13:12:30.592+08	06a9522a-1277-41df-a73c-54910c8bddd8	4
97c2157a-e4ee-41aa-b2ca-c8745fdda755	多通道应变采集仪	e39dc160-cb1a-4c7d-b432-ecfe08799164	e39dc160-cb1a-4c7d-b432-ecfe08799164	e39dc160-cb1a-4c7d-b432-ecfe08799164	t		DM-YB1860		2018-09-26 17:10:27.028+08	2018-09-26 17:15:39.982+08	a7dfdb07-3943-4248-bb47-f4c2678c660a	1
ae5aa015-b2d1-41a8-8b49-9a3d28565e8d	溶解氧在线分析仪	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	t		DM2800		2018-10-08 14:13:14.271+08	2018-10-09 10:54:17.654+08	a32c47a2-7dc4-458d-8169-e88a5b0e82de	4
9c5aaf1f-48c2-4293-8338-f549c223993d	激光测缝计	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMCD-8105AD		2018-11-20 16:26:17.229+08	2018-11-22 15:52:54.625+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
3805bf98-24dc-453c-a62b-a5a97633ca8b	智慧厕所	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GC		2018-10-26 14:52:49.968+08	2019-04-19 14:56:08.177+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
6b90f580-9b05-42a8-ba6a-113143823d44	采集仪	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		MCU32		2019-10-14 09:24:23.042+08	2019-10-14 11:41:21.344+08	4f3d93c3-5322-4bef-b358-e98b1589874d	1
5de488a0-c8c4-4e3d-b0c7-82150f4bd79b	联网行智能压力传感器	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	t		ly1810-25		2018-10-18 15:18:14.021+08	2018-10-26 14:44:50.198+08	db5fa7ec-7e67-493b-9ca5-75958f27ba5e	4
5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a	Spectrum气象站	19d97e00-b313-443e-b2cd-40bce48c0f05	19d97e00-b313-443e-b2cd-40bce48c0f05	19d97e00-b313-443e-b2cd-40bce48c0f05	t		2900ET		2018-10-12 10:19:30.536+08	2018-11-06 15:39:24.163+08	ed558307-bbb9-422b-8705-205ffb6d95f6	4
2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e	http_server	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1		2018-10-29 16:18:27.047+08	2018-10-29 16:18:27.047+08	\N	2
24946992-8d23-4862-ab23-0844e246fb46	扬尘设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		SG-YC	郑州尚格电子科技有限公司	2018-11-02 17:11:56.241+08	2018-11-03 10:23:59.395+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1a456dbb-f7f0-493c-969d-2a0c1f1698ef	数字采集器	28e14628-e071-41c6-a2b7-dca0773f996f	28e14628-e071-41c6-a2b7-dca0773f996f	28e14628-e071-41c6-a2b7-dca0773f996f	f		WOLUCAIJIQI		2018-11-19 16:52:15.435+08	2018-11-19 17:15:02.618+08	\N	1
6757358d-f79f-4a71-a721-6a882b92b350	温度采集仪	6b927c2a-ce23-4bf8-9f83-7307d2856c61	6b927c2a-ce23-4bf8-9f83-7307d2856c61	6b927c2a-ce23-4bf8-9f83-7307d2856c61	t		18B20		2018-11-09 14:39:36.867+08	2018-11-09 20:30:56.163+08	4ef87106-170b-4ad8-96bf-051cc45e7da1	1
ed1a6677-30c5-4215-a128-96bbd4b46c9f	土压力盒	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-TYLH-4		2018-11-07 10:56:08.257+08	2018-11-07 14:53:41.25+08	40f627af-dfd1-4cd2-9921-110d47d4461c	4
ffa967e5-e1cd-4c0d-9aff-643c16430446	风速风向传感器	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	t		XP-FSFX		2018-11-12 16:40:05.515+08	2018-11-14 10:13:30.267+08	c10a7b15-97f0-451e-a15c-537f9ba147ff	4
e32efbee-3c36-4be6-a4d3-d5058acf1fda	振动传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-EXT-ZD	振动传感器	2018-07-18 09:51:58.253+08	2018-11-17 14:10:15.526+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1db3d346-d4ae-41e3-9a98-d22760482541	DTU	cde952f9-77ff-4bbe-9a36-cdc05fe8212a	cde952f9-77ff-4bbe-9a36-cdc05fe8212a	cde952f9-77ff-4bbe-9a36-cdc05fe8212a	t		ZSE310		2018-11-23 16:18:45.318+08	2018-11-23 16:19:35.17+08	f4ba6f51-e553-4525-a4a8-742e041949bd	2
d199daf3-83a4-4bcc-b23b-b6ca37fba927	土壤盐分电导率一体化传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NH51YF		2018-11-19 11:02:17.767+08	2018-12-13 14:36:46.388+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
59f09a3b-57f2-46ee-a2c7-8bba3e704794	华岩标准协议采集仪	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-CJY		2018-11-26 11:43:09.677+08	2018-11-26 16:10:54.534+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	1
f0c41435-ecaf-4e42-b592-b53aaa72f721	sensor	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1		2018-11-28 10:42:00.883+08	2018-11-28 10:42:00.883+08	\N	0
dff02ef2-0438-415d-9327-cdd883c38c81	能慧照度传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHZD10		2018-11-22 17:30:26.326+08	2018-12-13 09:14:26.213+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
a6d30b7e-a718-4cbf-80be-2ddefa2445ab	风向仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-FY-FX	武汉富源飞科电子科技有限公司	2018-07-11 10:25:15.528+08	2019-09-19 16:42:39.512+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
915fc949-c75f-47a9-8ba5-f516f0eb6228	振弦埋入式应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-01-VK4200		2018-08-01 16:25:49.732+08	2018-08-06 10:01:12.827+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
82edfa3d-c080-4212-ad83-32be43b48841	LS数据采集节点（振弦）	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		LS-G6-VW		2018-08-01 16:20:24.301+08	2018-08-06 10:01:17.551+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	1
9f4bea7e-e18f-431e-af3b-9bac229c98c6	LS数据采集网关	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		LS-GW		2018-08-01 16:02:48.203+08	2018-08-06 10:01:20.027+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	1
75bcea50-3625-4248-9181-b8f541953270	温度数据采集分析系统	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	t		ZY-311/T-8B		2018-07-27 16:11:26.052+08	2018-07-27 17:30:56.333+08	05617d93-ff63-40e6-8d83-86ec25e6728c	1
d0e4432b-aeb4-4004-b728-9ef120f0e1db	塔机监测站	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TJ-S		2018-07-28 17:20:27.357+08	2018-07-30 14:23:54.639+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
a812ef4d-0c77-49e6-bad2-c74c79c50e49	多通道磁通量采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CTL-O	老版磁通量采集仪	2018-03-02 17:16:41.27+08	2018-07-19 17:13:44.921+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
76288807-186e-4444-a1ce-6be599aacfd2	压差式变形测量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LTG-Y500-Z	压差式变形测量传感器	2018-01-24 11:19:10.104+08	2019-06-14 15:31:26.253+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
99978bc0-b3c7-4ba1-9064-723c2c13b95f	振弦应变采集仪	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	t		ACT4283	武汉大桥局自己研发  搭配基康传感器	2018-01-12 11:27:20.199+08	2018-07-23 09:24:24.407+08	7f8a3e61-0645-4b79-b376-92677a049f62	1
c3455ece-210c-4203-af82-88b61e4b2584	微功耗采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		MicroPower	微功耗	2018-07-11 14:03:02.088+08	2018-08-17 10:35:44.817+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
aa8612e5-096f-4695-a505-2fd4f84d2390	aa	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f		aaaa		2018-08-21 14:23:58.328+08	2018-08-21 14:23:58.328+08	\N	1
6d00ebcb-1976-40ff-8c6d-99e9df45035a	PTH物联网传感器	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		PTH503		2018-07-25 09:50:10.771+08	2018-07-25 16:45:49.968+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
7da8e64c-b909-4802-9639-84077cefa569	塔吊设备	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	t		FS-TD		2018-07-23 15:18:06.164+08	2018-07-26 15:13:18.662+08	461483be-7de4-49d4-86a6-fa6ac432d4fd	4
edfaccd5-edfd-4895-a519-541faa623db3	高支模采集仪	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-GZMCJY-test		2018-07-23 15:37:15.29+08	2018-08-02 10:39:28.067+08	\N	1
1f235ab7-7bbb-4c4a-b106-7a0a435448bf	高支模水平节点	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-GZM-SP-test		2018-07-23 15:31:50.019+08	2018-08-02 10:39:48.677+08	\N	4
3c312b4a-0bd1-4ee4-acf1-5a51f99ed087	高支模沉降节点	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-GZM-CJ-test		2018-07-23 15:34:09.525+08	2018-08-02 10:39:38.65+08	\N	4
ab820c4a-1397-4605-b9d5-68aea01ab2b5	http	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		q		2018-07-27 17:05:36.509+08	2018-07-27 17:05:36.509+08	\N	0
0bf78d42-85ee-486c-bf43-c62c3168ee33	LVDT裂缝计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LF10-X	LVDT裂缝计	2018-04-09 16:11:41.538+08	2018-07-31 16:21:41.155+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8d37a4fb-8add-44a4-ad5e-a8d190e87209	测试设备	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	f		GZMtest	测试最多接收多少字节，后续删除	2018-07-31 09:18:28.798+08	2018-07-31 09:18:28.798+08	\N	4
039664c3-5d24-4edb-b251-7540c98dc2ce	塔机监测传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TJ-LF	接口 V1.3.3	2018-07-26 16:31:10.375+08	2018-07-31 10:24:07.219+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cb6fd3f6-2591-4242-b0a8-dbb037543831	雷达液位计	78592d42-1fcc-45bb-8a00-8e246186e702	78592d42-1fcc-45bb-8a00-8e246186e702	78592d42-1fcc-45bb-8a00-8e246186e702	t		ZSRD918		2018-07-13 16:15:51.082+08	2018-07-31 14:16:27.076+08	1c4462b3-04af-43ab-8050-febf9bbc0438	4
4a1c835d-1f99-4d95-8d21-ceab11c714d3	扬尘设备	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	t		FS-YC-test		2018-07-23 15:21:40.134+08	2018-08-02 14:06:39.592+08	461483be-7de4-49d4-86a6-fa6ac432d4fd	4
2cbbf402-789b-4c54-b408-7e61934ebd4d	高支模采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZMCJY		2018-08-02 10:31:04.085+08	2018-08-02 10:48:46.225+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
705738a1-f330-4875-a2a0-23c30ec9f5d4	高支模沉降节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZM-CJ		2018-08-02 10:31:54.561+08	2018-08-02 10:48:48.34+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7a741fa4-a643-495d-bb49-443ec2df29b9	静力水准仪	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	t		TUH02		2018-09-10 10:22:20.289+08	2018-10-25 15:10:49.621+08	980b9cf9-1073-4a81-b777-0d29ac8237d2	4
3bd37805-2e49-4fdb-8bab-d54c72112de8	高支模轴力节点	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f		FS-GZM-ZL-test		2018-07-23 15:29:31.256+08	2018-08-02 10:39:53.176+08	\N	4
6b4905df-caae-4bcc-a8a7-c99cb7866e06	高支模水平节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZM-SP		2018-08-02 10:33:18.522+08	2018-08-02 10:48:50.334+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8e67e334-231e-467c-8868-c41461d9463e	高支模轴力节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZM-ZL		2018-08-02 10:35:48.063+08	2018-08-02 10:48:52.302+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
77a4b2d1-adf0-4cab-be7e-5f4635e4063f	高支模倾斜节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZM-QX		2018-08-02 10:41:04.596+08	2018-08-02 10:48:54.93+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cd27d23f-a55d-4ce0-8c59-33675bb5ad62	温度计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-PT100		2018-08-03 07:13:57.944+08	2018-08-06 10:01:10.537+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
777c9799-3abe-4eee-a583-f5e6fac01946	倾角计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-01-S541MA		2018-08-03 10:29:52.678+08	2018-08-06 10:01:30.631+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
5f65c5dc-c32f-4e64-b40e-97f907d7c0fd	风速计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-FS01-01		2018-08-03 10:36:00.505+08	2018-08-06 10:01:36.375+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
bc1228dd-0195-4fba-b21f-178b91e4cf60	风向计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-FS01-02		2018-08-03 10:41:17.469+08	2018-08-06 10:01:38.742+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
f556a96a-5649-49c8-beae-aa08f2faa752	LS数据采集节点（模拟量）	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		LS-G6-VOLT		2018-08-03 07:28:29.449+08	2019-05-29 15:53:22.592+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	1
c1b890f6-babe-41df-b3b4-0a277ad7e1b2	双轴倾角仪	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	t		BT-QJ02-15R		2018-09-20 13:52:41.736+08	2018-09-20 17:33:04.102+08	78f556c0-d435-40e7-aece-08b652e146f0	4
0f37be2c-4009-4079-81f8-e9c598773ea2	kafka设备	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f		1		2018-09-21 17:53:12.712+08	2018-09-21 18:23:56.917+08	\N	0
be5be8af-c339-4f15-b2b7-0f16e1e51792	DT铂电阻温度	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT-PT100-RTD-AL-0		2018-09-07 09:46:01.461+08	2018-10-19 10:14:27.943+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
e1f36777-486a-4527-a30f-61d17b7a8796	扬尘设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YC		2018-08-02 10:37:02.577+08	2018-12-29 10:17:27.978+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2729651f-9ad2-44f0-b9cf-bfc33669f9c7	振弦式渗压计	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	f		HY-S		2018-11-03 15:41:07.721+08	2018-11-03 15:41:07.721+08	\N	4
3ad4be85-c6f9-46b8-97dd-39d01e4ef858	扬尘采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YC-MP		2018-10-24 15:16:44.634+08	2019-02-27 10:00:38.276+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
470fe434-e3f4-40b1-a823-12f5b6122b0a	数据采集仪	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f		GPRS-A32		2018-09-11 14:34:02.857+08	2018-09-11 14:34:02.857+08	\N	1
d5bfb91e-3d09-4068-ac33-5974e8b7f039	厕所人流量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-toilet-visitors		2018-10-26 16:26:05.536+08	2019-02-21 09:45:00.847+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
477ce1aa-aaae-40d3-a55e-2d3ef3a38e23	采集仪	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	f		HZM200-F		2018-09-29 15:42:42.21+08	2018-09-29 15:48:19.601+08	\N	1
357c45b8-b190-4369-862c-e28530e13aa2	酸碱度氧化还原在线分析仪	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	t		MIK_PH6.0		2018-10-08 16:48:22.297+08	2018-10-09 10:54:22.203+08	a32c47a2-7dc4-458d-8169-e88a5b0e82de	4
afb69a31-61c2-417c-b62e-c41730b3e6a1	DT振弦式土压力计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT-tuyali		2018-09-07 11:09:31.026+08	2018-10-19 10:02:08.06+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
b03b1516-7e4a-41a4-9765-a1a485bb998a	厕所环境传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-toilet-Weather		2018-10-30 22:17:59.313+08	2018-11-05 15:30:38.876+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
57e52f6f-9cfd-4060-bbf4-506058f6206d	test	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		testhttp		2018-10-29 18:06:17.119+08	2018-10-29 18:06:17.119+08	\N	1
9d5905bc-0969-4032-ad57-69d6490fbc47	LORA节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-lora-JD		2018-11-22 14:43:45.876+08	2019-02-16 12:14:55.725+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
296a97ca-fbd1-4876-83b2-f40a7fa7d5c5	温度传感器	6b927c2a-ce23-4bf8-9f83-7307d2856c61	6b927c2a-ce23-4bf8-9f83-7307d2856c61	6b927c2a-ce23-4bf8-9f83-7307d2856c61	t		18B20-S		2018-11-09 14:49:07.684+08	2018-11-13 14:22:02.178+08	4ef87106-170b-4ad8-96bf-051cc45e7da1	4
540e29ab-87bd-4d64-9f6c-c9af1db5bbf4	云盒	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	t		XP-YH		2018-11-12 16:41:13.983+08	2018-11-14 10:13:32.876+08	c10a7b15-97f0-451e-a15c-537f9ba147ff	1
800e5478-374c-4de8-ab05-d9aa4be45cdb	二氧化碳传感器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NH162		2018-11-20 14:58:30.322+08	2018-12-13 09:14:18.422+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
7575abc3-ef50-40ce-90c4-66fb308cf20c	锚索计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH03-D08		2018-12-03 13:54:10.234+08	2018-12-03 14:14:31.169+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
f0229321-e654-43b1-a172-a660b74367cd	钢筋计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH60-E08		2018-12-03 14:06:15.002+08	2018-12-03 14:14:33.779+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
14f67669-6cec-42c0-a7ca-4b60950ec7b5	静力水准仪	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH02-E20		2017-12-20 14:30:07.19+08	2018-12-07 16:51:30.142+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
2bbdef47-01cb-401b-ae49-c4b7bad46d36	微型压力盒(应变片式)	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-WTY		2018-12-07 17:22:02.559+08	2018-12-07 17:26:37.739+08	58e23a26-8332-454f-b122-3e18a3125b26	4
1152aa27-3899-4f0f-9954-9d83cedd5aab	数字称重变送器	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	f		A1P-D2		2018-12-10 10:00:18.969+08	2018-12-10 10:00:18.969+08	\N	4
326d5283-7066-4e0f-9e27-380773523f19	岩石应力计	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-YSL		2018-12-07 17:22:03.971+08	2018-12-07 17:26:41.748+08	58e23a26-8332-454f-b122-3e18a3125b26	4
d4582a57-2984-4d20-94de-598f5b28a188	振弦式轴力计	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	t		HJ-9910		2018-12-10 11:36:18.824+08	2018-12-10 11:39:47.51+08	6960c889-9031-47f4-98f7-e80cfe3ecdb4	4
fac96717-3818-4839-aedc-5dbb6c1c62f2	水平压力盒(应力铲)	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-TYH		2018-12-07 17:22:03.063+08	2018-12-07 17:26:45.833+08	58e23a26-8332-454f-b122-3e18a3125b26	4
a4cf524d-8114-4b70-b13a-a931429c4bbf	数字称重显示器	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	t		805TS-B-17		2018-12-08 17:37:32.875+08	2018-12-11 13:44:29.757+08	c4138de9-d2c3-4774-88dc-fd597cf6e8f9	4
7328323d-9f8b-435e-9d4f-f963f502dc31	表贴式应变计	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-BM150		2018-12-07 17:12:17.896+08	2018-12-07 17:26:23.559+08	58e23a26-8332-454f-b122-3e18a3125b26	4
65e60374-6bdf-42f8-801d-00fc50085215	双膜土压力计	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-TY		2018-12-07 17:22:01.982+08	2018-12-07 17:26:27.402+08	58e23a26-8332-454f-b122-3e18a3125b26	4
8c73b29c-6146-4170-9cb7-d8ead8990d60	振弦式钢筋计(锚杆计)	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-GJ		2018-11-23 17:09:41.559+08	2018-12-07 17:26:31.919+08	58e23a26-8332-454f-b122-3e18a3125b26	4
e8357fe4-05bb-4159-8a27-a46212d14544	锚索测力计	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-MS		2018-12-07 17:12:17.175+08	2018-12-07 17:26:35.009+08	58e23a26-8332-454f-b122-3e18a3125b26	4
9dac79b5-8173-4081-abff-37f65c42b0c6	轴力计(反力计)	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-ZL		2018-12-07 17:22:04.448+08	2018-12-07 17:26:49.414+08	58e23a26-8332-454f-b122-3e18a3125b26	4
01f1ac79-6cbb-4f77-b73f-cf8d602f11a6	埋入式应变计	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL-MR150		2018-12-07 17:12:17.318+08	2018-12-07 17:26:52.586+08	58e23a26-8332-454f-b122-3e18a3125b26	4
3b796285-ef41-4963-9304-f0909623f5c7	煊隆采集仪	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	t		XL–CJX–ZX36		2018-11-23 16:45:17.049+08	2018-12-07 17:51:31.664+08	58e23a26-8332-454f-b122-3e18a3125b26	1
0b4f75d6-d921-4913-a9de-cfff3b99d56e	静力水准仪	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YCSJLSZY		2018-12-11 14:09:09.379+08	2018-12-11 14:23:08.845+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
d8de8739-f146-41e0-877e-747f30ac59a7	空气节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KQJC-V1.00		2018-12-11 10:31:53.256+08	2019-03-27 20:48:48.147+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
12253047-b588-4225-9f55-e6282003788a	压电式振动传感器	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	t		BY-S02		2019-08-22 12:00:24.988+08	2019-08-29 09:16:08.232+08	c6b69110-10f2-4697-afcf-eb74f9e4a777	4
37c046eb-9a0e-49b0-95fb-f0128338f381	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY20	配套 飞尚 多条道振弦采集仪	2018-01-23 14:57:48.734+08	2019-11-09 10:35:28.287+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a820a6a6-2302-4291-bf8a-e6beb3e7f663	扬尘采集设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		RK-YC		2018-12-03 15:03:56.948+08	2019-04-08 14:49:24.805+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
15eadcdc-9a05-4580-946b-2b722d95ba5b	物联网传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-HS-100		2019-12-09 10:15:11.886+08	2019-12-09 17:13:32.603+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
5e2812d0-7cbc-4f79-9723-87bec81bb0ea	采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-IOT102		2019-12-09 10:11:18.879+08	2019-12-09 17:13:35.099+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
0747dcbe-0a49-4db1-ac06-d9a460babdd3	GNSS	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS—GNSS—SD		2018-12-08 15:12:26.594+08	2020-04-22 14:59:10.3+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
5b40bb69-7692-4cee-b6df-bd7871764131	温湿度传感器	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-WSD-01MM		2019-08-21 17:57:36.693+08	2020-04-14 11:00:31.273+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
3b867352-5d0b-4016-a55f-4d68d0dcbaa4	土壤水分温度变送器	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	t		NHSF48		2018-11-22 17:12:56.406+08	2018-12-13 09:14:22.913+08	66a47769-cf2c-4708-bde1-48eae1617ade	4
50d3cb43-638b-4833-a401-f526d1cbbc9e	解调仪	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f		MWY-DS1600		2018-12-13 15:31:50.763+08	2018-12-13 15:44:20.429+08	\N	1
6d4fda56-b81c-4873-9c75-10257aaf7254	光电传感器	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f		MWY-FBG-400		2018-12-13 15:33:20.394+08	2018-12-13 15:44:38.437+08	\N	4
d5ce913e-4a89-473e-b69b-bdfbc0fa6753	安全帽	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KLT-GPS	杭州科利特安全帽设备	2018-12-13 13:58:23.773+08	2018-12-13 15:53:27.737+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2b6f224d-770e-41bc-b28b-5afbe3b213c4	土壤水分温度传感器	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	t		MP-406T	无公式	2018-01-08 13:46:38.336+08	2018-12-14 11:38:37.406+08	dd99d0cd-27ad-42ff-869e-e00c51c5c62a	4
164528dd-81d3-435b-a4cd-dc328abbe3ba	数字采集器	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	t		RYQ-4ZD-6		2018-12-14 15:48:01.086+08	2018-12-15 09:31:34.525+08	82af10d4-f6f0-4e09-84ce-7053d4b42940	1
74ca6540-3a33-4157-8629-f00d8750aa78	雷达测速仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS_laser_speed		2018-12-15 11:42:30.088+08	2018-12-15 11:42:30.088+08	\N	4
bfd93522-374e-4c12-b203-e02ff040a821	综合采集模块	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMZX-32A		2018-12-18 13:51:36.28+08	2018-12-18 13:52:23.571+08	941c9c57-031c-4e4c-9a2b-5e544e387274	1
00824420-b248-4f1e-9e56-57e8573c9e35	渗压计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-F		2018-12-18 16:53:42.364+08	2018-12-29 17:12:34.973+08	631adf16-ff91-4949-8e6f-e13680319751	4
99685e46-230b-43e6-a98c-f7f472af999f	双膜土压力盒	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-Eb		2018-12-18 16:53:42.843+08	2018-12-29 17:12:53.283+08	631adf16-ff91-4949-8e6f-e13680319751	4
cbdb48d6-afd7-4322-884a-d37d56f96176	静力水准仪	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-JLSZ-20-V1.00		2019-04-16 16:01:34.198+08	2020-04-13 13:31:39.557+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
6b180341-15c7-4148-89e3-b6fc10b0f7b5	测温采集系统	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZDQ-WT		2018-12-18 18:03:29.495+08	2018-12-29 17:12:59.423+08	631adf16-ff91-4949-8e6f-e13680319751	1
66ccfb40-3e33-4b5b-a47b-be50c83473e9	单膜土压力盒	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-Ea		2018-12-18 16:53:43.55+08	2018-12-29 17:12:56.122+08	631adf16-ff91-4949-8e6f-e13680319751	4
b0726a2c-5c69-481f-8d2d-d8f8e17a248d	轴力计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-U		2018-12-18 16:53:41.84+08	2018-12-29 17:12:37.99+08	631adf16-ff91-4949-8e6f-e13680319751	4
b640a9ef-9a1c-4973-ada5-0cdab7877f55	荷载计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-Z		2018-12-18 16:53:41.301+08	2018-12-29 17:12:40.974+08	631adf16-ff91-4949-8e6f-e13680319751	4
8580899d-741c-4cc7-a479-ccd6c0c6e22c	多向应变计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-D		2018-12-18 16:53:40.784+08	2018-12-29 17:12:43.895+08	631adf16-ff91-4949-8e6f-e13680319751	4
ae5c1f57-7ae4-4515-b6ba-51319d4599ce	表面应变计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-B		2018-12-18 16:35:55.136+08	2018-12-29 17:12:50.353+08	631adf16-ff91-4949-8e6f-e13680319751	4
9e3cc14a-915c-4fd2-bb82-35360798cb23	总线型综合采集系统	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZDQ-485		2018-12-20 14:56:36.682+08	2018-12-29 17:13:04.342+08	631adf16-ff91-4949-8e6f-e13680319751	1
e376bde0-8e4f-493d-a03e-98b4b27acec0	埋入式应变计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-A		2018-12-18 16:35:54.018+08	2018-12-29 17:12:31.931+08	631adf16-ff91-4949-8e6f-e13680319751	4
11c61b7f-9d36-4273-b679-898a09fe21e9	气象站	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		BYS710-ZX		2018-12-15 16:52:13.967+08	2018-12-28 16:41:56.425+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
495526a7-7701-4e9c-8dfd-bbfd7e0b163b	风速风向仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		HSTL-FSX03		2018-12-15 11:36:54.184+08	2018-12-21 17:25:11.782+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2aec4a46-de9a-40e0-ac97-bdb0d149e82d	液位计	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	t		M91-D		2018-12-22 09:15:30.073+08	2018-12-24 13:47:06.969+08	2f5601db-b76e-4770-9af3-4f1825703d4d	4
f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2	超声波水表	632bb218-8da7-4d91-b83d-70879c562d74	632bb218-8da7-4d91-b83d-70879c562d74	632bb218-8da7-4d91-b83d-70879c562d74	t		DS-CSW		2018-12-21 15:20:51.743+08	2018-12-25 11:46:45.057+08	b90d5ecb-ddfc-42fb-bb9f-0492f4b2a4f9	4
3f9ded10-1974-46c6-b577-74ef70477cc1	虚拟DTU	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-virtual-DTU		2018-12-21 16:55:45.96+08	2018-12-27 17:06:18.169+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
f09a8627-9e84-489e-86f5-72522b126e74	静力水准仪	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZDG-S		2018-12-20 14:58:02.425+08	2018-12-29 17:13:07.704+08	631adf16-ff91-4949-8e6f-e13680319751	4
b2e31dbc-1560-4ab9-8b57-a57a012d5022	温度传感器	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZWT-18		2018-12-20 15:04:51.3+08	2018-12-29 17:13:12.763+08	631adf16-ff91-4949-8e6f-e13680319751	4
a81c3314-06e2-428a-bede-88adf880bdd7	多点位移计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-V7000		2019-01-07 17:45:50.781+08	2019-03-07 14:31:39.505+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
0c6ecc38-15dc-4580-a580-aa3c39eb9064	裂缝计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f		MAS-KTR3		2018-12-24 14:39:01.228+08	2018-12-24 14:39:01.228+08	\N	4
092ae1af-65d0-45dd-a621-17fd26682e7c	位移传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65050F		2018-12-28 11:07:29.288+08	2018-12-29 15:09:42.341+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
d52114b2-8ad0-42a3-989f-0650203b54c8	倾角传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65QJ		2018-12-28 11:17:19.419+08	2018-12-29 15:09:45.859+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
fc561f5f-92c8-4549-8e02-dd01dd276aef	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01A-[-180,180]	测量范围[-180,180]	2018-12-24 11:48:02.113+08	2018-12-24 16:08:07.754+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
6f051a40-1c14-47c6-8124-3077f27facc5	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01A-[-60,60]	测量范围[-60,60]	2018-12-24 11:53:24.862+08	2018-12-24 16:08:10.015+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
b92bc45a-bf9b-425f-9747-7caedf0c2784	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01A-[-45,45]	测量范围[-45,45]	2018-12-24 11:53:26.494+08	2018-12-24 16:08:12.281+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
52ae2b25-56b5-4a29-9f0b-33454ac99ff6	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01A-[-15,15]	测量范围[-15,15]	2018-12-24 11:53:35.03+08	2018-12-24 16:08:15.124+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
2202dd15-500f-45e8-a555-e90ddf24df13	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01A-[-30,30]	测量范围[-30,30]	2018-12-24 15:31:37.889+08	2018-12-24 16:08:17.364+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
bc87beae-9433-42de-875d-6981e7975f21	拉绳式位移传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65L1000		2018-12-28 11:30:29.885+08	2018-12-29 15:09:51.536+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
21387f8b-b7bb-48c8-9972-7ff32e01f2fa	挠度沉降测试仪	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		RS-RC65J		2018-12-28 11:30:32.406+08	2018-12-29 15:09:55.211+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
966cf4b9-f411-4764-bad3-2372cd867458	温度传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65W		2018-12-28 11:30:33.797+08	2018-12-29 15:09:59.051+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
10d33bab-421f-428f-b450-b5ee4b1c3465	湿度传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65S		2018-12-28 11:30:35.241+08	2018-12-29 15:10:02.615+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
e5b96801-9448-44f2-a175-40cc7e8466b4	无应力计	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	t		SZZX-W		2018-12-18 16:53:40.213+08	2018-12-29 17:12:47.795+08	631adf16-ff91-4949-8e6f-e13680319751	4
cef1d2a2-c44e-4143-84bd-2a65140e33d0	压差式变形测量传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YC-2000	压差式变形测量传感器	2018-02-05 11:21:34.544+08	2019-01-02 10:09:52.593+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
0aae766a-5d82-479a-bd71-7eb1e0e4e20f	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～200kpa]		2017-11-29 11:01:36.207+08	2019-01-02 10:51:50.001+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
91372b00-3bf7-4eb0-9495-ad544dfb04ca	压力变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～500kpa]		2017-11-29 11:02:53.565+08	2019-01-02 10:51:51.809+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
d7912272-424d-4546-a3c1-43a24365dde0	液位变送器	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	t		MPM47xx[0～10mH2O]		2017-11-29 11:06:12.61+08	2019-01-02 10:51:54.452+08	06a180f1-88d0-4ef8-800f-c9175f55215d	4
e6c538b8-f82a-4e8f-9d47-529a835fc779	应变传感器	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		HY-65B3000B		2018-12-28 11:02:10.353+08	2019-01-07 16:46:33.761+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
f90616c7-29f8-4aa3-863b-c67c6ef4ec61	Led屏幕	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		LED_Pusher		2019-01-04 18:36:21.555+08	2019-01-05 10:13:43.512+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1824bec3-15cd-498d-b2c1-b3cc804a1021	振弦式锚杆测力计	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM-V1000B		2019-01-07 17:23:55.772+08	2019-03-07 14:31:33.381+08	69ff6b39-2d8c-443e-939d-f6c087588d22	4
36f70703-df53-42ae-a8da-e001d8215fd8	txt设备	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f		txtDevice		2019-01-08 16:04:57.708+08	2019-01-08 16:09:20.955+08	\N	1
f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e	液压式静力水准仪	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	t		SD-226		2019-01-07 11:08:30.134+08	2019-01-09 14:04:33.878+08	a4159319-ff56-456e-9cd0-1b2bc9ec6ede	4
a9f13e6b-82bb-4a59-82b7-cf52b91642a5	静力水准仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMYC-6210A		2019-01-08 15:12:49.573+08	2019-02-13 09:53:31.835+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3	运动数据模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Step		2019-01-14 15:28:21.342+08	2019-01-15 16:40:01.918+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
969043a0-c1f9-49c2-9f36-c029a03a9c87	智能手环	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Bracelet		2019-01-14 11:53:46.23+08	2019-01-15 16:40:06.457+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
b7bea944-ae59-4ec4-85cc-345e98006e52	水位计	f088bb87-39b0-458f-931f-e752ffa5cb07	f088bb87-39b0-458f-931f-e752ffa5cb07	f088bb87-39b0-458f-931f-e752ffa5cb07	t		IF-05		2019-10-14 11:39:40.706+08	2019-10-14 11:40:06.791+08	3a3342dd-c0d1-4814-b0d4-99c105d0f91c	4
fb91aca2-dc9a-4cbb-8ece-54a5e04d6566	应变计	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		VWS-10		2019-10-14 09:52:23.854+08	2019-10-14 11:41:34.923+08	4f3d93c3-5322-4bef-b358-e98b1589874d	4
f5cf2b42-6efc-474b-aad5-f5614e5ec0d8	高精度静力水准仪	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f		RZ371		2019-01-19 14:35:13.508+08	2019-01-19 14:35:13.508+08	\N	4
9db37a62-7896-4477-a3c4-7d317d28f26e	电量模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Power		2019-01-14 15:48:46.997+08	2019-01-15 16:39:44.833+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
e1d537c6-2a5b-4b97-91ea-a2bd94093494	LED大屏	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BigScreen		2019-01-19 15:00:28.906+08	2019-02-15 17:22:53.276+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	0
a91dd10c-af61-4fcf-8294-1d200a035664	定位模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Location		2019-01-14 15:44:06.664+08	2019-01-15 16:39:53.758+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7febae4c-c706-48a8-9f99-e546f48e338b	通道	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	t		GM8050-TD		2018-10-10 11:26:00.987+08	2019-08-21 15:17:59.824+08	21da3935-62c3-4b0d-bd28-16921600432a	1
4eb4d7ed-2199-4514-9411-9c12d59f72e3	跌倒定位模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Fall		2019-01-14 15:47:03.718+08	2019-01-15 20:26:15.141+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc	求救模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-SOS		2019-01-14 15:51:12.887+08	2019-01-15 20:26:20.933+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
17b4a482-830c-44e4-be09-1a9cac67c1e7	静力水准仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JLSZ-10-V1.00		2019-01-24 09:47:37.021+08	2019-01-24 12:57:38.02+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
274929f9-024a-40b8-8856-eb145c334b9a	温度计	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		RT-1Q		2019-10-14 09:45:26.419+08	2019-10-14 11:41:25.106+08	4f3d93c3-5322-4bef-b358-e98b1589874d	4
613e22b3-00d5-4036-b4de-8988e8a25b02	测试	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f		1.0		2019-10-30 09:05:24.059+08	2019-10-30 09:05:24.059+08	\N	1
e996ef32-944e-448f-9370-862fd5ed719d	睡眠模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Sleep		2019-01-14 16:35:28.378+08	2019-01-15 21:00:20.714+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a9f88745-32d0-4068-bcd3-6735e90b15a0	硅式静力水准仪	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		PTH-SZY100		2019-01-28 10:00:29.626+08	2019-02-18 15:54:16.843+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
53ff80a4-bf85-47bd-9351-ad8cbd0121e3	压力变送器	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f		RZ25		2019-01-19 09:49:48.902+08	2019-01-19 09:49:48.902+08	\N	4
2b4affd1-2151-4632-b11a-e0176fee0a84	液位变送器	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f		RZ26W		2019-01-19 09:53:06.263+08	2019-01-19 09:53:06.263+08	\N	4
75ff49e4-22d3-4777-a5a5-71f3a5fc4436	微差压变送器	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f		RZ23D		2019-01-19 09:54:40.583+08	2019-01-19 09:54:40.583+08	\N	4
9eef0ea4-1634-4d46-a9fb-6613a37b9431	静力水准仪	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f		RZ370		2019-01-19 14:34:12.826+08	2019-01-19 14:34:12.826+08	\N	4
20b14a3c-9532-42df-b60c-baf4ba16865c	静力水准仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-J02		2019-01-22 09:31:07.186+08	2019-01-22 09:37:09.126+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
0794ccbd-2a6e-49b6-9b42-abf93957b33c	垃圾箱采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-Trash-Bin		2019-01-18 16:57:11.292+08	2019-01-22 17:19:01.811+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a23e3c37-7ab4-4ed4-b73b-a791c96d596c	心率模块	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-AQG-Heartrate		2019-01-14 15:31:37.055+08	2019-01-23 16:38:12.134+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d94bb4f7-d5a8-4bb0-b866-c8008e5123ab	光栅类应变计	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	t		GM8050-ybj		2018-10-10 11:27:19.854+08	2019-01-25 11:18:08.715+08	21da3935-62c3-4b0d-bd28-16921600432a	4
04425c48-b89c-498d-8372-b3a64d1abf1e	光栅类温度计	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	t		GM8050-wdj		2018-10-24 13:30:32.27+08	2019-01-25 11:18:11.29+08	21da3935-62c3-4b0d-bd28-16921600432a	4
6020197b-abd9-4ef2-b674-0451a754fe68	测试采集仪	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f		testACQUnit		2019-01-29 10:56:26.772+08	2019-01-29 10:56:26.772+08	\N	1
ff9746d5-839e-46dc-aae9-ec714680e041	LORA节点2.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LORA2-JD		2019-01-22 15:15:43.184+08	2019-01-28 09:57:04.841+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
0f3aa84f-d64b-4135-8ce1-f3a704751a4c	空气采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-oxy-agent		2019-01-25 16:07:25.608+08	2019-07-18 14:34:01.841+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5	无线压力变送器	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	f		DPI10S		2019-01-30 11:05:38.181+08	2019-01-30 11:05:38.181+08	\N	4
61e3c33e-85cf-4894-9fc6-70fc3fd7a522	动态电阻应变仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMYD-1008		2019-01-18 14:06:05.47+08	2019-04-20 19:23:41.271+08	941c9c57-031c-4e4c-9a2b-5e544e387274	1
c9459443-e9d6-48eb-b37d-d25dfb8faaac	采集单元	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-410		2019-01-31 11:35:16.827+08	2019-02-26 17:17:06.803+08	0a638ade-14a7-4e31-b102-953f910425a8	1
d0fcad31-8656-4b67-9530-1519960defec	磁式静力水准仪	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		PTH-SZY200		2019-01-28 10:50:57.656+08	2019-02-18 15:54:24.368+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
35088e4d-f42e-4324-8237-bedb617ee489	轴力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL20	配套 飞尚 多通道振弦采集仪	2019-02-25 14:12:02.935+08	2020-04-10 17:16:21.951+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	分布式网关MOP下发	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-iFWL-VWGVV		2019-02-21 17:19:51.465+08	2019-02-21 17:19:51.465+08	\N	1
6e79c080-ecb3-4222-927e-f2dfcd85683a	锚索计（三索）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-T30		2019-02-25 13:30:26.982+08	2020-04-14 10:50:59.989+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
9768653f-3bb0-4f60-9842-ed5df2685dc4	轴力计（三弦）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL60-03	配套飞尚 多通道振弦采集仪	2019-02-25 13:31:57.619+08	2020-04-14 10:51:04.77+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
ec8018e2-1de6-4384-ac85-01405362dc83	四通道振弦采集仪	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	t		XT-242B	同基泰四通道采集仪	2019-08-27 09:48:38.217+08	2019-08-28 10:43:15.587+08	ced3128b-5650-474d-99ae-4496d3d0ea97	1
ac1d92e7-4587-48e7-84ce-c4cd8db40687	轴力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL10	配套 飞尚 多通道振弦采集仪	2019-02-25 14:10:58.931+08	2020-04-10 17:16:16.242+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
bf5a92b7-59ab-429b-bce7-da858650205e	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY04	配套  多通道振弦采集仪	2019-02-25 11:42:07.342+08	2020-04-09 16:27:51.145+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
6c6b5c79-b408-447c-b2b1-3ff7bf122a19	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12G-2	电压输出	2019-02-22 13:41:58.502+08	2019-06-11 17:46:53.14+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
2b835f19-8eba-46b3-b3aa-affc9b36dcd1	轴力计（三弦）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL40-03	配套飞尚 多通道振弦采集仪	2019-02-25 14:08:36.878+08	2020-04-14 10:51:10.565+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
2b04a6d8-4af7-428f-95c9-325800c4b59d	智能数据采集器	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		DT80G-WS		2019-02-22 15:14:23.566+08	2019-12-05 09:45:44.813+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	1
ff97f842-4bf0-4384-b4b6-05a9783aa809	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY20	配套 飞尚 多条道振弦采集仪	2019-02-25 11:55:32.869+08	2019-11-13 16:58:28.337+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
8b4d38be-2454-4d9b-a586-d894c5197362	测试	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f		1.0		2019-12-12 16:53:57.526+08	2019-12-12 16:53:57.526+08	\N	4
b8904c0e-1294-49f9-b0e9-dadd79c4efe4	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY06	配套  多通道振弦采集仪	2019-02-25 11:44:07.87+08	2020-04-09 16:28:02.252+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
d1b35088-9410-4203-924c-75b60634c7c6	应变计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-ST2		2019-02-22 11:35:12.138+08	2019-06-11 15:27:03.95+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY08	配套  多通道振弦采集仪	2019-02-25 11:46:10.781+08	2020-04-09 16:28:07.741+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
369b29f9-7664-42c3-8510-7ad4c7b5bc06	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY10	配套 多通道振弦采集仪	2019-02-25 11:52:45.905+08	2020-04-09 16:28:12.707+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
dcac1d14-912a-4868-8be8-08d1e86d2fa5	静力水准仪	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	t		HKJ-JLSZ		2019-02-22 17:20:51.889+08	2019-02-22 17:22:27.045+08	6953cb17-93d1-43e9-b65a-2b0990bc0049	4
b21b534c-d8f1-4caf-a405-1682a99dc1a9	压力传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		F10G-95T		2019-02-22 16:33:55.41+08	2019-02-26 14:50:02.461+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c70bf363-fc19-41f9-80df-27a231a1a2bd	静力水准仪	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-W10-A		2019-02-22 13:44:23.958+08	2019-06-18 19:03:59.732+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
c952a71d-a917-40a7-aecc-cf2dc40c238a	轴力计（三弦）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL50-03		2019-02-25 13:32:42.87+08	2020-04-14 10:50:55.309+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
ef68a37c-37fa-40d7-8537-dcbc64eaf1e1	扬尘设备	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-YC		2019-02-25 11:38:44.882+08	2019-02-25 17:45:40.676+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
1ecb51e2-e759-45ef-9792-89f34bb715d0	表面式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-BM15	表面式应变计	2019-02-25 14:20:41.303+08	2020-05-09 09:30:14.977+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
43060aae-0e85-4ec6-9fc9-b05216b11e13	拉线位移传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LXWY-Z	济南 博林 协议	2019-11-21 14:01:06.922+08	2020-11-20 10:06:49.656+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
80342a8c-db6f-40e6-b331-0ae1eca53138	轴力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL40	配套 飞尚 多通道振弦采集仪	2019-02-25 14:16:02.454+08	2020-04-10 17:16:31.253+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
d26842d0-7685-4eec-869d-160b023932b9	表面式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-BM30	表面式应变计	2019-02-25 14:21:56.971+08	2020-05-09 09:27:17.938+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
1d7e6445-a676-42b9-9314-837415832451	超声波风速风向传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-FSFXY-B		2019-12-12 17:00:31.595+08	2019-12-19 09:03:37.817+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
573fb497-e583-41c4-ba6b-ecf548921eaf	振弦采集仪	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	t		FCN-4		2019-05-07 15:57:23.324+08	2021-01-15 13:16:33.025+08	23ddab0a-3351-496e-a544-4e988d67b576	1
3bf54b2d-1623-4920-80c2-4e1f7407b318	锚索测力计	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	t		SDM		2019-08-27 15:43:12.793+08	2019-10-22 14:09:09.352+08	ced3128b-5650-474d-99ae-4496d3d0ea97	4
dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	压力传感器	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	t		ZL-YL		2017-12-19 17:58:52.262+08	2019-08-27 17:41:14.218+08	c41ab05c-aa3d-4d60-9dc3-217323b6e9c7	4
6039a6d8-af54-411e-a520-451b20b6d089	液位传感器	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	t		ZL-YW		2017-12-20 09:11:42.428+08	2019-08-27 17:41:18.745+08	c41ab05c-aa3d-4d60-9dc3-217323b6e9c7	4
f0443cf8-a24d-46f9-a894-7c731798736d	表面式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-BM50	表面式应变计	2019-02-25 14:24:04.241+08	2020-05-09 09:30:10.092+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
23ecb98e-e536-4313-9234-07622fea082f	固定式甲烷检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-CH4		2020-01-14 14:06:32.978+08	2020-01-15 13:50:50.207+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c82a7f0e-848f-4659-9555-8b275c33036e	Zigbee气表	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		V1.0		2020-03-07 16:35:47.27+08	2020-03-07 16:35:47.27+08	\N	0
421933bd-e149-4d7c-ad95-ef8aa2a2692c	DTU	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		F2A16-U	端口固定40003，不转义	2019-08-30 14:28:31.123+08	2019-08-30 14:31:10.71+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	0
b345cafa-8d58-454f-a01e-e42859545b18	钢筋计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GJ22	配套飞尚多通道振弦采集仪	2019-02-25 14:17:43.249+08	2020-08-17 15:08:08.623+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
536c5d54-6c47-4800-aecb-47219ee56fc2	钢筋计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GJ25	配套飞尚多通道振弦采集仪	2019-02-25 14:18:58.092+08	2020-08-17 15:08:13.474+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
18b82e73-7501-445f-a72c-a8e20cf9da40	钢筋计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GJ28	配套飞尚多通道振弦采集仪	2019-02-25 15:51:46.857+08	2020-08-17 15:08:22.675+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
3d19a0b1-da48-466d-88d1-dc7c1f73bc68	内埋式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-NM30	配套 飞尚 多通道采集仪	2019-02-25 14:25:00.041+08	2020-08-17 12:42:57.373+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
6fb1b711-d8c0-489d-9751-524410c27bcc	图像传感器	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	t		tuxiang		2019-08-07 10:32:47.272+08	2019-09-02 16:50:54.907+08	dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8	4
f34762e6-6532-434e-93a0-74c119cfc58a	水位计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-SW01A		2019-09-11 10:15:40.117+08	2019-09-11 16:31:57.957+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
798b891d-6c34-4219-bde6-a8d957643010	土壤温湿度计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-FDR-5		2019-09-11 11:36:45.297+08	2019-09-11 16:32:01.95+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
36ddd8af-d58c-4496-ae9a-ce9cb9786cd5	温湿压传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-WSQ01A		2019-09-11 11:57:38.672+08	2019-09-11 16:32:04.664+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
aab61193-270e-4d06-9bdf-9da5194c744a	钢筋计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GJ28	正值是张拉力，负值是承压力	2018-03-26 11:35:23.201+08	2019-09-16 14:01:51.23+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
c89d02cd-f052-4004-aa3e-93906248a62b	土壤温湿度计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TRWSD		2019-09-16 16:50:20.691+08	2019-09-16 16:57:52.682+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d3763c4f-94ba-4ae4-b35e-ccff2340c16a	钢筋计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GJ32	正值是张拉力，负值是承压力	2018-03-26 11:35:24.351+08	2020-04-09 09:43:01.859+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
7d9b7e21-42e2-4040-86d7-4bdbba095e43	温度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WD120		2019-12-11 15:37:46.764+08	2019-12-13 11:13:40.496+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
69f9043f-2ce4-4d39-97fe-94f6c2f6185c	倾角传感器n	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN635	nb访问电信	2019-09-17 09:22:11.093+08	2019-09-19 13:39:18.483+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12-B		2019-06-11 17:24:10.297+08	2019-09-18 15:36:58.781+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
fbb11421-cbb6-435e-b9f0-4bf1e056016c	Door	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		Zigbee		2019-12-16 11:28:19.773+08	2019-12-16 11:28:35.04+08	\N	4
3d182049-68c9-440d-adde-b62b71abee38	土压力计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-P6		2019-04-28 11:28:04.769+08	2019-09-18 16:55:35.846+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
888fb650-543d-4141-a70e-7dff25dfffe7	渗压计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-W9		2019-06-11 15:50:05.398+08	2019-09-18 16:55:41.739+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
f70240a0-3384-4984-a854-65fe5b16dc0a	土压力计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-P10		2019-06-11 16:27:10.938+08	2019-09-18 16:55:47.124+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
283a3cd5-8593-4b92-a528-bbd35a07b288	渗压计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		W9		2019-02-22 11:35:40.167+08	2019-09-18 17:16:23.058+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
ba311e19-eea2-4eff-8674-1a146dab66c3	称重采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WIM-V1.00	北京欧乐	2019-11-27 14:14:55.482+08	2019-12-16 11:37:09.389+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0fbc8f32-4f32-4e21-bbba-34023ac70ff4	Zigbee温湿度计	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		Zigbee		2019-12-17 15:53:57.591+08	2019-12-17 16:36:45.525+08	\N	4
d4476f92-5675-4de7-982e-fd914541136a	裂缝计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-FYLF		2019-12-17 14:09:15.081+08	2019-12-18 10:29:08.041+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
ff8195ce-78e0-4668-81bb-8f26e83411a9	裂缝计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LFXX-Z-RTU		2019-12-05 15:44:56.852+08	2021-02-20 17:45:51.119+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
04f55cdb-e98a-4dc9-b3fc-480a9a241a02	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-TY04	配套飞尚多通道振弦采集仪	2019-02-25 15:39:43.173+08	2020-04-13 11:38:03.613+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
998a52d3-f5ee-4d52-997f-1865b390e26b	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-TY20	配套飞尚多通道振弦采集仪	2019-02-25 15:44:37.089+08	2020-04-13 11:38:09.184+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	GNSS	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GNSS-File		2019-09-04 13:53:37.946+08	2019-09-04 13:54:22.322+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7efbc3e8-ff6b-433b-9041-c76b9df89644	静力水准仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JLSZ-V1.00		2019-01-04 15:34:26.862+08	2019-09-04 15:15:51.578+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-TY02	配套飞尚多通道振弦采集仪	2019-02-25 15:46:53.761+08	2020-04-13 11:38:14.404+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
e7ed3509-511e-4c5d-8aec-3f331ec8defa	钢筋计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GJ32	配套飞尚多通道振弦采集仪	2019-02-25 15:47:53.704+08	2020-08-17 15:08:17.917+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	内埋式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-NM15	振弦 采集仪	2019-02-25 15:46:09.555+08	2020-08-17 14:14:09.671+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
c169f72a-deae-4135-84ee-62d771722507	内埋式应变计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-NM50	配套 飞尚 多通道采集仪	2019-02-25 15:41:07.227+08	2020-08-17 14:14:14.295+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
1c9756ed-dcf4-4156-9a43-09ce478d2038	激光测距仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LRF		2018-08-14 15:32:39.117+08	2021-01-26 15:43:06.124+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0e7784d1-0cbf-46aa-b156-e3361a3251e4	激光测距仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-LRF		2018-08-14 14:13:28.642+08	2019-09-04 16:09:31.789+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
aa630d67-b466-4f6a-9a04-fe5744954d20	水位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YWJ-JW		2019-09-04 15:40:23.381+08	2019-09-04 16:16:09.902+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
e61d9a9e-3d7f-4488-a60e-252b429dcb7b	振弦测量模块	4da26159-9a73-4068-a2b4-227aaac64a94	4da26159-9a73-4068-a2b4-227aaac64a94	4da26159-9a73-4068-a2b4-227aaac64a94	f		ST-01ATN		2019-09-05 11:41:01.271+08	2019-09-05 11:41:01.271+08	\N	1
dae07648-1adf-44d5-8a90-0519a5106a76	雨量计	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-YL	安信标准协议	2019-12-17 14:54:12.808+08	2019-12-17 14:55:47.098+08	\N	4
a0d7ec2d-24f8-4039-b175-8921c00c1f4f	GPRS节点	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GPRS-JD		2019-08-22 14:36:10.867+08	2020-04-05 12:08:10.599+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
a8dd8956-f9ae-40d0-b207-8f5cf9669545	超声波风速风向传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-FSFXY-Z		2019-12-12 11:29:56.727+08	2019-12-18 16:30:25.604+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-TY10	配套飞尚多通道振弦采集仪	2019-02-25 15:43:06.969+08	2020-04-13 11:37:51.68+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
9bcce139-4a57-4c96-ba1f-914569011b77	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-TY08	配套飞尚多通道振弦采集仪	2019-02-25 15:41:59.706+08	2020-04-13 11:37:57.923+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
7f8fac16-3dbd-4d0a-bf38-322c5818e096	空气质量传感器(恶臭)	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	t		U-SKY100(3)		2019-03-12 09:49:51.407+08	2019-07-08 09:59:01.565+08	ee936773-3935-4a6f-a962-2b0fd1a5c77e	4
c809f621-a9ff-4922-aa0e-1bcadbfcb7e1	电压式倾角仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-800		2019-02-26 16:47:57.156+08	2019-02-26 17:16:45.12+08	0a638ade-14a7-4e31-b102-953f910425a8	4
88bd8ad3-6ffd-4b0f-8768-085e0e59d92e	振弦式土压力计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-660		2019-02-26 16:30:15.669+08	2019-02-26 17:16:49.826+08	0a638ade-14a7-4e31-b102-953f910425a8	4
a504d969-ffb0-42c6-9edd-529d1d61a77c	振弦式钢索计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-960		2019-02-26 16:39:23.413+08	2019-02-26 17:16:54.383+08	0a638ade-14a7-4e31-b102-953f910425a8	4
7ac67279-f72c-4296-ba27-9b03b8c07c05	振弦式渗压计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		T-610		2019-02-26 16:29:15.91+08	2019-02-26 17:16:59.705+08	0a638ade-14a7-4e31-b102-953f910425a8	4
848b15cb-6357-48eb-979d-a6398d05bd8c	一体化采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MicroPower		2019-03-15 16:27:38.689+08	2019-09-06 11:17:38.563+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
1b0b94f1-5fde-428d-aa1c-242e8e024809	轴力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL30	配套 飞尚 多通道振弦采集仪	2019-02-25 14:14:48.82+08	2020-04-10 17:16:26.784+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
145c9d4f-4fc0-4441-a8c4-0f32b15f5018	固定杆式测斜仪（双轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GGC01M	江西飞尚导轮式固定测斜仪	2019-02-25 17:37:03.955+08	2020-04-13 13:12:44.391+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
f7cf6cc3-3067-42c4-8d9d-85df26882451	压电式振动传感器	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZD-S10		2019-02-25 16:03:31.487+08	2019-02-25 17:48:30.705+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
934104cb-a134-4796-9c3d-52f0e8266fa3	多通道振动采集仪	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-iZD08	云振动采集仪	2019-02-25 16:10:34.001+08	2019-02-25 17:48:39.216+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	1
f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	盒式固定测斜仪（双轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-HGC01M	Modbus 盒式固定测斜仪	2019-02-25 17:37:56.386+08	2020-08-05 14:16:22.724+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
3c72a231-83a6-4d92-88d3-d58e0660cef9	多通道振弦采集仪(32CH)	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-F32M	modbus 多通道振弦采集仪	2019-02-25 16:01:22.931+08	2020-04-08 16:10:37.722+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	1
df22cddf-5a50-41f7-980a-0bbef6aeb763	振弦表面式应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-01-VK41		2019-03-15 14:35:35.861+08	2019-03-15 14:39:55.38+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
9ea89d82-49ea-480a-a90a-0b99290db919	风速仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		HQFS		2019-03-05 13:33:36.253+08	2019-03-05 14:20:23.956+08	0a638ade-14a7-4e31-b102-953f910425a8	4
49b8d21c-3486-496b-b17b-ccf195aaeb65	湿度计	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		HQSD		2019-03-05 13:25:13.297+08	2019-03-05 14:20:28.188+08	0a638ade-14a7-4e31-b102-953f910425a8	4
06f5aa07-d8ae-4621-9db2-278fb653ddcd	风向仪	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	t		HQFX		2019-03-05 13:35:31.064+08	2019-03-05 14:26:08.615+08	0a638ade-14a7-4e31-b102-953f910425a8	4
a97834b4-727b-42ad-9ce0-aede595a5727	孔隙水压计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-KY02	配套  多通道振弦采集仪	2019-02-25 11:41:29.878+08	2020-04-09 16:27:56.363+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
3b7ca159-32d0-4c74-8f84-591774636dc5	采集仪	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM32		2019-03-06 09:32:38.148+08	2019-03-07 13:55:58.651+08	69ff6b39-2d8c-443e-939d-f6c087588d22	1
a0803ec9-69c4-41dd-9531-2de25b6274b3	智能网关	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	f		378482		2019-03-07 11:24:52.821+08	2019-03-07 16:11:57.352+08	\N	1
7128744b-0a8b-463f-b231-40f8862cba87	高精物位计	3bc407e4-dd38-4be8-9659-2f9aac78956a	3bc407e4-dd38-4be8-9659-2f9aac78956a	3bc407e4-dd38-4be8-9659-2f9aac78956a	t		BDXK-WY		2019-03-04 11:20:58.173+08	2019-03-11 17:06:09.042+08	db593efc-030f-4b47-b7e1-b49795714439	4
30bfe302-d364-4325-be1f-7fef73afaf77	轴力计（三弦）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZL30-03	配套飞尚 多通道振弦采集仪	2019-02-25 13:43:01.994+08	2020-04-14 10:50:50.737+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
fde20cf0-6bb6-4987-8830-dec5aa5874f2	LVTD裂缝计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-WXCQ		2019-03-08 17:17:40.586+08	2019-04-04 11:02:08.627+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
ce1e7a12-8f26-4f77-8610-4871a40cfe98	静力水准仪	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-01-HLEV05		2019-03-15 14:36:32.756+08	2019-03-15 14:41:37.933+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
ad1ce5b5-24d5-4aa3-9125-bbb25ea24069	振动传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-EXT-ZD		2019-03-15 17:00:45.449+08	2019-03-20 14:57:48.032+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
2f25fa6f-a99e-440e-ac0a-29ada5069d4f	采集仪(API)	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	t		JTM32-API		2019-03-15 11:26:26.404+08	2019-03-17 17:46:40.217+08	69ff6b39-2d8c-443e-939d-f6c087588d22	1
f2d1cabf-7888-4be1-9357-bf5052e5772c	设备1	b3d70ac0-822c-4382-a570-c1a96e482597	b3d70ac0-822c-4382-a570-c1a96e482597	b3d70ac0-822c-4382-a570-c1a96e482597	f		xxxx-24		2019-03-19 10:11:54.281+08	2019-03-19 10:11:54.281+08	\N	4
8ebd65bb-633a-43d4-880a-d916b11067ba	静力水准仪	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	f		HJ-9411		2019-03-27 16:22:34.474+08	2019-03-27 16:22:34.474+08	\N	4
00e79982-c3d7-4bef-a27d-050dc08eaf82	流量计	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	t		CHLL		2019-03-27 10:19:53.291+08	2019-03-27 15:27:20.625+08	a78c9ea6-7625-4604-8b4c-15c694154389	4
cbd0eeaa-e06e-4933-9394-86c48eacae95	测试_测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		anxin_cx		2019-03-19 15:25:06.954+08	2019-03-19 15:25:06.954+08	\N	4
4ff02b0c-e9de-4687-90b5-0e723ab835fe	测试_测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		anxin_cx		2019-03-19 15:25:15.705+08	2019-03-19 15:25:15.705+08	\N	4
e4a7eb69-0c5d-4b87-b1af-913b0220dea2	温湿度气压传感器	82999c5b-1550-42e6-82fb-054c97191ff7	82999c5b-1550-42e6-82fb-054c97191ff7	82999c5b-1550-42e6-82fb-054c97191ff7	f		RY-WSY		2019-03-19 16:45:17.822+08	2019-03-19 16:45:17.822+08	\N	0
18900e9a-1828-4d26-8966-51c1e5ebfa26	静力水准仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		BK-J03A		2019-03-20 15:26:27.794+08	2019-03-20 15:26:27.794+08	\N	4
fc817231-7e3d-4952-b912-0855d2e90545	温度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		1203	温度	2019-03-20 21:36:52.932+08	2019-03-20 21:36:52.932+08	\N	4
6d7ee2b6-ee61-4933-9f14-9378592187da	热量计	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	t		CHRL		2019-03-27 10:22:14.192+08	2019-03-27 15:27:25.619+08	a78c9ea6-7625-4604-8b4c-15c694154389	4
3feb218e-5b82-496a-9f57-71be58552c0d	光栅类应变计	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	t		ZX-FBG-S01A		2019-03-25 11:24:21.005+08	2019-04-09 10:55:46.022+08	e78edb7a-da87-4973-8c4b-ab7b13833072	4
420a7807-dc95-4fe3-bfff-fd1db144ed8e	轴力计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—ZL01		2019-04-10 15:48:52.491+08	2019-04-10 16:08:28.47+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
9aa975c7-a3d4-42ec-a384-17d0425e602a	控制器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		USR-IO808-GR		2019-03-14 11:21:14.943+08	2019-03-26 10:43:10.033+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
360a9975-3171-4f12-b47a-6f57bdf76dfe	西门子PLC	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	t		S7-200_SMART		2019-03-27 09:42:22.603+08	2019-03-27 15:27:05.541+08	a78c9ea6-7625-4604-8b4c-15c694154389	1
248ab293-5e7c-41e5-835a-2978782081de	压力传感器	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	t		CHYL		2019-03-27 09:45:06.489+08	2019-03-27 15:27:12.727+08	a78c9ea6-7625-4604-8b4c-15c694154389	4
c3eaf904-6808-4fde-a795-474b0128fe5f	温度传感器	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	t		CHWD		2019-03-27 10:17:10.449+08	2019-03-27 15:27:16.605+08	a78c9ea6-7625-4604-8b4c-15c694154389	4
9078888c-628e-4b91-94f8-caaedcc9b640	24温度采集仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		RS485		2019-03-28 10:30:24.009+08	2019-03-28 10:30:24.009+08	\N	1
044ef7b0-afed-464c-b3fb-8bbf7fa42023	aaa	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	f		fwe	gre	2019-03-29 16:40:02.698+08	2019-03-29 16:40:02.698+08	\N	1
e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34	山东兴威物联	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		RS485	温度	2019-03-29 17:37:11.113+08	2019-03-29 17:37:11.113+08	\N	1
bb3ec092-4644-42eb-93ba-f9ae9b4b6601	扬尘设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		PmVender_GDB_1001		2019-03-31 14:16:47.785+08	2019-04-01 14:36:22.872+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
3aef6480-e9f6-4b07-8ee4-dc0516520d72	广东江威重力变送器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		RZ25	重力变送器	2019-04-01 14:38:39.906+08	2019-04-01 14:38:39.906+08	\N	4
936ee644-5ea7-4d64-98d7-ff52cc50e113	山东江威静力水准仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		RZ370/1	静力水准仪	2019-04-01 15:38:01.338+08	2019-04-01 15:38:01.338+08	\N	4
cecf35d0-533a-45cd-b740-42f93c4f3df2	扬尘采集设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		RS-ZSYC-M		2019-04-04 11:32:30.406+08	2019-04-04 11:33:04.661+08	\N	4
db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c	锚索计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—GJ18		2019-04-03 16:53:56.854+08	2019-04-18 14:27:12.964+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
7f81d1d0-150c-49d4-9b52-4eda0387c996	全站仪	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	t		TM50_0.5		2019-04-08 10:06:51.197+08	2019-04-24 14:59:55.701+08	cde1d1ef-6811-4c85-b365-c8dc7be87675	1
b73a2e67-7654-49ce-890a-7c2dfec89a03	直角小棱镜	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	t		prism_L		2019-04-08 11:04:20.102+08	2019-04-24 10:10:47.758+08	cde1d1ef-6811-4c85-b365-c8dc7be87675	4
954dabda-7fd8-456d-8d9a-bc7058d4e8ad	解调仪	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	t		ZX-FP-C02-3		2019-03-22 10:33:16.419+08	2019-04-09 10:55:34.755+08	e78edb7a-da87-4973-8c4b-ab7b13833072	1
2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d	光栅类温度计	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	t		ZX-FBG-T01A		2019-03-25 11:18:25.739+08	2019-04-09 10:55:42.769+08	e78edb7a-da87-4973-8c4b-ab7b13833072	4
765f6712-b911-4681-9d31-ce9ee3a45702	通道	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	t		ZX-FBG-TD		2019-03-25 11:32:57.573+08	2019-04-09 10:55:50.233+08	e78edb7a-da87-4973-8c4b-ab7b13833072	1
87bb0352-924e-440f-abb0-2a42797d0eb0	钢筋计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—GJ02		2019-04-10 15:48:53.405+08	2019-04-10 16:20:21.401+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
74d6fefc-59a0-42a8-bd3e-aff394533e06	无线振动测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		LRK-DZ622A	测斜 振动	2019-04-10 18:28:39.197+08	2019-04-10 18:28:39.197+08	\N	1
53efa30f-f738-43ef-9600-0963b6b108fd	振弦采集仪（16通道）	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-ZC16		2019-04-03 14:48:59.277+08	2019-05-31 08:54:38.144+08	ef17730e-9732-4152-9aae-d996160e4d7e	1
3027f2cf-70b8-4ff6-92ee-7432a8b26887	安全步距设备	aed14e79-005c-4916-afac-c1b60faeca1b	aed14e79-005c-4916-afac-c1b60faeca1b	aed14e79-005c-4916-afac-c1b60faeca1b	t		CT-SafeStep		2019-04-16 09:09:09.714+08	2019-04-16 09:14:29.792+08	2aa3d1c2-45fe-4f61-96a4-654d13cc4b34	4
9922afa7-509c-4ee2-8cfa-094233cf6eb1	激光测距	aed14e79-005c-4916-afac-c1b60faeca1b	aed14e79-005c-4916-afac-c1b60faeca1b	aed14e79-005c-4916-afac-c1b60faeca1b	t		CT-Laser-C		2019-04-16 09:11:47.701+08	2019-04-16 09:14:34.171+08	2aa3d1c2-45fe-4f61-96a4-654d13cc4b34	4
cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b	压电式振动传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-ZD-SJQ	振动转声级FS-ZD-A01	2019-12-20 18:07:22.532+08	2019-12-20 18:11:04.073+08	\N	4
f929d6c9-de63-4cb0-89f9-f9e7a22cbadb	压差式变形测量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LTG-Y1000-Z		2019-04-18 18:47:42.207+08	2019-10-31 11:49:20.091+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
efdfb5bf-1488-40b5-825f-629d60ebe7f7	8通道采集仪	84b76f77-20bf-48ff-a6a1-f80965b63275	84b76f77-20bf-48ff-a6a1-f80965b63275	84b76f77-20bf-48ff-a6a1-f80965b63275	f		ACT4238	采集仪	2019-04-18 15:29:49.997+08	2019-04-18 15:29:49.997+08	\N	1
1b53fdfb-8040-4fff-a045-a0bd3ac61881	振弦式水位计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU32-VP560		2018-09-11 15:50:20.314+08	2019-04-19 10:16:50.593+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
1649a4a7-d092-40c1-8217-dc2b8e2ecea0	文件上传设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-File-UpLoad		2019-04-17 15:07:58.421+08	2019-04-18 16:04:44.143+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
82e60098-d956-499c-97c8-810ba64a8589	C型激光测距	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	t		CHT-Laser-C		2019-04-16 09:50:05.885+08	2019-04-19 10:44:31.58+08	5f2040a8-8da6-4f79-bcb6-9b2480beea45	4
85e05ea0-94ca-4806-9393-78780b771a4b	安全步距设备	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	t		CHT-SafeStep		2019-04-16 09:52:28.864+08	2019-04-19 10:44:33.962+08	5f2040a8-8da6-4f79-bcb6-9b2480beea45	4
43bea8b9-c871-432f-90d5-414d9d907254	采集仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		VM301		2019-04-19 16:42:52.605+08	2019-05-15 10:26:09.311+08	\N	4
89fb363a-19d1-4e23-a9af-b2a2c310eb4f	氨气设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BDS-AQ		2019-04-18 11:02:51.777+08	2019-04-18 16:57:13.773+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d5bf6f22-3d7a-4ab0-9043-1020e9516bcc	温湿度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BDS-WSD		2019-04-18 11:06:31.785+08	2019-04-18 16:57:19.025+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-UDAS-KY		2019-04-18 17:58:14.549+08	2019-04-18 18:04:16.959+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
752edd7f-ca25-4a19-bf4a-53a700f2556a	采集仪	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	t		CHT-ACQ		2019-04-16 10:59:31.897+08	2019-04-19 09:20:15.902+08	5f2040a8-8da6-4f79-bcb6-9b2480beea45	1
5d98962d-dbd8-4688-ae48-dbebdce861f6	智能型拉线式位移计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH02-K10		2019-04-22 13:13:08.886+08	2019-04-22 13:59:10.49+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
9b0e1890-c539-43be-8907-1f2eeaa3e309	测试API设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		API_Test		2019-04-22 14:08:53.021+08	2019-04-22 14:08:53.021+08	\N	4
4aac7755-6f82-41a7-adde-756a7548c7f4	光纤解调仪	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	t		FBG-D3		2019-04-23 14:45:48.294+08	2019-04-24 10:06:48.173+08	77c8175d-d8bb-466e-a914-20957a0c6c49	1
fb1aa362-5048-47df-a1b3-89bc55bfe786	静力水准仪	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		Y25JLSZY		2019-04-23 14:22:13.657+08	2019-04-23 14:23:32.357+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
272894c2-dcd9-4a14-8205-f1e9a093f3cd	结构应变计	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	t		BGK-FBG-4000T		2019-04-23 15:05:42.784+08	2019-04-24 10:06:56.358+08	77c8175d-d8bb-466e-a914-20957a0c6c49	4
2698c5d7-398d-41ad-bdea-68e26f77a6bd	疲劳传感器	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	t		TXD-YF-015		2019-04-23 15:47:59.388+08	2019-04-24 10:06:59.89+08	77c8175d-d8bb-466e-a914-20957a0c6c49	4
0ffa5291-87ea-4e05-b031-ef948c53b474	结构温度计	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	t		BGK-FBG-4700S		2019-04-24 09:21:38.782+08	2019-04-24 17:08:21.145+08	77c8175d-d8bb-466e-a914-20957a0c6c49	4
29a8cde9-51c6-4647-8153-de06449e2ba2	裂缝计	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	t		BGK-FBG-4420T		2019-04-24 09:19:20.816+08	2019-04-24 17:08:16.058+08	77c8175d-d8bb-466e-a914-20957a0c6c49	4
83960893-0d31-4f1e-a576-69a4e7bce94c	采集仪	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	t		ZXY1016-t		2019-04-25 15:02:30.55+08	2019-04-29 15:20:15.535+08	05074f6f-1e7f-4d0d-a2dd-9548f9799fdf	1
d59a244e-554e-478d-b874-b75dc0dff2b5	设备测试	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	t		1.0		2019-04-26 13:07:35.547+08	2019-04-26 13:16:25.354+08	8dbfb926-2572-4bb5-bab4-96aba1ea8589	2
3a1c9f2b-76dc-4276-8e10-aba208fd1fc5	振弦式钢筋计	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	t		GJJ-1010		2019-04-25 15:04:01.403+08	2019-04-29 15:20:19.27+08	05074f6f-1e7f-4d0d-a2dd-9548f9799fdf	4
ef966a9a-d938-4526-af04-cee74ea9b600	倾斜仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		MI1600	直接挂DTU	2019-04-18 14:42:33.138+08	2019-05-13 15:23:04.405+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
75c932d0-2df0-4628-81dd-0e9c1f11ff60	压差式变形测量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LTG-Y2000-Z	压差式变形测量传感器	2018-01-24 11:19:02.096+08	2019-06-14 15:31:13.022+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
51b66c98-7a13-42ce-9b80-4df528d01234	静力水准仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-LTG		2019-12-23 10:30:52.202+08	2019-12-23 10:30:52.202+08	\N	4
28463128-4e0e-4167-8aa6-3c6f5accc368	温度计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-T2	温度计	2019-04-28 11:28:46.19+08	2019-10-09 13:54:34.617+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
e66b2170-dac3-4a27-b9d2-46e8fe63f0ce	无线光纤光栅解调仪	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f		NZS-FBG-A02		2019-12-23 14:13:38.172+08	2019-12-23 14:13:38.172+08	\N	1
98ae496a-649c-4719-b18f-705b32d4f545	危大工程光栅传感器	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f		1		2019-12-23 14:17:09.71+08	2019-12-23 14:17:09.71+08	\N	4
b5973739-2377-4164-9d35-d25da04d9d05	激光测距仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-LRF		2019-12-23 14:42:47.819+08	2019-12-23 14:42:47.819+08	\N	4
42fa6a20-85bd-4f18-93f4-2349e5c1e804	温湿度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-WSD		2019-12-23 16:11:23.791+08	2019-12-23 16:11:23.791+08	\N	4
ce8318eb-2d27-407d-9b33-95018458d60f	风速风向仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-FSFX		2019-12-24 09:20:36.074+08	2019-12-24 09:20:36.074+08	\N	4
75780bad-38e2-4dde-adbd-950bd075a1d2	轴力计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—ZL02A		2019-04-28 10:50:55.156+08	2019-07-17 16:31:27.828+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	人流量监控设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		CS5i		2019-04-30 09:49:47.67+08	2019-05-07 09:17:16.246+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d3c271ff-22cb-4938-8c5f-c63484107a38	应变计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		ST1		2019-04-28 11:24:32.85+08	2019-06-18 18:18:21.59+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
6daadb42-2ee7-41fa-a6bd-85d9c0d77383	钢筋计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-ST5	钢筋计	2019-04-28 11:27:08.984+08	2019-06-18 19:03:53.186+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	0
4068ff34-b211-4386-b274-0a6b12f35b59	测缝计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-J2		2019-02-22 13:35:17.617+08	2019-06-11 15:26:59.411+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
d634c358-000d-4c53-8c4b-0f411b4a52c3	智能数据采集器	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-MICRO-MCU	SOIL采集仪	2019-05-14 14:10:38.832+08	2019-06-11 15:02:49.379+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	1
5a46e837-7b8f-4cef-9951-969680cb65db	gateway	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f		V1		2019-04-28 17:41:50.406+08	2019-05-09 09:31:50.791+08	\N	2
dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83	应变计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-ST4	应变计	2019-04-28 11:26:12.315+08	2019-06-18 18:18:37.92+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
9ac9f312-0f0e-45d4-8d00-8420be016826	王飞的测试应用	f44d0365-c02b-42b1-9ad8-89b9a0dc4f58	f44d0365-c02b-42b1-9ad8-89b9a0dc4f58	f44d0365-c02b-42b1-9ad8-89b9a0dc4f58	f		123		2019-05-06 10:14:28.45+08	2019-05-06 10:14:28.45+08	\N	4
3f25f8df-8a52-4d2c-b6ea-714da8be3c00	咏为中精度倾角传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		SCT726T-M	X倾角 Y倾角	2019-04-26 15:57:34.676+08	2019-05-09 14:17:41.161+08	\N	4
e907425b-f687-45f0-9e44-798f6c00968f	振弦传感器	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	f		sensor		2019-05-07 15:54:53.403+08	2019-05-07 16:48:10.497+08	\N	4
0a9ddd56-9373-42fc-b426-17797eeee64a	watt-hour-meter	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f		100A		2019-04-28 17:36:59.002+08	2019-05-22 13:13:59.478+08	\N	4
dc3e2b45-f9db-4aec-993a-d8369918a67e	空气净化器	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f		K20		2020-09-21 09:55:15.994+08	2020-09-21 09:55:15.994+08	\N	4
ef6476c9-709e-4afb-a4d9-57009ee3ecf5	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12-A-2	电压输出	2019-02-22 13:27:41.849+08	2019-06-11 17:47:00.039+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0	振弦采集仪（8通道）	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-ZC08	1-8通道接收频率，9-16接收温度	2019-04-29 15:49:13.013+08	2019-05-31 17:58:29.274+08	ef17730e-9732-4152-9aae-d996160e4d7e	1
1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17	temperature_sensor	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f		V1		2019-05-08 17:53:13.468+08	2019-05-08 18:26:53.034+08	\N	4
f753602f-9889-47cc-a42c-2905bdaab97e	位移传感器	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	t		LFWY01		2019-05-09 09:58:07.883+08	2019-05-09 11:07:05.634+08	d4d2115f-fe6e-410d-9b82-2b21fa4fade1	4
54e76b93-f8ed-407b-b112-ed4a85db50db	倾角传感器	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	t		LFQJ01	设备主动上传	2019-05-09 10:06:14.136+08	2019-05-09 11:07:09.285+08	d4d2115f-fe6e-410d-9b82-2b21fa4fade1	4
7802e3d3-ffbf-4146-954f-a67f1cbfb41c	位移传感器	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	t		LFWY02		2019-05-09 17:23:15.191+08	2019-05-09 18:11:06.301+08	d4d2115f-fe6e-410d-9b82-2b21fa4fade1	4
b8061f6d-fe6e-443d-bed9-8b4e7fb81a71	应变计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-ST3	应变计	2019-04-28 11:25:30.648+08	2019-06-18 18:18:32.219+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
6151fdf6-4bb4-466e-b727-56b68ebf43e1	载重	bda7431e-46ed-40b2-bf13-b511219a8fcb	bda7431e-46ed-40b2-bf13-b511219a8fcb	bda7431e-46ed-40b2-bf13-b511219a8fcb	t		HI-TRAC-TMU4	测重	2019-05-13 16:27:13.633+08	2019-05-14 09:45:31.295+08	fe723f98-2007-4786-8a13-7b8cf97e9fb0	4
ff67a769-94ed-4f3d-b944-b1f4d4468eec	安全帽	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-SafeCap		2019-05-14 16:57:37.938+08	2019-05-16 18:02:39.905+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ecad4b77-ab58-460f-8469-b89b3c77d796	2D_FROZEN	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f		1Door		2019-05-08 18:17:31.592+08	2019-05-18 22:25:37.8+08	\N	0
0cbb0bb5-1c3c-4fc8-94a1-981c026350f8	土壤水分变送器	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	t		DSW-T1		2019-05-13 11:18:59.475+08	2019-05-15 10:06:59.693+08	0c9fca00-5fd3-43ef-8264-09333066ff13	4
65b11e66-836c-4898-bde7-46706a2f74af	倾角仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-Q01AD		2019-06-27 17:01:33.244+08	2019-09-09 14:47:53.885+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
d9b333ed-096a-405a-9c9a-905cd04d2368	振弦采集仪（16通道）	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		anxin-16		2019-06-05 10:58:32.277+08	2020-09-15 09:26:51.99+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	1
7f382df2-35f7-4128-9276-d2a3a40d6547	云盒	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	t		JC-T4		2019-05-30 11:20:53.226+08	2019-05-30 11:21:28.782+08	40f627af-dfd1-4cd2-9921-110d47d4461c	1
4b8a42f4-db96-4d3d-937c-0e98cae45ea0	应变计	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	t		LFZX001	集采集仪于一体	2019-06-06 14:15:52.928+08	2019-10-18 15:14:57.53+08	d4d2115f-fe6e-410d-9b82-2b21fa4fade1	4
fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed	振弦采集仪（8通道）	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		anxin-8		2019-06-05 10:43:13.765+08	2020-09-15 09:26:43.944+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	1
290bae7d-a183-4af8-be82-963486855761	电阻式温度计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-WF760		2019-05-28 15:02:38.775+08	2019-05-29 15:29:52.625+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
82c4e869-135f-466b-af92-27b7979b1fd2	振弦式轴力计	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	t		JY-1040	河南新睿的项目	2019-05-15 10:48:06.5+08	2019-05-17 18:07:31.471+08	4151ce66-cea2-470e-b9d6-1a9915f98dc4	4
82ec14e4-a0ee-4d21-9fcb-24cde7cf551b	卸料机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-XLJ		2019-05-29 14:51:02.746+08	2019-06-03 09:24:46.471+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d93ae98f-5dbc-45c3-81cf-8f9360a11684	test	e4e6d844-eda4-4bd9-9572-069581fdf034	e4e6d844-eda4-4bd9-9572-069581fdf034	e4e6d844-eda4-4bd9-9572-069581fdf034	f		111		2019-05-22 16:00:03.709+08	2019-05-22 16:00:03.709+08	\N	0
d8d4cee4-3e1d-4d43-8861-53ccd536112e	振弦采集仪（32通道）	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		anxin-32		2019-06-05 11:07:53.591+08	2020-09-14 10:49:15.442+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	1
104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1	倾角传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—Q01B		2019-05-30 13:47:48.525+08	2019-05-30 14:30:21.945+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
6474815f-e86c-4909-966f-5fb6efc5c674	单点式沉降计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—DC100		2019-05-15 10:32:01.136+08	2019-05-24 08:49:30.356+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
5a3bf41b-78ef-45fa-96e2-ac2a42767d71	智能数据采集器	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		DT85G-WS		2019-06-11 15:06:43.218+08	2019-12-04 11:31:29.351+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	2
31c3b19c-2202-408e-ba8f-efd800be8801	陶瓷电容式静力水准仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		MCU32-CSL570		2019-06-03 11:50:03.926+08	2019-06-03 13:42:42.54+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
d38d0e7a-cf28-4180-b331-9b950cfb89fd	加速度传感器	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-JSD		2019-12-24 10:40:55.034+08	2019-12-24 10:40:55.034+08	\N	4
85e07675-26a2-435b-8ee9-6c790ffe7463	振弦采集仪（8通道）	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-ZC08w	1通道频率对应9通道温度	2019-05-31 18:01:12.152+08	2019-06-05 16:38:21.977+08	ef17730e-9732-4152-9aae-d996160e4d7e	1
42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	全温补高精度数字输出型双轴倾角传感器	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	t		ACA626T-5	北京瑞芬	2018-01-16 10:21:41.69+08	2019-05-30 10:26:20.956+08	19a42196-a096-4d6a-84d1-67d7c3030605	4
721eaa20-a7b1-457b-a5b3-f5eb9b313129	振弦采集仪（3通道）	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-ZC03		2019-05-22 10:38:30.96+08	2019-05-30 15:39:19.357+08	ef17730e-9732-4152-9aae-d996160e4d7e	1
304a0d25-d131-4d28-9534-296b7df2adb3	表面应变计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK—BY3000		2019-05-29 15:57:45.362+08	2019-06-04 17:35:49.094+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
b69e622c-7f6b-4539-8ff3-f3027cb3a592	智能数据采集器	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-D1	六通道	2019-05-23 13:53:19.234+08	2019-06-11 15:02:54.415+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	1
9c72853f-96b7-41a6-ab9e-10eafbf22a10	磁致位移传感器	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	t		KYDM-LP3MR910-GC1500		2019-06-18 11:02:55.433+08	2019-06-20 10:23:25.876+08	b2cdf84b-2f7e-4c47-9132-a579b62a3926	0
c06263f7-c818-41f4-949a-4a526770fa9b	土体位移计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-E7		2019-06-11 16:41:49.124+08	2019-06-18 19:02:45.483+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
57df002c-3fa7-4684-a2b3-f46f54b7f87b	钢索计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-ST6		2019-06-11 15:43:02.151+08	2019-06-18 19:02:29.487+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
f93393d2-0bfd-4685-b6d9-31287c466007	静力水准仪	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-W10-PD	modbus	2019-06-11 16:14:17.077+08	2019-06-11 18:01:12.019+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
2142db9e-293b-43a9-9883-3d41391ba533	锚索计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-L2		2019-06-11 16:37:25.792+08	2019-06-18 19:02:39.915+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb	测缝计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-J2I		2019-06-11 15:59:09.828+08	2019-06-11 18:01:31.695+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
aaee1bcc-dde9-4cef-8fde-7c072b96eab5	液压计	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-YY		2019-12-24 11:15:19.99+08	2019-12-24 11:15:19.99+08	\N	4
958debc4-8460-4237-a960-d51a6a866071	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12D-B		2019-06-11 17:32:28.558+08	2019-06-11 17:59:07.509+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
14068f43-74c6-48e8-b004-29eefa28fd36	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12D-A-2		2019-06-11 17:28:58.604+08	2019-06-11 17:59:14.324+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
4f72b98e-690d-429f-9b64-ab8de1c41a0b	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12G-1		2019-06-11 17:20:41.942+08	2019-06-11 17:59:25.636+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
964d519d-ec1b-4a4c-8a02-01402c99d348	测斜仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-CX		2019-12-24 11:48:30.832+08	2019-12-24 11:48:30.832+08	\N	4
d52023ca-77dc-4b31-941a-5cb6d2b1a297	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12D-A-1	modbus	2019-06-11 17:11:17.09+08	2019-10-09 15:09:27.441+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
67f6e3ca-2368-45ff-a678-53f942e71caa	MEMS倾角计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-C12-A-1		2019-06-11 17:18:00.714+08	2019-06-11 17:59:50.617+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
2f885022-839d-4c38-ae7a-b4c9881ca394	测缝计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-J1		2019-06-11 15:55:27.346+08	2019-06-11 18:00:28.805+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
8b3a3d99-7016-4c26-b6b6-65b742fcfc8b	废气污染物传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		MS80-IR		2019-06-18 15:44:35.478+08	2019-06-18 15:44:35.478+08	\N	4
7fae0d43-0664-4c19-9d35-db80a97b6da2	多点位移计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-E10		2019-06-11 16:42:42.385+08	2019-06-18 19:02:50.561+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
3636e235-3352-4944-8092-c0b68a659ef1	量水堰计	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-W10		2019-06-11 16:47:18.238+08	2019-06-18 19:03:13.509+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848	静力水准仪	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-W10-DM	modbus	2019-06-11 16:18:28.987+08	2019-10-09 11:09:20.539+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
91fc5de6-ad9d-47e3-ace2-1c2bd04979e5	TCP测试设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		TCP_DeviceDemp		2019-06-19 13:58:50.98+08	2019-06-19 13:58:50.98+08	\N	4
4657f5dd-e39e-4be0-bc95-833443066096	固定测斜仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-X01AD		2019-06-27 17:34:29.062+08	2019-09-09 14:47:56.351+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
c8c925b5-d496-4eb8-a0c7-189ce391ff1a	智能数据传输模块	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	t		SOUTH-DCS4		2019-06-14 11:20:06.165+08	2020-06-15 10:10:17.931+08	73386ae5-ef81-46d7-97d1-617a84709958	1
b10f2486-b1e8-48d6-8683-216a40bcb3bb	倾角计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN630		2019-06-20 09:22:50.959+08	2019-06-21 16:29:46.955+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
5b797de0-bd75-4cc6-9bb7-4811869ba7d3	数字式自动化采集仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-MICRO-32D		2019-06-20 16:55:24.365+08	2019-06-21 16:29:51.728+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	1
3d52e349-bf19-46d5-bb7e-f1f533d10190	大气质量监测仪	6879ee09-86fe-48d2-a3ff-bd5395d66a27	6879ee09-86fe-48d2-a3ff-bd5395d66a27	6879ee09-86fe-48d2-a3ff-bd5395d66a27	t		DZ-IGASQ		2019-06-25 11:39:02.375+08	2019-06-25 12:00:16.488+08	3f71a23d-2762-47d5-8d94-12f9671d4b53	4
239fdc2a-bd0a-4cd6-b0c4-f7371f99f620	23	d71ba443-4232-4479-a2d3-2da5387cab6b	d71ba443-4232-4479-a2d3-2da5387cab6b	d71ba443-4232-4479-a2d3-2da5387cab6b	f		22323		2019-06-25 15:49:19.305+08	2019-06-25 15:49:19.305+08	\N	1
f41380a3-bc12-4229-8b46-67472fd5d9b3	光栅光纤解调仪	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-FBG-8600		2019-06-27 09:35:12.059+08	2019-06-29 15:24:59.178+08	b28ef84f-ad39-4657-8465-7968e542bdcd	1
e8b1dd32-dd34-4923-a91d-e21f81210749	恶臭微型气象站	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		MS80-EC		2019-06-18 15:48:02.195+08	2019-07-17 15:32:42.287+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
4b13a538-ac93-4bc0-8515-4181c57b8650	光电光栅埋入式应变计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK–FBG–4000T		2019-06-27 09:35:21.01+08	2019-06-29 15:25:01.582+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
1c182e32-a4cb-4882-991a-be791c200d73	激光测距仪	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	t		GXLMXX	武汉承拓电子科技有限公司激光测距仪	2019-06-27 13:03:58.338+08	2019-06-27 13:05:00.181+08	5f2040a8-8da6-4f79-bcb6-9b2480beea45	4
db69fe15-3a1d-46c9-9e21-5bef4ff4e964	位移计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-LW01A		2019-06-27 14:07:45.225+08	2019-06-28 15:51:56.052+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
32a78a97-fea6-477a-9cfd-7f512d81b40c	位移计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-LF01A		2019-06-26 11:57:22.675+08	2019-06-28 15:51:59.517+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
9f8addd9-3d2e-434c-bc28-e73322276c7a	虚拟DTU	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		GK-V-WG		2019-06-27 09:35:05.694+08	2019-06-29 15:24:56.681+08	b28ef84f-ad39-4657-8465-7968e542bdcd	1
aa852395-17c0-4ccf-a911-c8090dd6f578	应变计	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		AX-YB		2019-12-24 16:23:58.885+08	2019-12-24 16:23:58.885+08	\N	4
54335927-f86b-44bd-aebe-f07fc9cddaed	DTU	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t		F2A16		2019-07-08 18:21:40.557+08	2019-07-25 09:52:42.396+08	cfd55b15-fe53-4c95-87a6-daddbc4fb638	0
35ce9dd7-8476-4933-8a0a-27ada0e8ddf0	称重传感器	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-CZ05		2019-06-27 14:28:06.355+08	2019-06-28 15:51:52.517+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
193aabad-c6d8-4ec6-8ca5-df2c25ae71e2	磁致式静力水准仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-J02AD		2019-06-27 15:43:13.185+08	2019-06-28 15:52:34.148+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
d1d8105f-3b3d-4c89-a378-2e76afbb6f36	光电光栅裂缝计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK–FBG–4420–12.5		2019-06-27 09:35:29.124+08	2019-06-29 15:25:04.228+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
f25dac37-cd4c-4f51-b8ff-1d5d051fb21e	激光测距仪	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-JC01A		2019-06-28 09:51:38.273+08	2019-07-02 18:13:33.351+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
0df71d00-3d48-44a5-9c6f-8cceae090b0d	倾角仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-630		2019-06-28 14:47:16.369+08	2019-08-02 15:58:17.239+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
4fa8750d-807d-4c0c-9526-2662418f6f2f	表面式钢弦应变传感器	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMZX-212	接基康光电光栅采集仪	2019-07-09 15:10:11.699+08	2019-07-12 14:28:05.839+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
7b879c12-2bc2-4ff7-a2ba-b730169c30c9	Zigbee Temperature	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Zibee Temperature Sensor by iOTA	2019-07-06 17:22:08.727+08	2019-07-15 10:43:51.162+08	\N	4
64af86ba-2ede-48c5-b410-7e40264cdd8a	iOTA Power Meter	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	3 phase power meter.	2019-07-24 17:41:18.522+08	2019-08-06 11:51:43.943+08	\N	4
6d2dad31-9715-4522-a382-9b1b99f9bebc	222	d71ba443-4232-4479-a2d3-2da5387cab6b	d71ba443-4232-4479-a2d3-2da5387cab6b	d71ba443-4232-4479-a2d3-2da5387cab6b	f		23232		2019-07-22 10:33:56.597+08	2019-07-22 10:33:56.597+08	\N	4
c2508e96-b2cc-4a5f-8015-aa9492a11193	光栅光纤采集仪	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-Micro40		2019-07-09 15:05:43.53+08	2019-07-09 17:28:22.938+08	b28ef84f-ad39-4657-8465-7968e542bdcd	1
676c48ff-13c3-426f-9871-989570d76ef9	流量计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LLJ100		2019-07-09 15:00:57.803+08	2019-07-10 11:17:03.549+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
151950ee-2a96-4cb7-a2c7-8b8e15dcae36	3 Door Chill	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Chill with 3 door sensors and 1 temperature sensor.	2019-07-15 14:04:02.914+08	2019-07-15 14:32:48.772+08	\N	4
df281eec-f674-4f68-bd65-ed56abf4f20c	单轴固定倾斜仪	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-MCU-4R-DZ		2019-07-09 08:53:49.429+08	2019-07-12 11:25:49.089+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
d926295e-4fda-4948-a719-bf6e04d96ddb	iOTA Zigbee Edge	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Zigbee to MQTT Edge	2019-07-06 16:53:20.932+08	2019-07-15 11:54:00.647+08	\N	1
7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	2 Door Freezer	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Freezer with 2 door sensors and 1 temperature sensor.	2019-07-15 14:31:13.666+08	2019-07-15 14:33:16.044+08	\N	4
de5f1899-8b36-4792-b34f-44a6f7748a86	温湿度传感器	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	t		huananws		2019-07-03 11:29:35.852+08	2019-07-16 15:43:22.654+08	4f42d31f-9c35-41b4-a21a-96b2e2e24619	4
a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	空气采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-oxy-agentl		2019-07-17 14:29:44.524+08	2019-07-17 14:29:44.524+08	\N	4
68885fd4-0280-410a-bf22-3afadec546f2	高精度压力式水位计	802a6ad5-5ee7-4234-8c91-32aa074a0685	802a6ad5-5ee7-4234-8c91-32aa074a0685	802a6ad5-5ee7-4234-8c91-32aa074a0685	t		HR8003		2019-07-22 16:03:30+08	2019-07-22 16:14:18.094+08	01f46e8d-4d8a-4474-8860-b7f71abb616f	4
d3d5de96-da53-4adb-b8f8-29d0e0c8209c	锚索计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4900		2019-07-16 17:46:08.879+08	2019-07-18 08:59:35.752+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
6def140f-5189-490c-ab4c-57e84dfcd3bf	翻斗式雨量计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		GT-Ra1		2018-04-03 09:04:11.219+08	2019-07-19 16:46:31.306+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
a83dcd92-561e-40ba-b71c-b6d062d2bcb3	加速度传感器	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	t		PRE-1		2019-07-23 09:33:53.796+08	2019-07-23 11:23:52.462+08	4f42d31f-9c35-41b4-a21a-96b2e2e24619	4
8830f3b8-1be3-48ae-b1d0-8a9583cf4a18	压力传感器	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	t		ACC-1		2019-07-23 11:13:52.723+08	2019-07-23 11:23:56.622+08	4f42d31f-9c35-41b4-a21a-96b2e2e24619	4
433dc632-5b76-47eb-8a4f-eb40b4ba71bb	采集仪	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		HS-IOT102		2019-07-03 11:17:20.922+08	2019-08-01 11:12:25.898+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	1
6980d68e-b6b4-4ab2-a048-042672a46cef	iOTA Zigbee Router	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Zigbee Router by iOTA	2019-07-06 16:55:42.73+08	2019-08-06 11:52:16.871+08	\N	4
390e46cc-b69d-4966-89f4-d305afdd4649	光电感烟火灾探测报警器	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	t		RS-YG-N01		2019-07-31 10:14:14.838+08	2019-07-31 10:23:14.385+08	82e912a1-10ca-41af-ad56-79cc088ef375	4
ce76608b-0e66-4498-b079-51aa9f03c950	倾角计	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		hs-QJJ		2019-07-31 16:04:11.13+08	2019-08-01 11:12:29.484+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
70cf173e-f529-4704-805e-193f1a6478cc	物联网传感器	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		HS-100		2019-07-26 11:18:48.457+08	2019-08-01 11:36:21.511+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb	投入式水位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TRS-XX-Z		2019-12-11 15:50:46.303+08	2019-12-25 14:14:08.935+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f0c82197-9e9a-42f2-a4e2-541c52deff52	智能图像测距仪	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	t		HT-12MPF30I3F		2019-08-07 10:26:40.97+08	2019-08-13 10:35:03.972+08	dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8	1
d77b7e20-7877-47dc-aef4-37a663bac660	振弦式弧焊型应变计	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	t		BGK-4000	配套 基康 (振弦)自动化数据采集仪	2018-01-05 10:51:34.738+08	2019-08-12 17:18:58.298+08	b28ef84f-ad39-4657-8465-7968e542bdcd	4
1c7ee1c6-3d99-4236-834f-6e0746c0f69f	采集仪	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	t		TST-001		2019-08-05 18:14:48.648+08	2019-08-05 18:17:08.843+08	396c7a87-c01f-4fc0-84bb-813f5525e16a	1
077e62b4-27da-47aa-846d-3d9169a8a895	虚拟DTU	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	t		TST-VW		2019-08-05 18:12:12.123+08	2019-08-06 11:19:22.428+08	396c7a87-c01f-4fc0-84bb-813f5525e16a	1
01da29ac-f803-4381-ae7f-28264effac4f	2 Door Chill	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0.0	Chill with 2 door sensors and 1 temperature sensor.	2019-07-15 13:27:37.546+08	2019-08-06 11:52:42.236+08	\N	4
df7ff0f8-b92c-4856-a1af-bf3244a8610a	土壤含水计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TYHS		2019-08-06 11:00:53.83+08	2019-08-06 13:24:49.606+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
bfe0979a-c0e4-4430-89d3-5fbe86568640	GPRS8通道节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		GPRS-JD-Eight		2019-08-07 10:40:39.025+08	2019-08-07 11:01:14.571+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
bff19d80-ce20-4c3d-b158-df091a1fb5ac	LVDT裂缝计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LF50-X	LVDT裂缝计	2018-05-16 17:44:54.87+08	2019-12-26 13:53:20.109+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8e44219e-9d4e-40ed-85b7-85dd24f8e821	高支模采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GZMCJY-HTTP		2019-08-08 15:55:26.52+08	2019-08-09 09:02:38.405+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
3758c306-d352-4ff8-b9ef-470a58efa0a4	iOTA Edge	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	f		1.0		2019-08-09 13:11:50.732+08	2019-08-09 13:11:50.732+08	\N	0
d6189068-bb18-4c68-a359-8e3139ab22e5	分布式云振动网关	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-iFWL-VWG		2019-08-22 09:52:17.806+08	2019-12-27 15:04:56.291+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	1
9de2769d-cd81-43c4-ae6d-82f4cb9431de	风速风向传感器	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	t		EC-A3		2019-08-08 08:57:43.005+08	2019-08-20 15:16:09.105+08	05ef6403-9f87-4092-8b09-be1cfc2f9369	4
e257dc56-f70f-4ba8-b653-c5d047f9edba	雨量计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-YL01		2019-08-12 09:55:16.271+08	2019-08-12 11:53:13.337+08	ef17730e-9732-4152-9aae-d996160e4d7e	4
f75a7b9a-2288-4f05-b3ec-5f17a297e53c	振弦采集仪（单通道）	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	t		BK-ZC01		2019-08-01 15:00:23.346+08	2019-08-26 11:02:18.852+08	ef17730e-9732-4152-9aae-d996160e4d7e	1
52c7f175-bdd6-4c4c-948d-aa2a7868cd82	雨量计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YLJ-Z		2019-12-11 10:58:32.077+08	2019-12-27 15:32:30.923+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
53070eae-7839-46df-9492-f1b4c0b0b101	静力水准仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JLSZ-30-V1.00		2019-06-06 17:24:55.44+08	2019-08-12 17:32:50.839+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f49b431e-9069-47ec-a493-fd3c45eed27a	温度传感器	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-200D		2019-12-30 13:30:51.462+08	2019-12-30 13:46:38.885+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
00576fa4-94c0-4ef1-b26c-189142d5bdea	数据采集仪	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-SI-MICRO		2020-03-19 13:24:27.248+08	2020-03-31 17:01:56.973+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	1
47de1028-1b35-4a17-b78e-f66178ecb4e6	多维度变形测量系统	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-SL		2020-03-23 13:05:09.158+08	2020-03-31 17:02:01.186+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4	固定式甲苯检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-C7H8		2020-01-14 14:12:06.469+08	2020-01-15 13:51:02.995+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
84deac79-cd1d-4320-bcc6-3a0cdd4451da	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL10		2018-04-16 11:54:59.719+08	2019-08-22 11:08:30.85+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
7f76a800-a32e-483a-a948-919fc9e7d075	孔隙水压计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-KY06C	工讯科技(深圳)有限公司	2018-04-08 14:06:27.112+08	2020-03-13 18:40:05.755+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
3aba791d-d6b2-4175-bb20-109f210f4065	振弦式土压力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-TY08	振弦式土压力计	2018-03-26 11:43:22.853+08	2020-03-13 18:41:10.849+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
df68d6a9-c963-4bc4-a122-332e3d1435ac	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL20		2018-04-16 15:46:07.714+08	2019-08-13 09:45:03.576+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
20ff998d-3014-4f62-ad12-37b56883c435	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL40		2018-04-16 15:46:12.359+08	2019-08-13 09:45:05.836+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
c60cc02d-8c37-447a-9f9d-947aa66b7f39	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL30		2018-04-16 15:46:07.872+08	2019-08-13 09:45:08.521+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	温度传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-WD120T		2019-06-21 13:52:33.001+08	2020-03-16 15:17:35.907+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL60		2018-07-19 09:35:56.538+08	2019-08-13 09:45:13.405+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
8fcb81d8-34ce-41b8-93c9-69d15060fa40	轴力计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZL50		2018-07-19 09:35:55.136+08	2019-08-22 11:26:44.545+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
e600502e-b2ff-466a-9fa6-b9e9e554647c	水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YWJ-JW-MP		2019-09-04 15:48:38.122+08	2019-09-09 16:12:25.098+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
42eb2303-14bd-4431-9ca6-d5b8b2590d1d	静力水准仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-JLSZ-V1.00		2019-09-10 16:52:37.733+08	2019-09-11 11:51:41.801+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
1131f328-b9a1-4361-beae-547a1acb032d	DCS	d41427b1-5907-4063-88c6-422f4f478d1f	d41427b1-5907-4063-88c6-422f4f478d1f	d41427b1-5907-4063-88c6-422f4f478d1f	f		101		2020-03-20 10:56:08.934+08	2020-03-20 10:56:08.934+08	\N	1
c730d30c-6a9d-4e3e-b347-7dfbe40a217d	粉尘浓度监测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GDJCY-FC		2020-03-23 16:30:30.292+08	2020-03-23 16:31:56.802+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ca6af9e3-f1dc-4992-8029-d0e438ef99b5	钢筋计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GJ22	正值是张拉力，负值是承压力	2018-03-26 11:30:25.42+08	2019-09-16 14:01:45.67+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
ec7b0da8-24a8-48ad-b64a-0ea416189d8a	振弦采集仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-MICRO-32		2019-06-24 16:49:45.119+08	2020-05-14 11:41:40.245+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	1
0b09cbd9-3881-4b4a-8910-0e8730d5d935	钢筋计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-GJ25	正值是张拉力，负值是承压力	2018-03-26 11:35:22.719+08	2020-06-15 21:05:46.152+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	GNSS	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GNSS-RTU		2020-03-12 15:37:30.912+08	2021-02-19 08:50:05.615+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
50fc0df9-2b02-445b-b04e-17209e8c69ee	温度计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-WD		2019-09-25 11:24:05.275+08	2019-09-26 11:37:41.036+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
f29e4bb2-0e42-4016-b27e-f2377c115ff1	水稳应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-YB-C		2019-09-25 17:25:19.267+08	2019-09-26 11:37:51.532+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
f535897b-dc69-4835-b0d7-b4a6062db938	竖向应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-YB-AV		2019-09-25 13:51:38.081+08	2019-09-26 11:38:06.317+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
c209cbd1-8662-42e5-81d2-6cba239aa394	(振弦)自动采集系统	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f		BK-ZXC01A		2019-09-23 14:19:34.126+08	2019-09-23 14:19:34.126+08	\N	1
73ac8e46-173b-4f23-bb89-edd506496e34	混凝土应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-YB-SC		2019-09-25 11:54:59.641+08	2019-09-26 11:38:08.748+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
6225c8bb-1497-4354-ad28-e5eb698de9f0	振弦采集仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		NB-IOT-4	复制上海建工	2019-09-19 09:36:03.227+08	2019-09-23 14:47:29.482+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	1
da5f4309-1696-4853-94ef-f11b9d0602e0	数码型埋入式应变计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f		YKMS-1157I		2019-09-24 11:35:39.622+08	2019-09-24 11:35:39.622+08	\N	4
59e0e84c-3ab8-485a-a6fc-d880a79b296a	数码型表面式应变计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f		YKMS-1140I		2019-09-24 11:35:42.165+08	2019-09-24 11:38:09.03+08	\N	4
b20e46ed-a619-476a-9c50-88e1b8ea3697	数码温度型埋入式应变计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f		YKMS-1157IT		2019-09-24 11:44:07.126+08	2019-09-24 11:44:07.126+08	\N	4
4ccb1624-a210-4672-9951-0dbf335dcdb1	数码温度型表面式应变计	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f		YKMS-1140IT		2019-09-24 11:49:24.117+08	2019-09-24 11:49:24.117+08	\N	4
9aa93498-820e-4fc6-a288-5b2274fb9246	分布式智能索具云采集系统	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-SJWG-V1.10	索具云网关	2018-08-28 18:06:12.379+08	2019-09-24 11:51:03.459+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
37bc2c29-264c-4366-8fe1-9c2984702b94	土压力计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-TYL-FW		2019-09-25 10:49:31.374+08	2019-09-26 11:37:27.927+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
5102e0bc-4778-43b6-80d3-fd71e4032088	沥青应变计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-YB-A		2019-09-25 11:51:56.952+08	2019-09-26 11:38:11.042+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c	梁式测斜仪	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-716TL	无锡咏为SCT716T-30-485（单轴）	2019-09-29 10:32:53.714+08	2019-10-15 14:32:41.604+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448	停车场管理设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		BS_Pproperty		2019-09-29 14:37:47.009+08	2019-11-01 14:26:34.382+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f190bf5a-78ab-4963-aac1-2fda921f2507	采集单元	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-T420	采集单元-T420（16通道）	2019-09-29 16:05:37.72+08	2019-10-15 14:32:38.62+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	1
a4e6dddc-930c-4704-9c93-9a8d78da81cb	EC-1型风速风向仪	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-FSX		2019-09-29 10:34:35.294+08	2019-10-10 16:51:02.166+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
c96dced7-2915-4087-9ba5-b6f9bdc35f89	雨量计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YLJ-D		2019-09-29 15:43:10.877+08	2019-09-29 16:08:01.979+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
594ffc3d-f245-4a5e-8843-9448105cb86d	温湿度传感器	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-WS301		2019-09-29 10:41:59.462+08	2019-10-10 16:50:57.174+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
a47565e1-92e5-41e9-ba98-79a93065f0ee	数字型双轴倾角计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-716T	无锡咏为SCT716T-30-485（双轴）	2019-09-29 10:33:47.166+08	2019-10-16 09:13:31.923+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
6cb2c0f8-0c45-42e6-97ca-56d97a4a3484	路灯	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LED220W		2019-10-09 14:19:59.803+08	2019-10-23 09:52:40.466+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471	钢筋计	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	t		DH001		2019-10-09 13:09:24.407+08	2019-10-09 13:12:27.74+08	06a9522a-1277-41df-a73c-54910c8bddd8	4
150f2029-8823-45cf-813a-4a6a3e427d2f	新总线型采集模块1	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMJK-II1	这个只接静力水准仪\njima-jl，因为数据2是一直为0	2019-10-08 17:01:20.284+08	2019-10-14 16:04:37.268+08	941c9c57-031c-4e4c-9a2b-5e544e387274	1
66d2c15b-394a-4b84-b7d3-b991be41d9b0	静力水准仪	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMYC-6210AD	这个接新总线型采集模块1	2019-10-08 16:12:15.888+08	2019-10-21 14:16:46.22+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
01a43d23-84c6-4e78-bf39-7ed3a6383a88	钢弦式数据采集仪	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	t		DH8221		2019-09-30 09:56:31.659+08	2019-10-09 16:10:46.294+08	06a9522a-1277-41df-a73c-54910c8bddd8	1
2ea41890-89c4-4569-89ab-df3b02dc16eb	轴力计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		VRC		2019-10-23 10:16:21.715+08	2019-10-23 10:19:18.791+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
eaca25fa-f0bb-45cc-a5e0-59ba71654987	金码采集仪	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f		ceshi		2019-10-10 09:55:12.712+08	2019-10-10 09:55:12.712+08	\N	1
673195ba-381a-4dea-93e1-4f65f4d84079	高温温度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WD300		2019-10-10 10:48:36.493+08	2019-10-10 10:59:56.14+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
389a8b42-097c-411c-b534-0666e61c7842	压电式振动传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZD-S10		2019-10-24 11:51:03.266+08	2019-10-24 11:51:24.743+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
c560df92-8e02-480d-8646-a66f98cc2aff	测缝计	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		VWJ		2019-10-14 09:47:26.056+08	2019-10-14 11:41:29.241+08	4f3d93c3-5322-4bef-b358-e98b1589874d	4
cc82fda3-8669-4810-a87a-ff57a55a3de6	无应力计	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	t		VWS-10W		2019-10-14 09:49:18.018+08	2019-10-14 11:41:32.487+08	4f3d93c3-5322-4bef-b358-e98b1589874d	4
b0c1da1a-0945-4edb-9f17-e9b845030888	锚杆应力计	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	t		SDG		2019-10-22 13:45:08.961+08	2019-10-24 10:10:18.359+08	ced3128b-5650-474d-99ae-4496d3d0ea97	4
2095c53d-9927-4d63-b46b-03de0fd778e0	表面应变计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-500		2019-12-30 15:57:01.749+08	2019-12-31 09:19:41.623+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
1d22d353-6d39-4a84-bd17-aef0bc6f32f8	锚索计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-550		2019-12-30 15:59:09.731+08	2019-12-31 09:20:43.353+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
109b7349-2bb0-4859-8c1a-0c7630cbd11f	位移计	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	t		SDW		2019-10-22 13:48:51.927+08	2019-10-24 10:10:22.385+08	ced3128b-5650-474d-99ae-4496d3d0ea97	4
a64fdbc7-36d7-49d9-8969-9040111aee6a	压电式振动传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-ZD-A01		2019-10-24 11:47:52.601+08	2019-10-24 11:51:27.963+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b13c8811-3051-46d5-87e2-d1bbbc7853f2	投放记录设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		ZFL-240L-Record		2019-10-18 16:29:31.389+08	2019-10-18 16:29:31.389+08	\N	4
a8607ea4-e6db-4dc6-9e64-3e8db3628ba0	位移计	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	t		JMDL-4910A	接到综合采集模块下	2019-10-20 16:04:32.843+08	2019-10-21 15:24:48.802+08	941c9c57-031c-4e4c-9a2b-5e544e387274	4
f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35	异物侵限智能监测终端	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	t		H-C8R7-100		2019-10-22 14:47:29.624+08	2019-10-23 16:10:31.818+08	dc3110a0-e9c9-41ee-aa3e-417b06a4a8d8	0
1dcd0084-9a2d-43ef-9b10-1e8305ce8b06	NB无线烟雾报警器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		HM-633PH-NB		2019-10-14 16:03:45.915+08	2019-10-24 09:53:59.7+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7eee6239-5a81-4979-ab6f-43a1b3e8d570	激光收敛计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		T-780	上海隼星T-780	2019-09-29 10:42:58.218+08	2020-04-14 14:11:33.003+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
f19f1e04-8739-4652-9869-5fe16698e82e	路灯网关控制器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-SZ10-GW-R4A		2019-10-08 13:42:51.576+08	2019-10-23 09:52:35.4+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
cc938850-0b9a-4ab3-9712-dbf35ff157d9	云振动采集仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-iZD08	与飞尚一致	2019-10-24 11:23:42.79+08	2019-10-24 11:51:30.23+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
55d8d331-c61d-4523-886d-2d69f350cde0	常规五参数水质监测仪	d3684da7-e6e5-4925-a09f-dc80904a6b3a	d3684da7-e6e5-4925-a09f-dc80904a6b3a	d3684da7-e6e5-4925-a09f-dc80904a6b3a	t		KM-MU-5S	上海清淼光电科技有限公司常规五参数水质监测仪	2017-09-14 19:08:55.091+08	2019-10-24 14:15:07.19+08	945dc90b-2494-4242-ac50-3068ac34de42	0
e2fb2ed6-6d1c-41da-9f07-ab5866dd8940	自动采集仪	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	t		XB-501		2019-10-28 17:16:59.584+08	2019-10-30 13:41:27.716+08	b5a689a1-1523-47c7-ab4b-96b2d01cc461	1
ed459df4-d57c-430e-878b-37b61111d133	土压力计	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	t		XB-150		2019-10-28 17:22:11.028+08	2019-10-30 16:09:51.521+08	b5a689a1-1523-47c7-ab4b-96b2d01cc461	4
1e6fc551-3ad9-4963-9754-142f9c470c9c	全站仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TM30		2019-11-05 14:15:48.111+08	2019-11-25 14:21:53.605+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
b86fdc56-591d-40c5-b4f8-cb5b2a265be8	雷达水位计	808e0822-39be-47f9-b409-837e6d913d53	808e0822-39be-47f9-b409-837e6d913d53	808e0822-39be-47f9-b409-837e6d913d53	t		PWRD92H		2019-10-29 10:59:45.006+08	2019-10-29 11:05:34.566+08	45db210e-6095-414d-8ba7-4cf87583d293	4
88c7c5c5-561d-4193-9cf0-91aceec9f79a	测试传感器	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f		1.0		2019-10-30 09:07:33.722+08	2019-10-30 09:07:33.722+08	\N	4
58bfca53-22e0-4857-81f4-c64ce00efe67	埋入式应变计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-520		2019-12-30 15:57:52.562+08	2019-12-31 09:19:53.475+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
ccf64c47-a5cc-46bc-92d7-0ffa046876a4	柔性土压力计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-541		2019-12-30 15:58:44.08+08	2019-12-31 09:20:12.333+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
246ba00c-51d3-4e43-b651-4fd45ccd8ca0	表面裂缝计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-600		2019-12-30 15:59:31.444+08	2019-12-31 09:20:51.679+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
8a550a15-96be-455e-8c81-b9e7efcc2b30	温度计	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	t		XB-880		2019-10-28 17:20:38.025+08	2019-10-30 16:09:49.16+08	b5a689a1-1523-47c7-ab4b-96b2d01cc461	4
2e9595c1-ff54-4c5f-953e-f61a7837200e	钢筋应力计	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	t		XB-120		2019-10-28 17:23:47.578+08	2019-10-30 16:09:54.155+08	b5a689a1-1523-47c7-ab4b-96b2d01cc461	4
11a0df92-8921-470b-af9c-d7593b8b1f78	压差式变形测量传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LTG-Y1000-Z	压差式变形测量传感器	2018-01-24 11:18:54.103+08	2019-10-31 11:49:04.347+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0f20644c-1893-49f9-bc83-6b66a9ead892	测试AES128设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		LK522		2019-10-31 16:01:05.953+08	2019-10-31 16:01:05.953+08	\N	4
30cf2191-2a9e-40dd-a83f-969d2f053e1e	分类垃圾桶	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		ZFL-240L		2019-10-16 15:16:12.21+08	2019-11-01 14:25:32.205+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
28dd8b68-38c2-47ad-af2f-80cabb2e5af7	固定式二甲基乙酰胺检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-C4H9NO		2020-01-14 14:15:55.634+08	2020-01-15 13:51:26.958+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
86561a5b-04f5-4b5f-8bc7-6b002b4b6c68	测斜杆	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZ103X		2019-11-01 14:03:28.022+08	2019-11-01 17:44:19.013+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	1
a1923ce2-b8a5-45cb-9d98-6a42901cee7c	GNSS	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GNSS	GNSS	2018-03-05 11:56:41.391+08	2021-02-19 10:53:41.049+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
20d96ea0-8995-453b-aa12-191acb05eced	板载噪声传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZSRS-V1.00		2020-01-17 15:31:03.136+08	2020-03-02 18:55:06.243+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a9dea92c-5afa-40b9-b1f3-197e9b0f82be	温度传感器	e2534302-c06d-4ddf-8857-7011bfdde945	e2534302-c06d-4ddf-8857-7011bfdde945	e2534302-c06d-4ddf-8857-7011bfdde945	f		EE160		2019-11-05 09:12:10.042+08	2019-11-05 09:12:10.042+08	\N	4
6431292f-5b95-41f0-8291-ff902e58b376	L型棱镜	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LJ-L		2019-11-05 14:06:15.033+08	2019-11-05 14:54:33.769+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d43df443-364f-4958-b978-cb0e9ee0e532	钢筋计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-530		2019-12-30 15:58:16.619+08	2019-12-31 09:20:05.361+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
a581eb27-4334-4d9f-b28b-2c4b1e8136d5	多点位移计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-640		2019-12-30 15:59:53.301+08	2019-12-31 09:20:58.537+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
213e2ff2-285b-445d-8661-24f6f91bf7b8	垃圾桶	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		ZFL-240L-CAN		2019-10-16 15:20:46.741+08	2020-04-02 14:36:48.292+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
82d07222-1b08-4fa5-85bb-790f4dc24def	锚索轴力计	7883c07e-5754-4740-b90b-836def9cb38e	7883c07e-5754-4740-b90b-836def9cb38e	7883c07e-5754-4740-b90b-836def9cb38e	t		WY-T80		2019-12-06 10:18:48.758+08	2020-01-06 10:53:04.58+08	cb22fffc-27b3-479c-94ca-4117bb9483f3	4
b1ce7bb7-4d25-468a-ab2b-22347d65b166	锚索计（三索）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-T80	复制的湖南五岳的	2020-01-06 15:12:33.152+08	2020-04-14 10:51:15.747+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
8c23f875-86cf-4fe7-a315-526c7a1d0187	雨量计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YL-A		2019-08-27 16:31:15.65+08	2020-11-20 09:50:41.797+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
afba576d-0e5e-48cf-a9fa-18a3f986d812	声级计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-N01		2020-01-07 14:23:09.063+08	2020-01-10 14:01:48.012+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1f143b2d-d58a-4b04-bec7-8a396e900c90	固定式乙醇检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-C2H60		2020-01-14 13:59:03.96+08	2020-01-15 13:50:37.532+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
50e00d9f-f07e-4a17-96bc-c74a2aab4d71	倾斜传感器	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZXQX	依托于测斜杆、倾斜下的传感器	2019-11-01 14:59:07.343+08	2019-11-08 13:14:36.286+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	4
4abe48e9-ae10-4cd4-85a6-ad3970d8b928	固定式丙烷检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-C3H8		2020-01-14 14:02:50.252+08	2020-01-15 13:50:53.213+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c7c40505-1247-43ea-a898-e767eeae6943	Magnetic Sensor	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		Magnetic Sensor	Magnetic Sensor	2020-02-11 14:33:23.528+08	2020-02-11 14:33:23.528+08	\N	4
1b1cc578-8839-4900-a0bf-8e8614bdbd41	水准仪_样例	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		Demo_jlsz		2020-02-19 16:24:50.457+08	2020-02-19 16:24:50.457+08	\N	4
62fe835f-5a83-41c7-a31e-3304fb51c5a9	设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		xh		2020-02-20 16:35:47.502+08	2020-02-20 16:35:47.502+08	\N	4
31be3fb7-3369-4966-8e26-b561dc31b6fd	直线位移传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZWY-XX		2019-12-06 15:16:13.053+08	2020-02-21 13:12:31.951+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2f966726-181d-4301-8415-5987393db114	NAS 控制器	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		1.0		2020-02-27 20:51:36.619+08	2020-02-27 20:51:36.619+08	\N	1
80f33249-c402-4942-8c91-15f19638dce4	Zigbee水阀	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		V1		2020-02-27 22:26:34.009+08	2020-02-27 22:26:34.009+08	\N	0
e8283251-3a4d-40f8-a7cc-581af3168aee	振弦式渗压计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN-700		2019-12-30 16:00:16.71+08	2020-11-24 09:55:54.846+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
98e6aaea-a6e2-449e-8b46-47fa016b1b96	地灾设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		RTU		2019-12-20 10:02:25.421+08	2021-02-04 15:58:16.301+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
0758748a-7706-4392-ba7e-e47526251acb	振动传感器	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZ5523CJ		2019-11-07 10:06:59.578+08	2019-11-08 14:47:42.686+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	4
8392cdb0-52c7-4fee-8ace-a64e5cf86240	多点沉降计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-SYL	修改过	2019-09-25 11:38:34.938+08	2020-01-09 17:14:18.319+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
c1e63dc1-8a68-4dad-a180-c652ea587e83	总磷在线监测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		VL-TP-101	03智慧水务水质监测	2020-01-07 09:52:02.033+08	2020-01-10 09:42:20.068+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c659433c-cfd8-4b1a-a9d3-5664beb39ed9	采集仪	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZCJ		2019-11-08 13:18:41.57+08	2019-11-11 11:03:44.393+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	1
1f0ce463-872a-406b-bdbe-a469b45f9e9a	裂缝计	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZ5523LF		2019-11-08 13:43:46.048+08	2019-11-11 11:03:47.552+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	4
13ee1f91-04cc-48af-820e-ffc0ed179b6c	表面式应变计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-BM50	表面式应变计	2018-01-05 14:02:10.777+08	2020-01-10 10:55:36.38+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d756ead6-3c0a-4d1e-be3f-dde6e031a048	裂缝计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-LF		2019-09-25 11:07:08.043+08	2020-01-13 14:14:00.779+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
fe3a614d-329c-4b70-99ff-f95ccb28ab79	倾角计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-QJ		2019-09-25 10:37:46.501+08	2020-01-13 14:36:29.65+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
f7374ca5-78cb-4578-bfe3-df32eb350d05	土压力计	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-TYL-I		2019-09-25 11:19:02.062+08	2020-01-13 16:22:03.01+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
005826c9-dd60-4013-99bc-da28bc0d9c93	土壤水分传感器	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DTC-SD		2019-09-25 11:32:47.398+08	2020-01-13 16:41:50.828+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
e95109a9-cf5a-4e13-b52b-1f85101fd99a	多通道无线数据采集仪	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	t		LRK-DZ642D		2019-11-15 10:29:23.428+08	2020-01-13 17:09:11.384+08	230cf38f-fd43-4b78-93b2-05620d4eab9f	1
d6aefb14-b750-4133-94f4-e51c3df7743f	固定式氯气检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-CL2		2020-01-14 14:04:32.633+08	2020-01-15 13:51:08.357+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c9eacd36-38d6-48b9-9672-e76406906ea3	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY02	配套 飞尚 多条道振弦采集仪	2018-01-23 15:00:13.31+08	2019-11-09 10:12:28.947+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY10	配套 飞尚 多条道振弦采集仪	2018-01-23 15:00:11.224+08	2019-11-09 10:35:34.137+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cb4eb310-0876-492a-9e06-8cd0a5542c5b	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY08	配套 飞尚 多条道振弦采集仪	2018-01-23 15:00:11.827+08	2019-11-09 10:36:09.192+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY06	配套 飞尚 多条道振弦采集仪	2018-01-23 15:00:12.505+08	2019-11-09 10:36:16.048+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY04	配套 飞尚 多条道振弦采集仪	2018-01-23 15:00:12.707+08	2019-11-09 10:36:34.156+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	钢筋计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GJ22	配套飞尚多通道振弦采集仪	2018-01-05 14:46:16.289+08	2019-11-09 10:53:04.062+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
473aee20-7c00-41cd-bd6e-b44c35c758ea	钢筋计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GJ25	配套飞尚多通道振弦采集仪	2018-01-05 14:50:21.82+08	2019-11-09 10:53:10.76+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
73a7b800-25d7-41ad-872d-96cc4f9430de	钢筋计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GJ32	配套飞尚多通道振弦采集仪	2018-01-05 15:18:31.279+08	2019-11-09 10:53:21.363+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c150497e-123d-4ce0-bc80-9a537ee84489	二维面阵激光位移计	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	t		LRK-DL630A		2019-11-14 13:09:15.668+08	2019-11-27 09:02:31.354+08	230cf38f-fd43-4b78-93b2-05620d4eab9f	4
8e254f7b-1da7-4912-8b0d-467770662365	激光二维位移计	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZ301		2019-11-08 13:12:19.604+08	2019-11-11 11:03:41.3+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	4
9a331e7d-9429-4f58-8d30-a2fde39a80f3	倾斜传感器	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	t		AZ5523QX		2019-11-11 11:43:37.458+08	2019-11-11 11:46:33.857+08	3825bcfe-887b-4c7e-825d-9e824d753aaf	4
ac632873-d5e1-42fa-9343-6962d16bb547	压电式振动传感器	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	17ecfb0a-03a3-45eb-8d52-4794676c3a0a	t		BY-S07		2019-11-13 11:47:24.166+08	2019-11-13 13:11:01.47+08	c6b69110-10f2-4697-afcf-eb74f9e4a777	4
894ab7ef-b84f-420c-b2f0-cfdc5c00b826	GPRS节点	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GPRSJD	复制工讯	2019-11-08 17:19:34.667+08	2020-08-05 14:16:27.618+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	1
457137ac-994e-4445-8acf-12172464a82d	固定式氧气检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-O2		2020-01-14 14:00:56.89+08	2020-01-15 13:50:40.079+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
72c4a62b-a2d2-4e68-9686-cc325cd79f74	固定式天然气检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-Ex		2020-01-14 14:07:25.632+08	2020-01-15 13:50:47.299+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1352d63c-d97b-4dd4-8289-0de6cad01db0	固定式二氧化碳检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-CO2		2020-01-14 14:10:01.172+08	2020-01-15 13:50:56.542+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
32cd67be-b8f0-42fe-9ef4-79ad8fbed488	智能数据采集器	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT8X		2018-09-07 09:23:59.189+08	2021-01-28 15:15:57.969+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	1
6e32b4dd-c257-4c55-922f-1d62e21220c9	振动采集仪	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	t		G01NET-3D		2019-11-14 14:47:28.334+08	2019-11-15 15:16:44.05+08	752f5c02-d042-481d-ba52-83c0a4d969ae	1
5375e7c0-4ad5-4fcb-93df-82c9140ba075	倾角仪	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	t		QYG01-1		2019-11-14 14:50:04.922+08	2019-11-15 15:16:47.987+08	752f5c02-d042-481d-ba52-83c0a4d969ae	4
70457bad-88aa-4b95-ba35-4d42f4c3ac9d	加速度计	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	t		QZ2013		2019-11-14 15:00:54.128+08	2019-11-15 15:16:50.629+08	752f5c02-d042-481d-ba52-83c0a4d969ae	4
9ef26f61-19a9-4990-83f4-b0c81d348eeb	位移计	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	t		QZ2014		2019-11-14 15:05:32.271+08	2019-11-15 15:16:53.512+08	752f5c02-d042-481d-ba52-83c0a4d969ae	4
83759876-3d92-4218-8efb-ea36dc6d81ef	激光位移传感器	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-T-780	采集仪下设备	2019-09-29 17:46:42.908+08	2019-11-18 10:10:18.459+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
5b2e8307-69da-445f-a1a5-6f04cfd7cd8f	倾斜传感器	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	t		LRK-CX06		2019-11-18 09:58:17.644+08	2019-11-27 09:02:42.764+08	230cf38f-fd43-4b78-93b2-05620d4eab9f	4
c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77	振弦采集仪	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC- T440		2019-11-11 14:50:36.239+08	2019-11-18 14:08:54.433+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	1
9278fee5-3705-4e76-a8a6-1cf10956a376	电表27034408	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		nbddzy9898	大华电表	2019-11-19 14:06:12.362+08	2019-11-19 14:06:12.362+08	\N	4
61a4ad5e-774e-40d2-9ea6-937da62db64b	智能无线数据采集仪	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	t		LRK-DZ622A		2019-11-14 15:48:42.019+08	2019-12-13 10:53:04.931+08	230cf38f-fd43-4b78-93b2-05620d4eab9f	1
407a002b-de7c-4a76-9732-e4e8aaaafec3	雷达水位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-MIK-908		2019-11-19 16:14:21.585+08	2019-11-20 10:54:01.654+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
40c3cf7a-91d6-4c0e-aa48-4839dd6815cc	土工多点数据采集仪	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		CUD－5M		2019-11-04 09:41:39.332+08	2019-11-20 15:05:38.861+08	b44a2f42-face-4c8f-a783-1cfb1757c880	1
9199194c-49d8-4c20-8b52-67e469c30838	振弦式应变计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXB-3(P)		2019-11-04 09:47:11.723+08	2019-11-20 15:05:41.876+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
863ffb4f-8b5f-4a67-b93e-fa4f92f2464a	振弦式应变计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXB-2(P)		2019-11-04 09:47:45.486+08	2019-11-20 15:05:44.799+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
d325832b-3b9a-4f92-9b08-0984c6b81599	振弦式钢筋计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXG-1(T)		2019-11-04 09:48:05.254+08	2019-11-20 15:05:48.084+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
28f92d45-2a16-4768-bc97-e9acc713b231	振弦式荷载测力计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXH-3(P)		2019-11-04 09:48:34.822+08	2019-11-20 15:05:56.618+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
23b49cdb-2f9b-4170-9c38-2941c2341d00	振弦式轴力计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXZ-1(P)		2019-11-04 16:29:16.041+08	2019-11-20 15:05:59.693+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
e62db430-948a-4311-996f-38348811807a	振弦式位移计	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXW-2(P)		2019-11-04 16:29:39.696+08	2019-11-20 15:06:02.237+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6	振弦式压力盒	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXY-2(P)		2019-11-04 16:32:54.004+08	2019-11-20 15:06:06.989+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
53ea01cf-1ce2-4b41-b725-974426affa48	振弦式压力盒	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	t		JXY-4(P）		2019-11-04 16:32:31.747+08	2019-11-20 15:06:14.018+08	b44a2f42-face-4c8f-a783-1cfb1757c880	4
d929c576-62dd-4f0c-a2cc-15120347b903	分布式云振动网关	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-VWG		2018-09-25 15:45:23.967+08	2019-11-21 10:09:40.042+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	固定杆式测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GGC02-V3.00	双轴	2019-11-21 11:47:17.596+08	2020-01-07 14:25:16.589+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
868f47ed-fe83-49c4-be2c-70731b436220	固定杆式测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GGC01-V3.00	单轴	2019-11-21 11:47:18.841+08	2020-01-07 14:25:21.594+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cd24ff84-fef3-40d2-8397-dfa240a13d17	固定式甲醇检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-CH4O		2020-01-14 14:13:41.843+08	2020-01-15 13:51:14.105+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
97078fa2-e944-487b-8913-e3c2c33c6ff0	DT湿度传感器	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	t		DT-WSD		2018-09-07 10:55:19.788+08	2020-01-16 10:40:53.215+08	8c9b2c27-6501-4173-8be0-3d4b34466fe4	4
d2e74fbe-59fe-420d-b127-c61ba8236f42	测斜传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-RTU-GGC01		2019-12-26 13:50:05.496+08	2021-02-05 15:30:43.789+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	土壤温湿度传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZTRWSD-MX		2019-11-21 09:33:12.253+08	2020-03-10 14:00:40.609+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
123b24f1-ba7c-42e1-b742-afdc5bf8620b	视频位移传感器	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	t		SMTN-M		2019-11-22 09:49:01.429+08	2019-11-27 09:22:57.819+08	3ced2ad4-50ab-4f5d-b3ca-fc19063f1879	1
e1118b87-bfea-42be-b365-1c99d35511cc	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-10-B		2019-11-21 15:13:15.422+08	2019-11-21 15:19:00.564+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ee878563-3f80-4c7d-8888-319c875c8a5e	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-30-B		2019-11-21 15:17:49.681+08	2019-11-21 15:19:06.696+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
b1353bed-cda0-44a5-b1e9-94cb166962a5	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-70-B		2019-11-21 15:17:51.637+08	2019-11-21 15:19:14.497+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
446a08d7-c237-4f0b-acfb-3d9310da742d	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-03-Z		2019-11-21 16:06:37.684+08	2019-11-21 16:22:47.868+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
4698f1de-2051-4283-9fe5-2c62b1687239	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-10-Z		2019-11-21 16:15:06.503+08	2019-11-21 16:22:52.583+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5b338441-75c4-4186-9fc3-23aa8d614e19	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-30-Z		2019-11-21 16:15:07.771+08	2019-11-21 16:22:56.766+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0e96ddaf-1acc-419b-afca-18854f8c25d8	激光传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JGCJY-80-Z		2019-11-21 16:17:19.726+08	2019-11-21 16:23:01.716+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0edf8e7f-0f5f-440a-a83a-333e5d90a2ef	测缝计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-T700	上海隼星T-700	2019-09-29 16:03:31.37+08	2019-11-22 10:58:27.901+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
56c84083-d705-4aa0-94d2-34b731f75f97	压电式振动传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZD-A01		2018-04-02 10:37:43.64+08	2020-01-14 10:56:55.778+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
adcecf0d-2b34-4a55-abc2-78a2439b1567	固定式氨气检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-NH3	智慧消防	2020-01-14 13:53:59.173+08	2020-01-15 13:50:30.071+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
742ee585-31d3-413c-b4f0-44d175b45bf5	固定式环氧乙烷检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ES10B10-ETO	智慧消防	2020-01-14 13:57:25.412+08	2020-01-15 13:54:57.739+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
fd94699e-65db-45b8-bbe9-88c147ba1e0a	固定式温湿度检测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GDJCY-WSD		2020-03-23 17:25:41.951+08	2020-03-23 17:28:26.438+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
71735c3a-2e25-40c1-81ad-df10d8792ac2	分布式智能云采集系统	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-WG-V2.10	云网关	2018-03-08 18:51:52.82+08	2020-03-25 10:19:01.56+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
70ed36c0-d58f-482d-8337-fafed8a2e6ac	表面应变计	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	t		YH03-B30	湖南湘银河传感科技有限公司	2018-01-23 13:54:59.27+08	2020-03-25 10:35:45.886+08	1aaaa2c0-9ed1-4c2c-a2f2-23a88de486fa	4
ca2fe08c-b600-4472-8de2-3c549ea7d150	串联式导轮测斜仪（双轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-GGC01-V3.0		2020-04-03 17:19:01.21+08	2020-04-10 14:13:28.93+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
b78fdf56-b70c-4c49-8734-67400e9a858a	静力水准仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN620		2020-03-26 11:00:05.676+08	2020-03-26 11:35:48.707+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
1b795716-096c-409d-8b43-290e31a0d4d5	静力水准仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN620D		2019-06-19 17:34:39.404+08	2020-03-26 11:38:32.43+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
03f53a90-43a0-47d6-9183-edfb825a09e5	静力水准仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-HLS-JW		2019-01-24 11:51:28.163+08	2020-03-26 15:52:28.491+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
cf08e20c-2c85-4a1d-84a6-b773c3291124	串联式导轮测斜仪（单轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-GGC01-V3.0-01		2020-04-09 11:43:26.66+08	2020-04-10 14:21:21.054+08	\N	4
1e4fb0f1-79a1-4246-a85c-478b55f8df95	静力水准仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		RZ370		2020-03-18 14:12:05.051+08	2020-03-27 17:04:27.994+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
12f885d6-8a49-4495-909e-8a938e23ec8b	太阳辐射传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TYFS-A		2020-04-08 09:44:52.304+08	2020-04-08 09:52:27.653+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f070a6a5-406b-4567-ab70-0ba9cc204545	海康红外摄像头	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		DS-2TD2137-10/V1		2020-04-01 09:55:29.038+08	2020-04-02 15:20:44.116+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a21dbc9a-38d2-4468-8149-8324e875fc8a	气象多要素百叶箱	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-QXDYS-A		2020-04-08 10:43:30.789+08	2020-04-08 11:42:37.252+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0796dca5-8068-4bc2-a73f-99160576a988	轴力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-ZL50	配套飞尚多通道振弦采集仪	2020-04-08 13:15:10.344+08	2020-04-08 15:11:53.409+08	\N	4
c5a82ea8-374b-4efd-b9e9-716b216d8ee4	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-TY06	配套飞尚多通道振弦采集仪	2020-04-08 15:18:35.607+08	2020-04-08 15:18:35.607+08	\N	4
385b0bd6-f460-40fc-9a65-78aaba84aaf3	振弦式土压力计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-TY60	\n配套飞尚多通道振弦采集仪	2020-04-08 15:52:56.272+08	2020-04-08 15:52:56.272+08	\N	4
33215263-67ff-4ca8-9cec-d4c05068b412	单通道振弦采集仪	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-F01M	\nmodbus 多通道振弦采集仪	2020-04-08 16:11:41.684+08	2020-04-08 16:11:41.684+08	\N	1
f54c9b05-e722-4677-9e19-4fbbeeee0938	多通道振弦采集仪(8CH)	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-F08M		2020-04-08 16:18:25.311+08	2020-04-08 16:18:25.311+08	\N	1
718d8823-39a8-40fd-b726-76fde0fd8094	多通道振弦采集仪(16CH)	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-F16M		2020-04-08 16:23:51.231+08	2020-04-08 16:23:51.231+08	\N	1
9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	静力水准仪	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-JLSZ-10-V1.00		2020-04-08 16:36:50.871+08	2020-04-08 16:36:50.871+08	\N	4
bfa2c35f-19d1-450b-a04a-b0e211b43bf5	DTU	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-DTU-4G-W-V1.00		2020-04-09 10:45:48.26+08	2020-04-09 10:45:48.26+08	\N	0
939d26de-ea01-420a-95fb-9bb2398cb1c2	分布式GPRS节点	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	t		ZY-CJX-8	复制一芯	2020-04-09 14:48:59.306+08	2020-04-10 16:09:37.488+08	1b270ac5-34e5-47e7-8d67-926c4783bf6d	1
0b4561c4-31a6-4737-b593-18b2b1973850	钢筋应力计	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	t		ZY-GJJ-1020		2020-04-09 16:22:25.393+08	2020-04-10 16:09:40.214+08	1b270ac5-34e5-47e7-8d67-926c4783bf6d	4
854b696f-3001-4d7f-bffc-1e78e73b7d31	串联式导轮测斜仪（单轴）	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	t		ZY-CX-061		2020-04-10 14:35:20.846+08	2020-04-10 16:20:47.505+08	1b270ac5-34e5-47e7-8d67-926c4783bf6d	4
71c10138-4c73-4682-af9b-a904323eeac2	固定杆式测斜仪（单轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-GGC01M-01		2020-04-13 13:05:47.902+08	2020-04-13 13:05:47.902+08	\N	4
2f588726-18df-4ab2-b677-5c4479cef768	串联式导轮测斜仪（双轴）	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	t		ZY-CX-062		2020-04-13 10:48:03.076+08	2020-04-13 11:08:27.416+08	1b270ac5-34e5-47e7-8d67-926c4783bf6d	4
b3c05fb2-59b8-4bf7-b85d-7823a6781395	盒式固定测斜仪（单轴）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-HGC01M-01		2020-04-13 11:44:59.531+08	2020-04-13 11:44:59.531+08	\N	4
8fd9d375-1389-43b9-9423-654a4dd5af44	激光测距仪	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-LRF-V1.00		2020-04-13 16:42:59.107+08	2020-04-13 16:42:59.107+08	\N	4
0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	温度传感器	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-WD01MM		2020-04-13 16:31:25.26+08	2020-04-13 17:14:44.081+08	\N	4
2b960cb5-8b22-4a35-b811-2a74b8f47196	锚索计（三索）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-T50		2020-04-14 10:32:45.115+08	2020-04-14 10:32:45.115+08	\N	4
2e98107c-2635-43a9-a89f-872152bac901	锚索计（三索）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-T60		2020-04-14 10:39:24.278+08	2020-04-14 10:39:24.278+08	\N	4
2de0b18f-a13a-48a9-8e34-6bfeff609972	锚索计（三索）	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f		YX-T100		2020-04-14 10:44:39.265+08	2020-04-14 10:44:39.265+08	\N	4
8cee37a9-d972-4d3b-97eb-53c9a87dbe9c	静力水准仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-JLSZ-CSB		2020-04-21 13:39:10.202+08	2020-04-21 14:49:36.945+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
f2966257-6f65-4e21-81a5-451cd5b63144	校验设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		wjjjj		2020-04-21 23:56:27.155+08	2020-04-21 23:56:27.155+08	\N	4
f9304770-9fc6-4203-a75a-2759b659a4d7	RTU	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f		V1.0		2020-04-22 19:14:32.861+08	2020-04-22 19:14:32.861+08	\N	0
82d6439d-e647-44e7-ba65-2de818baea7f	振弦式锚索测力计	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	t		VAB		2020-05-14 11:28:05.187+08	2020-05-14 11:41:31.35+08	a4ea8d4c-a663-48d2-a163-47085a402235	4
310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a	差阻式应变片	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		FLAB-3-11		2020-05-13 11:30:27.489+08	2020-05-14 11:41:34.383+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
4d37123c-99a8-49db-b2d2-3e334f5b27e0	全站仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-QZY		2020-05-21 15:16:19.411+08	2020-05-21 17:39:05.688+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
39e6fe98-3dea-458b-9f64-143d18617cc4	棱镜	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LJ		2020-05-21 15:23:07.793+08	2020-05-21 17:39:09.454+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ba181334-9686-42cd-b00e-7165b35e067f	液位计	28bc5952-cfc7-4d3a-a922-92c82d003b20	28bc5952-cfc7-4d3a-a922-92c82d003b20	28bc5952-cfc7-4d3a-a922-92c82d003b20	t		SSFMS-0100-M21N-MEPS		2020-05-14 15:02:02.187+08	2020-05-22 08:44:40.582+08	004b1a1d-6d36-45c7-9e9d-2e3a3ecdc5c1	4
a2a6365d-ec0a-453a-be54-35e11b324d63	土壤温湿度计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TRWSD-BO	2.0  1166 欧速电子 温湿度	2020-06-10 11:35:22.162+08	2020-06-10 13:58:59.293+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
57b88830-72c4-4739-8d3b-3754fb371135	多功能混凝土腐蚀监测仪	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	t		LG-CM18		2020-05-11 09:29:12.665+08	2020-05-22 10:33:07.543+08	334b593d-da3a-4d6b-a756-36e82b6e882e	4
a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc	加速度计	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	t		YX-ZD-A01-V1.00		2020-04-13 17:20:54.423+08	2020-05-22 15:46:10.702+08	d9e142bf-ebb7-4b0a-851e-439ccdfd92bb	4
94e0657d-9d34-4baf-bac1-34cb6610e051	激光位移传感器	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	t		SMT-DL		2020-05-25 15:20:08.755+08	2020-05-26 16:51:50.229+08	3ced2ad4-50ab-4f5d-b3ca-fc19063f1879	4
e867f531-f1a3-44c8-9876-368efe947b7d	U-L型主机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ECJC1	PM2.5/PM10+臭气OU值+氨气NH3+乙醇C2H5OH+VOC	2020-05-28 10:53:52.228+08	2020-07-17 15:23:33.339+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d86466d8-8892-45e2-a86a-56e283df30ac	U-L型主机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ECJC2		2020-05-28 15:02:00.583+08	2020-07-17 15:23:38.277+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
9ed59e3e-108f-4fe9-b3c0-37c11cd46d92	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-C150		2020-06-10 14:05:06.773+08	2020-06-15 10:43:03.581+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
33b14e4c-17e6-44c9-a0a1-84cfe22fa073	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-C100		2020-06-10 14:00:54.72+08	2020-06-15 10:43:06.795+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
ce34762d-8e48-4c7e-8c23-1f7810ab7884	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-C200		2020-06-10 14:06:51.124+08	2020-06-15 10:43:10.104+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
42d66a56-b0ca-400d-b41e-250d62a84878	激光测距仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SLDS-C300		2020-06-10 17:07:04.27+08	2020-06-15 10:43:14.495+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
ee98ef38-7fda-425a-9fae-5000c658a83e	采集仪	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	t		YKMS-32		2020-06-05 14:45:30.23+08	2020-07-01 09:06:20.175+08	92d41b9e-5436-4c25-b181-973fa389f185	1
47775a01-00ef-4500-82ee-04b5536aaeea	钢筋计	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	t		YKGJ-22XX		2020-06-05 14:50:25.536+08	2020-07-06 14:50:31.895+08	92d41b9e-5436-4c25-b181-973fa389f185	4
9c12215f-afab-45e9-8341-1e487df6d020	光栅光纤解调仪	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	t		MWY-FBG-DS800		2020-05-20 09:22:50.295+08	2020-06-24 15:22:07.21+08	19d2071b-8a31-4f00-a984-a02a81fd50f7	1
1aa0fcb2-1f26-4596-9211-f028c369fbcd	轴力计	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	t		YKZL-31XX		2020-06-05 14:49:19.895+08	2020-06-22 11:06:22.12+08	92d41b9e-5436-4c25-b181-973fa389f185	4
3ade0dca-d01e-4b1f-a1af-4948163e6902	水位计	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	t		YKSW-41XX		2020-06-05 14:51:20.983+08	2020-06-22 11:06:30.157+08	92d41b9e-5436-4c25-b181-973fa389f185	4
06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2	光纤应变计	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	t		MWY-FBG-SWBM		2020-05-20 09:26:32.51+08	2020-06-24 15:22:10.339+08	19d2071b-8a31-4f00-a984-a02a81fd50f7	4
6a94d3b4-a64c-48d2-be57-dfbd7f20c530	虚拟DTU	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	t		MWY-V-WG		2020-05-20 11:50:17.605+08	2020-06-24 15:22:13.521+08	19d2071b-8a31-4f00-a984-a02a81fd50f7	1
5fec42a4-44a4-46e1-afba-17c79de7e09c	智能数据传输模块	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	f		SOUTH-DCH1		2020-06-12 10:02:36.332+08	2020-06-12 10:02:36.332+08	\N	1
30c2c04a-0810-4f90-91cf-d49b9ed855be	激光位移计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN640		2020-06-11 17:41:16.021+08	2020-06-15 10:35:34.892+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
e3d9aa70-13e8-419c-939b-953b239eb4b0	超声波风速风向仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN100		2020-06-11 17:32:44.091+08	2020-06-15 10:35:39.279+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
61f8ca5a-27a4-4e6e-8314-7b989dc3f178	空气温湿度计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN110		2020-06-11 17:08:13.998+08	2020-06-15 10:35:44.102+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
7d85285c-28e9-44e3-b920-793850693e3a	倾角仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SAD-S005A		2020-06-10 17:08:53.377+08	2020-06-15 10:43:19.529+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea	倾角仪	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	t		SADS-015A		2020-06-10 17:12:06.73+08	2020-06-15 10:43:22.794+08	9f0e639f-37d3-4661-bf82-808a6291df48	4
537ca657-4262-4143-a1fd-7050c3795634	水位计	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	f		SWP-0.2G		2020-06-15 10:48:34.959+08	2020-06-15 10:48:34.959+08	\N	4
c3507ba4-b2b5-45b8-aecb-84079c90649d	综合采集仪	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	t		IP-Logger-03		2020-06-28 11:29:02.953+08	2020-07-01 10:58:20.246+08	de2f4d46-1d32-4109-b909-a013dabfa58a	1
d246af39-fb67-4750-8a25-d05680a359b3	倾角传感器	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	t		IP-2000		2020-06-29 09:57:57.712+08	2020-07-01 10:58:24.48+08	de2f4d46-1d32-4109-b909-a013dabfa58a	4
c67f1f58-3886-4294-835b-b48db34d96e3	水位传感器	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	t		DLK20-485		2020-06-29 16:12:12.845+08	2020-07-01 10:58:28.57+08	de2f4d46-1d32-4109-b909-a013dabfa58a	4
1a7f1970-6142-4919-a1e7-110829051ba9	水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YWJ-GPRS8		2020-06-16 14:26:24.058+08	2020-06-17 13:50:56.209+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
59ffec5d-7c08-417e-bddc-8483466e1d66	信号转换模块	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		CM11		2020-06-10 16:55:56.55+08	2020-06-18 11:49:58.042+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
a999f92a-a9c4-4b33-a805-9bbb221f1935	无线数据采集终端	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-Node8-GPRS		2020-06-15 17:15:30.522+08	2020-06-18 15:17:00.798+08	005e2048-b7e8-4f7c-847f-e9918a66414d	1
a8180277-ba74-44e1-a3bc-b408e290f742	磁式静力水准仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-CSHLS		2020-07-02 10:28:22.757+08	2020-07-03 09:30:20.601+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
2b1ac1f2-3501-4eb7-882b-59c5f346ad98	温度传感器	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-T		2020-06-24 09:49:46.91+08	2020-06-24 09:51:23.209+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
5865ba02-99d8-4649-a200-c40dfa917982	数据采集器	f38c8678-6245-4d4c-b6c2-b753ffe51a91	f38c8678-6245-4d4c-b6c2-b753ffe51a91	f38c8678-6245-4d4c-b6c2-b753ffe51a91	t		CR1000X		2020-07-01 13:42:35.875+08	2020-07-07 09:21:35.524+08	8b21d12e-9bf9-4c00-8380-74aec0c58771	1
75c9bb71-afbd-4667-8958-1c195663e0f6	多信道基站	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	t		iCIVIL-3013		2020-07-20 14:34:10.839+08	2020-07-27 15:17:16.105+08	9cfcaef5-1af4-4e58-a074-4321b6cc7379	0
f54dc0a0-6317-4a46-9f09-4d8024ff6959	采集仪	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	t		RT2000		2020-07-20 16:27:00.551+08	2020-07-21 10:28:25.218+08	1d34edcf-e610-4987-980e-dbf2fa6a803a	1
069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	GNSS	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	t		M300	GNSS	2020-07-20 09:49:47.226+08	2020-08-10 15:22:44.355+08	a53ff2c9-fe4b-40b2-9384-d238618466ce	4
b9092f6a-8c04-44c9-97ea-49b5389f5580	雨量计	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	t		iCIVIL-4005L		2020-07-21 15:30:21.73+08	2020-07-27 15:17:25.223+08	9cfcaef5-1af4-4e58-a074-4321b6cc7379	4
9a1a0afd-566e-45a2-8286-147f760679a4	崩塌计	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	t		RT-2000BT		2020-07-03 11:01:14.996+08	2020-07-22 08:48:22.295+08	1d34edcf-e610-4987-980e-dbf2fa6a803a	4
ff948ead-5a62-4990-b5c9-a440be471988	北斗星通接收机	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		C200		2020-07-23 13:36:21.041+08	2020-07-23 13:46:51.73+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8581898c-d047-4cdc-8ccc-ef33a1567435	位移采集器	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC		2020-07-31 11:04:05.423+08	2020-08-10 13:43:39.962+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	1
5b58e9d2-f305-4ded-8863-c346e916d5e7	激光位移计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-207DS		2020-08-04 11:14:39.06+08	2020-08-13 15:06:49.816+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
c283a48d-8843-4cb6-9c01-336738a8137a	振弦采集仪	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-Micro-08MOM1		2020-08-03 08:43:47.564+08	2020-10-13 17:12:32.987+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	1
3bfe9ce6-f4d9-4822-968e-3649d5eee799	阵列式位移计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-212DS		2020-07-31 11:04:47.25+08	2020-08-10 13:43:44.754+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
07977267-d666-4b82-8976-d533e9afde5b	水质监测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-SZJC05-V1.00		2020-08-05 16:54:52.103+08	2020-08-06 10:04:07.939+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
58f5081b-0b4e-4f26-853f-22ef0d1ea318	RTU	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		JR9620		2020-08-27 16:08:53.955+08	2020-09-03 15:35:51.93+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	1
11b16ed9-a251-4907-b941-5a31ea559da1	电表	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		DTSD79-W1-380V	实际电能值=表读数值*互感系数（系数可配置）	2020-08-13 09:25:55.034+08	2020-08-13 10:03:38.221+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
6e1d455f-6dc1-4237-b1f2-de550f8dbd0e	全站仪	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	f		TM50_0.5_H		2020-08-14 16:22:21.497+08	2020-08-14 16:22:21.497+08	\N	1
7599bfb7-18fc-40c7-be52-ff9fd0d1519e	直角小棱镜	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	t		L		2020-08-14 16:25:20.35+08	2020-08-14 16:34:24.341+08	cde1d1ef-6811-4c85-b365-c8dc7be87675	4
2ebd818a-1949-4633-b46d-d923cc2bec7b	雨量计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-105DS		2020-08-14 11:53:53.172+08	2020-08-14 16:40:24.401+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
8a59ee46-6582-4f9b-a696-f2025fca9eda	土壤温湿度计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-106DS		2020-08-14 15:25:23.084+08	2020-08-14 16:40:29.324+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
6b55f70b-4626-47f5-b8fa-10f76bf80c68	拉线式位移计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-206DS100		2020-08-18 08:53:48.589+08	2020-08-18 10:46:47.459+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
e0a57272-b5e1-4160-b62d-98cc9dcd10ca	NB-IOT节点	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-iFWL-NB-IOT		2020-08-18 11:14:36.219+08	2020-08-18 11:23:29.85+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
032d4203-60ef-4d64-9888-530facf358ff	液压静力水准仪	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN621		2020-08-21 10:26:19.995+08	2020-08-21 14:36:01.131+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
945563fe-656a-461e-8dca-7a4b2edbf9d0	光纤测温主机	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	f		BST220-08D08		2020-08-26 13:29:30.015+08	2020-08-26 13:32:43.444+08	\N	1
cc3c245e-aa6a-4e4e-831b-780769ec41ca	测温光缆	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	f		sss		2020-08-26 13:33:13.414+08	2020-08-26 13:33:13.414+08	\N	4
8f3e91ce-4354-4d6a-826a-c727aaabaa58	测试传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CGQ		2020-09-01 10:29:11.198+08	2020-09-01 10:34:33.192+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d876d84c-b881-4ef4-a79d-8a60b372c964	高端空气净化器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-AIRClear		2020-09-01 11:23:08.024+08	2020-09-01 11:23:08.024+08	\N	4
f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	倾角采集单元	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	t		iCIVIL-2302-2L		2020-07-20 17:54:25.259+08	2020-09-14 13:57:28.885+08	9cfcaef5-1af4-4e58-a074-4321b6cc7379	1
207df42a-f8cf-47d0-a4bc-d1d5d9114928	地灾摄像头	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JP-C83CW		2020-09-10 11:15:15.26+08	2020-11-20 10:27:33.196+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2a7828f8-5044-43fb-9435-9a59ec4d769a	GNSS	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	t		GNSS	虚拟的GNNS设备，非直接接入使用	2020-09-11 14:36:39.58+08	2020-09-11 15:07:07.65+08	ade25a08-2f33-44ac-8a49-a4fe690e3a57	4
fc096555-1b1d-4526-a6d2-a734b1d313fd	超高精度双轴倾角传感器	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	f		AIS 2000		2020-09-01 14:32:02.463+08	2020-09-03 10:03:56.438+08	\N	4
518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab	多功能监测仪	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		zx001-D		2020-09-04 12:04:26.557+08	2020-10-21 09:53:50.821+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
f922cc6e-672b-4f59-a90e-2499ecfc1d24	多功能监测仪	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		zx001		2020-09-04 14:47:20.783+08	2020-09-04 17:10:30.642+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
899def98-516b-4c5f-a7e8-2fd48018bf12	倾角传感器	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		LVT526H		2020-08-27 16:38:22.109+08	2020-09-03 15:35:41.799+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
35e7c6a8-9125-4612-889d-259e09a24735	雨量计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		ZXYL500		2020-08-27 16:22:16.978+08	2020-09-03 15:35:47.013+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
33a769c0-0ef3-47dd-ab22-3e86247259eb	倾角计	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	t		iCIVIL-2302		2020-09-11 13:29:23.069+08	2020-09-14 13:57:24.167+08	9cfcaef5-1af4-4e58-a074-4321b6cc7379	4
a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf	水分计	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	t		DSW-T1W1		2020-09-15 08:40:27.822+08	2020-09-15 09:41:45.61+08	0c9fca00-5fd3-43ef-8264-09333066ff13	4
4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c	振弦式多点位移计	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	t		DDWYJ-5002		2020-09-15 08:59:09.146+08	2020-09-15 09:41:50.557+08	6953cb17-93d1-43e9-b65a-2b0990bc0049	4
8523278f-0788-4ef6-8669-64d28b348c59	直角小棱镜	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	t		L-m	单位 米	2020-09-18 11:09:34.118+08	2020-09-18 11:13:10.948+08	cde1d1ef-6811-4c85-b365-c8dc7be87675	4
343d74d9-fc95-40d7-930c-e0cd01536d55	节点传感器	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	t		RT-1010		2020-09-17 16:42:41.355+08	2021-01-25 10:02:35.901+08	1d34edcf-e610-4987-980e-dbf2fa6a803a	4
55f72e62-0922-4975-9714-058decf7a14d	方盒形加湿器	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f		SD01	自蒸发式（4L）	2020-09-07 16:10:09.066+08	2020-10-15 14:33:16.922+08	\N	4
c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5	一体化水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YTSW-JC		2020-11-10 09:02:26.682+08	2020-11-13 08:34:09.445+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
c251c010-afd1-42d0-9d85-e044a6d51a8a	位移计	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	t		TD-WY		2020-12-31 14:28:18.765+08	2021-01-06 11:33:16.277+08	9d5e90d5-269a-4683-9010-34bd32ed70f6	4
04ffee3d-0572-491c-9291-82dbbf14e7d4	地应力计	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-DYL200		2020-10-13 10:08:39.374+08	2020-10-13 10:26:39.744+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
92520c27-c002-4a35-84f0-dae3238662ae	三维变形监测阵列	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	t		RT-1010		2020-09-17 16:40:25.93+08	2021-01-25 15:35:19.348+08	1d34edcf-e610-4987-980e-dbf2fa6a803a	1
e6b4e767-9ae2-459f-99fc-042b9d6af678	风速仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-FS		2020-09-28 10:33:27.918+08	2020-09-28 10:58:16.337+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
455f2a29-2660-4cfa-97f9-ef7f357d59d6	风向仪	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-FX		2020-09-28 10:45:02.861+08	2020-09-28 10:58:18.734+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	立柱形加湿器	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f		SD02	超声波式（9L）	2020-09-21 09:55:14.213+08	2020-10-15 14:33:19.324+08	\N	4
f84896ea-8908-41e9-9e30-371a39cd4261	激光测距仪	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	t		AX-FTM-50S		2020-10-29 16:40:39.24+08	2020-10-29 16:47:04.839+08	e8c6b99b-9c1a-45ce-897d-59a87fe9b7c5	4
4452ff6a-859b-45e6-9e9c-c6b59ee3667b	倾斜仪	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	t		TAC01		2020-10-09 14:17:46.835+08	2020-12-30 09:38:42.805+08	980b9cf9-1073-4a81-b777-0d29ac8237d2	4
f89c588a-f68a-4208-857b-555022da9f9e	智慧小区摄像头	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		C5Si		2020-10-19 17:25:27.856+08	2020-10-21 16:18:43.113+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
e33b5ca8-307d-47dc-afbc-01098220b4ac	液位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MPM4700_gprs	非微功耗	2020-09-29 09:28:13.396+08	2020-09-29 10:49:07.463+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925	塔机监测传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TDJC06-V1.00		2020-09-29 11:19:58.818+08	2020-09-29 11:21:07.598+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d26881e7-f69e-4b7d-9041-47009bd2c298	湿度传感器	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	t		BSIL-H		2020-10-23 17:03:59.944+08	2020-10-23 17:05:34.919+08	4f8482c3-8bc4-4b8c-af3c-c935faed0aef	4
fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	立柱形加湿器	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f		SD02	超声波式（9L）	2020-10-10 10:46:03.614+08	2020-10-10 10:46:03.614+08	\N	4
f0d5077b-4260-422c-87e3-92d13d136ebf	方盒形加湿器	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f		SD01	自蒸发式（4L）	2020-10-10 10:46:11.456+08	2020-10-10 10:46:11.456+08	\N	4
e3e8ca1e-1676-4b76-96ed-131ba8516599	土壤温湿度	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WSD-RTU		2020-11-04 09:56:29.44+08	2020-11-23 16:46:09.277+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1450b04e-214d-47b0-8e32-def5a361cc48	声光告警器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-Alarm-RTU		2020-10-16 14:22:53.581+08	2020-11-24 15:49:44.321+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2d0ff832-a7e0-4029-94bf-d7203c1fa793	拉线位移传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LXWY-RTU		2020-11-04 10:06:19.399+08	2020-11-20 10:58:00.626+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
ec7fa28a-0898-4cb3-a5d0-098d568c1e69	裂缝计	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	8bb8c871-dd83-4665-8378-1ae66927181a	t		AX-LFXX-A		2020-10-30 14:32:49.855+08	2020-10-30 15:20:01.419+08	6953cb17-93d1-43e9-b65a-2b0990bc0049	4
ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2	螺栓轴力计	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	t		RN550D		2020-10-28 10:07:56.831+08	2020-11-11 16:53:47.653+08	1b8a807b-0029-4862-b3e8-f0e60c713a62	4
8da5aeab-4a1e-4bb5-afe2-67cadfc4700a	动静态应变传感器	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	t		FTYB-3000B		2020-10-19 14:17:50.529+08	2020-10-30 16:39:30.558+08	5646c79d-1071-4fa1-ba75-ffc8abf95e65	4
f9f36adc-75b4-4140-a14e-73f8172228d7	静力水准仪	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	t		SMT-S		2020-10-26 13:25:32.916+08	2020-10-29 13:07:56.732+08	3ced2ad4-50ab-4f5d-b3ca-fc19063f1879	4
eefc80f3-265d-475f-b00b-d44016522eab	静力水准仪	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	t		FTJS-1000		2020-10-19 14:20:08.547+08	2020-10-30 16:39:34.862+08	5646c79d-1071-4fa1-ba75-ffc8abf95e65	4
b6f7c250-9eeb-4225-8c5e-68b766f03649	风速风向仪	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	t		AX-YLJ-02		2020-11-02 10:05:36.102+08	2020-11-02 11:21:56.29+08	05ef6403-9f87-4092-8b09-be1cfc2f9369	4
30d005dd-93a1-4c1a-ac10-8bdedf26bab4	门禁设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FS-DoorAlarm		2020-11-02 13:44:41.972+08	2020-11-02 13:44:41.972+08	\N	4
c51512a6-3e90-4b6e-8a21-987464b10ca9	雨量	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-YL-RTU		2020-11-04 10:10:46.168+08	2021-02-05 15:30:54.329+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
0b84defc-2160-4d4a-8d71-6f350b4d6666	激光测距仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LRF-RTU		2020-10-16 11:41:30.072+08	2021-02-20 15:03:14.767+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
f3a9238e-8d1c-4876-a81d-f2bb05755585	红外客流计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WINZ-1001B	外购	2020-11-04 09:48:42.707+08	2020-11-06 11:34:16.14+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
fb922722-9262-470f-8064-4b78234fa802	一体化水位计	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-YTSW		2020-11-10 09:01:05.478+08	2020-11-13 14:54:14.113+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
b7dd781d-dba7-4228-b49f-8aee75e42625	孔隙水压计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-KY-RTU		2020-10-16 13:52:59.048+08	2021-02-09 14:18:17.744+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c02e4b7c-e6b7-4d83-969c-34059f84af1f	裂缝计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		YYPS1010		2020-11-26 10:47:49.898+08	2020-11-26 13:07:37.767+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
55a923ff-6180-4aa1-b44b-257b7dc587ed	TD210	d1efb331-43f4-4d42-8a9f-72a328b316a3	d1efb331-43f4-4d42-8a9f-72a328b316a3	d1efb331-43f4-4d42-8a9f-72a328b316a3	f		TD210-A		2020-11-17 09:55:25.488+08	2020-11-17 09:55:25.488+08	\N	0
86aa83da-35f2-4247-8660-4d23b9c30a1c	泥位计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		YYZY9050		2020-11-26 10:57:51.653+08	2020-11-26 13:54:38.216+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	振弦式土压力计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TY-RTU		2020-11-16 09:26:32.437+08	2021-02-05 15:30:48.845+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
cce5d34b-3464-4566-81e6-3ff2540af13e	综合采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CP-SP-V1.00		2020-12-28 14:09:52.525+08	2021-02-01 11:49:31.112+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
92bbac70-53a3-4d25-b8ab-b4287c52359d	空气净化器	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	t		K20		2020-11-11 17:46:31.983+08	2020-11-18 17:17:00.985+08	b5ea9716-5d8c-450c-971e-33e25652dea1	4
75ab7fed-fb74-48c5-8cf9-898b3fc62358	倾角传感器02	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		yywj001		2020-11-27 09:56:17.667+08	2020-11-27 17:21:39.491+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
af9ec966-1c73-4e23-bae8-5ffcb4661942	单点位移计（振弦式）	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	t		MAS-DWY-10		2020-11-19 09:19:24.236+08	2020-11-20 09:01:21.657+08	005e2048-b7e8-4f7c-847f-e9918a66414d	4
f963b588-8c55-4b9b-b455-8e7302d88408	振弦采集仪	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-Micro-08MOM1-JT		2020-11-24 11:13:14.735+08	2020-11-24 14:51:07.739+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	1
19edfd93-0bd4-4c71-85c0-647971fa008a	双轴倾角传感器	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	t		QJ02-15R		2020-12-11 08:53:07.228+08	2020-12-11 15:41:37.592+08	ce4fbec7-4440-489a-be8b-fd328339df21	4
aeced422-061a-4b9f-bf4c-1e9597f5b016	锚索计	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	t		AC-MS		2020-12-16 15:35:33.599+08	2020-12-17 10:00:32.526+08	995100fe-ae10-4774-a39f-817f580c578c	4
7737f9b3-195f-465e-b563-1a4f509e38ce	位移式水准仪	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	t		SZ01-100R		2020-12-11 08:53:58.623+08	2020-12-15 09:15:31.236+08	ce4fbec7-4440-489a-be8b-fd328339df21	4
dac7cbf1-b98a-4c95-9ff7-14b1602c494f	裂缝传感器	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	t		LF01		2020-12-11 08:54:51.193+08	2020-12-11 15:41:46.776+08	ce4fbec7-4440-489a-be8b-fd328339df21	4
403dcab2-df50-4fda-a92e-c2100bb9a242	气体监测仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-GDSFHQTJCY	原来型号OS60Y	2020-12-08 17:06:13.989+08	2020-12-09 14:39:36.011+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8001366f-40a9-4e0c-affa-d050c5eacf17	人员定位基站	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZGBJZ		2020-12-09 13:47:35.626+08	2020-12-09 14:39:40.66+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c	人员定位标签	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-ZGBBQ		2020-12-09 13:58:20.277+08	2020-12-09 14:39:45.527+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
6d6210bc-a5e7-439d-b731-e6efdeada2f7	温度传感器	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	t		WD		2020-12-11 08:56:50.259+08	2020-12-11 15:41:51.947+08	ce4fbec7-4440-489a-be8b-fd328339df21	4
8c5826bc-d7e6-4506-9dab-ded01f4c2346	数据采集仪	eb348dfa-0075-47b5-b190-4e10b6c5c6be	eb348dfa-0075-47b5-b190-4e10b6c5c6be	eb348dfa-0075-47b5-b190-4e10b6c5c6be	t		VW100X		2020-12-10 15:58:14.689+08	2020-12-11 16:47:04.395+08	b368dca7-d851-4853-bf37-d16c775a9d9e	1
35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9	轴力计	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	t		AC-ZL		2020-12-16 15:38:50.327+08	2020-12-17 10:00:37.338+08	995100fe-ae10-4774-a39f-817f580c578c	4
90f77fb4-1b78-4f30-b558-8026aa10f6db	三轴测振仪	9f26c140-684e-41f5-80a9-b0c1f660b9f7	9f26c140-684e-41f5-80a9-b0c1f660b9f7	9f26c140-684e-41f5-80a9-b0c1f660b9f7	t		TH-VBR-H		2020-12-21 17:30:31.21+08	2020-12-22 09:51:20.634+08	d1c2b73f-7215-4523-bb92-43041584ab1a	4
19f735aa-e557-4795-93bf-fc5e8c57b47a	应变计	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	t		AC-YB		2020-12-16 15:29:32.231+08	2020-12-17 10:00:27.164+08	995100fe-ae10-4774-a39f-817f580c578c	4
4f041931-dc1f-4868-985b-e5f1d27b1d38	振弦采集仪	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	t		AC-8/16		2020-12-16 17:00:14.074+08	2020-12-17 10:00:46.722+08	995100fe-ae10-4774-a39f-817f580c578c	1
167e3709-030c-4724-bbad-4060c61870bc	倾角传感器	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	t		HS726T		2020-12-21 17:00:24.177+08	2020-12-21 17:43:37.303+08	10c8af19-c2ad-4e25-be28-63f5a359a41c	4
1a190e1d-27a0-4b3a-8635-8737f24de024	振弦采集仪	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	t		AC-32		2020-12-16 15:27:44.47+08	2020-12-24 12:36:59.18+08	995100fe-ae10-4774-a39f-817f580c578c	1
d67fea40-a63c-4087-b5fd-5e5f0c387893	CA点式振动位移计	17e2c509-1128-42d6-89b5-5058d7a2a5cd	17e2c509-1128-42d6-89b5-5058d7a2a5cd	17e2c509-1128-42d6-89b5-5058d7a2a5cd	t		CA-QJ4G		2020-12-24 14:19:13.054+08	2020-12-30 09:04:44.822+08	3b23d906-05d9-484e-9f08-7a68831770e8	4
7b536454-20a7-4c1b-bfeb-4a0f018d2673	电源控制模块	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	t		ANC-JD01		2020-12-23 16:00:33.812+08	2020-12-25 12:08:18.686+08	f3f08d8d-1644-4a97-b5ab-a94039b1907c	4
085307b7-181b-4059-9e81-1cbfff8fa061	WiFi客流计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-wifi-People		2020-12-03 17:40:46.294+08	2021-01-04 16:41:03.018+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7c054865-5f77-4df5-9d1b-ed2c6f1bb27e	倾角仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WXCX-XX-V1.00		2020-12-29 14:11:13.094+08	2021-01-29 10:21:45.936+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d9aab088-57f5-43ba-b30b-3342219a4b75	超高精度双轴倾角传感器	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		AIS 2000		2020-09-02 17:43:02.608+08	2020-12-30 15:53:07.567+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
b44eeccf-0eed-4785-a539-0122bcd2a99f	http_device	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		lk_http		2021-01-04 09:20:07.804+08	2021-01-04 09:20:07.804+08	\N	1
e2ad2fb6-75a3-490f-82ae-eac117102885	泥水位计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-NW-RTU		2021-01-18 14:14:29.606+08	2021-02-05 15:31:06.584+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
7d999707-8940-47f8-995e-f50b44e48ede	加速度计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-JSD-RTU		2021-01-18 12:37:46.482+08	2021-02-05 15:30:58.34+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
d1b7163a-96fb-4364-a1ec-73b29be3dbc0	土壤温度	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-TW-RTU		2021-01-18 14:04:59.384+08	2021-02-04 16:17:29.984+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
2d4d2d3b-44b4-43ac-bb98-7c02fcf76152	全站仪	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	t		TS60		2021-01-07 08:51:22.849+08	2021-01-11 13:07:20.063+08	897e5bb1-9d4c-484c-b565-397bd37d5c55	1
27e93aa0-1ec0-40df-aa0e-de4152459a66	超声波风速风向FM-C-SX	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f		FM-C-SX		2021-01-14 14:24:33.361+08	2021-01-14 14:24:33.361+08	\N	4
ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	倾角仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-QJ-RTU		2021-01-18 14:02:07.837+08	2021-02-04 15:53:44.533+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c991c138-3b47-4a21-af81-9ba1df554176	盒式测斜仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-RTU-HGC01		2020-11-11 09:55:32.221+08	2021-01-18 17:21:15.376+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
daaea98a-a1a5-40c5-b34f-108d16d94b12	直角小棱镜	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	t		L-M		2021-01-07 08:53:43.276+08	2021-01-18 11:20:01.326+08	897e5bb1-9d4c-484c-b565-397bd37d5c55	4
1dae2ae1-5be8-4cd2-824f-cc4948f75959	采集终端	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	t		TDZD		2020-12-31 13:36:49.026+08	2021-01-06 11:33:03.653+08	9d5e90d5-269a-4683-9010-34bd32ed70f6	1
7da4f815-e889-4b79-8b69-8fda271a954f	应变计	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	t		TD-YB		2020-12-31 14:25:20.537+08	2021-01-06 11:33:07.609+08	9d5e90d5-269a-4683-9010-34bd32ed70f6	4
406adc2f-6e40-43fc-832a-d6982677d5e1	温度计	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	t		TD-WD		2020-12-31 14:26:55.455+08	2021-01-06 11:33:12.048+08	9d5e90d5-269a-4683-9010-34bd32ed70f6	4
2d2bb5aa-7dae-4123-bf05-5cdc08d7480f	直角小棱镜	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	t		L		2021-01-08 17:46:14.764+08	2021-01-18 11:20:08.123+08	897e5bb1-9d4c-484c-b565-397bd37d5c55	4
dadaf677-ed6c-4f61-ba61-d030f157dd14	激光测距	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-LRF-UpLoad		2021-01-26 15:59:08.519+08	2021-01-26 15:59:30.727+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5ab5659c-c875-43de-a5cb-c2c09a6b738d	倾角仪Z轴	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WXCX-XZ-JSD-V1.00		2021-01-25 15:07:40.85+08	2021-02-01 09:48:36.418+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
8f03b15b-fbb7-4bca-ae92-2230abf071b7	倾角仪X轴	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WXCX-XX-JSD-V1.00		2021-01-19 10:14:04.384+08	2021-02-01 09:48:28.124+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
a7e6bd92-16dd-49b0-a4c1-115a6c8b272f	倾角仪Y轴	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-WXCX-XY-JSD-V1.0		2021-01-25 15:05:43.696+08	2021-02-01 09:48:32.182+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
1738d5bc-6a00-4ec6-813b-1ecd8ed014bd	固定式测斜仪	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYZY9020		2021-01-27 13:54:55.082+08	2021-01-28 09:03:40.377+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
9baef129-7240-456d-819f-081ed682b6c6	GNSS	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYPS2010		2021-01-27 13:50:41.004+08	2021-01-28 09:03:46.09+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
c948c019-e1f5-4a3d-a348-de60051d3e2e	裂缝计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYPS1010		2021-01-27 16:52:16.872+08	2021-01-29 10:23:05.036+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
aad44a46-f5ad-4b1c-b6a4-cff40950cfba	水位计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYZY9050		2021-01-28 09:45:57.594+08	2021-01-29 10:23:12.101+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
b4836295-511d-4752-99b6-099f9e59ec54	加速度计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYPS1012		2021-01-27 16:50:39.664+08	2021-02-01 09:32:57.599+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
10652dfa-31f2-41fa-b997-d6162cb01901	管式土壤含水计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYPS1016		2021-01-28 09:58:52.849+08	2021-02-01 09:33:02.657+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
998e19a5-71a8-484e-a7af-5ffe30f99e87	雨量计	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	t		PTYYPS1014		2021-01-28 09:32:46.572+08	2021-02-02 11:57:09.138+08	57a0b61a-7418-4200-9df8-2389ceabf0ab	4
c51a8eb3-9068-456f-9922-5934de559a71	综合采集仪振动	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-CP-SP-VIB-V1.00		2021-01-29 10:12:04.662+08	2021-02-01 11:48:32.671+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
408d0732-eb70-4420-89b3-8f5ab433528f	地灾(江西地灾)	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		RTU-Test		2021-02-04 16:04:59.946+08	2021-02-05 14:52:02.576+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	土壤含水计	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-HS-RTU		2021-01-18 14:09:49.686+08	2021-02-05 15:31:02.31+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
c892bb1b-57aa-4b52-b1eb-79172e95a8fb	人流量设备	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-RL-1.0-3	安吉升	2021-02-22 09:15:10.011+08	2021-02-23 14:09:48.366+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd	电表采集仪	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-DBCJY		2021-02-24 17:38:25.365+08	2021-02-24 17:50:51.687+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	1
f8803e24-c7c9-4089-8f06-5a00433131b1	电表	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	t		FS-HBJC-A	安科瑞	2021-02-24 09:24:53.436+08	2021-02-25 14:05:10.396+08	415309d1-0dfa-4a51-9446-c5d96a8357c2	4
5b625df3-f714-4971-94a8-625e9c8812fc	倾角仪	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	t		TAC11		2021-02-24 11:11:07.558+08	2021-02-26 08:39:36.935+08	980b9cf9-1073-4a81-b777-0d29ac8237d2	4
\.


--
-- Data for Name: DeviceMetaInterface; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceMetaInterface" (id, "directType", "createdAt", "updatedAt", "deviceMetaId", "interfaceMetaId") FROM stdin;
63ccdc3f-2ef3-49e7-915f-ff80e09bac85	2	2017-08-12 17:28:55.324+08	2017-08-12 17:28:55.324+08	6888837c-236d-4a0a-871e-ea506429a386	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fd6dbe19-8ab2-4a43-8af7-b23d43ae2662	1	2017-08-12 17:28:55.33+08	2017-08-12 17:28:55.33+08	6888837c-236d-4a0a-871e-ea506429a386	3dfadb0e-7608-49e1-aa43-24f7442b424a
95376b40-306e-4012-be53-636ef41d2c77	1	2017-08-12 17:30:28.171+08	2017-08-12 17:30:28.171+08	990ac51b-201f-4818-8ac0-06e9997719ed	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e2ecd847-3032-449a-9cc9-ce707443625a	1	2018-08-17 11:27:24.43+08	2018-08-17 11:27:24.43+08	0ca9c27a-7633-4d1b-b46b-aadf7ce9bf3b	96b665c2-5314-4144-83d3-7db169ef9416
e3cc63f3-b29f-48f1-ada2-3ccd62b1411e	1	2018-08-17 11:33:00.263+08	2018-08-17 11:33:00.263+08	df1112e3-a161-4260-850f-8f6644389623	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
57caac26-053a-415f-839e-d361e644ee3e	1	2018-01-05 16:27:59.068+08	2018-01-05 16:27:59.068+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eb975f2c-94f0-4073-a10f-08e05c10b8d2	1	2017-08-28 19:12:24.835+08	2017-08-28 19:12:24.835+08	180c854a-5ace-4044-babd-b270f98fde6b	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
e216deb2-87c1-4ce8-b05d-bb8fc10be4fa	1	2018-01-05 16:28:13.398+08	2018-01-05 16:28:13.398+08	d32eacce-7db0-4c15-b17c-f1d870389c14	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2675dfb4-47bb-46f4-a12c-5072f787a0c9	1	2018-01-08 14:56:09.887+08	2018-01-08 14:56:09.887+08	7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
830ef5ad-6a3a-424f-85ad-738d2d56dd0b	1	2018-01-08 16:27:56.737+08	2018-01-08 16:27:56.737+08	666e753c-f0b0-478d-b5f5-839117db13f9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
767dbc44-602f-4917-b86d-efba3577b917	1	2018-01-08 16:40:09.753+08	2018-01-08 16:40:09.753+08	947fdddf-6d80-4972-88cc-601559ca3458	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e9f5d29f-4a74-4605-b6a6-e54423e4ec5d	1	2018-01-08 17:03:46.47+08	2018-01-08 17:03:46.47+08	cb339f74-5895-4180-a0dc-a3cf12151b0b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3ee7d849-8437-4af9-be58-2de548f11313	1	2017-08-26 16:17:23.305+08	2018-10-08 14:42:55.251+08	870242c3-963d-417d-85fa-21add06c9e0a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7943dd9a-0f5b-44d8-a527-2aa409ceb961	1	2018-10-11 09:06:27.303+08	2018-10-11 09:06:27.303+08	cce8a8e4-cd65-4f13-a554-eb06fa2b7caa	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e0fc5b6e-c095-463a-a8bf-9d1d817a0c2c	1	2018-01-08 18:00:05.703+08	2018-01-08 18:00:05.703+08	930f1b29-d056-40a8-9b86-62829634874c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3836aef4-bcdf-4260-948b-77c48608f2d5	1	2018-10-31 18:04:59.738+08	2018-10-31 18:08:47.458+08	c1831563-faaf-4e2a-9d49-6b483abbd040	3dfadb0e-7608-49e1-aa43-24f7442b424a
3d35566b-919f-4f62-85b3-aec523ba926a	1	2018-11-12 16:40:05.523+08	2018-11-12 16:40:05.523+08	ffa967e5-e1cd-4c0d-9aff-643c16430446	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
50f0137c-73fb-4190-8d2a-20119eb43a23	1	2018-11-23 10:32:50.889+08	2018-11-23 10:32:50.889+08	87a47520-e1a3-474c-b8b2-b1fd5dd521a9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
110d0b44-a52c-40a7-93d7-c2c0a186d3a0	1	2018-01-09 21:37:46.433+08	2018-01-09 21:37:46.433+08	d08c2f42-3528-4b5f-9f34-04deac7051c1	3dfadb0e-7608-49e1-aa43-24f7442b424a
3d1a6c0e-0643-4673-9574-7a5485b67c39	2	2017-08-28 11:19:40.996+08	2017-08-28 11:19:40.996+08	31ec0204-1cc6-475a-bd8b-39ad4cda3a25	9a1540b6-fea8-4bc0-8090-296b05f87c4a
711866e3-2603-448a-8ba8-d800fca4e33b	1	2017-08-28 11:19:40.991+08	2017-08-28 11:19:47.967+08	31ec0204-1cc6-475a-bd8b-39ad4cda3a25	3dfadb0e-7608-49e1-aa43-24f7442b424a
b58e5131-ff68-4dff-a8f8-e7dd0eac6e45	1	2018-08-17 11:17:05.435+08	2018-11-13 13:36:00.612+08	0f069d0a-8f7e-4480-b864-201a86725331	66537b16-1e7d-4823-b03e-676459f5891d
42f2b43c-9dc0-4cdb-9b56-39957948609e	2	2018-01-09 21:37:46.436+08	2018-01-09 21:37:46.436+08	d08c2f42-3528-4b5f-9f34-04deac7051c1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
939fefae-55d4-4666-b93d-2b2986560287	1	2018-01-12 10:08:09.315+08	2018-01-12 10:08:09.315+08	301f43b2-e055-4169-8a27-c3d69b246a19	9a1540b6-fea8-4bc0-8090-296b05f87c4a
477bfb00-3a30-4991-8bfa-858e9523eb97	1	2017-09-02 14:31:47.777+08	2018-11-17 14:06:55.897+08	112843b4-e834-4892-9ef3-260fe3d90c24	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
493e88a6-85ce-437e-a724-335dee6baf6d	1	2018-01-16 10:34:03.648+08	2018-01-16 10:34:03.648+08	70177dd0-b5ab-45c0-8338-a6f69138f85f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
afc4461e-21e8-48f5-998b-e9f2d2d51892	1	2018-01-16 10:34:03.979+08	2018-01-16 10:34:03.979+08	72b0bf25-78ae-4ab5-995b-c83cfbf52484	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4fc29cb4-5cc5-4470-b36d-fca10dfb4fe3	1	2017-09-04 09:36:21.635+08	2017-09-27 16:01:04.297+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f9c931f2-268b-4bae-b97a-47cde5e60eae	1	2017-08-28 21:20:45.579+08	2017-09-27 16:01:16.06+08	b3f251c1-ab5e-4427-8b38-9180d6544783	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf1b2fb7-1992-4e93-b636-f7c81b1cf722	1	2017-08-28 20:27:58.367+08	2017-09-27 16:01:24.97+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d4512b58-88c7-4ee7-b18e-2e027dad3add	1	2018-01-08 11:06:18.389+08	2018-03-28 23:08:55.889+08	962c0a4a-535e-4f86-a25c-f38e3aa6f144	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7ae238e5-3972-416b-9889-5388c3889fea	1	2017-08-26 15:51:32.548+08	2017-09-27 16:01:50.214+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
93027b4e-7dc8-45ad-9bd2-d2f83f5da14b	1	2017-08-24 20:03:54.292+08	2017-09-27 16:02:43.265+08	38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a9419541-f580-469a-9faf-549b75863b52	1	2017-08-28 20:53:46.154+08	2017-09-27 16:04:05.403+08	193a9dcf-959d-4cd5-a186-637c11ae97a0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
08d16d99-4102-4efc-935f-5ec573bc7d2c	1	2017-09-02 14:59:34.579+08	2017-09-27 16:34:58.209+08	0a25e0b7-784b-46fb-8fa3-d1a99593f343	9a1540b6-fea8-4bc0-8090-296b05f87c4a
809a86cd-7765-4faf-9b2e-10dfda10b756	1	2018-01-05 16:50:29.989+08	2018-03-07 16:44:38.865+08	d55af283-4d11-4eb7-8099-890d98bfcc0c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8699fd4b-ba62-4d57-865d-9ad6f15997e2	1	2017-08-26 15:45:06.824+08	2017-09-27 16:41:24.369+08	d51cfe97-0f8a-4f38-95fb-34208b171056	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fc85fde7-32df-4a08-bf0a-5dc35079ab6f	1	2018-01-16 10:34:04.388+08	2018-01-16 10:34:04.388+08	0bae88b4-e518-4869-96ea-c833160a9914	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a95cdc2e-5ed2-4d6d-9346-8a87c54e3c60	1	2018-01-09 11:10:39.244+08	2018-03-29 11:39:33.036+08	5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
574b7efb-9e96-411c-a7d0-02224c65c80c	2	2018-01-08 18:00:05.708+08	2018-03-13 23:10:09.424+08	930f1b29-d056-40a8-9b86-62829634874c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
db55d5aa-a374-4095-8420-55d6b1129f4a	1	2017-08-31 17:02:01.775+08	2017-09-27 17:58:45.313+08	39dc1e20-9e5e-4776-8459-5354261926fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7666945f-7f67-4996-9f31-f2e6d57daf3b	1	2017-09-02 14:47:06.941+08	2017-09-28 09:06:20.61+08	28abcb7f-eb40-406b-a798-fc280b30638e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ffa49fe5-f400-4a48-82a2-cf6dc26328c2	1	2017-08-26 15:59:26.858+08	2018-03-16 18:39:12.892+08	9110f259-e269-446d-afa3-798069f4534d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a8da373f-295d-41c8-8370-38f54425b4ae	1	2018-01-05 16:26:30.083+08	2018-06-26 10:45:34.789+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ed20e575-26ef-46bf-93a3-c9a1d7d099ce	1	2018-08-17 11:39:56.603+08	2018-08-17 11:39:56.603+08	46272932-067d-4fa2-87ac-85a866b4f691	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e4070f8f-14f7-42b3-b0cf-d7981072cb90	1	2018-01-05 17:40:36.047+08	2018-01-05 17:40:36.047+08	1f00228f-9138-4060-9b9b-1ae22f803af7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3bf63ed3-8ad5-4ac4-9fff-227a8abd7be2	1	2018-01-08 15:10:26.502+08	2018-03-12 15:18:52.252+08	f5f27d3f-b8fd-44ee-97e2-8a78748a424f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8c7a5c1d-30b5-4c7c-92a9-75eeb60fea98	1	2017-09-19 16:23:55.238+08	2017-09-19 16:23:55.238+08	98a8fd6f-cab9-47d3-88aa-8832962c931c	73c3b65f-2eb1-4465-9ead-47e699326a86
3fc485df-6741-431d-a892-9ea00c094999	1	2017-09-04 14:12:42.494+08	2017-09-27 16:00:51.36+08	1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cc5158b9-1eb4-4313-90e6-e3de0d17b31a	1	2017-09-06 18:47:18.566+08	2017-09-27 16:03:28.98+08	584a210b-20f2-49cf-906a-9d6b4883af09	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6b0f9f27-9cee-42f5-ba21-60413843980e	1	2017-09-12 17:44:48.568+08	2017-09-27 16:04:41.734+08	003540d0-616c-4611-92c1-1cd31005eabf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e4418a0e-75b1-49b1-b2e7-081f5515c9e8	1	2017-09-08 09:20:57.953+08	2017-09-27 16:34:36.058+08	f9cf9002-bdbd-458c-8534-37db6183e217	9a1540b6-fea8-4bc0-8090-296b05f87c4a
252c23b3-3c8d-408c-a694-5b27600daa69	1	2017-09-04 19:04:13.353+08	2017-09-27 16:36:07.631+08	a0bf9003-9dbd-4cc7-8bea-7da81ce69f32	9a1540b6-fea8-4bc0-8090-296b05f87c4a
89797dc1-14f9-42c0-8db0-e6a802c0a024	1	2017-09-14 20:56:17.159+08	2017-09-27 16:38:32.916+08	fd8e5a82-2b93-4d83-9132-4666b974079d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a02c7304-9b7e-497d-9d53-00667d47295b	1	2017-09-16 12:22:16.713+08	2017-09-27 16:40:30.805+08	0357e07d-3afb-4d4b-b196-766688a5b2b2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ad0b4164-972d-458e-8f63-d16b24582168	1	2017-09-16 16:10:09.732+08	2017-09-27 16:40:57.863+08	aa9f0751-4576-42b2-b09b-a6c3959955df	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f16fa6ae-e48c-44d0-a906-8fe92d621c22	1	2017-09-14 14:53:06.099+08	2017-09-27 16:41:46.094+08	3415a2e9-2c44-402f-872c-f0187cef058f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9e5ed7e4-08fd-407c-a34c-6c293ae720cf	1	2017-09-14 14:50:50.8+08	2017-09-27 16:41:52.589+08	a96f169e-56b9-49c8-a5cd-caade25fbf14	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d4908512-bbfa-4243-a285-3edfbdb18441	1	2017-09-14 14:47:52.159+08	2017-09-27 16:42:26.036+08	ac3a0caf-7018-44d2-9337-32c7194ec412	9a1540b6-fea8-4bc0-8090-296b05f87c4a
474d1a8b-734f-47c6-b26c-c51ff6353237	1	2017-09-14 19:08:55.121+08	2017-09-27 16:42:47.309+08	55d8d331-c61d-4523-886d-2d69f350cde0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e96f9d8d-b89d-40ec-86f4-8dd32c040a7b	1	2017-09-14 20:36:40.088+08	2017-09-27 16:43:15.716+08	80dbb37c-0408-4a0b-8ef5-dc1acd7c303b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3810fe74-db24-4553-87b1-ca5f1c9adaf7	1	2017-09-12 17:44:24.676+08	2017-09-27 16:43:53.431+08	c7528fab-94f4-4110-9aaf-8964afa09c20	9a1540b6-fea8-4bc0-8090-296b05f87c4a
71ac1749-1c32-4014-a496-8507cf5be772	1	2017-09-05 10:54:48.254+08	2017-09-27 16:44:21.459+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7c467342-5c75-43f3-b949-139162c808ae	1	2017-09-19 20:20:53.732+08	2017-09-27 16:45:01.375+08	7e6111e8-0a68-4af8-92ae-6238b7f3c631	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4aa4a735-9dff-49e1-8ff2-296efe68a305	1	2017-09-08 17:28:38.385+08	2017-09-27 16:45:21.259+08	96870c78-2ed9-4141-9438-e9415cd6eeb8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2595061b-5754-47db-bc80-c72c62ad229c	1	2017-09-09 15:51:26.008+08	2017-09-27 16:45:46.53+08	cf03d97a-0c99-494f-821d-da2dc02126dc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
83d49ed0-5f75-4c4e-bda6-f6c6662ea8e0	1	2017-09-14 14:41:42.374+08	2017-09-27 16:47:33.559+08	6850f742-c5b7-4984-b1ef-d01b16015eb9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3da6f3aa-036e-4f89-a50b-9fa2081ec912	1	2017-09-14 14:34:58.927+08	2017-09-27 16:47:39.198+08	eccb6310-f340-4668-9469-3df210aa471d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8cdbe324-b7a2-4bb4-8353-bb3beaee80e4	1	2017-09-09 14:39:09.809+08	2017-09-27 16:48:37.739+08	ae93a369-2ef8-4e20-83d6-d2f89076b115	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9081165a-8470-49d3-887b-1cc9e43fe06d	1	2017-09-14 20:24:32.009+08	2017-09-27 16:49:32.225+08	92597060-2385-438d-8a9e-25fee05e4e31	9a1540b6-fea8-4bc0-8090-296b05f87c4a
74fa134b-dffd-45e9-975a-8d2b64a5d1b7	1	2017-09-06 20:01:37.361+08	2017-09-27 16:50:39.595+08	05d70310-6689-4174-b4ae-274ab5e8f287	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ab11e177-0282-4aac-a84b-df19e34d4320	1	2017-09-13 09:13:35.767+08	2017-09-27 16:51:00.375+08	d523046b-7e32-486b-a1ab-cac779eb6209	9a1540b6-fea8-4bc0-8090-296b05f87c4a
64cb0706-4c3a-406d-886e-8cbdd636207e	1	2017-09-12 19:48:22.303+08	2017-09-27 16:51:06.888+08	a8a32974-fa53-4e18-a264-58c885d3c409	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7d3d6aa9-710d-4dde-bcdb-77baa08e3973	1	2017-09-18 21:05:59.008+08	2017-09-27 16:51:26.809+08	34e17d2c-cfa7-42a7-88d0-fc64f13f68c2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8a918454-cdf7-442a-8181-8b92abebfdd8	1	2017-09-11 20:33:20.848+08	2017-09-27 16:51:44.338+08	497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
36572834-2379-48b7-ba25-7c69aaee0bea	1	2017-09-06 19:34:49.411+08	2017-09-27 16:51:59.657+08	8e782506-4bab-4798-9e24-315107e3cc15	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a074e70e-ee4c-46c8-a87c-fd2abb07bb98	1	2017-09-04 20:41:19.212+08	2017-09-27 16:53:41.998+08	ed599be6-4811-4a09-a065-4b29586a4c00	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1a40d489-5c03-4f60-8665-4b24279aedc6	1	2017-09-12 17:57:39.262+08	2017-09-27 16:54:06.617+08	ab34de76-f758-4311-8bfc-dc7054a58ecf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f57f7c1b-549f-4af4-8914-447d7c461e5f	1	2017-09-14 17:27:01.207+08	2017-09-27 16:54:27.786+08	cdf69820-94cb-45a3-acfe-21aa83737595	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e631ef74-cc0b-4ab0-90bb-8ae9a37294dd	1	2017-09-16 15:21:21.446+08	2017-09-27 16:54:58.008+08	eb1c1781-cea9-411f-8c15-39aafc8ee62c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
102b9d0f-de06-4a70-92fd-fadf63194b79	1	2017-09-14 19:37:28.69+08	2017-09-28 09:03:03.45+08	2078f06f-be3c-4d10-90b1-200f3bdb00ae	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c9738a60-d623-45c0-9ede-1701eff4703c	1	2017-09-13 10:00:10.873+08	2017-09-28 09:04:19.854+08	e833a38c-2409-474d-8d23-86ff4d45b199	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3b22f46a-d6ad-4cb6-ab8a-7266056a5f46	1	2017-09-07 20:31:18.884+08	2017-09-28 09:04:58.31+08	77d3bafd-4986-4848-b3c9-dfe847c6750e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
25110c4b-809d-4dff-82fa-1eb8eb53c4c5	1	2017-09-19 20:40:00.067+08	2017-09-28 09:08:45.261+08	d32b2513-a8bb-465c-aabf-0832f355ef6b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8b671122-6145-4f8e-82f6-5294af6806a1	1	2017-09-09 11:32:45.947+08	2017-09-28 09:11:14.746+08	b56e401a-75e7-47ea-84db-6638fd421792	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8198cafd-1e4d-4b68-bb6c-d75fd90059fd	1	2017-09-07 14:40:21.318+08	2017-09-28 09:13:33.93+08	0c5bca0d-95b8-416e-865b-1f09bb49285f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
90bd0c79-4d69-4a80-be30-5c6425891dab	1	2017-09-16 14:18:38.39+08	2017-09-28 09:14:19.559+08	831ab1f7-fe76-4152-b7a0-3359bdf7c3bd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7bb4f089-2a73-4a73-aaff-81066efbde67	1	2017-09-12 20:28:25.973+08	2017-09-28 09:16:53.283+08	5bc92012-60a1-48ac-840f-575cb4e94c48	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b815e8bd-a927-4120-81ee-53ba19468f9a	1	2017-09-26 10:30:13.274+08	2017-09-26 10:30:13.274+08	1c909cc1-bb51-4e83-824c-31fb278ce026	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
8ccca344-fbcd-45ad-bcfc-eb97278fba39	1	2017-09-27 15:52:07.851+08	2017-09-27 15:52:07.851+08	65bd339b-0469-4019-8c96-55a6dbc6b697	9a1540b6-fea8-4bc0-8090-296b05f87c4a
69c54d0d-fcb5-4607-8266-dd978f93f713	1	2018-08-17 15:55:31.652+08	2018-08-24 09:46:18.211+08	ba3d723e-88ac-4e9a-976f-43d43081e621	9a1540b6-fea8-4bc0-8090-296b05f87c4a
39b76697-28f1-47dd-a54a-3d2b850b7d70	1	2018-10-11 14:47:31.903+08	2018-10-11 14:47:31.903+08	177e7e33-3dae-4163-8d7d-1778e70b4a8b	d4f271b6-567a-4880-beb0-161b33ac2094
ecc801b1-0517-4722-aa98-e20d2c9b2fb7	1	2017-09-27 15:57:28.226+08	2017-09-27 15:57:28.226+08	ca7ff65b-b5a0-49f3-ad0b-6821012604ce	9a1540b6-fea8-4bc0-8090-296b05f87c4a
84c1cb7e-d5ff-428d-9382-a27e2284a946	1	2018-11-02 11:05:43.306+08	2018-11-02 11:05:43.306+08	b440e042-3173-43c6-887c-3cf4ce8a49e4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7f3b1220-a5f6-4c2d-bc6e-efec711079c7	1	2017-09-25 19:45:57.206+08	2017-09-27 16:40:07.585+08	6f1f679a-d9b7-4fe3-945d-8b83105284a8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bb39dea7-0de5-4844-8e66-c702f05081e4	1	2017-09-22 17:34:24.76+08	2017-09-27 16:44:52.899+08	fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5d90bc3b-2691-4841-9f9a-787ce4b681a5	1	2017-09-27 16:52:40.389+08	2017-09-27 16:52:40.389+08	6f16c6fa-6d60-481b-95ec-e450227fe268	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e56064f3-665a-4f5d-ac50-b6f31faa26a2	1	2017-09-25 10:44:21.673+08	2017-09-27 17:58:31.387+08	d3245ff1-0781-49bd-b37c-e245a350a709	9a1540b6-fea8-4bc0-8090-296b05f87c4a
23557cc0-60a0-46fe-8e09-8a48afff76df	1	2017-11-06 10:15:13.303+08	2017-11-06 10:15:13.303+08	8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf7d6928-ce06-4e99-aaa0-4fc4c011ce61	1	2017-09-20 16:26:18.702+08	2017-09-28 09:08:19.336+08	c094bbbe-bc2a-4223-bba7-539edb03d3b0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2750266f-7ee5-48c7-9278-f14032923026	1	2017-09-21 10:57:18.45+08	2017-09-28 09:09:38.64+08	1c210656-dc67-470f-b8c3-d653c82e3bb0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a9fc8480-541f-4a49-9a5f-f4934866728f	1	2017-09-25 10:54:34.178+08	2017-09-28 09:10:05.875+08	3bf186e9-5049-40e4-ba57-b40d90cd1543	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45fd4862-0a07-41dc-a52a-ddf6dad3c4eb	1	2017-11-13 17:45:45.256+08	2017-11-13 17:45:45.256+08	a1a0ce1a-3883-4148-8bd7-a94ce938e39b	3dfadb0e-7608-49e1-aa43-24f7442b424a
145b26e1-5bc2-4b77-a7ed-6a55750a2104	2	2018-11-12 16:41:13.991+08	2018-11-12 16:41:13.991+08	540e29ab-87bd-4d64-9f6c-c9af1db5bbf4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
42a338ee-84cd-4de7-842e-bc9fc068e82b	1	2017-10-31 17:57:38.208+08	2018-03-12 17:09:52.55+08	99e46759-26c1-4aa3-8e57-9818fc111906	3dfadb0e-7608-49e1-aa43-24f7442b424a
0e4a346a-3921-43ad-8ea5-1168af781862	1	2017-09-29 15:08:42.946+08	2017-09-29 15:08:42.946+08	be246ea1-fd75-4151-92c6-54b278d11287	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d26901f2-158e-40e0-98a6-a05b1e119321	2	2017-10-31 17:57:38.212+08	2018-02-28 16:12:08.598+08	99e46759-26c1-4aa3-8e57-9818fc111906	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3dfee4c8-a046-4751-b2c1-dc037b69943b	1	2017-09-30 11:42:38.221+08	2017-09-30 11:42:38.221+08	cbc19e42-a8ba-4a12-83f9-6ef1469df546	c96530d8-c5e2-4acd-a7fa-450e15e27ddb
884698d5-ed56-4613-85fd-cc02d313ae2c	1	2017-10-07 20:50:21.483+08	2017-10-07 20:50:21.483+08	6d1f494d-6e60-4181-85ee-115ea3586c6d	54d9b5fc-1253-41af-80d2-b6bef8f04add
fa62c56e-a9b8-4fa5-81c0-2ab96f5764bb	1	2017-10-31 18:02:48.581+08	2018-02-28 16:12:19.217+08	f5e0fd8e-6d70-4dd7-830f-42efadf389f5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2d2e69b2-0032-4057-859e-b1ebf354ed31	1	2018-01-05 16:18:59.238+08	2018-03-07 16:50:51.119+08	9abfc35c-6cff-489a-8257-b868954725f4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c4c2344a-fb89-4bfa-90fd-c8eb322eb2f2	1	2017-11-01 15:38:54.179+08	2017-11-01 15:38:54.179+08	e5b27a73-2d4c-4b53-8bcd-86583097a730	9a1540b6-fea8-4bc0-8090-296b05f87c4a
767c921b-d375-475f-bec1-d5a11464e86d	1	2017-11-02 16:13:34.441+08	2017-11-02 16:13:34.441+08	abb38d23-09f3-48fc-b9ee-4dfaf1db995b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0850698e-6c98-44ce-a664-9f4e257d8650	1	2017-11-06 11:16:45.196+08	2017-11-06 11:16:45.196+08	c52cea56-d5aa-4b14-ad9f-05fb6974e528	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c79eeb0d-55cb-4508-b1be-f9f1c4282293	1	2017-11-06 15:04:16.814+08	2017-11-06 15:04:16.814+08	43e2a07a-c33e-4e54-ba5e-0a948ae4ba61	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e8af9421-7e70-473a-a865-eabc51835f3a	1	2017-11-09 11:07:51.835+08	2017-11-09 11:07:51.835+08	26ceb3f3-78b3-4b0a-910b-a5bc39218370	3dfadb0e-7608-49e1-aa43-24f7442b424a
3c98a8d3-87fd-4b2f-ad59-d949ec850aea	2	2017-11-09 11:07:51.838+08	2017-11-09 11:07:51.838+08	26ceb3f3-78b3-4b0a-910b-a5bc39218370	9a1540b6-fea8-4bc0-8090-296b05f87c4a
472e6c9f-a3b3-4345-ba17-96aebcbc7306	1	2017-11-10 14:03:39.836+08	2017-11-10 14:03:39.836+08	393862fc-cfec-404b-873d-c42f5e22bc61	3dfadb0e-7608-49e1-aa43-24f7442b424a
26a1ed11-25b0-4738-a304-b26ea7cf14a5	1	2017-11-13 17:11:55.541+08	2017-11-13 17:11:55.541+08	1fbfe6ef-ffff-4bd9-936a-67d9665006be	3dfadb0e-7608-49e1-aa43-24f7442b424a
d6ac6c8c-d447-482b-96ce-41f67eba46b4	2	2017-11-13 17:12:07.342+08	2017-11-13 17:12:07.342+08	1fbfe6ef-ffff-4bd9-936a-67d9665006be	9a1540b6-fea8-4bc0-8090-296b05f87c4a
64ae3dd1-e6df-4a25-bda6-414915daa59b	1	2017-11-13 17:19:34.965+08	2017-11-13 17:19:34.965+08	8015ec05-fd08-4afb-b018-3bc916702f96	3dfadb0e-7608-49e1-aa43-24f7442b424a
49390aff-8cdb-4573-bf8d-cf1cab7bbfcf	2	2017-11-13 17:19:41.345+08	2017-11-13 17:19:41.345+08	8015ec05-fd08-4afb-b018-3bc916702f96	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3c5b207c-eb57-43bd-b2bd-c029247ba94f	1	2017-11-13 17:29:29.578+08	2017-11-13 17:29:29.578+08	b00292b1-f8e5-46c1-808a-dff46e9557ff	3dfadb0e-7608-49e1-aa43-24f7442b424a
a63fe795-c948-4113-acad-2e0468635101	2	2017-11-13 17:29:35.319+08	2017-11-13 17:29:35.319+08	b00292b1-f8e5-46c1-808a-dff46e9557ff	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8718baf5-fb8b-436d-b875-7c34bbe278cd	1	2017-11-13 17:29:46.237+08	2017-11-13 17:29:46.237+08	f8ec9655-408b-46e4-96f3-a8fcc382230a	3dfadb0e-7608-49e1-aa43-24f7442b424a
9f40c5ae-7efe-4b01-8cc7-bed09d447184	2	2017-11-13 17:29:52.354+08	2017-11-13 17:29:52.354+08	f8ec9655-408b-46e4-96f3-a8fcc382230a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
91dbb75c-a5f5-4fd3-8841-c49aca71b547	1	2017-11-13 17:37:00.867+08	2017-11-13 17:37:00.867+08	337651d1-80e3-4b07-9e87-79d5e20547aa	3dfadb0e-7608-49e1-aa43-24f7442b424a
352eaf9d-af3b-4648-83b8-0778dda25573	2	2017-11-13 17:37:07.891+08	2017-11-13 17:37:07.891+08	337651d1-80e3-4b07-9e87-79d5e20547aa	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7ee8a8a2-14dc-4e99-be3a-a73023b6fa18	2	2017-11-13 17:45:51.416+08	2017-11-13 17:45:51.416+08	a1a0ce1a-3883-4148-8bd7-a94ce938e39b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6c369fae-95c7-4986-a439-1a2b511a6d71	1	2017-11-16 13:50:55.925+08	2017-11-16 13:50:55.925+08	cff552ac-d565-4a44-8400-e0f4382ce853	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a7ad819c-a67e-4173-a2a9-0ad7dde3582f	1	2017-11-16 17:03:23.913+08	2017-11-16 17:03:23.913+08	f86c7d29-f504-474d-8665-d484e5c41e8a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
880d26e0-1562-4456-ae4a-6809dfb1885a	1	2017-11-17 09:45:45.972+08	2017-11-17 09:45:45.972+08	d87be87a-12ba-4e65-97ba-816bcb3e2e62	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9e689319-009e-4809-846f-dc4a98ad40a6	1	2017-11-20 16:42:59.96+08	2017-11-20 16:42:59.96+08	3f80f427-4615-44ae-b2e8-e783733d0ea5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
aee5e701-48db-49cb-a3a4-fb45007cc060	1	2017-11-21 15:57:22.478+08	2017-11-21 15:57:22.478+08	dfbedf15-8cef-4760-9cad-efaab883db3d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
579fbaf1-9b81-42e4-b9e9-528296ba6e32	1	2017-11-23 10:44:00.887+08	2017-11-23 10:44:00.887+08	57bf451a-e6f5-4df5-a4a7-c2c42a46546f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0e1840a7-4883-4b25-bc8b-c8a7ce3c4ba7	1	2018-01-09 11:31:58.814+08	2018-03-29 17:16:53.357+08	92bad770-f845-4bd8-8e2b-55e5343a2201	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5d581d09-0fd7-4ea3-9752-4af4aabf1796	1	2017-11-28 16:59:05.371+08	2017-11-28 16:59:05.371+08	f2c96428-649e-47e9-9b6f-e5749195cb33	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ee8acfbd-2198-46ae-a522-1e9d5cadc4c7	1	2017-11-29 11:48:07.559+08	2017-11-29 11:48:07.559+08	13126536-b6af-48d0-b43e-25144b65dd8d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d2adaa01-0e99-40c5-bb35-60983fbf30e2	1	2017-11-29 11:48:16.431+08	2017-11-29 11:48:16.431+08	0c5d070d-fb83-4f78-acc0-a0bd12be6cc2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
034d576e-32da-4ab2-8b1f-309e1eddf10d	1	2017-11-29 11:48:25.647+08	2017-11-29 11:48:25.647+08	f3ad3df8-e1ad-4e05-b479-185ac5ae8602	9a1540b6-fea8-4bc0-8090-296b05f87c4a
523f6570-a896-46be-b31d-58b0dd5c3fc6	1	2017-11-29 11:48:34.798+08	2017-11-29 11:48:34.798+08	e8d9a100-9650-4afc-a260-9c7bcdea9263	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6ce95b94-a0b7-49cf-94c7-b61f921a526f	1	2018-09-11 14:34:02.862+08	2018-09-11 14:34:02.862+08	470fe434-e3f4-40b1-a823-12f5b6122b0a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e0b7b313-76bc-4f6b-8094-1cbe8f086ff9	1	2018-01-05 16:27:38.104+08	2018-01-05 16:27:38.104+08	b0a93683-5c88-4f1d-81de-5e41fed44566	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d1d9e6df-e64d-46b4-978b-372dcb2a87d7	2	2018-01-05 16:27:38.107+08	2018-01-05 16:27:38.107+08	b0a93683-5c88-4f1d-81de-5e41fed44566	9a1540b6-fea8-4bc0-8090-296b05f87c4a
af8ac3f8-0501-42e7-b64d-e48ce5a657c6	1	2018-01-08 15:12:21.603+08	2018-01-08 15:12:21.603+08	0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fe3a2636-729f-4895-a031-9cb72c9c49a3	1	2018-01-08 15:32:40.767+08	2018-01-08 15:32:40.767+08	2fd2ebfb-7858-40db-91a8-d933269ccf64	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6bd2f2d5-dcd3-4767-b0c5-a365eb0b3843	2	2018-09-11 14:34:02.867+08	2018-09-11 14:34:02.867+08	470fe434-e3f4-40b1-a823-12f5b6122b0a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7300e18c-24a8-4c69-9e39-e4cab75d99f8	1	2018-01-08 16:22:24.854+08	2018-01-08 16:22:24.854+08	22dc1e96-f05a-4752-bebf-9d3c1285dace	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf3cdaf4-edfb-49e6-aced-889665fb8cad	1	2018-01-08 16:22:25.016+08	2018-01-08 16:22:25.016+08	c53d6302-b66b-40f4-b190-4d5447180ba7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
85f438f1-4779-4cba-890f-22fb871e1b89	1	2018-01-08 16:27:58.084+08	2018-01-08 16:27:58.084+08	8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
436b1289-e9c0-4f43-a72a-d95727c270b1	1	2018-01-08 16:27:58.781+08	2018-01-08 16:27:58.781+08	03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
189c2f2b-1d0a-4b3c-94b1-33bebff36ab4	1	2018-01-08 16:50:48.394+08	2018-01-08 16:50:48.394+08	80e5052f-477a-4e27-a3bc-0ec95ab3d4a2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
719b3dba-bba1-4f87-b495-4edec4572d91	1	2018-01-08 16:50:48.893+08	2018-01-08 16:50:48.893+08	fbc83633-74fd-494b-b1b7-75d289358b27	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7283403b-2780-411f-a674-f5aea930ddbb	1	2018-01-08 16:54:49.754+08	2018-01-08 16:54:49.754+08	bfc79caf-826f-4f9d-a709-241529e118b5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
683de5ab-224e-409d-8d87-924293e1f557	1	2018-01-08 17:10:40.668+08	2018-01-08 17:10:40.668+08	a3b4fd36-dd87-463c-84af-254647a24cc5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ea60971e-6c2c-4863-b5ae-ef74b224e054	1	2018-01-08 17:10:41.15+08	2018-01-08 17:10:41.15+08	e718c1a2-1c56-4da0-8cb3-36445c6b4f26	9a1540b6-fea8-4bc0-8090-296b05f87c4a
39bbcb01-7a84-4835-9646-a8a70dea04ab	1	2018-01-08 17:10:41.657+08	2018-01-08 17:10:41.657+08	c7f01571-7f09-4bef-99d3-fdc2da5fcaa2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ecca3930-fdb8-4e18-8da2-448131e548b7	1	2018-10-12 10:19:30.549+08	2018-10-12 10:19:30.549+08	5fc20b7c-ce0f-4584-aee1-c8e7dbb32e8a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6a369ae7-2703-4918-a144-59072ef59862	1	2018-01-12 11:27:20.208+08	2018-01-12 11:27:20.208+08	99978bc0-b3c7-4ba1-9064-723c2c13b95f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f87dd261-6de4-496d-9825-f1879888d6a3	1	2018-01-16 11:50:37.231+08	2018-01-16 11:50:37.231+08	0d123bba-3d2e-4252-a27e-af567da8aca1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
22b97f71-1db8-48f7-9ee4-85adcd617e0c	1	2018-11-20 16:26:17.238+08	2018-11-20 16:26:17.238+08	9c5aaf1f-48c2-4293-8338-f549c223993d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4c350113-8ea9-4493-93e4-7654d1660884	1	2018-01-18 15:22:34.511+08	2018-01-18 15:22:34.511+08	c0b0b779-cafb-4d7f-b4ff-64534e422738	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45976e2a-feb0-4aee-ad80-88a47ef3d19f	1	2018-01-18 15:22:34.694+08	2018-01-18 15:22:34.694+08	abefa36d-6587-4818-bb39-e14a51c26b4e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1b7394e3-aac9-4412-8fb3-67337c27b101	1	2018-01-18 15:22:34.874+08	2018-01-18 15:22:34.874+08	79ef29a0-9796-43ce-957d-952d3b16d70a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3aa8b22a-2569-4c0b-921d-4b27c1a84d0b	1	2018-01-18 15:22:35.033+08	2018-01-18 15:22:35.033+08	ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5a51894a-4fc3-4c9f-b0af-2fe7a3e2ed6c	1	2018-01-22 11:12:08.468+08	2018-01-22 11:12:08.468+08	eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6	80284583-ddc4-4364-8399-b49e3289bbf3
91d65629-6006-40b8-ae3b-626f6e477dcf	2	2018-01-22 18:07:23.435+08	2018-01-22 18:07:23.435+08	b914a394-bbd8-4ff4-857e-02a2d8eb6d25	3d88a29a-ca10-482f-8643-4fd39d4b50e2
c44d908b-d931-4e1e-ae6f-8336dec968f3	1	2018-01-23 14:02:27.107+08	2018-01-23 14:02:27.107+08	85ba72e3-3754-4b11-a144-757d7a01f1dc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a011b6b6-4034-42d5-90c6-615d17724ecd	1	2018-01-23 14:10:45.507+08	2018-01-23 14:10:45.507+08	931fef11-654a-4f36-bf37-dbc168c46e84	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cb2c078e-72b0-47e3-bb1b-a9498ba5650f	1	2018-01-23 15:32:11.047+08	2018-01-23 15:32:11.047+08	1c332609-ad1d-4066-b0fa-67df29181432	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4ca813f3-cc80-4c82-8802-ce37a1aff0af	1	2018-01-17 17:52:43.804+08	2018-03-06 17:39:39.708+08	4696ff30-0685-4f87-bc16-25d640a014a6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2d38e284-8948-4188-8f48-ce14e901e66c	2	2018-01-10 15:59:36.196+08	2018-03-06 16:01:37.33+08	f65db984-9da0-4cef-a9ea-7de5e02ef42f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a5c68c4f-124e-4860-b68c-b0a78cc4bcd0	1	2018-01-10 15:59:36.193+08	2018-03-06 16:05:48.232+08	f65db984-9da0-4cef-a9ea-7de5e02ef42f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1dbcdff1-a7dd-4cc4-900b-609d102a9a3c	2	2018-01-12 11:27:20.212+08	2018-03-08 09:07:40.915+08	99978bc0-b3c7-4ba1-9064-723c2c13b95f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6d728207-be8c-4d23-a36b-fad121cc99b4	2	2018-01-08 15:32:40.763+08	2018-03-09 09:14:54.395+08	2fd2ebfb-7858-40db-91a8-d933269ccf64	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
89e11345-37d4-4990-ab56-0c8b992ca12d	1	2018-01-08 11:44:22.156+08	2018-03-09 09:15:05.845+08	92d06569-3e06-4ceb-91e5-d28589632145	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f56c8027-8dd3-412f-956f-21ad3082f2ea	1	2018-01-08 17:19:40.376+08	2018-03-12 16:27:46.275+08	1f3f14a2-a6d4-44a5-859b-3406794e7b37	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
06b640bf-bd95-419d-8ca9-a5cabe7f1060	1	2018-01-23 14:57:48.745+08	2018-03-23 16:36:53.122+08	37c046eb-9a0e-49b0-95fb-f0128338f381	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
71babe9d-868f-4e77-ab53-c83cae3de9d9	1	2018-01-23 15:00:11.832+08	2018-03-23 16:38:52.153+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8db063a3-b808-4355-bcdd-82afe11c5dbc	1	2018-01-08 08:03:31.843+08	2018-03-28 16:49:27.06+08	684a2261-481c-4504-9f4b-665baf97aae6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
70a8ddba-e9cc-4b23-afef-f6f751a0181c	1	2017-11-25 11:53:42.33+08	2018-03-28 23:08:00.226+08	6aa982a5-d7a3-48ee-b1dc-afe4686ce796	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ba54a277-84a9-4908-8137-33a4a0c12281	1	2017-11-28 16:55:26.341+08	2017-11-28 16:55:26.341+08	fe65a1cd-2040-403c-bb6f-529d4063bc45	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d28e2d95-3e15-4c82-a89e-fc92b24eeb16	1	2017-11-29 06:20:41.894+08	2017-11-29 06:20:41.894+08	217607ad-e8e6-4940-91ff-dc4d831cccbc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45750a64-368f-422d-b2b2-cf71d63aee33	1	2017-11-29 09:23:59.554+08	2017-11-29 09:23:59.554+08	04cb319d-9e45-4534-8be6-5f1f4aef7740	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ae393b36-8ca0-4235-8eea-478dd008d7b8	1	2017-11-29 11:48:43.621+08	2017-11-29 11:48:43.621+08	d7912272-424d-4546-a3c1-43a24365dde0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ce1060ac-eb0a-43d0-85c7-7e63523b057f	1	2017-11-29 11:49:00.645+08	2017-11-29 11:49:00.645+08	91372b00-3bf7-4eb0-9495-ad544dfb04ca	9a1540b6-fea8-4bc0-8090-296b05f87c4a
58804dd8-5a61-42a0-9ca5-a9ad436b163a	1	2017-11-29 11:49:22.207+08	2017-11-29 11:49:22.207+08	0aae766a-5d82-479a-bd71-7eb1e0e4e20f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
274e14b3-fb65-4b24-8a1e-104a29ca88af	1	2017-11-29 11:49:30.505+08	2017-11-29 11:49:30.505+08	ac32d002-0463-4bc7-a307-86236e6307a7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d999e924-2f01-4d79-9c09-be9e50d4d94b	1	2017-11-29 15:24:41.548+08	2017-11-29 15:24:41.548+08	16ca7eed-6c64-4c4b-a495-6c5f785b86cd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
93c8f248-e1bb-40d5-8f58-7008e4f6706b	1	2017-11-29 15:35:17.596+08	2017-11-29 15:35:17.596+08	3462227d-e989-421c-9f48-c0ae7a573b78	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fb241343-d509-4147-a2b9-94ebe362c90b	1	2017-11-29 15:43:10.241+08	2017-11-29 15:43:10.241+08	6bd546bc-55b0-4ee4-8b58-34feec8cdb6c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6f71d673-6cb0-435d-8813-4bae2641569e	1	2017-11-29 15:47:20.475+08	2017-11-29 15:47:20.475+08	65f4e736-8261-40cc-b3b8-948ab0e4252e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
768a6d53-6450-45ee-9c11-e9a943a1f0b5	1	2017-11-29 15:51:55.329+08	2017-11-29 15:51:55.329+08	e015d9d3-542e-4d54-80c6-39db4ba20877	9a1540b6-fea8-4bc0-8090-296b05f87c4a
53e68c57-c31b-42ce-ad23-1662e9824e46	1	2017-11-29 15:56:44.947+08	2017-11-29 15:56:44.947+08	24b365fd-4e6e-4800-ad48-d3f082c9b2b8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
61ab412b-58c2-4f61-878d-52a0ac420011	1	2017-11-30 13:55:54.578+08	2017-11-30 13:55:54.578+08	93f84dd4-087b-46ef-bdda-9db4adfdb16b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1c92852a-e4b2-4ce4-824b-123f7fe284de	1	2017-11-30 15:01:46.31+08	2017-11-30 15:01:46.31+08	345d6324-7330-4d26-a786-a6823849f483	c3feea31-4449-46fb-a1dc-2214d73c3935
d8cb1d69-e11d-452a-b054-21e315f403bb	1	2017-11-30 15:14:59.453+08	2017-11-30 15:14:59.453+08	40b8c657-2644-4ce2-b490-cf61523a4012	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1494ec33-f0e1-497e-8b34-1b50f00b2903	1	2017-11-30 15:18:38.813+08	2017-11-30 15:18:38.813+08	e889420f-f8d0-4e0d-aab2-1f2f965e75bb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1d61610c-7715-4c72-9273-2a0eecae239c	1	2017-11-30 15:25:27.897+08	2017-11-30 15:25:27.897+08	f5c42818-e09f-4cb7-b7cb-63b18e8829a9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
573ebd83-8539-4533-9c4a-8b05403e6817	1	2017-12-01 09:59:04.593+08	2017-12-01 09:59:04.593+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b98aec75-4636-4312-ba9b-06433a59ae92	1	2018-01-08 12:02:17.335+08	2018-01-08 12:02:17.335+08	b1b251a9-2555-415d-996f-88df44f4df3c	0656e39e-ad05-4573-8a05-3c6f5dd01785
cac36e98-e9ce-47ef-8d79-ede8b72a1d28	1	2018-01-08 12:02:17.337+08	2018-01-08 12:02:17.337+08	b1b251a9-2555-415d-996f-88df44f4df3c	fcfced24-ec69-4898-b965-a6fcc3fda47c
79718b5e-8dd9-4ae7-b11e-c17173b4793d	1	2018-09-11 14:37:10.395+08	2018-09-11 14:37:10.395+08	098ca922-fd35-4605-abc8-f65640f8f879	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6d7ae59b-52da-43e9-8888-fa8068f45ee7	1	2018-01-08 15:25:13.476+08	2018-01-08 15:25:13.476+08	4866de4e-56ad-435f-a21b-0f2b00011e12	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eb7cdd9e-1a3e-46bb-b17d-4af8009f58c5	2	2018-01-08 15:25:13.479+08	2018-03-12 15:11:31.372+08	4866de4e-56ad-435f-a21b-0f2b00011e12	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
21226244-5465-439b-9ec6-7facf0f96d67	1	2017-11-29 18:00:44.752+08	2018-03-16 10:00:15.848+08	bd742efe-04d8-4e90-9799-dd3830baf3ca	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c43bc2c6-bb86-4b96-912d-989da5e84a08	1	2017-11-29 17:57:56.255+08	2018-03-16 10:00:23.123+08	2420aadc-c220-4ce6-bfe9-c21d79ce827f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
41a2d44b-73a6-477f-af22-b0275ba0ab7a	1	2017-12-01 15:00:04.224+08	2017-12-01 15:00:04.224+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	9a1540b6-fea8-4bc0-8090-296b05f87c4a
680fcf75-2aab-47c5-99da-5fa692c9e2d0	1	2017-12-01 15:05:58.351+08	2017-12-01 15:05:58.351+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
12b9717b-35bd-439a-bb17-2733b58ad3b7	1	2017-12-04 12:57:26.171+08	2017-12-04 12:57:26.171+08	f5d141ad-ea96-4398-8712-2a802af988f8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b8a87627-8374-4059-bf7c-33d7ab066bf6	1	2017-12-04 13:47:01.136+08	2017-12-04 13:47:01.136+08	e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	9a1540b6-fea8-4bc0-8090-296b05f87c4a
105a2dd0-4901-4b59-aac0-5610876a7fd8	1	2017-12-04 14:33:34.378+08	2017-12-04 14:33:34.378+08	409f2510-dd44-4990-b530-096bf2bcb592	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f307bfc4-068e-472e-9ac2-e384185a2575	1	2017-12-05 10:50:36.376+08	2017-12-05 10:50:36.376+08	b0a937d5-432e-4a49-b044-e4b66d649f52	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a964c6c9-365f-4c63-b62b-cdb064a34695	1	2018-09-11 15:57:59.804+08	2018-09-11 15:57:59.804+08	00e107aa-a84e-4014-98e7-f0aa931b22ae	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e2e6e717-5b3d-49d1-b3aa-89a6989840a8	1	2017-11-29 17:55:29.409+08	2018-03-16 10:00:32.85+08	823921c0-40e3-46c6-809c-804adcf828ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3c11e69c-226b-499b-92d3-e157f8767c7a	1	2017-12-06 10:37:27.475+08	2017-12-06 10:37:27.475+08	6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	9a1540b6-fea8-4bc0-8090-296b05f87c4a
927ba5cb-747d-4cd7-8e17-63cef84ba3f4	1	2017-12-06 12:00:43.624+08	2017-12-06 12:00:43.624+08	b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2106de0f-be01-4d02-8193-e5937a85bf6d	1	2017-12-06 14:12:59.648+08	2017-12-06 14:12:59.648+08	21d99b83-6a52-4465-90c4-125d8330e1c1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c02aab36-aa63-44cd-94d1-75ef3f190771	1	2017-11-29 17:52:19.028+08	2018-03-16 10:00:41.018+08	cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
92890ffa-93a4-4ae2-b4d0-8cf778724f5e	1	2017-11-29 17:49:21.399+08	2018-03-16 10:00:51.339+08	97463615-eb6e-4836-86a1-a282e935ed5d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8c05ad44-f5cf-4459-96bb-2a15d9a21bac	1	2017-11-29 17:46:58.802+08	2018-03-16 10:00:59.764+08	6629f27c-b28d-400b-9355-71e81a910b2b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d5fcc72b-859b-490b-b112-4d7025ef4ae8	1	2017-11-29 17:43:55.663+08	2018-03-16 10:01:06.217+08	55be82a9-bf1f-4e1d-bca3-d76fc60beca3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1ffa653d-c6c7-4dea-81d1-c794e428e2d3	1	2017-11-29 17:40:19.261+08	2018-03-16 10:01:19.429+08	5dcdefa3-da3c-4745-828c-d97fae30d82d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2f5fb5c5-0ef5-4557-a585-dd622f2b10b8	1	2017-11-29 17:37:50.905+08	2018-03-16 10:01:26.058+08	6e9cc5a0-a0ab-49f5-bf77-13164ed09055	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
94c168e2-c0e7-4294-b4c2-d919008c1d10	1	2017-11-29 17:32:42.143+08	2018-03-16 10:01:32.511+08	5ce1bb8e-5512-48aa-9842-c5ea7754f340	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5a345bee-327b-4873-b40c-d87f79a605fb	1	2017-11-29 16:58:58.19+08	2018-03-16 10:01:38.965+08	b3014b29-7547-4c85-a147-7ab37d6c328f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ae25354c-f866-42d2-bd43-9ec059f2c260	1	2018-01-08 08:30:38.759+08	2018-03-28 23:15:06.359+08	8e812d09-7b95-4c07-ad74-d4c66104e7a7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d77c5aa7-cc69-4efb-9360-d8c00f1e6b6c	1	2018-01-08 08:17:08.566+08	2018-03-28 23:17:09.78+08	223ac440-c7b0-4005-8144-f33ce926d9bf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a0737f04-cdba-41ff-8879-1145f93cc280	1	2017-12-06 15:17:54.536+08	2017-12-06 15:17:54.536+08	aa86893b-e991-4c57-94a7-b29e7349fe50	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4ba2d703-2e5c-466e-8cc8-04bc992eb93c	1	2018-08-24 09:09:28.319+08	2018-08-24 09:09:28.319+08	bbcd2556-3714-4360-80d1-af1f8be94404	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2c2b9e64-45cb-4df2-b0eb-aa6968c9ee08	1	2018-09-11 15:50:20.32+08	2018-09-11 15:50:20.32+08	1b53fdfb-8040-4fff-a045-a0bd3ac61881	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2d72e310-41e8-48b3-8589-e1fdc02234a1	1	2018-10-16 11:55:50.854+08	2018-10-16 11:55:50.854+08	27503c42-1dec-4321-ad45-eab67190afb5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
59c6964a-3590-4ec3-8c18-9f58d2583cb9	1	2018-11-02 17:11:56.249+08	2018-11-03 10:22:40.624+08	24946992-8d23-4862-ab23-0844e246fb46	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f14c354e-4160-4dea-a3c8-9ad3129d817c	1	2018-01-08 13:36:45.748+08	2018-01-08 13:36:45.748+08	a8add874-7ace-4c3b-a044-8d6da02a9257	fcfced24-ec69-4898-b965-a6fcc3fda47c
7bf32190-691e-4aa0-9b58-c4768a6993c8	1	2018-01-08 13:36:45.752+08	2018-01-08 13:36:45.752+08	a8add874-7ace-4c3b-a044-8d6da02a9257	0656e39e-ad05-4573-8a05-3c6f5dd01785
10cd3331-634c-424d-bbbd-8722d7b57780	1	2018-01-08 15:50:34.799+08	2018-01-08 15:50:34.799+08	72fb9e20-7c7b-4ccb-9da1-d8600223beca	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a4327012-21f7-4f4c-8a08-aa84df8df368	1	2018-01-08 16:50:49.864+08	2018-01-08 16:50:49.864+08	64d50498-d37a-4f4a-99f8-2268e82a035e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
69cf7444-fdc6-4f98-b3e0-2d11f4125b00	1	2018-11-12 16:41:13.993+08	2018-11-12 16:44:19.167+08	540e29ab-87bd-4d64-9f6c-c9af1db5bbf4	7273694e-484e-4f59-b7d6-03032fb343bb
30367b45-ab92-4ddf-ba29-1625b347c30a	1	2018-12-03 15:03:56.957+08	2018-12-03 16:27:39.244+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ad92b98f-514c-42f9-b387-3e963cf9410c	1	2019-01-14 16:35:28.384+08	2019-01-14 16:35:28.384+08	e996ef32-944e-448f-9370-862fd5ed719d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9cde36af-7898-4aa0-b0cf-3ae8a9d1222e	1	2018-12-18 16:53:42.848+08	2018-12-18 16:53:42.848+08	99685e46-230b-43e6-a98c-f7f472af999f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1de94af4-bdba-4d78-9427-208c421a9052	1	2018-01-11 10:36:37.368+08	2018-01-11 10:36:37.368+08	58647986-2640-4318-902a-5ee7d04150ef	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fbad3c06-b02a-4f8a-b1c7-7da77c5037ee	1	2018-01-12 14:32:00.3+08	2018-01-12 14:32:00.3+08	7d457a8b-5537-4186-bd68-df0c5868ef7e	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
4147f31c-2a52-43de-9601-20f4142d96d8	1	2018-01-16 16:49:43.482+08	2018-01-16 16:49:43.482+08	2dfa1f51-0e5a-4e11-a86d-f8487d602ebf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
06ff4979-ef6c-42b8-bda5-74c797384d80	1	2018-01-17 13:45:21.836+08	2018-01-17 13:45:21.836+08	0df6f7cc-b408-4936-8fee-d5344c2d8ae9	93f2d601-f46f-4361-ae92-431401bd869d
ae984788-d3eb-48a5-b115-a1a9f0888473	1	2018-12-28 11:30:35.246+08	2018-12-28 11:30:35.246+08	10d33bab-421f-428f-b450-b5ee4b1c3465	9a1540b6-fea8-4bc0-8090-296b05f87c4a
790b37a9-d105-48fd-86ae-edc501b75246	1	2019-01-19 17:15:44.537+08	2019-01-19 17:15:44.537+08	0a341896-3c5d-4e60-af19-fe5f645c6967	d4f271b6-567a-4880-beb0-161b33ac2094
768b5117-e123-4f47-adb9-eaf62dbf3d6c	1	2019-01-30 11:05:38.186+08	2019-01-30 11:05:38.186+08	9d3d4083-57c0-4067-b3e6-f9ebc2a7a6d5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d3aeb7df-fcd7-4fba-b003-6c0ee98bc33a	1	2018-01-23 10:17:42.568+08	2018-01-23 10:17:42.568+08	08ca737d-d94b-46f2-bb48-33327b7fc0eb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f000b352-038c-4802-b9bd-4f10773f351a	1	2018-01-23 17:19:51.366+08	2018-01-23 17:19:51.366+08	ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8489e217-3c86-459f-9fbf-33d6efcdc58e	1	2019-02-25 13:32:42.879+08	2019-02-25 13:32:42.879+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f7df5401-dc58-4a7b-9b2e-0ffa66914834	1	2018-01-24 11:19:02.104+08	2018-01-24 11:19:02.104+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8f911a46-bbe2-4a38-9447-568a060116d6	1	2018-01-24 11:19:06.36+08	2018-01-24 11:19:06.36+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	9a1540b6-fea8-4bc0-8090-296b05f87c4a
52b9b684-34b1-433c-b728-80e91cc5a76d	1	2018-01-24 11:19:10.109+08	2018-01-24 11:19:10.109+08	76288807-186e-4444-a1ce-6be599aacfd2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ce18c57f-a082-4417-a65f-4aacc7f5e09b	1	2018-01-24 11:26:28.341+08	2018-01-24 11:26:28.341+08	780de52c-47eb-46cb-b77b-3d919bae5ffb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c04952c0-e6f4-419d-abd6-134b7e5eb1e7	1	2018-01-23 15:06:34.917+08	2018-03-06 15:58:48.198+08	eee64353-8241-4a69-a2ed-5e42bbf4450c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2b29d5d5-623e-4bdc-98f9-69123ff44f3a	2	2018-01-23 10:17:42.564+08	2018-03-09 09:52:07.358+08	08ca737d-d94b-46f2-bb48-33327b7fc0eb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fbcaf825-7175-4d83-8e74-120e4cf95efa	1	2018-01-08 17:35:44.853+08	2018-03-12 16:26:49.835+08	157090bc-b53c-4ae3-94fc-4b3804ed6433	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
46b4f9e9-23e4-4818-a438-dc1e704d09eb	1	2018-01-08 17:33:37.627+08	2018-03-12 16:27:07.267+08	448efd11-ceec-4f64-93a0-ad7133e38b8d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d685f8ef-8318-418b-990b-5c0b7aaa7e2c	1	2018-01-08 19:28:51.345+08	2018-03-23 16:32:23.224+08	2dead818-122a-42d9-8f52-3aa8d92ab0c3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8e298dad-1062-4012-8fb3-1b05adb415d3	1	2018-01-23 14:49:59.709+08	2018-03-23 16:34:36.555+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
11d6a8b0-4da2-472b-9ef4-85df5e9a547f	1	2018-01-24 11:30:26.757+08	2018-03-23 16:40:47.542+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6cc60b33-5d89-453b-ba31-d38482a9ce89	1	2018-01-24 11:32:24.983+08	2018-03-23 16:41:06.544+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
673c43a4-9317-4649-b5b8-56a122ad4423	2	2018-01-16 16:49:43.486+08	2018-03-27 10:52:50.304+08	2dfa1f51-0e5a-4e11-a86d-f8487d602ebf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6e710f3b-5d74-43d8-aa5b-89613410ba7c	2	2018-01-11 10:36:37.372+08	2018-03-28 16:49:18.681+08	58647986-2640-4318-902a-5ee7d04150ef	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e43de4ec-78b6-42ba-90bb-387eb544283a	2	2018-01-08 15:50:34.798+08	2018-03-28 23:08:15.162+08	72fb9e20-7c7b-4ccb-9da1-d8600223beca	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0721f93b-cc19-4dd7-96e6-4794005f481c	1	2018-01-08 08:30:40.831+08	2018-03-28 23:12:27.924+08	9bdf8d5c-e571-4dd4-9614-0099745b0a73	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a0ac7cfb-2fc0-4e5e-ac37-37a5e1effe3e	1	2018-01-08 08:30:40.25+08	2018-03-28 23:13:18.084+08	5c18688a-731b-40d0-b4dd-4ba002026bb3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3d498b9b-a878-4a48-8e88-8991154f9267	1	2018-01-08 08:30:39.673+08	2018-03-28 23:14:14.345+08	3c8c9002-2d60-43f0-9a2c-52daa53cab54	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9cdf4777-a545-4674-ba15-51ab000ae7d1	1	2018-01-08 08:30:38.152+08	2018-03-28 23:16:05.375+08	e3713c95-6aa3-4a2e-ad89-579a16cb1a03	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5a23459f-6ede-47d4-ae3d-8fe9cf62792d	1	2018-01-08 18:35:09.098+08	2018-03-29 11:39:25.969+08	29aa5799-e271-4913-8e21-04edddaa5be1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
20a77cce-e455-4a31-afd7-6f10510aa0cb	1	2018-01-09 14:14:58.428+08	2018-03-29 18:00:04.473+08	85f5b6fd-92cc-4d22-9dff-952c59003e3f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
93a423e2-42b3-4b7d-8854-842293efc6eb	1	2018-01-09 14:07:31.168+08	2018-03-29 18:02:18.776+08	0beb606c-f306-4476-8526-31646c8107e5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
93019638-64f8-4245-bdb4-0ce42493ad68	1	2017-12-07 10:22:04.892+08	2017-12-07 10:22:04.892+08	7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3fd1641e-ba73-46b1-97d8-45877841ebb4	1	2017-12-07 11:43:58.695+08	2017-12-07 11:43:58.695+08	183c2cd5-5a53-4985-80aa-33a6ce2f82d4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c96da240-7b15-4c50-97a4-8a01116bf267	1	2017-12-07 14:20:25.159+08	2017-12-07 14:20:25.159+08	4d5a3f58-0eda-4443-9dcc-c64bb1785d88	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f9a91641-6ecd-4bc6-a379-c525fd61df56	1	2017-12-07 15:20:39.538+08	2017-12-07 15:20:39.538+08	5fcd559a-c3dc-4c38-acde-b4b1749b4ab3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7a2eaf7b-ff5c-4b89-b57c-badd6f4043d0	1	2017-12-08 09:55:09.538+08	2017-12-08 09:55:09.538+08	ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5e00aef4-c162-4abe-a4ba-e73bfb991c9d	1	2017-12-08 14:40:29.021+08	2017-12-08 14:40:29.021+08	d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4f3234e1-d6ac-4927-8224-469d14ab9a0a	1	2017-12-08 14:49:12.893+08	2017-12-08 14:49:12.893+08	0fc23377-9f3d-4511-ab1b-8b8df0259d2f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bd0e6c4c-edb9-4c6e-b543-ed83223b0fc7	1	2017-12-08 14:54:02.54+08	2017-12-08 14:54:02.54+08	14bab7df-524d-4a64-a618-23d4ebcc9b5e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
60baad2a-7ec0-4b24-8c76-5bed2e2b8485	1	2017-12-08 14:57:54.014+08	2017-12-08 14:57:54.014+08	efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
15d630ab-45de-4087-9cb9-4a3998b52dfb	1	2017-12-08 15:02:49.624+08	2017-12-08 15:02:49.624+08	4255e295-7830-45af-ab7c-44fee1668641	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1580ee6a-cc2a-4abf-8c6d-08b3a85e814c	1	2017-12-08 15:09:50.785+08	2017-12-08 15:09:50.785+08	ceed540f-d7a3-48bc-b8d0-e861e21499a4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d2c71261-eb6c-4d2d-ad95-4078c8cbeaee	1	2017-12-08 15:16:37.887+08	2017-12-08 15:16:37.887+08	31cb6c0b-e369-46b0-9be4-1de3737503fc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f5479f61-a20e-4b8b-a4c6-6f7a7dab7c84	1	2017-12-08 15:23:44.911+08	2017-12-08 15:23:44.911+08	ea797ffb-87b5-4e0a-8da4-7f627c347b2f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
75f3270e-7bc7-4e14-8fbe-2f5685daf59b	1	2017-12-08 15:30:34.578+08	2017-12-08 15:30:34.578+08	8583cb29-4726-4532-9530-a5b338d3483c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8d7c54ed-ecd8-41ca-b7ee-4196ff1dea3e	1	2017-12-08 15:40:02.612+08	2017-12-08 15:40:02.612+08	dc5bdee9-14f3-4040-ad1c-faf008358890	9a1540b6-fea8-4bc0-8090-296b05f87c4a
578d0261-a4ad-495a-94a4-8c4e72ade2aa	1	2017-12-11 15:27:02.998+08	2017-12-11 15:27:02.998+08	ef629030-d691-43fa-b6b4-b1465e60dace	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ed327a11-684a-4b1f-b9e0-e8639c8fff33	1	2017-12-12 10:23:59.551+08	2017-12-12 10:23:59.551+08	24064f03-7c7e-493b-99f2-c926717d28fc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b096c0ed-860a-4bbf-8644-ad85dba1d41e	1	2017-12-12 11:55:07.943+08	2017-12-12 11:55:07.943+08	405df805-9088-45a7-b4b2-763299e0c57b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9be10a92-e718-4210-8afe-aec7ee423e5a	1	2017-12-12 14:08:56.827+08	2017-12-12 14:08:56.827+08	2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0f3fcf12-23aa-4be6-a8cd-a7a5112f4a4c	1	2017-12-12 14:41:03.872+08	2017-12-12 14:41:03.872+08	10018134-99f1-486e-8071-dc652f44d152	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b6b2d1d5-264c-4c8b-b508-68431ebc7a8c	1	2017-12-13 13:09:16.237+08	2017-12-13 13:09:16.237+08	5cd62211-11dd-4deb-83bf-2873ae7dd42f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
aa1bc88f-7dc8-46b6-bb24-c1acfc4bd4d6	1	2017-12-13 13:21:56.919+08	2017-12-13 13:21:56.919+08	b475bf8f-00a0-457f-ad96-95b187dba62f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
27e905b4-22e6-473c-bf18-8d3432dbff64	1	2017-12-13 13:27:21.367+08	2017-12-13 13:27:21.367+08	63b7958b-9b1b-49ca-b01c-62ebe4df6376	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2e6a94ec-808d-4cd5-9a31-53dfd946e157	1	2017-12-13 13:40:01.324+08	2017-12-13 13:40:01.324+08	41da65aa-dd1b-4a8f-8758-13f624e45dad	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dc9efb66-a50d-4c10-b3f5-54700dec4c11	1	2017-12-13 13:46:22.553+08	2017-12-13 13:46:22.553+08	16f7e5ff-fb7a-4aa6-a701-9776f7638689	9a1540b6-fea8-4bc0-8090-296b05f87c4a
81851968-bb35-43ab-a0fd-c9f922484d6b	1	2017-12-19 17:52:03.688+08	2018-03-14 00:20:36.812+08	235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1a285064-b74f-4e0e-8446-f36206159b06	1	2017-12-13 14:13:06.344+08	2017-12-13 14:13:06.344+08	34424e2a-ca3d-47c4-8275-532ca1986c8c	31f274cf-4345-4b4e-adbc-e7b05abf7453
4cd4b5bf-e373-4598-92ad-e729fc9fccd1	2	2017-12-13 14:13:06.347+08	2017-12-13 14:13:06.347+08	34424e2a-ca3d-47c4-8275-532ca1986c8c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8f688434-d219-45e8-b902-e02cef3958cb	1	2017-12-14 14:22:34.588+08	2017-12-14 14:22:34.588+08	61db6668-b790-47e8-9429-55bfa4f98b90	9a1540b6-fea8-4bc0-8090-296b05f87c4a
037a040a-ffda-4a16-ae2f-0b156eeaf375	1	2017-12-20 10:35:00.776+08	2017-12-20 10:35:00.776+08	1ac45c30-affc-479b-8ad6-3d63d1fa33f3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2a43bd9c-32ec-47a3-91ec-bf2d150bf048	1	2017-12-14 16:49:47.947+08	2017-12-14 16:49:47.947+08	af1cd7e8-52e1-4411-9c9a-20bc82a2786d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9f3ab602-8c33-4b85-bc82-6f28cc991a1f	1	2017-12-14 16:55:58.277+08	2017-12-14 16:55:58.277+08	a30d283e-1af2-4531-ab6b-be1186799eea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ee390c37-e447-4248-9449-1c05e898295f	1	2017-12-20 13:51:02.577+08	2017-12-20 13:51:02.577+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cebb317f-fa5b-4ea3-88f7-f395a949ecad	1	2017-12-14 20:28:00.584+08	2017-12-14 20:32:16.833+08	7776a9dc-8e14-417c-a5fe-4b1dd1c869d7	31f274cf-4345-4b4e-adbc-e7b05abf7453
6f410018-5357-4499-876e-bfaa7f87a6b1	1	2017-12-18 10:57:40.211+08	2017-12-18 10:57:40.211+08	4d48086d-804a-426d-9867-0e87efdc74fe	9a1540b6-fea8-4bc0-8090-296b05f87c4a
22c54ed0-f2e1-45be-a8db-e2b05a6c5141	1	2017-12-18 17:23:33.728+08	2017-12-18 17:23:33.728+08	701ab719-e85b-4428-ad59-1b7adff31c56	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7acc67cd-6f9c-4a4d-b25c-7c7c5285754b	1	2017-12-19 14:21:59.003+08	2017-12-19 14:21:59.003+08	0eb7e920-0359-4b8b-b604-14bc1136e8f5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7a857685-2f05-4568-83cf-742b00cc4268	1	2017-12-20 13:59:41.257+08	2017-12-20 13:59:41.257+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cd9de59e-d636-4334-bfb0-d4bfdf7d0815	1	2017-12-20 14:03:22.685+08	2017-12-20 14:03:22.685+08	676795c3-0d71-441d-aa0e-62b82dff8193	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf4a1774-7235-439d-be10-5c18236dea1e	1	2017-12-20 14:30:07.206+08	2017-12-20 14:30:07.206+08	14f67669-6cec-42c0-a7ca-4b60950ec7b5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b04f28f1-c62f-444a-9171-3bca433956ce	1	2017-12-20 15:25:01.225+08	2017-12-20 15:25:01.225+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f82bd316-9158-47bc-9023-7fbade31d7de	1	2017-12-20 15:39:19.349+08	2017-12-20 15:39:19.349+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a7a4d4cf-2511-4248-b6f3-233c55453827	1	2017-12-20 15:39:26.994+08	2017-12-20 15:39:26.994+08	cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7
50e8fea1-6428-4ded-be3b-647ef512c5e2	1	2017-12-20 09:11:42.444+08	2018-03-14 00:20:51.076+08	6039a6d8-af54-411e-a520-451b20b6d089	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fbdf2755-cb94-48e6-823f-a7a4b9cd9355	1	2018-08-24 15:43:38.411+08	2018-08-24 15:43:38.411+08	a5da9800-2b00-4701-8793-3aaad3e140f6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7d57ef52-60e4-4f3f-92d4-a098de6b3c7f	1	2017-12-20 15:44:31.147+08	2017-12-20 15:44:31.147+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f15a40b2-b1ac-4035-9cf1-5c48fe64862c	1	2018-01-05 16:29:05.825+08	2018-01-05 16:29:05.825+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cd48b5aa-3933-4fab-a764-bfdb95fa86bf	1	2018-01-05 18:21:38.318+08	2018-01-05 18:21:38.318+08	42b1e83a-cc6f-4051-8187-75dab10af0b1	cf3cc1ef-8614-4d32-ba45-2ac5d387379b
57a25025-b2f1-4e40-8fc2-52309d5e99c3	1	2018-01-08 14:19:21.24+08	2018-01-08 14:19:21.24+08	0d7661f6-5ce5-490a-9520-ad56ba769d79	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fe968b15-7e4a-4288-84c2-dbffdb08427a	2	2018-01-08 16:15:24.168+08	2018-01-08 16:15:24.168+08	45aee45b-bc26-4ac7-a8ed-3dcbe187b2de	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3cee7abf-90d6-426b-b864-a3bf42ecee67	1	2018-01-08 16:15:24.17+08	2018-01-08 16:15:24.17+08	45aee45b-bc26-4ac7-a8ed-3dcbe187b2de	9a1540b6-fea8-4bc0-8090-296b05f87c4a
563d9d57-4693-405c-a151-3104436e634c	2	2018-08-24 15:26:31.706+08	2018-08-24 15:36:29.6+08	85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
914fd203-e2e0-4db3-a311-773637fc7b59	1	2018-01-08 16:27:59.729+08	2018-01-08 16:27:59.729+08	d3ae39b6-419c-4d57-a353-69768f82908a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e50861fc-edb7-44be-90fe-99332d32beb7	1	2018-01-08 16:54:47.93+08	2018-01-08 16:54:47.93+08	f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
684cc47b-0907-403f-b4f3-1f1fb9980677	1	2018-01-08 16:54:48.911+08	2018-01-08 16:54:48.911+08	de0bfd26-fb8e-4f9d-8e0a-0119650952c6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0b31dbb2-11b4-4343-817f-1a16f215d86e	1	2018-01-08 17:34:18.698+08	2018-01-08 17:34:18.698+08	5f908b85-0f3a-48c0-bc83-8e191731a754	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dd1657fc-d96a-4700-840d-c7af9da9dda5	1	2018-01-08 17:44:21.349+08	2018-01-08 17:44:21.349+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7f1dd7af-ebee-486f-9ead-aed01fb9cf19	1	2018-09-13 17:12:19.012+08	2018-09-13 17:12:19.012+08	51c68d6c-029d-4a88-8802-335e6e6ddf6c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0f2e2fa8-e41b-4c8d-acaf-7a437bd18025	1	2018-01-08 18:26:58.116+08	2018-01-08 18:26:58.116+08	0dcb57e3-244f-44d3-8f9c-a50fc74481a8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
13905484-5d79-4146-96b5-a78aa427fcc6	1	2018-01-09 10:35:25.635+08	2018-01-09 10:35:25.635+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	9c90124d-0230-4da1-be95-61ec1f25cd7a
22009d34-ff60-4346-ad0b-d918f374a221	1	2018-01-09 15:01:35.188+08	2018-01-09 15:01:35.188+08	db974c14-3d61-403d-b847-e0523ad53964	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c857c441-8c1a-4156-84c7-a647e3f7cafb	1	2018-01-11 11:13:31.327+08	2018-01-11 11:13:31.327+08	d53887ba-c67a-4b45-a1ed-1a61fbde6c4c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5cec0d32-95e1-40e2-a0a7-67fadc9b7383	1	2018-01-16 09:44:42.411+08	2018-01-16 09:44:42.411+08	c02185df-1224-4e63-aab4-3d284c8bb526	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3254cbda-a637-4b1f-b967-7e683097a03c	1	2018-01-16 10:33:58.389+08	2018-01-16 10:33:58.389+08	e47f8159-ee4b-45c0-b827-30b69d0328d8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
13bc605d-4733-4db8-967d-52c227283bd0	1	2018-01-16 10:33:59.644+08	2018-01-16 10:33:59.644+08	ff38a597-0318-47bb-a647-5ad78dd2dca8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3a2334c7-6f52-4204-a8a9-9784890e5a18	1	2018-01-16 10:34:00.721+08	2018-01-16 10:34:00.721+08	addad535-5578-4010-9d74-dbeab2b9e9eb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e7458024-5760-41c0-8a52-3b84fbb0abaa	2	2018-09-13 17:12:19.017+08	2018-09-13 17:12:19.017+08	51c68d6c-029d-4a88-8802-335e6e6ddf6c	10ee8413-1dfd-465b-9dfe-fc1a496a7fa5
b7b5df77-bbf5-4850-a327-7ef397695976	1	2018-09-13 17:17:20.64+08	2018-09-13 17:17:20.64+08	a1d2070f-926a-42a1-8bf8-a39b89eb4c92	10ee8413-1dfd-465b-9dfe-fc1a496a7fa5
8f0908e3-40a5-4b67-8bec-6e317871a94e	1	2018-01-22 17:01:19.501+08	2018-01-22 17:01:19.501+08	b914a394-bbd8-4ff4-857e-02a2d8eb6d25	3dfadb0e-7608-49e1-aa43-24f7442b424a
99aef2b1-befb-42c6-9b81-9ba05a5ef139	1	2018-01-22 17:01:19.498+08	2018-01-22 17:10:01.726+08	b914a394-bbd8-4ff4-857e-02a2d8eb6d25	3dfadb0e-7608-49e1-aa43-24f7442b424a
75425dc5-fcf1-43f4-bc13-848b5e95398e	1	2018-01-23 14:05:00.646+08	2018-01-23 14:05:00.646+08	3eb1b2e4-ba3a-4329-a821-33a7f5bec873	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f9895680-9637-43e0-bdd0-c150adacf551	1	2018-01-24 11:18:54.113+08	2018-01-24 11:18:54.113+08	11a0df92-8921-470b-af9c-d7593b8b1f78	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ce22b934-d5c0-406d-89f7-faf00663dc05	1	2018-01-23 10:22:18.301+08	2018-03-09 09:52:15.969+08	219cbb09-9c49-4167-846d-00a8bdfadb9a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3eb1dd8e-018d-4767-945c-9771b24fffcd	2	2018-01-08 17:44:21.346+08	2018-03-12 16:26:42.32+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
abe9e753-d8dc-4744-b605-e76a00cc4d06	2	2018-01-08 18:26:58.12+08	2018-03-14 00:16:59.921+08	0dcb57e3-244f-44d3-8f9c-a50fc74481a8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4117168c-01f4-4abd-a520-cd618a77957b	1	2018-01-08 19:23:48.681+08	2018-03-23 16:32:02.153+08	537cf41f-69a4-47de-81ee-63485ab8df1d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
56508426-48f6-4536-bf0c-71d92a66c933	1	2018-01-23 14:46:18.986+08	2018-03-23 16:33:07.061+08	90a2bc12-2214-43ff-9154-9b9212de2c10	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c1df54c0-e342-43de-9e78-d5d703748fc7	1	2018-01-23 14:46:19.182+08	2018-03-23 16:33:24.555+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
21122d09-b2bc-4b76-b38d-473767b1ebd0	1	2018-01-23 14:46:19.408+08	2018-03-23 16:33:44.949+08	5e7775c1-0766-436e-b701-b1102833b98d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
65e46736-aed4-4225-8017-5940e005a2a0	1	2018-01-23 14:46:19.613+08	2018-03-23 16:34:01.607+08	099c6283-519f-4946-aa9d-f0059a76b832	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2551687c-91fa-4545-869c-819ef1f78726	1	2018-01-23 14:53:15.171+08	2018-03-23 16:35:15.742+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6d05cb1a-e0cf-4c12-91b2-c6a2e260b0aa	1	2018-01-23 14:53:15.38+08	2018-03-23 16:35:45.648+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
197ed34d-9547-42fc-98b6-5693147ed4ca	1	2018-01-23 14:53:15.769+08	2018-03-23 16:36:04.279+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4a2e0b1d-a5ac-4fd4-bbe4-624746bb62d7	1	2018-01-23 14:53:15.968+08	2018-03-23 16:36:23.281+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ee2f9e0b-fda1-41ea-ab16-6b1d2bafbd18	2	2018-01-08 14:27:58.807+08	2018-03-27 16:45:06.478+08	0d7661f6-5ce5-490a-9520-ad56ba769d79	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ff1b877f-3711-444a-9f7e-ce0345695228	1	2018-01-08 13:46:38.347+08	2018-03-27 16:45:57.054+08	2b6f224d-770e-41bc-b28b-5afbe3b213c4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
df9037f3-8dce-4779-b0c8-1bce916ae954	2	2018-01-11 11:13:31.329+08	2018-03-28 16:48:50.423+08	d53887ba-c67a-4b45-a1ed-1a61fbde6c4c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0a59c44a-1c6e-41df-852a-4c8ae147bb2c	1	2018-01-05 18:09:59.823+08	2018-03-28 16:49:34.024+08	9e56c900-b85f-4abd-b53f-3162016875ad	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f59483d2-abe8-4d36-b982-2192e91aad16	1	2018-01-05 17:57:19.731+08	2018-03-28 16:49:41.341+08	0cbe0018-ac32-4dfd-ba20-7c6e9658a553	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
25ec78fa-7f89-4c56-8145-82ca10f3c478	1	2018-01-08 08:30:41.932+08	2018-03-28 23:10:05.979+08	44c42c98-a486-411a-8813-c6ba48aab00c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
15f1ad0b-d19d-4cb4-a970-7fa756d3531d	1	2018-01-08 08:30:41.364+08	2018-03-28 23:11:22.038+08	f90de97b-b6e8-417a-b628-7b8e4bb9e335	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2228b7c8-ddf7-4340-877d-e535750783b9	1	2017-12-20 15:48:48.777+08	2017-12-20 15:48:48.777+08	466241f9-ceea-4552-b9c6-114413124018	9a1540b6-fea8-4bc0-8090-296b05f87c4a
967080e3-98af-4159-b73b-83fbe1adc1ef	1	2018-01-05 16:29:20.577+08	2018-01-05 16:29:20.577+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9d9688a4-56c4-46fc-8cfe-f7bdb2abf8bb	1	2017-12-21 11:15:16.273+08	2017-12-21 11:15:16.273+08	7c1b8df9-4088-4cc7-b07b-3299d827d7d0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
47a783ba-cb5b-4939-b416-3fc9345cce28	1	2017-12-21 16:37:36.679+08	2017-12-21 16:37:36.679+08	6af0f3be-6cb5-43c8-a588-490e10fdf4b7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ec1cec29-b96c-45ed-bc2d-36cd2dc990db	1	2018-01-08 09:46:41.144+08	2018-01-08 09:46:41.144+08	078b521f-572a-48bb-b327-09f918ef1e92	fcfced24-ec69-4898-b965-a6fcc3fda47c
12e0e3ef-2263-40d2-9b29-6e796130a147	1	2018-01-08 10:24:01.153+08	2018-01-08 10:24:01.153+08	e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ac14ec8a-bec7-46a5-9434-50605169d7be	1	2018-01-08 10:24:02.004+08	2018-01-08 10:24:02.004+08	4253e350-b64f-4b81-b19b-bcd45c6181ad	9a1540b6-fea8-4bc0-8090-296b05f87c4a
89b0829e-cf41-4017-827f-b70b602fc33c	1	2018-01-08 10:24:02.577+08	2018-01-08 10:24:02.577+08	0eab3179-48cc-4e55-8ec9-b7516415aa75	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ee21c1d7-3c43-4cf6-ae0f-a037134f1851	1	2018-08-24 15:41:52.457+08	2018-08-24 15:41:52.457+08	4e3f8da9-5108-45ea-a042-dfab49718c5b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4763216c-0b7d-46d6-afa8-14beb251473c	1	2018-01-08 16:27:57.446+08	2018-01-08 16:27:57.446+08	f9331a24-582f-45b8-bea8-b919ffd48516	9a1540b6-fea8-4bc0-8090-296b05f87c4a
441659ff-1370-4415-8a6b-93255b902186	1	2018-01-08 17:03:45.948+08	2018-01-08 17:03:45.948+08	a54c400e-8b31-47ec-9820-550d04916f47	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b6991bd8-7da3-4eb2-ba43-907ea1ae054b	1	2018-08-24 15:55:16.961+08	2018-08-24 15:55:16.961+08	a5766cb2-27a1-4d0a-939b-ac6aa0871a81	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
64443ff3-fd39-4b61-9322-175d16adaad5	1	2017-12-28 20:13:20.336+08	2017-12-28 20:13:20.336+08	aa64719f-ac6f-463c-83c5-dcdbd25be81e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d97b73dd-c95d-48aa-9631-4e9242fa6d4a	1	2017-12-29 17:15:38.768+08	2017-12-29 17:15:38.768+08	4e281788-df68-4193-bbe0-9159eee1f24e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ccd8487f-a6c3-4906-80b8-55373af26c7c	1	2018-01-02 17:33:10.083+08	2018-01-02 17:33:10.083+08	608c11f3-91d9-4d92-9459-a4f7eb20bf1d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cac0b8ec-a645-475a-bcee-9ae7a8d570bc	1	2018-01-08 17:03:46.152+08	2018-01-08 17:03:46.152+08	933a027b-e620-4a6e-8340-d10c7aa29009	9a1540b6-fea8-4bc0-8090-296b05f87c4a
988ad232-d103-4cbe-a8fa-f7447da0cc47	1	2018-08-24 16:11:22.98+08	2018-08-24 16:11:22.98+08	6de7929d-736b-4c4e-a1c3-e7550a7b6d31	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
99cb3ad7-81d5-41da-8bd6-1ac995024668	1	2018-01-03 13:53:36.238+08	2018-01-03 13:53:36.238+08	46ad9444-1665-48d6-bb9a-37cee37d1604	9a1540b6-fea8-4bc0-8090-296b05f87c4a
602b8121-19a5-4082-a904-aa0ee4446ff6	2	2018-01-03 13:53:36.242+08	2018-01-03 13:53:36.242+08	46ad9444-1665-48d6-bb9a-37cee37d1604	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6c3b58fc-ffb5-4370-8878-ebe1ff3956b6	1	2018-08-24 16:11:23.702+08	2018-08-24 16:11:23.702+08	209249f3-7316-4e7d-a3bf-df78afc260eb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0ca97a38-3a05-434a-9fc6-90d00e83f7d1	1	2018-01-03 16:19:19.147+08	2018-01-03 16:19:19.147+08	4d523084-bf91-421f-bafc-f278a63c5541	9a1540b6-fea8-4bc0-8090-296b05f87c4a
638e72c4-6848-46e5-8105-4de93c390fe3	2	2018-01-03 23:06:41.724+08	2018-01-03 23:06:41.724+08	30519425-7bd8-440f-83ea-f9da4767faf9	3ee5b7e3-e7ba-49ff-86eb-2d6498f67116
4b8727cd-03c8-43f9-998d-bdf67fc5a979	2	2018-01-03 23:08:28.584+08	2018-01-03 23:08:28.584+08	34eeec21-d4e0-4716-a88e-42267e349980	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
2bd76fa8-aefd-4e77-a1cf-e5f65232555e	1	2018-01-08 19:23:06.703+08	2018-12-14 15:49:12.254+08	f55d7414-2db9-4c07-ad9b-34637318171e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fb39a5a4-ef13-46f2-af59-34b56c3f6e46	1	2018-01-04 11:56:59.877+08	2018-01-04 11:56:59.877+08	6a8343f7-8c07-4851-8924-f8d4f1f5ab78	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fdbdba4e-0427-4f25-8971-7b3ce5f817f3	1	2018-01-09 10:42:58.091+08	2018-01-09 10:42:58.091+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	74e413a0-dd33-474d-bd1f-b7f71885dff3
5d6297b1-c23b-4584-bb92-3c973d54d009	1	2018-01-16 10:21:41.703+08	2018-01-16 10:21:41.703+08	42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ceab8566-19c7-407c-8e29-a2f7b5abd5ae	2	2018-01-22 10:21:00.152+08	2018-01-22 10:21:00.152+08	0cffe018-1007-40ed-ac19-a399517129af	3d88a29a-ca10-482f-8643-4fd39d4b50e2
8c06f4a1-6f11-410b-9377-479f834ffc7e	2	2018-01-22 17:23:55.713+08	2018-01-22 17:23:55.713+08	0cffe018-1007-40ed-ac19-a399517129af	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
d7ef1dd4-a6c1-4505-a0d1-ce37cd4d09b7	1	2018-01-23 13:54:59.275+08	2018-01-23 13:54:59.275+08	70ed36c0-d58f-482d-8337-fafed8a2e6ac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a2e60556-d41e-450c-a30d-fcef21de8a6a	1	2018-01-24 11:05:24.803+08	2018-01-24 11:05:24.803+08	38b81b7d-bb3e-4885-aaea-6035faf20d1b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5c5ad0d1-1aed-43d8-bdf3-178b5ccc8db8	2	2017-12-29 17:15:38.771+08	2018-03-06 16:50:50.778+08	4e281788-df68-4193-bbe0-9159eee1f24e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
93343c0d-6372-4047-8668-1ffcd2061d4f	1	2018-01-04 12:11:30.179+08	2018-03-06 16:57:44.097+08	6c0d843c-169e-49b8-8dde-188699cc3077	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
53dff476-de0a-4f48-8cf2-68d3a110f884	1	2018-01-04 13:43:27.006+08	2018-03-06 17:33:24.853+08	e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ca6f3bdd-34c4-45e3-89bc-e26e10dafe40	1	2018-01-04 11:48:49.716+08	2018-03-06 17:40:04.077+08	d8860bee-374c-497a-a33a-258af59e3690	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
10d111ab-0eab-4d87-82e5-1bbbefb8d00b	1	2018-01-04 11:19:16.721+08	2018-03-06 17:40:27.003+08	10f69514-4a4b-4ecd-a318-f8bf0c81a965	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
83a57b71-e45c-4f38-b95d-210b993d67b1	1	2017-12-29 17:40:30.251+08	2018-03-07 10:15:48.875+08	e58ee78a-e499-483c-acc8-a42683d62149	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e7560d3b-9857-407b-a6ec-0b184dd34a22	1	2018-01-08 10:43:07.558+08	2018-03-09 09:15:25.763+08	b1c85f0b-c610-4243-83a4-3a1e87b411ad	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
51927eb9-21dd-42bf-9856-1496680e3524	1	2018-01-23 15:00:11.231+08	2018-03-23 16:37:22.111+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a40ea34c-f9f7-4672-b969-adec1dff887b	1	2018-01-23 15:00:12.508+08	2018-03-23 16:39:12.382+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8982fb04-33e0-4ee7-9bb0-7ff5fbc13785	1	2018-01-23 15:00:12.71+08	2018-03-23 16:39:35.59+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0b63e426-d86a-4edc-9c7c-398421fd5828	1	2018-01-23 15:00:13.314+08	2018-03-23 16:39:53.603+08	c9eacd36-38d6-48b9-9672-e76406906ea3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5f6c2fa6-075e-4c97-b0b1-ce4b945b700d	1	2018-01-08 14:10:26.887+08	2018-03-27 16:45:28.874+08	c36c08c3-4f22-474e-b748-c6c32288c802	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ca79e288-7a88-4d43-a59c-09a227ed2a87	1	2018-01-08 14:03:13.651+08	2018-03-27 16:45:41.528+08	6a6797bd-fdda-4b37-bbab-ce377a01521b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f009ce71-ac99-4a14-bbfd-a69d39863d7a	1	2018-01-08 13:55:43.517+08	2018-03-27 16:45:49.12+08	09e8eef6-6b70-4cda-84c2-a7680f7a535f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
466bc6e3-375f-46a0-8698-ba5a45d8b5aa	1	2018-01-05 16:48:16.707+08	2018-01-05 16:48:16.707+08	1e0d3ad9-26a9-427e-be48-685ffe3e84b7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d839dbcb-4ca1-49cf-8bad-7927d56ef8c2	1	2018-08-24 16:11:25.514+08	2018-08-24 16:11:25.514+08	b0493f78-0950-47ac-bf5f-27797da84f44	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c65c23ff-c9d1-4b80-b949-4dd251cd23a0	1	2018-01-05 11:16:01.994+08	2018-01-05 11:16:01.994+08	175e2759-ae38-4ac5-a62c-6ed4877f3863	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6cae1335-dcaf-4478-8b14-e2427cb57569	1	2018-01-05 11:47:57.126+08	2018-01-05 11:47:57.126+08	2574b00e-2491-471c-925a-5b713afa9561	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cb8e9d12-039b-4e4b-8167-0d8ec7dbdb9e	1	2018-01-08 14:45:06.866+08	2018-01-08 14:45:06.866+08	8d1d1382-984f-4aa9-8e57-c2a2c21e0c06	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9cff67f3-9cda-47a2-b5d2-099a504b726f	1	2018-01-08 14:52:21.868+08	2018-01-08 14:52:21.868+08	e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4b8fc505-6590-416b-b3f9-e658931e9a86	1	2018-01-04 13:57:54.951+08	2018-03-06 16:01:55.878+08	660c0ba2-d714-4ad3-8166-a1fa25a9d7d1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4f858fc5-73b6-4028-a706-dc1261246286	1	2018-01-05 15:12:03.165+08	2018-01-05 15:12:03.165+08	e2d93988-c0e0-4581-b406-e43e455f7864	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3f3894b0-9588-4524-9f75-38b28f3c7727	2	2018-01-05 09:45:50.148+08	2018-03-06 16:13:57.515+08	cf03d97a-0c99-494f-821d-da2dc02126dc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6a1943df-2897-4d48-a088-90522fc34601	1	2018-01-04 15:33:35.042+08	2018-03-06 17:07:37.811+08	fb1119c8-c430-4066-9f02-60a558d92a68	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c8e12bbb-a4c2-4cda-acde-719d40978d99	1	2018-01-05 15:36:58.421+08	2018-01-05 15:36:58.421+08	d2a5375c-0240-4435-9b8f-a62372fafaca	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bd34bbe2-ca15-48e0-b350-ccc08a87cfb7	1	2018-01-05 15:36:59.848+08	2018-01-05 15:36:59.848+08	780ffe7d-7369-4d2f-9184-32790466f2ba	9a1540b6-fea8-4bc0-8090-296b05f87c4a
373dd9df-59fe-4fb3-83a7-05c68a1f9dd4	2	2018-01-05 16:48:16.71+08	2018-03-07 16:44:47.909+08	1e0d3ad9-26a9-427e-be48-685ffe3e84b7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
091a6fc9-5dda-4cea-a5e1-03f2174e3a8c	1	2018-01-05 16:34:09.768+08	2018-03-07 16:45:08.44+08	7802bcc3-5fdb-441d-a57a-a89ca2ec158b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ec42e98a-1667-41f4-9f58-e02af9e496c2	1	2018-01-05 16:34:08.793+08	2018-03-07 16:50:41.422+08	5eb050b5-8b57-4528-adce-b3633e613b6c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ba7ceb0e-f6b7-4698-8ef3-ef352df0d199	1	2018-01-08 11:40:11.757+08	2018-03-09 09:15:13.041+08	f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
57a2f7b3-16b8-4298-ac6b-978d306d19a1	2	2018-01-05 11:16:01.99+08	2018-03-16 18:38:00.408+08	175e2759-ae38-4ac5-a62c-6ed4877f3863	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
da5ea9b6-c1f1-40c6-9bc6-5c7920e05d5d	1	2018-01-05 11:50:25.111+08	2018-03-16 23:20:25.184+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5e6182d7-7d90-40a6-a020-c598a2945429	1	2018-01-05 11:06:58.802+08	2018-03-18 15:48:16.316+08	17c35362-c638-46de-bea3-840893daf864	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cf11c000-7c1a-4247-b85b-5fa6e911c28f	1	2018-01-05 11:06:58.395+08	2018-03-18 15:48:42.141+08	30da8546-87f0-4a5c-bd4f-f9919c954c82	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5d1e6a40-b6e8-46e1-8f1a-25c985ad62eb	1	2018-01-05 10:51:34.747+08	2018-03-19 15:41:36.732+08	d77b7e20-7877-47dc-aef4-37a663bac660	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
70e72c6a-9cbd-44ce-95d9-cfa2b58e115b	1	2018-01-05 15:11:20.707+08	2018-03-20 17:54:47.43+08	abfa6634-cca0-4696-b67e-1c2eb2e57c9b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
714e146a-7bbc-4062-b58d-cd90a577f3d4	1	2018-01-05 15:11:19.829+08	2018-03-20 17:55:00.385+08	c50b3ecc-a416-4991-b64f-f2c79d8d1848	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
908acd8a-6cea-4af0-b7a5-1695246237bc	1	2018-01-05 14:57:25.904+08	2018-03-20 17:55:07.954+08	e6a3a1f5-2a8f-48a0-9758-407065bae1e9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
533044f9-17b6-4537-932e-4211a4578be6	1	2018-01-05 14:53:24.807+08	2018-03-20 17:55:17.408+08	49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0df21243-96db-416f-890b-b77d40c36943	1	2018-01-05 14:53:22.518+08	2018-03-20 17:55:26.646+08	607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8ac2e35e-7863-4a5d-ad18-7d1893b129da	1	2018-01-05 11:07:04.195+08	2018-03-20 17:55:39.093+08	b750e865-af38-40e9-a478-16fefb4cb618	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fdedf646-c4fd-453e-806d-aa33b7054d19	1	2018-01-05 11:07:03.692+08	2018-03-20 17:55:48.722+08	ecfacbbe-037c-42cb-89ce-68a2e6170758	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ff2262ff-8083-46b4-963a-715c1a2a7eae	1	2018-01-05 11:07:03.19+08	2018-03-20 17:56:53.856+08	27f99320-b0dc-4b93-bc24-f5ccf9337356	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f4206b10-b245-48ab-8763-a3ce3fc2f8c6	1	2018-01-05 11:07:00.267+08	2018-03-20 17:57:04.452+08	35d1f34b-ccac-4110-9bb6-7e0a3327ef18	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
11932a54-f638-46e8-ac45-87ae6586a8c5	2	2018-01-05 12:01:31.676+08	2018-03-20 17:57:37.361+08	2574b00e-2491-471c-925a-5b713afa9561	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9fc202d6-1860-47e6-92de-f7aec26cb174	1	2018-01-05 11:07:01.125+08	2018-03-20 17:59:00.615+08	0530f690-1f3c-430e-97c7-6dc82f96fd47	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cbe12e3b-0f5e-4aa0-8dbc-35fed3a80ad8	1	2018-01-05 11:07:00.023+08	2018-03-20 17:59:50.368+08	d14c6b02-4298-4713-b970-eba0aafee88b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0887c6ad-38d4-4eeb-a696-37a8e8bfcf3a	1	2018-01-05 11:07:00.141+08	2018-03-21 13:52:32.537+08	feb1fe0d-208d-41cf-9533-596f78fa835c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
92a1e4f8-e1fe-47ad-a20b-aa94951d0375	1	2018-01-05 15:18:31.286+08	2018-03-21 15:37:41.577+08	73a7b800-25d7-41ad-872d-96cc4f9430de	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
eba5f751-2548-4ca9-90ff-8e1860315669	1	2018-01-05 14:53:53.03+08	2018-03-21 15:38:16.587+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3214fe7b-6a2c-4666-8964-506d0c3b80a6	1	2018-01-05 14:50:21.834+08	2018-03-21 15:38:33.609+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ba597375-c17f-4caa-9134-f7fa11ea1b30	1	2018-01-05 14:46:16.302+08	2018-03-21 15:38:50.371+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9c619f6a-6a64-4dbb-a4e0-75bdd13fc992	1	2018-01-05 15:33:22.33+08	2018-03-21 15:42:42.072+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
36b0f90f-99b8-4543-8f97-118b79bf0572	1	2018-01-05 15:36:59.034+08	2018-03-23 16:26:26.549+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2885a62d-12f1-4301-941a-3ee5d1e4eeeb	1	2018-01-05 11:50:22.291+08	2018-03-23 16:26:59.403+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3b3b9d0a-f929-4f7a-8fcd-61d951203f7c	1	2018-01-05 12:01:35.793+08	2018-03-23 16:27:42.975+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3ddcd5c9-5483-405f-92e4-ed146ec893c3	1	2018-01-05 14:02:09.791+08	2018-03-23 16:27:59.867+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
21e13ca2-f774-417a-a4a6-85f366d078ee	1	2018-01-05 14:02:10.787+08	2018-03-23 16:28:36.853+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b853cd3e-e1fa-4ef3-b714-ade49476bff2	1	2018-01-05 15:48:51.36+08	2018-03-23 16:31:24.175+08	424f45f6-916c-4383-bce4-c71153f82e63	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
718ba26c-0638-4b39-b2e2-db452908c052	1	2018-01-05 11:06:57.937+08	2018-03-29 15:04:47.928+08	ba349741-3d03-49c6-a2cf-9e2156fd36c4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
237f87be-73fd-42c7-8045-a3b3e98cdadc	1	2018-01-24 11:33:34.506+08	2018-03-23 16:41:27.043+08	27930598-2f6e-4932-a816-9685f17969b5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2fa1d9b0-bc30-497a-a46d-d3d70c750edf	1	2018-08-27 14:20:09.993+08	2018-08-27 14:20:09.993+08	99c61d5d-4b9d-4fca-9d8c-e6d530b15871	9a1540b6-fea8-4bc0-8090-296b05f87c4a
972f1864-15c8-4b9b-bf9c-74d12a48bbd5	2	2018-08-27 14:20:10.002+08	2018-08-27 14:20:10.002+08	99c61d5d-4b9d-4fca-9d8c-e6d530b15871	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cfafdaea-f33d-431b-a4d9-44341366d0e8	1	2018-10-18 15:18:15.089+08	2018-10-18 15:18:15.089+08	5de488a0-c8c4-4e3d-b0c7-82150f4bd79b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
91f6f550-8306-4e10-8099-9b323d57edb1	1	2018-11-03 15:41:07.726+08	2018-11-03 15:41:07.726+08	2729651f-9ad2-44f0-b9cf-bfc33669f9c7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
238b4b73-1be3-4467-b185-3717e1cb1c68	1	2018-11-13 15:36:10.369+08	2018-11-13 15:36:10.369+08	830b9ca6-451c-480a-8013-67108cd4173f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3868a833-ef41-49f6-bdc1-524f920f3694	1	2018-11-13 16:37:13.339+08	2018-11-13 16:37:13.339+08	f125a65b-639e-46f7-8b52-6d2f4f2a064a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3f011ef9-77bb-401b-8290-643d74f1684a	1	2018-11-19 11:02:17.777+08	2018-11-19 11:02:17.777+08	d199daf3-83a4-4bcc-b23b-b6ca37fba927	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bd3dc3ee-3bc7-4248-9fd3-bf20b08dfa02	1	2018-11-23 16:45:17.054+08	2018-11-23 16:45:17.054+08	3b796285-ef41-4963-9304-f0909623f5c7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
552ab723-f534-4b17-9a84-65142c14978e	2	2018-11-23 16:45:17.056+08	2018-11-23 16:45:17.056+08	3b796285-ef41-4963-9304-f0909623f5c7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e99793c6-6cc5-49be-9551-14252cac2fb1	1	2018-11-28 10:41:03.638+08	2018-11-28 10:41:03.638+08	a1120cb3-3d96-45cc-81df-36f6c64d505c	3dfadb0e-7608-49e1-aa43-24f7442b424a
24f81ea9-59f6-4e31-a6cd-d392cd797a37	2	2018-11-28 10:41:03.641+08	2018-11-28 10:41:03.641+08	a1120cb3-3d96-45cc-81df-36f6c64d505c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1842a81b-e5de-4835-a800-e8ad4353ff87	1	2018-12-03 10:29:47.825+08	2018-12-03 10:29:47.825+08	c6a59efb-40c2-4104-9b26-7895bb8e072d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ce55f3f5-68bc-446b-a42b-9d589c6a1917	1	2018-12-06 10:05:43.634+08	2018-12-06 10:05:43.634+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	1aa841f1-d3fb-4523-9b54-e601d350c745
0f251392-a8a4-43c5-97d9-30744aa0b17f	1	2018-12-07 17:12:17.18+08	2018-12-07 17:12:17.18+08	e8357fe4-05bb-4159-8a27-a46212d14544	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2e606b06-2574-4c66-807b-3c1c74604834	1	2018-12-07 17:22:03.976+08	2018-12-07 17:22:03.976+08	326d5283-7066-4e0f-9e27-380773523f19	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4abe4198-cdbd-4d72-8e9f-cc92ffede877	1	2018-12-18 16:53:43.563+08	2018-12-18 16:53:43.563+08	66ccfb40-3e33-4b5b-a47b-be50c83473e9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d1951ebd-96f2-470e-bacb-b01b6fbfc5e6	1	2019-01-19 17:17:31.003+08	2019-01-19 17:17:31.003+08	0a341896-3c5d-4e60-af19-fe5f645c6967	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ecf46a8d-e7f2-4043-8671-2e1446607d6c	1	2019-02-25 13:32:42.883+08	2019-02-25 13:32:42.883+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	d0e8f529-c1bf-4146-beef-cd3056ea9787
a6703faa-aa9d-4b91-a785-cfcbd58e52db	1	2019-02-25 14:25:00.047+08	2019-02-25 14:25:00.047+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6af6e7b8-a166-4eb9-b326-b70b47acc94e	1	2019-02-25 14:25:00.05+08	2019-02-25 14:25:00.05+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	d0e8f529-c1bf-4146-beef-cd3056ea9787
21e62032-777f-4643-a1f7-de24c0099e71	1	2019-02-25 14:25:00.053+08	2019-02-25 14:25:00.053+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	118383e6-1b61-4e15-8dee-a1a2a61b531e
8b21d718-3d6d-4eb6-b9cd-f9090d48f121	1	2019-02-25 16:10:34.011+08	2019-02-25 16:10:34.011+08	934104cb-a134-4796-9c3d-52f0e8266fa3	3dfadb0e-7608-49e1-aa43-24f7442b424a
6aaaa96a-2d02-418d-b084-dc33fcc52662	2	2019-02-25 16:10:34.015+08	2019-02-25 16:10:34.015+08	934104cb-a134-4796-9c3d-52f0e8266fa3	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
cbedc498-a7e7-4d15-a577-c4199e4590fe	1	2019-02-26 16:47:57.171+08	2019-02-26 16:47:57.171+08	c809f621-a9ff-4922-aa0e-1bcadbfcb7e1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9f417292-8eda-4d81-99da-f675b85d8d39	1	2019-03-27 16:22:34.479+08	2019-03-27 16:22:34.479+08	8ebd65bb-633a-43d4-880a-d916b11067ba	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cb44766d-6328-46a6-a1e2-dccbc8abf7ce	1	2019-04-16 10:59:31.904+08	2019-04-16 10:59:47.082+08	752edd7f-ca25-4a19-bf4a-53a700f2556a	3dfadb0e-7608-49e1-aa43-24f7442b424a
3e2852ce-43b1-46ff-bb32-dfcf92650dd0	1	2019-04-23 15:47:59.411+08	2019-04-23 15:47:59.411+08	2698c5d7-398d-41ad-bdea-68e26f77a6bd	7bc18b0f-46d5-403a-893a-029eed333a46
ad654f88-5e0b-41e4-bbaa-82af8fd16f95	1	2019-04-25 15:04:01.449+08	2019-04-25 15:04:01.449+08	3a1c9f2b-76dc-4276-8e10-aba208fd1fc5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2c43bbd4-cbae-41b9-974f-84297e8d9e16	1	2019-05-07 15:55:09.361+08	2019-05-07 16:50:10.377+08	e907425b-f687-45f0-9e44-798f6c00968f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6629488f-b160-48aa-9b7f-842db418fbf6	1	2019-05-29 15:57:45.372+08	2019-05-29 15:57:45.372+08	304a0d25-d131-4d28-9534-296b7df2adb3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f684ae18-0aac-4dcb-aef8-d641277b7295	1	2019-05-30 10:24:01.007+08	2019-05-30 10:24:01.007+08	42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
29410758-574b-472b-86c3-7d1cf0e76b91	1	2019-05-30 11:20:53.232+08	2019-05-30 11:20:53.232+08	7f382df2-35f7-4128-9276-d2a3a40d6547	ca45c7c2-42df-48cc-849c-c4cd01067e5d
1dffaaf8-93b5-42bd-b641-4c9e543bd8ae	2	2019-05-30 11:20:53.235+08	2019-05-30 11:20:53.235+08	7f382df2-35f7-4128-9276-d2a3a40d6547	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
774b9665-0093-406d-82a5-0876622a38b5	1	2019-05-30 13:47:48.537+08	2019-05-30 13:47:48.537+08	104df6e9-2d4e-49ac-b7e1-a6d5cc2ba0e1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c397dade-68d0-4540-8762-8b3b952d8738	2	2019-05-14 14:10:38.851+08	2019-05-31 16:19:28.934+08	d634c358-000d-4c53-8c4b-0f411b4a52c3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
307c2a2a-d933-42bc-910e-ad6019053f9b	1	2019-05-31 16:21:25.573+08	2019-05-31 16:21:25.573+08	6daadb42-2ee7-41fa-a6bd-85d9c0d77383	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f6b6a799-5ea9-411c-ab15-eed85c3363e7	1	2019-05-31 16:22:59.79+08	2019-05-31 16:22:59.79+08	d3c271ff-22cb-4938-8c5f-c63484107a38	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
68b64022-0338-4ea5-8724-b23e112b8606	1	2019-05-31 16:24:47.767+08	2019-05-31 16:24:47.767+08	ef6476c9-709e-4afb-a4d9-57009ee3ecf5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
231ec281-245a-42c4-a57c-118fc0c16011	1	2019-05-31 18:01:12.162+08	2019-05-31 18:01:12.162+08	85e07675-26a2-435b-8ee9-6c790ffe7463	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a7fb1de1-1c96-4e0c-ab41-c24a6cc6fd79	2	2019-05-31 18:01:12.195+08	2019-05-31 18:01:12.195+08	85e07675-26a2-435b-8ee9-6c790ffe7463	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7cb70a27-5f67-494d-aea7-976fceabd55e	1	2019-06-03 11:50:03.935+08	2019-06-03 11:51:59.413+08	31c3b19c-2202-408e-ba8f-efd800be8801	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0e2b1a40-1445-41d3-bdfa-e4f5da1cf92a	2	2019-06-05 10:43:13.772+08	2019-06-05 10:43:13.772+08	fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
79f916f0-c25b-499a-986d-64311324c671	1	2019-06-05 10:43:13.775+08	2019-06-05 10:43:13.775+08	fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4f45c56b-fd06-4ed0-a6e3-35e78d0ed499	2	2019-06-05 11:07:53.598+08	2019-06-05 11:07:53.598+08	d8d4cee4-3e1d-4d43-8861-53ccd536112e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
31c55214-5327-487e-8633-a4c329e1a312	1	2019-06-05 11:07:53.601+08	2019-06-05 11:07:53.601+08	d8d4cee4-3e1d-4d43-8861-53ccd536112e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cefce46e-a10e-4588-a7b1-c6b5e0454e31	1	2019-06-06 14:15:52.934+08	2019-06-06 14:15:52.934+08	4b8a42f4-db96-4d3d-937c-0e98cae45ea0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7c07bcb8-40eb-4b12-a566-ffc8c4a1252a	1	2018-01-24 11:34:49.46+08	2018-03-23 16:41:46.57+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f91278d4-3571-4028-8205-df9d7eabd9f5	1	2018-01-24 11:34:50.377+08	2018-03-23 16:42:41.55+08	362018b7-e626-4eab-a6ad-214d85cfcc03	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9a4f5022-d830-4559-bff6-a5b6e6b6393f	1	2018-08-28 17:55:20.403+08	2018-08-28 17:55:20.403+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	30e6dca7-ede5-48be-9952-9fb056b2e9d1
6949ace4-688f-4c60-856e-38b66f491094	2	2018-08-28 17:55:20.413+08	2018-08-28 17:55:20.413+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	d0e8f529-c1bf-4146-beef-cd3056ea9787
ab4809e4-f574-4d5c-90c4-a8be6e48f158	2	2018-08-28 17:55:20.421+08	2018-08-28 17:55:20.421+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	7667c2d9-3c04-4818-bfeb-42f43b60af77
6ac020e9-abb5-4bb3-bbef-a3b930f21731	1	2018-08-28 18:06:12.394+08	2018-08-28 18:06:12.394+08	9aa93498-820e-4fc6-a288-5b2274fb9246	3dfadb0e-7608-49e1-aa43-24f7442b424a
3c04d8b1-1bb2-41b3-a9e1-30477d6da962	2	2018-08-28 18:06:12.4+08	2018-08-28 18:06:12.4+08	9aa93498-820e-4fc6-a288-5b2274fb9246	30e6dca7-ede5-48be-9952-9fb056b2e9d1
c7ac0d00-dcd4-4dc1-ae3d-1ae943392ad1	1	2018-09-19 17:31:06.045+08	2018-09-19 17:31:06.045+08	56e2d696-3384-449a-9072-46e2a18adbc8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
33f671fa-6b32-4bda-af2c-1c435c65392c	2	2018-09-19 17:31:06.047+08	2018-09-19 17:31:06.047+08	56e2d696-3384-449a-9072-46e2a18adbc8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dc210dff-ef4a-4e64-adab-59655d775a74	1	2018-08-24 15:26:31.709+08	2018-09-21 11:23:18.756+08	85e88d3a-7c29-4c8d-a2a2-89ffcaffd72b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9f047473-1e30-4e60-93f0-85781d1bfbd5	1	2018-09-21 17:53:12.724+08	2018-09-21 17:53:12.724+08	0f37be2c-4009-4079-81f8-e9c598773ea2	8280ccac-494e-4784-bd0c-5ffe97746993
aef73585-33cc-40f1-8f4d-6d1d09e59434	1	2018-10-24 10:46:54.975+08	2018-10-24 14:58:46.646+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	6eeb1913-71e2-40b2-ae39-c8750cbdefd7
66cc9d36-940b-4fe5-b66d-d3e7dee81055	2	2018-10-24 10:46:54.981+08	2018-10-24 14:58:53.439+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	118383e6-1b61-4e15-8dee-a1a2a61b531e
649c125c-9faf-43aa-978a-251e7b7e3a8c	2	2018-10-24 10:46:54.988+08	2018-10-24 14:59:12.542+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
4232eb85-d2fb-435e-a1fa-3896c591fcf2	1	2019-02-25 17:37:03.972+08	2020-04-05 15:52:32.636+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	dff00e7d-1fb2-443e-be6a-615214932ee6
bcce5a40-25ee-4628-81ec-ddb2ba172bbc	1	2018-11-05 09:08:45.111+08	2018-11-05 09:59:27.86+08	a03158bb-03f2-4da6-9ef0-10b837caab9e	3dfadb0e-7608-49e1-aa43-24f7442b424a
f4429bb2-1a4f-46c3-90aa-d3ca911e484e	1	2018-11-15 15:46:09.078+08	2018-11-15 15:46:09.078+08	5f1f2736-2744-4339-b456-50c5626ea641	66537b16-1e7d-4823-b03e-676459f5891d
7a9d917f-ec9a-4777-aa07-456ef2d00ae3	1	2018-11-19 16:52:15.444+08	2018-11-19 16:52:15.444+08	1a456dbb-f7f0-493c-969d-2a0c1f1698ef	9a1540b6-fea8-4bc0-8090-296b05f87c4a
725a525e-ce17-429b-a647-6aaac43b5b16	2	2018-11-19 16:52:15.447+08	2018-11-19 16:52:15.447+08	1a456dbb-f7f0-493c-969d-2a0c1f1698ef	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2550cb4b-a31e-4560-bed0-8325a2fea057	1	2018-11-23 17:09:41.869+08	2018-11-23 17:09:41.869+08	8c73b29c-6146-4170-9cb7-d8ead8990d60	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a1fd0bc0-392b-4ffa-9460-997e6df4a464	1	2018-11-28 10:42:00.889+08	2018-11-28 10:42:00.889+08	f0c41435-ecaf-4e42-b592-b53aaa72f721	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2517e18c-8012-4694-84f2-59146317e9f0	1	2018-12-03 14:06:15.009+08	2018-12-03 14:06:15.009+08	f0229321-e654-43b1-a172-a660b74367cd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
827f748e-7f46-44dc-908b-4f30a556d488	1	2018-12-06 10:14:56.964+08	2018-12-06 10:14:56.964+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	1aa841f1-d3fb-4523-9b54-e601d350c745
85c7634a-334b-4eed-a93c-c3192e743bcd	1	2018-12-06 10:18:55.769+08	2018-12-06 10:18:55.769+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	1aa841f1-d3fb-4523-9b54-e601d350c745
49f198b3-5c31-4f2d-b625-265c66993722	1	2018-12-07 17:12:17.326+08	2018-12-07 17:12:17.326+08	01f1ac79-6cbb-4f77-b73f-cf8d602f11a6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bcbf41b5-d713-46b4-a1e8-bd6f2e1d4c62	1	2018-12-18 18:03:29.504+08	2018-12-18 18:03:29.504+08	6b180341-15c7-4148-89e3-b6fc10b0f7b5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a54c026d-8570-4920-b0aa-4ca6984bc48c	1	2018-10-26 14:52:49.972+08	2019-04-19 14:55:44.498+08	3805bf98-24dc-453c-a62b-a5a97633ca8b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3bfea365-a06c-4aad-95b2-33dce750cdbb	1	2019-03-08 17:17:40.595+08	2019-03-08 17:17:40.595+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
786724c1-acde-4ce1-99b0-44ffb417add2	1	2019-03-12 09:49:51.412+08	2019-03-12 09:49:51.412+08	7f8fac16-3dbd-4d0a-bf38-322c5818e096	9a1540b6-fea8-4bc0-8090-296b05f87c4a
babf1792-c944-4e08-b747-a70be2981c9e	1	2019-02-25 13:43:02.004+08	2019-02-25 13:43:02.004+08	30bfe302-d364-4325-be1f-7fef73afaf77	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
98b42027-b02b-4d02-af91-fa4b310a1e9c	1	2019-02-25 13:43:02.01+08	2019-02-25 13:43:02.01+08	30bfe302-d364-4325-be1f-7fef73afaf77	d0e8f529-c1bf-4146-beef-cd3056ea9787
88d4cda9-f09e-4941-b443-9dc8a4436f90	1	2019-02-25 15:41:07.248+08	2019-02-25 15:41:07.248+08	c169f72a-deae-4135-84ee-62d771722507	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c872b023-f403-4046-a167-4a9865399e6d	1	2019-02-25 15:41:07.253+08	2019-02-25 15:41:07.253+08	c169f72a-deae-4135-84ee-62d771722507	d0e8f529-c1bf-4146-beef-cd3056ea9787
55d0479b-e79d-439f-9c46-4f49f203ac5c	1	2019-02-25 15:41:07.256+08	2019-02-25 15:41:07.256+08	c169f72a-deae-4135-84ee-62d771722507	118383e6-1b61-4e15-8dee-a1a2a61b531e
2e756ed4-27ad-4581-b18c-50e26ecfaa35	1	2019-02-25 17:37:03.963+08	2019-02-25 17:37:03.963+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	9a1540b6-fea8-4bc0-8090-296b05f87c4a
afdc9171-1256-4338-9615-016dd33a24cb	1	2019-02-26 16:29:15.92+08	2019-02-26 16:29:15.92+08	7ac67279-f72c-4296-ba27-9b03b8c07c05	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0fd4d11c-fd8a-4e3d-8957-41e4c1690319	1	2019-03-05 13:25:13.302+08	2019-03-05 13:25:13.302+08	49b8d21c-3486-496b-b17b-ccf195aaeb65	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2fc597e9-5717-436f-a2d8-ed88c18cbd11	1	2019-03-07 15:12:54.31+08	2019-03-07 15:12:54.31+08	a0803ec9-69c4-41dd-9531-2de25b6274b3	2d8a5feb-5c4a-49f1-b5cd-3770f2b8e090
8530041f-38d8-47a4-b52f-4fc03a11bd29	1	2019-03-14 11:21:14.949+08	2019-03-14 11:21:14.949+08	9aa975c7-a3d4-42ec-a384-17d0425e602a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fc258178-b85a-4632-b5f6-c6b4290556f6	1	2019-03-15 11:37:05.302+08	2019-03-15 11:45:39.318+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	be9d7f9a-cbe9-4033-b6b8-8920bd29fdbd
94ddf32c-b093-417c-a1d7-42381d290092	1	2019-03-15 16:40:05.808+08	2019-03-15 16:40:05.808+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	66a06e5d-a436-4d37-806b-919d8fd1c564
c7582cca-84ee-4bae-8b85-05c423f792b4	1	2019-03-20 15:26:27.803+08	2019-03-20 15:26:27.803+08	18900e9a-1828-4d26-8966-51c1e5ebfa26	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2ff60b54-bc1a-4c20-8396-07b7312fe984	1	2019-03-22 10:33:16.432+08	2019-03-22 10:33:16.432+08	954dabda-7fd8-456d-8d9a-bc7058d4e8ad	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9bc994ef-a76e-46fb-82c4-60946018fa97	1	2019-02-25 17:37:03.969+08	2020-04-05 15:52:40.961+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	2dd0e24e-8f6a-4171-8657-493de66868bd
00b7975b-2a18-4146-9e51-b8d8b71550d8	1	2019-02-25 17:37:03.966+08	2020-04-05 15:52:47.715+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	e65d6dc4-b239-4755-b83e-af11fa23fb70
d2078c90-429d-4446-998d-d43e6ccd4b77	1	2018-08-30 16:11:13.766+08	2018-08-30 16:11:13.766+08	2425cf54-e1bc-4c75-ac7b-62b039f29548	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
161d57d4-a9b7-44a5-a6b0-90ea6c5a2121	1	2018-09-19 17:32:06.995+08	2018-09-19 17:32:06.995+08	8b635501-4320-49f5-b573-e4193d4e31b6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
eac22ea1-cdd7-45c9-90b1-79c6dc066cc0	1	2018-01-26 09:39:05.309+08	2018-01-26 09:39:05.309+08	7697d048-c21e-4b28-8c88-a59de01bae96	2d974b4e-c841-430c-8cbf-c92f7d6a890d
8e64aea7-1579-42bf-ac93-406314fe9b30	1	2018-09-25 10:58:50.735+08	2018-09-25 10:58:50.735+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	d4f271b6-567a-4880-beb0-161b33ac2094
33551006-d4b1-487b-b77f-f8472a7e463c	2	2018-01-28 21:26:41.918+08	2018-01-28 21:26:41.918+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
0c9f7cef-31cb-4539-8104-92c9a1c25262	1	2018-01-30 17:26:52.47+08	2018-01-30 17:26:52.47+08	67becf68-18c7-4ab3-83b2-d306f89bd25d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
813adfd8-3295-4724-ae8a-42761cfdf2b6	1	2018-01-30 17:38:49.917+08	2018-01-30 17:38:49.917+08	745e1f26-ee66-45dd-9606-052a34a944fc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
654a4b9f-5e15-4ff6-b678-cf9f792ddc34	2	2018-02-01 16:23:11.247+08	2018-02-01 16:23:11.247+08	cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7
07150fe0-c0a7-45f8-884e-3e1b58d916c3	1	2018-02-02 16:19:55.414+08	2018-02-02 16:19:55.414+08	22827d64-06e1-4752-a0b6-3cf6fb36cd21	b2d60094-05d4-473d-a62d-e1cd0ebd557b
3a59ba8f-dcaa-4276-808f-3f6244455278	1	2018-02-05 11:21:19.472+08	2018-02-05 11:21:19.472+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b3e74ddf-2759-46b8-ba37-a944d5a83851	1	2018-02-05 11:21:34.551+08	2018-02-05 11:21:34.551+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e9b06093-70f9-404c-9ee9-c056cb62226a	1	2018-02-05 11:21:49.79+08	2018-02-05 11:21:49.79+08	0f4f59de-cde7-4aec-a402-703e5426bb76	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5137058a-3c36-49fe-b29e-460166a4017e	1	2018-02-05 11:22:03.786+08	2018-02-05 11:22:03.786+08	2e2456a6-9738-456c-abf1-94d5ebad124a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6e3a148f-8824-4508-9f7a-6d2accaae772	1	2018-02-05 14:54:12.665+08	2018-02-05 14:54:12.665+08	d148ae2e-c0dd-4e57-a0e8-833d32107f31	9a1540b6-fea8-4bc0-8090-296b05f87c4a
72182529-ac2d-4ecc-8afd-7a001f8981e2	1	2018-02-06 16:34:19.394+08	2018-02-06 16:34:19.394+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
4fc60bc7-fb8c-47c8-b184-de46b05d9ab8	2	2018-02-06 16:34:19.399+08	2018-02-06 16:34:19.399+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	3dfadb0e-7608-49e1-aa43-24f7442b424a
261bc8fe-1c1f-47bd-a3fd-298812d1c399	1	2018-09-25 10:58:50.738+08	2018-09-25 10:58:50.738+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7bb18ac9-38a5-4f43-9d10-eb169b0d6e86	1	2018-02-06 17:17:32.187+08	2018-02-06 17:17:32.187+08	7fefd73e-8fd9-48a6-8d7a-76f5796a8197	9a1540b6-fea8-4bc0-8090-296b05f87c4a
056c0cb1-35e1-4602-8d5a-b5afac2fa309	1	2018-02-06 17:32:56.517+08	2018-02-06 17:32:56.517+08	9137c92c-6de6-4b00-bafc-a995288280f7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ac1a4739-f1d2-4e18-b9b8-e98f87522977	1	2018-02-06 17:44:49.263+08	2018-02-06 17:44:49.263+08	edcdb4a2-9f82-46d7-bba1-3ebb4f69483e	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
2d04c70c-59f5-4a33-86d8-5f57fe213fc1	1	2018-02-07 09:45:44.21+08	2018-02-07 09:49:38.359+08	5ecfc751-afb0-4596-a6f7-85a31eca40c3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6b72b53f-367d-4eb7-8f07-1e32ea89bf72	1	2018-02-07 16:37:15.385+08	2018-02-07 16:37:15.385+08	36918a6c-395e-4f8c-93b1-7ca400374cf8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
09cb7c07-4a03-4c3f-a66d-1f645c4ec8b8	2	2018-02-07 16:37:15.391+08	2018-02-07 16:37:15.391+08	36918a6c-395e-4f8c-93b1-7ca400374cf8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6cdbb4ff-49e8-4e38-ace2-ac518eddd372	1	2018-02-09 14:00:32.95+08	2018-02-09 14:00:32.95+08	ee8205dc-c9b0-4c29-b85f-9a54216ab198	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f45e76cc-849c-4169-b4ed-d5dbee6db11d	2	2018-02-09 14:00:32.965+08	2018-02-09 14:00:32.965+08	ee8205dc-c9b0-4c29-b85f-9a54216ab198	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ead506c4-61b1-4848-8939-d40490b53d73	1	2018-02-11 16:58:21.736+08	2018-02-11 16:58:21.736+08	c98659b5-30ec-471f-9654-41f5f8df47b0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
39f37687-7532-4541-846f-6c2cfc7610b9	1	2018-02-11 17:07:24.77+08	2018-02-11 17:07:24.77+08	fdf34922-d64e-4616-9313-96d7d94b8412	9a1540b6-fea8-4bc0-8090-296b05f87c4a
11349b6e-9105-48ec-a093-00e780913f1b	1	2018-02-11 17:16:18.661+08	2018-02-11 17:16:18.661+08	b53146b9-7737-46cd-a305-e2c9cb286d3d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
72e1d52e-cf44-4123-aebb-b3ea312b4d54	1	2018-02-27 09:46:30.759+08	2018-02-27 09:46:30.759+08	a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
74016b2d-f8a7-43bd-83b2-1829955c4a75	1	2018-02-27 16:28:09.439+08	2018-02-27 16:28:09.439+08	1a6ea847-974c-49f4-b1e6-452665775d49	3dfadb0e-7608-49e1-aa43-24f7442b424a
8ef229f4-04af-4e0b-bfc7-da2e9789de05	1	2018-02-28 16:01:53.165+08	2018-02-28 16:01:53.165+08	12adcb99-432b-46f5-9240-dad30ec75ea6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
967dd284-9632-4e8b-8e72-f97ef221a8c8	1	2018-02-28 16:21:12.169+08	2018-02-28 16:21:12.169+08	bcc5cadb-0395-464b-8ead-ac3917b49e30	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1531aa66-e652-42fa-8ec2-ce8a21b3bf12	1	2018-02-28 16:21:13.118+08	2018-02-28 16:21:13.118+08	8e752366-9256-4bab-a79b-276a89aea484	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bf72e889-6d3e-4b1b-96d0-109c4bf11c1f	1	2018-02-28 16:21:13.688+08	2018-02-28 16:21:13.688+08	87bf38c3-0b08-4bcf-98b4-12060fd9a345	9a1540b6-fea8-4bc0-8090-296b05f87c4a
54a5200d-95df-40fd-a03f-232696f3166a	1	2018-02-28 16:21:14.322+08	2018-02-28 16:21:14.322+08	167d20c6-d128-4532-9974-d4a55788823e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4e1694d1-bc78-4e41-96d4-779ec95762de	1	2018-02-28 16:48:43.046+08	2018-02-28 16:48:43.046+08	10ac4010-ff56-4d05-9e45-55f84f4292aa	9a1540b6-fea8-4bc0-8090-296b05f87c4a
94a4c225-557a-417b-b7c8-6289c88e290e	1	2018-02-28 16:48:44.783+08	2018-02-28 16:48:44.783+08	1f16c362-1f8e-4cbc-8b2c-8f43dd306390	9a1540b6-fea8-4bc0-8090-296b05f87c4a
48fa9380-745a-4968-8733-f9c0d3f6517c	1	2018-02-28 16:48:45.379+08	2018-02-28 16:48:45.379+08	8571c1b0-8472-45b5-955f-5a7614a2f08c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8f6ed7c4-a717-4834-a1b5-781e5169d708	1	2018-02-28 16:48:46.01+08	2018-02-28 16:48:46.01+08	a570a2de-ca66-488a-a078-6c6b14b71f2a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
60e4ae40-e9c9-427e-87e3-a59b6ee6939e	1	2018-02-28 16:48:46.68+08	2018-02-28 16:48:46.68+08	d54f6d25-04dc-4847-8dda-9c54d54b2d8f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
312345c3-2a74-4b8b-a5f6-9181f1bfb55f	2	2018-10-26 16:01:47.64+08	2018-10-26 16:34:52.433+08	3805bf98-24dc-453c-a62b-a5a97633ca8b	5cc45782-5d73-4354-b2c1-4904e284c95b
8aa2ad50-9740-4add-9d62-327eed1b920d	1	2018-11-05 11:05:43.24+08	2018-11-05 11:05:43.24+08	706988da-65c8-4388-a4ab-47e553cd1085	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b372116b-3e75-4e51-a202-28609f8c6bb1	1	2018-02-07 16:40:02.705+08	2018-03-18 15:43:56.084+08	aaa7d270-43dc-4864-bb0a-967c33658698	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d0212fe3-5814-4546-8b3a-de355f207a2a	1	2018-09-05 09:55:00.346+08	2018-09-05 09:55:00.346+08	5c6b67cd-fe7a-472e-8907-63baa655cb42	ad4f23f8-9213-4194-97ce-209a34596649
a5d45d20-8865-47eb-9bc3-3982af96ed65	1	2018-09-20 13:52:41.747+08	2018-09-20 13:52:41.747+08	c1b890f6-babe-41df-b3b4-0a277ad7e1b2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9d391a94-45d4-4209-a10e-d1c9f1e6dd35	2	2018-09-25 15:45:23.982+08	2018-09-25 15:45:23.982+08	d929c576-62dd-4f0c-a2cc-15120347b903	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
a6b46729-f63a-42c7-946c-2f308b7e169a	1	2018-09-25 15:45:23.986+08	2018-09-25 15:45:23.986+08	d929c576-62dd-4f0c-a2cc-15120347b903	3dfadb0e-7608-49e1-aa43-24f7442b424a
37f86573-bda4-4eaf-a404-b11edab30fd5	1	2018-10-24 13:35:04.255+08	2018-10-24 13:35:04.255+08	04425c48-b89c-498d-8372-b3a64d1abf1e	0af1af55-38cd-43c1-abe3-b71570342d40
c7f56265-3127-4b55-b485-95134998bcd4	1	2019-03-19 10:11:54.287+08	2019-03-19 10:11:54.287+08	f2d1cabf-7888-4be1-9357-bf5052e5772c	3dfadb0e-7608-49e1-aa43-24f7442b424a
7f54bf03-96d7-44ff-b4c1-c1f94c1a3fdb	2	2019-03-25 11:15:17.53+08	2019-03-25 11:15:17.53+08	954dabda-7fd8-456d-8d9a-bc7058d4e8ad	c3c19462-3221-4cca-8288-13f960d7ea5b
0b84eeb5-9a45-4d3c-819f-dd4875c00720	1	2018-11-07 10:56:08.264+08	2018-11-07 14:53:29.119+08	ed1a6677-30c5-4215-a128-96bbd4b46c9f	6f8504db-8b86-4b33-a0c6-721249b63f46
939cd5ef-673f-4683-9dea-55ac0af56393	1	2018-11-16 14:10:42.792+08	2018-11-16 14:10:42.792+08	f12a248f-faab-43f2-bfbe-088da7f471dc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
533b75af-c0a0-4e4a-bdba-630ed0c9fa4f	1	2018-11-19 16:52:44.375+08	2018-11-19 16:52:44.375+08	7c42d86a-5801-4ef2-94df-2b5c702ff7f5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d24f5460-15a0-4f18-9f2e-9e9b235bf27d	1	2018-11-26 11:44:21.377+08	2018-11-26 11:44:21.377+08	a300435b-3982-4694-aab4-48ba853d838e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8ee3c94e-fc38-4a55-a21d-00efe99c3575	1	2018-11-28 15:02:30.528+08	2018-11-28 15:02:30.528+08	b75d2a21-d798-498b-966f-75375c6967ff	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bafbbebe-8667-44d4-9543-18ac43ad4d21	1	2018-12-05 14:59:23.185+08	2018-12-05 14:59:23.185+08	c9eacd36-38d6-48b9-9672-e76406906ea3	1aa841f1-d3fb-4523-9b54-e601d350c745
9a265b2b-7300-4ceb-bba1-48150a012b88	1	2018-12-06 10:22:18.385+08	2018-12-06 10:22:18.385+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	1aa841f1-d3fb-4523-9b54-e601d350c745
92bdce01-7eae-4842-8ce6-a0bf3f4a6ae3	1	2018-12-07 17:12:17.901+08	2018-12-07 17:12:17.901+08	7328323d-9f8b-435e-9d4f-f963f502dc31	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
26ad1933-4049-40dc-8b89-c9122a6d58af	1	2018-12-11 14:09:09.384+08	2018-12-11 14:09:09.384+08	0b4f75d6-d921-4913-a9de-cfff3b99d56e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45549831-3126-45f5-8357-924cb2bf9eb6	2	2018-12-18 18:04:30.321+08	2018-12-18 18:04:30.321+08	6b180341-15c7-4148-89e3-b6fc10b0f7b5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
996cc1ec-1a12-46d2-8e73-4ef3e4c8a224	1	2019-02-25 14:08:36.897+08	2019-02-25 14:08:36.897+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3b5bf79b-409a-48d9-a255-9963165291a6	1	2019-02-25 14:08:36.906+08	2019-02-25 14:08:36.906+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	d0e8f529-c1bf-4146-beef-cd3056ea9787
5d39348c-b190-404c-bcdb-c1ac2b3b1a42	1	2019-02-25 15:41:59.719+08	2019-02-25 15:41:59.719+08	9bcce139-4a57-4c96-ba1f-914569011b77	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c884a293-b09e-480e-9af0-e67c8ae442da	1	2019-02-25 15:41:59.724+08	2019-02-25 15:41:59.724+08	9bcce139-4a57-4c96-ba1f-914569011b77	1aa841f1-d3fb-4523-9b54-e601d350c745
63095003-a279-4564-bf48-0f3f7ca2db97	1	2019-02-25 15:41:59.727+08	2019-02-25 15:41:59.727+08	9bcce139-4a57-4c96-ba1f-914569011b77	d0e8f529-c1bf-4146-beef-cd3056ea9787
26cf03db-09ec-481c-a58e-60b4deebfa0b	1	2019-02-25 17:37:56.394+08	2019-02-25 17:37:56.394+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
460c8158-6935-498e-bf3e-3cf869867fdc	1	2019-02-25 17:37:56.398+08	2019-02-25 17:37:56.398+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	7667c2d9-3c04-4818-bfeb-42f43b60af77
b5e97809-0399-4ad9-8b8d-340b9d23a997	1	2019-02-22 16:33:55.416+08	2019-02-26 14:17:32.482+08	b21b534c-d8f1-4caf-a405-1682a99dc1a9	c00008f7-06d9-4907-b2e7-619374116b36
ae51a29d-22f2-4f81-ae18-a59f55bc742d	1	2019-02-26 16:30:15.678+08	2019-02-26 16:30:15.678+08	88bd8ad3-6ffd-4b0f-8768-085e0e59d92e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8a14a4a6-fd46-4d3a-a9cc-6a27d9c930c0	1	2019-02-26 16:39:23.422+08	2019-02-26 16:39:23.422+08	a504d969-ffb0-42c6-9edd-529d1d61a77c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0746543a-bb5d-4868-80ca-c4469861f7c5	1	2019-03-04 11:20:58.18+08	2019-03-04 11:20:58.18+08	7128744b-0a8b-463f-b231-40f8862cba87	9a1540b6-fea8-4bc0-8090-296b05f87c4a
811fb16f-c188-47a2-9b1e-bad008e375a3	1	2019-03-05 13:33:36.262+08	2019-03-05 13:33:36.262+08	9ea89d82-49ea-480a-a90a-0b99290db919	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
123ef5be-3991-4a19-a1fb-fd63d26c512e	2	2019-03-15 11:37:12.53+08	2019-03-15 11:37:12.53+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e10db378-7371-4def-9081-13d2446dca8f	2	2019-04-25 15:41:27.417+08	2019-04-25 15:41:27.417+08	83960893-0d31-4f1e-a576-69a4e7bce94c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
91476c9a-6eb5-46a2-9206-01b186e4e6fa	1	2019-04-26 13:07:35.552+08	2019-04-26 13:07:35.552+08	d59a244e-554e-478d-b874-b75dc0dff2b5	89b76f5e-c6dd-46db-a92f-a3335aeafa86
b8f2fe7e-2a21-4bbb-98c9-a7d6d0c292f9	2	2019-04-26 13:07:35.555+08	2019-04-26 13:07:35.555+08	d59a244e-554e-478d-b874-b75dc0dff2b5	89b76f5e-c6dd-46db-a92f-a3335aeafa86
ed76d0c6-f7a4-46fa-b322-90a6ac76fe30	1	2019-04-26 15:57:34.682+08	2019-04-26 15:57:34.682+08	3f25f8df-8a52-4d2c-b6ea-714da8be3c00	9a1540b6-fea8-4bc0-8090-296b05f87c4a
16889bf4-74d5-4c72-bfa9-4cde4b691cca	1	2019-04-28 10:50:55.204+08	2019-04-28 10:50:55.204+08	75780bad-38e2-4dde-adbd-950bd075a1d2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cfdc691c-18ca-4ece-a05a-61c433381df8	1	2019-04-28 17:36:59.008+08	2019-04-28 17:42:00.723+08	0a9ddd56-9373-42fc-b426-17797eeee64a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ab6325d5-dbae-449e-8c76-86b82e488771	1	2019-04-28 11:27:08.99+08	2019-04-29 15:08:14.522+08	6daadb42-2ee7-41fa-a6bd-85d9c0d77383	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
5ad2026e-5c8b-4567-bfb6-858e613b3d42	1	2019-05-06 10:14:28.456+08	2019-05-06 10:14:28.456+08	9ac9f312-0f0e-45d4-8d00-8420be016826	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3b2a1939-ab5a-4ecd-99f3-6f48b3cf1b1e	1	2019-02-25 17:37:56.401+08	2020-08-05 14:15:19.729+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	dff00e7d-1fb2-443e-be6a-615214932ee6
be1600c4-af01-4849-9099-c10dba51edc9	1	2018-03-01 14:29:42.729+08	2018-03-01 14:29:42.729+08	c69575ab-795c-45ec-8901-f370255beff1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e3114646-dc4d-48a2-bdf9-24ac4cee2e68	1	2018-09-07 09:24:39.742+08	2018-09-07 09:24:39.742+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e4a15813-aaff-4012-b84e-538d4af261e6	1	2018-03-02 16:15:39.581+08	2018-03-02 16:15:39.581+08	ec223bfa-7244-4458-8180-4205fd31ac24	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c799837b-448d-46a8-bc2e-abecbeaaddf0	1	2018-03-02 17:16:41.277+08	2018-03-02 17:16:41.277+08	a812ef4d-0c77-49e6-bad2-c74c79c50e49	9a1540b6-fea8-4bc0-8090-296b05f87c4a
88827513-9301-4dcb-84c5-f531c188097a	1	2018-03-05 09:35:14.837+08	2018-03-05 09:35:14.837+08	5fc4a5d5-9307-4ab0-9fb1-7f017c432911	9a1540b6-fea8-4bc0-8090-296b05f87c4a
807f922d-1d65-4e57-81d3-b507221a5358	2	2018-10-24 14:59:19.947+08	2018-10-24 14:59:19.947+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
11740afe-14dd-41c7-819a-2764c0f02321	1	2018-03-05 10:52:42.56+08	2018-03-05 10:52:42.56+08	84747787-27a7-463d-bd03-9ee55d84fea0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
03c06c61-5dd6-4065-a2cd-c3e003f08119	1	2018-03-05 10:59:51.142+08	2018-03-05 10:59:51.142+08	f1fc4840-f3c9-4752-a703-b0bef637f3ee	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ed2433d4-7df9-40e4-8b3c-ef56522294af	1	2018-03-05 13:34:14.917+08	2018-03-05 13:34:14.917+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	34ab0b66-1ce3-4462-ad0c-520d349ca04c
3b79c6c2-39da-4c8e-9b85-df2a31cf822f	1	2018-11-20 14:58:30.327+08	2018-11-20 14:58:30.327+08	800e5478-374c-4de8-ab05-d9aa4be45cdb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
60c4219d-07b1-4793-8eb8-776528db5395	1	2018-03-06 16:50:09.438+08	2018-03-06 16:50:09.438+08	5dced7e6-e4c2-4e43-82a2-6b994fb790b4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f95f5c4f-4338-4022-927f-72cb45e4b786	1	2018-10-26 16:15:49.376+08	2018-10-30 19:12:31.224+08	a5dda81c-6a85-4e7b-97f3-be45b980646e	5cc45782-5d73-4354-b2c1-4904e284c95b
6d4c23a3-4f3e-4f58-8f7d-ef6893dc2077	1	2018-03-07 14:01:44.98+08	2018-03-07 14:01:44.98+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7587a4d4-7375-4dee-a174-e0f3718a566a	1	2018-03-07 14:45:52.002+08	2018-03-07 14:45:52.002+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	250ec8dc-2cd2-4056-88f4-863278485bba
df977518-6bfe-4ae3-85f8-7c41d81bad29	1	2018-11-17 14:04:21.032+08	2018-11-17 14:04:21.032+08	e689bb3a-b7ce-4502-9042-c07f89958809	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2250e19c-6399-4b84-85d5-308b7e5bfc37	2	2018-11-17 14:04:21.039+08	2018-11-17 14:04:21.039+08	e689bb3a-b7ce-4502-9042-c07f89958809	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ddc7f984-593c-43ac-9597-bc98218b8b09	1	2018-03-07 16:17:30.733+08	2018-03-07 16:17:30.733+08	24ff3733-db3f-4d37-b90a-edd44a77e054	250ec8dc-2cd2-4056-88f4-863278485bba
d8f7cc71-3dff-4f7b-b19c-768e3499f822	2	2018-03-07 16:17:44.029+08	2018-03-07 16:17:44.029+08	24ff3733-db3f-4d37-b90a-edd44a77e054	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f97a1d41-06aa-4929-9229-ceb6ca403947	1	2018-03-07 17:15:48.177+08	2018-03-07 17:15:48.177+08	68cb03f4-a381-4eaa-9068-d375ae3500e8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b1195b35-3e64-4d7d-bf10-4cdba0dc0876	1	2018-03-07 17:18:03.904+08	2018-03-07 17:18:03.904+08	3a8c62b6-14dc-497e-90e8-68c2160e7d08	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4bc60568-92df-4cfa-ab39-d14868df8568	2	2018-11-23 21:36:30.653+08	2018-11-23 21:36:30.653+08	09ebfc15-19c9-4e5f-bacb-5e81ec5ef026	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e19d2117-7307-4824-87c6-2db0a176fd23	1	2018-12-06 10:24:58.814+08	2018-12-06 10:24:58.814+08	37c046eb-9a0e-49b0-95fb-f0128338f381	1aa841f1-d3fb-4523-9b54-e601d350c745
19151d32-ffd7-4ad1-80cb-b6173adaf11f	1	2018-12-07 17:22:01.989+08	2018-12-07 17:22:01.989+08	65e60374-6bdf-42f8-801d-00fc50085215	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
24c1e87b-fd73-430f-a9a7-18d155d3ea41	2	2018-03-08 18:57:00.03+08	2018-03-08 18:57:00.03+08	71735c3a-2e25-40c1-81ad-df10d8792ac2	7697235e-a619-4da5-ac6e-9a76a6e59a78
59f129f4-a877-43c8-b7a2-538663b3926c	1	2018-03-08 19:35:31.287+08	2018-03-08 19:35:31.287+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	7697235e-a619-4da5-ac6e-9a76a6e59a78
3689732c-0546-4b35-88f5-bde1451753a4	2	2018-03-08 19:35:40.861+08	2018-03-08 19:35:40.861+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	d0e8f529-c1bf-4146-beef-cd3056ea9787
b0c8a9e8-3cb6-4f75-af40-b91d61b8122b	2	2018-03-08 19:35:47.547+08	2018-03-08 19:35:47.547+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	7667c2d9-3c04-4818-bfeb-42f43b60af77
b2835fca-b4e0-4ba4-9f6b-99f78ab6375c	1	2018-03-08 20:01:25.855+08	2018-03-08 20:01:25.855+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	7667c2d9-3c04-4818-bfeb-42f43b60af77
a054b20a-1687-45aa-b27b-8a004a4c819d	1	2018-03-08 20:19:54.227+08	2018-03-08 20:19:54.227+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	d0e8f529-c1bf-4146-beef-cd3056ea9787
5e8cad65-f4b8-440f-8c7d-ff360c05699e	1	2018-12-13 13:58:23.802+08	2018-12-13 13:58:23.802+08	d5ce913e-4a89-473e-b69b-bdfbc0fa6753	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2e4a0dfd-e4ed-4606-b682-f07f9af83752	1	2018-03-09 14:51:58.795+08	2018-03-09 15:04:04.927+08	21c691a7-7a5a-4262-a3fe-cedb0c37e5fe	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
98efd1b8-ba29-41ac-8022-8e5fcdae47d7	1	2018-03-09 16:27:20.879+08	2018-03-09 16:27:20.879+08	22fee831-1acb-498b-a4f4-c73ca9e48eac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
816698d5-874a-4b41-9a10-7283e570c6ca	2	2018-03-09 16:27:20.881+08	2018-03-09 16:27:55.721+08	22fee831-1acb-498b-a4f4-c73ca9e48eac	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ee8cac2b-69c4-4de0-ae4f-605dd6615b5a	1	2018-01-08 15:14:58.249+08	2018-03-12 15:18:02.974+08	e2d104b1-9c57-4a16-8d05-07817bc8b785	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bcb5dc91-e7b9-465f-86e7-f92b319cde98	1	2018-03-12 17:55:34.545+08	2018-03-12 17:55:34.545+08	ae356f39-ab83-4ac9-b847-31391780a6c5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
00d429fe-3521-43bd-82c5-27c3701da1b1	1	2018-03-08 18:56:49.984+08	2018-03-13 11:27:46.627+08	71735c3a-2e25-40c1-81ad-df10d8792ac2	3dfadb0e-7608-49e1-aa43-24f7442b424a
f0a6aa85-d578-4445-88a6-a7b5b0f01743	1	2018-03-13 17:32:48.257+08	2018-03-13 17:32:48.257+08	e60e191c-767a-479d-a33e-589622634060	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b33235f3-7afe-4051-8783-4ec466435d0e	2	2018-03-13 17:32:48.259+08	2018-03-13 17:32:48.259+08	e60e191c-767a-479d-a33e-589622634060	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c8db06d8-ccaa-4330-bbbe-b005900e16ef	1	2018-03-13 23:09:59.902+08	2018-03-13 23:09:59.902+08	384f80e3-ad51-400e-b0aa-8a3885961cec	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9950fe4a-165d-4b00-899f-c145ca03a1a8	1	2017-12-19 17:58:52.28+08	2018-03-14 00:18:37.926+08	dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a53ca2e5-bb91-4e04-8ee5-dd80dc1ec6d1	1	2018-03-14 08:03:41.078+08	2018-03-14 08:03:41.078+08	77d8ba09-082d-405d-aeca-9a0d66f902c3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
25d8f312-6c96-4a77-9521-ee0e237e776a	2	2018-03-14 08:03:41.082+08	2018-03-14 08:04:02.688+08	77d8ba09-082d-405d-aeca-9a0d66f902c3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e0b42b21-df2e-4e86-9230-79d1b39ce3c5	1	2018-03-14 08:24:49.336+08	2018-03-14 08:24:49.336+08	b3da87da-9dc0-443c-960e-ccea1c35f87e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
291ecf10-1628-41fb-b42e-c7410d5cb72e	1	2018-03-14 09:30:58.052+08	2018-03-14 09:30:58.052+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	7667c2d9-3c04-4818-bfeb-42f43b60af77
df1bcf14-1ac8-4918-9450-692a9001d08b	2	2018-03-02 16:15:39.584+08	2018-03-23 16:43:14.205+08	ec223bfa-7244-4458-8180-4205fd31ac24	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
878bf1ee-1496-47cf-8379-d969910bdbd2	2	2018-03-02 17:16:41.28+08	2018-03-23 16:43:43.422+08	a812ef4d-0c77-49e6-bad2-c74c79c50e49	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
73722e50-2271-451e-a7b7-1433748336ca	2	2018-09-07 09:24:46.795+08	2018-09-07 09:24:46.795+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488	e4049f35-3902-4610-ac6e-45c01236a230
235c1960-ae8c-4a50-b7c9-99a5bbfac71f	1	2018-03-14 15:32:30.957+08	2018-03-14 15:32:30.957+08	5d399cb2-7e5a-4a27-bff0-e1769f43499d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3696cf22-f9b3-4cb9-9b56-bd074a7d5e89	1	2018-03-14 15:32:44.476+08	2018-03-14 15:32:44.476+08	aa6f3b0e-9bd2-41e8-801d-730aca3e32fb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
beca9f91-8832-47fa-aa7f-ef70d8d241ac	1	2018-03-14 15:54:05.9+08	2018-03-14 15:54:05.9+08	28d8942e-d1ab-40ee-878a-c3b2f60da896	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5c3e5d1b-6ebd-4f19-96ff-58ebf7b73141	1	2018-09-26 14:38:16.185+08	2018-09-26 14:38:16.185+08	7475ac58-b627-442e-b8fc-259c0c1561e7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
481e9d5e-986b-4e38-897f-dcbadfddd0b2	1	2019-04-29 15:49:13.025+08	2019-04-29 15:57:08.78+08	dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b5c94690-f48a-4b07-92d3-78ff4c72866a	1	2018-11-20 15:19:51.009+08	2018-11-20 15:19:51.009+08	0209176c-7c91-4fe0-9a00-e751fe24c8f8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
38f9bd20-5149-47ed-90bb-43740eda51d2	1	2018-11-24 15:49:28.023+08	2018-11-24 15:49:28.023+08	09ebfc15-19c9-4e5f-bacb-5e81ec5ef026	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c2c7492f-5032-46e8-a136-2eca48b246f8	1	2018-12-06 11:09:50.99+08	2018-12-06 11:09:50.99+08	424f45f6-916c-4383-bce4-c71153f82e63	1aa841f1-d3fb-4523-9b54-e601d350c745
76902a4e-8831-4253-ac3c-9a7be5c855b1	1	2018-12-07 17:22:02.566+08	2018-12-07 17:22:02.566+08	2bbdef47-01cb-401b-ae49-c4b7bad46d36	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0d45b316-620c-4ceb-b7f8-ce526e426f84	2	2018-12-11 17:15:13.76+08	2018-12-11 17:15:13.76+08	d8de8739-f146-41e0-877e-747f30ac59a7	d0e8f529-c1bf-4146-beef-cd3056ea9787
78911adf-c9d2-4092-b240-73c277688e2e	2	2018-12-13 15:31:50.776+08	2018-12-13 15:31:50.776+08	50d3cb43-638b-4833-a401-f526d1cbbc9e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b0d8fcf8-afdf-4196-88de-97ac045c0f54	1	2018-12-14 15:48:01.103+08	2018-12-14 15:48:01.103+08	164528dd-81d3-435b-a4cd-dc328abbe3ba	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e93fe806-fdc8-4e26-bb4b-9bfb860328e4	2	2019-04-29 15:49:13.022+08	2019-04-29 15:57:49.636+08	dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3ced8ff2-50b3-487c-9d04-92a3ba8716c6	1	2019-05-09 09:58:07.891+08	2019-05-09 09:58:07.891+08	f753602f-9889-47cc-a42c-2905bdaab97e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3d62206d-c8ae-4dde-9474-0e6b2786f684	1	2018-12-13 15:31:50.772+08	2018-12-15 16:44:32.18+08	50d3cb43-638b-4833-a401-f526d1cbbc9e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
405c8685-171a-43e9-8b38-09c82435cba1	1	2019-05-09 17:23:15.204+08	2019-05-09 17:23:15.204+08	7802e3d3-ffbf-4146-954f-a67f1cbfb41c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4babe510-4919-4c08-9d00-c2fbbb5743c1	1	2019-02-25 14:10:58.942+08	2019-02-25 14:10:58.942+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2db0bca2-23d9-4090-8ca8-30ff8699b103	1	2019-02-25 14:10:58.947+08	2019-02-25 14:10:58.947+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	d0e8f529-c1bf-4146-beef-cd3056ea9787
7d9f19cb-ea57-440b-9651-dbf601f1f3a1	1	2019-02-25 15:39:43.184+08	2019-02-25 15:39:43.184+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	1aa841f1-d3fb-4523-9b54-e601d350c745
504e3c9b-603d-4118-a370-217347a4324c	1	2019-02-25 15:39:43.186+08	2019-02-25 15:39:43.186+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	d0e8f529-c1bf-4146-beef-cd3056ea9787
ca7f0328-2a8d-4c73-b9ea-bd1565e548e4	1	2019-02-25 15:43:06.977+08	2019-02-25 15:43:06.977+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	1aa841f1-d3fb-4523-9b54-e601d350c745
b00d5e02-4a5f-4617-a233-3c6951697271	1	2019-02-25 15:43:06.98+08	2019-02-25 15:43:06.98+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	d0e8f529-c1bf-4146-beef-cd3056ea9787
99d2be00-995d-4591-92d5-68cfedb384d4	1	2018-10-24 15:16:44.643+08	2019-02-27 10:00:04.398+08	3ad4be85-c6f9-46b8-97dd-39d01e4ef858	15b373b0-30f8-471e-8900-cb62e28d0e50
95bb977a-fef4-4236-b1df-71ec5e232327	1	2019-03-05 13:35:31.069+08	2019-03-05 13:35:31.069+08	06f5aa07-d8ae-4621-9db2-278fb653ddcd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f0d93d00-26d0-4031-ae2c-d9f951d701da	1	2019-03-06 09:32:38.16+08	2019-03-06 09:32:38.16+08	3b7ca159-32d0-4c74-8f84-591774636dc5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
67f96afc-968b-41f5-9647-47cb8d81e798	2	2019-03-06 09:32:38.164+08	2019-03-06 09:32:38.164+08	3b7ca159-32d0-4c74-8f84-591774636dc5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
749bc501-a3f2-4fa2-be05-e916ef8ff484	1	2019-03-15 14:35:35.867+08	2019-03-15 14:35:35.867+08	df22cddf-5a50-41f7-980a-0bbef6aeb763	c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
05eb00de-228e-42e3-8fba-4540b8a83436	1	2019-03-25 11:24:21.012+08	2019-03-25 11:24:21.012+08	3feb218e-5b82-496a-9f57-71be58552c0d	0d963823-0c01-40c1-acc4-74d4eaaea996
c8c0ffa9-442b-4a69-9ea3-ef44ce7d3bbe	2	2019-03-27 10:04:24.014+08	2019-03-27 10:04:24.014+08	360a9975-3171-4f12-b47a-6f57bdf76dfe	68238334-fea4-4bc0-b1cd-98456c41faab
b5f9869d-556b-4c1e-a022-5e1dc1538144	1	2019-03-27 10:17:10.457+08	2019-03-27 10:17:10.457+08	c3eaf904-6808-4fde-a795-474b0128fe5f	68238334-fea4-4bc0-b1cd-98456c41faab
7bc43383-0e2a-41b4-875c-ac3aef700e59	1	2019-04-28 17:41:50.413+08	2019-04-28 17:41:50.413+08	5a46e837-7b8f-4cef-9951-969680cb65db	3dfadb0e-7608-49e1-aa43-24f7442b424a
36fdc7bc-6466-404f-b5ce-3fb9a1c76a7a	2	2019-04-28 17:41:50.416+08	2019-04-28 17:41:50.416+08	5a46e837-7b8f-4cef-9951-969680cb65db	9a1540b6-fea8-4bc0-8090-296b05f87c4a
35e02a89-9c94-4426-aeb2-86d112f36942	1	2019-04-28 11:24:32.856+08	2019-04-29 15:08:52.676+08	d3c271ff-22cb-4938-8c5f-c63484107a38	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
c1ae7a2c-395e-47ee-a6c7-1789ac8e0720	1	2019-04-30 09:49:47.679+08	2019-05-07 09:17:00.099+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	3f912f2c-18f1-4563-9043-dc271141fc55
758e0b8e-cb3b-47b5-90f1-27debcd07c7a	1	2019-05-13 11:18:59.492+08	2019-05-13 11:18:59.492+08	0cbb0bb5-1c3c-4fc8-94a1-981c026350f8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4699c34f-7862-41fe-bbe3-b86681abd493	1	2019-05-13 16:27:13.642+08	2019-05-13 16:27:13.642+08	6151fdf6-4bb4-466e-b727-56b68ebf43e1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e94758b3-a6a6-4116-921c-8b7050cbada3	1	2019-05-14 14:10:38.857+08	2019-05-14 14:10:38.857+08	d634c358-000d-4c53-8c4b-0f411b4a52c3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a3f8ee67-dc1d-42dc-b7c8-19418d949d49	1	2019-05-14 16:57:37.946+08	2019-05-14 16:57:37.946+08	ff67a769-94ed-4f3d-b944-b1f4d4468eec	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1d0404d7-be40-4099-b270-b86b7952435c	1	2019-05-15 10:32:01.142+08	2019-05-15 10:32:01.142+08	6474815f-e86c-4909-966f-5fb6efc5c674	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d6faad75-a8a6-4eaf-85ed-30c0d9992e12	1	2019-05-22 10:38:30.966+08	2019-05-22 10:38:30.966+08	721eaa20-a7b1-457b-a5b3-f5eb9b313129	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45e26ce6-7b9b-4125-8c71-dc8b496c5a3b	2	2019-05-22 10:38:30.969+08	2019-05-22 10:38:30.969+08	721eaa20-a7b1-457b-a5b3-f5eb9b313129	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e508cf8c-eafe-4269-a3e4-64fc8707d942	1	2019-02-25 15:43:06.974+08	2020-04-08 15:02:18.229+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
434907cf-7398-4d18-bdb8-7649660e6511	1	2019-02-25 15:39:43.181+08	2020-04-08 15:09:02.141+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
71a44ffa-c49f-4c12-8112-50ba20100e20	1	2018-09-07 09:46:01.469+08	2018-09-07 09:46:01.469+08	be5be8af-c339-4f15-b2b7-0f16e1e51792	e4049f35-3902-4610-ac6e-45c01236a230
c0e552fb-ad46-451e-a33c-adc8fd3a7f24	1	2018-09-07 10:55:19.797+08	2018-09-07 10:55:19.797+08	97078fa2-e944-487b-8913-e3c2c33c6ff0	e4049f35-3902-4610-ac6e-45c01236a230
cf1e81d7-8fd6-4a0a-925e-c4a3bd9f2db4	1	2018-03-14 15:32:53.593+08	2018-03-14 15:32:53.593+08	4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
41221de5-8b11-41f5-a41f-d050ea705626	1	2018-09-26 17:10:21.449+08	2018-09-26 17:10:21.449+08	7737cd79-82ca-472e-ba8c-5ed79fde2e70	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f3fadba7-5ddb-4dcd-94d1-5b2d5f01125f	1	2018-11-20 15:38:42.528+08	2018-11-20 15:38:42.528+08	b349f69a-d7bb-4bee-aa65-6d250e1a7ae8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9585b3c2-bb23-4cd5-8f4e-684ecdb933f2	1	2018-11-24 17:43:05.354+08	2018-11-24 17:43:05.354+08	780ffe7d-7369-4d2f-9184-32790466f2ba	1aa841f1-d3fb-4523-9b54-e601d350c745
eaf50efd-3be3-4815-ab62-cfd1e2d77bed	1	2018-12-06 11:26:30.175+08	2018-12-06 11:26:30.175+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	1aa841f1-d3fb-4523-9b54-e601d350c745
2cadb449-7dfc-4c3c-a468-c568c8ea7e62	1	2018-12-07 17:22:03.071+08	2018-12-07 17:22:03.071+08	fac96717-3818-4839-aedc-5dbb6c1c62f2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ad2f6401-76d2-4a89-9757-93f0be9a0ce4	2	2018-12-14 17:47:13.814+08	2018-12-14 17:47:13.814+08	164528dd-81d3-435b-a4cd-dc328abbe3ba	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c6c0510c-e43e-49e1-9bf8-f34decd08b41	2	2019-02-22 10:39:46.787+08	2019-02-22 10:39:46.787+08	b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	7697235e-a619-4da5-ac6e-9a76a6e59a78
5ac785dd-b1d2-4072-ba26-4177d113aaaf	1	2018-12-13 15:33:20.401+08	2018-12-15 12:12:01.462+08	6d4fda56-b81c-4873-9c75-10257aaf7254	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
44af48ad-3421-4c1f-8bca-d1d7d5e70909	1	2018-12-18 13:51:36.291+08	2018-12-18 13:51:36.291+08	bfd93522-374e-4c12-b203-e02ff040a821	9a1540b6-fea8-4bc0-8090-296b05f87c4a
10510cea-5771-4c3f-bd64-a46fde4168ff	2	2018-12-18 13:51:36.297+08	2018-12-18 13:51:36.297+08	bfd93522-374e-4c12-b203-e02ff040a821	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
16b8f107-2281-418f-8ca7-72bce6fb7b63	1	2018-12-20 14:56:36.688+08	2018-12-20 14:56:36.688+08	9e3cc14a-915c-4fd2-bb82-35360798cb23	9a1540b6-fea8-4bc0-8090-296b05f87c4a
aff0fe49-8082-44aa-83e2-49633a1a1b54	2	2018-12-20 14:56:36.691+08	2018-12-20 14:56:36.691+08	9e3cc14a-915c-4fd2-bb82-35360798cb23	12cbda5e-cdad-4e5e-91b8-4489f816f00d
85ec3e83-333d-44b7-8261-b91e9606e9d5	1	2018-12-24 11:48:02.121+08	2018-12-24 11:48:02.121+08	fc561f5f-92c8-4549-8e02-dd01dd276aef	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bb9bad8b-bb99-4fcd-bfe1-d6d85cf31b47	1	2019-01-04 15:34:26.871+08	2019-01-04 15:34:26.871+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	7667c2d9-3c04-4818-bfeb-42f43b60af77
a0c5947b-4714-4987-84d5-da7399f0e29d	1	2019-01-04 15:34:26.875+08	2019-01-04 15:34:26.875+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8f6bb3ed-e811-4069-8476-45fa0cfc6f17	1	2019-01-07 11:08:30.145+08	2019-01-07 11:08:30.145+08	f7257ee9-fbb6-4cd9-a622-3f3a5c3cff2e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7abdf473-6d6f-469a-a0c3-e57738d022eb	2	2019-01-09 15:48:00.74+08	2019-01-09 15:48:00.74+08	36f70703-df53-42ae-a8da-e001d8215fd8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fe3b0041-aabf-4046-b8be-3b05ee46de20	1	2019-01-14 11:53:46.237+08	2019-01-14 11:53:46.237+08	969043a0-c1f9-49c2-9f36-c029a03a9c87	66537b16-1e7d-4823-b03e-676459f5891d
25d28c61-1984-41c9-9543-be1517393c6e	1	2019-01-18 14:06:05.479+08	2019-01-18 14:06:05.479+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f19ee44f-9d24-4217-ade5-37ed7ca87040	2	2019-01-18 14:06:05.482+08	2019-01-18 14:06:05.482+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d948a2a9-74a8-46e1-963e-bf0f6134764f	1	2019-01-24 09:47:37.03+08	2019-01-24 09:47:37.03+08	17b4a482-830c-44e4-be09-1a9cac67c1e7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1cd1cb16-1d8a-4d20-be3f-548f7b177b1b	1	2019-01-28 10:00:29.635+08	2019-01-28 10:00:29.635+08	a9f88745-32d0-4068-bcd3-6735e90b15a0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c1fd9e76-3d2c-4150-919c-c529a57581c0	1	2019-01-25 16:07:25.616+08	2019-04-01 10:34:35.671+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	6c0898f5-e8da-495b-8718-6efba367e3f1
5f6f7e78-e8a6-411e-8c41-b7cc3fec8898	1	2019-02-25 11:38:44.893+08	2019-02-25 11:38:44.893+08	ef68a37c-37fa-40d7-8537-dcbc64eaf1e1	452e3349-a87b-4b5b-97f9-7dc730f910fa
42fd4a7a-d513-4309-995f-cc109be9b8a9	2	2019-01-29 10:31:34.826+08	2019-01-29 10:32:53.082+08	d8de8739-f146-41e0-877e-747f30ac59a7	7667c2d9-3c04-4818-bfeb-42f43b60af77
b338dcdb-b7bd-4265-a7fc-63bcae5b5597	1	2019-01-25 16:07:25.62+08	2019-01-29 10:33:57.097+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	7667c2d9-3c04-4818-bfeb-42f43b60af77
4d9db838-043f-4513-8e70-c976017fc1f7	1	2019-01-31 11:35:16.834+08	2019-01-31 11:35:16.834+08	c9459443-e9d6-48eb-b37d-d25dfb8faaac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5ded3a70-6e94-40c4-8d91-9661b286feff	1	2019-02-25 13:31:57.627+08	2019-02-25 13:31:57.627+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7839c3b9-d403-4853-97e3-475e04fafdd6	1	2019-02-25 13:31:57.63+08	2019-02-25 13:31:57.63+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	d0e8f529-c1bf-4146-beef-cd3056ea9787
87b6ed6d-58cf-4afa-ab03-be2ebce8c7fb	1	2019-02-25 14:12:02.943+08	2019-02-25 14:12:02.943+08	35088e4d-f42e-4324-8237-bedb617ee489	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5328d9ca-9004-4ad3-a806-62b8f0b5b82b	1	2019-02-25 14:12:02.947+08	2019-02-25 14:12:02.947+08	35088e4d-f42e-4324-8237-bedb617ee489	d0e8f529-c1bf-4146-beef-cd3056ea9787
b4d4a7fc-ee80-47cb-941c-661474fa55d9	1	2019-02-25 15:44:37.096+08	2019-02-25 15:44:37.096+08	998a52d3-f5ee-4d52-997f-1865b390e26b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
96af8bbe-5a34-4604-83e1-99d7e098b3a7	1	2019-02-25 15:44:37.099+08	2019-02-25 15:44:37.099+08	998a52d3-f5ee-4d52-997f-1865b390e26b	1aa841f1-d3fb-4523-9b54-e601d350c745
1ff7c3fe-925a-4554-9f06-dee7dfd80357	1	2019-02-25 15:44:37.102+08	2019-02-25 15:44:37.102+08	998a52d3-f5ee-4d52-997f-1865b390e26b	d0e8f529-c1bf-4146-beef-cd3056ea9787
2905fd0c-f857-4da4-871f-de9a6be87f04	1	2019-03-15 14:36:32.762+08	2019-03-15 14:36:32.762+08	ce1e7a12-8f26-4f77-8610-4871a40cfe98	876d87b1-cccb-4847-80ea-dabfc20a2175
dd784afa-bc27-44c3-b5b1-3c2fe92b868f	1	2019-03-19 15:25:06.965+08	2019-03-19 15:25:06.965+08	cbd0eeaa-e06e-4933-9394-86c48eacae95	b425fff8-940f-467d-81f7-b456d8ad0b22
31c10c64-1f65-4f48-83c9-36df059d2801	1	2019-03-25 11:32:57.578+08	2019-03-25 11:32:57.578+08	765f6712-b911-4681-9d31-ce9ee3a45702	c3c19462-3221-4cca-8288-13f960d7ea5b
468b72df-d8b5-40fe-a8cb-b8013e9c3194	2	2019-03-25 11:32:57.58+08	2019-03-25 11:32:57.58+08	765f6712-b911-4681-9d31-ce9ee3a45702	0d963823-0c01-40c1-acc4-74d4eaaea996
0bdad9e1-ec85-44fd-850e-954954381313	1	2018-09-07 11:09:31.032+08	2018-09-07 11:09:31.032+08	afb69a31-61c2-417c-b62e-c41730b3e6a1	e4049f35-3902-4610-ac6e-45c01236a230
7161b852-38ad-46db-aee9-b3a2363e4d65	1	2018-03-14 15:53:53.998+08	2018-03-14 15:53:53.998+08	4d3ecec5-32b4-4d9b-aa02-a08275dd10c7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
efe06b26-7f9a-4057-801e-7748498a459e	1	2018-03-14 16:17:20.813+08	2018-03-14 16:18:08.841+08	1f6ae927-989f-48b3-9fa4-18518326953b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f8e61314-d600-4d78-b66c-ed7b8fec6565	2	2018-03-15 13:45:07.085+08	2018-03-15 13:45:07.085+08	fa0123d0-7db7-4412-9670-53175d0c2c40	d07a1774-312c-4497-adbb-6e3da9410cb6
8ec909d3-5d38-410c-8e0c-ef9e2d5d3417	1	2018-03-15 13:45:07.088+08	2018-03-15 13:45:07.088+08	fa0123d0-7db7-4412-9670-53175d0c2c40	3dfadb0e-7608-49e1-aa43-24f7442b424a
66d2ff10-fea7-4539-873e-c5be6ca52424	1	2018-03-15 13:49:32.761+08	2018-03-15 13:49:32.761+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	d07a1774-312c-4497-adbb-6e3da9410cb6
c86adfdc-485f-4d92-aeed-ca78b6032132	2	2018-03-15 13:49:32.764+08	2018-03-15 13:49:32.764+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	d4f271b6-567a-4880-beb0-161b33ac2094
a2bfe3d7-6a63-4dc1-95c2-f33509226372	2	2018-03-15 13:49:32.767+08	2018-03-15 13:49:32.767+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	d5f2066b-b4d8-4e26-8991-0c068495e2c9
c8bfa700-20bc-46d4-b876-a46a392e04a6	1	2018-09-07 11:18:27.982+08	2018-09-07 11:18:27.982+08	6c5b2840-b01d-4bb3-8ab1-a831b3880184	e4049f35-3902-4610-ac6e-45c01236a230
40734640-74c6-40b2-9646-2c1f7a876997	1	2018-03-15 14:28:52.098+08	2018-03-15 14:28:52.098+08	4a0f1cd5-1e52-4ec3-8976-0b1f82031d28	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a088573a-f033-41a8-acb0-6670bcfac941	1	2018-09-07 11:22:10.522+08	2018-09-07 11:22:10.522+08	db345382-4b53-424d-b563-909bfe0a36cd	e4049f35-3902-4610-ac6e-45c01236a230
f9ae88f7-8101-48ad-88d2-89005d53f830	1	2018-03-15 14:36:49.755+08	2018-03-15 14:36:49.755+08	d52af3c0-c4b0-4091-96c6-ac3e97535f92	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eceb18c6-6b90-4ab3-9cb4-c4e198751362	1	2018-03-15 16:51:58.433+08	2018-03-15 16:51:58.433+08	b55b3b15-5db9-4946-a5a9-b0d352de6a24	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
553c1f7f-1497-4a65-be6b-9cbf4debda54	1	2018-03-15 16:52:12.158+08	2018-03-15 16:52:12.158+08	63429c67-5b55-4b88-998c-65d4464623c8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ff6cf1e7-02fb-4238-a169-4eeae1daf382	1	2018-09-26 17:10:27.037+08	2018-09-26 17:10:27.037+08	97c2157a-e4ee-41aa-b2ca-c8745fdda755	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0dc52b0a-0c56-4a29-962e-7298204c60d5	1	2018-03-15 17:11:09.928+08	2018-03-15 17:11:09.928+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7a9c7db2-f131-47a3-aa64-196cafd2600b	2	2018-03-16 09:57:17.069+08	2018-03-16 09:57:17.069+08	c841ad96-ea6e-4050-b317-a0d79fecbead	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6590317a-c6c4-4555-98f7-096aef3d4edc	1	2018-03-16 09:57:17.066+08	2018-03-19 14:07:31.288+08	c841ad96-ea6e-4050-b317-a0d79fecbead	3dfadb0e-7608-49e1-aa43-24f7442b424a
c34a2dbd-4a84-497c-9ca7-026687a37717	1	2018-03-19 14:57:03.364+08	2018-03-19 14:57:03.364+08	717279c9-81b5-4bfe-8dd3-906297d70e41	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d376a52a-bd48-42a2-9c78-23f1eac3eddc	1	2018-03-19 16:10:23.475+08	2018-03-19 16:10:23.475+08	099c6283-519f-4946-aa9d-f0059a76b832	d0e8f529-c1bf-4146-beef-cd3056ea9787
73c755a0-b4de-4f3b-95de-a4d13d1b5bbe	1	2018-03-16 11:58:51.503+08	2018-03-23 16:27:46.559+08	c8fd3080-b416-4381-8bcc-e84c12471281	ad4f23f8-9213-4194-97ce-209a34596649
183d4894-be30-4daa-9cf6-a257ec40bf3f	1	2018-03-20 17:29:17.043+08	2018-03-20 17:29:17.043+08	b3b4f0f1-7cdc-4892-9e6a-f4936931472c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
858ff33f-056f-4229-a01f-23fa0fb2cf1e	1	2018-03-16 11:37:21.293+08	2018-03-23 15:09:26.575+08	61f09dd0-ba56-40e4-a2d1-45dab1143900	ad4f23f8-9213-4194-97ce-209a34596649
a714fc0f-3e11-488c-a3da-b07367d98120	2	2018-03-16 13:57:33.028+08	2018-03-23 15:11:13.159+08	86cc781e-642b-40ee-b49f-1e94aec669ae	ad4f23f8-9213-4194-97ce-209a34596649
32834f4d-6653-478f-8917-40df0f0706ab	1	2018-03-16 13:57:33.024+08	2018-03-23 15:11:33.247+08	86cc781e-642b-40ee-b49f-1e94aec669ae	3dfadb0e-7608-49e1-aa43-24f7442b424a
0a10f2ad-1873-4c11-82dd-98004c3690fe	1	2018-03-20 09:46:35.551+08	2018-03-23 15:12:54.569+08	526c42ea-d9a9-48d1-9862-b3118a7ef211	ad4f23f8-9213-4194-97ce-209a34596649
92f24f51-71d8-4518-9321-cffca08d97fb	1	2018-03-23 16:05:01.462+08	2018-03-23 16:05:01.462+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	d4f271b6-567a-4880-beb0-161b33ac2094
3ea1c8da-5416-457d-8303-88e25c7b1c37	1	2018-03-23 16:11:24.547+08	2018-03-23 16:11:24.547+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	d4f271b6-567a-4880-beb0-161b33ac2094
9aa12a3b-8017-406f-8a88-289e1e1aa27c	1	2018-03-21 09:54:46.401+08	2018-03-23 16:23:51.633+08	12a0ae21-df74-42b4-94ce-492125b941bd	ad4f23f8-9213-4194-97ce-209a34596649
fa4b84e2-60d6-4d39-8ec2-be9eae52a7f7	1	2018-03-23 16:32:39.684+08	2018-03-23 16:32:39.684+08	2e2456a6-9738-456c-abf1-94d5ebad124a	d4f271b6-567a-4880-beb0-161b33ac2094
b53dabf5-8d79-4003-ac2f-05cb858dda67	1	2018-03-23 16:36:53.803+08	2018-03-23 16:36:53.803+08	0f4f59de-cde7-4aec-a402-703e5426bb76	d4f271b6-567a-4880-beb0-161b33ac2094
87361a2b-a3b3-4fea-97ba-1cc719e1125f	1	2018-03-23 17:02:05.696+08	2018-03-23 17:02:05.696+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	d4f271b6-567a-4880-beb0-161b33ac2094
52772d68-c0f8-4950-88c2-87fe5c350736	1	2018-03-23 17:06:57.097+08	2018-03-23 17:06:57.097+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	d4f271b6-567a-4880-beb0-161b33ac2094
63dd0fd9-2dad-4755-93df-c2ade460af7a	1	2018-03-23 17:57:47.857+08	2018-03-23 17:57:47.857+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	d4f271b6-567a-4880-beb0-161b33ac2094
b3a896a0-6180-448e-996e-5cc3d9775f7e	1	2018-03-25 19:20:49.994+08	2018-03-25 19:20:49.994+08	388cca81-7338-40d3-ba1f-89ec9d5aa2f7	ad4f23f8-9213-4194-97ce-209a34596649
3a9e7afb-b301-4ca5-b24c-a8625767cb5c	1	2018-03-26 10:52:50.966+08	2018-03-26 10:52:50.966+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	d5f2066b-b4d8-4e26-8991-0c068495e2c9
0b7eb99a-e67b-405c-969b-5930963ded34	1	2018-03-26 11:16:11.491+08	2018-03-26 11:16:11.491+08	02513eed-ba94-456b-86e0-89ea996b879d	d5f2066b-b4d8-4e26-8991-0c068495e2c9
71c9ba8a-8861-4e8a-b47b-be8a862551c8	1	2018-03-26 11:16:13.094+08	2018-03-26 11:16:13.094+08	2e0d00cd-a321-4504-b716-41813848cbdb	d5f2066b-b4d8-4e26-8991-0c068495e2c9
29f74d0b-7785-443e-856b-9d094d302afd	1	2018-03-26 11:24:13.128+08	2018-03-26 11:24:13.128+08	1bda935e-56de-4365-b60e-f02d19299795	d5f2066b-b4d8-4e26-8991-0c068495e2c9
afa7245c-e631-45a5-b115-35e2ca8c2727	1	2018-03-26 11:27:33.447+08	2018-03-26 11:27:33.447+08	d31031ab-0237-41a5-adc0-867c1e9952f7	d5f2066b-b4d8-4e26-8991-0c068495e2c9
d5069096-9653-4d8f-a0dc-6dece2a96ea2	1	2018-03-26 11:27:35.438+08	2018-03-26 11:27:35.438+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	d5f2066b-b4d8-4e26-8991-0c068495e2c9
f0a71c11-60b9-4c93-a634-379547afa6e9	1	2018-03-26 11:30:25.43+08	2018-03-26 11:30:25.43+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	d5f2066b-b4d8-4e26-8991-0c068495e2c9
41f16658-3046-4a0a-bdc1-9e3052e8d392	1	2018-03-26 11:16:13.091+08	2018-06-25 10:41:47.336+08	2e0d00cd-a321-4504-b716-41813848cbdb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
41996fc6-d698-4c07-a88a-b124494e1469	1	2018-03-26 11:27:33.444+08	2018-06-25 10:42:30.8+08	d31031ab-0237-41a5-adc0-867c1e9952f7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f45c1c35-7bfc-430b-b02c-101650805f41	1	2018-03-26 11:27:35.436+08	2018-06-25 10:42:51.797+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b3591c45-4238-49e6-9467-c68e0013140e	1	2018-03-26 11:30:25.427+08	2018-06-25 10:43:13.202+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6e103548-19ee-4fec-a3fc-48f0c30b7a0d	1	2018-03-26 11:35:23.087+08	2018-03-26 11:35:23.087+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	d5f2066b-b4d8-4e26-8991-0c068495e2c9
80da1e72-1b76-4cf7-9318-ad8995f278c0	1	2018-03-26 11:35:23.206+08	2018-03-26 11:35:23.206+08	aab61193-270e-4d06-9bdf-9da5194c744a	d5f2066b-b4d8-4e26-8991-0c068495e2c9
dd20c30f-b6c1-48bd-8033-6a74226db443	1	2018-09-10 10:22:20.294+08	2018-09-10 10:22:20.294+08	7a741fa4-a643-495d-bb49-443ec2df29b9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
01d7db4f-1d4f-48ad-9a55-f99c88c7d993	1	2018-09-10 17:11:57.976+08	2018-09-10 17:11:57.976+08	7a741fa4-a643-495d-bb49-443ec2df29b9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
da1ba9f2-1f71-49d3-8aa5-9f5b8b82758b	1	2018-03-26 11:35:22.725+08	2018-06-25 10:43:35.128+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
43434057-77b8-47ae-998b-5a49df399d30	1	2018-03-26 11:35:23.204+08	2018-06-25 10:44:28.544+08	aab61193-270e-4d06-9bdf-9da5194c744a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4b7343df-51ed-4df2-b33c-921f78f8eeae	2	2018-09-26 17:10:27.04+08	2018-09-26 17:10:27.04+08	97c2157a-e4ee-41aa-b2ca-c8745fdda755	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d410a566-edaa-4fd8-9f08-2b167893d872	1	2019-02-25 15:46:09.565+08	2019-02-25 15:46:09.565+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8cb76a98-9a11-4237-abb7-d6ef25643d0a	1	2018-10-26 16:26:05.543+08	2018-10-30 19:12:19.718+08	d5bfb91e-3d09-4068-ac33-5974e8b7f039	5cc45782-5d73-4354-b2c1-4904e284c95b
b2990d11-a7bd-473c-902f-ba1988141462	2	2018-11-20 15:40:08.434+08	2018-11-20 15:40:08.434+08	b349f69a-d7bb-4bee-aa65-6d250e1a7ae8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ae1ec7b9-1bfa-47d0-b4f9-7f1f90dab416	1	2018-11-26 11:43:09.69+08	2018-11-26 11:43:09.69+08	59f09a3b-57f2-46ee-a2c7-8bba3e704794	9a1540b6-fea8-4bc0-8090-296b05f87c4a
36ed02fa-1e61-4b6f-8310-80a09531bd46	1	2018-11-28 15:04:48.334+08	2018-11-28 15:04:48.334+08	acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb	3dfadb0e-7608-49e1-aa43-24f7442b424a
25fb0236-2f28-42fe-bf21-e6506e5efe9d	2	2018-11-28 15:04:48.336+08	2018-11-28 15:04:48.336+08	acd2fd97-bd2a-4cad-9c11-1e4267d0b9fb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7812e889-d184-4f4c-be6d-ce2a956aa747	1	2018-12-03 13:54:10.245+08	2018-12-03 13:59:08.194+08	7575abc3-ef50-40ce-90c4-66fb308cf20c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0ef9c682-3630-4317-8dc4-0b6fa49142d1	1	2018-12-06 11:37:00.477+08	2018-12-06 11:37:00.477+08	d2a5375c-0240-4435-9b8f-a62372fafaca	1aa841f1-d3fb-4523-9b54-e601d350c745
2df285e9-afc2-451a-94b0-6d7435d7005a	1	2018-12-07 17:22:04.452+08	2018-12-07 17:22:04.452+08	9dac79b5-8173-4081-abff-37f65c42b0c6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
de0e5741-ccb8-4de2-b764-fba43324662c	1	2018-12-18 16:35:54.027+08	2018-12-18 16:35:54.027+08	e376bde0-8e4f-493d-a03e-98b4b27acec0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b6ec7cc4-efa7-4c35-a8ab-968845f3da43	1	2018-12-20 14:58:02.432+08	2018-12-20 14:58:02.432+08	f09a8627-9e84-489e-86f5-72522b126e74	12cbda5e-cdad-4e5e-91b8-4489f816f00d
225a2a41-62a1-4c65-b64b-a017f4e5ccd5	1	2018-12-15 11:36:54.19+08	2018-12-21 17:02:41.248+08	495526a7-7701-4e9c-8dfd-bbfd7e0b163b	c00008f7-06d9-4907-b2e7-619374116b36
0560b094-8bc0-4d1e-9495-466f241e7391	1	2018-12-24 11:53:24.869+08	2018-12-24 11:53:24.869+08	6f051a40-1c14-47c6-8124-3077f27facc5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
63041b9e-d1bc-4876-b127-ae8d3470301d	1	2018-12-28 11:02:10.359+08	2018-12-28 11:02:10.359+08	e6c538b8-f82a-4e8f-9d47-529a835fc779	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7e40c49c-634a-47a1-bfb4-5d363af2cae4	1	2019-01-07 17:23:55.777+08	2019-01-07 17:23:55.777+08	1824bec3-15cd-498d-b2c1-b3cc804a1021	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
edee803b-2b24-4f36-b154-23ce80793f4d	2	2019-01-14 11:54:28.927+08	2019-01-14 11:54:28.927+08	969043a0-c1f9-49c2-9f36-c029a03a9c87	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a09fea95-bdee-4b25-b46d-ae2352c44000	1	2019-01-18 16:57:11.298+08	2019-01-19 13:19:51.363+08	0794ccbd-2a6e-49b6-9b42-abf93957b33c	71458c57-c197-4b3c-9171-2cdc5658201e
d407820e-e638-40cc-ba07-3175574f34f7	1	2019-01-24 11:51:28.169+08	2019-01-24 11:51:28.169+08	03f53a90-43a0-47d6-9183-edfb825a09e5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a30ffb26-d605-495a-9e8b-00a0c6b534ad	1	2019-01-28 10:50:57.666+08	2019-01-28 10:50:57.666+08	d0fcad31-8656-4b67-9530-1519960defec	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fcfbd781-138a-4298-a573-df9082d9914e	1	2019-01-29 10:56:26.78+08	2019-01-29 10:56:26.78+08	6020197b-abd9-4ef2-b674-0451a754fe68	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bd61417b-e4c4-4aaa-b475-2bb5422f00a3	2	2019-01-29 10:56:26.784+08	2019-01-29 10:56:26.784+08	6020197b-abd9-4ef2-b674-0451a754fe68	6c047530-0656-4cb4-a416-f4ac00b015f9
243336ba-85c0-4bfa-bb27-55b9928d7ba7	2	2019-01-31 11:35:29.039+08	2019-01-31 11:35:29.039+08	c9459443-e9d6-48eb-b37d-d25dfb8faaac	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
90721552-469c-47cb-a77e-4d3bfffbf6c5	1	2019-02-21 17:19:51.481+08	2019-02-21 17:19:51.481+08	b52fa83f-d3fd-4a8e-b9d5-76ea840aca15	3dfadb0e-7608-49e1-aa43-24f7442b424a
33472f2d-14b8-4de5-9b74-435c692ec885	1	2019-02-25 11:41:29.887+08	2019-02-25 11:41:29.887+08	a97834b4-727b-42ad-9ce0-aede595a5727	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
70d62ce7-a781-4d0f-adb4-b79da0f0febe	1	2019-02-25 11:41:29.891+08	2019-02-25 11:41:29.891+08	a97834b4-727b-42ad-9ce0-aede595a5727	1aa841f1-d3fb-4523-9b54-e601d350c745
e51e5db8-7a14-436c-9b94-487800faf545	1	2019-02-25 11:41:29.894+08	2019-02-25 11:41:29.894+08	a97834b4-727b-42ad-9ce0-aede595a5727	d0e8f529-c1bf-4146-beef-cd3056ea9787
7c448417-3b77-447c-8f48-85c3554d4e49	1	2019-02-25 14:14:48.83+08	2019-02-25 14:14:48.83+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c9e0d0f5-9c30-4188-a161-a46d017455d0	1	2019-02-25 14:14:48.834+08	2019-02-25 14:14:48.834+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	d0e8f529-c1bf-4146-beef-cd3056ea9787
5f07c93b-7d9d-4756-b1ee-849b6a29cc1a	1	2019-02-25 15:46:09.569+08	2019-02-25 15:46:09.569+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	d0e8f529-c1bf-4146-beef-cd3056ea9787
be6b7a73-02b2-4e03-8438-1d2851265d3d	1	2019-02-25 15:46:09.573+08	2019-02-25 15:46:09.573+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	118383e6-1b61-4e15-8dee-a1a2a61b531e
c0ff77a6-4d80-413c-a71b-842314237d20	1	2019-03-15 16:27:38.697+08	2019-03-15 16:27:38.697+08	848b15cb-6357-48eb-979d-a6398d05bd8c	6f9486b4-6b22-4fbd-a73a-9334e711badb
b9a3b789-6f9a-446c-a152-d88301294e5d	2	2019-03-15 16:27:38.701+08	2019-03-15 16:27:38.701+08	848b15cb-6357-48eb-979d-a6398d05bd8c	66a06e5d-a436-4d37-806b-919d8fd1c564
3a008113-cca2-45ec-86df-9f1dada45b38	2	2019-03-15 16:27:38.704+08	2019-03-15 16:27:38.704+08	848b15cb-6357-48eb-979d-a6398d05bd8c	936f5813-db0d-4a2a-a7bc-8d323024140b
385ce4ca-9613-40dc-b62b-b939a0f49f24	1	2019-04-28 11:28:46.196+08	2019-04-29 15:07:42.776+08	28463128-4e0e-4167-8aa6-3c6f5accc368	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
d6efa4d1-c65e-45c2-bd65-45a4a3a9eb5d	1	2019-04-28 11:28:04.774+08	2019-04-29 15:07:54.421+08	3d182049-68c9-440d-adde-b62b71abee38	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
443e2148-f4da-43ee-b65d-7871425558a6	1	2019-04-28 11:25:30.652+08	2019-04-29 15:08:38.921+08	b8061f6d-fe6e-443d-bed9-8b4e7fb81a71	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
e89fa25a-4873-4dc9-ab37-df477d56e76b	2	2019-02-22 15:14:23.575+08	2019-04-29 16:05:08.368+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
174d5f4f-1823-4d8a-977f-39f7b1ace156	1	2018-03-26 11:35:24.357+08	2018-03-26 11:35:24.357+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	d5f2066b-b4d8-4e26-8991-0c068495e2c9
ac8f829d-2206-4e4a-a6b8-5277c03b2c1a	1	2018-03-26 11:35:24.355+08	2018-06-25 10:47:52.807+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d185b76d-f67c-45e7-a3ea-acaef9c07ec6	1	2018-09-10 17:10:05.05+08	2018-09-10 17:10:05.05+08	1c431af0-8407-422f-8823-82fe58af024f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b031bb45-a265-4419-9cbe-332423ba2abc	2	2018-09-10 17:10:05.054+08	2018-09-10 17:10:05.054+08	1c431af0-8407-422f-8823-82fe58af024f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
265f9d4d-51cf-436b-9d43-166ad66c7080	1	2018-09-29 15:42:42.216+08	2018-09-29 15:42:42.216+08	477ce1aa-aaae-40d3-a55e-2d3ef3a38e23	9a1540b6-fea8-4bc0-8090-296b05f87c4a
604da184-9177-4c22-a39d-a0c72af7e904	2	2018-09-29 15:42:42.218+08	2018-09-29 15:42:42.218+08	477ce1aa-aaae-40d3-a55e-2d3ef3a38e23	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
545579d9-9935-4629-a62a-a6dc09848c44	1	2018-10-26 17:54:01.952+08	2018-10-26 17:54:01.952+08	4a91ace7-e5da-44c8-843d-43fb6a130847	9a1540b6-fea8-4bc0-8090-296b05f87c4a
110ef22a-73d0-44dd-ad6f-6a45ceb40cc6	1	2018-11-22 14:43:45.883+08	2018-11-22 14:43:45.883+08	9d5905bc-0969-4032-ad57-69d6490fbc47	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
79878e10-a5ed-4ae1-a9cf-ee24079c0c35	2	2018-11-22 14:43:45.887+08	2018-11-22 15:41:25.285+08	9d5905bc-0969-4032-ad57-69d6490fbc47	8774b4f0-60c1-4c7d-940b-f3a847c2847a
e2b8312f-d75e-4857-a7f8-6d60189e4e73	2	2018-11-26 11:43:48.533+08	2018-11-26 11:43:48.533+08	59f09a3b-57f2-46ee-a2c7-8bba3e704794	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d365d25c-5fbf-4a51-8e0a-7a46b052daf3	1	2018-12-06 11:38:03.408+08	2018-12-06 11:38:03.408+08	d2a5375c-0240-4435-9b8f-a62372fafaca	d0e8f529-c1bf-4146-beef-cd3056ea9787
278e2327-057d-40cf-8780-7cd3af707ed1	1	2018-12-08 15:12:26.599+08	2018-12-08 15:12:26.599+08	0747dcbe-0a49-4db1-ac06-d9a460babdd3	66537b16-1e7d-4823-b03e-676459f5891d
90a7baa6-3124-4a2c-ad12-9415ae86f051	1	2018-12-15 11:42:30.093+08	2018-12-15 12:57:11.471+08	74ca6540-3a33-4157-8629-f00d8750aa78	452e3349-a87b-4b5b-97f9-7dc730f910fa
5baa86e2-f207-486e-a510-137b3b367704	1	2018-12-18 16:35:55.144+08	2018-12-18 16:35:55.144+08	ae5c1f57-7ae4-4515-b6ba-51319d4599ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f671f747-5450-4d50-a757-fc74e75fe965	1	2018-12-20 15:04:51.308+08	2018-12-20 15:04:51.308+08	b2e31dbc-1560-4ab9-8b57-a57a012d5022	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5de53d90-f7f0-4a31-b82b-f6582e38cc39	1	2018-12-24 11:53:26.515+08	2018-12-24 11:53:26.515+08	b92bc45a-bf9b-425f-9747-7caedf0c2784	9a1540b6-fea8-4bc0-8090-296b05f87c4a
614b3b1e-fe7f-4ad3-a9d1-3a40b2cdc1fc	1	2018-12-28 11:07:29.294+08	2018-12-28 11:07:29.294+08	092ae1af-65d0-45dd-a621-17fd26682e7c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0caf32b7-082e-4aa6-bd8a-f6a177eaae26	1	2019-01-07 17:45:50.813+08	2019-01-07 17:45:50.813+08	a81c3314-06e2-428a-bede-88adf880bdd7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a7b23026-3fec-406a-a8a7-66ad91e531bb	1	2019-01-14 15:28:21.352+08	2019-01-14 15:28:21.352+08	ccfcd1c0-1cf5-4123-9be8-ca521b1e79d3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8bdc1373-d05c-4dec-a5b5-eeaeded2b8a0	1	2019-01-19 09:49:48.909+08	2019-01-19 09:49:48.909+08	53ff80a4-bf85-47bd-9351-ad8cbd0121e3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
26574d0f-9eca-4448-8d80-2dfb803e770e	1	2019-02-25 11:42:07.351+08	2019-02-25 11:42:07.351+08	bf5a92b7-59ab-429b-bce7-da858650205e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d1a02c47-887d-406c-9db4-9848330c25c7	1	2019-02-25 11:42:07.356+08	2019-02-25 11:42:07.356+08	bf5a92b7-59ab-429b-bce7-da858650205e	1aa841f1-d3fb-4523-9b54-e601d350c745
cfabebbb-7b37-4862-9dfe-6745ce6c4fa4	1	2019-02-25 11:42:07.359+08	2019-02-25 11:42:07.359+08	bf5a92b7-59ab-429b-bce7-da858650205e	d0e8f529-c1bf-4146-beef-cd3056ea9787
03420b4e-17dc-4a2b-a3be-fec86c8912ce	1	2019-02-25 14:16:02.46+08	2019-02-25 14:16:02.46+08	80342a8c-db6f-40e6-b331-0ae1eca53138	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d176a150-ed6d-4e82-9ae0-cabede0f9d86	1	2019-02-25 14:16:02.464+08	2019-02-25 14:16:02.464+08	80342a8c-db6f-40e6-b331-0ae1eca53138	d0e8f529-c1bf-4146-beef-cd3056ea9787
d775256b-39e7-4c7b-843b-b040a4a8cb3f	1	2019-02-25 15:46:53.769+08	2019-02-25 15:46:53.769+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
26672437-afc7-40c2-9f69-bb2ff009e0da	1	2019-02-25 15:46:53.772+08	2019-02-25 15:46:53.772+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	d0e8f529-c1bf-4146-beef-cd3056ea9787
0fd6829f-47b8-4f06-8d61-7819cf367cb9	1	2019-02-25 15:46:53.774+08	2019-02-25 15:46:53.774+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	1aa841f1-d3fb-4523-9b54-e601d350c745
5602db39-4448-48d0-bd83-5f5c7d153ee9	1	2019-03-15 16:35:52.832+08	2019-03-15 16:35:52.832+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	66a06e5d-a436-4d37-806b-919d8fd1c564
c3311b93-b9ed-4269-93d7-b0ad072e57d5	1	2019-03-19 15:25:15.734+08	2019-03-19 15:25:15.734+08	4ff02b0c-e9de-4687-90b5-0e723ab835fe	b425fff8-940f-467d-81f7-b456d8ad0b22
80628eea-49ed-4c2f-959d-2deb4b670627	1	2019-03-25 11:18:25.744+08	2019-03-25 11:18:25.744+08	2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d	0d963823-0c01-40c1-acc4-74d4eaaea996
d9fb92f0-acdc-4294-bf1b-bd3449d569ea	1	2019-04-28 11:26:12.324+08	2019-04-29 15:08:26.571+08	dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
b2586eb2-81e4-45d5-8232-b6d874663056	1	2019-02-22 11:35:12.144+08	2019-04-29 16:05:57.803+08	d1b35088-9410-4203-924c-75b60634c7c6	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
bc1c265d-4934-4a19-9b3b-b3894639c532	1	2019-02-22 11:35:40.174+08	2019-04-29 16:06:05.204+08	283a3cd5-8593-4b92-a528-bbd35a07b288	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
64b42834-88da-4052-9a4b-d54d2ded8159	1	2019-05-31 16:20:28.342+08	2019-05-31 16:20:28.342+08	28463128-4e0e-4167-8aa6-3c6f5accc368	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
67e8079a-e342-4c82-96d0-5519b7d172eb	1	2019-05-08 17:53:13.474+08	2019-05-08 17:53:13.474+08	1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6721bd30-fd2e-446e-b46c-2d301c9bd8a6	1	2019-05-15 10:48:06.505+08	2019-05-15 10:48:06.505+08	82c4e869-135f-466b-af92-27b7979b1fd2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e4b2eb17-1aa6-425b-8ed3-b6eb62ee862c	1	2019-05-22 16:00:03.717+08	2019-05-22 16:00:03.717+08	d93ae98f-5dbc-45c3-81cf-8f9360a11684	9a1540b6-fea8-4bc0-8090-296b05f87c4a
baa643c7-bfdd-477b-b31f-b5d128cc5281	2	2019-05-22 16:00:03.721+08	2019-05-22 16:00:03.721+08	d93ae98f-5dbc-45c3-81cf-8f9360a11684	9a1540b6-fea8-4bc0-8090-296b05f87c4a
579d559b-7c0e-46ef-9c84-77bc1da70da9	1	2019-05-31 16:22:08.121+08	2019-05-31 16:22:08.121+08	dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4deee1cf-e422-45dc-ae21-00b253538032	1	2019-05-31 16:23:24.298+08	2019-05-31 16:23:24.298+08	c70bf363-fc19-41f9-80df-27a231a1a2bd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
17a5fc51-7701-471a-9ed2-22b64877374a	1	2019-05-31 16:24:16.078+08	2019-05-31 16:24:16.078+08	4068ff34-b211-4386-b274-0a6b12f35b59	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
947b9222-20af-4c12-a0e3-b2ac87fe9f2a	1	2019-05-31 16:25:12.918+08	2019-05-31 16:25:12.918+08	283a3cd5-8593-4b92-a528-bbd35a07b288	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
73e7150f-daff-4342-a1db-41e7eaa4a812	2	2019-06-05 10:58:32.282+08	2019-06-05 10:58:32.282+08	d9b333ed-096a-405a-9c9a-905cd04d2368	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9bf83d9e-9729-4c07-953c-1f5e58760c26	1	2019-06-05 10:58:32.285+08	2019-06-05 10:58:32.285+08	d9b333ed-096a-405a-9c9a-905cd04d2368	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c7a4e95a-ab30-40b7-9706-97af9fd565f8	1	2019-06-06 17:24:55.447+08	2019-06-06 17:24:55.447+08	53070eae-7839-46df-9492-f1b4c0b0b101	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4c7d09a5-8842-4f74-bc03-6b720fbbceef	1	2019-06-11 15:50:05.405+08	2019-06-11 15:50:05.405+08	888fb650-543d-4141-a70e-7dff25dfffe7	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
91981670-d364-4217-8bd4-d5771fbdf651	1	2018-03-26 11:38:24.176+08	2018-03-26 11:38:24.176+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	d0e8f529-c1bf-4146-beef-cd3056ea9787
d13d97cf-bbb8-40d4-83df-7665c341ff35	1	2018-03-26 11:41:39.431+08	2018-03-26 11:41:39.431+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	d5f2066b-b4d8-4e26-8991-0c068495e2c9
44118f25-8b14-49d7-9f1c-ad1ab08e3f31	1	2018-03-26 11:43:22.7+08	2018-03-26 11:43:22.7+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	d5f2066b-b4d8-4e26-8991-0c068495e2c9
1c6314fe-a3cf-4334-b57a-c95efa23fc1b	1	2018-03-26 11:43:22.861+08	2018-03-26 11:43:22.861+08	3aba791d-d6b2-4175-bb20-109f210f4065	d5f2066b-b4d8-4e26-8991-0c068495e2c9
f669551b-cade-498e-bc5e-e1af210678ae	1	2018-03-26 11:43:23.166+08	2018-03-26 11:43:23.166+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	d5f2066b-b4d8-4e26-8991-0c068495e2c9
31b6984c-82fa-4104-9e7d-50bd5a2a3501	1	2018-09-29 15:46:46.724+08	2018-09-29 15:46:46.724+08	d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
28e4fc9b-80c1-4cea-9716-04eca78859bf	1	2018-03-26 11:43:24.2+08	2018-03-26 11:43:24.2+08	f30482b9-b518-4048-8217-bd64158911e6	d5f2066b-b4d8-4e26-8991-0c068495e2c9
3cf4d4c7-c487-43bb-bb7d-65fc6e366033	1	2018-03-26 13:34:41.818+08	2018-03-26 13:34:41.818+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	d0e8f529-c1bf-4146-beef-cd3056ea9787
0b032124-e602-47ce-9feb-4ea8d7b76be4	1	2018-03-26 13:43:47.875+08	2018-03-26 13:43:47.875+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	d0e8f529-c1bf-4146-beef-cd3056ea9787
f13135a3-2817-4988-8939-af1c5a2ac321	1	2018-03-26 13:48:14.673+08	2018-03-26 13:48:14.673+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	d0e8f529-c1bf-4146-beef-cd3056ea9787
0a6471bd-8bf4-4f55-9bff-7d257cd5543c	1	2018-03-26 13:53:22.872+08	2018-03-26 13:53:22.872+08	73a7b800-25d7-41ad-872d-96cc4f9430de	d0e8f529-c1bf-4146-beef-cd3056ea9787
2b3f9f56-bc0b-4d13-a4cc-cfd5d6681f54	1	2018-03-26 13:57:13.721+08	2018-03-26 13:57:13.721+08	65b984f5-c294-49fa-8433-510d38416095	ad4f23f8-9213-4194-97ce-209a34596649
92868b2d-fe4e-4e52-89bc-f0e458bd731b	1	2018-03-26 14:02:25.871+08	2018-03-26 14:02:25.871+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	d0e8f529-c1bf-4146-beef-cd3056ea9787
eb1ac1bd-5461-42b2-90a1-98bc094d7978	1	2018-03-26 14:21:18.709+08	2018-03-26 14:21:18.709+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	d0e8f529-c1bf-4146-beef-cd3056ea9787
e4525921-3f8f-49cb-b1a1-b289cfbce822	1	2018-03-26 14:26:14.473+08	2018-03-26 14:26:14.473+08	780ffe7d-7369-4d2f-9184-32790466f2ba	d0e8f529-c1bf-4146-beef-cd3056ea9787
0f8321e1-4979-4096-a680-84283ae510be	1	2018-03-26 14:29:05.338+08	2018-03-26 14:29:05.338+08	424f45f6-916c-4383-bce4-c71153f82e63	d0e8f529-c1bf-4146-beef-cd3056ea9787
cb53c59b-db7b-4784-bf0c-3904b516ea73	1	2018-03-26 14:37:35.58+08	2018-03-26 14:37:35.58+08	90a2bc12-2214-43ff-9154-9b9212de2c10	d0e8f529-c1bf-4146-beef-cd3056ea9787
545ab4bf-df32-4df2-9299-1749c51dc520	1	2018-03-26 14:44:57.931+08	2018-03-26 14:44:57.931+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	d0e8f529-c1bf-4146-beef-cd3056ea9787
83bfc264-e916-44cd-af22-18decbd771c6	1	2018-03-26 15:02:09.45+08	2018-03-26 15:02:09.45+08	5e7775c1-0766-436e-b701-b1102833b98d	d0e8f529-c1bf-4146-beef-cd3056ea9787
6f54391e-0bbe-457c-b9bb-700e9a6cd79f	1	2018-03-26 15:13:35.552+08	2018-03-26 15:13:35.552+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	d0e8f529-c1bf-4146-beef-cd3056ea9787
6578b6e8-7c36-4811-bc98-a87c85516f01	1	2018-03-26 15:17:35.616+08	2018-03-26 15:17:35.616+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	d0e8f529-c1bf-4146-beef-cd3056ea9787
89ed11de-42f6-469b-8110-777ef53bf7d8	1	2018-03-26 15:21:21.924+08	2018-03-26 15:21:21.924+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	d0e8f529-c1bf-4146-beef-cd3056ea9787
a107c8da-4237-4bd1-b410-0c94480f3380	1	2018-03-26 15:26:18.91+08	2018-03-26 15:26:18.91+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	d0e8f529-c1bf-4146-beef-cd3056ea9787
7b4d2a79-2754-45ab-ba53-06061ccd349a	1	2018-03-26 15:36:04.279+08	2018-03-26 15:36:04.279+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	d0e8f529-c1bf-4146-beef-cd3056ea9787
93af1d8f-28a8-4416-bebc-69aff080224f	1	2018-03-26 15:42:57.945+08	2018-03-26 15:42:57.945+08	37c046eb-9a0e-49b0-95fb-f0128338f381	d0e8f529-c1bf-4146-beef-cd3056ea9787
cfb376d0-5f56-4641-a00e-49d6b761588c	1	2018-03-26 15:48:03.246+08	2018-03-26 15:48:03.246+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	d0e8f529-c1bf-4146-beef-cd3056ea9787
08e96e61-ca23-485e-bb15-7d4680b93c2a	1	2018-03-26 15:58:02.75+08	2018-03-26 15:58:02.75+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	d0e8f529-c1bf-4146-beef-cd3056ea9787
d86b7f4e-33b9-493f-a96e-c6dc2a23ab25	1	2018-03-26 16:12:35.744+08	2018-03-26 16:12:35.744+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	d0e8f529-c1bf-4146-beef-cd3056ea9787
52d35c64-df91-4a35-a8af-064108a83edf	1	2018-03-26 16:17:47.745+08	2018-03-26 16:17:47.745+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	d0e8f529-c1bf-4146-beef-cd3056ea9787
f694a273-d028-40e3-977c-cc05a87e4682	1	2018-03-26 16:24:02.878+08	2018-03-26 16:24:02.878+08	c9eacd36-38d6-48b9-9672-e76406906ea3	d0e8f529-c1bf-4146-beef-cd3056ea9787
39f9a215-438d-4632-8279-1bd1b2f3bf67	1	2018-03-26 16:43:45.704+08	2018-03-26 16:43:45.704+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	d0e8f529-c1bf-4146-beef-cd3056ea9787
b1fef6a3-82b1-482f-a84f-563abd6544b9	1	2018-03-26 16:47:53.769+08	2018-03-26 16:47:53.769+08	8c2579cd-6aca-4902-a9d6-61e916a4541e	ad4f23f8-9213-4194-97ce-209a34596649
fdd5f1ac-6973-487e-82ad-9024c7c0a1a0	1	2018-03-26 16:50:45.347+08	2018-03-26 16:50:45.347+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	d0e8f529-c1bf-4146-beef-cd3056ea9787
00ee24d8-ef44-4ff2-8733-303cf1445fc0	1	2018-03-26 16:59:55.985+08	2018-03-26 16:59:55.985+08	27930598-2f6e-4932-a816-9685f17969b5	d0e8f529-c1bf-4146-beef-cd3056ea9787
875ae240-20b8-449b-9630-295f35bdd0e0	1	2018-03-26 17:36:26.275+08	2018-03-26 17:36:26.275+08	83d8bf62-35f8-48c5-afa2-0d454cb19f70	ad4f23f8-9213-4194-97ce-209a34596649
a9558f80-d4df-444f-92c9-70616683c45e	1	2018-03-27 10:50:24.642+08	2018-03-27 10:50:24.642+08	4d523084-bf91-421f-bafc-f278a63c5541	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c5e83eac-d67a-4d06-9f09-17f58b88b5bf	1	2018-03-27 10:57:11.918+08	2018-03-27 10:57:11.918+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	d0e8f529-c1bf-4146-beef-cd3056ea9787
31f521d5-23c2-4ba1-87c8-f5dbf3f015ce	1	2018-03-27 11:00:20.897+08	2018-03-27 11:00:20.897+08	362018b7-e626-4eab-a6ad-214d85cfcc03	d0e8f529-c1bf-4146-beef-cd3056ea9787
cdec673e-1ba8-433e-9eb7-6d4f2d695fb3	1	2018-03-27 11:03:50.765+08	2018-03-27 11:03:50.765+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	d0e8f529-c1bf-4146-beef-cd3056ea9787
5a36aa3d-31f1-43ac-916d-fa194e5de4eb	1	2018-03-27 11:07:04.302+08	2018-03-27 11:07:04.302+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	d0e8f529-c1bf-4146-beef-cd3056ea9787
067d54bd-4310-47e8-a3a2-e7c9972d5987	1	2018-03-27 11:12:12.027+08	2018-03-27 11:12:12.027+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	d0e8f529-c1bf-4146-beef-cd3056ea9787
ff31a727-8a78-4e10-99e9-ec9c374288ef	1	2018-03-27 11:28:21.216+08	2018-03-27 11:28:21.216+08	9110f259-e269-446d-afa3-798069f4534d	d0e8f529-c1bf-4146-beef-cd3056ea9787
4bfd9afa-c491-4a9d-86a1-80152e284ed7	1	2018-03-26 11:43:23.162+08	2018-06-25 10:46:23.557+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3ae76e58-0d33-43cb-b3f0-37be15bc52c8	1	2018-03-26 11:43:22.858+08	2018-06-25 10:46:40.641+08	3aba791d-d6b2-4175-bb20-109f210f4065	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a141085c-a860-4f4f-adb1-9df8136501bc	1	2018-03-26 11:43:22.694+08	2018-06-25 10:47:02.67+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
84220059-ac10-4c5b-968f-bf30f3447838	1	2018-03-26 11:41:39.428+08	2018-06-25 10:47:32.911+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d87458cf-1db9-4c12-9670-549ad5eefa05	1	2018-03-27 11:23:37.914+08	2018-07-31 17:13:57.13+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	7667c2d9-3c04-4818-bfeb-42f43b60af77
9ef9e4d8-cb52-46c2-b527-50bbdeeb6b4b	1	2018-10-05 09:56:54.402+08	2018-10-05 09:56:54.402+08	6ac55754-f252-4ba5-ba9c-72a158734b97	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eac95355-2c8c-43cb-88d7-e5d18905bb5a	1	2018-11-22 15:42:43.423+08	2018-11-22 15:42:43.423+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	8774b4f0-60c1-4c7d-940b-f3a847c2847a
599630a4-4928-4a64-8f90-159d011fd29a	1	2018-12-06 11:45:58.369+08	2018-12-06 11:45:58.369+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	1aa841f1-d3fb-4523-9b54-e601d350c745
3c3d09f2-74ae-4f10-89ed-7936e63c1757	1	2018-12-08 17:37:32.88+08	2018-12-08 17:37:32.88+08	a4cf524d-8114-4b70-b13a-a931429c4bbf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c58f5dc3-27a5-4282-a3f8-94f9b3d16c6e	1	2018-12-18 16:53:40.221+08	2018-12-18 16:53:40.221+08	e5b96801-9448-44f2-a175-40cc7e8466b4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d3eaab75-aa06-4cab-95ac-328dbab44be9	1	2018-12-21 15:20:51.747+08	2018-12-21 15:20:51.747+08	f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
04562f37-0ed2-4adc-bebc-4221b5a5e8a4	1	2018-12-15 16:52:13.975+08	2018-12-21 17:02:53.211+08	11c61b7f-9d36-4273-b679-898a09fe21e9	c00008f7-06d9-4907-b2e7-619374116b36
e13e14c3-6fe2-4040-b3f8-423eae5a91af	1	2018-12-24 11:53:35.034+08	2018-12-24 11:53:35.034+08	52ae2b25-56b5-4a29-9f0b-33454ac99ff6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b012ebe8-a730-40aa-87f3-82e77cfb599d	1	2018-12-28 11:10:50.055+08	2018-12-28 11:10:50.055+08	a300435b-3982-4694-aab4-48ba853d838e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6ad120cf-00c3-4c2a-a056-5ea5ab387e2d	1	2019-01-14 15:31:37.062+08	2019-01-14 15:31:37.062+08	a23e3c37-7ab4-4ed4-b73b-a791c96d596c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
04deffaf-f121-45f9-bea1-d4723e651eed	1	2019-01-19 09:53:06.268+08	2019-01-19 09:53:06.268+08	2b4affd1-2151-4632-b11a-e0176fee0a84	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf726343-afa9-490a-8e8d-3b41dc1b77a6	1	2019-02-25 11:44:07.879+08	2019-02-25 11:44:07.879+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
48502331-2bba-4d85-a0d1-f876ff61a3b5	1	2019-02-25 11:44:07.883+08	2019-02-25 11:44:07.883+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	1aa841f1-d3fb-4523-9b54-e601d350c745
9d22825d-09ab-4227-869e-7e1ca9427ea1	1	2019-02-25 11:44:07.886+08	2019-02-25 11:44:07.886+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	d0e8f529-c1bf-4146-beef-cd3056ea9787
5b1fc7aa-2569-4fb3-b5bb-87e91878e52a	1	2019-02-25 14:17:43.255+08	2019-02-25 14:17:43.255+08	b345cafa-8d58-454f-a01e-e42859545b18	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4248df69-024d-448e-ad68-9699e2a2f826	1	2019-02-25 14:17:43.259+08	2019-02-25 14:17:43.259+08	b345cafa-8d58-454f-a01e-e42859545b18	d0e8f529-c1bf-4146-beef-cd3056ea9787
87a08465-e5ea-4be3-a7a3-4d802b029d0f	1	2019-02-25 15:47:53.712+08	2019-02-25 15:47:53.712+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2c650f14-4abe-465c-a46e-a58b61e31607	1	2019-02-25 15:47:53.716+08	2019-02-25 15:47:53.716+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	d0e8f529-c1bf-4146-beef-cd3056ea9787
7dabf9b4-9806-4020-b95c-8022ed6b57da	2	2019-01-08 10:25:09.201+08	2019-02-27 10:00:17.715+08	5e639171-0ad1-4fcb-aa69-d2f1d4af1f51	15b373b0-30f8-471e-8900-cb62e28d0e50
16702ac4-e42c-428b-ac0f-2deddffbf2b5	1	2019-03-15 16:43:50.772+08	2019-03-15 16:43:50.772+08	d32eacce-7db0-4c15-b17c-f1d870389c14	66a06e5d-a436-4d37-806b-919d8fd1c564
ec1af40e-00ed-4917-b74a-8e36bc87adcd	1	2019-03-27 09:42:22.611+08	2019-03-27 09:42:22.611+08	360a9975-3171-4f12-b47a-6f57bdf76dfe	9a1540b6-fea8-4bc0-8090-296b05f87c4a
499a2ec5-f993-4fdd-b651-0be24400e324	1	2019-03-28 10:30:24.021+08	2019-03-28 10:30:24.021+08	9078888c-628e-4b91-94f8-caaedcc9b640	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ff287390-6653-404a-ae72-c9c39e8ef4bd	1	2019-03-20 21:36:52.937+08	2019-03-28 17:55:09.3+08	fc817231-7e3d-4952-b912-0855d2e90545	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4ab52a1f-1563-45ce-8b15-583cd47faaa5	2	2019-03-28 10:30:24.024+08	2019-03-28 17:55:21.058+08	9078888c-628e-4b91-94f8-caaedcc9b640	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
919a897f-db8b-44da-b80a-4a74d14f6bbb	1	2019-03-29 16:40:02.733+08	2019-03-29 16:40:02.733+08	044ef7b0-afed-464c-b3fb-8bbf7fa42023	66537b16-1e7d-4823-b03e-676459f5891d
7c90e6f3-06b9-4f03-b54e-bd1fa5f4f85f	1	2019-03-31 14:16:47.792+08	2019-03-31 14:16:47.792+08	bb3ec092-4644-42eb-93ba-f9ae9b4b6601	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a1670826-5255-49b6-b248-67de89c66086	1	2019-04-01 14:38:39.918+08	2019-04-01 14:38:39.918+08	3aef6480-e9f6-4b07-8ee4-dc0516520d72	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6b91b9ed-0c0e-4566-95ff-1203866a2c57	1	2019-04-03 14:48:59.283+08	2019-04-03 14:48:59.283+08	53efa30f-f738-43ef-9600-0963b6b108fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
936feab3-0e16-4bf8-8f9e-6c52df7a75af	1	2019-04-08 10:06:51.204+08	2019-04-08 10:54:28.015+08	7f81d1d0-150c-49d4-9b52-4eda0387c996	3dfadb0e-7608-49e1-aa43-24f7442b424a
4065ce5a-e702-4f13-83aa-02243875fa79	1	2019-04-10 15:48:52.497+08	2019-04-10 15:48:52.497+08	420a7807-dc95-4fe3-bfff-fd1db144ed8e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
50cf0eba-6f77-456b-b29c-50f90e252f71	1	2019-04-10 18:28:39.212+08	2019-04-10 18:28:39.212+08	74d6fefc-59a0-42a8-bd3e-aff394533e06	9a1540b6-fea8-4bc0-8090-296b05f87c4a
005dea14-47b9-4c44-9e04-4ea66c336968	2	2019-04-10 18:28:39.215+08	2019-04-10 18:28:39.215+08	74d6fefc-59a0-42a8-bd3e-aff394533e06	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1cd100fe-470d-4bbc-a445-ec257fdaedb5	1	2019-04-16 09:09:09.721+08	2019-04-16 09:09:09.721+08	3027f2cf-70b8-4ff6-92ee-7432a8b26887	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2a35435c-8310-4106-8f81-62cd9e5ff419	1	2019-04-16 16:01:34.214+08	2019-04-16 16:01:34.214+08	cbdb48d6-afd7-4322-884a-d37d56f96176	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f1e557ba-74ac-46bc-b1b2-5f117af385d3	1	2019-04-17 15:07:58.429+08	2019-04-17 15:07:58.429+08	1649a4a7-d092-40c1-8217-dc2b8e2ecea0	3dfadb0e-7608-49e1-aa43-24f7442b424a
230c804f-e9ba-4305-b311-d60be21cb495	2	2019-04-17 15:07:58.433+08	2019-04-17 15:16:17.272+08	1649a4a7-d092-40c1-8217-dc2b8e2ecea0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1c2ce94f-c296-45d7-90e9-4ae2cfad5aee	1	2019-04-18 11:02:51.788+08	2019-04-18 11:02:51.788+08	89fb363a-19d1-4e23-a9af-b2a2c310eb4f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4467d9de-7f7e-4ba0-85e1-9f1e821fad35	1	2019-04-18 13:53:56.789+08	2019-04-18 13:53:56.789+08	76288807-186e-4444-a1ce-6be599aacfd2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a952ffd5-c302-4fa3-a7b5-475be69c08ed	2	2019-04-18 15:29:50.008+08	2019-04-18 15:35:06.995+08	efdfb5bf-1488-40b5-825f-629d60ebe7f7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
782ef934-e5fc-4964-a768-d435efa11399	1	2019-04-18 15:29:50.005+08	2019-04-18 15:47:15.802+08	efdfb5bf-1488-40b5-825f-629d60ebe7f7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c63367b4-3f00-479d-acb9-63374d61e0ef	1	2019-04-18 17:58:14.556+08	2019-04-18 17:58:14.556+08	6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
734c9298-f1e1-491d-a8b6-8642e1a0a0dc	1	2019-04-19 10:43:41.443+08	2019-04-19 10:43:41.443+08	85e05ea0-94ca-4806-9393-78780b771a4b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f1484a98-4d8f-486e-836a-8dd14ccd1823	1	2019-04-19 16:42:52.611+08	2019-04-19 16:42:52.611+08	43bea8b9-c871-432f-90d5-414d9d907254	9a1540b6-fea8-4bc0-8090-296b05f87c4a
11985a9b-36a7-47e7-9f3e-188816953f32	1	2019-04-22 13:13:08.897+08	2019-04-22 13:13:08.897+08	5d98962d-dbd8-4688-ae48-dbebdce861f6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8aa49ad7-2fe1-41c5-a102-a3c6784019f9	1	2019-04-22 14:08:53.03+08	2019-04-22 14:08:53.03+08	9b0e1890-c539-43be-8907-1f2eeaa3e309	66537b16-1e7d-4823-b03e-676459f5891d
f229b1fc-3f30-4e7a-8909-9d75182c5b3d	1	2018-03-28 14:52:06.912+08	2018-09-10 16:33:50.223+08	bbf47be7-1d85-4e1b-b356-70be269a0d32	3dfadb0e-7608-49e1-aa43-24f7442b424a
1bb48193-4a33-48f8-a4e2-b3b7555ff324	1	2018-10-08 14:13:14.278+08	2018-10-08 14:13:14.278+08	ae5aa015-b2d1-41a8-8b49-9a3d28565e8d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bd67bdfa-24f2-4384-82a7-00d8ac84a0e3	1	2018-10-29 16:18:27.052+08	2018-10-29 16:18:27.052+08	2fb5ab76-2e1f-4791-a38a-edcad8b3ab4e	66537b16-1e7d-4823-b03e-676459f5891d
d0b18a52-b09f-43e4-aec6-b55f6e4b5ef3	2	2018-03-28 14:52:06.909+08	2018-03-28 14:52:06.909+08	bbf47be7-1d85-4e1b-b356-70be269a0d32	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
4535e17c-bdc5-46c2-81e7-b8a7aa506e89	1	2018-03-28 14:54:49.038+08	2018-03-28 14:54:49.038+08	09252236-560b-47e1-bf81-f774d303ba26	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
c3d7c202-6499-4b43-85bf-d79e51629771	1	2018-03-28 15:40:02.861+08	2018-03-28 15:40:02.861+08	7faf119d-7804-470c-a448-516d681cce6b	f5115163-46ca-4e11-ac6e-d1be363871d1
5b88117b-02ea-488f-98d0-0a3a9bbccaa7	1	2018-03-29 13:37:27.977+08	2018-03-29 13:37:27.977+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c7932a1f-6a4b-4511-81fd-6285af951b9c	1	2018-04-02 10:37:43.655+08	2018-04-02 10:37:43.655+08	56c84083-d705-4aa0-94d2-34b731f75f97	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
ff37fdc7-53f6-481d-84ce-1e6e6676701d	1	2018-04-02 15:54:14.317+08	2018-04-02 15:54:14.317+08	1489127c-8f48-448b-a86e-1604f08894ce	ad4f23f8-9213-4194-97ce-209a34596649
1c3775ff-0ed7-4741-a82d-5551cc860061	1	2018-04-02 16:51:42.727+08	2018-04-02 16:51:42.727+08	1e7003bf-2cd1-4dcb-9ad9-116151f49ae6	ad4f23f8-9213-4194-97ce-209a34596649
cbc1dbb0-6dc8-4cc4-9d0f-162bd1e5cbe6	1	2018-04-02 17:17:24.082+08	2018-04-02 17:18:01.988+08	c15c6be6-83b0-47ea-ac05-38d625eb8ac8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dcb774f0-6fc6-430d-9486-48e03b653032	1	2018-04-02 17:21:29.446+08	2018-04-02 17:21:29.446+08	8b83567e-d874-40f2-a7e4-f78d6cb5415c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
32652678-cd83-4791-a2af-b6915fcf96e1	2	2018-04-02 17:21:29.449+08	2018-04-02 17:21:29.449+08	8b83567e-d874-40f2-a7e4-f78d6cb5415c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d37be38e-381a-472d-88e9-29be91869584	1	2018-04-03 11:39:47.185+08	2018-04-03 11:39:47.185+08	cda0b115-60d6-4169-8f45-4a92d6801fb3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4443e795-6d04-4648-9997-a93862565b3e	1	2018-04-03 11:52:10.939+08	2018-04-03 11:52:10.939+08	8fb33fdb-3378-44a4-8e48-ec79ff29a37e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
99244d8c-d0ce-4963-b0ba-efbaaef5f50a	1	2018-04-03 11:53:08.69+08	2018-04-03 11:53:08.69+08	00b58795-1a49-4171-b60f-a0e32a25f6f6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8fbaa90c-9998-424e-82fe-948c7a948332	1	2018-04-03 12:41:11.891+08	2018-04-03 12:41:11.891+08	1e20c41f-4f52-4d61-94e4-ae8496163aed	9a1540b6-fea8-4bc0-8090-296b05f87c4a
553d0d89-b8b2-4900-a17c-19fc50269001	1	2018-04-04 16:47:18.033+08	2018-04-04 16:53:12.631+08	8185c197-338c-42e3-acfc-acba2bb1b180	9a1540b6-fea8-4bc0-8090-296b05f87c4a
37a47128-0a76-4bbb-89ef-26b27932254b	1	2018-04-08 14:00:40.993+08	2018-04-08 14:00:40.993+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	d5f2066b-b4d8-4e26-8991-0c068495e2c9
88f66ce8-8107-4f37-bc64-152ecee7006f	1	2018-04-08 14:06:24.498+08	2018-04-08 14:06:24.498+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	d5f2066b-b4d8-4e26-8991-0c068495e2c9
ecad271e-3edb-482a-bd07-10d2ea8a07be	1	2018-04-08 14:06:25.439+08	2018-04-08 14:06:25.439+08	624610fd-38ca-4e72-92c8-0492eb66412a	d5f2066b-b4d8-4e26-8991-0c068495e2c9
a471484c-32ed-4224-9451-8506afa95ee8	1	2018-04-08 14:06:26.074+08	2018-04-08 14:06:26.074+08	ea2cc9e5-072a-4994-a232-f79655536c64	d5f2066b-b4d8-4e26-8991-0c068495e2c9
3b86da52-5af8-4866-8b37-daf269b580c9	1	2018-04-08 14:06:27.118+08	2018-04-08 14:06:27.118+08	7f76a800-a32e-483a-a948-919fc9e7d075	d5f2066b-b4d8-4e26-8991-0c068495e2c9
fae9d93e-eb25-4486-bf75-43b5d9093060	1	2018-04-08 14:06:27.657+08	2018-04-08 14:06:27.657+08	3f493145-8216-487c-b145-d58dacf9c570	d5f2066b-b4d8-4e26-8991-0c068495e2c9
e780352b-7e88-436a-a05c-6cc0b2ad1d51	1	2018-04-08 14:40:13.993+08	2018-04-08 14:40:13.993+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	9a1540b6-fea8-4bc0-8090-296b05f87c4a
74e3ee05-6f81-434d-89d5-409b3c3c3028	1	2018-04-08 14:40:13.996+08	2018-04-08 14:40:13.996+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	d4f271b6-567a-4880-beb0-161b33ac2094
57f5d115-e89e-430c-a5a9-541aacafb488	1	2018-04-09 08:03:04.738+08	2018-04-09 08:03:04.738+08	b9829d8a-9088-455a-ad16-9a814303b909	9a1540b6-fea8-4bc0-8090-296b05f87c4a
97988fe8-fafd-4a27-986a-2d936fe46274	2	2018-04-09 08:03:04.742+08	2018-04-09 08:03:04.742+08	b9829d8a-9088-455a-ad16-9a814303b909	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dc05a0f7-5d8f-4d5e-80f9-a68d6601c488	1	2018-04-09 08:05:14.712+08	2018-04-09 08:05:14.712+08	fbc0de18-03f7-421b-b7d4-4440a7c96791	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2237acf6-6dd9-4bb2-9dc4-72457562917d	1	2018-04-09 16:11:41.546+08	2018-04-09 16:11:41.546+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	7667c2d9-3c04-4818-bfeb-42f43b60af77
33a6e9a2-e5b2-4b6f-814e-fc678e4bfc52	1	2018-04-09 16:11:41.55+08	2018-04-09 16:11:41.55+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bf00840f-93e5-4f6d-be3e-b449e2d92051	1	2018-04-10 09:58:21.453+08	2018-04-10 09:58:21.453+08	727fa9b6-b621-41cb-b084-ef3f74f7c496	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
307ae878-46e3-44a7-8603-67b38cfdf570	1	2018-04-11 09:27:08.919+08	2018-04-11 09:27:08.919+08	d75d2473-6ed4-437c-8509-682f55d0d407	9a1540b6-fea8-4bc0-8090-296b05f87c4a
acb64f0a-30d4-4146-a608-43cd4f2a20cd	1	2018-04-11 16:24:01.252+08	2018-04-11 16:24:01.252+08	6e1d3878-3ea2-4c73-9137-0ef98781be0c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
923da6c2-8d1a-41fb-8a9a-a9f15c21fbf6	2	2018-04-12 09:54:19.723+08	2018-04-12 09:54:19.723+08	3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
27472fa9-3075-47d0-9c88-7accc4386103	1	2018-04-12 09:54:19.727+08	2018-04-12 09:54:19.727+08	3f7793d6-8f50-4dc7-b5e5-5e6cf74f77a6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1a7d98ac-27fa-49bb-bd82-df050812f8e6	1	2018-04-12 11:22:01.414+08	2018-04-12 11:22:01.414+08	a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cedcda73-60da-4a75-a229-bec319bd9757	1	2018-04-16 11:54:59.724+08	2018-04-16 13:55:29.851+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	d5f2066b-b4d8-4e26-8991-0c068495e2c9
e34d9d96-f878-4896-ae3e-55d492c4ba33	1	2018-04-16 14:07:58.009+08	2018-04-16 14:07:58.009+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	d5f2066b-b4d8-4e26-8991-0c068495e2c9
bbe094dd-4c59-4a44-9a56-cd5676418107	1	2018-04-16 14:07:58.012+08	2018-04-16 14:07:58.012+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c57824af-5b3c-4c9b-b719-2fcdf41e5c93	1	2018-04-08 14:06:27.655+08	2018-06-25 10:39:58.615+08	3f493145-8216-487c-b145-d58dacf9c570	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e1fd616b-edce-488d-8065-8cd901709aca	1	2018-04-08 14:06:27.116+08	2018-06-25 10:40:54.975+08	7f76a800-a32e-483a-a948-919fc9e7d075	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
82731511-63b1-4afd-9fc4-5eed20a7e13f	1	2018-04-08 14:06:26.071+08	2018-06-25 10:44:43.193+08	ea2cc9e5-072a-4994-a232-f79655536c64	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
28cfe943-004f-4549-aba4-26bfbbf65e97	1	2018-04-08 14:06:25.437+08	2018-06-25 10:45:02.407+08	624610fd-38ca-4e72-92c8-0492eb66412a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
506a40fe-aa97-4845-b2e7-0986aeab2b76	1	2018-04-08 14:06:24.496+08	2018-06-25 10:45:20.268+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a6450058-743b-460a-829c-c7a9442535a6	1	2018-04-08 14:00:40.99+08	2018-06-25 10:45:39.893+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
83e3df67-8f00-466e-acdf-d7441b033a73	1	2018-04-16 11:54:59.729+08	2018-04-16 14:08:08.531+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9e709c26-1099-40b7-88b3-482e26e9df23	1	2018-04-16 15:46:07.72+08	2018-04-16 15:46:07.72+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	d5f2066b-b4d8-4e26-8991-0c068495e2c9
5ebfd140-8067-4b51-b1da-bb357c7c8e4d	1	2018-04-16 15:46:07.723+08	2018-04-16 15:46:07.723+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0af9f7d2-c08a-4441-93d7-2eb703f0e941	1	2018-04-16 15:46:07.877+08	2018-04-16 15:46:07.877+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	d5f2066b-b4d8-4e26-8991-0c068495e2c9
b80de95b-ab1a-4b9b-b64a-61eb47118f77	1	2018-04-16 15:46:07.88+08	2018-04-16 15:46:07.88+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0261a452-9e7a-4fad-b07c-2d6fce0561bd	1	2018-04-16 15:46:12.365+08	2018-04-16 15:46:12.365+08	20ff998d-3014-4f62-ad12-37b56883c435	d5f2066b-b4d8-4e26-8991-0c068495e2c9
fc8399b0-54ca-4ea8-8615-d61da7fdb2e4	1	2018-04-16 15:46:12.368+08	2018-04-16 15:46:12.368+08	20ff998d-3014-4f62-ad12-37b56883c435	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9273a392-a552-4099-ada8-143bd6e3e6bb	1	2018-04-16 16:00:53.266+08	2018-04-16 16:00:53.266+08	7674c64d-e09e-4257-8726-c64a26ed309a	d5f2066b-b4d8-4e26-8991-0c068495e2c9
7541951a-fc00-49e0-953a-ac2547dd63b9	1	2018-04-16 16:00:53.27+08	2018-04-16 16:00:53.27+08	7674c64d-e09e-4257-8726-c64a26ed309a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9c326fdb-af9f-4b0c-aa19-41010e7f0915	1	2018-04-16 16:00:54.775+08	2018-04-16 16:00:54.775+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	d5f2066b-b4d8-4e26-8991-0c068495e2c9
c8861318-798d-40fc-b51c-c9ce2a59bcd9	1	2018-04-16 16:00:54.778+08	2018-04-16 16:00:54.778+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3aff7db1-0f77-40b3-9228-13d6519ef209	1	2018-04-16 16:01:22.133+08	2018-04-16 16:01:22.133+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	d5f2066b-b4d8-4e26-8991-0c068495e2c9
f3f91a46-2eb7-4c1c-a364-2af8856c8e67	1	2018-04-16 16:01:22.136+08	2018-04-16 16:01:22.136+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6472b729-0e05-4a8e-846a-d74b97e3c4ee	1	2018-04-16 16:14:50.361+08	2018-04-16 16:14:50.361+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	d5f2066b-b4d8-4e26-8991-0c068495e2c9
9c2fb1e3-599f-48e6-9e9b-6c3613275199	1	2018-04-16 16:14:50.365+08	2018-04-16 16:14:50.365+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
66731701-c15e-49a4-9eb9-4e13de5dc80d	1	2018-04-24 09:41:18.026+08	2018-04-24 09:41:18.026+08	4a84b11e-7f79-47ff-b530-6cbc5615b491	9a1540b6-fea8-4bc0-8090-296b05f87c4a
70bfe3ff-fb57-474c-80c3-d9fd580896f2	1	2018-04-24 15:29:24.94+08	2018-04-24 15:29:24.94+08	324eb312-14cd-4931-a6e0-f84880fb8ac5	d357249e-6ccf-4d1b-8546-c57c18fa121c
87cb6711-77cc-4dea-bc25-589956a2335c	1	2018-04-27 16:05:28.272+08	2018-04-27 16:05:28.272+08	699b9288-1402-48ab-ae80-31eacc42652e	0e98e5cb-6e50-4d85-940b-b538ce71dc14
a8cf3a82-d9cf-49ef-b2a8-36689b772016	1	2018-05-03 08:54:32.778+08	2018-05-03 08:54:32.778+08	0363c038-6fa5-4290-adaf-c9afa18f1171	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8c4473e8-69dd-411c-828e-ca663d9ae8e1	2	2018-05-17 14:43:40.139+08	2018-05-17 15:08:16.117+08	82db02f1-7f86-44cf-b9a4-d32e28672a84	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ba38e139-3c67-4179-975d-6a1b29c08aa6	1	2018-05-28 14:03:33.957+08	2018-05-28 14:03:33.957+08	7c2ff6f1-5bb6-4736-91cd-1bd068e760aa	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d6bcc8eb-4906-4bd5-b207-3e62af569320	1	2018-05-17 14:43:40.144+08	2018-05-17 15:12:15.267+08	82db02f1-7f86-44cf-b9a4-d32e28672a84	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cf7bba70-efc0-4741-93bc-828ede8e47e9	2	2018-05-03 08:54:32.782+08	2018-05-03 10:28:09.48+08	0363c038-6fa5-4290-adaf-c9afa18f1171	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
34e0cc1a-2e8b-40d3-a85c-4762ac05a1e9	1	2018-05-03 10:34:23.748+08	2018-05-03 10:34:23.748+08	fbe11da9-a717-4a5e-bd90-93f394b46ccc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1da75911-667d-4484-8cc8-3d05eb06e404	1	2018-05-03 10:35:59.175+08	2018-05-03 10:35:59.175+08	5efb0ea9-ca31-4a41-9389-be6c24b3ad2c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
64036170-2629-430f-9f56-56f2f645bfd0	1	2018-05-03 10:37:15.477+08	2018-05-03 10:37:15.477+08	ae8d62c1-09f0-4fcd-bc62-add087919ff0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a9612792-cc30-4b80-bfbb-97c0fdeecf45	1	2018-05-09 10:42:20.037+08	2018-05-09 10:42:20.037+08	ed5ede03-616b-4df7-b741-eea396939ecf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
67f02e4a-e979-44d2-b17d-849ba3ba1eb6	2	2018-05-09 11:11:01.652+08	2018-05-09 11:11:01.652+08	3b03e747-cc81-4f6e-9ccf-f828a5534096	3dfadb0e-7608-49e1-aa43-24f7442b424a
e6adceba-3e63-4d8c-81f9-0733ce80b9e9	1	2018-05-09 13:55:22.685+08	2018-05-09 13:55:22.685+08	1cfa35c8-129a-45eb-9304-2b105bc22380	9a1540b6-fea8-4bc0-8090-296b05f87c4a
238b18df-6349-4e01-bea7-c785f5754543	1	2018-05-10 09:13:20.645+08	2018-05-10 09:13:20.645+08	901073b9-b411-427c-9eb6-43a935ec8c27	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4c99b328-de6c-4929-a512-82cf921fc74d	1	2018-05-10 17:53:00.78+08	2018-05-10 17:53:00.78+08	fdef19ae-68f1-4ad5-937b-3cb60e20d8ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b53ef639-7171-4c8a-88ee-fff2e88a2a20	1	2018-05-10 17:55:50.403+08	2018-05-10 17:55:50.403+08	67b821eb-caf8-4352-a59b-360e7c9a3ad9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f437f173-ee82-423a-b2cd-6e1672f6887e	1	2018-05-11 10:41:15.495+08	2018-05-11 10:41:15.495+08	077f4241-fe27-4cbc-9918-cf5b8d1c8283	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fbb1bac9-c0b4-4340-bea2-035eef7cc9ca	1	2018-05-11 15:45:31.127+08	2018-05-11 15:45:31.127+08	efdb6604-3283-41b2-9a30-aa532a49d897	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
9c330608-e096-4bc0-9c59-0036a16a2296	1	2018-05-16 17:44:54.885+08	2018-05-16 17:44:54.885+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	7667c2d9-3c04-4818-bfeb-42f43b60af77
358a0539-4815-456c-90f6-2f5313b54f0a	1	2018-05-16 17:44:54.889+08	2018-05-16 17:44:54.889+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6dfea180-3bab-434b-b4d9-01f484b55b2c	1	2018-05-17 10:26:47.534+08	2018-05-17 10:26:47.534+08	e5c11c48-0e03-4229-b879-a487b7cda972	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3634cea3-6aed-48c2-8d2e-90ddacf28317	1	2018-05-17 13:55:17.791+08	2018-05-17 13:55:17.791+08	83881bee-4e8c-4ad6-a11f-45810d035b3d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5fa9177f-e430-46e8-b0fa-a824b5c39c36	1	2018-05-28 10:45:28.324+08	2018-05-28 10:45:28.324+08	78540227-fdf9-47ed-841e-7b76fed0f788	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6eb5ae32-1f75-44e5-9436-c7f6f0af18b6	1	2018-05-28 10:50:00.163+08	2018-05-28 10:50:00.163+08	40a69ace-03f8-4acf-8cf7-6acf43ac2de8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d2d06ac7-74e5-445e-a927-dd699b74e323	1	2018-05-28 11:45:20.153+08	2018-05-28 15:52:42.914+08	200655be-879b-4a82-8a17-1ff1ccb9f961	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c1633898-dfbd-45a4-a28a-1cfaabcf74e5	1	2018-05-28 17:34:00.448+08	2018-05-28 17:34:00.448+08	899dde06-bd1d-4215-963e-23596c3fda7f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e6366125-1358-42e4-926f-0d6344002fb8	2	2018-05-28 17:34:23.439+08	2018-05-28 17:34:23.439+08	899dde06-bd1d-4215-963e-23596c3fda7f	c8eeed37-ec79-49a9-b3d8-68b7343e0334
65b9c79b-8e8a-4dc5-897f-bd7bf3960cfc	1	2018-05-29 11:41:59.94+08	2018-05-29 11:41:59.94+08	5ac91988-c93a-4176-9f33-7c6ba110590f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
51ea2c79-c5a6-42b8-a2ce-e50601d22364	1	2018-05-29 14:51:48.725+08	2018-05-29 14:51:48.725+08	9d6f5e3b-2821-48f0-b5c5-997baf346f39	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ee9ea11b-cc74-4556-97a2-6092409e08ae	1	2018-05-30 20:45:30.281+08	2018-05-30 20:45:30.281+08	35046949-3e59-43c1-8898-bfc7995c3da9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
09dd6500-ec1e-4917-9481-2a0ab7fcd30c	1	2018-05-31 07:52:27.75+08	2018-05-31 07:52:27.75+08	da7a3b52-f9fb-4e4c-bf41-dda355ec5585	31f274cf-4345-4b4e-adbc-e7b05abf7453
cc115119-d1b9-48e4-af00-1f2408d73eb0	1	2018-10-08 16:48:22.303+08	2018-10-08 16:48:22.303+08	357c45b8-b190-4369-862c-e28530e13aa2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fa05e5c1-ce60-4618-8a06-493a8a6a3c86	1	2018-05-31 14:37:08.559+08	2018-05-31 14:37:08.559+08	563221c8-bdb4-4511-b781-25cab72585a7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
81dc439b-c906-46bf-83db-a7fa8b7e3aa6	1	2018-06-01 16:02:25.96+08	2018-06-01 16:02:25.96+08	4c79d9ed-386d-4540-bff3-82caf4d9d329	9a1540b6-fea8-4bc0-8090-296b05f87c4a
829f092c-d925-4c5e-acba-61eab7f587cb	2	2018-06-01 16:02:25.967+08	2018-06-01 16:02:25.967+08	4c79d9ed-386d-4540-bff3-82caf4d9d329	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e2016e01-e19d-4477-8714-4fa61c267d4e	1	2018-06-01 16:26:56.735+08	2018-06-01 16:26:56.735+08	0d00f0b6-190e-430c-a626-c3e5efd2828c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6dcdb2e5-0e72-493d-9280-9cf6973b94f6	1	2018-06-01 16:29:14.99+08	2018-06-01 16:29:14.99+08	c7cd0af4-425e-42e5-a5ad-cc2b9369c84b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
10f11161-b15f-4c43-ac76-c4e7f3409ecf	1	2018-06-04 18:00:22.399+08	2018-06-04 18:00:22.399+08	51654fb3-cd61-405e-890f-ade3931c8b7e	ad4f23f8-9213-4194-97ce-209a34596649
22ff2aa0-57f7-4213-8174-bae34ce95af4	1	2018-06-05 14:51:24.813+08	2018-06-05 14:51:24.813+08	34e0efb7-3081-4432-acb3-1f21d62ace7a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
99e90ef8-1994-4a72-986c-411f2e18324c	2	2018-06-05 14:51:24.821+08	2018-06-05 14:51:24.821+08	34e0efb7-3081-4432-acb3-1f21d62ace7a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e350552a-0a4f-42f5-846a-57031931982b	1	2018-06-05 14:52:38.976+08	2018-06-05 14:52:38.976+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b5d5d84f-ee8b-4fb6-bf89-cae02af804b8	1	2018-10-29 18:06:17.124+08	2018-10-29 18:06:17.124+08	57e52f6f-9cfd-4060-bbf4-506058f6206d	66537b16-1e7d-4823-b03e-676459f5891d
3cc3b230-37eb-4ac1-83aa-c5b7427a1d28	1	2018-06-06 18:05:16.199+08	2018-06-06 18:05:16.199+08	6a257a93-25ef-48f8-bdd7-0a4674c83a7c	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
38dea75a-8548-4b80-94a9-90496afdfe57	1	2018-06-07 14:25:03.222+08	2018-06-07 14:25:03.222+08	e458516d-60cf-4395-8ec5-df491ae97d3e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0fa018d2-0369-40aa-8c3e-932340593506	1	2018-06-07 15:37:44.39+08	2018-06-07 15:37:44.39+08	fb7bb438-ec7d-41fa-b7f5-737c395901bc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6e54ae36-3233-48fa-bcd3-c9253cdb0966	1	2018-06-07 15:54:22.267+08	2018-06-07 15:54:22.267+08	66717a8f-3c59-41e0-ab21-bf6bcdde55ea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fafd2a42-8f24-4ce7-9b46-c5942b2540b2	1	2018-06-07 15:54:34.224+08	2018-06-07 15:54:34.224+08	260e307b-9a7c-4f75-90cd-79710a7d0221	9a1540b6-fea8-4bc0-8090-296b05f87c4a
55442875-ceff-489d-9392-180aaa5afbb4	1	2018-06-11 14:59:44.586+08	2018-06-11 14:59:44.586+08	c9a11ba9-fb0d-4a82-b480-7539948c9b56	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eb54bfe2-32cb-4251-a44d-6c5d6b2aefdf	1	2018-06-13 16:57:27.857+08	2018-06-13 16:57:27.857+08	2d547109-73ea-48f5-99b8-48dd9236e19b	5ef40d3b-0094-45fb-9663-892c5c4e270d
f0f3dc05-2c35-4dcc-ac95-d6a86829e70f	2	2018-06-14 10:34:18.654+08	2018-06-14 10:34:18.654+08	4efc7878-409b-4195-b3e6-ed93b829fed9	ad4f23f8-9213-4194-97ce-209a34596649
6c6a8485-fbd1-4808-b826-93f84b441e66	1	2018-06-14 10:34:18.651+08	2018-06-14 14:01:32.208+08	4efc7878-409b-4195-b3e6-ed93b829fed9	3dfadb0e-7608-49e1-aa43-24f7442b424a
39209c52-b9af-409d-b34d-a1fe088243e9	2	2018-06-15 09:39:55.598+08	2018-06-15 09:39:55.598+08	88155a32-3321-4f89-86ba-c204d101cce7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
129a1f20-b51f-4419-9084-917b09d4d3c6	1	2018-06-15 09:39:55.602+08	2018-06-15 09:39:55.602+08	88155a32-3321-4f89-86ba-c204d101cce7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2c66b5f5-27ea-4406-85c1-b5772e200df5	1	2018-06-15 17:08:39.594+08	2018-06-15 17:08:39.594+08	3f564278-8edf-4fe7-a35e-21b91e6d4129	452e3349-a87b-4b5b-97f9-7dc730f910fa
5809d1c2-97e1-4f57-917f-479a0d09aa3e	1	2018-06-15 17:09:27.7+08	2018-06-15 17:09:27.7+08	279c47e7-04c2-4841-8fdd-263a5f4af93a	6619c155-5a30-4c92-b738-816302f0c4ed
da3d498e-2955-4d5a-a208-c3d2d91cff67	1	2018-06-19 09:46:45.595+08	2018-06-19 09:46:45.595+08	9aff4ead-342b-40e8-b365-6a53212df7dd	ca45c7c2-42df-48cc-849c-c4cd01067e5d
3346a8ca-c42b-4006-9931-1800ab324724	2	2018-06-19 09:47:08.323+08	2018-06-19 09:47:08.323+08	9aff4ead-342b-40e8-b365-6a53212df7dd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4d2419e0-8da8-4f11-b5f0-90ea093a9c81	1	2018-06-19 09:48:17.015+08	2018-06-19 09:48:17.015+08	b15a4ae0-8100-4809-978d-50914fdc2f32	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
83e19aff-382e-4792-8cb0-acdb2a3a817a	1	2018-06-19 09:50:26.17+08	2018-06-19 09:50:26.17+08	1991c0ef-7dd2-4290-ad34-c8bc82161d2f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
78e404b9-c5d6-4030-b6b9-487b8bfb35e8	1	2018-06-20 10:32:24.751+08	2018-06-20 10:32:24.751+08	cf379e04-548b-4a35-bafd-4ce52ae84b07	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
95efa533-8d6d-45c4-92fb-695d5cc9861f	1	2018-06-20 10:35:52.502+08	2018-06-20 10:35:52.502+08	e4192bd0-7b4b-48fd-8274-4f4ed24a1cd2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9811d477-4cca-4ecd-842a-cb4836b135b9	1	2018-06-20 10:35:53.277+08	2018-06-20 10:35:53.277+08	e2b308df-8629-49a6-ab1d-397df5ab4e45	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5c8492ac-2d38-4c54-9d6e-b48b46542248	1	2018-06-20 10:35:54.634+08	2018-06-20 10:35:54.634+08	d116c1db-0a8e-4cd7-a021-6dedf5987ec4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0e09f170-aae1-4349-9595-f658c99bb411	1	2018-06-20 11:04:00.667+08	2018-06-20 11:04:00.667+08	bfa4cd6a-f4fc-4087-8322-c0dd793cfd39	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
989a0f1b-313b-4e5d-955f-27aac6f36e8f	1	2018-06-20 11:04:01.393+08	2018-06-20 11:04:01.393+08	f88c2cc7-2f89-40e1-ab48-28a17b001737	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3552b9bd-63d3-4a74-bea0-aadf816dc48f	1	2018-06-20 11:04:02.542+08	2018-06-20 11:04:02.542+08	4c874d9f-456e-420e-9057-3a8c7de8368c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d124430c-8240-44e0-8828-7d67755c691e	1	2018-06-20 11:13:47.048+08	2018-06-20 11:13:47.048+08	b58bb3be-9cea-460b-b91b-0281432cc158	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
054ceec6-745d-4f31-844f-eb436787b2b8	1	2018-06-21 11:10:55.925+08	2018-06-21 11:10:55.925+08	9fbee940-6591-45b4-a3a9-83abc9c76e85	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6c2951ba-8402-475a-a4cb-6180a8cd0b29	1	2018-06-21 13:39:44.918+08	2018-06-21 13:39:44.918+08	b2d406aa-3d16-4f6a-a0cf-201673678a8f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d0f0f4de-46ac-4e07-8456-f468a54c9924	1	2018-06-21 13:53:07.641+08	2018-06-21 13:53:07.641+08	aa4c3887-4040-4ac1-a908-4ae45f754c3b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8c16c60d-36f2-4f22-bb99-f9403f0e5f71	1	2018-06-22 17:30:28.393+08	2018-06-22 17:30:28.393+08	9c410206-a22f-4b1c-b86f-32fda9f61ca2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
96971fcc-6fde-4343-a988-0fac51fe396f	2	2018-06-22 17:30:28.398+08	2018-06-22 17:30:28.398+08	9c410206-a22f-4b1c-b86f-32fda9f61ca2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8efcbe1c-3797-4980-b49a-9285bfbfecc7	1	2018-06-25 09:05:33.106+08	2018-06-25 09:05:33.106+08	a045d540-6405-495e-af5f-ea705c094472	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b2c5c319-5966-4d2d-a607-a73e9fa97317	1	2018-03-26 11:16:11.487+08	2018-06-25 10:41:25.827+08	02513eed-ba94-456b-86e0-89ea996b879d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7d240885-b6aa-4476-8a55-30746fc1b69c	1	2018-03-26 11:24:13.125+08	2018-06-25 10:42:06.926+08	1bda935e-56de-4365-b60e-f02d19299795	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6f37f0c9-1488-4c4f-a340-c1b9b060f47f	1	2018-03-26 11:43:24.195+08	2018-06-25 10:45:57.519+08	f30482b9-b518-4048-8217-bd64158911e6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
995b760a-4d99-4884-8690-2857fea3bc13	1	2018-06-25 11:28:08.6+08	2018-06-25 11:28:08.6+08	d32eacce-7db0-4c15-b17c-f1d870389c14	d4f271b6-567a-4880-beb0-161b33ac2094
3f0c11f0-a928-4f1d-b9d6-cdfc9ecad7b6	1	2018-06-25 15:29:28.075+08	2018-06-25 15:29:28.075+08	d56a9be3-7a4a-4c75-91ec-f524bb273574	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ff18de5c-e5f4-4c95-9419-60e369173067	1	2018-06-26 10:53:23.583+08	2018-06-26 10:53:23.583+08	a42dc0a2-1190-4f91-bf27-a5db9a2ed7ca	639a37c9-637b-46e7-97ac-7b5991155e02
cfba0786-e932-437a-8f2a-c15bde9b3e1d	1	2018-06-27 13:45:01.576+08	2018-06-27 13:45:01.576+08	0f6fd3af-59cc-4fa8-8ff5-f42f173ac9fa	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b16adb70-fe65-4609-a7fd-923e42da0e38	1	2018-06-27 14:02:16.355+08	2018-06-27 14:02:16.355+08	847fb856-ef0a-493b-9a30-d2876243481a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
535a7032-01f6-42e2-ad88-6f1c9aa12900	2	2018-06-27 14:02:16.361+08	2018-06-27 14:02:16.361+08	847fb856-ef0a-493b-9a30-d2876243481a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f2308778-87af-4b2b-8892-031d77a4fdb2	1	2018-06-27 14:04:58.284+08	2018-06-27 14:04:58.284+08	948c741a-f999-4abe-ae1f-64c23e27462c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7cd0e434-1b19-4991-a8dd-b5507ce83d8c	1	2018-10-09 17:02:23.459+08	2018-10-09 17:02:23.459+08	e5ed186c-f248-4b06-ae1c-8ada54d1c67d	d4f271b6-567a-4880-beb0-161b33ac2094
ee568ad5-33ca-4b20-8fcf-9932c3e4758c	2	2018-11-09 14:39:36.875+08	2018-11-09 14:39:36.875+08	6757358d-f79f-4a71-a721-6a882b92b350	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b7fa7727-83e0-46f3-b9c6-de4800fb5451	1	2018-11-09 14:39:36.873+08	2018-11-09 17:32:20.788+08	6757358d-f79f-4a71-a721-6a882b92b350	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0688d076-74f7-443a-8642-8ad412fbf1c6	1	2018-11-22 16:01:39.292+08	2018-11-22 16:01:39.292+08	b91bca75-6908-439e-9860-f0debec0bf10	3dfadb0e-7608-49e1-aa43-24f7442b424a
7b3133e2-342d-4eda-8584-5f1daf55a8a4	2	2018-11-22 16:01:39.295+08	2018-11-22 16:01:39.295+08	b91bca75-6908-439e-9860-f0debec0bf10	8396ee22-73b6-4375-a8be-854a047aecbf
790def09-4560-4246-b2e1-3ef7b9817c42	1	2018-12-10 10:00:18.975+08	2018-12-10 10:00:18.975+08	1152aa27-3899-4f0f-9954-9d83cedd5aab	9a1540b6-fea8-4bc0-8090-296b05f87c4a
78099f25-c4b6-40ae-b659-7eaf416ca5a9	1	2018-12-18 16:53:40.791+08	2018-12-18 16:53:40.791+08	8580899d-741c-4cc7-a479-ccd6c0c6e22c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e171ad93-8887-40f9-be9a-c009f4efe72a	2	2018-12-21 16:55:45.969+08	2018-12-21 16:55:45.969+08	3f9ded10-1974-46c6-b577-74ef70477cc1	c00008f7-06d9-4907-b2e7-619374116b36
9d7a8978-3d54-4242-b04e-be1eff619aec	1	2018-12-24 14:39:01.234+08	2018-12-24 14:39:01.234+08	0c6ecc38-15dc-4580-a580-aa3c39eb9064	9a1540b6-fea8-4bc0-8090-296b05f87c4a
06120084-e5b4-4810-a74f-44f86005fad1	1	2018-12-21 16:55:45.966+08	2018-12-27 15:23:58.094+08	3f9ded10-1974-46c6-b577-74ef70477cc1	0f0c11cf-71ae-4bba-b9ba-95442f1fb714
a76e6a76-e9bd-462a-a916-27797d6febff	1	2018-12-28 11:17:19.426+08	2018-12-28 11:17:19.426+08	d52114b2-8ad0-42a3-989f-0650203b54c8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5f4173ab-b59f-4fa7-9f55-9e0a66adf6c7	1	2019-01-08 15:12:49.578+08	2019-01-08 15:12:49.578+08	a9f13e6b-82bb-4a59-82b7-cf52b91642a5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2fcf52d0-80b8-4b81-9bed-b0a86eb903a8	1	2019-01-14 15:44:06.669+08	2019-01-14 15:44:06.669+08	a91dd10c-af61-4fcf-8294-1d200a035664	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d8634a38-8284-4196-9a3f-ab3d6d1af934	1	2019-01-19 09:54:40.59+08	2019-01-19 09:54:40.59+08	75ff49e4-22d3-4777-a5a5-71f3a5fc4436	9a1540b6-fea8-4bc0-8090-296b05f87c4a
66b50554-6427-482d-9a1f-b31cace75305	1	2019-02-25 11:46:10.788+08	2019-02-25 11:46:10.788+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d2085d03-54f3-4d35-95c2-ac918bc59588	1	2019-02-25 11:46:10.792+08	2019-02-25 11:46:10.792+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	1aa841f1-d3fb-4523-9b54-e601d350c745
c1b6b03c-8a17-4110-9120-7d28b4f62f36	1	2019-02-25 11:46:10.795+08	2019-02-25 11:46:10.795+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	d0e8f529-c1bf-4146-beef-cd3056ea9787
15eb120d-af1f-4b2a-997d-aebb756c4244	1	2019-02-25 14:18:58.099+08	2019-02-25 14:18:58.099+08	536c5d54-6c47-4800-aecb-47219ee56fc2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ad16f71a-68b6-4014-bf6a-bcee4d3a60d5	1	2019-02-25 14:18:58.103+08	2019-02-25 14:18:58.103+08	536c5d54-6c47-4800-aecb-47219ee56fc2	d0e8f529-c1bf-4146-beef-cd3056ea9787
3ddbbbb3-9d0d-4cac-8f44-8b395cd26afa	1	2019-03-15 17:00:45.457+08	2019-03-15 17:00:45.457+08	ad1ce5b5-24d5-4aa3-9125-bbb25ea24069	936f5813-db0d-4a2a-a7bc-8d323024140b
12a4e096-faea-4a88-93ab-27a42d813c80	1	2019-04-10 15:48:53.413+08	2019-04-10 15:48:53.413+08	87bb0352-924e-440f-abb0-2a42797d0eb0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
45053113-3040-4e3f-8f51-26ce5428e17f	1	2019-03-27 09:45:06.495+08	2019-03-27 10:04:01.171+08	248ab293-5e7c-41e5-835a-2978782081de	68238334-fea4-4bc0-b1cd-98456c41faab
563aa63f-70d2-47f8-b69b-5a836865f2ad	1	2019-03-29 17:37:11.121+08	2019-03-29 17:37:11.121+08	e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6b037c2a-3f6b-4ad9-97a9-0cf50758d610	2	2019-03-29 17:37:11.126+08	2019-03-29 17:37:11.126+08	e6ddf9e3-cda3-4fcf-975a-a7b4f14a0a34	9a1540b6-fea8-4bc0-8090-296b05f87c4a
32465ca8-9d2e-4f6d-91df-aadc7ba1619e	1	2019-04-01 15:38:01.391+08	2019-04-01 15:38:01.391+08	936ee644-5ea7-4d64-98d7-ff52cc50e113	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d830e326-46e8-46d1-8ef1-0b40a29c0a14	1	2019-04-03 16:53:56.862+08	2019-04-03 16:53:56.862+08	db04dc7e-6a55-4050-92a8-c1a6e5c0dc9c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
32435b8b-f100-4ed8-abc1-8fe485c14861	1	2019-04-04 11:32:30.412+08	2019-04-04 11:32:30.412+08	cecf35d0-533a-45cd-b740-42f93c4f3df2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
66f5e87e-68ba-42cc-823a-b2f3c0c46f4e	2	2019-04-08 10:58:20.18+08	2019-04-08 10:58:20.18+08	7f81d1d0-150c-49d4-9b52-4eda0387c996	b3cb9990-288c-4f0d-a91a-547254d1d9c6
610d6acd-999b-4ad8-a4e2-476a1fb53d20	1	2019-04-16 09:11:47.988+08	2019-04-16 09:11:47.988+08	9922afa7-509c-4ee2-8cfa-094233cf6eb1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
332f021d-a41a-4385-8efa-6e17a2f538ee	1	2019-04-18 11:06:31.791+08	2019-04-18 11:06:31.791+08	d5bf6f22-3d7a-4ab0-9043-1020e9516bcc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
aca44562-f9b0-4c7c-8c90-43f8a3b57de8	1	2019-04-18 13:54:40.621+08	2019-04-18 13:54:40.621+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ce509d06-76f1-49ac-93d5-477b9705a395	1	2019-04-18 18:47:42.214+08	2019-04-18 18:47:42.214+08	f929d6c9-de63-4cb0-89f9-f9e7a22cbadb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
81c78d91-7706-4922-82bd-38444ca9b046	1	2019-04-19 10:44:05.925+08	2019-04-19 10:44:05.925+08	82e60098-d956-499c-97c8-810ba64a8589	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0cf029a6-b198-4afc-abcf-a7279db56ba7	1	2019-04-23 14:22:13.661+08	2019-04-23 14:22:13.661+08	fb1aa362-5048-47df-a1b3-89bc55bfe786	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1f96c713-b157-490a-87ef-75903faeec82	1	2019-02-22 13:27:41.871+08	2019-04-29 16:06:12.924+08	ef6476c9-709e-4afb-a4d9-57009ee3ecf5	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
ca73c002-2faf-44ae-b3f6-44d42c0558c0	1	2019-02-22 13:41:58.509+08	2019-04-29 16:06:27.181+08	6c6b5c79-b408-447c-b2b1-3ff7bf122a19	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
6924cdf6-5d7c-4a36-a9b0-cdb858d60861	1	2018-06-28 15:28:03.049+08	2018-06-28 15:28:03.049+08	ad463dbb-84bc-45ec-9a0e-98de9aaf5fb8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
35aaf533-2deb-46cb-b33e-0409c36b18e4	1	2018-07-02 10:37:28.261+08	2018-07-02 10:37:28.261+08	20e28988-ea9b-4757-9f79-22dce525207a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4e34c724-73e6-4bb6-8dfc-59443e627031	1	2018-07-03 19:14:02.256+08	2018-07-03 19:14:02.256+08	5838090c-ced5-4fb2-9320-53c516ee9b33	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b78cd8f6-60bd-42ad-8ee9-2fcc5603394d	1	2018-07-04 12:31:15.222+08	2018-07-04 12:31:15.222+08	515030fd-3993-442a-89f7-ca844c5671c0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c64d5f1b-a524-4a66-af36-52c23666d617	1	2018-07-04 16:49:20.263+08	2018-07-04 16:49:20.263+08	32349c76-d117-4331-8a10-9b7ea057c2ab	9a1540b6-fea8-4bc0-8090-296b05f87c4a
173acc1a-9b79-4918-9ea8-2f9559e65794	1	2018-07-05 14:21:10.246+08	2018-07-05 14:21:10.246+08	9fab42c0-0c95-4fd2-a470-08437473a2f4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
05f0ac13-f119-4b73-9254-18f6a4ebb3d4	2	2018-07-06 17:14:37.671+08	2018-07-06 17:14:37.671+08	e442b9a5-066f-4cde-b5f3-9709a193c328	9a1540b6-fea8-4bc0-8090-296b05f87c4a
617a40b1-cf86-47a8-81a1-0276ddbc2d17	1	2018-07-09 10:14:00.837+08	2018-07-09 10:14:00.837+08	70dd7ed7-45de-4c9c-a299-7c0686775dc3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
087bb313-bb27-423b-bb51-c5970d80a61d	1	2018-07-09 11:43:50.743+08	2018-07-09 11:43:50.743+08	427e8976-edd3-4467-8900-587c12fbf6cf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
43afd7e5-c38f-4263-9508-b8e06098c954	1	2018-07-10 11:55:47.362+08	2018-07-10 11:55:47.362+08	2bd37bef-1f44-47e9-8086-b0343328eb0c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ecf19fc8-9807-4753-a1e5-c018c19680f4	1	2018-07-10 14:47:24.851+08	2018-07-10 14:47:24.851+08	94540a5f-cb58-4a32-a605-05002a4391ed	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d20564a8-5902-4ba7-a199-ee9c3800792a	1	2018-07-10 17:19:28.452+08	2018-07-10 17:19:28.452+08	d8b7d673-b192-4f7a-84d9-0946b8d30f41	9a1540b6-fea8-4bc0-8090-296b05f87c4a
29f1ee6e-8283-419a-bbab-46ea0a54a6b5	1	2018-07-11 10:25:15.537+08	2018-07-11 10:25:15.537+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c09c2619-45df-4f25-a765-58b559af0ea3	1	2018-07-11 10:25:55.122+08	2018-07-11 10:25:55.122+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
00b03660-427a-4ce0-a8ef-abd2cd65ac31	1	2018-07-13 16:15:51.106+08	2018-07-13 16:15:51.106+08	cb6fd3f6-2591-4242-b0a8-dbb037543831	9a1540b6-fea8-4bc0-8090-296b05f87c4a
166bc1cb-32cb-4163-987b-19b1c9b35f66	1	2018-07-23 15:18:06.237+08	2018-07-23 15:18:06.237+08	7da8e64c-b909-4802-9639-84077cefa569	7c5f8c54-870d-46fb-97fd-ffdf565e7e7e
869aebb5-9093-4651-b0ff-eb3835c3e88d	1	2018-07-18 09:51:58.259+08	2018-07-18 09:51:58.259+08	e32efbee-3c36-4be6-a4d3-d5058acf1fda	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
a516724a-2214-48ba-abbd-287bf60d42ed	1	2018-07-18 09:55:29.602+08	2018-07-18 09:55:29.602+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
a615e317-7a24-4c74-9d3a-5ab19299559f	1	2018-07-18 09:58:42.828+08	2018-07-18 09:58:42.828+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
efa11bc6-774b-4295-9c0e-57feee9cb217	2	2018-07-18 09:52:40.446+08	2018-07-18 10:01:54.781+08	c3455ece-210c-4203-af82-88b61e4b2584	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
d34bd34d-8be6-451c-a92f-049c21e64115	2	2018-07-18 09:52:34.718+08	2018-07-18 10:01:59.955+08	c3455ece-210c-4203-af82-88b61e4b2584	118383e6-1b61-4e15-8dee-a1a2a61b531e
01ce0d35-3e87-4d8c-bd4a-97b020d9b76b	2	2018-07-18 09:52:28.093+08	2018-07-18 10:02:20.1+08	c3455ece-210c-4203-af82-88b61e4b2584	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
9a43f07c-ca17-46c9-89dc-765e4df66475	1	2018-07-19 09:35:55.144+08	2018-07-19 09:35:55.144+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	d5f2066b-b4d8-4e26-8991-0c068495e2c9
629d92f1-f322-4ba5-88b8-e767ab052ef2	1	2018-07-19 09:35:55.148+08	2018-07-19 09:35:55.148+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b39dbca9-dd75-4ef1-901a-759dba6f3de7	1	2018-07-19 09:35:56.544+08	2018-07-19 09:35:56.544+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	d5f2066b-b4d8-4e26-8991-0c068495e2c9
236d9e27-dc5d-4e5f-8746-2c83b505e259	1	2018-07-19 09:35:56.547+08	2018-07-19 09:35:56.547+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
606698dd-2cbb-4401-8d88-78715c282b84	1	2018-07-23 15:29:31.263+08	2018-07-23 15:29:31.263+08	3bd37805-2e49-4fdb-8bab-d54c72112de8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8a7450fa-c8f0-4edb-a4bc-f7551f4d0971	1	2018-07-23 15:31:50.026+08	2018-07-23 15:31:50.026+08	1f235ab7-7bbb-4c4a-b106-7a0a435448bf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
453c3722-5749-445a-9d0f-12b3f13c5f16	1	2018-07-23 15:34:09.531+08	2018-07-23 15:34:09.531+08	3c312b4a-0bd1-4ee4-acf1-5a51f99ed087	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
892f447b-ed6f-4eaa-8547-93100b1bdcf9	1	2018-07-23 15:37:15.297+08	2018-07-23 15:37:15.297+08	edfaccd5-edfd-4895-a519-541faa623db3	3dfadb0e-7608-49e1-aa43-24f7442b424a
3a9f673d-7ed0-4962-969c-c181928e01a4	2	2018-07-23 15:37:15.302+08	2018-07-23 15:37:15.302+08	edfaccd5-edfd-4895-a519-541faa623db3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7956fe10-dfc9-4716-9118-d3f4e8880bb5	1	2018-07-23 15:23:19.642+08	2018-07-25 09:42:50.581+08	4a1c835d-1f99-4d95-8d21-ceab11c714d3	452e3349-a87b-4b5b-97f9-7dc730f910fa
7deeff92-08bd-495a-9d0c-6be8709457ed	1	2018-07-25 09:50:10.776+08	2018-07-25 09:50:10.776+08	6d00ebcb-1976-40ff-8c6d-99e9df45035a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e9c82794-1f38-45a6-abee-3f54b3894669	1	2018-07-27 16:11:26.062+08	2018-07-27 16:11:26.062+08	75bcea50-3625-4248-9181-b8f541953270	9a1540b6-fea8-4bc0-8090-296b05f87c4a
be6f5149-c66d-4043-8db5-8441d9996e6c	2	2018-07-27 16:11:26.07+08	2018-07-27 16:11:26.07+08	75bcea50-3625-4248-9181-b8f541953270	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
51ddec14-349a-4066-af32-e3870d29b3b2	1	2018-07-27 17:05:36.514+08	2018-07-27 17:05:36.514+08	ab820c4a-1397-4605-b9d5-68aea01ab2b5	7fd05290-f814-4049-812f-b8c7865ec221
167a9888-36c3-4f8f-9b23-06f3f7751c23	1	2018-07-28 17:05:35.555+08	2018-07-28 17:05:35.555+08	039664c3-5d24-4edb-b251-7540c98dc2ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7f331791-d57f-4760-8a73-869a52dc89c1	1	2018-07-28 17:20:27.362+08	2018-07-28 17:20:27.362+08	d0e4432b-aeb4-4004-b728-9ef120f0e1db	71458c57-c197-4b3c-9171-2cdc5658201e
5ee8afd8-6862-4d72-ac27-ab94a67d2516	2	2018-07-28 17:20:45.008+08	2018-07-28 17:20:45.008+08	d0e4432b-aeb4-4004-b728-9ef120f0e1db	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ead1ab34-9fee-42d7-af72-e553327035b9	1	2018-07-31 09:20:17.914+08	2018-07-31 09:20:17.914+08	8d37a4fb-8add-44a4-ad5e-a8d190e87209	9a1540b6-fea8-4bc0-8090-296b05f87c4a
45845af8-6001-40d8-9c80-a62cd1c498b2	1	2018-07-31 14:22:29.692+08	2018-07-31 14:22:29.692+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	118383e6-1b61-4e15-8dee-a1a2a61b531e
f56a4f85-44cc-4ea7-970e-858dd9150566	1	2018-07-31 14:53:45.771+08	2018-07-31 14:53:45.771+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	118383e6-1b61-4e15-8dee-a1a2a61b531e
66642664-b51f-4599-a75a-963d32a18ca7	1	2018-07-31 15:03:45.587+08	2018-07-31 15:03:45.587+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	118383e6-1b61-4e15-8dee-a1a2a61b531e
9c2bfc48-4d7b-477f-8a2a-f0fd329da5bf	1	2018-07-31 15:12:59.341+08	2018-07-31 15:12:59.341+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	118383e6-1b61-4e15-8dee-a1a2a61b531e
90b3d65e-5aec-420b-948e-4bb6cd546963	1	2018-07-31 15:15:53.673+08	2018-07-31 15:15:53.673+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	118383e6-1b61-4e15-8dee-a1a2a61b531e
caf61f62-b229-4355-8d3f-dcf42c8a32eb	1	2018-07-31 17:07:23.879+08	2018-07-31 17:07:23.879+08	b3f251c1-ab5e-4427-8b38-9180d6544783	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
4b2e8fe7-8d33-4c61-b54a-62caea9e3947	1	2018-07-31 15:18:58.267+08	2018-07-31 15:18:58.267+08	9110f259-e269-446d-afa3-798069f4534d	118383e6-1b61-4e15-8dee-a1a2a61b531e
f62fb242-cddb-4387-ae70-7b27fcd161af	1	2018-07-31 16:19:11.949+08	2018-07-31 16:19:11.949+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
0511247f-0b74-49af-9ec1-81899d8c1024	1	2018-07-31 17:07:35.166+08	2018-07-31 17:07:35.166+08	b3f251c1-ab5e-4427-8b38-9180d6544783	7667c2d9-3c04-4818-bfeb-42f43b60af77
762e55a6-c0c8-4444-8a74-24102e58cccd	1	2018-07-31 17:11:13.208+08	2018-07-31 17:11:13.208+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
b3e5ceec-9730-4ea1-a4ae-5e8e3082f718	1	2018-07-31 17:21:20.032+08	2018-07-31 17:21:20.032+08	11a0df92-8921-470b-af9c-d7593b8b1f78	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
c652dfcc-2815-482e-92fa-d71e3647a73d	1	2018-10-10 11:24:53.689+08	2018-10-10 11:24:53.689+08	dc4b89d8-51e0-4b94-91d7-92d61a59a696	9a1540b6-fea8-4bc0-8090-296b05f87c4a
42916342-ec67-4a16-9274-d09bfd9bd8af	2	2018-10-10 11:24:53.693+08	2018-10-10 11:24:53.693+08	dc4b89d8-51e0-4b94-91d7-92d61a59a696	6c047530-0656-4cb4-a416-f4ac00b015f9
4dd766ed-6f42-4028-8d71-180701484513	1	2018-11-09 14:49:07.696+08	2018-11-09 14:49:07.696+08	296a97ca-fbd1-4876-83b2-f40a7fa7d5c5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2b007e18-5525-47fc-9a41-fd337b33dbbf	1	2018-11-22 17:12:56.413+08	2018-11-22 17:12:56.413+08	3b867352-5d0b-4016-a55f-4d68d0dcbaa4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f0c7e12e-dbe8-4c3e-9b01-cf184c7eef29	1	2018-12-10 11:36:18.833+08	2018-12-10 11:36:18.833+08	d4582a57-2984-4d20-94de-598f5b28a188	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d4a10687-30a5-42f2-bfba-bd833a11152b	1	2018-12-18 16:53:41.307+08	2018-12-18 16:53:41.307+08	b640a9ef-9a1c-4973-ada5-0cdab7877f55	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0139ef61-9f17-416c-ad0f-70f24fe921e8	1	2018-12-22 09:15:30.081+08	2018-12-22 09:57:45.599+08	2aec4a46-de9a-40e0-ac97-bdb0d149e82d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
26daa22f-efbc-421c-8600-042b16026119	1	2018-12-24 15:31:37.9+08	2018-12-24 15:31:37.9+08	2202dd15-500f-45e8-a555-e90ddf24df13	9a1540b6-fea8-4bc0-8090-296b05f87c4a
84b3c3bd-bbc6-4ce1-ba57-02c4d7bc86a6	1	2018-12-28 11:30:29.891+08	2018-12-28 11:30:29.891+08	bc87beae-9433-42de-875d-6981e7975f21	9a1540b6-fea8-4bc0-8090-296b05f87c4a
615c536b-700b-4b98-beac-b0bda377b4bd	1	2019-01-04 18:36:21.56+08	2019-01-04 18:36:21.56+08	f90616c7-29f8-4aa3-863b-c67c6ef4ec61	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b194ce55-ccc1-4265-8dab-a705947e6817	1	2019-01-08 16:04:57.713+08	2019-01-08 16:09:28.447+08	36f70703-df53-42ae-a8da-e001d8215fd8	3dfadb0e-7608-49e1-aa43-24f7442b424a
f10cf6e2-3599-438c-9f98-8fa73bfecd62	1	2019-01-14 15:47:03.723+08	2019-01-14 15:47:03.723+08	4eb4d7ed-2199-4514-9411-9c12d59f72e3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
10ac1a73-d796-4fba-a87d-78f1352e2e13	1	2019-01-19 14:34:12.831+08	2019-01-19 14:34:12.831+08	9eef0ea4-1634-4d46-a9fb-6613a37b9431	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bc561d59-77ee-4011-8762-39608d6b9c5a	1	2019-01-19 14:35:13.514+08	2019-01-19 14:35:13.514+08	f5cf2b42-6efc-474b-aad5-f5614e5ec0d8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
938c98b5-a684-498c-aecf-a82a98e519d6	2	2019-01-22 15:15:43.189+08	2019-01-22 15:15:43.189+08	ff9746d5-839e-46dc-aae9-ec714680e041	1aa841f1-d3fb-4523-9b54-e601d350c745
c73341e3-6650-4b19-9fa7-beb642ef4307	2	2019-01-22 15:15:43.191+08	2019-01-22 15:15:43.191+08	ff9746d5-839e-46dc-aae9-ec714680e041	8774b4f0-60c1-4c7d-940b-f3a847c2847a
2c6a3261-9129-46ad-969b-1d0f360dc9a3	1	2019-01-22 15:15:43.193+08	2019-01-22 15:15:43.193+08	ff9746d5-839e-46dc-aae9-ec714680e041	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5
a4a803d0-a15c-4d5c-9c5f-c93e13505c5f	1	2019-02-25 11:52:45.914+08	2019-02-25 11:52:45.914+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bb24e66d-41e6-41d0-bc4b-30660c057030	1	2019-02-25 11:52:45.918+08	2019-02-25 11:52:45.918+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	1aa841f1-d3fb-4523-9b54-e601d350c745
1874d1bb-32c6-4c07-b240-9ce47ecec1bf	1	2019-02-25 11:52:45.921+08	2019-02-25 11:52:45.921+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	d0e8f529-c1bf-4146-beef-cd3056ea9787
e3216636-9763-4b64-a0f3-a5d7f9fb40f0	1	2019-02-25 14:20:41.315+08	2019-02-25 14:20:41.315+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2b780bf5-2292-4dbe-ad9e-dcf41181f5d9	1	2019-02-25 14:20:41.319+08	2019-02-25 14:20:41.319+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	d0e8f529-c1bf-4146-beef-cd3056ea9787
da3c65bd-1c3b-4e2d-9c93-df7bc942e10f	1	2019-02-25 14:20:41.322+08	2019-02-25 14:20:41.322+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	118383e6-1b61-4e15-8dee-a1a2a61b531e
c627dfb1-eb49-4687-929a-9e02683846ff	1	2019-02-25 15:51:46.867+08	2019-02-25 15:51:46.867+08	18b82e73-7501-445f-a72c-a8e20cf9da40	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ecbc8c0a-03af-480d-9141-1943fbb35ab1	1	2019-02-25 15:51:46.872+08	2019-02-25 15:51:46.872+08	18b82e73-7501-445f-a72c-a8e20cf9da40	d0e8f529-c1bf-4146-beef-cd3056ea9787
102c5517-619e-4b9f-9e4c-7cbf4437765d	1	2019-03-19 16:45:17.826+08	2019-03-19 16:45:17.826+08	e4a7eb69-0c5d-4b87-b1af-913b0220dea2	ac94d09e-3893-4f3d-b42b-0825be96e0c7
2f9e8480-78ae-4d06-8dae-9bfb384c7ae6	2	2019-04-03 17:24:15.665+08	2019-04-03 17:24:15.665+08	53efa30f-f738-43ef-9600-0963b6b108fd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1b35e5c9-e4c7-49dc-a957-87cf135a7271	1	2019-04-08 11:04:20.109+08	2019-04-08 11:04:20.109+08	b73a2e67-7654-49ce-890a-7c2dfec89a03	b3cb9990-288c-4f0d-a91a-547254d1d9c6
8e90f68c-0a42-4565-a0a0-734b5b4bd99c	1	2019-04-25 15:02:30.566+08	2019-04-28 14:19:34.521+08	83960893-0d31-4f1e-a576-69a4e7bce94c	66537b16-1e7d-4823-b03e-676459f5891d
ba500390-3f34-454c-a11c-46a503db2d3e	1	2019-04-18 13:55:48.225+08	2019-04-18 13:55:48.225+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b342d887-3839-4ce0-9314-4cdf7c9e7895	1	2019-04-19 11:06:37.311+08	2019-04-19 13:59:55.467+08	ef966a9a-d938-4526-af04-cee74ea9b600	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f547f965-5d5f-4aea-811e-8057633bc374	1	2019-04-23 14:45:48.306+08	2019-04-23 14:45:48.306+08	4aac7755-6f82-41a7-adde-756a7548c7f4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
54db998e-43ed-46da-9c44-ff738728ed07	1	2019-04-24 09:19:20.82+08	2019-04-24 09:19:20.82+08	29a8cde9-51c6-4647-8153-de06449e2ba2	7bc18b0f-46d5-403a-893a-029eed333a46
b9704e98-04a2-4552-b0aa-d0ca02c0bc51	1	2019-02-22 13:35:17.625+08	2019-04-29 16:06:19.398+08	4068ff34-b211-4386-b274-0a6b12f35b59	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
21f1570a-9a90-44c7-a20e-df59a4f0665c	2	2019-05-07 15:57:23.332+08	2019-05-07 16:48:33.287+08	573fb497-e583-41c4-ba6b-ecf548921eaf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d66fa059-5b42-428c-9c83-65b31ec08a45	1	2019-05-08 18:17:31.597+08	2019-05-08 18:17:31.597+08	ecad4b77-ab58-460f-8469-b89b3c77d796	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a0c4221e-b5ca-486b-8f8d-f98ec84e87f9	1	2019-05-09 10:06:14.144+08	2019-05-09 10:06:14.144+08	54e76b93-f8ed-407b-b112-ed4a85db50db	9a1540b6-fea8-4bc0-8090-296b05f87c4a
07ea4428-ccd3-428f-a85b-1c8460c545fa	1	2019-05-23 13:53:19.245+08	2019-05-23 13:53:19.245+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592	9a1540b6-fea8-4bc0-8090-296b05f87c4a
19f133c9-6f68-4f24-87fd-14d6fdf4120d	1	2019-05-29 14:51:02.756+08	2019-05-29 14:51:02.756+08	82ec14e4-a0ee-4d21-9fcb-24cde7cf551b	66537b16-1e7d-4823-b03e-676459f5891d
18765cd8-d70d-4f27-9272-3a873ab16682	2	2019-05-23 13:53:19.242+08	2019-05-31 16:19:09.067+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7cf8f57e-36fa-47e1-9c4f-eadd2c5a6f58	1	2018-07-31 16:20:35.99+08	2018-07-31 16:20:35.99+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
3ac73307-9df7-4d10-a3be-af55d9bf116b	1	2018-07-31 17:21:32.095+08	2018-07-31 17:21:32.095+08	11a0df92-8921-470b-af9c-d7593b8b1f78	7667c2d9-3c04-4818-bfeb-42f43b60af77
80c119de-eb55-4e71-b726-4bd7554c9cab	1	2018-10-10 11:26:00.994+08	2018-10-10 11:26:00.994+08	7febae4c-c706-48a8-9f99-e546f48e338b	6c047530-0656-4cb4-a416-f4ac00b015f9
587f6401-8b02-441d-b1f7-fd05c1de5877	2	2018-10-10 11:26:00.998+08	2018-10-10 11:26:00.998+08	7febae4c-c706-48a8-9f99-e546f48e338b	0af1af55-38cd-43c1-abe3-b71570342d40
d7bb4068-12cd-41d5-ab05-2b61891b4c76	1	2018-11-09 17:35:43.402+08	2018-11-09 17:35:43.402+08	5e44f909-0d21-4d00-82f5-d3502e192e18	66537b16-1e7d-4823-b03e-676459f5891d
74693392-a0a7-4214-9a28-7e36b761542e	1	2018-11-22 17:30:26.337+08	2018-11-22 17:30:26.337+08	dff02ef2-0438-415d-9327-cdd883c38c81	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6aae0b51-ec60-4612-a5bf-bfb15e46401a	1	2018-12-18 16:53:41.846+08	2018-12-18 16:53:41.846+08	b0726a2c-5c69-481f-8d2d-d8f8e17a248d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6ff79b88-32b8-4293-b82e-ce1e9c1102df	1	2018-12-11 10:31:53.261+08	2018-12-26 11:47:17.502+08	d8de8739-f146-41e0-877e-747f30ac59a7	a8f77633-9fe3-4228-b557-34a9108b3d50
1bdc5e70-82a2-4784-85fc-3dfa298e5d35	1	2018-12-28 11:30:32.412+08	2018-12-28 11:30:32.412+08	21387f8b-b7bb-48c8-9972-7ff32e01f2fa	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3ec66b5d-883c-4ae8-a7ae-2977a544c5ab	1	2019-01-14 15:48:47.003+08	2019-01-14 15:48:47.003+08	9db37a62-7896-4477-a3c4-7d317d28f26e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3eccadd7-08d3-44e8-b1b4-e23b646bd03b	1	2019-01-19 15:00:28.912+08	2019-01-19 15:00:28.912+08	e1d537c6-2a5b-4b97-91ea-a2bd94093494	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f7568e77-c6a6-4c03-8484-16c935134b2b	1	2019-02-25 11:55:32.878+08	2019-02-25 11:55:32.878+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f1a7bcec-66c4-498e-9739-b940ed9e0fa9	1	2019-02-25 11:55:32.882+08	2019-02-25 11:55:32.882+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	1aa841f1-d3fb-4523-9b54-e601d350c745
d90d60d1-ad46-40d4-a382-f71eed7ddfcc	1	2019-02-25 11:55:32.886+08	2019-02-25 11:55:32.886+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	d0e8f529-c1bf-4146-beef-cd3056ea9787
3b4a9a5f-f359-465f-8082-cd95b32b6c73	1	2019-02-25 14:21:56.98+08	2019-02-25 14:21:56.98+08	d26842d0-7685-4eec-869d-160b023932b9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bc09c546-2858-43b3-9a27-880b1601f475	1	2019-02-25 14:21:56.984+08	2019-02-25 14:21:56.984+08	d26842d0-7685-4eec-869d-160b023932b9	d0e8f529-c1bf-4146-beef-cd3056ea9787
bbc1ddfa-9e1f-4ff2-bee6-a0b2720f41ff	1	2019-02-25 14:21:56.987+08	2019-02-25 14:21:56.987+08	d26842d0-7685-4eec-869d-160b023932b9	118383e6-1b61-4e15-8dee-a1a2a61b531e
437f278c-a4b7-4b5f-aa56-bd31c07374d3	1	2019-02-25 16:01:22.94+08	2019-02-25 16:01:22.94+08	3c72a231-83a6-4d92-88d3-d58e0660cef9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b0773d91-90a0-4b35-bb6e-3f1fde2fe240	2	2019-02-25 16:01:22.944+08	2019-02-25 16:01:22.944+08	3c72a231-83a6-4d92-88d3-d58e0660cef9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8a7b5668-623e-4563-a0a1-1ed55b88e481	1	2019-03-27 10:19:53.295+08	2019-03-27 10:19:53.295+08	00e79982-c3d7-4bef-a27d-050dc08eaf82	68238334-fea4-4bc0-b1cd-98456c41faab
684cc240-1b5d-4df2-9609-f00de3ca4fcc	1	2019-05-07 16:48:28.941+08	2019-05-13 14:03:11.482+08	573fb497-e583-41c4-ba6b-ecf548921eaf	66537b16-1e7d-4823-b03e-676459f5891d
d02c8816-621a-49f2-85c0-3271f96748b5	1	2019-04-18 13:56:20.379+08	2019-04-18 13:56:20.379+08	11a0df92-8921-470b-af9c-d7593b8b1f78	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
99834e03-b0e6-4357-a9e2-b9a84d65263e	2	2019-04-23 15:03:33.254+08	2019-04-23 15:03:33.254+08	4aac7755-6f82-41a7-adde-756a7548c7f4	7bc18b0f-46d5-403a-893a-029eed333a46
13eecc28-7330-407f-9903-09b4dc78240a	1	2019-04-24 09:21:38.789+08	2019-04-24 09:21:38.789+08	0ffa5291-87ea-4e05-b031-ef948c53b474	7bc18b0f-46d5-403a-893a-029eed333a46
c6686a13-535d-4320-8b33-c625dbcbe77a	1	2019-05-28 15:02:38.78+08	2019-05-29 15:25:32.796+08	290bae7d-a183-4af8-be82-963486855761	876d87b1-cccb-4847-80ea-dabfc20a2175
d2bcc066-99d6-44a5-89b5-f3263bc219c0	1	2019-05-31 16:20:56.765+08	2019-05-31 16:20:56.765+08	3d182049-68c9-440d-adde-b62b71abee38	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f204c0b8-74ab-42e2-a6fd-57944219dc48	1	2019-05-31 16:22:37.289+08	2019-05-31 16:22:37.289+08	b8061f6d-fe6e-443d-bed9-8b4e7fb81a71	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bb576050-eafc-4b48-80fd-4efee1d5db5d	1	2019-02-22 13:44:23.965+08	2019-04-29 16:06:37.426+08	c70bf363-fc19-41f9-80df-27a231a1a2bd	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
3499e091-c394-497f-bd44-36b866260f82	1	2019-05-31 16:23:50.064+08	2019-05-31 16:23:50.064+08	6c6b5c79-b408-447c-b2b1-3ff7bf122a19	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
73d79c2e-3ea0-42b1-ae44-65de9a5631c2	1	2019-05-31 16:25:36.714+08	2019-05-31 16:25:36.714+08	d1b35088-9410-4203-924c-75b60634c7c6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e2a67d8f-a482-4e0f-9ca6-5a351dce52db	2	2019-06-11 15:06:43.224+08	2019-06-11 15:06:43.224+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
8f62138e-2ba9-42e6-960f-0c9996e6bb32	1	2019-06-11 15:06:43.227+08	2019-06-11 15:06:43.227+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f0f85539-ea18-4c2e-b967-245a0d7fadca	1	2019-06-11 15:43:02.159+08	2019-06-11 15:43:02.159+08	57df002c-3fa7-4684-a2b3-f46f54b7f87b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b3e99a42-2843-488a-9745-1be8cd4250d9	1	2019-06-11 15:43:02.163+08	2019-06-11 15:43:02.163+08	57df002c-3fa7-4684-a2b3-f46f54b7f87b	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
2a1269b0-1a5e-4abe-a183-bfd4ee301351	1	2019-06-11 15:50:05.408+08	2019-06-11 15:50:05.408+08	888fb650-543d-4141-a70e-7dff25dfffe7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b9595344-32b0-4fa3-9516-545d002add5f	1	2019-06-11 15:55:27.354+08	2019-06-11 15:55:27.354+08	2f885022-839d-4c38-ae7a-b4c9881ca394	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
933f6013-a45d-4373-b637-bdf66de02c3a	1	2019-06-11 15:55:27.357+08	2019-06-11 15:55:27.357+08	2f885022-839d-4c38-ae7a-b4c9881ca394	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3363d9e0-2735-405a-bdb3-d15c36520807	1	2019-06-11 15:59:09.834+08	2019-06-11 15:59:09.834+08	c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
0d24fa6d-e98f-46b5-a3f9-67b3e859cb96	1	2019-06-11 15:59:09.837+08	2019-06-11 15:59:09.837+08	c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8e07b05a-7ca0-4958-bd13-4e85847f4b81	1	2019-06-11 16:14:17.083+08	2019-06-11 16:14:17.083+08	f93393d2-0bfd-4685-b6d9-31287c466007	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
d6b7c19f-46c8-4909-b997-d9ccec20f591	1	2019-06-11 16:18:28.994+08	2019-06-11 16:18:28.994+08	acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
ad1e9529-19f6-4407-b675-4625883988ef	1	2019-06-11 16:27:10.947+08	2019-06-11 16:27:10.947+08	f70240a0-3384-4984-a854-65fe5b16dc0a	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
d3b80e8a-111b-400d-8894-0b4ea74fc09b	1	2019-06-11 16:27:10.952+08	2019-06-11 16:27:10.952+08	f70240a0-3384-4984-a854-65fe5b16dc0a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fb0a2107-aa2b-450a-b87e-534e8281eec9	1	2019-06-11 16:37:25.8+08	2019-06-11 16:37:25.8+08	2142db9e-293b-43a9-9883-3d41391ba533	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
0c9c30de-3021-42b5-845f-d418fa88b181	1	2019-06-11 16:37:25.803+08	2019-06-11 16:37:25.803+08	2142db9e-293b-43a9-9883-3d41391ba533	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9a007f5b-80af-443f-ad5e-b2b897b8caf9	1	2019-06-11 16:41:49.138+08	2019-06-11 16:41:49.138+08	c06263f7-c818-41f4-949a-4a526770fa9b	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
83ada60d-d85e-488c-930a-b8b5e6a10aa4	1	2019-06-11 16:41:49.142+08	2019-06-11 16:41:49.142+08	c06263f7-c818-41f4-949a-4a526770fa9b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
18a4fb1d-a113-4ae3-81d7-405348e26869	1	2018-07-11 14:03:53.552+08	2018-07-31 16:39:27.571+08	c3455ece-210c-4203-af82-88b61e4b2584	6eeb1913-71e2-40b2-ae39-c8750cbdefd7
820be4de-7ec1-46b8-a364-0b98e4111d9d	1	2018-08-01 09:11:07.377+08	2018-08-01 09:11:07.377+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
b1688753-3e48-4e22-a4dd-3acb689792bb	1	2018-08-01 09:11:14.829+08	2018-08-01 09:11:14.829+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	7667c2d9-3c04-4818-bfeb-42f43b60af77
72477d9c-fe9f-4047-a008-32bd34c54fd4	1	2018-08-01 09:19:16.826+08	2018-08-01 09:19:16.826+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
15d6e1c6-40bd-42c1-8038-7a60a99a22ac	1	2018-08-01 09:19:22.855+08	2018-08-01 09:19:22.855+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	7667c2d9-3c04-4818-bfeb-42f43b60af77
e6b914ee-1893-44c7-bb8e-ebf12fce3747	1	2018-08-01 09:32:21.771+08	2018-08-01 09:32:21.771+08	76288807-186e-4444-a1ce-6be599aacfd2	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
4c4c16be-53e5-4082-b62a-71cf80609053	1	2018-08-01 09:32:38.399+08	2018-08-01 09:32:38.399+08	76288807-186e-4444-a1ce-6be599aacfd2	7667c2d9-3c04-4818-bfeb-42f43b60af77
d6f3f5ec-f72e-417f-9d32-834f93d9f54e	1	2018-08-01 16:02:48.208+08	2018-08-01 16:02:48.208+08	9f4bea7e-e18f-431e-af3b-9bac229c98c6	3dfadb0e-7608-49e1-aa43-24f7442b424a
1732751d-5b07-4bb4-aced-1bde9707a202	2	2018-08-01 16:04:38.435+08	2018-08-01 16:04:38.435+08	9f4bea7e-e18f-431e-af3b-9bac229c98c6	d0ad76ed-4f11-4355-b876-7f1b04037ae1
99bb5c58-f2bd-437a-bcf3-e1376792d2b5	1	2018-08-01 16:20:24.307+08	2018-08-01 16:20:24.307+08	82edfa3d-c080-4212-ad83-32be43b48841	d0ad76ed-4f11-4355-b876-7f1b04037ae1
7098e077-d8df-4873-867e-f6229109c503	2	2018-08-01 16:20:24.31+08	2018-08-01 16:20:24.31+08	82edfa3d-c080-4212-ad83-32be43b48841	c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
bab8da8a-0a49-44f2-ade7-d8b741b2e868	1	2018-08-01 16:25:49.74+08	2018-08-01 16:25:49.74+08	915fc949-c75f-47a9-8ba5-f516f0eb6228	c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1
dbeac185-ea2d-440d-bd83-59c03d164dce	2	2018-08-02 10:31:04.101+08	2018-08-02 10:31:04.101+08	2cbbf402-789b-4c54-b408-7e61934ebd4d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fe0c5930-84b8-445c-9665-59f2c880f8a4	1	2018-08-02 10:31:54.569+08	2018-08-02 10:31:54.569+08	705738a1-f330-4875-a2a0-23c30ec9f5d4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
767752a2-9e11-4345-9b42-df1d3a202742	1	2018-08-02 10:33:18.531+08	2018-08-02 10:33:18.531+08	6b4905df-caae-4bcc-a8a7-c99cb7866e06	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4e563302-f20e-4001-855b-d9cb1b56ad64	1	2018-08-02 10:35:48.069+08	2018-08-02 10:35:48.069+08	8e67e334-231e-467c-8868-c41461d9463e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
549b472a-04f4-4df6-b246-2c324c122e2c	1	2018-08-02 10:37:02.583+08	2018-08-02 10:37:02.583+08	e1f36777-486a-4527-a30f-61d17b7a8796	452e3349-a87b-4b5b-97f9-7dc730f910fa
fabc7925-e9e4-408c-90fe-338bff871125	1	2018-08-02 10:41:04.603+08	2018-08-02 10:41:04.603+08	77a4b2d1-adf0-4cab-be7e-5f4635e4063f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1d497ad7-f56a-4e73-959f-29424bb92a2c	1	2018-08-02 10:31:04.096+08	2018-08-02 10:47:30.612+08	2cbbf402-789b-4c54-b408-7e61934ebd4d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2768cdc7-6232-43bc-a8f0-dd8bd3be5b29	1	2018-08-03 07:13:57.952+08	2018-08-03 07:33:55.174+08	cd27d23f-a55d-4ce0-8c59-33675bb5ad62	876d87b1-cccb-4847-80ea-dabfc20a2175
bc83ff5f-4941-4f5e-883e-f3a6d84964b0	2	2018-08-03 07:28:29.455+08	2018-08-03 07:37:26.908+08	f556a96a-5649-49c8-beae-aa08f2faa752	876d87b1-cccb-4847-80ea-dabfc20a2175
301a49ab-6faf-4a1b-8080-2bf10037f0ca	1	2018-08-03 07:37:35.181+08	2018-08-03 07:37:35.181+08	f556a96a-5649-49c8-beae-aa08f2faa752	d0ad76ed-4f11-4355-b876-7f1b04037ae1
d4fa3b20-5cd6-4baa-a7e2-0df8ddd2dfd8	1	2018-08-03 10:29:52.686+08	2018-08-03 10:29:52.686+08	777c9799-3abe-4eee-a583-f5e6fac01946	876d87b1-cccb-4847-80ea-dabfc20a2175
1e05a174-7435-4ab9-95dc-77a4fae8f42c	1	2018-08-03 10:36:00.509+08	2018-08-03 10:36:00.509+08	5f65c5dc-c32f-4e64-b40e-97f907d7c0fd	876d87b1-cccb-4847-80ea-dabfc20a2175
bc13f6ad-4c38-4542-bb2b-acadf895ab86	1	2018-08-03 10:41:17.479+08	2018-08-03 10:41:17.479+08	bc1228dd-0195-4fba-b21f-178b91e4cf60	876d87b1-cccb-4847-80ea-dabfc20a2175
5957e111-c3a4-4000-8948-6d1a7d17a7aa	1	2018-08-07 15:28:19.794+08	2018-08-07 15:28:19.794+08	c8b20fe8-531f-47aa-96cd-3d48ea0bc238	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5581361e-e00e-4621-b14d-ab5ffb4ec262	1	2018-08-07 15:28:53.903+08	2018-08-07 15:28:53.903+08	d6fe2897-a3e2-4aa8-9ba2-459831131cfa	9a1540b6-fea8-4bc0-8090-296b05f87c4a
540e245d-e5ba-4d59-a656-7aa61125273e	2	2018-08-09 08:30:07.964+08	2018-08-09 08:30:07.964+08	af95a9b9-46f4-4714-b286-3b7a92ef7c43	3dfadb0e-7608-49e1-aa43-24f7442b424a
f3eb0b34-26c7-4f24-9771-7a55f39cc3c9	1	2018-08-09 14:40:15.565+08	2018-08-09 14:40:15.565+08	89ac2618-0c0c-45b5-a8a1-401e2c16189c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
62796f44-b914-45f5-93a9-731b794d28c8	1	2018-08-09 14:40:18.309+08	2018-08-09 14:40:18.309+08	2975be5f-7c2a-41d3-9157-e723ecfa9120	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b18e471e-bbbd-43c1-b2bc-d83883e0967e	1	2018-08-09 14:55:00.868+08	2018-08-09 14:55:00.868+08	cc6193d5-14b6-4231-a6f6-905db9c4a33c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9261925a-95b4-4602-9111-b6178b6ab599	1	2018-08-09 15:00:04.569+08	2018-08-09 15:00:04.569+08	793d9a65-784f-4f17-840d-51ac6a2f2ddd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cac26ff8-0020-4e6c-8bdd-95c3c6cfccdb	1	2018-08-09 16:03:13.759+08	2018-08-09 16:03:13.759+08	6dab819c-b584-4aea-bf13-c12a6a595abb	ca45c7c2-42df-48cc-849c-c4cd01067e5d
9c410fee-4422-4380-932d-b463266ee7d3	2	2018-08-09 16:03:13.761+08	2018-08-09 16:16:17.142+08	6dab819c-b584-4aea-bf13-c12a6a595abb	2c95c010-e14a-4284-89d5-a69fc7f2ed37
32cde6c6-f27b-42fc-bd86-6b137168099e	1	2018-08-09 16:17:22.299+08	2018-08-09 16:19:05.653+08	f698a0a5-7e2b-4c2e-a66f-c33ff5f05689	2c95c010-e14a-4284-89d5-a69fc7f2ed37
94e7b97c-4024-4c29-90f1-244939526615	1	2018-08-09 16:19:28.507+08	2018-08-09 16:19:55.765+08	6bd84b2f-3226-42ea-94b6-f740a5b60878	6f8504db-8b86-4b33-a0c6-721249b63f46
7cbeab2b-ae06-4273-8ee9-266a9e2948fc	2	2018-08-09 16:24:15.675+08	2018-08-09 16:24:15.675+08	f698a0a5-7e2b-4c2e-a66f-c33ff5f05689	6f8504db-8b86-4b33-a0c6-721249b63f46
29459873-dfc4-4a81-acfb-927d10b96504	1	2018-08-10 09:23:32.71+08	2018-08-10 09:23:32.71+08	05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb	2c95c010-e14a-4284-89d5-a69fc7f2ed37
fa8a97c3-5707-4684-afd4-d4741b0a1849	2	2018-08-10 09:23:32.715+08	2018-08-10 09:23:32.715+08	05d80c4b-4b8f-428a-bcb0-55fb2f8b5edb	6f8504db-8b86-4b33-a0c6-721249b63f46
91be2158-bafa-4eb4-863b-d32efa4de0bb	1	2018-08-10 09:50:00.67+08	2018-08-10 09:54:30.77+08	342fde79-43b6-4d56-b5bc-37de3056e9fd	6f8504db-8b86-4b33-a0c6-721249b63f46
9bbc6377-d6cd-44ea-a123-fca513a10203	1	2018-08-10 09:48:55.482+08	2018-08-10 09:54:41.964+08	7789641b-3a02-4369-b80e-894bacaa5cec	6f8504db-8b86-4b33-a0c6-721249b63f46
fc18a218-68fb-442b-ab28-cb0c1a7ed52c	1	2018-08-10 09:43:03.96+08	2018-08-10 09:54:50.561+08	f63309ff-a714-4bd7-9052-30c217fa982e	6f8504db-8b86-4b33-a0c6-721249b63f46
4e6dfa0f-e74c-4559-aedc-7c84e8545a87	1	2018-08-10 09:35:53.045+08	2018-08-10 09:55:10.356+08	9a9aa01c-948e-49a2-964f-cee49def906c	6f8504db-8b86-4b33-a0c6-721249b63f46
0676a9c6-2a67-4f1f-adab-f4938e3a11aa	1	2018-08-10 09:33:09.088+08	2018-08-10 09:55:27.811+08	307cf077-4fd9-4e6c-a60b-33fddf42a0e4	6f8504db-8b86-4b33-a0c6-721249b63f46
a695613e-cdcb-45bf-bc42-f569c998d922	1	2018-08-10 09:21:02.382+08	2018-08-10 09:56:08.787+08	145b9864-56d6-41e0-9a6c-3c68394e65e7	6f8504db-8b86-4b33-a0c6-721249b63f46
18e18a33-9f35-424b-b400-6ede2c984aef	1	2018-08-10 13:58:44.436+08	2018-08-10 13:58:44.436+08	290b9462-1958-4dce-a86f-a0f1c503c660	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e4838c48-621f-497f-8fd5-c49c9ca1b4cb	1	2018-08-10 14:52:45.121+08	2018-08-10 14:52:45.121+08	bbedec49-a055-4238-9e60-98ad22b84379	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1f7f0dab-85e1-4534-9cbb-7ef2233bb7e1	1	2018-10-10 11:27:19.861+08	2018-10-10 11:27:19.861+08	d94bb4f7-d5a8-4bb0-b866-c8008e5123ab	0af1af55-38cd-43c1-abe3-b71570342d40
ba2ba9d0-be95-455b-b670-307aef99bbc5	1	2018-10-30 22:17:59.321+08	2018-10-30 22:17:59.321+08	b03b1516-7e4a-41a4-9765-a1a485bb998a	5cc45782-5d73-4354-b2c1-4904e284c95b
0231c7bd-309b-4f78-9936-d012a427497f	1	2018-11-10 11:08:27.8+08	2018-11-10 11:08:27.8+08	7734e171-78b3-4a47-bccf-b812a1cf30f3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5c3be7dc-ab33-4131-854b-3a252f41281a	1	2018-08-10 16:44:30.631+08	2018-08-10 16:44:30.631+08	0f179575-cae8-4888-a644-1b66be3f8de2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
acf4fc51-1afd-4b17-ab81-5c286376efb4	1	2018-08-16 15:26:39.987+08	2018-11-22 16:03:35.751+08	3553eba2-db23-4cb8-b96d-e0d443644324	8396ee22-73b6-4375-a8be-854a047aecbf
e3aa6165-6e76-4852-bcca-389784ae48f9	1	2018-08-13 10:56:46.613+08	2018-08-13 10:56:46.613+08	6b2b2d8d-a99b-4052-9a48-2c12125e2f41	9a1540b6-fea8-4bc0-8090-296b05f87c4a
15e7c745-7a6a-4fcc-9856-2964e2fa817b	1	2018-08-14 14:13:28.646+08	2018-08-14 14:20:59.689+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	d4f271b6-567a-4880-beb0-161b33ac2094
3cd692df-6f92-4583-b5d9-c984d06ff486	1	2018-08-14 15:32:39.121+08	2018-08-14 15:32:39.121+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	7667c2d9-3c04-4818-bfeb-42f43b60af77
d3748bc0-b7f0-4ea1-b32e-8446ddae9b67	1	2018-08-14 16:18:30.088+08	2018-08-14 16:18:30.088+08	ebd999bc-a789-48f2-ac00-a15049b09e50	3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
71472f06-593e-411b-adc2-4b3eb520a1a1	1	2018-08-14 16:26:33.738+08	2018-08-14 16:26:33.738+08	3746abdd-af23-4d98-bca0-f29909e0d0c3	3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
686bd36b-e28a-435e-9568-0f256b5086e3	1	2018-08-14 16:31:33.436+08	2018-08-14 16:31:33.436+08	e405d9f6-8b46-4089-94e2-1437036d040b	3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
4b427bc9-84b9-4440-aff2-645c64601260	1	2018-08-14 16:36:12.213+08	2018-08-14 16:36:12.213+08	1f342dfc-9de3-4d9e-b772-416fa0bfe58a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c1f24df9-8281-4960-9068-09112a7b4087	2	2018-08-14 16:36:12.215+08	2018-08-14 16:36:12.215+08	1f342dfc-9de3-4d9e-b772-416fa0bfe58a	3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5
27b6c83c-8a53-487a-a8f2-cde18a5da18e	1	2018-08-15 09:48:18.554+08	2018-08-15 09:48:18.554+08	4e3f8da9-5108-45ea-a042-dfab49718c5b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c04eaad9-2d31-4bb1-bf18-63f3caa29a71	1	2018-08-15 10:53:47.747+08	2018-08-15 10:53:47.747+08	a5da9800-2b00-4701-8793-3aaad3e140f6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b18ce679-ba55-48e9-a324-7b90a90f5f99	1	2018-08-15 13:45:10.78+08	2018-08-15 13:45:10.78+08	0b9ab6dc-b8e5-4f20-a507-567be8892e4f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f3868f75-f941-4354-b7bb-c0d30b07c769	2	2018-08-15 13:45:10.783+08	2018-08-15 13:45:10.783+08	0b9ab6dc-b8e5-4f20-a507-567be8892e4f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
28d0290a-7423-4c1d-8164-7b8762604543	1	2018-08-15 14:38:59.635+08	2018-08-15 14:38:59.635+08	9f845f40-f7bf-4fe7-828e-8f488aff934e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
41073dc9-3180-4266-ae64-ef1d14e174f2	1	2018-08-15 14:39:57.307+08	2018-08-15 14:39:57.307+08	a99d7cc9-7afe-4415-93dd-bcdc193c5121	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2ebb555f-57dc-4dcc-9b91-730615b6ca61	1	2018-08-15 14:40:39.263+08	2018-08-15 14:40:39.263+08	b0c20a76-7e51-479c-9837-1516be5a1567	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
47bbaf8a-77eb-47fa-8d8e-ebc01555ea5e	1	2018-08-15 14:40:50.444+08	2018-08-15 14:40:50.444+08	ada233fb-1f59-4f50-991c-049331716bbf	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1af2457f-8ccf-4acb-9445-4e81b3c91225	1	2018-08-15 14:41:47.944+08	2018-08-15 14:41:47.944+08	b15e4068-3a0b-43cf-898a-151d9a211756	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b4cb33dc-55b9-4b8f-86cb-ed164802a931	1	2018-08-15 17:13:27.446+08	2018-08-15 17:13:27.446+08	c1738ab8-25cd-4216-823d-0159c2d9fc82	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5726c1e6-f383-4e73-9286-903d01e69d66	2	2018-11-22 17:39:48.791+08	2018-11-22 17:39:48.791+08	9d5905bc-0969-4032-ad57-69d6490fbc47	1aa841f1-d3fb-4523-9b54-e601d350c745
389a976f-3036-4ff6-900c-ebf2487c79e3	1	2018-11-23 16:18:45.322+08	2018-11-23 16:18:45.322+08	1db3d346-d4ae-41e3-9a98-d22760482541	3dfadb0e-7608-49e1-aa43-24f7442b424a
0ea71f12-7747-4d8f-ab2d-06fa78950245	2	2018-11-23 16:18:45.324+08	2018-11-23 16:18:45.324+08	1db3d346-d4ae-41e3-9a98-d22760482541	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5127c2ad-f91e-4619-9edf-973a09cd81b9	2	2018-08-16 15:30:42.251+08	2018-08-16 15:30:42.251+08	3553eba2-db23-4cb8-b96d-e0d443644324	9aece67a-050e-41a4-9b7d-7d890212f385
f872ce6c-3df6-4a1d-922a-00a70b1c1af2	1	2018-08-10 17:03:20.989+08	2018-08-16 15:59:44.099+08	8cb3528e-cadf-463e-9db2-003bb899ebb6	9aece67a-050e-41a4-9b7d-7d890212f385
50e9b4d1-2dc0-4ffc-bf5d-f1945b0f012b	1	2018-08-10 16:23:43.221+08	2018-08-16 16:00:02.281+08	030c456b-e97a-42a6-93b7-a6f48fcce4a6	9aece67a-050e-41a4-9b7d-7d890212f385
703a3444-277d-4e97-8a24-d2cea6881997	1	2018-08-16 16:25:36.768+08	2018-08-16 16:25:36.768+08	7bd233a3-8bb9-45d7-8298-278d0288de46	ad4f23f8-9213-4194-97ce-209a34596649
0edf5985-412a-448a-891a-5f89db140c8a	1	2018-12-18 16:53:42.371+08	2018-12-18 16:53:42.371+08	00824420-b248-4f1e-9e56-57e8573c9e35	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
da539a47-a027-4fdf-9036-10adb8dffa99	1	2018-12-28 11:30:33.804+08	2018-12-28 11:30:33.804+08	966cf4b9-f411-4764-bad3-2372cd867458	9a1540b6-fea8-4bc0-8090-296b05f87c4a
77558afc-920c-4316-9a55-b31c4ee1df61	1	2019-01-14 15:51:12.893+08	2019-01-14 15:51:12.893+08	3d8fcd19-8b2a-4d02-8dd3-de8e2c082dcc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5dbf1e88-6875-442e-b049-c57705ec9fa3	1	2019-02-22 15:14:23.573+08	2019-02-22 15:14:23.573+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0767af83-f061-4628-8cce-76a442d4b998	1	2019-01-22 09:31:07.195+08	2019-01-22 09:31:07.195+08	20b14a3c-9532-42df-b60c-baf4ba16865c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b6c88e58-4911-4b0b-8735-247bd7b4c383	1	2019-02-22 17:20:51.904+08	2019-02-22 17:20:51.904+08	dcac1d14-912a-4868-8be8-08d1e86d2fa5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2229186b-2e5b-4d19-8175-44c2bc060c0c	1	2019-02-25 13:30:26.991+08	2019-02-25 13:30:26.991+08	6e79c080-ecb3-4222-927e-f2dfcd85683a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6e6be4e9-0c8a-4281-97d5-d61407a645f5	1	2019-02-25 14:24:04.246+08	2019-02-25 14:24:04.246+08	f0443cf8-a24d-46f9-a894-7c731798736d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a71d3565-92e0-406e-93f6-9a5b9edb1917	1	2019-02-25 14:24:04.249+08	2019-02-25 14:24:04.249+08	f0443cf8-a24d-46f9-a894-7c731798736d	d0e8f529-c1bf-4146-beef-cd3056ea9787
3b7f8cc7-cdfb-433c-b2b1-3e94e0bb57af	1	2019-02-25 14:24:04.251+08	2019-02-25 14:24:04.251+08	f0443cf8-a24d-46f9-a894-7c731798736d	118383e6-1b61-4e15-8dee-a1a2a61b531e
688625b2-bc87-49e2-8183-5ea065fe988c	1	2019-02-25 16:03:31.495+08	2019-02-25 16:03:31.495+08	f7cf6cc3-3067-42c4-8d9d-85df26882451	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
9e907320-86e4-4bf3-b588-927cf6d6b615	1	2019-03-27 10:22:14.196+08	2019-03-27 10:22:14.196+08	6d7ee2b6-ee61-4933-9f14-9378592187da	68238334-fea4-4bc0-b1cd-98456c41faab
4e70af5d-5886-4442-a56c-9a7e6c65eaee	2	2019-04-16 10:59:31.907+08	2019-04-16 10:59:31.907+08	752edd7f-ca25-4a19-bf4a-53a700f2556a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
91a56b17-bd72-425a-b6fd-0c58a143058a	1	2019-04-23 15:05:42.79+08	2019-04-23 15:05:42.79+08	272894c2-dcd9-4a14-8205-f1e9a093f3cd	7bc18b0f-46d5-403a-893a-029eed333a46
89933af4-5fcc-4055-b42c-4f6ba258dae3	1	2019-02-25 13:30:26.994+08	2020-04-14 10:24:11.138+08	6e79c080-ecb3-4222-927e-f2dfcd85683a	25642488-1945-4865-81e7-e9593c12d208
9da50509-5f5e-41f3-b078-2be4bc483f28	1	2019-06-11 16:42:42.394+08	2019-06-11 16:42:42.394+08	7fae0d43-0664-4c19-9d35-db80a97b6da2	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
93585b8f-19ad-4e59-a78d-a9b4db270b0f	1	2019-06-11 16:42:42.397+08	2019-06-11 16:42:42.397+08	7fae0d43-0664-4c19-9d35-db80a97b6da2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9b003e5b-94a2-403d-bafe-8da8d349c4a0	1	2019-06-11 16:47:18.526+08	2019-06-11 16:47:18.526+08	3636e235-3352-4944-8092-c0b68a659ef1	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
f84dd7a8-a8a7-457d-9e2f-a80a0f866200	1	2019-06-11 16:47:18.529+08	2019-06-11 16:47:18.529+08	3636e235-3352-4944-8092-c0b68a659ef1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f5729179-77d7-43ba-b619-fdbffd719155	1	2019-06-11 17:11:17.099+08	2019-06-11 17:11:17.099+08	d52023ca-77dc-4b31-941a-5cb6d2b1a297	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
f1622883-4682-42a2-b06f-85d0f35881e9	1	2019-06-11 17:18:00.719+08	2019-06-11 17:18:00.719+08	67f6e3ca-2368-45ff-a678-53f942e71caa	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
7d00bdfc-22b4-4369-aee0-bffe91fe1e52	1	2019-06-11 17:18:00.722+08	2019-06-11 17:18:00.722+08	67f6e3ca-2368-45ff-a678-53f942e71caa	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
50837f7d-3037-44e0-a8c4-99aa7c6c6d24	1	2019-06-11 17:20:41.951+08	2019-06-11 17:20:41.951+08	4f72b98e-690d-429f-9b64-ab8de1c41a0b	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
d755e19b-5182-44e4-8053-3c670552773f	1	2019-06-11 17:20:41.954+08	2019-06-11 17:20:41.954+08	4f72b98e-690d-429f-9b64-ab8de1c41a0b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a8f79317-c98e-4a7e-8b54-5135e22f7e37	1	2019-06-11 17:24:10.302+08	2019-06-11 17:24:10.302+08	96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
0cff1454-261b-4273-aced-f792a7e564cf	1	2019-06-11 17:24:10.304+08	2019-06-11 17:24:10.304+08	96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
73d602d6-5deb-4c31-93ed-14ce2e0ba09e	1	2019-06-11 17:28:58.61+08	2019-06-11 17:28:58.61+08	14068f43-74c6-48e8-b004-29eefa28fd36	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
1f2484a1-2aec-45e0-82a9-21c642800c35	1	2019-06-11 17:32:28.566+08	2019-06-11 17:32:28.566+08	958debc4-8460-4237-a960-d51a6a866071	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
268d743b-a7ae-4a56-a182-a625c6ca57ef	2	2019-06-14 11:20:06.174+08	2019-06-14 11:20:06.174+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bc4fa7e9-4d2c-43da-ad06-0870638b5c4e	1	2019-06-14 11:20:06.172+08	2020-06-12 09:21:59.348+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7d40d4ad-ac31-4eb1-b9d8-c7fc8844ded5	1	2019-06-18 11:02:55.441+08	2019-06-18 11:02:55.441+08	9c72853f-96b7-41a6-ab9e-10eafbf22a10	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f89b5fe4-284c-47da-9883-f515e6d73929	1	2019-06-18 15:44:35.489+08	2019-06-18 15:44:35.489+08	8b3a3d99-7016-4c26-b6b6-65b742fcfc8b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
87e3b279-9de3-4649-9936-4d255890f9e9	1	2019-06-18 15:48:02.201+08	2019-06-18 15:48:02.201+08	e8b1dd32-dd34-4923-a91d-e21f81210749	9a1540b6-fea8-4bc0-8090-296b05f87c4a
99f48679-0083-474b-a125-a3c4f4180626	1	2019-06-19 13:58:50.986+08	2019-06-19 13:58:50.986+08	91fc5de6-ad9d-47e3-ace2-1c2bd04979e5	452e3349-a87b-4b5b-97f9-7dc730f910fa
add2ae46-f882-4fef-8a49-3bceea7fed6c	1	2019-06-19 17:34:39.411+08	2019-06-19 17:34:39.411+08	1b795716-096c-409d-8b43-290e31a0d4d5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
009461bc-fccf-4311-a769-a2d7dc5e05fa	1	2019-06-20 09:22:50.967+08	2019-06-20 09:22:50.967+08	b10f2486-b1e8-48d6-8683-216a40bcb3bb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
559c9c33-544e-421d-ae15-3a68d3a2c6a3	1	2019-06-20 16:55:24.372+08	2019-06-20 16:55:24.372+08	5b797de0-bd75-4cc6-9bb7-4811869ba7d3	66537b16-1e7d-4823-b03e-676459f5891d
d0e64f70-800d-4a6c-9488-47968026da81	2	2019-06-20 16:55:24.375+08	2019-06-20 16:55:24.375+08	5b797de0-bd75-4cc6-9bb7-4811869ba7d3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5c5d9637-e662-4957-aff8-a2c4004f2fd4	1	2019-06-21 13:52:33.007+08	2019-06-21 13:52:33.007+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5b9c612c-792f-4e87-994d-1243df194f42	2	2019-06-24 16:49:45.129+08	2019-06-24 16:49:45.129+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5aae81c0-30fe-4213-a681-58a6233419b9	1	2019-06-24 16:49:45.132+08	2019-06-24 16:49:45.132+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f4e5cb7a-c6da-4082-a9e6-7ce7fa47cc20	1	2019-06-25 11:39:02.381+08	2019-06-25 11:39:02.381+08	3d52e349-bf19-46d5-bb7e-f1f533d10190	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c416461c-d178-40d0-8285-9b9c160d0065	1	2019-06-26 11:57:22.681+08	2019-06-26 11:57:22.681+08	32a78a97-fea6-477a-9cfd-7f512d81b40c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8781643d-2409-419a-bef2-9fc163b064c4	1	2019-06-25 15:49:19.312+08	2019-06-25 15:49:19.312+08	239fdc2a-bd0a-4cd6-b0c4-f7371f99f620	66537b16-1e7d-4823-b03e-676459f5891d
6d14cdaf-b1e2-431a-8696-9509d87aee1b	1	2019-06-27 09:35:05.7+08	2019-06-27 09:35:05.7+08	9f8addd9-3d2e-434c-bc28-e73322276c7a	3dfadb0e-7608-49e1-aa43-24f7442b424a
4a91580f-4a23-43ca-abc5-60af4f1222ea	2	2019-06-27 09:35:05.703+08	2019-06-27 09:35:05.703+08	9f8addd9-3d2e-434c-bc28-e73322276c7a	8396ee22-73b6-4375-a8be-854a047aecbf
e52dbdd8-6a51-4429-b070-a5b11884694a	1	2019-06-27 09:35:12.068+08	2019-06-27 09:35:12.068+08	f41380a3-bc12-4229-8b46-67472fd5d9b3	8396ee22-73b6-4375-a8be-854a047aecbf
4de5bbb0-6933-4c1d-aa54-ff9347815cbb	2	2019-06-27 09:35:12.072+08	2019-06-27 09:35:12.072+08	f41380a3-bc12-4229-8b46-67472fd5d9b3	9aece67a-050e-41a4-9b7d-7d890212f385
a0a487d5-b5b6-4602-91fc-41239e82d20b	1	2019-06-27 09:35:21.02+08	2019-06-27 09:35:21.02+08	4b13a538-ac93-4bc0-8515-4181c57b8650	9aece67a-050e-41a4-9b7d-7d890212f385
1541e9b2-2463-4eb4-afab-8f459c685039	1	2019-06-27 09:35:29.133+08	2019-06-27 09:35:29.133+08	d1d8105f-3b3d-4c89-a378-2e76afbb6f36	9aece67a-050e-41a4-9b7d-7d890212f385
f6523358-73a3-44a6-8f22-21d34be28fea	1	2019-06-27 13:03:58.345+08	2019-06-27 13:03:58.345+08	1c182e32-a4cb-4882-991a-be791c200d73	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a3ab42f1-102e-48f9-a2f4-2909dfc0a17e	1	2019-06-27 14:07:45.232+08	2019-06-27 14:07:45.232+08	db69fe15-3a1d-46c9-9e21-5bef4ff4e964	9a1540b6-fea8-4bc0-8090-296b05f87c4a
044e1eb3-8c5a-4dc8-9614-dd62a06cc150	1	2019-06-27 14:28:06.362+08	2019-06-27 14:28:06.362+08	35ce9dd7-8476-4933-8a0a-27ada0e8ddf0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
84c28951-d376-4903-86d6-3bc2c3418056	1	2019-06-27 15:43:13.191+08	2019-06-27 15:43:13.191+08	193aabad-c6d8-4ec6-8ca5-df2c25ae71e2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8fecc0b1-a948-400f-bcf4-af4cddf275a7	1	2019-06-27 17:01:33.25+08	2019-06-27 17:01:33.25+08	65b11e66-836c-4898-bde7-46706a2f74af	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cefad036-368d-4a98-8734-002ed67fc3a1	1	2019-06-27 17:34:29.067+08	2019-06-27 17:34:29.067+08	4657f5dd-e39e-4be0-bc95-833443066096	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ae5df136-4e9a-4d47-8da8-203c182bd2ea	1	2019-06-28 09:51:38.279+08	2019-06-28 09:51:38.279+08	f25dac37-cd4c-4f51-b8ff-1d5d051fb21e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
43b0b89f-672b-4eba-b75c-7b79070559a3	1	2019-06-28 14:47:16.383+08	2019-06-28 14:47:16.383+08	0df71d00-3d48-44a5-9c6f-8cceae090b0d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
798f8501-1446-455c-82cb-c27ad5f882ff	1	2019-07-03 11:33:19.105+08	2019-07-03 11:33:19.105+08	de5f1899-8b36-4792-b34f-44a6f7748a86	9a1540b6-fea8-4bc0-8090-296b05f87c4a
713325ff-e2f9-46b9-bab4-b34d6b901fa9	1	2019-07-04 10:06:40.273+08	2019-07-04 10:06:40.273+08	433dc632-5b76-47eb-8a4f-eb40b4ba71bb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cd20aaeb-723e-44d3-89ac-4d55a2b3e676	2	2019-07-04 10:06:47.997+08	2019-07-04 10:06:47.997+08	433dc632-5b76-47eb-8a4f-eb40b4ba71bb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9bed84a7-4d4e-4198-9bb4-2660d0fac4af	1	2019-07-22 16:03:30.007+08	2019-07-22 16:03:30.007+08	68885fd4-0280-410a-bf22-3afadec546f2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0821e034-0233-4466-97ad-13ab408fabcf	1	2019-07-06 16:53:20.94+08	2019-07-06 16:53:20.94+08	d926295e-4fda-4948-a719-bf6e04d96ddb	27a58884-75a3-4f5d-94f6-37cc15d419fb
233421dd-1b04-4a3f-95f6-0010e886fa91	2	2019-07-06 16:53:20.944+08	2019-07-06 16:53:20.944+08	d926295e-4fda-4948-a719-bf6e04d96ddb	f3eee31e-d2c2-481e-9d6a-93cd469e4c63
5b242533-ee4b-4858-b1fa-3a64373c8be3	1	2019-07-06 16:55:42.74+08	2019-07-06 16:55:42.74+08	6980d68e-b6b4-4ab2-a048-042672a46cef	c41d198c-435b-4551-ae66-b74be2c022d6
4193e471-7176-4c42-bb41-e59636bf8d32	1	2019-07-06 17:22:08.736+08	2019-07-06 17:22:08.736+08	7b879c12-2bc2-4ff7-a2ba-b730169c30c9	c41d198c-435b-4551-ae66-b74be2c022d6
73b9913c-69ad-4369-b6e7-7285b7e99df3	1	2019-07-08 18:21:40.576+08	2019-07-08 18:21:40.576+08	54335927-f86b-44bd-aebe-f07fc9cddaed	3dfadb0e-7608-49e1-aa43-24f7442b424a
5581da8c-810c-4a01-9304-d17b2e107e21	2	2019-07-08 18:21:40.582+08	2019-07-08 18:21:40.582+08	54335927-f86b-44bd-aebe-f07fc9cddaed	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cbad1c10-70d1-4f59-b5cb-6896f2134b6e	1	2019-07-09 08:53:49.451+08	2019-07-09 08:53:49.451+08	df281eec-f674-4f68-bd65-ed56abf4f20c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f406feb9-ffd0-4a31-9014-b8556f83b6df	1	2019-07-09 15:00:57.812+08	2019-07-09 15:00:57.812+08	676c48ff-13c3-426f-9871-989570d76ef9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
77f2a844-f5a5-4fd5-93cc-2213ad29136e	1	2019-07-09 15:05:43.54+08	2019-07-09 15:05:43.54+08	c2508e96-b2cc-4a5f-8015-aa9492a11193	8396ee22-73b6-4375-a8be-854a047aecbf
b3d5311e-324b-4d26-9db3-c7ad064ebd7b	2	2019-07-09 15:05:43.545+08	2019-07-09 15:05:43.545+08	c2508e96-b2cc-4a5f-8015-aa9492a11193	9aece67a-050e-41a4-9b7d-7d890212f385
a5793abe-68ce-4ca1-8f10-4a1361eab80a	1	2019-07-09 15:10:11.903+08	2019-07-09 15:10:11.903+08	4fa8750d-807d-4c0c-9526-2662418f6f2f	9aece67a-050e-41a4-9b7d-7d890212f385
a806dc77-31eb-4de2-8dee-3003478abefb	1	2019-07-15 13:27:37.571+08	2019-07-15 13:27:37.571+08	01da29ac-f803-4381-ae7f-28264effac4f	c41d198c-435b-4551-ae66-b74be2c022d6
4085b18f-dd96-4757-a9c9-baa3f2b6a431	1	2019-07-15 14:04:02.918+08	2019-07-15 14:04:02.918+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	c41d198c-435b-4551-ae66-b74be2c022d6
036cfbb1-ba1f-4ba0-b79d-eae5a887301d	1	2019-07-15 14:31:13.671+08	2019-07-15 14:31:13.671+08	7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	c41d198c-435b-4551-ae66-b74be2c022d6
7eb81fa0-516a-4904-83d6-eb999a1561c4	1	2019-07-16 17:46:08.886+08	2019-07-16 17:46:08.886+08	d3d5de96-da53-4adb-b8f8-29d0e0c8209c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9c899e73-1ae7-4049-8fc6-1299a4471683	1	2019-07-17 14:29:44.528+08	2019-07-17 14:29:44.528+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	6c0898f5-e8da-495b-8718-6efba367e3f1
44e24e0e-8518-425f-a76c-4c0cc9b2e09a	1	2019-07-17 14:29:44.531+08	2019-07-17 14:29:44.531+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	7667c2d9-3c04-4818-bfeb-42f43b60af77
4373927e-eeba-4ddd-8060-3ce22d76a092	1	2018-04-03 09:04:11.238+08	2019-07-18 11:50:09.119+08	6def140f-5189-490c-ab4c-57e84dfcd3bf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
24f0b253-b144-44db-bb05-9f7a23a6af04	2	2019-07-22 10:33:56.621+08	2019-07-22 10:33:56.621+08	6d2dad31-9715-4522-a382-9b1b99f9bebc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3e0f6804-6e7b-4de6-bb21-8f12309fd10e	1	2019-07-23 09:33:53.802+08	2019-07-23 09:33:53.802+08	a83dcd92-561e-40ba-b71c-b6d062d2bcb3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
13cd7a9a-72bf-45d5-bc31-29a2ffd319ee	1	2019-07-23 11:13:52.728+08	2019-07-23 11:13:52.728+08	8830f3b8-1be3-48ae-b1d0-8a9583cf4a18	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e6b7a194-c779-4946-bf01-10b2337bb8c0	1	2019-07-23 19:49:43.328+08	2019-07-23 19:49:43.328+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
720e6f6d-551b-4c1d-95ea-497b8a0c5495	1	2019-07-23 19:52:40.06+08	2019-07-23 19:52:40.06+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d0ef103e-0f08-4d7e-bfb0-5d83d5fe6229	1	2019-07-23 20:06:29.84+08	2019-07-23 20:06:29.84+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ad4ff171-1622-4d98-be68-31ccc47670ce	1	2019-07-23 20:33:01.325+08	2019-07-23 20:33:01.325+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b57f5ef5-3222-4954-a846-5947bdcd8fdd	2	2019-07-24 16:48:20.906+08	2019-07-24 16:48:20.906+08	d926295e-4fda-4948-a719-bf6e04d96ddb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a5fe8095-bd72-41c5-adeb-cfda5c403460	1	2019-07-24 17:41:18.534+08	2019-07-24 17:41:18.534+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
55e7472f-14ef-49f5-a5bf-e9883ab12aaa	1	2019-07-26 11:18:48.463+08	2019-07-26 11:18:48.463+08	70cf173e-f529-4704-805e-193f1a6478cc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
577193c0-1b0d-478b-9564-5e4fbdeb93a7	1	2019-07-31 10:14:14.845+08	2019-07-31 10:14:14.845+08	390e46cc-b69d-4966-89f4-d305afdd4649	9a1540b6-fea8-4bc0-8090-296b05f87c4a
77cd6691-869c-430a-963f-76d142e0fc59	1	2019-07-31 16:04:11.145+08	2019-07-31 16:04:11.145+08	ce76608b-0e66-4498-b079-51aa9f03c950	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
559bdbfa-e05f-4b4b-9c3c-749a8796d6ad	2	2019-08-01 15:00:23.353+08	2019-08-01 15:00:23.353+08	f75a7b9a-2288-4f05-b3ec-5f17a297e53c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
443334e7-e33b-42a5-a28b-c6d5236a3bdc	1	2019-08-01 15:00:23.355+08	2019-08-01 15:00:23.355+08	f75a7b9a-2288-4f05-b3ec-5f17a297e53c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5db05fad-c8d0-49d4-b1b4-fdc4d103a4f2	1	2019-08-05 09:26:28.911+08	2019-08-05 09:26:28.911+08	32349c76-d117-4331-8a10-9b7ea057c2ab	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
65521918-9732-4999-926f-7ce8eb88b1f6	2	2019-08-05 18:12:12.132+08	2019-08-05 18:12:12.132+08	077e62b4-27da-47aa-846d-3d9169a8a895	f03c622c-30e7-47a4-a0de-cd681dc2fe61
c68e5d05-a0df-41b4-a083-bf39676b5f16	1	2019-08-05 18:12:12.135+08	2019-08-05 18:12:12.135+08	077e62b4-27da-47aa-846d-3d9169a8a895	3dfadb0e-7608-49e1-aa43-24f7442b424a
755738d1-45b6-4543-9264-338035fde289	1	2019-08-05 18:14:48.654+08	2019-08-05 18:14:48.654+08	1c7ee1c6-3d99-4236-834f-6e0746c0f69f	f03c622c-30e7-47a4-a0de-cd681dc2fe61
4d8a4ac7-6094-40d6-bb4b-e33b738d5a16	2	2019-08-05 18:14:48.657+08	2019-08-05 18:14:48.657+08	1c7ee1c6-3d99-4236-834f-6e0746c0f69f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ac6b47f4-f4e5-4116-9ecb-ea3a596d6c87	1	2019-08-06 11:00:53.835+08	2019-08-06 11:00:53.835+08	df7ff0f8-b92c-4856-a1af-bf3244a8610a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
54b161a3-81b0-49ea-b3d9-cb5d47a99dc4	2	2019-08-06 11:19:09.202+08	2019-08-06 11:19:09.202+08	077e62b4-27da-47aa-846d-3d9169a8a895	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9ca0fc98-cca7-4941-9663-845bae9ea161	1	2019-08-07 10:27:08.67+08	2019-08-07 10:27:08.67+08	f0c82197-9e9a-42f2-a4e2-541c52deff52	66537b16-1e7d-4823-b03e-676459f5891d
80138d2f-53ed-49be-858d-24c7e02f1c02	2	2019-08-07 10:27:16.302+08	2019-08-07 10:27:16.302+08	f0c82197-9e9a-42f2-a4e2-541c52deff52	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
651fa16d-db86-4bc6-ab8b-b897d720abda	1	2019-08-07 10:33:57.304+08	2019-08-07 10:33:57.304+08	6fb1b711-d8c0-489d-9751-524410c27bcc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4bc02775-53a6-4460-b702-ad1052ca5d16	1	2019-08-07 10:40:39.043+08	2019-08-07 10:40:39.043+08	bfe0979a-c0e4-4430-89d3-5fbe86568640	6eeb1913-71e2-40b2-ae39-c8750cbdefd7
6d08c994-d603-4e9e-b947-bf42d2b9e13c	2	2019-08-07 10:40:39.053+08	2019-08-07 10:40:39.053+08	bfe0979a-c0e4-4430-89d3-5fbe86568640	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
77004a14-a2ed-4d11-9ea8-56f65d28c2bf	2	2019-08-07 10:40:39.055+08	2019-08-07 10:40:39.055+08	bfe0979a-c0e4-4430-89d3-5fbe86568640	118383e6-1b61-4e15-8dee-a1a2a61b531e
0ad61fb2-86a7-4e3b-a8d4-08d93504f82c	2	2019-08-07 10:40:39.057+08	2019-08-07 10:40:39.057+08	bfe0979a-c0e4-4430-89d3-5fbe86568640	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
9933d869-0d51-4438-b0ad-e60c286a751d	2	2019-08-08 15:55:26.526+08	2019-08-08 15:55:26.526+08	8e44219e-9d4e-40ed-85b7-85dd24f8e821	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5988c18f-590f-492e-a15b-dedb507026b5	1	2019-08-08 15:55:26.528+08	2019-08-08 15:56:25.195+08	8e44219e-9d4e-40ed-85b7-85dd24f8e821	66537b16-1e7d-4823-b03e-676459f5891d
f2304d99-4332-428d-bb9b-c9114a9920d2	1	2019-08-08 17:57:28.949+08	2019-08-08 17:57:28.949+08	9de2769d-cd81-43c4-ae6d-82f4cb9431de	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3272414d-9f0c-4b06-8b0a-a795eb6efd7b	2	2019-08-09 13:11:50.736+08	2019-08-09 13:11:50.736+08	3758c306-d352-4ff8-b9ef-470a58efa0a4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
124bb216-6d3f-4102-bc69-bbbd616d74f9	1	2019-08-09 13:14:23.267+08	2019-08-09 13:14:23.267+08	3758c306-d352-4ff8-b9ef-470a58efa0a4	da330369-58e7-4bce-8bc1-3c0a062dd1a0
b6842940-36df-42a2-88c5-b23821666a3b	2	2019-08-09 13:14:42.97+08	2019-08-09 13:14:42.97+08	3758c306-d352-4ff8-b9ef-470a58efa0a4	efc73d5c-867e-4feb-82f6-2c5afb8c432f
2d14a681-e0d3-4bdd-baa9-55d66f12a7e7	1	2019-08-12 09:55:16.277+08	2019-08-12 09:55:16.277+08	e257dc56-f70f-4ba8-b653-c5d047f9edba	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e04f7d4c-fa14-4062-9c51-d6b0339fa07b	1	2019-08-13 17:52:48.303+08	2019-08-13 17:52:48.303+08	a7c51497-66e3-4e63-aa6f-7b243fb8ea77	9a1540b6-fea8-4bc0-8090-296b05f87c4a
89c979fe-c1e6-4f97-bb91-23de053d3180	1	2019-08-19 10:39:47.469+08	2019-08-19 10:39:47.469+08	aa0e3416-fabe-4415-a848-d6cd84a500dd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e421f6ea-3b1e-496b-a895-4b7b541647f3	1	2019-08-22 09:13:02.113+08	2019-08-22 09:13:02.113+08	5b40bb69-7692-4cee-b6df-bd7871764131	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3375723c-28e2-4d43-a5c2-e10974373d01	1	2019-08-22 10:37:57.817+08	2019-08-22 10:37:57.817+08	d6189068-bb18-4c68-a359-8e3139ab22e5	3dfadb0e-7608-49e1-aa43-24f7442b424a
c989c701-e938-4278-b25a-c8e62760f036	1	2019-08-22 11:03:45.614+08	2019-08-22 11:25:38.861+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5afb303e-0963-4e23-91f7-2b41f543aaf6
2d09e805-1771-43ab-8e3d-93d9a208b45e	1	2019-08-22 11:08:55.775+08	2019-08-22 11:26:30.878+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5afb303e-0963-4e23-91f7-2b41f543aaf6
cbbb0c0f-8a80-4df3-87cb-d80512c19639	1	2019-08-22 11:27:17.555+08	2019-08-22 11:27:17.555+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	5afb303e-0963-4e23-91f7-2b41f543aaf6
481831b6-0c92-41af-b346-fefa2646f3db	2	2019-08-22 11:35:42.402+08	2019-08-22 11:35:42.402+08	d6189068-bb18-4c68-a359-8e3139ab22e5	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
29c6d92b-4c71-4826-a921-8ceb10b7560d	1	2019-08-22 11:37:17.694+08	2019-08-22 11:37:17.694+08	0a341896-3c5d-4e60-af19-fe5f645c6967	66a06e5d-a436-4d37-806b-919d8fd1c564
eecdc85d-85a0-4dca-aae0-dec7fd23b8a7	1	2019-08-22 11:41:35.943+08	2019-08-22 11:41:35.943+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	66a06e5d-a436-4d37-806b-919d8fd1c564
2ce5d834-0933-4b80-92a1-0f8e07c12cae	1	2019-08-22 14:08:59.397+08	2019-08-22 14:08:59.397+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	66a06e5d-a436-4d37-806b-919d8fd1c564
9631f2f6-6210-42e2-a6de-6bba2aab0c84	1	2019-08-22 14:16:59.518+08	2019-08-22 14:16:59.518+08	6ac55754-f252-4ba5-ba9c-72a158734b97	66a06e5d-a436-4d37-806b-919d8fd1c564
a4f761da-30fe-4ab6-9723-15ddfee5a122	1	2019-08-22 14:20:31.241+08	2019-08-22 14:20:31.241+08	03f53a90-43a0-47d6-9183-edfb825a09e5	66a06e5d-a436-4d37-806b-919d8fd1c564
880b9fcc-cf91-4493-8a91-62eff6c334c5	1	2019-08-22 14:22:24.814+08	2019-08-22 14:22:24.814+08	6e1d3878-3ea2-4c73-9137-0ef98781be0c	66a06e5d-a436-4d37-806b-919d8fd1c564
307bc98c-b426-44ab-9e27-a1054d3901f9	2	2019-08-22 14:36:10.875+08	2019-08-22 14:36:10.875+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	5afb303e-0963-4e23-91f7-2b41f543aaf6
3950b96f-a504-4ff4-bd8c-3ea8e4d79dca	2	2019-08-22 14:36:10.877+08	2019-08-22 14:36:10.877+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	66a06e5d-a436-4d37-806b-919d8fd1c564
80b44ba8-223b-4f00-b532-703d4aed26ad	2	2019-08-22 14:36:10.879+08	2019-08-22 14:36:10.879+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	936f5813-db0d-4a2a-a7bc-8d323024140b
3a45f740-c977-47f3-adee-712981f14584	1	2019-08-22 14:36:10.881+08	2019-08-22 14:36:10.881+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	6f9486b4-6b22-4fbd-a73a-9334e711badb
e86b98d4-8ec7-4755-bf2e-69b4e3b612c2	2	2019-08-27 09:48:38.222+08	2019-08-27 09:48:38.222+08	ec8018e2-1de6-4384-ac85-01405362dc83	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
191ea0f6-1f56-4d21-afd5-79e38a293bed	1	2019-08-27 09:48:38.224+08	2019-08-27 09:48:38.224+08	ec8018e2-1de6-4384-ac85-01405362dc83	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3538712f-979f-4a0b-8023-88d67e679dd2	1	2019-08-27 15:43:12.965+08	2019-08-27 15:43:12.965+08	3bf54b2d-1623-4920-80c2-4e1f7407b318	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e7bc168f-4187-4d39-826a-117d253cb165	1	2019-08-27 16:31:15.672+08	2019-08-27 16:31:15.672+08	8c23f875-86cf-4fe7-a315-526c7a1d0187	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8edb15e2-2c8d-4166-907c-65607aee4f74	1	2019-08-29 09:09:46.396+08	2019-08-29 09:09:46.396+08	12253047-b588-4225-9f55-e6282003788a	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
9c2a669f-c447-4983-8831-49d8e75ee00f	2	2019-08-30 14:28:31.128+08	2019-08-30 14:28:31.128+08	421933bd-e149-4d7c-ad95-ef8aa2a2692c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9d1ce8fd-956a-40fa-b181-f8d296c84a15	1	2019-08-30 14:28:31.13+08	2019-08-30 14:28:31.13+08	421933bd-e149-4d7c-ad95-ef8aa2a2692c	3dfadb0e-7608-49e1-aa43-24f7442b424a
4fdf90fe-1ffa-4099-96ac-7f29ac3d8c02	1	2019-09-04 13:53:37.952+08	2019-09-04 13:53:37.952+08	c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
03c376a5-0560-46ee-a25e-2b099734a83a	1	2019-09-04 15:11:13.142+08	2019-09-04 15:11:13.142+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
94a57fd5-7132-46a4-bd02-c8bf82b23612	1	2019-09-04 15:22:23.211+08	2019-09-04 15:22:23.211+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
b0fab7ce-8158-48ad-8adc-7afd0fd05b6f	1	2019-09-04 15:40:23.386+08	2019-09-04 15:40:23.386+08	aa630d67-b466-4f6a-9a04-fe5744954d20	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
e45fe22a-617a-4c7b-81bc-fab457214014	1	2019-09-04 15:48:38.134+08	2019-09-04 15:48:38.134+08	e600502e-b2ff-466a-9fa6-b9e9e554647c	66a06e5d-a436-4d37-806b-919d8fd1c564
656a3518-d900-4a80-8f78-1ddd189e4a99	1	2019-09-04 16:08:29.522+08	2019-09-04 16:08:29.522+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	66a06e5d-a436-4d37-806b-919d8fd1c564
49507ddb-ae8d-4d86-82d3-6514d327495e	1	2019-09-05 11:41:01.275+08	2019-09-05 11:41:01.275+08	e61d9a9e-3d7f-4488-a60e-252b429dcb7b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f9548d10-632f-4697-b602-a1ab9a9842d4	2	2019-09-05 11:41:01.278+08	2019-09-05 11:41:01.278+08	e61d9a9e-3d7f-4488-a60e-252b429dcb7b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
03bbaf0f-a95e-4fc3-8be0-f1bb133e6c59	1	2019-09-10 14:47:17.461+08	2019-09-10 14:47:17.461+08	70c53b9c-f7ec-48ce-b790-bd96754d2d3b	66537b16-1e7d-4823-b03e-676459f5891d
1c6fff73-3ce7-4ad2-9d35-9d56b4546354	1	2019-09-10 16:52:37.739+08	2019-09-10 16:52:37.739+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	66a06e5d-a436-4d37-806b-919d8fd1c564
a901b930-3d22-42d7-a4c5-fa642e4d6d6a	1	2019-09-10 16:52:37.742+08	2019-09-10 16:52:37.742+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	d4f271b6-567a-4880-beb0-161b33ac2094
c9a6c01a-1560-452d-9a35-679537571bf2	1	2019-09-10 16:52:37.744+08	2019-09-10 16:52:37.744+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0b4f22fa-ae6a-4447-885d-35c6ef622b78	1	2019-09-11 10:15:40.123+08	2019-09-11 10:15:40.123+08	f34762e6-6532-434e-93a0-74c119cfc58a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
618e7f9f-11ec-480e-8851-e26d099ea06c	1	2019-09-11 11:36:45.977+08	2019-09-11 11:36:45.977+08	798b891d-6c34-4219-bde6-a8d957643010	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dcee217a-22ab-4996-9ad1-03c62a6b4902	1	2019-09-11 11:57:38.68+08	2019-09-11 11:57:38.68+08	36ddd8af-d58c-4496-ae9a-ce9cb9786cd5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
405f26fd-abc1-46d4-8f41-3a60c6765ed4	1	2019-09-16 16:50:20.696+08	2019-09-16 16:50:20.696+08	c89d02cd-f052-4004-aa3e-93906248a62b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b65ec323-0509-46fe-9d0c-52e8330fb545	1	2019-09-17 09:35:34.083+08	2019-09-17 09:35:34.083+08	69f9043f-2ce4-4d39-97fe-94f6c2f6185c	e498b9c2-546f-4bba-9ab6-0c575a49d452
7e256ea6-aa85-4094-a615-21f74404888d	1	2019-09-19 09:38:03.004+08	2019-09-19 09:38:03.004+08	6225c8bb-1497-4354-ad28-e5eb698de9f0	66537b16-1e7d-4823-b03e-676459f5891d
7b77f258-5b0f-462b-af44-d56a62868dd7	2	2019-09-19 09:38:18.854+08	2019-09-19 09:38:18.854+08	6225c8bb-1497-4354-ad28-e5eb698de9f0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
cd348cb5-97c6-4981-8022-26e74e9d0b35	1	2019-09-19 12:41:51.98+08	2019-09-19 12:41:51.98+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
5e03d125-7525-421a-9697-995ac40df8f5	1	2019-09-19 16:33:42.714+08	2019-09-19 16:33:42.714+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
c38840bc-94d7-4887-9f97-2851fd59423d	1	2019-09-23 14:19:34.132+08	2019-09-23 14:19:34.132+08	c209cbd1-8662-42e5-81d2-6cba239aa394	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a8ef0337-c5b6-4849-b968-15f8350bbe6c	2	2019-09-23 14:19:34.136+08	2019-09-23 14:19:34.136+08	c209cbd1-8662-42e5-81d2-6cba239aa394	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5e16458b-b726-48c0-b781-96f28b18ecc4	1	2019-09-24 11:35:39.893+08	2019-09-24 11:35:39.893+08	da5f4309-1696-4853-94ef-f11b9d0602e0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
24ad6c87-e81b-45f9-b240-fddaba5e2b44	1	2019-09-24 11:35:42.441+08	2019-09-24 11:35:42.441+08	59e0e84c-3ab8-485a-a6fc-d880a79b296a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e8db6360-e3df-44ba-b4d7-270b6b3fccbd	1	2019-09-24 11:44:07.131+08	2019-09-24 11:44:07.131+08	b20e46ed-a619-476a-9c50-88e1b8ea3697	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
033a8ac7-85bb-4a73-bf58-df30fe677bef	1	2019-09-24 11:49:24.124+08	2019-09-24 11:49:24.124+08	4ccb1624-a210-4672-9951-0dbf335dcdb1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4c016552-7e6a-402f-b5cc-d4cf2644cef4	1	2019-09-25 10:40:55.957+08	2019-09-25 10:40:55.957+08	fe3a614d-329c-4b70-99ff-f95ccb28ab79	e4049f35-3902-4610-ac6e-45c01236a230
6e2c64c6-e0f9-4454-bebe-cc6b592c47d9	1	2019-09-25 10:49:31.379+08	2019-09-25 10:49:31.379+08	37bc2c29-264c-4366-8fe1-9c2984702b94	e4049f35-3902-4610-ac6e-45c01236a230
23530c8d-f685-42cb-94a9-f36a8966b2f8	1	2019-09-25 11:07:08.049+08	2019-09-25 11:07:08.049+08	d756ead6-3c0a-4d1e-be3f-dde6e031a048	e4049f35-3902-4610-ac6e-45c01236a230
741fd631-a364-419a-9231-7283a28cb242	1	2019-09-25 11:19:02.071+08	2019-09-25 11:19:02.071+08	f7374ca5-78cb-4578-bfe3-df32eb350d05	e4049f35-3902-4610-ac6e-45c01236a230
0219f24f-25b9-4546-9d81-8367349d0277	1	2019-09-25 11:24:05.364+08	2019-09-25 11:24:05.364+08	50fc0df9-2b02-445b-b04e-17209e8c69ee	e4049f35-3902-4610-ac6e-45c01236a230
137361e0-8a77-40bf-9f25-5f47f6b6a564	1	2019-09-25 11:32:47.404+08	2019-09-25 11:32:47.404+08	005826c9-dd60-4013-99bc-da28bc0d9c93	e4049f35-3902-4610-ac6e-45c01236a230
9990bd9a-102b-4275-9a68-0667708bbd65	1	2019-09-25 11:38:34.943+08	2019-09-25 11:38:34.943+08	8392cdb0-52c7-4fee-8ace-a64e5cf86240	e4049f35-3902-4610-ac6e-45c01236a230
0002c6d3-ef7c-43f5-964e-395a2626910f	1	2019-09-25 11:51:56.958+08	2019-09-25 11:51:56.958+08	5102e0bc-4778-43b6-80d3-fd71e4032088	e4049f35-3902-4610-ac6e-45c01236a230
cb4a020c-164a-411c-8fd4-4d91dfe12240	1	2019-09-25 11:54:59.647+08	2019-09-25 11:54:59.647+08	73ac8e46-173b-4f23-bb89-edd506496e34	e4049f35-3902-4610-ac6e-45c01236a230
788ffd0b-a898-4e60-99fd-2f47e5499d19	1	2019-09-25 13:51:38.099+08	2019-09-25 13:51:38.099+08	f535897b-dc69-4835-b0d7-b4a6062db938	e4049f35-3902-4610-ac6e-45c01236a230
7cb0143f-d2d1-48e4-a7c2-29a61b4692a0	1	2019-09-25 17:25:19.272+08	2019-09-25 17:25:19.272+08	f29e4bb2-0e42-4016-b27e-f2377c115ff1	e4049f35-3902-4610-ac6e-45c01236a230
67e89a04-ffdb-41e7-be13-eb8a1db4e66c	1	2019-09-29 11:20:27.368+08	2019-09-29 11:20:27.368+08	a47565e1-92e5-41e9-ba98-79a93065f0ee	9a1540b6-fea8-4bc0-8090-296b05f87c4a
67141178-8db8-4460-bf60-95b8a6172236	1	2019-09-29 11:31:19.681+08	2019-09-29 11:31:19.681+08	dc1bdab2-ae0f-4ecc-8ce2-86d40ed2d08c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3c8be1a4-ce5e-424b-a96b-0fbd0cd338dd	1	2019-09-29 12:00:33.527+08	2019-09-29 12:00:33.527+08	594ffc3d-f245-4a5e-8843-9448105cb86d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9796f4dc-0b66-4078-9c9f-88c1fb840d70	1	2019-09-29 13:35:25.301+08	2019-09-29 13:35:25.301+08	a4e6dddc-930c-4704-9c93-9a8d78da81cb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4f6b51e2-0f80-4681-9aa0-f27d25b55ab1	1	2019-09-29 14:37:47.02+08	2019-09-29 14:37:47.02+08	569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448	66537b16-1e7d-4823-b03e-676459f5891d
f9c188d1-ab33-4041-b345-e308b3175a65	1	2019-09-29 15:43:10.886+08	2019-09-29 15:43:10.886+08	c96dced7-2915-4087-9ba5-b6f9bdc35f89	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2c02f34d-08e1-473f-81cc-8a9b793519f7	2	2019-09-29 16:15:27.828+08	2019-09-29 16:15:27.828+08	f190bf5a-78ab-4963-aac1-2fda921f2507	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e05d5580-4166-4bca-9526-883e221fa201	1	2019-09-29 16:15:35.153+08	2019-09-29 16:15:35.153+08	f190bf5a-78ab-4963-aac1-2fda921f2507	9a1540b6-fea8-4bc0-8090-296b05f87c4a
80cbdfcf-cba2-40ac-b382-0b54536d6b8c	1	2019-09-29 17:46:53.509+08	2019-09-29 17:46:53.509+08	83759876-3d92-4218-8efb-ea36dc6d81ef	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
36459c6d-944a-4893-8184-4e285b638e81	1	2019-09-29 17:52:15.128+08	2019-09-29 17:52:15.128+08	0edf8e7f-0f5f-440a-a83a-333e5d90a2ef	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
542252d8-f28d-4f94-82f6-1158b3bc4931	1	2019-09-29 17:55:57.031+08	2019-09-29 17:55:57.031+08	7eee6239-5a81-4979-ab6f-43a1b3e8d570	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f39343aa-3c12-4106-b5ae-da2b8b4ec719	1	2019-09-30 09:56:31.666+08	2019-09-30 09:56:31.666+08	01a43d23-84c6-4e78-bf39-7ed3a6383a88	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4dc28d80-d732-46c0-92e3-7627c604f4f3	2	2019-09-30 09:56:31.67+08	2019-09-30 09:56:31.67+08	01a43d23-84c6-4e78-bf39-7ed3a6383a88	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f943fc11-0ad9-44b0-8183-4887c3fd064a	1	2019-10-08 13:42:51.582+08	2019-10-08 13:54:47.161+08	f19f1e04-8739-4652-9869-5fe16698e82e	3f912f2c-18f1-4563-9043-dc271141fc55
5fdabe6f-6d78-44ea-97cd-0b6a4c56a315	1	2019-10-08 17:02:20.817+08	2019-10-08 17:02:20.817+08	150f2029-8823-45cf-813a-4a6a3e427d2f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ae239c8a-37b2-44b4-8fd2-c718c7e39e74	2	2019-10-08 17:02:30.325+08	2019-10-08 17:02:30.325+08	150f2029-8823-45cf-813a-4a6a3e427d2f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4490ab7d-0201-4309-a7a3-bf6dd143e3c5	1	2019-10-09 08:45:35.164+08	2019-10-09 08:45:35.164+08	66d2c15b-394a-4b84-b7d3-b991be41d9b0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d387901e-2390-4c45-9f74-a63d0f38caa9	1	2019-10-09 13:09:24.413+08	2019-10-09 13:09:24.413+08	8dc6a5c3-3f5b-40a8-9a90-d6b7b2cae471	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
923951b5-1a1f-450f-b565-8466f343b98f	1	2019-10-09 13:11:20.973+08	2019-10-09 13:11:20.973+08	7ce5e1fb-e335-4fa0-928d-9b1032350ab8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ebf57f0a-cb29-4ddd-91c8-cc8678038e3d	2	2019-10-09 14:19:17.488+08	2019-10-09 14:28:41.669+08	f19f1e04-8739-4652-9869-5fe16698e82e	6361ba5f-8588-4685-a107-b692e3592f17
564ac3e4-e029-464a-8895-44f162d8c138	1	2019-10-09 14:19:59.809+08	2019-10-09 14:28:49.898+08	6cb2c0f8-0c45-42e6-97ca-56d97a4a3484	6361ba5f-8588-4685-a107-b692e3592f17
7849cf9f-a7f2-44e4-a728-c709b5d1815b	2	2019-10-10 09:55:12.725+08	2019-10-10 09:55:12.725+08	eaca25fa-f0bb-45cc-a5e0-59ba71654987	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9ec55f06-3e5b-4df9-908f-f00fc616ad7b	1	2019-10-10 09:55:12.73+08	2019-10-10 09:55:12.73+08	eaca25fa-f0bb-45cc-a5e0-59ba71654987	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7d85244f-1491-4309-89c6-16e33effa749	1	2019-10-10 10:48:36.502+08	2019-10-10 10:48:36.502+08	673195ba-381a-4dea-93e1-4f65f4d84079	9a1540b6-fea8-4bc0-8090-296b05f87c4a
55195d48-baa7-42e9-a307-ac8489ccbf9e	1	2019-10-11 14:16:26.981+08	2019-10-11 14:16:26.981+08	1fff247a-6494-4752-91b7-74565fa1f314	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dee73b03-e45f-472f-a7d9-e13b866570bb	2	2019-10-14 09:24:23.052+08	2019-10-14 09:24:23.052+08	6b90f580-9b05-42a8-ba6a-113143823d44	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7897ad5c-fcaf-4864-a5f5-258372b978fa	1	2019-10-14 09:24:23.056+08	2019-10-14 09:24:23.056+08	6b90f580-9b05-42a8-ba6a-113143823d44	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5c58447a-84f4-4abc-9f85-3e82e4969387	1	2019-10-14 09:45:26.504+08	2019-10-14 09:45:26.504+08	274929f9-024a-40b8-8856-eb145c334b9a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2eb916f8-e824-4ba9-bbda-1359554271ec	1	2019-10-14 09:47:26.062+08	2019-10-14 09:47:26.062+08	c560df92-8e02-480d-8646-a66f98cc2aff	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
106e9686-2a44-4515-af18-aea0986c51dc	1	2019-10-14 09:49:18.026+08	2019-10-14 09:49:18.026+08	cc82fda3-8669-4810-a87a-ff57a55a3de6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8607b060-3791-4b77-8f50-7da488d58697	1	2019-10-14 09:52:23.86+08	2019-10-14 09:52:23.86+08	fb91aca2-dc9a-4cbb-8ece-54a5e04d6566	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
277fe60c-a017-4add-9b87-167f51155998	1	2019-10-14 11:39:40.831+08	2019-10-14 11:39:40.831+08	b7bea944-ae59-4ec4-85cc-345e98006e52	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fa4a0ad2-684d-4ede-9f8a-83995f13e4fe	1	2019-10-14 16:03:45.923+08	2019-10-14 16:03:45.923+08	1dcd0084-9a2d-43ef-9b10-1e8305ce8b06	66537b16-1e7d-4823-b03e-676459f5891d
505c92e0-5a51-4372-8454-68c46eb977c8	1	2019-10-16 15:16:12.216+08	2019-10-16 15:16:12.216+08	30cf2191-2a9e-40dd-a83f-969d2f053e1e	66537b16-1e7d-4823-b03e-676459f5891d
e4f8f6a5-ebc5-4ad3-8ac2-9603b40fa7c5	1	2019-10-16 15:20:46.746+08	2019-10-18 16:28:01.042+08	213e2ff2-285b-445d-8661-24f6f91bf7b8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4e010d4f-94d1-412d-a03d-a44f1e569f57	2	2019-10-16 15:28:20.962+08	2019-10-18 16:28:13.158+08	30cf2191-2a9e-40dd-a83f-969d2f053e1e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
81bb8383-2e76-4a53-a51c-2b1a470edb68	1	2019-10-18 16:29:31.401+08	2019-10-18 16:29:31.401+08	b13c8811-3051-46d5-87e2-d1bbbc7853f2	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1d228765-f4bd-489f-8f0f-ad293ef4aee5	1	2019-10-20 16:08:49.152+08	2019-10-20 16:08:49.152+08	a8607ea4-e6db-4dc6-9e64-3e8db3628ba0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2b56d499-313a-4124-bef4-5c54154fae56	1	2019-10-22 13:45:08.966+08	2019-10-22 13:45:08.966+08	b0c1da1a-0945-4edb-9f17-e9b845030888	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3d84e10f-88bb-494c-b470-47da743c23b1	1	2019-10-22 13:48:51.935+08	2019-10-22 13:48:51.935+08	109b7349-2bb0-4859-8c1a-0c7630cbd11f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c7e29b9d-b8af-49f4-ad15-1141c32eb37a	1	2019-10-22 14:47:59.132+08	2019-10-22 14:47:59.132+08	f46aa0c4-ed9b-4991-8fa8-ea4c884f5c35	66537b16-1e7d-4823-b03e-676459f5891d
58b22fe8-94ac-4030-b318-2f63d5240416	1	2019-10-23 10:16:21.72+08	2019-10-23 10:16:21.72+08	2ea41890-89c4-4569-89ab-df3b02dc16eb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e31f3b04-8ff5-40ec-a71d-9ea454fe9afa	2	2019-10-24 11:23:42.795+08	2019-10-24 11:23:42.795+08	cc938850-0b9a-4ab3-9712-dbf35ff157d9	4714efc4-d103-4619-9895-28e67d9100e2
051f7494-ede4-4cdb-8ce2-bc6bf14edd23	1	2019-10-24 11:23:42.797+08	2019-10-24 11:23:42.797+08	cc938850-0b9a-4ab3-9712-dbf35ff157d9	3dfadb0e-7608-49e1-aa43-24f7442b424a
c06ef9be-c07d-40ee-b1f5-87dd61bd518a	1	2019-10-24 11:47:52.685+08	2019-10-24 11:47:52.685+08	a64fdbc7-36d7-49d9-8969-9040111aee6a	4714efc4-d103-4619-9895-28e67d9100e2
e9693610-a8bc-42df-80d1-fb9b1fd442dc	1	2019-10-24 11:51:03.271+08	2019-10-24 11:51:03.271+08	389a8b42-097c-411c-b534-0666e61c7842	4714efc4-d103-4619-9895-28e67d9100e2
cf03bc4a-827f-4f5c-acc5-a4652f32035e	1	2019-10-28 17:16:59.589+08	2019-10-28 17:16:59.589+08	e2fb2ed6-6d1c-41da-9f07-ab5866dd8940	66537b16-1e7d-4823-b03e-676459f5891d
54d22e09-9b7e-4e93-858a-9cdb11ebd7e7	2	2019-10-28 17:16:59.591+08	2019-10-28 17:16:59.591+08	e2fb2ed6-6d1c-41da-9f07-ab5866dd8940	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
33547e16-e9bf-4aec-b932-3725456e99b1	1	2019-10-28 17:20:38.031+08	2019-10-28 17:20:38.031+08	8a550a15-96be-455e-8c81-b9e7efcc2b30	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
93728943-47a0-4721-9eb2-51a320bd66a7	1	2019-10-28 17:22:11.033+08	2019-10-28 17:22:11.033+08	ed459df4-d57c-430e-878b-37b61111d133	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
221c0192-d454-4fea-a71c-6880c041c43a	1	2019-10-28 17:23:47.583+08	2019-10-28 17:23:47.583+08	2e9595c1-ff54-4c5f-953e-f61a7837200e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dbff7247-f39b-49bd-9564-df24d4a0b2b2	1	2019-10-29 10:59:52.836+08	2019-10-29 10:59:52.836+08	b86fdc56-591d-40c5-b4f8-cb5b2a265be8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
924170fb-d5be-4ae0-b90f-657bed50a717	1	2019-10-30 09:06:11.248+08	2019-10-30 09:06:11.248+08	613e22b3-00d5-4036-b4de-8988e8a25b02	66537b16-1e7d-4823-b03e-676459f5891d
9bebca34-5d5e-4e7c-a534-7250ad03b5f2	2	2019-10-30 09:06:39.348+08	2019-10-30 09:06:39.348+08	613e22b3-00d5-4036-b4de-8988e8a25b02	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d00b1e09-e4ec-4b38-827c-347361e24502	1	2019-10-30 09:07:52.25+08	2019-10-30 09:07:52.25+08	88c7c5c5-561d-4193-9cf0-91aceec9f79a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
94ddbc11-b96c-4382-ba8e-dce7be2f6cd8	1	2019-10-31 16:01:05.959+08	2019-10-31 16:01:05.959+08	0f20644c-1893-49f9-bc83-6b66a9ead892	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fd7c5e83-595f-417c-add3-4b8dc0a130f4	1	2019-11-01 14:03:28.026+08	2019-11-01 14:03:28.026+08	86561a5b-04f5-4b5f-8bc7-6b002b4b6c68	66537b16-1e7d-4823-b03e-676459f5891d
3100d0a8-a250-4077-878f-c3fe4c15d84d	2	2019-11-01 14:57:12.148+08	2019-11-01 14:57:12.148+08	86561a5b-04f5-4b5f-8bc7-6b002b4b6c68	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
289f79f9-8c66-46c4-8104-ea6f1e48269a	1	2019-11-01 14:59:07.351+08	2019-11-01 14:59:07.351+08	50e00d9f-f07e-4a17-96bc-c74a2aab4d71	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
13d98625-2934-4747-964c-406642bf41ca	1	2019-11-04 09:55:37.331+08	2019-11-04 09:55:37.331+08	40c3cf7a-91d6-4c0e-aa48-4839dd6815cc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dddab794-eb67-43ea-b397-02b592ae4c47	2	2019-11-04 09:55:42.98+08	2019-11-04 09:55:42.98+08	40c3cf7a-91d6-4c0e-aa48-4839dd6815cc	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8a86ac72-72e7-41dc-9e39-c7aaa351c922	1	2019-11-04 16:33:37.304+08	2019-11-04 16:33:37.304+08	f34a4e8b-3a8a-45d9-a73e-a352cb10bbd6	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a0385cff-9bf0-4b10-9d67-830883a5f188	1	2019-11-04 16:35:39.102+08	2019-11-04 16:35:39.102+08	53ea01cf-1ce2-4b41-b725-974426affa48	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
363c087f-59a5-4790-9e0a-495fc46ee52d	1	2019-11-04 16:36:31.797+08	2019-11-04 16:36:31.797+08	e62db430-948a-4311-996f-38348811807a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
de074497-49de-49e5-bde0-d7ff72a7abdf	1	2019-11-04 16:37:13.96+08	2019-11-04 16:37:13.96+08	23b49cdb-2f9b-4170-9c38-2941c2341d00	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c2d79e3e-ee77-44fd-b514-47b315a14d29	1	2019-11-04 16:37:47.735+08	2019-11-04 16:37:47.735+08	28f92d45-2a16-4768-bc97-e9acc713b231	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3ab162fd-2116-4967-94a7-c7e3f684d505	1	2019-11-04 16:38:22.043+08	2019-11-04 16:38:22.043+08	d325832b-3b9a-4f92-9b08-0984c6b81599	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c7ad8552-d9c1-48e6-af24-2cbe475048ec	1	2019-11-04 16:41:57.23+08	2019-11-04 16:41:57.23+08	863ffb4f-8b5f-4a67-b93e-fa4f92f2464a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f6585a69-7dba-4119-b987-45b41298bd72	1	2019-11-04 16:42:29.012+08	2019-11-04 16:42:29.012+08	9199194c-49d8-4c20-8b52-67e469c30838	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0691fd52-f558-4788-8131-c93e5021efa1	1	2019-11-05 09:12:10.049+08	2019-11-05 09:12:10.049+08	a9dea92c-5afa-40b9-b1f3-197e9b0f82be	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c787e7f9-4888-41b4-9ab2-6b1d3c1ade0b	1	2019-11-05 14:06:15.038+08	2019-11-05 14:06:15.038+08	6431292f-5b95-41f0-8291-ff902e58b376	b3cb9990-288c-4f0d-a91a-547254d1d9c6
694e8b8f-9239-4d5d-8cdc-bc5b715e6afa	1	2019-11-05 14:15:48.115+08	2019-11-05 14:15:48.115+08	1e6fc551-3ad9-4963-9754-142f9c470c9c	3dfadb0e-7608-49e1-aa43-24f7442b424a
44e279ae-6bab-42f6-9262-de6308289931	2	2019-11-05 14:22:15.702+08	2019-11-05 14:22:15.702+08	1e6fc551-3ad9-4963-9754-142f9c470c9c	b3cb9990-288c-4f0d-a91a-547254d1d9c6
cdb78dd5-791d-41a1-b977-135b319f643a	1	2019-11-07 10:06:59.585+08	2019-11-07 10:06:59.585+08	0758748a-7706-4392-ba7e-e47526251acb	66537b16-1e7d-4823-b03e-676459f5891d
98de9979-ee3f-49fd-a24e-6ffd754f32a1	1	2019-11-08 13:12:19.611+08	2019-11-08 13:12:19.611+08	8e254f7b-1da7-4912-8b0d-467770662365	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c4fc1163-946e-464f-b40b-d17843ecbf21	2	2019-11-08 13:18:41.585+08	2019-11-08 13:18:41.585+08	c659433c-cfd8-4b1a-a9d3-5664beb39ed9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b4ae6323-5ad7-4484-a8dc-f3436e18620b	1	2019-11-08 13:18:41.588+08	2019-11-08 13:18:41.588+08	c659433c-cfd8-4b1a-a9d3-5664beb39ed9	66537b16-1e7d-4823-b03e-676459f5891d
827b0843-a207-4dc8-86ed-167435ebacda	1	2019-11-08 13:43:46.052+08	2019-11-08 13:43:46.052+08	1f0ce463-872a-406b-bdbe-a469b45f9e9a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
626ee6c5-4367-4f3b-90b1-928ee5ae72c7	1	2019-11-08 17:22:09.143+08	2019-11-08 17:22:09.143+08	894ab7ef-b84f-420c-b2f0-cfdc5c00b826	0be63da7-6ab6-4d1f-830d-dd32add170c6
609ecc8e-ceb4-46c1-9506-5484687f2b1c	2	2019-11-08 17:22:18.547+08	2019-11-08 17:22:18.547+08	894ab7ef-b84f-420c-b2f0-cfdc5c00b826	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba
462f0e12-b1dd-41d9-afab-d13a655d7fe5	2	2019-11-08 17:22:29.387+08	2019-11-08 17:22:29.387+08	894ab7ef-b84f-420c-b2f0-cfdc5c00b826	dff00e7d-1fb2-443e-be6a-615214932ee6
5e0159f6-7b3f-430e-870d-6795d9bbcd88	2	2019-11-08 17:22:38.393+08	2019-11-08 17:22:38.393+08	894ab7ef-b84f-420c-b2f0-cfdc5c00b826	25642488-1945-4865-81e7-e9593c12d208
430c515c-04d4-442d-a803-1be1e55aa3f7	1	2019-11-09 10:06:56.837+08	2019-11-09 10:06:56.837+08	c9eacd36-38d6-48b9-9672-e76406906ea3	118383e6-1b61-4e15-8dee-a1a2a61b531e
b14b27af-b110-465e-a3c1-173d7135681d	1	2019-11-09 10:12:55.992+08	2019-11-09 10:12:55.992+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	118383e6-1b61-4e15-8dee-a1a2a61b531e
ea5bcd28-e40e-4d77-a512-57cbc5fd9230	1	2019-11-09 10:16:44.583+08	2019-11-09 10:16:44.583+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	118383e6-1b61-4e15-8dee-a1a2a61b531e
c1425aa3-869c-4b30-bd57-1f2a3da95b2d	1	2019-11-09 10:22:51.856+08	2019-11-09 10:22:51.856+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	118383e6-1b61-4e15-8dee-a1a2a61b531e
1d6724bb-cabf-47af-a23f-4bedef2b0e4e	1	2019-11-09 10:27:51.761+08	2019-11-09 10:27:51.761+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	118383e6-1b61-4e15-8dee-a1a2a61b531e
12ccb6a2-95a8-4477-b07d-68d4ce5986d8	1	2019-11-09 10:32:27.003+08	2019-11-09 10:32:27.003+08	37c046eb-9a0e-49b0-95fb-f0128338f381	118383e6-1b61-4e15-8dee-a1a2a61b531e
71a25702-d398-4011-bf1c-a0c2e7883dc5	1	2019-11-09 10:38:13.438+08	2019-11-09 10:38:13.438+08	73a7b800-25d7-41ad-872d-96cc4f9430de	118383e6-1b61-4e15-8dee-a1a2a61b531e
ffd786df-1c50-4887-8975-b4b7842bbf23	1	2019-11-09 10:41:59.793+08	2019-11-09 10:41:59.793+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	118383e6-1b61-4e15-8dee-a1a2a61b531e
67704247-d8a7-4587-b27f-3c1559f7be34	1	2019-11-09 10:45:56.334+08	2019-11-09 10:45:56.334+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	118383e6-1b61-4e15-8dee-a1a2a61b531e
c0a9e5b7-2af9-45b9-a22a-b6a4a8b160e7	1	2019-11-09 10:50:10.37+08	2019-11-09 10:50:10.37+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	118383e6-1b61-4e15-8dee-a1a2a61b531e
58fd4d47-a02f-4e6b-a495-106b88467e5d	1	2019-11-11 11:43:37.463+08	2019-11-11 11:43:37.463+08	9a331e7d-9429-4f58-8d30-a2fde39a80f3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ea642d87-00bb-4060-aa1f-d13a1aecd8a1	1	2019-11-11 14:50:57.359+08	2019-11-11 14:50:57.359+08	c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ed93081d-a1a3-4e96-b564-985ec10bc036	2	2019-11-11 14:51:06.983+08	2019-11-11 14:51:06.983+08	c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ee36577d-5afe-491b-894b-8b398e24c706	1	2019-11-13 11:47:53.203+08	2019-11-13 11:47:53.203+08	ac632873-d5e1-42fa-9343-6962d16bb547	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
b6bfe859-8459-4311-82a6-7b1e4dbc7538	1	2019-11-13 16:47:57.141+08	2019-11-13 16:47:57.141+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	25642488-1945-4865-81e7-e9593c12d208
0fe6cf40-6755-4974-be51-0a77071794d6	1	2019-11-14 13:09:15.674+08	2019-11-14 13:09:15.674+08	c150497e-123d-4ce0-bc80-9a537ee84489	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2479723b-feda-46f2-99bb-5ffd4ec390ff	1	2019-11-14 14:48:01.65+08	2019-11-14 14:48:01.65+08	6e32b4dd-c257-4c55-922f-1d62e21220c9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f5ab987a-257d-4083-be4e-a90e05466aff	2	2019-11-14 14:48:08.832+08	2019-11-14 14:48:08.832+08	6e32b4dd-c257-4c55-922f-1d62e21220c9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
34114f6f-3b62-486d-9556-ed4bf17476f6	1	2019-11-14 14:56:08.106+08	2019-11-14 14:56:08.106+08	5375e7c0-4ad5-4fcb-93df-82c9140ba075	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d00476da-54b8-4d71-b94e-c8a547f8baee	1	2019-11-14 15:03:05.425+08	2019-11-14 15:03:05.425+08	70457bad-88aa-4b95-ba35-4d42f4c3ac9d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8ba5c52a-3159-41ff-99c3-f356a2442d1b	1	2019-11-14 15:07:34.237+08	2019-11-14 15:07:34.237+08	9ef26f61-19a9-4990-83f4-b0c81d348eeb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e731375d-a3f3-4e4c-805c-1280adc5f52b	2	2019-11-14 15:48:42.024+08	2019-11-14 15:48:42.024+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
be19acbd-14ed-4e4a-927a-19534e17b02b	1	2019-11-14 15:48:42.026+08	2019-11-14 15:48:42.026+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2ce73faf-7ff7-411c-8724-c7f5de3197d8	2	2019-11-15 10:29:23.435+08	2019-11-15 10:29:23.435+08	e95109a9-cf5a-4e13-b52b-1f85101fd99a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
58b4ce37-0691-4cff-95bc-df60aeb79a41	1	2019-11-15 10:29:23.437+08	2019-11-15 10:29:23.437+08	e95109a9-cf5a-4e13-b52b-1f85101fd99a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cfed20f0-05de-4d94-8f58-7beea29927e4	1	2019-11-15 14:29:58.329+08	2019-11-15 14:29:58.329+08	d26842d0-7685-4eec-869d-160b023932b9	25642488-1945-4865-81e7-e9593c12d208
37e489f6-f1ea-4a99-9473-26b1f24af25d	1	2019-11-18 09:58:17.652+08	2019-11-18 09:58:17.652+08	5b2e8307-69da-445f-a1a5-6f04cfd7cd8f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a28365f2-ea6b-4780-a957-fff124cbf738	1	2019-11-19 14:06:12.368+08	2019-11-19 14:06:12.368+08	9278fee5-3705-4e76-a8a6-1cf10956a376	66537b16-1e7d-4823-b03e-676459f5891d
7e07fddc-00e8-4b54-bf75-2ad0f837571c	1	2019-11-19 16:14:21.592+08	2019-11-19 16:14:21.592+08	407a002b-de7c-4a76-9732-e4e8aaaafec3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
056ddac9-ad99-4ed4-9287-756b0c637166	1	2019-11-21 09:33:12.257+08	2019-11-21 09:33:12.257+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2b2090b3-6b7f-4134-9f51-c061f980f02b	1	2019-11-21 11:47:17.6+08	2019-11-21 11:47:17.6+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
4a6f99f4-e082-4a55-9f0b-601ec2131409	1	2019-11-21 11:47:17.602+08	2019-11-21 11:47:17.602+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	7667c2d9-3c04-4818-bfeb-42f43b60af77
223ca791-daeb-4b6e-a828-7b17b443839d	1	2019-11-21 11:47:17.604+08	2019-11-21 11:47:17.604+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a08d0dff-ea22-4b65-b24d-9422e9b8c7a8	1	2019-11-21 11:47:17.606+08	2019-11-21 11:47:17.606+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	8774b4f0-60c1-4c7d-940b-f3a847c2847a
a5c0c2dd-2568-4e65-a7ec-cf06d9f743c7	1	2019-11-21 11:47:19.128+08	2019-11-21 11:47:19.128+08	868f47ed-fe83-49c4-be2c-70731b436220	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
724f7a46-0ccf-42cd-a991-1b0479907152	1	2019-11-21 11:47:19.132+08	2019-11-21 11:47:19.132+08	868f47ed-fe83-49c4-be2c-70731b436220	7667c2d9-3c04-4818-bfeb-42f43b60af77
0f01d510-ea86-4324-937a-baa805d53f2c	1	2019-11-21 11:47:19.135+08	2019-11-21 11:47:19.135+08	868f47ed-fe83-49c4-be2c-70731b436220	9a1540b6-fea8-4bc0-8090-296b05f87c4a
157eca28-0baa-4b0e-9b28-1015cbe6430d	1	2019-11-21 11:47:19.137+08	2019-11-21 11:47:19.137+08	868f47ed-fe83-49c4-be2c-70731b436220	8774b4f0-60c1-4c7d-940b-f3a847c2847a
c12324f7-d9d8-4772-8c47-90741c404d70	1	2019-11-21 14:01:06.931+08	2019-11-21 14:01:06.931+08	43060aae-0e85-4ec6-9fc9-b05216b11e13	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c23f8e42-87d0-419b-857b-35b8cbb12678	1	2019-11-21 15:13:15.431+08	2019-11-21 15:13:15.431+08	e1118b87-bfea-42be-b365-1c99d35511cc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ef56b00e-603c-4c26-b132-037795bab2ce	1	2019-11-21 15:17:49.686+08	2019-11-21 15:17:49.686+08	ee878563-3f80-4c7d-8888-319c875c8a5e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5d4044c7-40c8-46e5-a5f6-7d7172a69bc9	1	2019-11-21 15:17:51.645+08	2019-11-21 15:17:51.645+08	b1353bed-cda0-44a5-b1e9-94cb166962a5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6bb6e4a7-0f87-4a93-8126-d22831a7b915	1	2019-11-21 16:06:37.688+08	2019-11-21 16:06:37.688+08	446a08d7-c237-4f0b-acfb-3d9310da742d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2877880f-2974-4163-96e4-f48a1aae4387	1	2019-11-21 16:15:06.513+08	2019-11-21 16:15:06.513+08	4698f1de-2051-4283-9fe5-2c62b1687239	9a1540b6-fea8-4bc0-8090-296b05f87c4a
23bc92df-57b9-4222-a6b3-7cb4fbdd87f5	1	2019-11-21 16:15:07.779+08	2019-11-21 16:15:07.779+08	5b338441-75c4-4186-9fc3-23aa8d614e19	9a1540b6-fea8-4bc0-8090-296b05f87c4a
07191c46-d74c-4c0b-9401-dc53e34f0d5a	1	2019-11-21 16:17:19.73+08	2019-11-21 16:17:19.73+08	0e96ddaf-1acc-419b-afca-18854f8c25d8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
eab9bb3c-ae22-4574-b211-e3fce64aa313	1	2019-11-22 14:53:57.133+08	2019-11-22 14:53:57.133+08	123b24f1-ba7c-42e1-b742-afdc5bf8620b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
648dc143-8ee1-4777-a763-cf66f3cbed70	2	2019-11-22 14:54:07.864+08	2019-11-22 14:54:07.864+08	123b24f1-ba7c-42e1-b742-afdc5bf8620b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0e411585-691d-43e4-b153-df45634de70d	1	2019-11-22 15:25:34.982+08	2019-11-22 15:25:34.982+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	5afb303e-0963-4e23-91f7-2b41f543aaf6
e4c9283f-3609-4df0-abe4-92d822218a2f	1	2019-11-22 15:31:27.407+08	2019-11-22 15:31:27.407+08	1bda935e-56de-4365-b60e-f02d19299795	5afb303e-0963-4e23-91f7-2b41f543aaf6
7fce98bf-5b42-4847-8d54-bc1f0e54a61e	1	2019-11-22 15:35:15.648+08	2019-11-22 15:35:15.648+08	d31031ab-0237-41a5-adc0-867c1e9952f7	5afb303e-0963-4e23-91f7-2b41f543aaf6
591529fd-732e-4ad9-b1ce-71cb137fb31b	1	2019-11-22 15:38:16.262+08	2019-11-22 15:38:16.262+08	2e0d00cd-a321-4504-b716-41813848cbdb	5afb303e-0963-4e23-91f7-2b41f543aaf6
9ce771e4-6304-4817-b176-8c9bd2e1f00a	2	2019-11-25 13:10:42.695+08	2019-11-25 13:10:42.695+08	5e052852-cf91-4092-8497-41556a0c10b8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5e4753f7-d79b-4ac3-a1a5-fc299c91f9e4	1	2019-11-25 13:10:42.699+08	2019-11-25 13:10:42.699+08	5e052852-cf91-4092-8497-41556a0c10b8	9a1540b6-fea8-4bc0-8090-296b05f87c4a
86bfce2a-faa5-42e9-a1c6-4ffb22a4e09f	1	2019-11-25 13:12:43.517+08	2019-11-25 13:12:43.517+08	3b4d2618-c6ec-4efc-a159-501ad68fd36e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
34ff37dd-975e-4fa8-a5ab-487b5cb6e1df	1	2019-11-25 17:26:40+08	2019-11-25 17:26:40+08	7e5507c8-b21b-47c0-b9de-f79f09875fc7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bb97ef77-9c29-40b3-9e93-72eb26d9f67e	1	2019-11-26 10:00:52.342+08	2019-11-26 10:00:52.342+08	099c6283-519f-4946-aa9d-f0059a76b832	118383e6-1b61-4e15-8dee-a1a2a61b531e
fd0f002e-7ec1-491e-9ff7-3e2781000f30	1	2019-11-26 10:01:08.786+08	2019-11-26 10:01:08.786+08	5e7775c1-0766-436e-b701-b1102833b98d	118383e6-1b61-4e15-8dee-a1a2a61b531e
3377f9e3-709d-4cf5-9f5c-ac0e47f0a28c	1	2019-11-26 10:01:23.6+08	2019-11-26 10:01:23.6+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	118383e6-1b61-4e15-8dee-a1a2a61b531e
45a3dabe-e080-4fc9-ba6f-01200690facd	1	2019-11-26 10:01:50.114+08	2019-11-26 10:01:50.114+08	90a2bc12-2214-43ff-9154-9b9212de2c10	118383e6-1b61-4e15-8dee-a1a2a61b531e
0b1f985c-862f-4fed-9064-73f092421e8c	1	2019-11-26 16:13:41.235+08	2019-11-26 16:13:41.235+08	2663fcb4-832b-4bd9-ac6e-4a58835355cb	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d3c5a98f-b595-4635-9033-eef1233cca38	1	2019-11-27 14:14:55.497+08	2019-11-27 14:14:55.497+08	ba311e19-eea2-4eff-8674-1a146dab66c3	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e916fe27-5463-44f6-82dd-3430cd5213c0	1	2019-12-04 17:52:07.968+08	2019-12-04 17:52:07.968+08	e8b04a28-9fe8-4fd4-b5e9-7c8990e19e2d	639a37c9-637b-46e7-97ac-7b5991155e02
4c4ef3cf-f1b5-4aef-9d5b-94fe66ddb957	1	2019-12-05 17:42:19.778+08	2019-12-05 17:42:19.778+08	ff8195ce-78e0-4668-81bb-8f26e83411a9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6c25fbca-0d16-41c8-b1b7-ff724d5d9a76	1	2019-12-06 10:18:48.765+08	2019-12-06 10:18:48.765+08	82d07222-1b08-4fa5-85bb-790f4dc24def	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1795a06d-3a75-4151-9dd1-347cf67c803d	1	2019-12-06 11:22:34.032+08	2019-12-06 11:22:34.032+08	d4255121-8115-4412-9778-4e29402a1720	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fa0cbbe4-447f-408d-8ecf-7904f0ea8ff8	1	2019-12-06 15:16:13.058+08	2019-12-06 15:16:13.058+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
05b98b4f-78c3-4a40-8efc-e36fb6debb58	1	2019-12-09 10:11:18.887+08	2019-12-09 10:11:18.887+08	5e2812d0-7cbc-4f79-9723-87bec81bb0ea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
19976c8d-2707-4d40-b1b9-a7d0a9ef37c7	2	2019-12-09 10:11:18.892+08	2019-12-09 10:11:18.892+08	5e2812d0-7cbc-4f79-9723-87bec81bb0ea	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1357595c-1801-4b05-a42d-1ca21020c433	1	2019-12-09 10:15:11.89+08	2019-12-09 10:15:11.89+08	15eadcdc-9a05-4580-946b-2b722d95ba5b	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
78e16739-e9e2-425d-934a-bcf3104e1eaa	1	2019-12-10 11:40:37.325+08	2019-12-10 11:40:37.325+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f667f85f-5b6b-488d-b771-4a991eca38ac	1	2019-12-11 10:58:32.082+08	2019-12-11 10:58:32.082+08	52c7f175-bdd6-4c4c-948d-aa2a7868cd82	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9eb1b073-e915-4c9e-b7cc-13d1b6f6c4f9	1	2019-12-11 15:37:46.769+08	2019-12-11 15:37:46.769+08	7d9b7e21-42e2-4040-86d7-4bdbba095e43	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
1df8930c-6467-4c9a-8494-5a2beef7d031	1	2019-12-11 15:50:46.308+08	2019-12-11 15:50:46.308+08	79d3e66b-d0ad-4c0f-b724-11eca0d0c0cb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1a7515b2-0caa-48b3-a171-af2232a46152	1	2019-12-12 11:29:56.732+08	2019-12-12 11:29:56.732+08	a8dd8956-f9ae-40d0-b207-8f5cf9669545	9a1540b6-fea8-4bc0-8090-296b05f87c4a
69ddd5cc-db94-4a65-9ea0-e7592350d708	1	2019-12-12 16:54:09.106+08	2019-12-12 16:54:09.106+08	8b4d38be-2454-4d9b-a586-d894c5197362	9a1540b6-fea8-4bc0-8090-296b05f87c4a
b0a927bb-109d-4f9f-b32c-b5b6b0dd3e54	1	2019-12-12 17:00:31.601+08	2019-12-12 17:00:31.601+08	1d7e6445-a676-42b9-9314-837415832451	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dc20f3ad-4827-4b31-b4c9-9d7ea4a9950b	1	2019-12-16 11:28:19.781+08	2019-12-16 11:28:19.781+08	fbb11421-cbb6-435e-b9f0-4bf1e056016c	c41d198c-435b-4551-ae66-b74be2c022d6
ebb51648-fe47-4a08-8f10-fd9c08005537	1	2019-12-17 14:32:28.299+08	2019-12-17 14:32:28.299+08	d4476f92-5675-4de7-982e-fd914541136a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
456f2fa3-686a-4b01-9e49-7d92132f998e	1	2019-12-17 14:54:12.816+08	2019-12-17 14:54:12.816+08	dae07648-1adf-44d5-8a90-0519a5106a76	9a1540b6-fea8-4bc0-8090-296b05f87c4a
accde3c5-22d1-4547-8075-3f5316563e05	1	2019-12-17 15:53:57.6+08	2019-12-17 15:53:57.6+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	c41d198c-435b-4551-ae66-b74be2c022d6
8d019347-0d6d-435e-a798-e7dba9b83e94	1	2019-12-20 10:02:25.431+08	2019-12-20 10:02:25.431+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	e88f4b90-93c9-4a17-b425-b118ce4f4695
6695fd40-827e-4ca8-8a19-4e91636751f5	1	2019-12-20 18:07:22.539+08	2019-12-20 18:07:22.539+08	cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e
104a4a5d-21c7-47d5-ac48-13724cdcb437	1	2019-12-23 10:30:52.206+08	2019-12-23 10:30:52.206+08	51b66c98-7a13-42ce-9b80-4df528d01234	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5fc7aef0-e1e9-4359-840b-c238a57cb395	1	2019-12-23 14:13:38.178+08	2019-12-23 14:13:38.178+08	e66b2170-dac3-4a27-b9d2-46e8fe63f0ce	9a1540b6-fea8-4bc0-8090-296b05f87c4a
afc36659-571a-4330-a927-08d51c905398	2	2019-12-23 14:13:38.181+08	2019-12-23 14:13:38.181+08	e66b2170-dac3-4a27-b9d2-46e8fe63f0ce	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3650d738-737b-4c16-8918-5cd22ba6dc88	1	2019-12-23 14:17:09.719+08	2019-12-23 14:17:09.719+08	98ae496a-649c-4719-b18f-705b32d4f545	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ce4680ae-0c4a-44e9-9376-af4ce8f2cf86	1	2019-12-23 14:42:47.824+08	2019-12-23 14:42:47.824+08	b5973739-2377-4164-9d35-d25da04d9d05	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e43545b3-6909-475c-85a5-ee3536a08b9f	1	2019-12-23 16:11:23.806+08	2019-12-23 16:11:23.806+08	42fa6a20-85bd-4f18-93f4-2349e5c1e804	9a1540b6-fea8-4bc0-8090-296b05f87c4a
7af23b3c-a97c-43f2-9d11-aafbb962b650	1	2019-12-24 09:20:36.099+08	2019-12-24 09:20:36.099+08	ce8318eb-2d27-407d-9b33-95018458d60f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
17f0019c-fa99-4caa-a15e-0a370f412436	1	2019-12-24 10:40:55.041+08	2019-12-24 10:40:55.041+08	d38d0e7a-cf28-4180-b331-9b950cfb89fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f78f1d5e-3516-4f92-acdd-03be971a578e	1	2019-12-24 11:15:20.028+08	2019-12-24 11:15:20.028+08	aaee1bcc-dde9-4cef-8fde-7c072b96eab5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ae0461df-12bb-4b97-9083-2388cc19fb64	1	2019-12-24 11:48:30.839+08	2019-12-24 11:48:30.839+08	964d519d-ec1b-4a4c-8a02-01402c99d348	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4373a223-fea3-4229-af15-847a2236af08	1	2019-12-24 16:23:58.892+08	2019-12-24 16:23:58.892+08	aa852395-17c0-4ccf-a911-c8090dd6f578	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fb5176b4-4cfe-441f-80d8-041627633bdd	2	2019-12-26 10:22:56.05+08	2019-12-26 10:22:56.05+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
de7228a6-d2a4-4308-8125-c25a5e80caf2	1	2019-12-26 11:22:19.495+08	2019-12-26 11:22:19.495+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
e9bff5bc-8f70-41bb-bb95-baeb9e055634	1	2019-12-30 13:31:05.439+08	2019-12-30 13:31:05.439+08	f49b431e-9069-47ec-a493-fd3c45eed27a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
507cca20-7447-4e32-b93f-7056f2964bb6	1	2019-12-30 16:35:12.232+08	2019-12-30 16:35:12.232+08	2095c53d-9927-4d63-b46b-03de0fd778e0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bfab9b6a-eb12-4dc4-b8c0-6d4de28b44b7	1	2019-12-31 08:40:01.976+08	2019-12-31 08:40:01.976+08	58bfca53-22e0-4857-81f4-c64ce00efe67	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
303fa19d-d73c-4e58-b8bc-9b74464f1dbd	1	2019-12-31 08:43:18.468+08	2019-12-31 08:43:18.468+08	d43df443-364f-4958-b978-cb0e9ee0e532	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c614b8c0-2914-4cae-b78c-5101b78834fc	1	2019-12-31 08:47:45.836+08	2019-12-31 08:47:45.836+08	ccf64c47-a5cc-46bc-92d7-0ffa046876a4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
a12ba566-e9dd-49c6-b817-9e44e2efd96a	1	2019-12-31 09:03:15.074+08	2019-12-31 09:03:15.074+08	1d22d353-6d39-4a84-bd17-aef0bc6f32f8	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e8d38f56-e9e3-422d-a7f3-ea901d8522e5	1	2019-12-31 09:06:18.335+08	2019-12-31 09:06:18.335+08	246ba00c-51d3-4e43-b651-4fd45ccd8ca0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8cd796d2-bdea-4fee-94fe-af39216acd9c	1	2019-12-31 09:09:24.868+08	2019-12-31 09:09:24.868+08	a581eb27-4334-4d9f-b28b-2c4b1e8136d5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
261b6b65-18f2-4652-8cad-489527158a97	1	2019-12-31 09:12:30.171+08	2019-12-31 09:12:30.171+08	e8283251-3a4d-40f8-a7cc-581af3168aee	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
abeb3c83-cf97-4478-8eed-d65b7e03618b	1	2020-01-06 10:52:50.883+08	2020-01-06 10:52:50.883+08	82d07222-1b08-4fa5-85bb-790f4dc24def	6e48d81c-5e9a-4e94-95b8-5e03d0823466
1ccfad69-bfd5-4a03-b03e-42541ba41172	1	2020-01-06 15:12:33.156+08	2020-01-06 15:12:33.156+08	b1ce7bb7-4d25-468a-ab2b-22347d65b166	25642488-1945-4865-81e7-e9593c12d208
e3dc2dd7-b809-423c-875d-fd4e8f551348	1	2020-01-06 15:12:33.717+08	2020-01-06 15:12:33.717+08	b1ce7bb7-4d25-468a-ab2b-22347d65b166	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
88d5b4cf-1f0c-4875-a5dd-6dee39e6505b	1	2020-01-07 09:52:02.05+08	2020-01-07 09:52:02.05+08	c1e63dc1-8a68-4dad-a180-c652ea587e83	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a7735a3f-1762-45ba-80c2-79f16186e3a2	1	2020-01-07 14:23:09.07+08	2020-01-07 14:23:09.07+08	afba576d-0e5e-48cf-a9fa-18a3f986d812	7667c2d9-3c04-4818-bfeb-42f43b60af77
3f092ecf-4e4f-428d-9bee-add7cf19355a	1	2020-01-10 10:52:48.979+08	2020-01-10 10:52:48.979+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
af7320c8-2821-44d5-8022-cb77f1d34195	1	2020-01-14 13:53:59.179+08	2020-01-14 13:53:59.179+08	adcecf0d-2b34-4a55-abc2-78a2439b1567	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d321d917-c48b-4c9d-a6b5-b12201ea05ba	1	2020-01-14 13:57:25.416+08	2020-01-14 13:57:25.416+08	742ee585-31d3-413c-b4f0-44d175b45bf5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3a9c27e9-df8e-4ad0-875d-c9de6327dce2	1	2020-01-14 13:59:03.966+08	2020-01-14 13:59:03.966+08	1f143b2d-d58a-4b04-bec7-8a396e900c90	9a1540b6-fea8-4bc0-8090-296b05f87c4a
458f1eb8-9e88-4975-b79d-55b0674ef142	1	2020-01-14 14:00:56.895+08	2020-01-14 14:00:56.895+08	457137ac-994e-4445-8acf-12172464a82d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2c1aa332-b340-4d0b-b1e4-a88d533a9e65	1	2020-01-14 14:02:50.257+08	2020-01-14 14:02:50.257+08	4abe48e9-ae10-4cd4-85a6-ad3970d8b928	9a1540b6-fea8-4bc0-8090-296b05f87c4a
179fa641-a8ed-484f-a6e9-72b1f93e0391	1	2020-01-14 14:04:32.642+08	2020-01-14 14:04:32.642+08	d6aefb14-b750-4133-94f4-e51c3df7743f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
30f53c73-6ccb-4c44-b639-6100f39a6df2	1	2020-01-14 14:06:32.983+08	2020-01-14 14:06:32.983+08	23ecb98e-e536-4313-9234-07622fea082f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a0b7f6d4-66fb-4a0c-8ef7-636676479bd6	1	2020-01-14 14:07:25.638+08	2020-01-14 14:07:25.638+08	72c4a62b-a2d2-4e68-9686-cc325cd79f74	9a1540b6-fea8-4bc0-8090-296b05f87c4a
16dfc6ce-8611-47f9-ae69-d9fa44e19138	1	2020-01-14 14:10:01.178+08	2020-01-14 14:10:01.178+08	1352d63c-d97b-4dd4-8289-0de6cad01db0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5174769f-c646-48c6-a882-98c9ada82dc4	1	2020-01-14 14:12:06.473+08	2020-01-14 14:12:06.473+08	fe0f0fce-4a90-4c6a-bd8a-26a48e5808e4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d76ad255-098e-43b4-b776-49cae3872d7e	1	2019-12-26 13:50:05.501+08	2020-10-20 17:12:24.261+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
3a0e9308-533e-424a-812d-3f13e104da57	1	2020-01-14 14:13:41.861+08	2020-01-14 14:13:41.861+08	cd24ff84-fef3-40d2-8397-dfa240a13d17	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d9270c78-35a3-4962-b1d2-a35418e082b8	1	2020-01-14 14:15:55.642+08	2020-01-14 14:15:55.642+08	28dd8b68-38c2-47ad-af2f-80cabb2e5af7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
019051cd-3f9b-4557-b417-ff2853ac7152	1	2020-01-17 15:31:03.144+08	2020-01-17 15:31:03.144+08	20d96ea0-8995-453b-aa12-191acb05eced	9a1540b6-fea8-4bc0-8090-296b05f87c4a
73ebc60b-ecd7-4a5c-9bc3-977dba7d3d85	1	2020-02-11 14:33:32.066+08	2020-02-11 14:33:32.066+08	c7c40505-1247-43ea-a898-e767eeae6943	c41d198c-435b-4551-ae66-b74be2c022d6
6cd932f6-1535-49bc-a14a-d30cef2b6cd5	1	2020-02-19 16:24:50.475+08	2020-02-19 16:24:50.475+08	1b1cc578-8839-4900-a0bf-8e8614bdbd41	9a1540b6-fea8-4bc0-8090-296b05f87c4a
983de5ed-36e6-4031-a1f4-2eed91e1e680	1	2020-02-20 16:35:47.513+08	2020-02-20 16:35:47.513+08	62fe835f-5a83-41c7-a31e-3304fb51c5a9	9a1540b6-fea8-4bc0-8090-296b05f87c4a
80c6d23b-6c8d-438c-a5b5-dfec268349ad	1	2020-02-21 13:07:00.693+08	2020-02-21 13:07:00.693+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
e5a65814-7d06-41cd-b77e-4efcda706d73	1	2020-02-27 20:51:36.624+08	2020-02-27 21:07:30.518+08	2f966726-181d-4301-8415-5987393db114	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e95096f3-3c08-4f2c-a05d-474bc1c21b61	1	2020-02-27 22:26:34.018+08	2020-02-27 22:26:34.018+08	80f33249-c402-4942-8c91-15f19638dce4	c41d198c-435b-4551-ae66-b74be2c022d6
61a7cfea-bccf-4f67-83f4-d08707f2e363	1	2020-03-07 16:35:47.279+08	2020-03-07 16:35:47.279+08	c82a7f0e-848f-4659-9555-8b275c33036e	c41d198c-435b-4551-ae66-b74be2c022d6
c45ebf7a-994c-4eea-b3f6-45a94048d9ce	1	2020-03-10 13:51:56.57+08	2020-03-10 13:51:56.57+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
3ca948fd-694f-4d59-a491-05081b807271	1	2020-04-08 15:57:11.838+08	2020-04-08 15:57:11.838+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	451db320-593b-4777-9848-9d778427dea5
4722c16e-a855-4eb0-97d9-e99c47c9ef72	1	2020-03-12 15:37:30.921+08	2020-03-12 15:37:30.921+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
e852da81-b1c4-4d47-b3ef-39e64cbce075	1	2020-03-13 15:41:16.032+08	2020-03-13 18:38:51.919+08	7f76a800-a32e-483a-a948-919fc9e7d075	5afb303e-0963-4e23-91f7-2b41f543aaf6
0dad32d1-e9ac-4632-8096-80bb0f46aa03	1	2020-03-13 15:45:56.951+08	2020-03-13 18:40:31.28+08	3aba791d-d6b2-4175-bb20-109f210f4065	5afb303e-0963-4e23-91f7-2b41f543aaf6
4d41141b-c17b-42a1-89f4-4fadda5a662b	1	2020-03-13 17:42:39.306+08	2020-03-13 19:09:23.977+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	5afb303e-0963-4e23-91f7-2b41f543aaf6
4c440444-0e57-456c-8f11-981d32662ddb	1	2020-03-19 13:24:27.254+08	2020-03-19 13:24:27.254+08	00576fa4-94c0-4ef1-b26c-189142d5bdea	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362
01dd061c-0e37-4b9a-9d58-ed05cb8dff62	2	2020-03-19 13:24:27.258+08	2020-03-19 13:24:27.258+08	00576fa4-94c0-4ef1-b26c-189142d5bdea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ab673ce3-dfbe-44b9-9694-bb3d71016009	1	2020-03-20 10:56:08.939+08	2020-03-20 11:15:55.237+08	1131f328-b9a1-4361-beae-547a1acb032d	e4809d13-f016-47b0-8f2d-129502794def
5db618dd-db52-4c2f-9ced-6b16d708ddae	1	2020-03-23 16:30:30.299+08	2020-03-23 16:30:30.299+08	c730d30c-6a9d-4e3e-b347-7dfbe40a217d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9ddb1044-aa3f-41ad-a145-d7b53882597c	1	2020-03-23 17:25:41.99+08	2020-03-23 17:25:41.99+08	fd94699e-65db-45b8-bbe9-88c147ba1e0a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f5be1c9b-cf89-4857-b349-a43edf06b737	1	2020-03-23 13:05:09.165+08	2020-03-25 15:27:36.44+08	47de1028-1b35-4a17-b78e-f66178ecb4e6	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
c0f06645-ac54-4ee7-8a18-d2da4cf349e3	1	2020-03-26 11:00:05.744+08	2020-03-26 11:00:05.744+08	b78fdf56-b70c-4c49-8734-67400e9a858a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
73a9ac3e-6c5a-446d-b67f-911d54f5301c	1	2020-03-18 14:12:05.058+08	2020-03-27 17:04:06.721+08	1e4fb0f1-79a1-4246-a85c-478b55f8df95	640f3d57-3789-4fc9-a69b-6175b4d3e384
a22b55af-a29c-4f2b-a6c1-f84cfc4aa01d	1	2020-03-30 11:09:24.87+08	2020-03-30 11:09:24.87+08	47de1028-1b35-4a17-b78e-f66178ecb4e6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4c188344-ac77-412b-8ed2-1e17a49452f9	2	2020-03-31 10:15:50.665+08	2020-03-31 10:15:50.665+08	a0d7ec2d-24f8-4039-b175-8921c00c1f4f	640f3d57-3789-4fc9-a69b-6175b4d3e384
dbd1879f-ee6f-490b-95a2-179458f48a30	1	2020-04-08 15:57:21.93+08	2020-04-08 15:57:21.93+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
530325fb-4018-4055-ac6f-06af5e9ef92b	1	2020-04-01 09:55:29.065+08	2020-04-02 15:19:21.346+08	f070a6a5-406b-4567-ab70-0ba9cc204545	80b06599-206f-411a-8965-2b4ccb6a3d59
ecf245cf-eb1c-424e-87de-581473dee579	1	2020-04-03 17:19:01.217+08	2020-04-03 17:19:01.217+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	e65d6dc4-b239-4755-b83e-af11fa23fb70
cb8c1117-720e-4ecc-bf73-94387c4d9883	1	2020-04-03 17:19:01.22+08	2020-04-03 17:19:01.22+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	2dd0e24e-8f6a-4171-8657-493de66868bd
7190cc29-33df-48c4-b5fb-f67674d4b819	1	2020-04-03 17:19:01.223+08	2020-04-03 17:19:01.223+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fe902161-ccf0-4f4e-9087-6118bfeecd9e	1	2020-04-03 17:19:01.226+08	2020-04-03 17:19:01.226+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	dff00e7d-1fb2-443e-be6a-615214932ee6
50b8d95e-d224-4c41-ad37-affb54641460	1	2020-04-08 09:44:52.313+08	2020-04-08 09:44:52.313+08	12f885d6-8a49-4495-909e-8a938e23ec8b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1fee9b9a-9944-41aa-928a-c015f61bb511	1	2020-04-08 10:43:30.793+08	2020-04-08 10:43:30.793+08	a21dbc9a-38d2-4468-8149-8324e875fc8a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ceff386a-bc6e-46c5-a13a-d7380cc60803	1	2020-04-08 13:26:43.654+08	2020-04-08 13:26:43.654+08	0796dca5-8068-4bc2-a73f-99160576a988	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e7a92768-7533-4715-afc6-80476f5f2389	1	2020-04-08 14:09:27.562+08	2020-04-08 14:09:27.562+08	0796dca5-8068-4bc2-a73f-99160576a988	451db320-593b-4777-9848-9d778427dea5
46c82a52-a4f0-4d35-8358-d9c757f40187	1	2020-04-08 15:22:48.321+08	2020-04-08 15:22:48.321+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	451db320-593b-4777-9848-9d778427dea5
f9c22bc0-1320-4f70-91b8-20cb8bcb6993	1	2020-04-08 15:23:08.355+08	2020-04-08 15:23:08.355+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
df8f6580-c6ce-4fc4-92d7-819c27dcdb40	1	2020-04-08 15:29:11.12+08	2020-04-08 15:29:11.12+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61
4ec9c481-f55b-41a8-bf3d-617f0d62fbd8	1	2020-04-08 15:57:05.924+08	2020-04-08 15:57:05.924+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61
86328969-acb0-4364-940b-b059ee66f415	1	2020-04-08 16:12:05.137+08	2020-04-08 16:12:05.137+08	33215263-67ff-4ca8-9cec-d4c05068b412	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a4e3d6a3-cf20-4432-8541-04470ba7b512	2	2020-04-08 16:12:12.443+08	2020-04-08 16:12:12.443+08	33215263-67ff-4ca8-9cec-d4c05068b412	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c51c7710-b2ef-4666-94f6-b073647973da	2	2020-04-08 16:18:25.328+08	2020-04-08 16:18:25.328+08	f54c9b05-e722-4677-9e19-4fbbeeee0938	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
83da887c-5273-42ad-b513-502c3e584888	1	2020-04-08 16:18:25.355+08	2020-04-08 16:18:25.355+08	f54c9b05-e722-4677-9e19-4fbbeeee0938	9a1540b6-fea8-4bc0-8090-296b05f87c4a
41b65cf5-a40e-4714-9539-cde9205d35c0	1	2020-04-08 16:23:51.244+08	2020-04-08 16:23:51.244+08	718d8823-39a8-40fd-b726-76fde0fd8094	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0f49609a-49e2-4056-960b-10ee986e88d8	2	2020-04-08 16:23:51.25+08	2020-04-08 16:23:51.25+08	718d8823-39a8-40fd-b726-76fde0fd8094	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4bd7b385-1d5b-434d-954d-a0f51efdc4de	1	2020-04-08 16:36:50.882+08	2020-04-08 16:36:50.882+08	9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	9a1540b6-fea8-4bc0-8090-296b05f87c4a
64a1e2bd-ed3c-4512-a373-e461b1c50059	1	2020-04-09 09:21:51.841+08	2020-04-09 09:21:51.841+08	f0443cf8-a24d-46f9-a894-7c731798736d	25642488-1945-4865-81e7-e9593c12d208
e9bffaa3-62a5-4116-90ad-ec2f64398bf7	1	2020-04-09 09:28:39.914+08	2020-04-09 09:28:39.914+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	25642488-1945-4865-81e7-e9593c12d208
c65cc7aa-c86b-4e79-923a-0d06f60d610c	1	2020-04-09 09:49:26.003+08	2020-04-09 09:49:26.003+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	25642488-1945-4865-81e7-e9593c12d208
dca64f43-08c5-413c-8ad9-5417bb512881	1	2020-04-09 09:54:56.465+08	2020-04-09 09:54:56.465+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	25642488-1945-4865-81e7-e9593c12d208
e7dde14b-e17a-42e9-89a9-a3c23524bb1a	1	2020-04-09 09:59:42.039+08	2020-04-09 09:59:42.039+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	25642488-1945-4865-81e7-e9593c12d208
04eb0c8a-7900-4291-bb44-31bbeb4fd7ab	1	2020-04-09 10:05:55.328+08	2020-04-09 10:05:55.328+08	bf5a92b7-59ab-429b-bce7-da858650205e	25642488-1945-4865-81e7-e9593c12d208
d30c7f75-8f53-40c6-938b-fca23eea3726	1	2020-04-09 10:10:42.781+08	2020-04-09 10:10:42.781+08	a97834b4-727b-42ad-9ce0-aede595a5727	25642488-1945-4865-81e7-e9593c12d208
9ba07a68-90c4-4a51-9d97-74ae9fefdd44	1	2020-04-09 10:47:23.477+08	2020-04-09 10:47:23.477+08	bfa2c35f-19d1-450b-a04a-b0e211b43bf5	3dfadb0e-7608-49e1-aa43-24f7442b424a
b7751796-cc4f-4c13-8ae6-13746ec1391a	2	2020-04-09 10:48:42.622+08	2020-04-09 10:48:42.622+08	bfa2c35f-19d1-450b-a04a-b0e211b43bf5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3ee3e6ae-95c3-4076-bdc0-580e90fbe94d	1	2020-04-09 11:49:54.548+08	2020-04-09 11:49:54.548+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	e65d6dc4-b239-4755-b83e-af11fa23fb70
b0122d06-52ab-4363-a518-9dee079e5566	1	2020-04-09 11:50:03.689+08	2020-04-09 11:50:03.689+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	2dd0e24e-8f6a-4171-8657-493de66868bd
25b5c305-5424-403f-a687-5391a90c53e1	1	2020-04-09 11:50:19.667+08	2020-04-09 11:50:19.667+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	dff00e7d-1fb2-443e-be6a-615214932ee6
c2dd8e73-5c33-4c6b-a015-37abf3a4bf7d	1	2020-04-09 11:50:27.859+08	2020-04-09 11:50:27.859+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ddedd8bd-d684-4ed1-8a73-ff5636926b76	2	2020-04-09 15:40:07.277+08	2020-04-09 15:40:25.236+08	939d26de-ea01-420a-95fb-9bb2398cb1c2	ad167c7a-80b6-4a2b-960a-532352df8a3c
3794bf7b-f2ed-4b45-8a78-01636f2e5970	2	2020-04-09 15:40:17.145+08	2020-04-09 15:40:32.416+08	939d26de-ea01-420a-95fb-9bb2398cb1c2	74596cc6-9b6c-4386-8915-dd275e4dd101
ca4f7fbb-cedf-4805-a5e6-f7ab3dcaf58a	1	2020-04-09 15:40:41.417+08	2020-04-09 15:40:41.417+08	939d26de-ea01-420a-95fb-9bb2398cb1c2	836f48be-3271-48ce-9df0-d8c9f35d9d35
3899f885-1328-4dea-912d-1a3a379e92aa	2	2020-04-09 15:40:52.31+08	2020-04-09 15:40:52.31+08	939d26de-ea01-420a-95fb-9bb2398cb1c2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80
8cb986c9-a790-43ec-903e-0f2af0dccd72	1	2020-04-09 16:25:13.544+08	2020-04-09 16:25:13.544+08	0b4561c4-31a6-4737-b593-18b2b1973850	ad167c7a-80b6-4a2b-960a-532352df8a3c
5960f593-fe7a-49d6-be3b-1c0529ab8e03	1	2020-04-09 16:25:28.827+08	2020-04-09 16:25:28.827+08	0b4561c4-31a6-4737-b593-18b2b1973850	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
08115467-24e5-4a70-81dd-a360e725171b	1	2020-04-13 11:46:45.195+08	2020-04-13 11:46:45.195+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	e65d6dc4-b239-4755-b83e-af11fa23fb70
38f5f75e-8918-4148-94a3-355f97ff0a4e	1	2020-04-14 09:39:23.405+08	2020-04-14 09:39:23.405+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	25642488-1945-4865-81e7-e9593c12d208
bdfb666a-8123-4601-8533-db0a9b92ea55	1	2020-04-14 10:17:05.067+08	2020-04-14 10:17:05.067+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	25642488-1945-4865-81e7-e9593c12d208
2853d2bb-ec3c-4b98-bde1-16a9db4f9a58	1	2020-04-22 19:14:32.884+08	2020-04-22 19:14:32.884+08	f9304770-9fc6-4203-a75a-2759b659a4d7	3dfadb0e-7608-49e1-aa43-24f7442b424a
a4ff9a85-c285-4720-afcf-155c0116c2db	2	2020-04-22 19:14:32.893+08	2020-04-22 19:14:32.893+08	f9304770-9fc6-4203-a75a-2759b659a4d7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dd9c6ddd-01ca-4750-b867-f985cf0bbe35	1	2020-04-09 16:43:06.061+08	2020-04-09 16:43:06.061+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	25642488-1945-4865-81e7-e9593c12d208
32e92b0e-4d21-4986-865c-842ca4573ec3	1	2020-04-09 16:47:29.181+08	2020-04-09 16:47:29.181+08	c169f72a-deae-4135-84ee-62d771722507	25642488-1945-4865-81e7-e9593c12d208
b5a7e307-8a67-407b-8360-5c4d86168f55	1	2020-04-09 16:53:00.355+08	2020-04-09 16:53:00.355+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	25642488-1945-4865-81e7-e9593c12d208
a23f321f-21b8-44f7-b58f-a407221f9b93	1	2020-04-13 11:46:54.516+08	2020-04-13 11:46:54.516+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	dff00e7d-1fb2-443e-be6a-615214932ee6
c4c769f4-1eb6-4060-90e0-6ab56634cada	1	2020-04-09 17:04:07.983+08	2020-04-09 17:04:07.983+08	18b82e73-7501-445f-a72c-a8e20cf9da40	25642488-1945-4865-81e7-e9593c12d208
fd9283db-69e1-463f-b61e-d3ce9876e6dc	1	2020-04-09 17:07:42.146+08	2020-04-09 17:07:42.146+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	25642488-1945-4865-81e7-e9593c12d208
0b0187d8-96d9-45cd-bb7f-0f4d14744210	1	2020-04-09 17:17:23.402+08	2020-04-09 17:17:23.402+08	536c5d54-6c47-4800-aecb-47219ee56fc2	25642488-1945-4865-81e7-e9593c12d208
cb6e2488-674d-4a24-a326-2524e76d1435	1	2020-04-09 17:22:28.62+08	2020-04-09 17:22:28.62+08	b345cafa-8d58-454f-a01e-e42859545b18	25642488-1945-4865-81e7-e9593c12d208
00d2a316-5cd5-4f82-bf3c-5d87cf208506	1	2020-04-10 10:44:15.335+08	2020-04-10 10:44:15.335+08	0796dca5-8068-4bc2-a73f-99160576a988	25642488-1945-4865-81e7-e9593c12d208
338a761e-e215-4402-9c5e-91bdba47beba	1	2020-04-10 14:35:20.862+08	2020-04-10 14:35:20.862+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	74596cc6-9b6c-4386-8915-dd275e4dd101
954f6b1d-f314-4d0d-aee1-d9e0d846261b	1	2020-04-10 14:35:20.875+08	2020-04-10 14:35:20.875+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d4ee7b16-0e6e-44f8-ac05-439cb2e04ff9	1	2020-04-10 15:36:27.77+08	2020-04-10 15:36:27.77+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	82e26215-779c-407d-8dcf-7aa293ac2f50
eeb39967-06ae-4270-8441-e6a248cd6c88	1	2020-04-10 15:36:36.066+08	2020-04-10 15:36:36.066+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	c34d10ca-5037-406b-bedb-1c9e93c0502c
dbc01469-d28b-493e-b1bf-5996ac187e6d	1	2020-04-10 17:03:16.212+08	2020-04-10 17:03:16.212+08	80342a8c-db6f-40e6-b331-0ae1eca53138	25642488-1945-4865-81e7-e9593c12d208
38df0be1-f399-437f-b72a-17ebcb9d0cdb	1	2020-04-10 17:04:29.966+08	2020-04-10 17:04:29.966+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	25642488-1945-4865-81e7-e9593c12d208
c4d3eac7-dfda-4e6a-b84a-5fa59f3b5a19	1	2020-04-10 17:09:59.705+08	2020-04-10 17:09:59.705+08	35088e4d-f42e-4324-8237-bedb617ee489	25642488-1945-4865-81e7-e9593c12d208
bd9cee05-9bbc-426f-a969-96c02256895b	1	2020-04-10 17:12:46.933+08	2020-04-10 17:12:46.933+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	25642488-1945-4865-81e7-e9593c12d208
ee0d80c9-097b-4ef3-96b8-f24576e09e68	1	2020-04-13 08:46:38.648+08	2020-04-13 08:46:38.648+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	25642488-1945-4865-81e7-e9593c12d208
a1e9ade4-6412-4226-acea-eeb400ea6253	1	2020-04-13 08:51:45.991+08	2020-04-13 08:51:45.991+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	25642488-1945-4865-81e7-e9593c12d208
b8b81a41-de19-46b3-95e6-dc715e1c56d9	1	2020-04-13 08:57:44.143+08	2020-04-13 08:57:44.143+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	25642488-1945-4865-81e7-e9593c12d208
94b900d2-4db5-4562-9a6d-a747d706985c	1	2020-04-13 09:01:35.13+08	2020-04-13 09:01:35.13+08	998a52d3-f5ee-4d52-997f-1865b390e26b	25642488-1945-4865-81e7-e9593c12d208
d7d75ad3-725f-4605-b594-c107f7ac2ef9	1	2020-04-13 10:48:03.081+08	2020-04-13 10:48:03.081+08	2f588726-18df-4ab2-b677-5c4479cef768	82e26215-779c-407d-8dcf-7aa293ac2f50
7a4c06da-1e5b-4464-b1a7-54778e3a62a4	1	2020-04-13 10:48:03.083+08	2020-04-13 10:48:03.083+08	2f588726-18df-4ab2-b677-5c4479cef768	c34d10ca-5037-406b-bedb-1c9e93c0502c
8238c7ec-b9d9-4ea6-aa1d-17bdef1c9d8c	1	2020-04-13 10:48:03.085+08	2020-04-13 10:48:03.085+08	2f588726-18df-4ab2-b677-5c4479cef768	74596cc6-9b6c-4386-8915-dd275e4dd101
a67019ee-1b5e-4b6f-b38e-2e81ffb6dfed	1	2020-04-13 10:48:03.087+08	2020-04-13 10:48:03.087+08	2f588726-18df-4ab2-b677-5c4479cef768	9a1540b6-fea8-4bc0-8090-296b05f87c4a
25cfb943-c37a-4bd9-ac3b-ca76bb92a135	1	2020-04-13 11:26:42.563+08	2020-04-13 11:26:42.563+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	25642488-1945-4865-81e7-e9593c12d208
bc3a1277-e947-4a62-b9ff-a9f4884680b0	1	2020-04-13 11:30:30.957+08	2020-04-13 11:30:30.957+08	9bcce139-4a57-4c96-ba1f-914569011b77	25642488-1945-4865-81e7-e9593c12d208
bc518004-4d3b-4979-b2b2-0ce1c530ad4f	1	2020-04-13 11:33:52.173+08	2020-04-13 11:33:52.173+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	25642488-1945-4865-81e7-e9593c12d208
d9fe2336-3f05-4f8b-9fd4-61d917ccae4f	1	2020-04-13 11:47:01.89+08	2020-04-13 11:47:01.89+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c478a407-4b1f-4320-b3ac-df373fa8c28a	1	2020-04-13 13:05:47.913+08	2020-04-13 13:05:47.913+08	71c10138-4c73-4682-af9b-a904323eeac2	e65d6dc4-b239-4755-b83e-af11fa23fb70
ffb1c108-4ff0-4445-96a1-e0dfa049ab08	1	2020-04-13 13:05:47.917+08	2020-04-13 13:05:47.917+08	71c10138-4c73-4682-af9b-a904323eeac2	2dd0e24e-8f6a-4171-8657-493de66868bd
4a85bf4b-445d-44cd-ba39-cb6a79e93f30	1	2020-04-13 13:05:47.922+08	2020-04-13 13:05:47.922+08	71c10138-4c73-4682-af9b-a904323eeac2	dff00e7d-1fb2-443e-be6a-615214932ee6
9f6a6386-111a-495e-9975-202724aaae19	1	2020-04-13 13:05:47.941+08	2020-04-13 13:05:47.941+08	71c10138-4c73-4682-af9b-a904323eeac2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5b58c3e3-eca9-479c-9eb5-e75f67f97d57	1	2020-04-13 13:26:08.719+08	2020-04-13 13:26:08.719+08	9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	dff00e7d-1fb2-443e-be6a-615214932ee6
7b391eac-4a16-4a35-88e7-c158c50a0f68	1	2020-04-13 13:29:50.867+08	2020-04-13 13:29:50.867+08	cbdb48d6-afd7-4322-884a-d37d56f96176	dff00e7d-1fb2-443e-be6a-615214932ee6
986ece2d-6b6e-4c34-a78c-6f144d632f28	1	2020-04-13 16:31:25.291+08	2020-04-13 16:31:25.291+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3c8bf7ce-3934-4bbc-8d08-640b6937e7aa	1	2020-04-13 16:42:59.115+08	2020-04-13 16:42:59.115+08	8fd9d375-1389-43b9-9423-654a4dd5af44	e65d6dc4-b239-4755-b83e-af11fa23fb70
c244de67-ab93-4d9f-94a3-7965dfdd1554	1	2020-04-13 16:42:59.118+08	2020-04-13 16:42:59.118+08	8fd9d375-1389-43b9-9423-654a4dd5af44	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9148c4e7-ccfc-457f-9523-76fb8eddb5a1	1	2020-04-13 16:42:59.12+08	2020-04-13 16:42:59.12+08	8fd9d375-1389-43b9-9423-654a4dd5af44	dff00e7d-1fb2-443e-be6a-615214932ee6
8aa9e896-0f9a-4897-97ea-b698b71a1b56	1	2020-04-13 17:26:36.481+08	2020-04-13 17:26:36.481+08	a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500
1545c9d8-07e6-45eb-859c-71e14c99d100	1	2020-04-14 09:46:36.219+08	2020-04-14 09:46:36.219+08	30bfe302-d364-4325-be1f-7fef73afaf77	25642488-1945-4865-81e7-e9593c12d208
0a42cef2-35fb-41bd-88f3-884b49a30967	1	2020-04-14 10:12:31.869+08	2020-04-14 10:12:31.869+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	25642488-1945-4865-81e7-e9593c12d208
8c7dcb9d-43de-45f7-b210-5ace75e5ab7b	1	2020-04-14 10:32:45.122+08	2020-04-14 10:32:45.122+08	2b960cb5-8b22-4a35-b811-2a74b8f47196	25642488-1945-4865-81e7-e9593c12d208
2f9705c2-7b35-4829-ac02-aad5df643695	1	2020-04-14 10:32:45.126+08	2020-04-14 10:32:45.126+08	2b960cb5-8b22-4a35-b811-2a74b8f47196	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3fa86c58-864f-4ace-ac19-a7c2e63273d8	1	2020-04-14 10:39:24.283+08	2020-04-14 10:39:24.283+08	2e98107c-2635-43a9-a89f-872152bac901	25642488-1945-4865-81e7-e9593c12d208
5525ac80-6984-4305-a58c-fdcdea1edfb7	1	2020-04-14 10:39:24.286+08	2020-04-14 10:39:24.286+08	2e98107c-2635-43a9-a89f-872152bac901	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bb16892a-4da0-4e00-b9c7-20b2e528b980	1	2020-04-14 10:44:39.27+08	2020-04-14 10:44:39.27+08	2de0b18f-a13a-48a9-8e34-6bfeff609972	25642488-1945-4865-81e7-e9593c12d208
d844ea04-2ebd-4f69-a1c8-f58b2da3d757	1	2020-04-14 10:44:39.272+08	2020-04-14 10:44:39.272+08	2de0b18f-a13a-48a9-8e34-6bfeff609972	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
756a5045-b519-4794-b341-6f0e9a8c63a2	1	2020-04-14 10:54:11.583+08	2020-04-14 10:54:11.583+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	dff00e7d-1fb2-443e-be6a-615214932ee6
acbc087a-cff1-4103-ab5d-5a1b270a5b22	1	2020-04-14 10:57:32.473+08	2020-04-14 10:57:32.473+08	5b40bb69-7692-4cee-b6df-bd7871764131	dff00e7d-1fb2-443e-be6a-615214932ee6
fb0ac975-a15e-47d2-accf-814c412ad5e8	1	2020-04-21 13:39:10.229+08	2020-04-21 13:39:10.229+08	8cee37a9-d972-4d3b-97eb-53c9a87dbe9c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0e443d95-5d0e-4aac-b1e4-a1adaff332da	1	2020-04-21 23:56:27.162+08	2020-04-21 23:56:27.162+08	f2966257-6f65-4e21-81a5-451cd5b63144	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3b3649cc-a319-40bf-b088-c781f0ba795f	2	2020-04-22 19:18:31.181+08	2020-04-22 19:18:31.181+08	f9304770-9fc6-4203-a75a-2759b659a4d7	de1d3ee0-008d-4b6c-be9e-a94740944e36
4844ea23-31c6-4752-a17b-b2f72320575e	2	2020-04-22 19:18:41.87+08	2020-04-22 19:18:41.87+08	f9304770-9fc6-4203-a75a-2759b659a4d7	a53ae7a4-4432-4696-9af3-bbc514ecee6e
1f7e2288-09ed-47e2-ae8c-833e425aa571	2	2020-04-22 19:27:26.509+08	2020-04-22 19:27:26.509+08	f9304770-9fc6-4203-a75a-2759b659a4d7	f6b4041e-0a8c-46cf-a8df-21621b01f953
28fc29f7-72b5-4667-90b2-06556fb12762	2	2020-04-22 19:27:33.85+08	2020-04-22 19:27:33.85+08	f9304770-9fc6-4203-a75a-2759b659a4d7	296ce231-ea55-48e7-90a3-4aea8879b66f
259114a6-2e3e-4ec2-82b1-6db620d6eab2	2	2020-04-22 19:27:46.362+08	2020-04-22 19:27:46.362+08	f9304770-9fc6-4203-a75a-2759b659a4d7	139e622c-b7ec-45e4-9d31-862953487b92
a5225e5f-1fdd-45dd-b907-d756fc67ab58	2	2020-04-22 19:27:59.436+08	2020-04-22 19:27:59.436+08	f9304770-9fc6-4203-a75a-2759b659a4d7	2686f932-1a7d-4a02-a326-e06e0d92f30a
5b9e38a0-3fc3-4165-866d-fb5259c29c99	1	2020-05-11 09:29:12.669+08	2020-05-11 09:29:12.669+08	57b88830-72c4-4739-8d3b-3754fb371135	9a1540b6-fea8-4bc0-8090-296b05f87c4a
328d73ca-efc8-4070-96bc-e219a26ebe70	1	2020-05-13 11:30:27.494+08	2020-05-13 11:30:27.494+08	310ec0de-7bbc-4a75-8f1b-d126a2d3ac4a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9a7a64d6-cf0a-4182-9feb-1b5032169823	1	2020-05-14 11:28:55.628+08	2020-05-14 11:28:55.628+08	82d6439d-e647-44e7-ba65-2de818baea7f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e982a7aa-e38e-45b3-a537-bdcfe35d468a	1	2020-05-14 15:02:02.193+08	2020-05-14 15:02:02.193+08	ba181334-9686-42cd-b00e-7165b35e067f	9a1540b6-fea8-4bc0-8090-296b05f87c4a
79718313-a599-4e1a-ac4f-dae5017e2e64	1	2020-05-20 11:50:17.61+08	2020-05-20 11:50:17.61+08	6a94d3b4-a64c-48d2-be57-dfbd7f20c530	3dfadb0e-7608-49e1-aa43-24f7442b424a
21c89044-25ad-4df8-aebe-8032f531f59f	1	2020-05-21 15:16:19.416+08	2020-05-21 15:16:19.416+08	4d37123c-99a8-49db-b2d2-3e334f5b27e0	66537b16-1e7d-4823-b03e-676459f5891d
2ac693d6-3c38-4f50-9fd2-695a767a9daf	2	2020-05-21 15:16:19.419+08	2020-05-21 15:16:19.419+08	4d37123c-99a8-49db-b2d2-3e334f5b27e0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2b2d768b-6b55-406a-8f2b-0e8d55efbd38	1	2020-05-21 15:23:07.798+08	2020-05-21 15:23:07.798+08	39e6fe98-3dea-458b-9f64-143d18617cc4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c5962a60-67df-47e7-9113-00cac921d0fe	1	2020-05-25 15:20:08.759+08	2020-05-25 15:20:08.759+08	94e0657d-9d34-4baf-bac1-34cb6610e051	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cdb61000-c726-4791-ac57-c3d79b4c32b6	1	2020-05-28 10:53:52.233+08	2020-05-28 10:53:52.233+08	e867f531-f1a3-44c8-9876-368efe947b7d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
cc32c566-291c-4843-acdc-abe10b99aa75	1	2020-05-28 15:02:00.603+08	2020-05-28 15:02:00.603+08	d86466d8-8892-45e2-a86a-56e283df30ac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4c99cb74-82ae-4966-b8e9-db1a39ffd3d7	1	2020-06-05 14:45:30.238+08	2020-06-05 14:45:30.238+08	ee98ef38-7fda-425a-9fae-5000c658a83e	9a1540b6-fea8-4bc0-8090-296b05f87c4a
4620270e-1389-4742-94fb-8add2484c78f	2	2020-06-05 14:45:30.241+08	2020-06-05 14:45:30.241+08	ee98ef38-7fda-425a-9fae-5000c658a83e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7e9a75d3-78b2-4190-af48-917872395dff	1	2020-06-05 14:49:19.902+08	2020-06-05 14:49:19.902+08	1aa0fcb2-1f26-4596-9211-f028c369fbcd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
901af8f9-5176-44d1-bdcc-ce352e485320	1	2020-06-05 14:50:25.542+08	2020-06-05 14:50:25.542+08	47775a01-00ef-4500-82ee-04b5536aaeea	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
16069271-c678-4ab0-830d-b550eb698a87	1	2020-06-05 14:51:20.997+08	2020-06-05 14:51:20.997+08	3ade0dca-d01e-4b1f-a1af-4948163e6902	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8877a5c7-25c7-43aa-9131-b6361c0a06e8	1	2020-06-10 11:35:22.171+08	2020-06-10 11:35:22.171+08	a2a6365d-ec0a-453a-be54-35e11b324d63	9a1540b6-fea8-4bc0-8090-296b05f87c4a
daac9c39-afad-4886-86c6-363bd5785bff	1	2020-06-10 14:00:54.726+08	2020-06-10 14:00:54.726+08	33b14e4c-17e6-44c9-a0a1-84cfe22fa073	9a1540b6-fea8-4bc0-8090-296b05f87c4a
76e17746-b712-4967-a506-ecd13d7f0ecd	1	2020-06-10 14:05:06.78+08	2020-06-10 14:05:06.78+08	9ed59e3e-108f-4fe9-b3c0-37c11cd46d92	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5a9d971b-ad1f-4360-966e-b7d83d502bf1	1	2020-06-10 14:06:51.133+08	2020-06-10 14:06:51.133+08	ce34762d-8e48-4c7e-8c23-1f7810ab7884	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f5c0e7a5-4bcb-4876-9cc6-f4d753afcbfe	1	2020-06-10 16:55:56.559+08	2020-06-10 16:55:56.559+08	59ffec5d-7c08-417e-bddc-8483466e1d66	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6d4212fe-6acc-407d-a5c1-10642accea1a	1	2020-06-10 17:07:04.275+08	2020-06-10 17:07:04.275+08	42d66a56-b0ca-400d-b41e-250d62a84878	9a1540b6-fea8-4bc0-8090-296b05f87c4a
55ca4f63-083f-4fdb-9406-bf94466cd4b6	1	2020-06-10 17:08:53.385+08	2020-06-10 17:08:53.385+08	7d85285c-28e9-44e3-b920-793850693e3a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d7b5d330-bd98-4e0b-8fe2-ed6c6241bd16	1	2020-06-10 17:12:06.738+08	2020-06-10 17:12:06.738+08	8485f6ac-e9d2-4f9f-a94d-0a3a3c516fea	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1052e946-4d2a-4d30-8789-5f05eb88e1a8	1	2020-06-11 17:08:14.285+08	2020-06-11 17:08:14.285+08	61f8ca5a-27a4-4e6e-8314-7b989dc3f178	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ff5565a0-4e66-4477-bd2f-9d481073129f	1	2020-06-11 17:32:44.099+08	2020-06-11 17:32:44.099+08	e3d9aa70-13e8-419c-939b-953b239eb4b0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5f2cb212-f147-41f7-b054-13f9b47f7392	1	2020-06-11 17:41:16.026+08	2020-06-11 17:41:16.026+08	30c2c04a-0810-4f90-91cf-d49b9ed855be	9a1540b6-fea8-4bc0-8090-296b05f87c4a
976c4e88-8f14-44be-9572-6cfcfe029da9	1	2020-06-12 10:02:36.339+08	2020-06-12 10:02:36.339+08	5fec42a4-44a4-46e1-afba-17c79de7e09c	9a1540b6-fea8-4bc0-8090-296b05f87c4a
470175a7-bba6-43f2-b98d-59365feb5db5	2	2020-06-12 10:02:36.342+08	2020-06-12 10:02:36.342+08	5fec42a4-44a4-46e1-afba-17c79de7e09c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0ab42106-9c70-43f0-8a3a-74694d0af133	1	2020-06-15 10:48:34.977+08	2020-06-15 10:48:34.977+08	537ca657-4262-4143-a1fd-7050c3795634	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6b71bb33-2824-48ba-b989-a52719e86916	1	2020-06-15 17:15:30.577+08	2020-06-15 17:15:30.577+08	a999f92a-a9c4-4b33-a805-9bbb221f1935	3dfadb0e-7608-49e1-aa43-24f7442b424a
88f87fb8-1362-455c-8762-1eea46fa4922	2	2020-06-15 20:03:37.388+08	2020-06-15 20:03:37.388+08	a999f92a-a9c4-4b33-a805-9bbb221f1935	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0063aaea-c921-45c0-8ff5-ae08b21f3590	1	2020-06-16 14:26:24.064+08	2020-06-16 14:26:24.064+08	1a7f1970-6142-4919-a1e7-110829051ba9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fc33cf83-21e1-4e98-ad5e-2389e836de21	1	2020-06-24 09:49:49.827+08	2020-06-24 09:49:49.827+08	2b1ac1f2-3501-4eb7-882b-59c5f346ad98	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9008c7ca-1636-405e-ad93-8adef9cfd702	2	2020-06-24 15:19:41.374+08	2020-06-24 15:19:41.374+08	6a94d3b4-a64c-48d2-be57-dfbd7f20c530	030bf3ed-bc8b-4460-8031-99370c393db6
e4cb3fdf-1af6-420c-a311-63d8ed972a79	1	2020-06-24 15:20:13.087+08	2020-06-24 15:20:13.087+08	9c12215f-afab-45e9-8341-1e487df6d020	030bf3ed-bc8b-4460-8031-99370c393db6
14a69a88-1670-4519-b2e7-b000cc9b26c6	2	2020-06-24 15:20:20.199+08	2020-06-24 15:20:20.199+08	9c12215f-afab-45e9-8341-1e487df6d020	789cc633-6120-4c95-95a7-c7f15063488f
a7a8865e-320e-45c0-b1a3-09d036a338ae	1	2020-06-24 15:21:13.395+08	2020-06-24 15:21:13.395+08	06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2	789cc633-6120-4c95-95a7-c7f15063488f
205e9398-7013-4cab-838f-eafd57410b9d	2	2020-06-28 11:29:02.96+08	2020-06-28 11:29:02.96+08	c3507ba4-b2b5-45b8-aecb-84079c90649d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
be17d735-b121-426e-ad77-0c9ee0207d44	1	2020-06-28 11:29:02.963+08	2020-06-28 11:29:02.963+08	c3507ba4-b2b5-45b8-aecb-84079c90649d	9a1540b6-fea8-4bc0-8090-296b05f87c4a
779efde0-4e70-4765-857a-9b96bdcfc08e	1	2020-06-29 09:57:57.719+08	2020-06-29 09:57:57.719+08	d246af39-fb67-4750-8a25-d05680a359b3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c6d00d85-cb05-405a-b910-289bded0649c	1	2020-06-29 16:12:12.856+08	2020-06-29 16:12:12.856+08	c67f1f58-3886-4294-835b-b48db34d96e3	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c3f125e8-d031-40c1-9640-560dc30e2679	2	2020-07-01 13:42:35.882+08	2020-07-01 13:42:35.882+08	5865ba02-99d8-4649-a200-c40dfa917982	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
5bd10d7a-1049-40dd-baa7-61fcf9a02b07	1	2020-07-01 13:42:35.887+08	2020-07-01 13:42:35.887+08	5865ba02-99d8-4649-a200-c40dfa917982	9a1540b6-fea8-4bc0-8090-296b05f87c4a
3ce62d6a-067d-4a2f-8a05-34e60b35bc4b	1	2020-07-02 10:28:22.762+08	2020-07-02 10:28:22.762+08	a8180277-ba74-44e1-a3bc-b408e290f742	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c196ad2a-9256-4f3d-9118-e00664b7eebc	1	2020-07-20 15:00:17.845+08	2020-07-20 15:00:17.845+08	75c9bb71-afbd-4667-8958-1c195663e0f6	3dfadb0e-7608-49e1-aa43-24f7442b424a
5a3e2404-29dd-4080-af6a-63855994f51c	2	2020-07-20 15:00:27.659+08	2020-07-20 15:00:27.659+08	75c9bb71-afbd-4667-8958-1c195663e0f6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
66a6b0b4-56e0-4f0e-8850-c776a629c121	1	2020-07-20 16:29:31.378+08	2020-07-20 16:29:31.378+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	1c21f4ae-9f87-49b7-96f4-64f39a145e97
bd062ddd-204a-415c-88fd-19137eb3cbf3	2	2020-07-20 16:29:37.344+08	2020-07-20 16:29:37.344+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
9ddf05ea-8a4e-4c98-bb4d-ce137ddfcfbd	1	2020-08-26 13:29:30.02+08	2020-08-26 13:29:30.02+08	945563fe-656a-461e-8dca-7a4b2edbf9d0	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d3ea3597-df22-4d41-a41e-8ed052f2ab26	2	2020-08-26 13:29:30.023+08	2020-08-26 13:29:30.023+08	945563fe-656a-461e-8dca-7a4b2edbf9d0	0d79aad8-d5e4-4ae1-8062-4bbf602713cf
a40c154f-9e69-436b-9d23-e0fc39b97725	1	2020-07-03 11:57:35.075+08	2020-07-21 10:26:38.681+08	9a1a0afd-566e-45a2-8286-147f760679a4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e14de5eb-d92b-4081-aa14-3c3849bef9ca	1	2020-07-21 15:31:18.133+08	2020-07-21 15:31:18.133+08	b9092f6a-8c04-44c9-97ea-49b5389f5580	9a1540b6-fea8-4bc0-8090-296b05f87c4a
efe8225f-4482-4c27-8139-9b81ffd35456	1	2020-07-23 13:36:21.05+08	2020-07-23 13:36:21.05+08	ff948ead-5a62-4990-b5c9-a440be471988	66537b16-1e7d-4823-b03e-676459f5891d
db3e4e5b-f023-40df-862c-4d8d0c48d0c2	1	2020-07-31 11:04:05.428+08	2020-07-31 11:04:05.428+08	8581898c-d047-4cdc-8ccc-ef33a1567435	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2a70f392-6f2c-405a-a65f-7e4491610af2	1	2020-08-03 08:43:47.575+08	2020-08-03 08:43:47.575+08	c283a48d-8843-4cb6-9c01-336738a8137a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
28aa96f9-693e-44f3-9b96-38c5fbd4ee1e	2	2020-08-03 08:43:47.578+08	2020-08-03 08:43:47.578+08	c283a48d-8843-4cb6-9c01-336738a8137a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fa16930b-9773-4678-86e7-3918128f1dc9	1	2020-08-04 11:14:39.066+08	2020-08-04 11:14:39.066+08	5b58e9d2-f305-4ded-8863-c346e916d5e7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
38f5fb03-c53d-42c6-9a3b-b18d127d383e	1	2020-08-05 16:54:52.109+08	2020-08-05 16:54:52.109+08	07977267-d666-4b82-8976-d533e9afde5b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5f1c5214-9a9e-4e9b-a029-a48ea716f4ff	2	2020-07-31 11:04:05.431+08	2020-08-10 08:55:33.95+08	8581898c-d047-4cdc-8ccc-ef33a1567435	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
3a666cf1-c5e9-47ad-83a2-f28e8d3e68ec	1	2020-07-31 11:04:47.255+08	2020-08-10 08:55:48.032+08	3bfe9ce6-f4d9-4822-968e-3649d5eee799	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
45f68805-d64d-425b-834f-f6944a46c9b2	1	2020-07-20 09:49:47.232+08	2020-08-10 15:22:29.62+08	069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	b0b670ee-6fd7-4178-b684-08677b47ba30
a1657550-326d-4cc0-8c1c-d0aa2a208d37	1	2020-08-13 09:25:55.317+08	2020-08-13 09:25:55.317+08	11b16ed9-a251-4907-b941-5a31ea559da1	9a1540b6-fea8-4bc0-8090-296b05f87c4a
bb9ca53f-ddab-44b1-838b-f1edc018fb6d	1	2020-08-14 11:53:53.18+08	2020-08-14 11:53:53.18+08	2ebd818a-1949-4633-b46d-d923cc2bec7b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
fb637416-6bbd-4ce3-8785-55c7a1e1993f	1	2020-08-14 15:25:23.089+08	2020-08-14 15:25:23.089+08	8a59ee46-6582-4f9b-a696-f2025fca9eda	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0a996db6-1ea0-4869-9d7e-7d4f42055999	1	2020-08-14 16:22:21.517+08	2020-08-14 16:22:21.517+08	6e1d455f-6dc1-4237-b1f2-de550f8dbd0e	3dfadb0e-7608-49e1-aa43-24f7442b424a
c86ab2de-0be6-4c95-9d70-93fcd419b589	2	2020-08-14 16:22:21.53+08	2020-08-14 16:22:21.53+08	6e1d455f-6dc1-4237-b1f2-de550f8dbd0e	b3cb9990-288c-4f0d-a91a-547254d1d9c6
0fbee95d-d04d-4eb4-96f8-5b7a88a695b1	1	2020-08-14 16:25:21.438+08	2020-08-14 16:25:21.438+08	7599bfb7-18fc-40c7-be52-ff9fd0d1519e	b3cb9990-288c-4f0d-a91a-547254d1d9c6
4d250038-b2e2-43a6-86b6-8b47920bcf86	1	2020-08-18 08:53:48.596+08	2020-08-18 08:53:48.596+08	6b55f70b-4626-47f5-b8fa-10f76bf80c68	9a1540b6-fea8-4bc0-8090-296b05f87c4a
89c95ea2-6cca-47b2-aee1-cab6eed0e1a6	1	2020-08-18 11:14:36.347+08	2020-08-18 11:14:36.347+08	e0a57272-b5e1-4160-b62d-98cc9dcd10ca	e8fa0f36-2606-4bc7-b594-ae3c3289ed63
be1d9771-c1a4-4b57-ab5e-43476f7ce202	2	2020-08-18 11:14:36.352+08	2020-08-18 11:14:36.352+08	e0a57272-b5e1-4160-b62d-98cc9dcd10ca	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1
0341d559-c694-4a1d-91c5-46efa38ab7b3	2	2020-08-18 11:14:36.631+08	2020-08-18 11:14:36.631+08	e0a57272-b5e1-4160-b62d-98cc9dcd10ca	118383e6-1b61-4e15-8dee-a1a2a61b531e
4d1531eb-e23e-4c0e-b19a-8573fe4541ce	2	2020-08-18 11:14:36.634+08	2020-08-18 11:14:36.634+08	e0a57272-b5e1-4160-b62d-98cc9dcd10ca	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22
e509deea-5eb4-42e2-a446-937ace3243a6	1	2020-08-21 10:26:20+08	2020-08-21 10:26:20+08	032d4203-60ef-4d64-9888-530facf358ff	9a1540b6-fea8-4bc0-8090-296b05f87c4a
25a1a6c1-89ba-4bdc-af70-9b3483916a5c	1	2020-08-26 13:33:13.418+08	2020-08-26 13:33:13.418+08	cc3c245e-aa6a-4e4e-831b-780769ec41ca	0d79aad8-d5e4-4ae1-8062-4bbf602713cf
e95b219e-b28a-47be-a720-4a8bdd1cc484	1	2020-08-27 16:11:17.327+08	2020-08-27 16:11:17.327+08	58f5081b-0b4e-4f26-853f-22ef0d1ea318	0237523c-9c1a-4c16-9fc8-7b8f9a369383
4107b08d-9406-4946-bd4e-bb974e47732a	1	2020-09-01 10:29:11.204+08	2020-09-01 10:29:11.204+08	8f3e91ce-4354-4d6a-826a-c727aaabaa58	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c512274c-ac24-4850-af88-419cb4f76e9e	1	2020-09-01 11:23:08.028+08	2020-09-01 11:23:08.028+08	d876d84c-b881-4ef4-a79d-8a60b372c964	e88f4b90-93c9-4a17-b425-b118ce4f4695
a55bdb42-e095-43be-ab7a-5c026a49008b	1	2020-09-01 14:32:02.471+08	2020-09-01 14:32:02.471+08	fc096555-1b1d-4526-a6d2-a734b1d313fd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ceafa9d0-f201-4545-93a4-f683b05ac5a4	1	2020-09-02 17:43:02.612+08	2020-09-02 17:43:02.612+08	d9aab088-57f5-43ba-b30b-3342219a4b75	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
718f3c5c-ef47-408e-9eda-38e1c3bbdd2a	1	2020-08-27 16:22:16.983+08	2020-09-03 11:40:30.483+08	35e7c6a8-9125-4612-889d-259e09a24735	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2c9fd49a-e60f-4df2-9ba6-bccf7891b1e6	1	2020-08-27 16:38:22.113+08	2020-09-03 11:40:43.889+08	899def98-516b-4c5f-a7e8-2fd48018bf12	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2202e398-3e6b-4b6c-87f4-9f52cf248cb7	2	2020-08-27 16:11:24.273+08	2020-09-03 11:40:56.549+08	58f5081b-0b4e-4f26-853f-22ef0d1ea318	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0874fdd8-f0a4-49e1-9529-25857531ab35	1	2020-09-04 12:04:26.562+08	2020-09-04 12:04:26.562+08	518c0b84-693f-4a2d-8f80-1ef2cbc6c3ab	66537b16-1e7d-4823-b03e-676459f5891d
30c49a1a-f920-4de0-b130-43a7c2e55e37	1	2020-09-04 14:47:20.79+08	2020-09-04 14:47:20.79+08	f922cc6e-672b-4f59-a90e-2499ecfc1d24	66537b16-1e7d-4823-b03e-676459f5891d
500cb3e6-5fad-41f5-8d2c-4e3d46b2c1a6	1	2020-09-07 16:10:09.072+08	2020-09-07 16:10:09.072+08	55f72e62-0922-4975-9714-058decf7a14d	cd04713a-2775-4af9-94b3-89ddeca68f9a
4609913f-cc94-4682-a556-127da768b954	1	2020-09-10 11:15:15.266+08	2020-09-10 11:15:15.266+08	207df42a-f8cf-47d0-a4bc-d1d5d9114928	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
67882d64-f018-48ae-84a2-ca763a66b972	1	2020-07-20 17:54:25.266+08	2020-09-11 10:17:21.196+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	099c1ce3-267d-41ed-a3ed-be979a58222e
d3d128d7-74a5-4635-84b3-1f9c8f68ec35	2	2020-09-11 12:01:40.266+08	2020-09-11 13:49:18.924+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	2bef85fc-4b8c-4b06-aea3-c4309283871b
9f8055cb-759b-4594-b5ac-09653a838120	1	2020-09-11 13:29:23.082+08	2020-09-11 13:49:34.22+08	33a769c0-0ef3-47dd-ab22-3e86247259eb	2bef85fc-4b8c-4b06-aea3-c4309283871b
ff49683c-d0d3-4fb4-a3cb-e79dbedbff42	1	2020-09-11 14:36:39.585+08	2020-09-11 14:36:39.585+08	2a7828f8-5044-43fb-9435-9a59ec4d769a	ad4f23f8-9213-4194-97ce-209a34596649
3e449c37-d3bd-43ae-a79f-bd187b76007e	1	2020-09-15 08:40:27.828+08	2020-09-15 08:40:27.828+08	a2885ce6-68b4-46e7-8dc6-fda47f2ad7bf	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a43e41e5-da9a-4f68-be1b-d5e69dd4735b	1	2020-09-15 08:59:09.152+08	2020-09-15 08:59:09.152+08	4a7b1546-e1c1-4103-8fd0-baa6ce39ab2c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c48b7e59-f422-4b80-a712-b414a713240d	1	2020-09-18 11:09:34.404+08	2020-09-18 11:09:34.404+08	8523278f-0788-4ef6-8669-64d28b348c59	b3cb9990-288c-4f0d-a91a-547254d1d9c6
6b32a15d-6fa0-4856-bf23-2bbd8355ab79	1	2020-09-21 09:55:14.218+08	2020-09-21 09:55:14.218+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	cd04713a-2775-4af9-94b3-89ddeca68f9a
324f2d71-3a50-4146-9aae-e363bd12206d	1	2020-09-21 09:55:16.281+08	2020-09-21 09:55:16.281+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	cd04713a-2775-4af9-94b3-89ddeca68f9a
ffa3ceac-455f-4f77-a6ff-9672588c611f	1	2020-09-28 10:33:27.923+08	2020-09-28 10:33:27.923+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	9a1540b6-fea8-4bc0-8090-296b05f87c4a
c852dc68-be4c-4e55-abe9-657778e17115	1	2020-09-28 10:33:27.926+08	2020-09-28 10:33:27.926+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	66a06e5d-a436-4d37-806b-919d8fd1c564
e86b43e7-33da-4bd2-8984-7d4a79397349	1	2020-09-28 10:45:02.866+08	2020-09-28 10:45:02.866+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	66a06e5d-a436-4d37-806b-919d8fd1c564
83f56f79-81e4-4274-9385-6ad10247f3f4	1	2020-09-28 10:45:02.871+08	2020-09-28 10:45:02.871+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2c6aef25-4dec-40f3-9c11-0d31971ba699	1	2020-09-29 09:28:13.403+08	2020-09-29 09:28:13.403+08	e33b5ca8-307d-47dc-afbc-01098220b4ac	9a1540b6-fea8-4bc0-8090-296b05f87c4a
0164eb27-0f0d-485f-a6fe-aabce5f65b3a	1	2020-09-29 10:14:18.841+08	2020-09-29 10:14:18.841+08	e33b5ca8-307d-47dc-afbc-01098220b4ac	66a06e5d-a436-4d37-806b-919d8fd1c564
f0653362-f4de-4461-a2ed-7c75c32e2474	1	2020-09-29 11:19:58.824+08	2020-09-29 11:19:58.824+08	e4de5a5f-c4cc-4e7e-bb0b-b34c28a89925	9a1540b6-fea8-4bc0-8090-296b05f87c4a
d225ef09-9a28-4c68-9bc5-b9856e4b9af6	1	2020-10-09 14:17:46.84+08	2020-10-09 14:17:46.84+08	4452ff6a-859b-45e6-9e9c-c6b59ee3667b	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9d5d9205-b7b8-46bf-9ed6-9222582bfd40	1	2020-10-10 10:46:03.62+08	2020-10-10 10:46:03.62+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	cd04713a-2775-4af9-94b3-89ddeca68f9a
77da0a6f-3db6-4714-8add-a2e306bf06ac	1	2020-10-10 10:46:11.465+08	2020-10-10 10:46:11.465+08	f0d5077b-4260-422c-87e3-92d13d136ebf	cd04713a-2775-4af9-94b3-89ddeca68f9a
36d81901-6ca4-41f4-912a-9088650f7d78	1	2020-10-13 10:08:39.386+08	2020-10-13 10:08:39.386+08	04ffee3d-0572-491c-9291-82dbbf14e7d4	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
8bed1966-b73c-4195-a86b-8eccc6181611	1	2020-10-16 11:41:30.084+08	2020-10-16 11:41:30.084+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
238c0049-a09c-40cb-bf15-77e8e1158751	1	2020-10-16 13:52:59.054+08	2020-10-16 13:52:59.054+08	b7dd781d-dba7-4228-b49f-8aee75e42625	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
8e649d83-aaba-4c63-9f92-02946a92fff1	1	2020-10-16 14:22:53.587+08	2020-10-16 14:22:53.587+08	1450b04e-214d-47b0-8e32-def5a361cc48	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
a0fc7ae8-d89f-479c-a454-f21088237c6d	1	2020-10-19 14:17:50.54+08	2020-10-19 14:17:50.54+08	8da5aeab-4a1e-4bb5-afe2-67cadfc4700a	9a1540b6-fea8-4bc0-8090-296b05f87c4a
f20ac868-25d7-4f6d-b54d-e068948a7310	1	2020-10-19 14:20:08.552+08	2020-10-19 14:20:08.552+08	eefc80f3-265d-475f-b00b-d44016522eab	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ae721f2e-dfd5-4d2a-9b62-85033317b741	1	2020-10-19 17:25:27.863+08	2020-10-20 15:15:38.857+08	f89c588a-f68a-4208-857b-555022da9f9e	80b06599-206f-411a-8965-2b4ccb6a3d59
0c5bc927-e4bd-4894-aa69-ddc2f9e9b60b	1	2020-10-23 17:03:59.949+08	2020-10-23 17:03:59.949+08	d26881e7-f69e-4b7d-9041-47009bd2c298	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7b8077a4-0e3a-4eed-ab34-d0717f7e0ad4	1	2020-10-23 17:03:59.952+08	2020-10-23 17:03:59.952+08	d26881e7-f69e-4b7d-9041-47009bd2c298	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99
95143a7c-bbd9-4b58-a1e5-acf118cb793d	1	2020-10-26 13:25:33.98+08	2020-10-26 13:25:33.98+08	f9f36adc-75b4-4140-a14e-73f8172228d7	9a1540b6-fea8-4bc0-8090-296b05f87c4a
96438e38-60bd-4a77-a047-8c1a15df5f20	1	2020-10-28 10:07:56.836+08	2020-10-28 10:07:56.836+08	ebfa9f73-9cbe-4629-9e1c-365f58c1ebc2	9a1540b6-fea8-4bc0-8090-296b05f87c4a
13eb704f-aaab-459d-911d-acd9fa5e7775	1	2020-10-29 16:40:39.798+08	2020-10-29 16:40:39.798+08	f84896ea-8908-41e9-9e30-371a39cd4261	9a1540b6-fea8-4bc0-8090-296b05f87c4a
dee1c7ea-3f0b-4008-a84f-d6ac39dc26bf	1	2020-10-30 14:32:49.864+08	2020-10-30 14:32:49.864+08	ec7fa28a-0898-4cb3-a5d0-098d568c1e69	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
4665d5ce-a0fb-461c-863c-7da4cce84972	1	2020-11-02 10:05:36.111+08	2020-11-02 10:05:36.111+08	b6f7c250-9eeb-4225-8c5e-68b766f03649	9a1540b6-fea8-4bc0-8090-296b05f87c4a
51e7373e-8b18-4003-824f-c0a386f73332	1	2020-11-02 13:44:41.98+08	2020-11-02 13:44:41.98+08	30d005dd-93a1-4c1a-ac10-8bdedf26bab4	9a1540b6-fea8-4bc0-8090-296b05f87c4a
74b044d5-7f85-47df-ac2d-6d7530f04770	1	2020-11-04 09:48:42.715+08	2020-11-04 09:48:42.715+08	f3a9238e-8d1c-4876-a81d-f2bb05755585	9a1540b6-fea8-4bc0-8090-296b05f87c4a
210fdd62-59d0-40a2-822d-edc9f6615021	1	2020-11-04 09:56:29.864+08	2020-11-04 09:56:29.864+08	e3e8ca1e-1676-4b76-96ed-131ba8516599	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
b0475fd4-5fc9-4e6d-992c-533c82f7f804	1	2020-11-04 10:06:19.407+08	2020-11-04 10:06:19.407+08	2d0ff832-a7e0-4029-94bf-d7203c1fa793	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
0e3d3a37-7895-4682-8c35-27d59bdfae11	1	2020-11-04 10:10:46.531+08	2020-11-04 10:10:46.531+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
07eec80e-4e25-40b1-b117-021f32f3af0f	1	2020-11-10 09:02:26.692+08	2020-11-10 09:02:26.692+08	c2dbdbb3-32a5-4be9-8b5a-530d8087ffe5	9a1540b6-fea8-4bc0-8090-296b05f87c4a
8ff777a4-d7db-4151-8495-ab0a86d08eb0	1	2020-11-10 09:01:05.484+08	2020-11-10 14:35:52.627+08	fb922722-9262-470f-8064-4b78234fa802	9a1540b6-fea8-4bc0-8090-296b05f87c4a
e890945f-ea10-48a2-afc1-a84a42096f27	1	2020-11-11 09:55:32.281+08	2020-11-11 09:55:32.281+08	c991c138-3b47-4a21-af81-9ba1df554176	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
fa8be449-f162-49ab-808d-7be4700b888a	1	2020-11-11 17:46:31.991+08	2020-11-11 17:46:31.991+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	cd04713a-2775-4af9-94b3-89ddeca68f9a
5959f7bf-e2f7-4596-82f1-1857bf097444	1	2020-11-16 09:26:32.444+08	2020-11-16 09:26:32.444+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
6caf6a7c-66cc-4a2d-96f0-ffe8f989d427	1	2020-09-25 08:57:37.431+08	2021-01-22 15:26:07.735+08	343d74d9-fc95-40d7-930c-e0cd01536d55	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
30d0291e-acce-4511-a468-7b15a87262e2	1	2020-09-17 16:40:25.947+08	2021-01-22 15:31:33.202+08	92520c27-c002-4a35-84f0-dae3238662ae	3dfadb0e-7608-49e1-aa43-24f7442b424a
e3b0d12c-5881-4284-9c16-a0c396f04b67	1	2020-11-16 13:54:23.267+08	2020-11-16 13:54:23.267+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	118383e6-1b61-4e15-8dee-a1a2a61b531e
ba1ad632-f452-47b6-93cb-c52336b35e05	1	2020-11-19 09:19:24.243+08	2020-11-19 09:19:24.243+08	af9ec966-1c73-4e23-bae8-5ffcb4661942	5afb303e-0963-4e23-91f7-2b41f543aaf6
5baf8af0-2d94-4e1d-8319-bb67e745f6fa	2	2020-11-24 11:13:14.743+08	2020-11-24 11:13:14.743+08	f963b588-8c55-4b9b-b455-8e7302d88408	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
814b8d71-d9f6-4d3f-906a-c1434a830aa6	1	2020-11-24 11:13:14.746+08	2020-11-24 11:13:14.746+08	f963b588-8c55-4b9b-b455-8e7302d88408	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a91c63ab-c8b0-40b3-9e9b-d01e9a977815	1	2020-11-26 10:48:57.335+08	2020-11-26 10:48:57.335+08	c02e4b7c-e6b7-4d83-969c-34059f84af1f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c9821beb-28aa-47a7-a541-24967d0e81d1	1	2020-11-26 10:57:51.662+08	2020-11-26 10:57:51.662+08	86aa83da-35f2-4247-8660-4d23b9c30a1c	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
516bd35c-8acd-4dec-bea1-ec61f54b6182	1	2020-11-27 09:56:17.672+08	2020-11-27 09:56:17.672+08	75ab7fed-fb74-48c5-8cf9-898b3fc62358	66537b16-1e7d-4823-b03e-676459f5891d
993bbe10-57d5-46e6-87d1-ee971f5cade7	1	2020-12-03 17:40:46.302+08	2020-12-03 17:40:46.302+08	085307b7-181b-4059-9e81-1cbfff8fa061	66537b16-1e7d-4823-b03e-676459f5891d
44d4ef21-b985-488f-9e4b-bfa73bc4a80e	1	2020-12-08 17:06:14.27+08	2020-12-08 17:06:14.27+08	403dcab2-df50-4fda-a92e-c2100bb9a242	9a1540b6-fea8-4bc0-8090-296b05f87c4a
a3e88944-8cb9-4ae0-85d9-d25e1cb4d78d	1	2020-12-09 13:48:35.971+08	2020-12-09 13:48:35.971+08	8001366f-40a9-4e0c-affa-d050c5eacf17	66537b16-1e7d-4823-b03e-676459f5891d
63c40633-92b9-4e0d-9230-f3163dfd7433	2	2020-12-09 13:55:26.954+08	2020-12-09 13:55:26.954+08	8001366f-40a9-4e0c-affa-d050c5eacf17	6ef0562f-3378-453f-935e-8057c95048ae
de034ad9-62e3-419a-9411-ae2b018ae160	1	2020-12-09 13:58:20.432+08	2020-12-09 13:58:20.432+08	5ab3d59e-efe3-45c3-b69d-36ec4af9fd8c	6ef0562f-3378-453f-935e-8057c95048ae
a657ade6-3b1f-4b7a-9507-bcbbc1485cd5	2	2020-12-10 15:58:14.693+08	2020-12-10 15:58:14.693+08	8c5826bc-d7e6-4506-9dab-ded01f4c2346	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
80e27ea5-5874-43f7-8f20-c298ef43108b	1	2020-12-10 15:58:14.699+08	2020-12-10 15:58:14.699+08	8c5826bc-d7e6-4506-9dab-ded01f4c2346	9a1540b6-fea8-4bc0-8090-296b05f87c4a
2dc45df9-c912-47a6-87f4-8eb1a5ee1272	1	2020-12-11 08:53:07.234+08	2020-12-11 08:53:07.234+08	19edfd93-0bd4-4c71-85c0-647971fa008a	66537b16-1e7d-4823-b03e-676459f5891d
11dcf80d-a46c-4e22-9a8f-bb593a7e28fd	1	2020-12-11 08:53:58.629+08	2020-12-11 08:53:58.629+08	7737f9b3-195f-465e-b563-1a4f509e38ce	66537b16-1e7d-4823-b03e-676459f5891d
4a234362-4626-4b36-81d4-0caa1f7c3a2c	1	2020-12-11 08:54:51.198+08	2020-12-11 08:54:51.198+08	dac7cbf1-b98a-4c95-9ff7-14b1602c494f	66537b16-1e7d-4823-b03e-676459f5891d
740161b7-4fc4-4ea8-a6e7-92e2967ca6eb	1	2020-12-11 08:56:50.536+08	2020-12-11 08:56:50.536+08	6d6210bc-a5e7-439d-b731-e6efdeada2f7	66537b16-1e7d-4823-b03e-676459f5891d
eff3ba9f-286e-46b0-9db5-b52ea848ac1f	2	2020-12-16 15:27:44.513+08	2020-12-16 15:27:44.513+08	1a190e1d-27a0-4b3a-8635-8737f24de024	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7acb204d-bb15-4ee5-894c-714cc65e4daf	1	2020-12-16 15:27:44.524+08	2020-12-16 15:27:44.524+08	1a190e1d-27a0-4b3a-8635-8737f24de024	9a1540b6-fea8-4bc0-8090-296b05f87c4a
702a3ccf-9ab6-4e19-95b9-6245c6e04333	1	2020-12-16 15:29:32.306+08	2020-12-16 15:29:32.306+08	19f735aa-e557-4795-93bf-fc5e8c57b47a	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
2e3d8e5f-92c8-4b83-9d21-aef4be9b2263	1	2020-12-16 15:35:33.637+08	2020-12-16 15:35:33.637+08	aeced422-061a-4b9f-bf4c-1e9597f5b016	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
dab5f60a-dbfc-4951-96bb-dad1810a2ad0	1	2020-12-16 15:38:50.35+08	2020-12-16 15:38:50.35+08	35ccbe8e-d5fd-462c-9b89-c1c128a9f4f9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7df12d77-8970-4fff-9f35-3b008fdb9771	2	2020-12-16 17:00:14.084+08	2020-12-16 17:00:14.084+08	4f041931-dc1f-4868-985b-e5f1d27b1d38	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
00648dca-b439-4247-b1cc-ad416b169db5	1	2020-12-16 17:00:14.089+08	2020-12-16 17:00:14.089+08	4f041931-dc1f-4868-985b-e5f1d27b1d38	9a1540b6-fea8-4bc0-8090-296b05f87c4a
433ff29e-a7c6-430b-a1e5-3a709951b9e0	1	2020-12-21 17:00:24.184+08	2020-12-21 17:00:24.184+08	167e3709-030c-4724-bbad-4060c61870bc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
9e915601-a6e0-42f9-b2bc-cf1796c48cb1	1	2020-12-21 17:30:31.216+08	2020-12-21 17:30:31.216+08	90f77fb4-1b78-4f30-b558-8026aa10f6db	9a1540b6-fea8-4bc0-8090-296b05f87c4a
1feaeb31-f479-466f-9219-95eae1bd10a5	1	2020-12-23 16:00:33.975+08	2020-12-23 16:00:33.975+08	7b536454-20a7-4c1b-bfeb-4a0f018d2673	9a1540b6-fea8-4bc0-8090-296b05f87c4a
30181893-36ba-45e6-b87f-8d8cac3d3b37	1	2020-12-24 14:19:13.342+08	2020-12-24 14:19:13.342+08	d67fea40-a63c-4087-b5fd-5e5f0c387893	9a1540b6-fea8-4bc0-8090-296b05f87c4a
318cfca2-7541-4831-898e-e01728bbd146	1	2021-01-08 17:49:03.018+08	2021-01-08 17:49:03.018+08	2d2bb5aa-7dae-4123-bf05-5cdc08d7480f	193f76a4-e706-4709-a54a-f6f08be3495c
7d84ff9a-1a34-4ad9-8aea-b297a9ed6ef5	1	2020-12-28 14:09:52.535+08	2020-12-30 17:18:49.045+08	cce5d34b-3464-4566-81e6-3ff2540af13e	3dfadb0e-7608-49e1-aa43-24f7442b424a
c99292ce-b061-45bd-9b6e-e8b245d590dc	1	2020-12-31 13:37:40.15+08	2020-12-31 13:37:40.15+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	629e35b1-4ffb-46b6-a53d-b8fb31425fe8
6aa6d215-9d88-4b12-bddf-55f7df1a9f8c	1	2021-01-04 09:20:07.81+08	2021-01-04 09:20:07.81+08	b44eeccf-0eed-4785-a539-0122bcd2a99f	34ab0b66-1ce3-4462-ad0c-520d349ca04c
7db61a3a-b4fd-491b-a05a-e4f380f2a393	1	2020-12-31 14:28:18.77+08	2021-01-06 11:32:03.093+08	c251c010-afd1-42d0-9d85-e044a6d51a8a	415b61a8-f54e-4e4b-a599-bf878220deab
c08049c6-42da-40a9-80b2-e665985b24e6	1	2020-12-31 14:26:55.465+08	2021-01-06 11:32:22.798+08	406adc2f-6e40-43fc-832a-d6982677d5e1	415b61a8-f54e-4e4b-a599-bf878220deab
a9da4397-40d0-4c10-8344-38b3959d6b40	1	2020-12-31 14:25:20.546+08	2021-01-06 11:32:32.492+08	7da4f815-e889-4b79-8b69-8fda271a954f	415b61a8-f54e-4e4b-a599-bf878220deab
79642fe3-cd97-4d4d-b183-2dbccadc1402	2	2020-12-31 14:23:47.787+08	2021-01-06 11:32:44.654+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	415b61a8-f54e-4e4b-a599-bf878220deab
d88f6fcd-dd3e-467b-8dc6-7ff0afd5ac09	2	2021-01-07 08:51:22.854+08	2021-01-07 08:51:22.854+08	2d4d2d3b-44b4-43ac-bb98-7c02fcf76152	193f76a4-e706-4709-a54a-f6f08be3495c
353a977d-4e30-402d-b68d-fdc968f0ecfd	1	2021-01-07 08:51:23.132+08	2021-01-07 08:51:23.132+08	2d4d2d3b-44b4-43ac-bb98-7c02fcf76152	3dfadb0e-7608-49e1-aa43-24f7442b424a
5eae67bd-91d8-4f16-a91d-5c3131acc7f6	1	2021-01-07 08:53:43.286+08	2021-01-07 08:53:43.286+08	daaea98a-a1a5-40c5-b34f-108d16d94b12	193f76a4-e706-4709-a54a-f6f08be3495c
3ed67224-6373-43aa-88bb-5525f307f389	1	2021-01-14 14:29:22.426+08	2021-01-14 14:29:22.426+08	27e93aa0-1ec0-40df-aa0e-de4152459a66	9a1540b6-fea8-4bc0-8090-296b05f87c4a
5ce61c17-343b-40d0-bf89-b0f98ec0655b	1	2021-01-18 12:37:46.524+08	2021-01-18 12:37:46.524+08	7d999707-8940-47f8-995e-f50b44e48ede	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
d10c20a7-bf0e-431f-8b46-af16b2dc3493	1	2021-01-18 14:02:07.846+08	2021-01-18 14:02:07.846+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
ac89a7c8-8b35-4dea-ae35-7083555aa058	1	2021-01-18 14:04:59.388+08	2021-01-18 14:04:59.388+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
25177421-56bd-4526-bb61-80bfbdac6734	1	2021-01-18 14:09:49.692+08	2021-01-18 14:09:49.692+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
37b35270-ef60-478e-86b9-af7505a103a9	1	2021-01-18 14:14:29.626+08	2021-01-18 14:14:29.626+08	e2ad2fb6-75a3-490f-82ae-eac117102885	c1b7ebc4-5a06-40c2-a231-f3fa95094a26
02a8457d-d78b-4e90-b195-aa32ecae3228	2	2020-09-25 08:57:52.891+08	2021-01-22 15:25:57.493+08	92520c27-c002-4a35-84f0-dae3238662ae	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
bcd81306-0c52-4917-9f4e-1f12b2aba1f1	1	2021-01-26 15:42:02.154+08	2021-01-26 15:42:02.154+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
e1bc079f-babd-4346-85d1-114dbaa2c21d	1	2021-01-26 15:59:08.527+08	2021-01-26 15:59:08.527+08	dadaf677-ed6c-4f61-ba61-d030f157dd14	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
638f0588-b801-4d2b-8670-ca4fdec60d41	1	2021-01-27 13:50:41.038+08	2021-01-27 13:50:41.038+08	9baef129-7240-456d-819f-081ed682b6c6	66537b16-1e7d-4823-b03e-676459f5891d
9a540453-32cf-40af-adda-95642eb383a7	1	2021-01-27 13:54:55.091+08	2021-01-27 13:54:55.091+08	1738d5bc-6a00-4ec6-813b-1ecd8ed014bd	66537b16-1e7d-4823-b03e-676459f5891d
90588043-412c-498f-9155-0685988d8bd0	1	2021-01-27 16:50:39.679+08	2021-01-27 16:50:39.679+08	b4836295-511d-4752-99b6-099f9e59ec54	66537b16-1e7d-4823-b03e-676459f5891d
65efe93f-1a17-4eb4-a179-ce76ab6c17e9	1	2021-01-27 16:52:16.887+08	2021-01-27 16:52:16.887+08	c948c019-e1f5-4a3d-a348-de60051d3e2e	66537b16-1e7d-4823-b03e-676459f5891d
ba575768-81c4-4c14-9f2d-04fa864e226d	1	2021-02-20 15:01:28.113+08	2021-02-20 15:01:28.113+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
fab87677-888e-4518-8659-53b5dfd3c6a3	1	2021-01-28 09:32:46.592+08	2021-01-28 09:32:46.592+08	998e19a5-71a8-484e-a7af-5ffe30f99e87	66537b16-1e7d-4823-b03e-676459f5891d
5576f96c-9581-4276-b739-0573a8ebf1b8	1	2021-01-28 09:45:57.6+08	2021-01-28 09:45:57.6+08	aad44a46-f5ad-4b1c-b6a4-cff40950cfba	66537b16-1e7d-4823-b03e-676459f5891d
ffc7efdf-4cd5-4f4f-92ec-3db6e058e699	1	2021-01-28 09:58:52.854+08	2021-01-28 09:58:52.854+08	10652dfa-31f2-41fa-b997-d6162cb01901	66537b16-1e7d-4823-b03e-676459f5891d
63e11cb5-cde5-4171-9f98-29bd1a2fc703	1	2021-01-29 10:12:04.668+08	2021-01-29 10:12:04.668+08	c51a8eb3-9068-456f-9922-5934de559a71	3dfadb0e-7608-49e1-aa43-24f7442b424a
2c435493-2a70-4351-87c5-98ec4c2430ba	2	2021-01-29 10:12:04.671+08	2021-01-29 10:12:04.671+08	c51a8eb3-9068-456f-9922-5934de559a71	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
01bcec7f-94a6-4e4b-aa40-0bfbc6e7a7cd	1	2021-01-29 10:20:59.591+08	2021-01-29 10:20:59.591+08	7c054865-5f77-4df5-9d1b-ed2c6f1bb27e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
edfc13ea-9d53-4359-8a5d-175794c31507	2	2021-01-29 10:23:39.205+08	2021-01-29 10:23:39.205+08	cce5d34b-3464-4566-81e6-3ff2540af13e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
754ed2aa-e632-424f-9b30-cade02417893	1	2021-01-29 10:40:05.543+08	2021-01-29 10:40:05.543+08	5ab5659c-c875-43de-a5cb-c2c09a6b738d	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b48adf9e-d73a-4eaa-9164-db7f61700a1b	1	2021-01-29 11:00:35.041+08	2021-01-29 11:00:35.041+08	a7e6bd92-16dd-49b0-a4c1-115a6c8b272f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
429a3145-8b01-4e86-b3ca-dbc5fe17a025	1	2021-01-29 11:01:29.757+08	2021-01-29 11:01:29.757+08	8f03b15b-fbb7-4bca-ae92-2230abf071b7	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6bf73ef5-add7-4fca-9109-abeff44fb7c5	1	2021-02-04 15:50:23.317+08	2021-02-04 15:50:23.317+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
d78ba7fc-eb9a-469d-b35b-b200fb48a6bb	1	2021-02-04 16:04:59.952+08	2021-02-04 16:04:59.952+08	408d0732-eb70-4420-89b3-8f5ab433528f	e88f4b90-93c9-4a17-b425-b118ce4f4695
8693f043-239f-4c5d-92af-98329ab97191	2	2021-02-04 16:04:59.956+08	2021-02-04 16:04:59.956+08	408d0732-eb70-4420-89b3-8f5ab433528f	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
6a0564cf-84b7-417f-b2d3-2d28b6c7b638	1	2021-02-04 16:07:06.782+08	2021-02-04 16:07:06.782+08	ff8195ce-78e0-4668-81bb-8f26e83411a9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7a654ff2-acea-4f2d-b306-1228a40efd06	1	2021-02-04 16:16:40.275+08	2021-02-04 16:16:40.275+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
26b345ea-524f-418a-9d6a-d49951b47485	1	2021-02-05 15:01:05.823+08	2021-02-05 15:01:05.823+08	e2ad2fb6-75a3-490f-82ae-eac117102885	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
0c3e6ef2-ff60-4ea4-a244-445fb7892e3d	1	2021-02-05 15:02:00.136+08	2021-02-05 15:02:00.136+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
b02ec007-4ee9-4359-b072-214b6ca173e8	1	2021-02-05 15:04:12.072+08	2021-02-05 15:04:12.072+08	7d999707-8940-47f8-995e-f50b44e48ede	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
f3aa671f-e62a-4ba6-ae6c-97bfcd022d22	1	2021-02-05 15:08:31.256+08	2021-02-05 15:08:31.256+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
65c99cac-65a9-4d11-ba14-78bf2cbeae96	1	2021-02-05 15:16:43.069+08	2021-02-05 15:16:43.069+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
7eeac6c1-3030-42a2-a1f5-53ade070641a	1	2021-02-05 15:20:30.013+08	2021-02-05 15:20:30.013+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
80560552-2ebd-411b-8da6-0292bc9fdd7c	1	2021-02-09 14:17:08.203+08	2021-02-09 14:17:08.203+08	b7dd781d-dba7-4228-b49f-8aee75e42625	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
ffa7ddbc-1735-46e1-b3ad-10c710cd67c9	1	2021-02-09 17:30:52.361+08	2021-02-09 17:30:52.361+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
c5e4fedb-77c1-4314-a2ab-ca98dbe14c21	1	2021-02-22 09:15:10.043+08	2021-02-22 09:15:10.043+08	c892bb1b-57aa-4b52-b1eb-79172e95a8fb	9a1540b6-fea8-4bc0-8090-296b05f87c4a
6c79ae4b-1355-4f76-b425-653185144205	1	2021-02-24 11:11:07.566+08	2021-02-24 11:11:07.566+08	5b625df3-f714-4971-94a8-625e9c8812fc	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ac468c3a-9a33-4fd5-89b2-7b2a21cd90bb	1	2021-02-24 09:24:53.45+08	2021-02-24 17:32:26.088+08	f8803e24-c7c9-4089-8f06-5a00433131b1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
738176b6-6b0f-4161-9e28-2bb76e3c2ea8	1	2021-02-24 17:38:25.384+08	2021-02-24 17:38:25.384+08	18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd	9a1540b6-fea8-4bc0-8090-296b05f87c4a
ac1b9950-2b7a-4f47-98fb-9556cd8345e2	2	2021-02-24 17:38:25.387+08	2021-02-24 17:38:25.387+08	18ab2f15-70ec-43ff-ab7c-717e4ad0c0cd	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c
\.


--
-- Data for Name: DeviceProperty; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DeviceProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "deviceMetaId", "propertyTypeId", required, "isOtherParameter") FROM stdin;
49	deviceType	设备类型	Constant	\N	\N	DTU	\N	\N	\N			2017-08-24 17:39:02.029+08	2017-08-24 17:39:02.029+08	1fbfe6ef-ffff-4bd9-936a-67d9665006be	5	t	f
52	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-08-24 20:03:54.312+08	2017-08-24 20:03:54.312+08	38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	5	t	f
2361	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-29 13:37:27.996+08	2018-03-29 13:37:27.996+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	5	t	f
50	deviceType	设备类型	Constant	\N		gateway	0					2017-08-24 17:39:38.791+08	2017-11-13 17:45:36.894+08	a1a0ce1a-3883-4148-8bd7-a94ce938e39b	5	t	f
35	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2017-08-24 15:25:01.523+08	2017-08-24 15:25:01.523+08	1fbfe6ef-ffff-4bd9-936a-67d9665006be	5	t	f
37	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2017-08-24 15:39:23.28+08	2017-08-24 15:39:23.28+08	337651d1-80e3-4b07-9e87-79d5e20547aa	5	t	f
39	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2017-08-24 15:48:10.439+08	2017-08-24 15:48:10.439+08	a1a0ce1a-3883-4148-8bd7-a94ce938e39b	5	t	f
2027	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-02 16:15:39.594+08	2018-03-02 16:15:39.594+08	ec223bfa-7244-4458-8180-4205fd31ac24	5	t	f
2103	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 15:53:54.024+08	2018-03-14 15:53:54.024+08	4d3ecec5-32b4-4d9b-aa02-a08275dd10c7	5	t	f
56	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-08-26 15:45:06.85+08	2017-08-26 15:45:06.85+08	d51cfe97-0f8a-4f38-95fb-34208b171056	5	t	f
57	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-08-26 15:45:06.854+08	2017-08-26 15:45:06.854+08	d51cfe97-0f8a-4f38-95fb-34208b171056	5	t	f
58	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-08-26 15:51:32.57+08	2017-08-26 15:51:32.57+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	5	t	f
61	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-08-26 15:59:26.882+08	2017-08-26 15:59:26.882+08	9110f259-e269-446d-afa3-798069f4534d	5	t	f
2104	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-03-14 15:53:54.028+08	2018-03-14 15:53:54.028+08	4d3ecec5-32b4-4d9b-aa02-a08275dd10c7	1	t	f
2362	K1	K1一次项系数	Variable	\N		1	16	100000000000000000000000000000000	-100000000000000000000000000000000	\N		2018-03-29 13:37:28+08	2018-03-29 13:37:28+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	2	t	f
2363	K2	K2二次项系数	Variable	\N		0	16	100000000000000000000000000000000	-100000000000000000000000000000000			2018-03-29 13:37:28.004+08	2018-03-29 13:37:28.004+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	2	t	f
65	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-08-26 16:17:23.353+08	2017-08-26 16:17:23.353+08	870242c3-963d-417d-85fa-21add06c9e0a	1	t	f
66	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-08-26 16:17:23.357+08	2017-08-26 16:17:23.357+08	870242c3-963d-417d-85fa-21add06c9e0a	5	t	f
67	id	ID	Variable	\N	\N	11011301	\N	\N	\N			2017-08-28 11:19:41+08	2017-08-28 11:19:41+08	31ec0204-1cc6-475a-bd8b-39ad4cda3a25	5	t	f
2364	Fo	Fo基准读数	Variable	\N		0	3	100000000000000000000000000000000	-100000000000000000000000000000000			2018-03-29 13:37:28.007+08	2018-03-29 13:37:28.007+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	2	t	f
2288	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 13:43:11.279+08	2018-03-26 13:43:11.279+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	5	t	f
2289	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 13:43:33.807+08	2018-03-26 13:43:33.807+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	1	t	f
51	deviceType	设备类型	Constant	\N		gateway	0					2017-08-24 17:40:09.347+08	2017-11-13 17:41:50.253+08	337651d1-80e3-4b07-9e87-79d5e20547aa	5	t	f
73	deviceType	设备型号	Constant	\N	\N	sensor	\N	\N	\N			2017-08-28 20:41:57.36+08	2017-08-28 20:41:57.36+08	193a9dcf-959d-4cd5-a186-637c11ae97a0	5	t	f
74	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-08-28 20:41:57.366+08	2017-08-28 20:41:57.366+08	193a9dcf-959d-4cd5-a186-637c11ae97a0	5	t	f
76	range	量程	Constant	\N	\N	(‐40,120),(0,100)	\N	\N	\N			2017-08-28 21:22:08.627+08	2017-08-28 21:22:08.627+08	b3f251c1-ab5e-4427-8b38-9180d6544783	5	t	f
2290	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 13:47:45.403+08	2018-03-26 13:47:45.403+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	5	t	f
79	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-08-31 16:57:12.378+08	2017-08-31 16:57:12.378+08	39dc1e20-9e5e-4776-8459-5354261926fd	5	t	f
80	channelId	通道号	Constant	\N	\N	1	\N	\N	\N			2017-08-31 16:57:12.383+08	2017-08-31 16:57:12.383+08	39dc1e20-9e5e-4776-8459-5354261926fd	1	t	f
81	range	量程	Constant	\N	\N	(‐1000,1000),(-10,100)	\N	\N	\N			2017-08-31 16:57:12.386+08	2017-08-31 16:57:12.386+08	39dc1e20-9e5e-4776-8459-5354261926fd	5	t	f
2295	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:11:36.381+08	2018-03-26 14:11:36.381+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	1	t	f
2300	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:25:34.639+08	2018-03-26 14:25:34.639+08	780ffe7d-7369-4d2f-9184-32790466f2ba	5	t	f
2365	K3	K3三次项系数	Variable	\N	\N	0	16	100000000000000000000000000000000	-100000000000000000000000000000000			2018-03-29 13:37:28.011+08	2018-03-29 13:37:28.011+08	f4976287-96c1-42a2-aedf-0d8e8ab739c5	2	t	f
72	devicetype	设备类型	Constant	\N		sensor	0					2017-08-28 20:34:21.041+08	2018-07-23 17:13:59.566+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	5	t	f
1068	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 16:18:59.708+08	2018-01-05 16:18:59.708+08	9abfc35c-6cff-489a-8257-b868954725f4	5	t	f
2534	sensortype	设备类型	Constant	\N		485	0	\N	\N	\N		2018-08-03 10:29:52.704+08	2018-08-03 10:29:52.704+08	777c9799-3abe-4eee-a583-f5e6fac01946	5	t	f
1069	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 16:18:59.71+08	2018-01-05 16:18:59.71+08	9abfc35c-6cff-489a-8257-b868954725f4	1	t	f
2686	ranges	\N	Constant	\N		-45,45	0			°		2018-12-24 11:53:26.54+08	2018-12-24 14:16:11.652+08	b92bc45a-bf9b-425f-9747-7caedf0c2784	5	t	f
2774	range	量程	Constant	\N		(-300,300)	0	\N	\N	t		2019-02-25 13:43:02.808+08	2019-02-25 13:43:02.808+08	30bfe302-d364-4325-be1f-7fef73afaf77	5	t	f
2775	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 13:43:02.812+08	2019-02-25 13:43:02.812+08	30bfe302-d364-4325-be1f-7fef73afaf77	5	t	f
102	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-02 14:31:47.81+08	2017-09-02 14:31:47.81+08	112843b4-e834-4892-9ef3-260fe3d90c24	5	t	f
103	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-02 14:47:06.963+08	2017-09-02 14:47:06.963+08	28abcb7f-eb40-406b-a798-fc280b30638e	5	t	f
104	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-02 14:47:06.967+08	2017-09-02 14:47:06.967+08	28abcb7f-eb40-406b-a798-fc280b30638e	5	t	f
105	range	量程	Constant	\N	\N	(-30,30)	\N	\N	\N	°		2017-09-02 14:47:06.97+08	2017-09-02 14:47:06.97+08	28abcb7f-eb40-406b-a798-fc280b30638e	5	t	f
106	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-02 14:59:34.598+08	2017-09-02 14:59:34.598+08	0a25e0b7-784b-46fb-8fa3-d1a99593f343	5	t	f
107	moduleId	模块号	Constant	\N	\N	1	\N	\N	\N			2017-09-02 14:59:34.602+08	2017-09-02 14:59:34.602+08	0a25e0b7-784b-46fb-8fa3-d1a99593f343	5	t	f
108	range	量程	Constant	\N	\N	(0.05,70)	\N	\N	\N	mm		2017-09-02 14:59:34.605+08	2017-09-02 14:59:34.605+08	0a25e0b7-784b-46fb-8fa3-d1a99593f343	5	t	f
54	range	量程	Constant	\N		(0.05,80)	0					2017-08-24 20:03:54.32+08	2017-11-28 15:15:36.062+08	38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	5	t	f
60	range	量程	Constant	\N		(-40,120),(0,100)	0			℃,%RH		2017-08-26 15:51:32.577+08	2017-12-14 13:54:35.286+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	5	t	f
109	range	量程	Constant	\N		 (-30,30),(-30,30),(-25,70)	0			°,°,℃		2017-09-04 09:36:21.662+08	2017-12-20 16:01:30.204+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	5	t	f
2776	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 13:43:02.815+08	2019-02-25 13:43:02.815+08	30bfe302-d364-4325-be1f-7fef73afaf77	5	t	f
2777	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 13:43:02.818+08	2019-02-25 13:43:02.818+08	30bfe302-d364-4325-be1f-7fef73afaf77	1	t	f
2778	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 13:43:02.82+08	2019-02-25 13:43:02.82+08	30bfe302-d364-4325-be1f-7fef73afaf77	1	t	f
116	range	量程	Variable	\N		(0,60),(0,360)	0			m/s,°		2017-09-04 14:12:42.538+08	2017-09-04 15:31:19.693+08	1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	5	t	f
114	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-04 14:12:42.527+08	2017-09-04 14:12:42.527+08	1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	5	t	f
115	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-04 14:12:42.533+08	2017-09-04 14:12:42.533+08	1d4b6c8a-8a37-4ba0-9612-ad63ea6f1f3a	5	t	f
2105	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 15:54:05.919+08	2018-03-14 15:54:05.919+08	28d8942e-d1ab-40ee-878a-c3b2f60da896	5	t	f
2366	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-29 18:02:08.017+08	2018-03-29 18:02:08.017+08	0beb606c-f306-4476-8526-31646c8107e5	5	t	f
111	devicetype	设备类型	Constant	\N		sensor	0					2017-09-04 09:36:21.669+08	2018-07-23 17:13:22.594+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	5	t	f
2535	sensortype	设备类型	Constant	\N		485	0	\N	\N	\N		2018-08-03 10:36:00.524+08	2018-08-03 10:36:00.524+08	5f65c5dc-c32f-4e64-b40e-97f907d7c0fd	5	t	f
124	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-04 19:04:13.379+08	2017-09-04 19:04:13.379+08	a0bf9003-9dbd-4cc7-8bea-7da81ce69f32	5	t	f
126	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-04 20:41:19.227+08	2017-09-04 20:41:19.227+08	ed599be6-4811-4a09-a065-4b29586a4c00	5	t	f
2028	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-02 17:16:41.289+08	2018-03-02 17:16:41.289+08	a812ef4d-0c77-49e6-bad2-c74c79c50e49	5	t	f
2106	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-03-14 15:54:05.921+08	2018-03-14 15:54:05.921+08	28d8942e-d1ab-40ee-878a-c3b2f60da896	1	t	f
2297	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:14:43.053+08	2018-03-26 14:14:43.053+08	d2a5375c-0240-4435-9b8f-a62372fafaca	1	t	f
131	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-05 10:54:48.275+08	2017-09-05 10:54:48.275+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	5	t	f
132	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-05 10:54:48.28+08	2017-09-05 10:54:48.28+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	5	t	f
133	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-09-05 10:54:48.283+08	2017-09-05 10:54:48.283+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	1	t	f
134	range	量程	Constant	\N	\N	(0,100)	\N	\N	\N			2017-09-05 10:54:48.286+08	2017-09-05 10:54:48.286+08	9604d366-28f8-4291-a5bd-5d049b1e90eb	5	t	f
2687	ranges	\N	Constant	\N		-15,15	0			°		2018-12-24 11:53:35.054+08	2018-12-24 14:16:26.643+08	52ae2b25-56b5-4a29-9f0b-33454ac99ff6	5	t	f
2779	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 13:43:02.823+08	2019-02-25 13:43:02.823+08	30bfe302-d364-4325-be1f-7fef73afaf77	5	t	f
139	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-06 18:47:18.586+08	2017-09-06 18:47:18.586+08	584a210b-20f2-49cf-906a-9d6b4883af09	5	t	f
140	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-06 18:47:18.589+08	2017-09-06 18:47:18.589+08	584a210b-20f2-49cf-906a-9d6b4883af09	5	t	f
2894	range	量程	Constant	\N		 (-30,30),(-30,30),(-25,70)	0	\N	\N	°,°,℃		2019-02-25 17:37:04.348+08	2019-02-25 17:37:04.348+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	5	t	f
143	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-06 19:34:37.701+08	2017-09-06 19:34:37.701+08	8e782506-4bab-4798-9e24-315107e3cc15	5	t	f
144	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-06 20:01:37.377+08	2017-09-06 20:01:37.377+08	05d70310-6689-4174-b4ae-274ab5e8f287	5	t	f
145	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-07 14:40:21.355+08	2017-09-07 14:40:21.355+08	0c5bca0d-95b8-416e-865b-1f09bb49285f	5	t	f
147	range	量程	Constant	\N		(0,180),(0,180),(-40,120)	0			°		2017-09-07 14:40:21.365+08	2017-09-07 14:40:37.029+08	0c5bca0d-95b8-416e-865b-1f09bb49285f	5	t	f
2895	devicetype	设备类型	Constant	\N		sensor	0	\N	\N			2019-02-25 17:37:04.352+08	2019-02-25 17:37:04.352+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	5	t	f
150	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-07 20:31:18.889+08	2017-09-07 20:31:18.889+08	77d3bafd-4986-4848-b3c9-dfe847c6750e	5	t	f
151	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-08 09:20:57.974+08	2017-09-08 09:20:57.974+08	f9cf9002-bdbd-458c-8534-37db6183e217	5	t	f
152	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	°		2017-09-08 17:28:38.397+08	2017-09-08 17:28:38.397+08	96870c78-2ed9-4141-9438-e9415cd6eeb8	5	t	f
2896	sensortype	传感器类型	Constant	\N		cx	0	\N	\N			2019-02-25 17:37:04.354+08	2019-02-25 17:37:04.354+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	5	t	f
2897	protocolcode	协议号	Constant	\N		1503	0	\N	\N	\N	Modbus杆式测斜协议	2019-02-25 17:37:04.357+08	2019-02-25 17:37:04.357+08	145c9d4f-4fc0-4441-a8c4-0f32b15f5018	5	t	f
2303	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:28:53.454+08	2018-03-26 14:28:53.454+08	424f45f6-916c-4383-bce4-c71153f82e63	1	t	f
157	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-11 20:33:20.863+08	2017-09-11 20:33:20.863+08	497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	5	t	f
158	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 17:44:24.7+08	2017-09-12 17:44:24.7+08	c7528fab-94f4-4110-9aaf-8964afa09c20	5	t	f
2307	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:44:49.652+08	2018-03-26 14:44:49.652+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	1	t	f
160	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 17:44:48.592+08	2017-09-12 17:44:48.592+08	003540d0-616c-4611-92c1-1cd31005eabf	5	t	f
161	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 17:57:39.3+08	2017-09-12 17:57:39.3+08	ab34de76-f758-4311-8bfc-dc7054a58ecf	5	t	f
162	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-12 17:57:39.306+08	2017-09-12 17:57:39.306+08	ab34de76-f758-4311-8bfc-dc7054a58ecf	5	t	f
163	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 18:08:25.124+08	2017-09-12 18:08:25.124+08	65bd339b-0469-4019-8c96-55a6dbc6b697	5	t	f
165	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 19:48:22.323+08	2017-09-12 19:48:22.323+08	a8a32974-fa53-4e18-a264-58c885d3c409	5	t	f
167	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-12 20:28:25.977+08	2017-09-12 20:28:25.977+08	5bc92012-60a1-48ac-840f-575cb4e94c48	5	t	f
168	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-13 09:13:35.784+08	2017-09-13 09:13:35.784+08	d523046b-7e32-486b-a1ab-cac779eb6209	5	t	f
170	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-13 10:00:10.894+08	2017-09-13 10:00:10.894+08	e833a38c-2409-474d-8d23-86ff4d45b199	5	t	f
171	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-13 10:00:10.898+08	2017-09-13 10:00:10.898+08	e833a38c-2409-474d-8d23-86ff4d45b199	5	t	f
174	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 14:34:58.943+08	2017-09-14 14:34:58.943+08	eccb6310-f340-4668-9469-3df210aa471d	5	t	f
176	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 14:41:42.389+08	2017-09-14 14:41:42.389+08	6850f742-c5b7-4984-b1ef-d01b16015eb9	5	t	f
178	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 14:47:52.179+08	2017-09-14 14:47:52.179+08	ac3a0caf-7018-44d2-9337-32c7194ec412	5	t	f
180	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 14:50:50.819+08	2017-09-14 14:50:50.819+08	a96f169e-56b9-49c8-a5cd-caade25fbf14	5	t	f
77	deviceType	设备类型	Constant	\N		sensor	0					2017-08-28 21:24:01.299+08	2017-12-14 13:56:47.454+08	b3f251c1-ab5e-4427-8b38-9180d6544783	5	t	f
2923	sensortype	设备类型	Constant	\N		485	0	\N	\N	\N		2019-03-15 14:36:33.06+08	2019-03-15 14:36:33.06+08	ce1e7a12-8f26-4f77-8610-4871a40cfe98	5	t	f
2312	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:12:19.762+08	2018-03-26 15:12:19.762+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	5	t	f
112	range	量程	Constant	\N		(-1500,1500)	0			με		2017-09-04 09:48:12.306+08	2018-01-05 11:26:25.824+08	9110f259-e269-446d-afa3-798069f4534d	5	t	f
2322	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:41:23.386+08	2018-03-26 15:41:23.386+08	37c046eb-9a0e-49b0-95fb-f0128338f381	5	t	f
3003	f0	频率初值	Variable	\N	\N	0	4	9999	-9999	Hz		2019-03-28 17:25:27.645+08	2019-03-28 17:25:27.645+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	2	t	f
2993	aqi_pre	执行前延迟-AQI	Variable	\N		25	0	600	0	百毫秒		2019-03-28 09:36:46.211+08	2019-04-02 09:57:57.972+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
181	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 14:50:50.824+08	2017-09-14 14:50:50.824+08	a96f169e-56b9-49c8-a5cd-caade25fbf14	5	t	f
182	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 14:53:06.117+08	2017-09-14 14:53:06.117+08	3415a2e9-2c44-402f-872c-f0187cef058f	5	t	f
183	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 14:53:06.122+08	2017-09-14 14:53:06.122+08	3415a2e9-2c44-402f-872c-f0187cef058f	5	t	f
184	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 17:27:01.228+08	2017-09-14 17:27:01.228+08	cdf69820-94cb-45a3-acfe-21aa83737595	5	t	f
185	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 17:27:01.232+08	2017-09-14 17:27:01.232+08	cdf69820-94cb-45a3-acfe-21aa83737595	5	t	f
186	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 19:08:55.153+08	2017-09-14 19:08:55.153+08	55d8d331-c61d-4523-886d-2d69f350cde0	5	t	f
187	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 19:08:55.158+08	2017-09-14 19:08:55.158+08	55d8d331-c61d-4523-886d-2d69f350cde0	5	t	f
188	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 19:37:28.759+08	2017-09-14 19:37:28.759+08	2078f06f-be3c-4d10-90b1-200f3bdb00ae	5	t	f
189	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 20:24:32.026+08	2017-09-14 20:24:32.026+08	92597060-2385-438d-8a9e-25fee05e4e31	5	t	f
190	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 20:24:32.03+08	2017-09-14 20:24:32.03+08	92597060-2385-438d-8a9e-25fee05e4e31	5	t	f
191	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 20:36:40.112+08	2017-09-14 20:36:40.112+08	80dbb37c-0408-4a0b-8ef5-dc1acd7c303b	5	t	f
192	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-14 20:36:40.116+08	2017-09-14 20:36:40.116+08	80dbb37c-0408-4a0b-8ef5-dc1acd7c303b	5	t	f
193	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-14 20:56:17.192+08	2017-09-14 20:56:17.192+08	fd8e5a82-2b93-4d83-9132-4666b974079d	5	t	f
194	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-16 12:22:16.738+08	2017-09-16 12:22:16.738+08	0357e07d-3afb-4d4b-b196-766688a5b2b2	5	t	f
195	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-16 14:18:31.286+08	2017-09-16 14:18:31.286+08	831ab1f7-fe76-4152-b7a0-3359bdf7c3bd	5	t	f
175	deviceType	设备类型	Constant	\N		sensor	0					2017-09-14 14:34:58.947+08	2017-09-27 10:23:49.526+08	eccb6310-f340-4668-9469-3df210aa471d	5	t	f
179	deviceType	设备类型	Constant	\N		sensor	0					2017-09-14 14:47:52.183+08	2017-09-27 10:41:41.807+08	ac3a0caf-7018-44d2-9337-32c7194ec412	5	t	f
169	deviceType	设备类型	Constant	\N		sensor	0					2017-09-13 09:13:35.788+08	2017-09-27 11:02:03.274+08	d523046b-7e32-486b-a1ab-cac779eb6209	5	t	f
166	deviceType	设备类型	Constant	\N		sensor	0					2017-09-12 19:48:22.327+08	2017-09-27 11:14:28.67+08	a8a32974-fa53-4e18-a264-58c885d3c409	5	t	f
164	deviceType	设备类型	Constant	\N		sensor	0					2017-09-12 18:08:25.127+08	2017-09-27 15:48:24.789+08	65bd339b-0469-4019-8c96-55a6dbc6b697	5	t	f
196	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-16 15:21:21.462+08	2017-09-16 15:21:21.462+08	eb1c1781-cea9-411f-8c15-39aafc8ee62c	5	t	f
197	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-16 16:10:09.783+08	2017-09-16 16:10:09.783+08	aa9f0751-4576-42b2-b09b-a6c3959955df	5	t	f
198	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-18 20:53:58.419+08	2017-09-18 20:53:58.419+08	6f16c6fa-6d60-481b-95ec-e450227fe268	5	t	f
199	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-18 21:05:59.014+08	2017-09-18 21:05:59.014+08	34e17d2c-cfa7-42a7-88d0-fc64f13f68c2	5	t	f
200	demoxx	demoxx	Variable	\N	\N	demoxx	\N	\N	\N			2017-09-19 16:23:55.258+08	2017-09-19 16:23:55.258+08	98a8fd6f-cab9-47d3-88aa-8832962c931c	5	t	f
201	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-19 20:20:53.763+08	2017-09-19 20:20:53.763+08	7e6111e8-0a68-4af8-92ae-6238b7f3c631	5	t	f
202	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-19 20:40:00.073+08	2017-09-19 20:40:00.073+08	d32b2513-a8bb-465c-aabf-0832f355ef6b	5	t	f
204	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-20 16:26:18.74+08	2017-09-20 16:26:18.74+08	c094bbbe-bc2a-4223-bba7-539edb03d3b0	5	t	f
205	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-20 16:26:18.745+08	2017-09-20 16:26:18.745+08	c094bbbe-bc2a-4223-bba7-539edb03d3b0	5	t	f
206	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-21 10:57:18.473+08	2017-09-21 10:57:18.473+08	1c210656-dc67-470f-b8c3-d653c82e3bb0	5	t	f
2367	sensortype	传感器类型	Constant	\N	\N	njd	\N	\N	\N	\N		2018-04-02 15:54:14.352+08	2018-04-02 15:54:14.352+08	1489127c-8f48-448b-a86e-1604f08894ce	5	t	f
208	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-22 17:34:24.799+08	2017-09-22 17:34:24.799+08	fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b	5	t	f
209	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-22 17:34:24.804+08	2017-09-22 17:34:24.804+08	fd3ad887-4a33-4d80-b3bb-d5d48ced0e7b	5	t	f
210	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-25 10:44:21.689+08	2017-09-25 10:44:21.689+08	d3245ff1-0781-49bd-b37c-e245a350a709	5	t	f
211	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-25 10:44:21.693+08	2017-09-25 10:44:21.693+08	d3245ff1-0781-49bd-b37c-e245a350a709	5	t	f
212	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-25 10:54:34.195+08	2017-09-25 10:54:34.195+08	3bf186e9-5049-40e4-ba57-b40d90cd1543	5	t	f
213	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-25 10:54:34.198+08	2017-09-25 10:54:34.198+08	3bf186e9-5049-40e4-ba57-b40d90cd1543	5	t	f
214	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-25 19:45:57.227+08	2017-09-25 19:45:57.227+08	6f1f679a-d9b7-4fe3-945d-8b83105284a8	5	t	f
215	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-25 19:45:57.23+08	2017-09-25 19:45:57.23+08	6f1f679a-d9b7-4fe3-945d-8b83105284a8	5	t	f
216	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-25 20:40:46.479+08	2017-09-25 20:40:46.479+08	ca7ff65b-b5a0-49f3-ad0b-6821012604ce	5	t	f
218	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-25 20:40:46.486+08	2017-09-25 20:40:46.486+08	ca7ff65b-b5a0-49f3-ad0b-6821012604ce	5	t	f
177	deviceType	设备类型	Constant	\N		sensor	0					2017-09-14 14:41:42.392+08	2017-09-27 10:23:27.487+08	6850f742-c5b7-4984-b1ef-d01b16015eb9	5	t	f
221	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:01:59.706+08	2017-09-28 09:01:59.706+08	39dc1e20-9e5e-4776-8459-5354261926fd	5	t	f
222	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:03:39.804+08	2017-09-28 09:03:39.804+08	2078f06f-be3c-4d10-90b1-200f3bdb00ae	5	t	f
223	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:05:25.752+08	2017-09-28 09:05:25.752+08	77d3bafd-4986-4848-b3c9-dfe847c6750e	5	t	f
224	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:09:12.795+08	2017-09-28 09:09:12.795+08	d32b2513-a8bb-465c-aabf-0832f355ef6b	5	t	f
226	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:14:50.548+08	2017-09-28 09:14:50.548+08	831ab1f7-fe76-4152-b7a0-3359bdf7c3bd	5	t	f
227	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-28 09:17:15.919+08	2017-09-28 09:17:15.919+08	5bc92012-60a1-48ac-840f-575cb4e94c48	5	t	f
2536	sensortype	设备类型	Constant	\N		485	0	\N	\N	\N		2018-08-03 10:41:17.521+08	2018-08-03 10:41:17.521+08	bc1228dd-0195-4fba-b21f-178b91e4cf60	5	t	f
217	channelId	通道号	Variable	\N		1	0	128	1			2017-09-25 20:40:46.483+08	2017-09-29 09:13:08.29+08	ca7ff65b-b5a0-49f3-ad0b-6821012604ce	1	t	f
231	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-09-29 09:14:52.556+08	2017-09-29 09:14:52.556+08	6f1f679a-d9b7-4fe3-945d-8b83105284a8	1	t	f
234	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-09-29 15:08:42.967+08	2017-09-29 15:08:42.967+08	be246ea1-fd75-4151-92c6-54b278d11287	5	t	f
235	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-09-29 15:08:42.974+08	2017-09-29 15:08:42.974+08	be246ea1-fd75-4151-92c6-54b278d11287	1	t	f
2688	ranges	\N	Constant	\N		-30,30	0			°		2018-12-24 15:31:37.925+08	2018-12-24 15:32:28.777+08	2202dd15-500f-45e8-a555-e90ddf24df13	5	t	f
2780	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:08:36.97+08	2019-02-25 14:08:36.97+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	5	t	f
2781	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:08:36.973+08	2019-02-25 14:08:36.973+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	5	t	f
236	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-29 15:08:42.979+08	2017-09-29 15:08:42.979+08	be246ea1-fd75-4151-92c6-54b278d11287	5	t	f
237	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-29 16:27:41.324+08	2017-09-29 16:27:41.324+08	f9cf9002-bdbd-458c-8534-37db6183e217	5	t	f
2368	sensortype	传感器类型	Constant	\N	\N	kqzl	\N	\N	\N	\N		2018-04-02 16:51:42.754+08	2018-04-02 16:51:42.754+08	1e7003bf-2cd1-4dcb-9ad9-116151f49ae6	5	t	f
239	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-29 17:06:18.88+08	2017-09-29 17:06:18.88+08	8e782506-4bab-4798-9e24-315107e3cc15	5	t	f
240	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-29 17:10:39.823+08	2017-09-29 17:10:39.823+08	05d70310-6689-4174-b4ae-274ab5e8f287	5	t	f
241	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-09-29 17:42:48.33+08	2017-09-29 17:42:48.33+08	ed599be6-4811-4a09-a065-4b29586a4c00	5	t	f
243	11111111111111111111	11111111111111111111	Variable	\N		1	32	1	1	rr	3333333333333333333	2017-09-30 11:42:38.237+08	2017-09-30 11:43:55.838+08	cbc19e42-a8ba-4a12-83f9-6ef1469df546	2	t	f
2537	account	账号	Variable	\N	\N		\N	\N	\N	\N		2018-08-09 16:03:13.77+08	2018-08-09 16:03:13.77+08	6dab819c-b584-4aea-bf13-c12a6a595abb	5	t	f
244	阿发达	阿发达你	Variable	\N	\N	阿道夫	\N	\N	\N			2017-10-07 20:50:21.686+08	2017-10-07 20:50:21.686+08	6d1f494d-6e60-4181-85ee-115ea3586c6d	5	t	f
2538	pw	密码	Variable	\N	\N		\N	\N	\N			2018-08-09 16:03:13.772+08	2018-08-09 16:03:13.772+08	6dab819c-b584-4aea-bf13-c12a6a595abb	5	t	f
2539	boxId	云盒编号	Variable	\N	\N		\N	\N	\N			2018-08-09 16:03:13.775+08	2018-08-09 16:03:13.775+08	6dab819c-b584-4aea-bf13-c12a6a595abb	5	t	f
2540	tokenUrl	tokenUrl	Variable	\N	\N		\N	\N	\N			2018-08-09 16:03:13.778+08	2018-08-09 16:03:13.778+08	6dab819c-b584-4aea-bf13-c12a6a595abb	5	t	f
2541	dataUrl	dataUrl	Variable	\N	\N		\N	\N	\N			2018-08-09 16:03:13.78+08	2018-08-09 16:03:13.78+08	6dab819c-b584-4aea-bf13-c12a6a595abb	5	t	f
252	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-10-31 15:29:07.337+08	2017-10-31 15:29:07.337+08	abb38d23-09f3-48fc-b9ee-4dfaf1db995b	5	t	f
253	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-10-31 16:29:27.939+08	2017-10-31 16:29:27.939+08	8ae3c80d-72ae-4e4f-b6e7-fd2dda6cc125	5	t	f
2029	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-05 09:35:14.849+08	2018-03-05 09:35:14.849+08	5fc4a5d5-9307-4ab0-9fb1-7f017c432911	5	t	f
256	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-01 15:38:54.2+08	2017-11-01 15:38:54.2+08	e5b27a73-2d4c-4b53-8bcd-86583097a730	5	t	f
257	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-06 11:16:45.216+08	2017-11-06 11:16:45.216+08	c52cea56-d5aa-4b14-ad9f-05fb6974e528	5	t	f
258	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-06 15:04:16.832+08	2017-11-06 15:04:16.832+08	43e2a07a-c33e-4e54-ba5e-0a948ae4ba61	5	t	f
259	deviceType		Constant	\N	\N	gateway	\N	\N	\N			2017-11-09 11:07:51.842+08	2017-11-09 11:07:51.842+08	26ceb3f3-78b3-4b0a-910b-a5bc39218370	5	t	f
260	DtuID		Variable	\N	\N	11111111	\N	\N	\N			2017-11-09 11:07:51.847+08	2017-11-09 11:07:51.847+08	26ceb3f3-78b3-4b0a-910b-a5bc39218370	5	t	f
261	SIMNum		Variable	\N	\N	13212345678	\N	\N	\N			2017-11-09 11:07:51.849+08	2017-11-09 11:07:51.849+08	26ceb3f3-78b3-4b0a-910b-a5bc39218370	5	t	f
262	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N			2017-11-13 17:18:43.722+08	2017-11-13 17:18:43.722+08	8015ec05-fd08-4afb-b018-3bc916702f96	5	t	f
263	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2017-11-13 17:19:25.873+08	2017-11-13 17:19:25.873+08	8015ec05-fd08-4afb-b018-3bc916702f96	5	t	f
264	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N			2017-11-13 17:30:34.386+08	2017-11-13 17:30:34.386+08	f8ec9655-408b-46e4-96f3-a8fcc382230a	5	t	f
265	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2017-11-13 17:31:01.354+08	2017-11-13 17:31:01.354+08	f8ec9655-408b-46e4-96f3-a8fcc382230a	5	t	f
266	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N			2017-11-13 17:31:29.958+08	2017-11-13 17:31:29.958+08	b00292b1-f8e5-46c1-808a-dff46e9557ff	5	t	f
267	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-16 13:50:55.94+08	2017-11-16 13:50:55.94+08	cff552ac-d565-4a44-8400-e0f4382ce853	5	t	f
268	range	量程	Variable	\N	\N	0，2000	\N	\N	\N		量程格式  0，1	2017-11-16 13:50:55.943+08	2017-11-16 13:50:55.943+08	cff552ac-d565-4a44-8400-e0f4382ce853	5	t	f
269	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-16 17:03:23.929+08	2017-11-16 17:03:23.929+08	f86c7d29-f504-474d-8665-d484e5c41e8a	5	t	f
271	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-17 09:45:45.988+08	2017-11-17 09:45:45.988+08	d87be87a-12ba-4e65-97ba-816bcb3e2e62	5	t	f
2689	range	量程	Constant	\N		(-40,120),(0,100)	0			m3,L/h		2018-12-25 11:22:22.508+08	2018-12-25 11:38:05.631+08	f09bd97d-d0b3-4fbc-ae36-8de97f4c64e2	5	t	f
272	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-20 16:43:00.271+08	2017-11-20 16:43:00.271+08	3f80f427-4615-44ae-b2e8-e783733d0ea5	5	t	f
273	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-21 15:57:22.499+08	2017-11-21 15:57:22.499+08	dfbedf15-8cef-4760-9cad-efaab883db3d	5	t	f
53	moduleId	模块号	Variable	\N		1	0					2017-08-24 20:03:54.316+08	2017-11-21 16:59:45.966+08	38d818a3-1e2d-42bd-af74-e6ed5fe0c8fd	5	t	f
274	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-23 10:44:01.199+08	2017-11-23 10:44:01.199+08	57bf451a-e6f5-4df5-a4a7-c2c42a46546f	5	t	f
154	moduleId	模块号	Tag	\N			0					2017-09-09 14:39:09.832+08	2017-11-23 15:36:21.984+08	ae93a369-2ef8-4e20-83d6-d2f89076b115	5	t	f
228	deviceType	设备类型	Constant	\N		sensor	0					2017-09-28 09:58:53.859+08	2017-11-23 15:39:49.106+08	ae93a369-2ef8-4e20-83d6-d2f89076b115	5	t	f
2782	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:08:36.975+08	2019-02-25 14:08:36.975+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	1	t	f
277	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-28 16:55:19.419+08	2017-11-28 16:55:19.419+08	fe65a1cd-2040-403c-bb6f-529d4063bc45	5	t	f
2783	range	量程	Constant	\N		(-400,400)	0	\N	\N	t		2019-02-25 14:08:36.977+08	2019-02-25 14:08:36.977+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	5	t	f
2784	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:08:36.98+08	2019-02-25 14:08:36.98+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	5	t	f
2785	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:08:36.982+08	2019-02-25 14:08:36.982+08	2b835f19-8eba-46b3-b3aa-affc9b36dcd1	1	t	f
280	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 09:23:59.564+08	2017-11-29 09:23:59.564+08	04cb319d-9e45-4534-8be6-5f1f4aef7740	5	t	f
281	channelId	通道号	Variable	\N	\N	1	\N	65535	1			2017-11-29 09:23:59.568+08	2017-11-29 09:23:59.568+08	04cb319d-9e45-4534-8be6-5f1f4aef7740	1	t	f
282	deviceType	设备类型	Constant	\N		sensor	0			\N		2017-11-29 11:12:26.536+08	2017-11-29 11:12:44.679+08	13126536-b6af-48d0-b43e-25144b65dd8d	5	t	f
283	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:13:11.041+08	2017-11-29 11:13:11.041+08	0c5d070d-fb83-4f78-acc0-a0bd12be6cc2	5	t	f
2898	devicetype	设备类型	Constant	\N		sensor	0	\N	\N			2019-02-25 17:37:56.49+08	2019-02-25 17:37:56.49+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	5	t	f
285	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:13:45.267+08	2017-11-29 11:13:45.267+08	f3ad3df8-e1ad-4e05-b479-185ac5ae8602	5	t	f
286	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:14:15.861+08	2017-11-29 11:14:15.861+08	e8d9a100-9650-4afc-a260-9c7bcdea9263	5	t	f
287	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:14:42.893+08	2017-11-29 11:14:42.893+08	d7912272-424d-4546-a3c1-43a24365dde0	5	t	f
289	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:15:27.589+08	2017-11-29 11:15:27.589+08	91372b00-3bf7-4eb0-9495-ad544dfb04ca	5	t	f
290	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:15:52.799+08	2017-11-29 11:15:52.799+08	0aae766a-5d82-479a-bd71-7eb1e0e4e20f	5	t	f
276	channelId	通道号	Variable	\N		1	0	255	1	\N		2017-11-25 11:58:53.232+08	2017-12-11 14:00:26.51+08	6aa982a5-d7a3-48ee-b1dc-afe4686ce796	1	t	f
275	moduleId	模块号	Variable	\N		1	0			\N		2017-11-25 11:57:48.597+08	2017-12-11 14:00:38.861+08	6aa982a5-d7a3-48ee-b1dc-afe4686ce796	5	t	f
291	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 11:16:46.848+08	2017-11-29 11:16:46.848+08	ac32d002-0463-4bc7-a307-86236e6307a7	5	t	f
298	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:20:13.867+08	2017-11-29 11:20:13.867+08	91372b00-3bf7-4eb0-9495-ad544dfb04ca	5	t	f
299	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:20:47.96+08	2017-11-29 11:20:47.96+08	0aae766a-5d82-479a-bd71-7eb1e0e4e20f	5	t	f
2924	sensortype	传感器类型	Constant	\N	\N	zd	\N	\N	\N			2019-03-15 17:00:45.47+08	2019-03-15 17:00:45.47+08	ad1ce5b5-24d5-4aa3-9125-bbb25ea24069	5	t	f
1179	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 16:26:30.152+08	2018-04-09 15:15:32.757+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	5	t	f
2925	dedc	去直流	Variable	\N	\N	false	\N	\N	\N			2019-03-15 17:00:45.474+08	2019-03-15 17:00:45.474+08	ad1ce5b5-24d5-4aa3-9125-bbb25ea24069	3	t	f
2786	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:10:59.022+08	2019-02-25 14:10:59.022+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	5	t	f
2787	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:10:59.025+08	2019-02-25 14:10:59.025+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	1	t	f
2788	range	量程	Constant	\N		(-1000,1000)	0	\N	\N	kN		2019-02-25 14:10:59.028+08	2019-02-25 14:10:59.028+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	5	t	f
2789	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:10:59.03+08	2019-02-25 14:10:59.03+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	5	t	f
2790	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:10:59.033+08	2019-02-25 14:10:59.033+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	5	t	f
2791	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:10:59.035+08	2019-02-25 14:10:59.035+08	ac1d92e7-4587-48e7-84ce-c4cd8db40687	2	t	f
2838	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:39:43.268+08	2019-02-25 15:39:43.268+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	1	t	f
2839	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:39:43.271+08	2019-02-25 15:39:43.271+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	5	t	f
2840	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:39:43.273+08	2019-02-25 15:39:43.273+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	1	t	f
2841	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:39:43.275+08	2019-02-25 15:39:43.275+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	5	t	f
2842	range	量程	Constant	\N		(0,0.4)	0	\N	\N	MPa		2019-02-25 15:39:43.278+08	2019-02-25 15:39:43.278+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	5	t	f
2843	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:39:43.28+08	2019-02-25 15:39:43.28+08	04f55cdb-e98a-4dc9-b3fc-480a9a241a02	5	t	f
2899	range	量程	Constant	\N		(-30,30),(-30,30),(-25,70)	0	\N	\N	°,°,℃		2019-02-25 17:37:56.494+08	2019-02-25 17:37:56.494+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	5	t	f
2900	protocolcode	协议号	Constant	\N		1502	0	\N	\N	\N	Modbus盒式测斜协议	2019-02-25 17:37:56.497+08	2019-02-25 17:37:56.497+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	1	t	f
2901	sensortype	传感器类型	Constant	\N		cx	0	\N	\N			2019-02-25 17:37:56.5+08	2019-02-25 17:37:56.5+08	f1b376cb-bcd6-4a6d-911e-4463d3e7c2c4	5	t	f
1182	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2018-01-05 16:26:30.16+08	2018-01-05 16:26:30.16+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	5	t	f
2988	pm100_rd	是否启用-PM100模组	Variable	\N		true	0					2019-03-28 09:27:41.148+08	2019-04-02 09:55:33.966+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	t	f
2972	pm10_st	模组类型-PM2.5,PM10	Constant	\N		pm10	0					2019-03-27 20:05:00.933+08	2019-04-02 09:58:11.951+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1331	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 11:06:18.447+08	2018-01-08 11:06:18.447+08	962c0a4a-535e-4f86-a25c-f38e3aa6f144	5	t	f
1332	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 11:06:18.449+08	2018-01-08 11:06:18.449+08	962c0a4a-535e-4f86-a25c-f38e3aa6f144	5	t	f
1333	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 11:06:18.451+08	2018-01-08 11:06:18.451+08	962c0a4a-535e-4f86-a25c-f38e3aa6f144	1	t	f
2030	channelId	通道号	Variable	\N	\N	1	\N	16	1			2018-03-05 09:35:14.853+08	2018-03-05 09:35:14.853+08	5fc4a5d5-9307-4ab0-9fb1-7f017c432911	1	t	f
2109	node	设备ID	Variable	\N	\N	1	\N	65535	1	\N		2018-03-15 13:45:07.098+08	2018-03-15 13:45:07.098+08	fa0123d0-7db7-4412-9670-53175d0c2c40	1	t	f
1760	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:49:59.762+08	2018-03-26 15:19:40.912+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	5	t	f
1442	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:27:56.76+08	2018-01-08 16:27:56.76+08	666e753c-f0b0-478d-b5f5-839117db13f9	5	t	f
1451	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 16:40:09.765+08	2018-01-08 16:40:09.765+08	947fdddf-6d80-4972-88cc-601559ca3458	5	t	f
1452	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 16:40:09.769+08	2018-01-08 16:40:09.769+08	947fdddf-6d80-4972-88cc-601559ca3458	5	t	f
1453	channelId	通道号	Variable	\N		1	0	128	1			2018-01-08 16:40:09.77+08	2018-01-08 16:40:09.77+08	947fdddf-6d80-4972-88cc-601559ca3458	1	t	f
1441	range	量程	Constant	\N		(0,600)	0			mm		2018-01-08 16:27:56.757+08	2018-01-08 16:47:50.089+08	666e753c-f0b0-478d-b5f5-839117db13f9	5	t	f
1471	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:03:46.491+08	2018-01-08 17:03:46.491+08	cb339f74-5895-4180-a0dc-a3cf12151b0b	5	t	f
1470	range	量程	Constant	\N		(-40,125)	0			℃		2018-01-08 17:03:46.486+08	2018-01-08 17:04:14.84+08	cb339f74-5895-4180-a0dc-a3cf12151b0b	5	t	f
1635	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:21:41.745+08	2018-01-16 10:21:41.745+08	42fbfa5f-4ca7-4e1d-b42f-08f4f641657a	5	t	f
1704	阿萨德	阿萨德	Variable	\N	\N	阿萨德	\N	\N	\N	123	123	2018-01-22 11:12:08.488+08	2018-01-22 11:12:08.488+08	eb9a3ca2-0c98-4af1-9e73-2a17cbe81af6	5	t	f
1759	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:49:59.757+08	2018-01-23 14:49:59.757+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	1	t	f
3004	kt	温度补偿系数	Variable	\N	\N	0	4	9999	-9999			2019-03-28 17:25:53.961+08	2019-03-28 17:25:53.961+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	2	t	f
2965	gps_pc	协议-GPS	Constant	\N		5001	0			\N		2019-03-27 20:00:19.439+08	2019-04-02 09:55:17.968+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1763	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:49:59.771+08	2018-01-23 14:49:59.771+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	5	t	f
2970	am2305_st	模组型号-AM2305	Constant	\N		am2305	0					2019-03-27 20:03:35.46+08	2019-04-02 09:55:25.232+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
292	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:18:04.367+08	2017-11-29 11:18:04.367+08	13126536-b6af-48d0-b43e-25144b65dd8d	5	t	f
2374	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-04-03 11:53:08.716+08	2018-04-03 11:53:08.716+08	00b58795-1a49-4171-b60f-a0e32a25f6f6	5	t	f
2543	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2018-08-10 16:23:43.25+08	2018-08-10 16:23:43.25+08	030c456b-e97a-42a6-93b7-a6f48fcce4a6	5	t	f
319	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-29 15:24:41.555+08	2017-11-29 15:24:41.555+08	16ca7eed-6c64-4c4b-a495-6c5f785b86cd	5	t	f
2546	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2018-08-10 17:03:21.013+08	2018-08-10 17:03:21.013+08	8cb3528e-cadf-463e-9db2-003bb899ebb6	5	t	f
2792	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:12:03.013+08	2019-02-25 14:12:03.013+08	35088e4d-f42e-4324-8237-bedb617ee489	1	t	f
321	deviceType	设备类型	Variable	\N		sensor	0					2017-11-29 15:24:41.562+08	2017-11-29 15:28:36.469+08	16ca7eed-6c64-4c4b-a495-6c5f785b86cd	5	f	f
2793	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:12:03.016+08	2019-02-25 14:12:03.016+08	35088e4d-f42e-4324-8237-bedb617ee489	5	t	f
2794	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:12:03.019+08	2019-02-25 14:12:03.019+08	35088e4d-f42e-4324-8237-bedb617ee489	1	t	f
2795	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:12:03.309+08	2019-02-25 14:12:03.309+08	35088e4d-f42e-4324-8237-bedb617ee489	5	t	f
2796	range	量程	Constant	\N		(-2000,2000)	0	\N	\N	kN		2019-02-25 14:12:03.313+08	2019-02-25 14:12:03.313+08	35088e4d-f42e-4324-8237-bedb617ee489	5	t	f
2797	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:12:03.317+08	2019-02-25 14:12:03.317+08	35088e4d-f42e-4324-8237-bedb617ee489	5	t	f
2902	deviceType	deviceType	Constant	\N		sensor	0	\N	\N	\N		2019-02-26 16:29:15.952+08	2019-02-26 16:29:15.952+08	7ac67279-f72c-4296-ba27-9b03b8c07c05	5	t	f
3005	t0	温度初值	Variable	\N	\N	0	3	999	-999	℃		2019-03-28 17:26:31.663+08	2019-03-28 17:26:31.663+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	2	t	f
2989	am2305_rd	是否启用-AM2305模组	Variable	\N		true	0					2019-03-28 09:29:51.864+08	2019-04-02 09:59:01.154+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	t	f
2110	wakeupdelay	唤醒延时	Variable	\N	\N	1	\N	65535	1	s		2018-03-15 13:49:32.804+08	2018-03-15 13:49:32.804+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	1	t	f
2111	interval	采集间隔	Variable	\N	\N	5	\N	65535	1	分		2018-03-15 13:49:32.807+08	2018-03-15 13:49:32.807+08	ee21c9a6-d51b-4f10-83cc-8c9611003cfa	1	t	f
2038	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-05 10:59:51.152+08	2018-03-05 10:59:51.152+08	f1fc4840-f3c9-4752-a703-b0bef637f3ee	5	t	f
2039	channelId	通道号	Variable	\N	\N	1	\N	16	1			2018-03-05 10:59:51.155+08	2018-03-05 10:59:51.155+08	f1fc4840-f3c9-4752-a703-b0bef637f3ee	1	t	f
2040	K	转换系数K(乘以*)	Variable	\N	\N	1	3	1000	-1000			2018-03-05 10:59:51.159+08	2018-03-05 10:59:51.159+08	f1fc4840-f3c9-4752-a703-b0bef637f3ee	2	t	f
2050	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-03-07 17:15:48.205+08	2018-03-07 17:15:48.205+08	68cb03f4-a381-4eaa-9068-d375ae3500e8	1	t	f
2051	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-07 17:15:48.209+08	2018-03-07 17:15:48.209+08	68cb03f4-a381-4eaa-9068-d375ae3500e8	5	t	f
1437	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:22:24.862+08	2018-01-08 16:22:24.862+08	22dc1e96-f05a-4752-bebf-9d3c1285dace	5	t	f
1439	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:22:25.032+08	2018-01-08 16:22:25.032+08	c53d6302-b66b-40f4-b190-4d5447180ba7	5	t	f
1438	range	量程	Constant	\N		(0,70000)	0			mm/s		2018-01-08 16:22:24.864+08	2018-01-08 16:26:54.936+08	22dc1e96-f05a-4752-bebf-9d3c1285dace	5	t	f
1440	range	量程	Constant	\N		(0,250000)	0			mm/s		2018-01-08 16:22:25.036+08	2018-01-08 16:27:12.563+08	c53d6302-b66b-40f4-b190-4d5447180ba7	5	t	f
1446	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:27:58.11+08	2018-01-08 16:27:58.11+08	8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f	5	t	f
1448	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:27:58.798+08	2018-01-08 16:27:58.798+08	03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3	5	t	f
1447	range	量程	Constant	\N		(0,54)	0			mm		2018-01-08 16:27:58.795+08	2018-01-08 16:29:05.54+08	03db4d1f-c0bf-47b0-9f10-0a0a5d6cfca3	5	t	f
1445	range	量程	Constant	\N		(0,135)	0			mm		2018-01-08 16:27:58.107+08	2018-01-08 16:29:37.626+08	8ea772de-0c69-4a35-bbbb-7e0fb97d7c2f	5	t	f
1460	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:54:47.945+08	2018-01-08 16:54:47.945+08	f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b	5	t	f
1462	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:54:48.926+08	2018-01-08 16:54:48.926+08	de0bfd26-fb8e-4f9d-8e0a-0119650952c6	5	t	f
1463	range	量程	Constant	\N		(0,50)	0			m/s		2018-01-08 16:54:48.929+08	2018-01-08 17:00:50.897+08	de0bfd26-fb8e-4f9d-8e0a-0119650952c6	5	t	f
1461	range	量程	Constant	\N		(0,75)	0			m/s		2018-01-08 16:54:47.948+08	2018-01-08 17:01:21.536+08	f446b0ec-ee0f-40bb-a6fc-9767fbd78a2b	5	t	f
2966	am2305_pc	协议-AM2305	Constant	\N		5004	0					2019-03-27 20:00:42.399+08	2019-04-02 09:59:10.704+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1643	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 16:49:43.496+08	2018-01-16 16:49:43.496+08	2dfa1f51-0e5a-4e11-a86d-f8487d602ebf	5	t	f
1648	3	\N	Variable	\N	\N		\N	\N	\N	\N		2018-01-17 13:45:21.853+08	2018-01-17 13:45:21.853+08	0df6f7cc-b408-4936-8fee-d5344c2d8ae9	5	t	f
1851	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 15:00:13.376+08	2018-03-26 16:23:40.371+08	c9eacd36-38d6-48b9-9672-e76406906ea3	5	t	f
1852	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 15:00:13.378+08	2018-01-23 15:00:13.378+08	c9eacd36-38d6-48b9-9672-e76406906ea3	1	t	f
1853	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:00:13.38+08	2018-01-23 15:00:13.38+08	c9eacd36-38d6-48b9-9672-e76406906ea3	5	t	f
293	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:18:59.412+08	2017-11-29 11:18:59.412+08	0c5d070d-fb83-4f78-acc0-a0bd12be6cc2	5	t	f
294	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:19:12.865+08	2017-11-29 11:19:12.865+08	f3ad3df8-e1ad-4e05-b479-185ac5ae8602	5	t	f
2375	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-04-03 12:41:11.904+08	2018-04-03 12:41:11.904+08	1e20c41f-4f52-4d61-94e4-ae8496163aed	5	t	f
300	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:21:02.875+08	2017-11-29 11:21:02.875+08	ac32d002-0463-4bc7-a307-86236e6307a7	5	t	f
2798	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:14:48.917+08	2019-02-25 14:14:48.917+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	5	t	f
2799	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:14:48.921+08	2019-02-25 14:14:48.921+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	1	t	f
2800	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:14:48.923+08	2019-02-25 14:14:48.923+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	5	t	f
2801	range	量程	Constant	\N		(-3000,3000)	0	\N	\N	kN		2019-02-25 14:14:48.926+08	2019-02-25 14:14:48.926+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	5	t	f
2802	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:14:48.928+08	2019-02-25 14:14:48.928+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	5	t	f
2803	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:14:48.931+08	2019-02-25 14:14:48.931+08	1b0b94f1-5fde-428d-aa1c-242e8e024809	1	t	f
2903	deviceType	deviceType	Constant	\N		sensor	0	\N	\N	\N		2019-02-26 16:30:15.713+08	2019-02-26 16:30:15.713+08	88bd8ad3-6ffd-4b0f-8768-085e0e59d92e	5	t	f
2908	K	系数	Constant	\N		0.00007520	0			mm/Hz2		2019-03-07 10:47:32.035+08	2019-03-07 14:31:13.264+08	1824bec3-15cd-498d-b2c1-b3cc804a1021	2	t	f
1342	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 11:40:11.793+08	2018-01-08 11:40:11.793+08	f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	1	t	f
2990	gps_rd	是否启用-gps模组	Variable	\N		true	0					2019-03-28 09:32:54.723+08	2019-04-02 09:58:47.641+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	t	f
1346	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 11:40:11.802+08	2018-01-08 11:40:11.802+08	f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	5	t	f
1347	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 11:40:11.805+08	2018-01-08 11:40:11.805+08	f0b38ea6-f88e-4e79-b7bb-02d09ef2cf03	5	t	f
2967	pm100_pc	协议号-PM100	Constant	\N		5003	0					2019-03-27 20:01:28.943+08	2019-04-02 09:58:54.382+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1469	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:03:46.163+08	2018-01-08 17:03:46.163+08	933a027b-e620-4a6e-8340-d10c7aa29009	5	t	f
2031	K	转换系数K(乘以*)	Variable	\N		1	3	1000	-1000			2018-03-05 09:35:14.857+08	2018-03-05 10:45:55.608+08	5fc4a5d5-9307-4ab0-9fb1-7f017c432911	2	t	f
2052	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-03-07 17:18:03.929+08	2018-03-07 17:18:03.929+08	3a8c62b6-14dc-497e-90e8-68c2160e7d08	1	t	f
2053	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-07 17:18:03.935+08	2018-03-07 17:18:03.935+08	3a8c62b6-14dc-497e-90e8-68c2160e7d08	5	t	f
1784	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:53:15.436+08	2018-03-26 15:25:08.815+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	5	t	f
1616	a	a	Constant	\N	\N	1	\N	\N	\N	\N		2018-01-09 21:37:46.45+08	2018-01-09 21:37:46.45+08	d08c2f42-3528-4b5f-9f34-04deac7051c1	1	t	f
1617	b	b	Tag	\N	\N	\N	\N	\N	\N	b		2018-01-09 21:37:46.454+08	2018-01-09 21:37:46.454+08	d08c2f42-3528-4b5f-9f34-04deac7051c1	5	t	f
2327	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:52:42.74+08	2018-03-26 15:52:42.74+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	1	t	f
2329	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:12:10.72+08	2018-03-26 16:12:10.72+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	1	t	f
1706	11	\N	Constant	\N		true	0			\N		2018-01-22 17:01:19.512+08	2018-01-22 17:09:41.335+08	b914a394-bbd8-4ff4-857e-02a2d8eb6d25	3	t	f
2333	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:21:59.585+08	2018-03-26 16:21:59.585+08	c9eacd36-38d6-48b9-9672-e76406906ea3	1	t	f
2337	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:50:28.58+08	2018-03-26 16:50:28.58+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	1	t	f
1782	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:53:15.431+08	2018-01-23 14:53:15.431+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	5	t	f
1785	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:53:15.438+08	2018-01-23 14:53:15.438+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	1	t	f
295	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:19:26.335+08	2017-11-29 11:19:26.335+08	e8d9a100-9650-4afc-a260-9c7bcdea9263	5	t	f
296	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 11:19:40.261+08	2017-11-29 11:19:40.261+08	d7912272-424d-4546-a3c1-43a24365dde0	5	t	f
358	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 18:00:44.765+08	2017-11-29 18:00:44.765+08	bd742efe-04d8-4e90-9799-dd3830baf3ca	5	t	f
360	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-30 13:55:54.589+08	2017-11-30 13:55:54.589+08	93f84dd4-087b-46ef-bdda-9db4adfdb16b	5	t	f
361	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-30 13:55:54.593+08	2017-11-30 13:55:54.593+08	93f84dd4-087b-46ef-bdda-9db4adfdb16b	5	t	f
362	deviceType	设备属性	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-30 15:14:59.474+08	2017-11-30 15:14:59.474+08	40b8c657-2644-4ce2-b490-cf61523a4012	5	t	f
323	moduleId	模块号	Constant	\N	\N	1	\N	\N	\N			2017-11-29 15:35:17.602+08	2017-11-29 15:35:17.602+08	3462227d-e989-421c-9f48-c0ae7a573b78	5	t	f
324	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-11-29 15:35:17.606+08	2017-11-29 15:35:17.606+08	3462227d-e989-421c-9f48-c0ae7a573b78	5	t	f
326	deviceType	设备类型	Constant	\N		sensor	0			\N		2017-11-29 15:40:40.998+08	2017-11-29 15:41:57.864+08	6bd546bc-55b0-4ee4-8b58-34feec8cdb6c	5	t	f
327	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 15:42:18.939+08	2017-11-29 15:42:18.939+08	6bd546bc-55b0-4ee4-8b58-34feec8cdb6c	5	t	f
329	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-11-29 15:47:20.479+08	2017-11-29 15:47:20.479+08	65f4e736-8261-40cc-b3b8-948ab0e4252e	5	t	f
331	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-11-29 15:47:20.486+08	2017-11-29 15:47:20.486+08	65f4e736-8261-40cc-b3b8-948ab0e4252e	5	t	f
332	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 15:51:55.34+08	2017-11-29 15:51:55.34+08	e015d9d3-542e-4d54-80c6-39db4ba20877	5	t	f
333	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-29 15:51:55.346+08	2017-11-29 15:51:55.346+08	e015d9d3-542e-4d54-80c6-39db4ba20877	5	t	f
335	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 15:56:44.957+08	2017-11-29 15:56:44.957+08	24b365fd-4e6e-4800-ad48-d3f082c9b2b8	5	t	f
336	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-29 15:56:44.96+08	2017-11-29 15:56:44.96+08	24b365fd-4e6e-4800-ad48-d3f082c9b2b8	5	t	f
340	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-11-29 17:32:42.15+08	2017-11-29 17:32:42.15+08	5ce1bb8e-5512-48aa-9842-c5ea7754f340	5	t	f
341	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:33:37.772+08	2017-11-29 17:33:37.772+08	b3014b29-7547-4c85-a147-7ab37d6c328f	5	t	f
342	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:37:50.908+08	2017-11-29 17:37:50.908+08	6e9cc5a0-a0ab-49f5-bf77-13164ed09055	5	t	f
344	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:40:19.273+08	2017-11-29 17:40:19.273+08	5dcdefa3-da3c-4745-828c-d97fae30d82d	5	t	f
2381	range	量程	Constant	\N		(0,0.1)	0			Mpa		2018-04-08 14:00:41.087+08	2018-04-08 14:05:25.634+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	5	t	f
346	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:43:55.673+08	2017-11-29 17:43:55.673+08	55be82a9-bf1f-4e1d-bca3-d76fc60beca3	5	t	f
350	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:49:21.408+08	2017-11-29 17:49:21.408+08	97463615-eb6e-4836-86a1-a282e935ed5d	5	t	f
348	deviceType	设备类型	Constant	\N		sensor	0			\N		2017-11-29 17:46:58.81+08	2017-11-29 17:49:38.692+08	6629f27c-b28d-400b-9355-71e81a910b2b	5	t	f
352	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:52:19.042+08	2017-11-29 17:52:19.042+08	cb9d01e5-2af8-48b2-b522-4f7ae3a9dc6e	5	t	f
2386	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:06:24.542+08	2018-04-09 14:57:23.562+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	5	t	f
354	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:55:29.419+08	2017-11-29 17:55:29.419+08	823921c0-40e3-46c6-809c-804adcf828ce	5	t	f
2385	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:06:24.541+08	2018-04-09 14:57:29.873+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	5	t	f
356	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-29 17:57:56.265+08	2017-11-29 17:57:56.265+08	2420aadc-c220-4ce6-bfe9-c21d79ce827f	5	t	f
2380	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:00:41.08+08	2018-04-09 14:57:46.415+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	5	t	f
363	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-30 15:14:59.478+08	2017-11-30 15:14:59.478+08	40b8c657-2644-4ce2-b490-cf61523a4012	5	t	f
364	range	量程	Constant	\N	\N	(0.05,3)	\N	\N	\N	m		2017-11-30 15:14:59.482+08	2017-11-30 15:14:59.482+08	40b8c657-2644-4ce2-b490-cf61523a4012	5	t	f
365	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-30 15:18:38.825+08	2017-11-30 15:18:38.825+08	e889420f-f8d0-4e0d-aab2-1f2f965e75bb	5	t	f
366	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-30 15:18:38.827+08	2017-11-30 15:18:38.827+08	e889420f-f8d0-4e0d-aab2-1f2f965e75bb	5	t	f
367	range	量程	Constant	\N	\N	(0.05,10)	\N	\N	\N	m		2017-11-30 15:18:38.829+08	2017-11-30 15:18:38.829+08	e889420f-f8d0-4e0d-aab2-1f2f965e75bb	5	t	f
368	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-11-30 15:25:27.925+08	2017-11-30 15:25:27.925+08	f5c42818-e09f-4cb7-b7cb-63b18e8829a9	5	t	f
369	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-11-30 15:25:27.929+08	2017-11-30 15:25:27.929+08	f5c42818-e09f-4cb7-b7cb-63b18e8829a9	5	t	f
370	range	量程	Variable	\N	\N	(0.05,30)	\N	\N	\N	m		2017-11-30 15:25:27.933+08	2017-11-30 15:25:27.933+08	f5c42818-e09f-4cb7-b7cb-63b18e8829a9	5	t	f
371	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-01 09:59:04.61+08	2017-12-01 09:59:04.61+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	5	t	f
372	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-01 09:59:04.613+08	2017-12-01 09:59:04.613+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	5	t	f
2379	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:00:41.076+08	2018-04-09 14:57:51.852+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	5	t	f
2378	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:00:41.072+08	2018-04-09 14:57:56.57+08	f0da34c8-bf8b-49c3-b9d0-3e72f5b2ef9d	5	t	f
2384	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:06:24.539+08	2018-04-09 14:58:20.861+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	5	t	f
374	range	量程	Constant	\N	\N	(-40,120)	\N	\N	\N	℃		2017-12-01 09:59:04.619+08	2017-12-01 09:59:04.619+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	5	t	f
2387	range	量程	Constant	\N		(0,0.2)	0			Mpa		2018-04-08 14:06:24.544+08	2018-04-08 14:06:44.709+08	cf54dd7a-2c8a-4f16-9f92-7484af585f13	5	t	f
2547	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-14 14:13:28.661+08	2018-08-14 14:13:28.661+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	5	t	f
2548	range	量程	Constant	\N	\N	(0.5,80)	\N	\N	\N	mm		2018-08-14 14:13:28.663+08	2018-08-14 14:13:28.663+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	5	t	f
2354	protocolcode	协议号	Constant	\N		1102	0					2018-03-27 11:23:08.664+08	2018-09-17 17:00:53.753+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	1	t	f
1786	range	量程	Constant	\N		(-3000,3000)	0			kN		2018-01-23 14:53:15.805+08	2021-03-02 13:55:54.254+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	5	t	f
2804	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:16:02.507+08	2019-02-25 14:16:02.507+08	80342a8c-db6f-40e6-b331-0ae1eca53138	1	t	f
2805	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:16:02.509+08	2019-02-25 14:16:02.509+08	80342a8c-db6f-40e6-b331-0ae1eca53138	5	t	f
2806	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:16:02.511+08	2019-02-25 14:16:02.511+08	80342a8c-db6f-40e6-b331-0ae1eca53138	5	t	f
2807	range	量程	Constant	\N		(-4000,4000)	0	\N	\N	KN		2019-02-25 14:16:02.513+08	2019-02-25 14:16:02.513+08	80342a8c-db6f-40e6-b331-0ae1eca53138	5	t	f
2808	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:16:02.515+08	2019-02-25 14:16:02.515+08	80342a8c-db6f-40e6-b331-0ae1eca53138	5	t	f
2809	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:16:02.517+08	2019-02-25 14:16:02.517+08	80342a8c-db6f-40e6-b331-0ae1eca53138	1	t	f
2909	f0	频率初值	Variable	\N	\N	1	12	99999	-99999	Hz		2019-03-07 10:48:31.64+08	2019-03-07 10:48:31.64+08	1824bec3-15cd-498d-b2c1-b3cc804a1021	2	t	f
2991	pm10_rd	是否启用-PM2.5,PM10模组	Variable	\N		true	0					2019-03-28 09:33:51.225+08	2019-04-02 09:58:32.088+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	t	f
2968	pm10_pc	协议-PM2.5,PM10	Constant	\N		5002	0					2019-03-27 20:01:54.802+08	2019-04-02 09:58:40.175+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1358	流出率	流出率	Variable	\N	\N		\N	\N	\N	\N		2018-01-08 12:02:17.347+08	2018-01-08 12:02:17.347+08	b1b251a9-2555-415d-996f-88df44f4df3c	5	t	f
1359	xxx	\N	Variable	\N	\N	3	\N	55	3	\N		2018-01-08 12:02:17.349+08	2018-01-08 12:02:17.349+08	b1b251a9-2555-415d-996f-88df44f4df3c	1	t	f
2035	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-05 10:52:42.571+08	2018-03-05 10:52:42.571+08	84747787-27a7-463d-bd03-9ee55d84fea0	5	t	f
2036	channelId	通道号	Variable	\N	\N	1	\N	16	1			2018-03-05 10:52:42.576+08	2018-03-05 10:52:42.576+08	84747787-27a7-463d-bd03-9ee55d84fea0	1	t	f
2037	K	转换系数K(乘以*)	Variable	\N	\N	1	3	1000	-1000			2018-03-05 10:52:42.58+08	2018-03-05 10:52:42.58+08	84747787-27a7-463d-bd03-9ee55d84fea0	2	t	f
2041	pointId	监测点ID	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-05 11:56:41.396+08	2018-03-05 11:56:41.396+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	5	t	f
2113	range	量程	Constant	\N		 (-30,30),(-30,30),(-25,70)	0			°,°,℃		2018-03-15 14:28:52.125+08	2018-03-15 14:29:01.087+08	4a0f1cd5-1e52-4ec3-8976-0b1f82031d28	5	t	f
1468	range	量程	Constant	\N		(-40,120)	0			℃		2018-01-08 17:03:46.162+08	2018-01-08 17:05:29.148+08	933a027b-e620-4a6e-8340-d10c7aa29009	5	t	f
1482	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:10:40.694+08	2018-01-08 17:10:40.694+08	a3b4fd36-dd87-463c-84af-254647a24cc5	5	t	f
1484	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:10:41.175+08	2018-01-08 17:10:41.175+08	e718c1a2-1c56-4da0-8cb3-36445c6b4f26	5	t	f
1486	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:10:41.682+08	2018-01-08 17:10:41.682+08	c7f01571-7f09-4bef-99d3-fdc2da5fcaa2	5	t	f
1485	range	量程	Constant	\N		(-30,30)	0			°		2018-01-08 17:10:41.678+08	2018-01-08 17:11:13.954+08	c7f01571-7f09-4bef-99d3-fdc2da5fcaa2	5	t	f
1483	range	量程	Constant	\N		(-30,30)	0			°		2018-01-08 17:10:41.171+08	2018-01-08 17:12:10.016+08	e718c1a2-1c56-4da0-8cb3-36445c6b4f26	5	t	f
1481	range	量程	Constant	\N		(-90,90)	0			°		2018-01-08 17:10:40.69+08	2018-01-08 17:14:51.1+08	a3b4fd36-dd87-463c-84af-254647a24cc5	5	t	f
1488	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 17:19:40.422+08	2018-01-08 17:19:40.422+08	1f3f14a2-a6d4-44a5-859b-3406794e7b37	1	t	f
1490	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 17:19:40.427+08	2018-01-08 17:19:40.427+08	1f3f14a2-a6d4-44a5-859b-3406794e7b37	5	t	f
2328	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:11:55.552+08	2018-03-26 16:11:55.552+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	5	t	f
2331	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:17:16.186+08	2018-03-26 16:17:16.186+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	1	t	f
2335	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:43:22.803+08	2018-03-26 16:43:22.803+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	1	t	f
2339	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 16:58:38.514+08	2018-03-26 16:58:38.514+08	27930598-2f6e-4932-a816-9685f17969b5	1	t	f
2341	sensortype	传感器类型	Constant	\N	\N	wsd	\N	\N	\N	\N		2018-03-26 17:26:09.472+08	2018-03-26 17:26:09.472+08	65b984f5-c294-49fa-8433-510d38416095	5	t	f
2346	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-27 10:56:54.976+08	2018-03-27 10:56:54.976+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	1	t	f
1218	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 17:40:36.059+08	2018-01-05 17:40:36.059+08	1f00228f-9138-4060-9b9b-1ae22f803af7	5	t	f
1219	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-01-05 17:40:36.062+08	2018-01-05 17:40:36.062+08	1f00228f-9138-4060-9b9b-1ae22f803af7	1	t	f
1360	自身属性01	自身属性01	Variable	\N	\N	哈哈	\N	\N	\N	A	自身属性01	2018-01-08 13:36:46.069+08	2018-01-08 13:36:46.069+08	a8add874-7ace-4c3b-a044-8d6da02a9257	5	t	f
1907	moduleId	模块号	Variable	\N		1	0			\N		2018-01-24 11:30:26.787+08	2018-03-02 15:36:31.953+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	5	t	f
2042	beginTime	初始时间	Variable	\N		20180102030405	0			\N		2018-03-06 09:58:32.457+08	2018-03-06 14:51:40.061+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	5	t	f
2119	range	量程	Constant	\N	\N	 (-30,30),(-30,30),(-25,70)	\N	\N	\N	°,°,℃		2018-03-15 14:36:49.786+08	2018-03-15 14:36:49.786+08	d52af3c0-c4b0-4091-96c6-ac3e97535f92	5	t	f
1565	version	版本	Constant	\N	\N	7.0.75	\N	\N	\N	\N	版本	2018-01-09 10:35:25.656+08	2018-01-09 10:35:25.656+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	5	t	f
1566	jdkVersion	jdk版本	Constant	\N	\N	1.8.0_102	\N	\N	\N		jdk版本	2018-01-09 10:35:25.66+08	2018-01-09 10:35:25.66+08	8f01253d-ce2a-4fa8-afd4-0fc5d5ea0812	5	t	f
2393	range	量程	Constant	\N		(0,0.3)	0			Mpa		2018-04-08 14:06:25.489+08	2018-04-08 14:07:20.708+08	624610fd-38ca-4e72-92c8-0492eb66412a	5	t	f
278	moduleId	模块号	Variable	\N		1	0			\N		2017-11-28 16:58:55.912+08	2018-01-17 17:12:38.402+08	f2c96428-649e-47e9-9b6f-e5749195cb33	5	t	f
2330	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:17:02.966+08	2018-03-26 16:17:02.966+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	5	t	f
1892	devicetype	设备类型	Constant	\N		sensor	0					2018-01-24 11:18:54.138+08	2018-08-01 09:18:17.847+08	11a0df92-8921-470b-af9c-d7593b8b1f78	5	t	f
1793	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:53:15.822+08	2018-03-26 15:26:12.687+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	5	t	f
1802	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:53:16.02+08	2018-03-26 15:35:55.094+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	5	t	f
2338	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:58:25.149+08	2018-03-26 16:58:25.149+08	27930598-2f6e-4932-a816-9685f17969b5	5	t	f
2392	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:06:25.487+08	2018-04-09 14:56:43.434+08	624610fd-38ca-4e72-92c8-0492eb66412a	5	t	f
2391	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:06:25.485+08	2018-04-09 14:56:50.091+08	624610fd-38ca-4e72-92c8-0492eb66412a	5	t	f
2390	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:06:25.483+08	2018-04-09 14:57:06.924+08	624610fd-38ca-4e72-92c8-0492eb66412a	5	t	f
1899	devicetype	设备类型	Constant	\N		sensor	0					2018-01-24 11:19:06.378+08	2018-08-01 09:17:12.041+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	5	t	f
1901	devicetype	设备类型	Constant	\N		sensor	0					2018-01-24 11:19:10.126+08	2018-08-01 09:31:24.94+08	76288807-186e-4444-a1ce-6be599aacfd2	5	t	f
2549	sensortype	传感器类型	Constant	\N	\N	cj	\N	\N	\N	\N		2018-08-14 14:14:43.467+08	2018-08-14 14:14:43.467+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	5	t	f
2550	protocolcode	协议号	Constant	\N	\N	9509	\N	\N	\N			2018-08-14 14:15:36.897+08	2018-08-14 14:15:36.897+08	0e7784d1-0cbf-46aa-b156-e3361a3251e4	5	t	f
2810	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:17:43.313+08	2019-02-25 14:17:43.313+08	b345cafa-8d58-454f-a01e-e42859545b18	5	t	f
1791	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:53:15.817+08	2018-01-23 14:53:15.817+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	5	t	f
2811	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:17:43.316+08	2019-02-25 14:17:43.316+08	b345cafa-8d58-454f-a01e-e42859545b18	1	t	f
1794	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:53:15.825+08	2018-01-23 14:53:15.825+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	1	t	f
2812	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:17:43.318+08	2019-02-25 14:17:43.318+08	b345cafa-8d58-454f-a01e-e42859545b18	5	t	f
2813	range	量程	Constant	\N		(-75,75)	0	\N	\N	kN	正值是张拉力，负值是承压力	2019-02-25 14:17:43.32+08	2019-02-25 14:17:43.32+08	b345cafa-8d58-454f-a01e-e42859545b18	5	t	f
2814	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:17:43.322+08	2019-02-25 14:17:43.322+08	b345cafa-8d58-454f-a01e-e42859545b18	5	t	f
2815	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:17:43.324+08	2019-02-25 14:17:43.324+08	b345cafa-8d58-454f-a01e-e42859545b18	1	t	f
1800	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:53:16.017+08	2018-01-23 14:53:16.017+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	5	t	f
1803	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:53:16.022+08	2018-01-23 14:53:16.022+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	1	t	f
2992	aqi_post	读取记录前延迟-AQI	Variable	\N		35	0	600	0	百毫秒		2019-03-28 09:35:59.502+08	2019-04-02 09:58:18.449+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1856	range	量程	Constant	\N		(0,0.2)	0	\N	\N	MPa		2018-01-23 15:00:13.384+08	2018-01-23 15:00:13.384+08	c9eacd36-38d6-48b9-9672-e76406906ea3	5	t	f
2910	K	系数	Constant	\N		0.0000184	0			KN/Hz2		2019-03-07 10:49:36.371+08	2019-03-07 14:31:20.984+08	a81c3314-06e2-428a-bede-88adf880bdd7	2	t	f
1804	range	量程	Constant	\N		(0,2.0)	0			MPa		2018-01-23 14:57:48.814+08	2018-01-23 15:03:10.978+08	37c046eb-9a0e-49b0-95fb-f0128338f381	5	t	f
1867	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 15:32:11.071+08	2018-01-23 15:32:11.071+08	1c332609-ad1d-4066-b0fa-67df29181432	5	t	f
2969	aqi_pc	协议-AQI	Constant	\N		5000	0					2019-03-27 20:03:05.22+08	2019-04-02 09:58:24.977+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
1881	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-24 11:10:16.237+08	2018-01-24 11:10:16.237+08	38b81b7d-bb3e-4885-aaea-6035faf20d1b	5	t	f
1891	range	量程	Constant	\N		(0,1)	0	\N	\N	MPa		2018-01-24 11:18:54.133+08	2018-01-24 11:18:54.133+08	11a0df92-8921-470b-af9c-d7593b8b1f78	5	t	f
1897	range	量程	Constant	\N		(0,0.2)	0	\N	\N	MPa		2018-01-24 11:19:06.37+08	2018-01-24 11:19:06.37+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	5	t	f
1900	range	量程	Constant	\N		(0,0.5)	0	\N	\N	MPa		2018-01-24 11:19:10.124+08	2018-01-24 11:19:10.124+08	76288807-186e-4444-a1ce-6be599aacfd2	5	t	f
1184	range	量程	Constant	\N		 (-30,30),(-30,30),(-25,70)	0	\N	\N	°,°,℃		2018-01-05 16:27:59.094+08	2018-01-05 16:27:59.094+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	5	t	f
381	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-01 15:00:04.239+08	2017-12-01 15:00:04.239+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	5	t	f
382	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-12-01 15:00:04.242+08	2017-12-01 15:00:04.242+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	1	t	f
383	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-01 15:00:04.245+08	2017-12-01 15:00:04.245+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	5	t	f
384	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-01 15:05:58.362+08	2017-12-01 15:05:58.362+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	5	t	f
385	channelId	通道号	Variable	\N	\N	1	\N	128	1			2017-12-01 15:05:58.365+08	2017-12-01 15:05:58.365+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	1	t	f
386	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-01 15:05:58.367+08	2017-12-01 15:05:58.367+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	5	t	f
387	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-04 12:57:26.175+08	2017-12-04 12:57:26.175+08	f5d141ad-ea96-4398-8712-2a802af988f8	5	t	f
388	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-04 12:57:26.178+08	2017-12-04 12:57:26.178+08	f5d141ad-ea96-4398-8712-2a802af988f8	5	t	f
389	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-04 13:47:01.15+08	2017-12-04 13:47:01.15+08	e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	5	t	f
390	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-04 13:47:01.153+08	2017-12-04 13:47:01.153+08	e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	5	t	f
391	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-04 14:33:34.396+08	2017-12-04 14:33:34.396+08	409f2510-dd44-4990-b530-096bf2bcb592	5	t	f
392	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-05 10:50:36.386+08	2017-12-05 10:50:36.386+08	b0a937d5-432e-4a49-b044-e4b66d649f52	5	t	f
393	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-05 10:50:36.39+08	2017-12-05 10:50:36.39+08	b0a937d5-432e-4a49-b044-e4b66d649f52	5	t	f
2122	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-15 16:51:58.452+08	2018-03-15 16:51:58.452+08	b55b3b15-5db9-4946-a5a9-b0d352de6a24	1	t	f
1185	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 16:27:59.098+08	2018-04-09 15:14:40.943+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	5	t	f
409	deviceType	设备类型	Constant	\N		sensor	0			\N		2017-12-06 16:09:36.049+08	2018-11-19 16:50:27.812+08	7c42d86a-5801-4ef2-94df-2b5c702ff7f5	5	t	f
399	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-06 10:37:27.501+08	2017-12-06 10:37:27.501+08	6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	5	t	f
401	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-06 10:37:27.507+08	2017-12-06 10:37:27.507+08	6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	5	t	f
402	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-06 12:00:43.64+08	2017-12-06 12:00:43.64+08	b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	5	t	f
403	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-06 12:00:43.643+08	2017-12-06 12:00:43.643+08	b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	5	t	f
404	channelId	通道号	Variable	\N	\N	\N	\N	255	1			2017-12-06 12:00:43.646+08	2017-12-06 12:00:43.646+08	b6d1b7db-4a04-40af-a1e9-ed944a65b0b8	1	t	f
405	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-06 14:12:59.659+08	2017-12-06 14:12:59.659+08	21d99b83-6a52-4465-90c4-125d8330e1c1	5	t	f
406	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-06 14:12:59.663+08	2017-12-06 14:12:59.663+08	21d99b83-6a52-4465-90c4-125d8330e1c1	5	t	f
407	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-06 15:17:54.546+08	2017-12-06 15:17:54.546+08	aa86893b-e991-4c57-94a7-b29e7349fe50	5	t	f
408	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-06 15:17:54.55+08	2017-12-06 15:17:54.55+08	aa86893b-e991-4c57-94a7-b29e7349fe50	5	t	f
411	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-07 10:21:23.693+08	2017-12-07 10:21:23.693+08	7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	5	t	f
412	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-07 10:21:57.655+08	2017-12-07 10:21:57.655+08	7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	5	t	f
413	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-07 11:43:58.706+08	2017-12-07 11:43:58.706+08	183c2cd5-5a53-4985-80aa-33a6ce2f82d4	5	t	f
414	moduleId	模块号	Variable	\N		1	0					2017-12-07 11:43:58.71+08	2017-12-07 11:44:10.009+08	183c2cd5-5a53-4985-80aa-33a6ce2f82d4	5	t	f
415	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-07 14:20:25.17+08	2017-12-07 14:20:25.17+08	4d5a3f58-0eda-4443-9dcc-c64bb1785d88	5	t	f
416	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-07 14:20:25.175+08	2017-12-07 14:20:25.175+08	4d5a3f58-0eda-4443-9dcc-c64bb1785d88	5	t	f
417	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-07 15:20:39.555+08	2017-12-07 15:20:39.555+08	5fcd559a-c3dc-4c38-acde-b4b1749b4ab3	5	t	f
418	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-07 15:20:39.567+08	2017-12-07 15:20:39.567+08	5fcd559a-c3dc-4c38-acde-b4b1749b4ab3	5	t	f
419	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 09:55:09.552+08	2017-12-08 09:55:09.552+08	ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	5	t	f
420	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 09:55:09.557+08	2017-12-08 09:55:09.557+08	ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	5	t	f
421	range	量程	Constant	\N	\N	(0.05,2)	\N	\N	\N	m		2017-12-08 14:36:20.533+08	2017-12-08 14:36:20.533+08	5bc92012-60a1-48ac-840f-575cb4e94c48	5	t	f
422	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 14:40:29.037+08	2017-12-08 14:40:29.037+08	d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	5	t	f
423	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 14:40:29.044+08	2017-12-08 14:40:29.044+08	d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	5	t	f
424	range	量程	Constant	\N		(0.2,12)	0			m		2017-12-08 14:40:29.05+08	2017-12-08 14:42:49.07+08	d2e5e59c-47f9-4eb9-98ce-c6dc6f2f0d66	5	t	f
425	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 14:49:12.904+08	2017-12-08 14:49:12.904+08	0fc23377-9f3d-4511-ab1b-8b8df0259d2f	5	t	f
426	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 14:49:12.907+08	2017-12-08 14:49:12.907+08	0fc23377-9f3d-4511-ab1b-8b8df0259d2f	5	t	f
427	range	量程	Constant	\N	\N	(0.2,12)	\N	\N	\N	m		2017-12-08 14:49:12.911+08	2017-12-08 14:49:12.911+08	0fc23377-9f3d-4511-ab1b-8b8df0259d2f	5	t	f
428	deviceType	量程	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 14:54:02.549+08	2017-12-08 14:54:02.549+08	14bab7df-524d-4a64-a618-23d4ebcc9b5e	5	t	f
429	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 14:54:02.553+08	2017-12-08 14:54:02.553+08	14bab7df-524d-4a64-a618-23d4ebcc9b5e	5	t	f
430	range	量程	Constant	\N	\N	(0.1,30)	\N	\N	\N	m		2017-12-08 14:54:02.561+08	2017-12-08 14:54:02.561+08	14bab7df-524d-4a64-a618-23d4ebcc9b5e	5	t	f
431	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 14:57:54.024+08	2017-12-08 14:57:54.024+08	efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	5	t	f
432	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 14:57:54.028+08	2017-12-08 14:57:54.028+08	efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	5	t	f
433	range	量程	Constant	\N	\N	(0.2,60)	\N	\N	\N	m		2017-12-08 14:57:54.031+08	2017-12-08 14:57:54.031+08	efcb4c3e-fc6f-447b-8f73-3fdff1d77fc6	5	t	f
434	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:02:49.636+08	2017-12-08 15:02:49.636+08	4255e295-7830-45af-ab7c-44fee1668641	5	t	f
435	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:02:49.644+08	2017-12-08 15:02:49.644+08	4255e295-7830-45af-ab7c-44fee1668641	5	t	f
436	range	量程	Constant	\N	\N	(0.05,70)	\N	\N	\N	m		2017-12-08 15:02:49.65+08	2017-12-08 15:02:49.65+08	4255e295-7830-45af-ab7c-44fee1668641	5	t	f
437	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:09:50.798+08	2017-12-08 15:09:50.798+08	ceed540f-d7a3-48bc-b8d0-e861e21499a4	5	t	f
438	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:09:50.802+08	2017-12-08 15:09:50.802+08	ceed540f-d7a3-48bc-b8d0-e861e21499a4	5	t	f
439	range	量程	Constant	\N	\N	(0.5,100)	\N	\N	\N	m		2017-12-08 15:09:50.806+08	2017-12-08 15:09:50.806+08	ceed540f-d7a3-48bc-b8d0-e861e21499a4	5	t	f
452	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:56:51.386+08	2017-12-08 15:56:51.386+08	96870c78-2ed9-4141-9438-e9415cd6eeb8	5	t	f
1189	range	量程	Constant	\N		(-30,30),(-30,30),(-25,70)	0	\N	\N	°,°,℃		2018-01-05 16:28:13.426+08	2018-01-05 16:28:13.426+08	d32eacce-7db0-4c15-b17c-f1d870389c14	5	t	f
1193	range	量程	Constant	\N		(-40,120),(0,100)	0	\N	\N	℃,%RH		2018-01-05 16:29:20.596+08	2018-01-05 16:29:20.596+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	5	t	f
2044	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-06 16:50:09.598+08	2018-03-06 16:50:09.598+08	5dced7e6-e4c2-4e43-82a2-6b994fb790b4	5	t	f
2123	moduleId	模块号	Variable	\N		1	0	\N	\N			2018-03-15 16:51:58.456+08	2018-03-15 16:51:58.456+08	b55b3b15-5db9-4946-a5a9-b0d352de6a24	5	t	f
1741	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:46:19.435+08	2018-03-26 15:05:01.903+08	5e7775c1-0766-436e-b701-b1102833b98d	5	t	f
1732	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:46:19.21+08	2018-03-26 15:05:23.792+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	5	t	f
1723	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:46:19.011+08	2018-03-26 15:05:36.285+08	90a2bc12-2214-43ff-9154-9b9212de2c10	5	t	f
2332	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:20:59.431+08	2018-03-26 16:20:59.431+08	c9eacd36-38d6-48b9-9672-e76406906ea3	5	t	f
1372	range	量程	Constant	\N		(-50,50),(0,100)	0			℃,%RH		2018-01-08 13:46:38.402+08	2018-01-08 13:52:36.611+08	2b6f224d-770e-41bc-b28b-5afbe3b213c4	5	t	f
2336	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:49:50.98+08	2018-03-26 16:49:50.98+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	5	t	f
2342	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 17:27:27.878+08	2018-03-26 17:27:27.878+08	388cca81-7338-40d3-ba1f-89ec9d5aa2f7	5	t	f
2343	sensortype	传感器类型	Constant	\N	\N	lf	\N	\N	\N	\N		2018-03-26 17:36:26.286+08	2018-03-26 17:36:26.286+08	83d8bf62-35f8-48c5-afa2-0d454cb19f70	5	t	f
1649	range	量程	Constant	\N	\N	(0,50)	\N	\N	\N	mm		2018-01-17 17:16:50.57+08	2018-01-17 17:16:50.57+08	fe65a1cd-2040-403c-bb6f-529d4063bc45	5	t	f
1712	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 14:05:00.673+08	2018-01-23 14:05:00.673+08	3eb1b2e4-ba3a-4329-a821-33a7f5bec873	5	t	f
1724	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:46:19.013+08	2018-01-23 14:46:19.013+08	90a2bc12-2214-43ff-9154-9b9212de2c10	1	t	f
1725	range	量程	Constant	\N		(-1000,1000)	0	\N	\N	kN		2018-01-23 14:46:19.015+08	2018-01-23 14:46:19.015+08	90a2bc12-2214-43ff-9154-9b9212de2c10	5	t	f
1727	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:46:19.018+08	2018-01-23 14:46:19.018+08	90a2bc12-2214-43ff-9154-9b9212de2c10	5	t	f
1733	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:46:19.212+08	2018-01-23 14:46:19.212+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	1	t	f
1736	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:46:19.218+08	2018-01-23 14:46:19.218+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	5	t	f
1742	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:46:19.436+08	2018-01-23 14:46:19.436+08	5e7775c1-0766-436e-b701-b1102833b98d	1	t	f
1745	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:46:19.441+08	2018-01-23 14:46:19.441+08	5e7775c1-0766-436e-b701-b1102833b98d	5	t	f
1734	range	量程	Constant	\N		(-2000,2000)	0			kN		2018-01-23 14:46:19.214+08	2018-01-23 14:46:58.381+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	5	t	f
1743	range	量程	Constant	\N		(-3000,3000)	0			kN		2018-01-23 14:46:19.438+08	2018-01-23 14:47:33.731+08	5e7775c1-0766-436e-b701-b1102833b98d	5	t	f
2399	range	量程	Constant	\N		(0,0.4)	0			Mpa		2018-04-08 14:06:26.136+08	2018-04-08 14:10:46.575+08	ea2cc9e5-072a-4994-a232-f79655536c64	5	t	f
2405	range	量程	Constant	\N		(0,0.6)	0			Mpa		2018-04-08 14:06:27.181+08	2018-04-08 14:12:54.509+08	7f76a800-a32e-483a-a948-919fc9e7d075	5	t	f
2411	range	量程	Constant	\N		(0,1)	0			Mpa		2018-04-08 14:06:27.706+08	2018-04-08 14:14:13.863+08	3f493145-8216-487c-b145-d58dacf9c570	5	t	f
2410	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:06:27.705+08	2018-04-09 14:53:01.579+08	3f493145-8216-487c-b145-d58dacf9c570	5	t	f
2409	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:06:27.703+08	2018-04-09 14:53:07.156+08	3f493145-8216-487c-b145-d58dacf9c570	5	t	f
2408	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:06:27.702+08	2018-04-09 14:53:13.153+08	3f493145-8216-487c-b145-d58dacf9c570	5	t	f
2404	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:06:27.18+08	2018-04-09 14:53:41.443+08	7f76a800-a32e-483a-a948-919fc9e7d075	5	t	f
2403	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:06:27.177+08	2018-04-09 14:53:47.761+08	7f76a800-a32e-483a-a948-919fc9e7d075	5	t	f
2402	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:06:27.175+08	2018-04-09 14:53:52.554+08	7f76a800-a32e-483a-a948-919fc9e7d075	5	t	f
2398	protocolcode	协议号	Constant	\N		1401	0					2018-04-08 14:06:26.133+08	2018-04-09 14:54:05.099+08	ea2cc9e5-072a-4994-a232-f79655536c64	5	t	f
2397	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-04-08 14:06:26.131+08	2018-04-09 14:54:10.953+08	ea2cc9e5-072a-4994-a232-f79655536c64	5	t	f
2396	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:06:26.127+08	2018-04-09 14:54:17.422+08	ea2cc9e5-072a-4994-a232-f79655536c64	5	t	f
3185	devType	\N	Constant	\N	\N	CDUENERGY	\N	\N	\N	\N		2019-08-03 13:11:51.084+08	2019-08-03 13:11:51.084+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	5	t	f
1194	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 16:29:20.599+08	2018-04-09 15:12:51.981+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	5	t	f
1188	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 16:28:13.423+08	2018-04-09 15:14:11.355+08	d32eacce-7db0-4c15-b17c-f1d870389c14	5	t	f
2353	sensortype	传感器类型	Constant	\N		wsd	0			\N		2018-03-27 11:22:51.948+08	2018-07-31 17:13:15.713+08	131c98fc-2216-4f0f-9cd3-581d88f9affd	5	t	f
2554	protocolcode	协议号	Constant	\N		9509	0					2018-08-14 15:32:39.148+08	2018-08-14 15:32:50.296+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	5	t	f
2551	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-14 15:32:39.142+08	2018-08-14 15:32:39.142+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	5	t	f
2552	range	量程	Constant	\N	\N	(0.5,80)	\N	\N	\N	mm		2018-08-14 15:32:39.145+08	2018-08-14 15:32:39.145+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	5	t	f
2553	sensortype	传感器类型	Constant	\N	\N	cj	\N	\N	\N			2018-08-14 15:32:39.147+08	2018-08-14 15:32:39.147+08	1c9756ed-dcf4-4156-9a43-09ce478d2038	5	t	f
2816	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:18:58.157+08	2019-02-25 14:18:58.157+08	536c5d54-6c47-4800-aecb-47219ee56fc2	5	t	f
2817	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:18:58.161+08	2019-02-25 14:18:58.161+08	536c5d54-6c47-4800-aecb-47219ee56fc2	1	t	f
2818	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:18:58.163+08	2019-02-25 14:18:58.163+08	536c5d54-6c47-4800-aecb-47219ee56fc2	5	t	f
2819	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 14:18:58.166+08	2019-02-25 14:18:58.166+08	536c5d54-6c47-4800-aecb-47219ee56fc2	1	t	f
2820	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 14:18:58.168+08	2019-02-25 14:18:58.168+08	536c5d54-6c47-4800-aecb-47219ee56fc2	5	t	f
2821	range	量程	Constant	\N		(-105,105)	0	\N	\N	kN	正值是张拉力，负值是承压力	2019-02-25 14:18:58.17+08	2019-02-25 14:18:58.17+08	536c5d54-6c47-4800-aecb-47219ee56fc2	5	t	f
2911	f0	频率初值	Variable	\N	\N	1	12	99999	-99999	Hz		2019-03-07 11:04:38.655+08	2019-03-07 11:04:38.655+08	a81c3314-06e2-428a-bede-88adf880bdd7	2	t	f
440	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-08 15:16:37.901+08	2017-12-08 15:16:37.901+08	31cb6c0b-e369-46b0-9be4-1de3737503fc	5	t	f
441	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:16:37.906+08	2017-12-08 15:16:37.906+08	31cb6c0b-e369-46b0-9be4-1de3737503fc	5	t	f
442	range	量程	Constant	\N	\N	(0.5,150)	\N	\N	\N	m		2017-12-08 15:16:37.91+08	2017-12-08 15:16:37.91+08	31cb6c0b-e369-46b0-9be4-1de3737503fc	5	t	f
1192	range	量程	Constant	\N	\N	(‐40,120),(0,100)	\N	\N	\N			2018-01-05 16:29:05.851+08	2018-01-05 16:29:05.851+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	5	t	f
1222	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-01-05 17:57:19.75+08	2018-01-05 17:57:19.75+08	0cbe0018-ac32-4dfd-ba20-7c6e9658a553	1	t	f
1223	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 17:57:19.754+08	2018-01-05 17:57:19.754+08	0cbe0018-ac32-4dfd-ba20-7c6e9658a553	5	t	f
1224	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 18:09:59.84+08	2018-01-05 18:09:59.84+08	9e56c900-b85f-4abd-b53f-3162016875ad	5	t	f
1225	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-01-05 18:09:59.847+08	2018-01-05 18:09:59.847+08	9e56c900-b85f-4abd-b53f-3162016875ad	1	t	f
1226	属性1	tt	Variable	\N	\N	4.56	2	234.5	1.0	瓦		2018-01-05 18:21:38.33+08	2018-01-05 18:21:38.33+08	42b1e83a-cc6f-4051-8187-75dab10af0b1	2	t	f
2124	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-15 16:52:12.18+08	2018-03-15 16:52:12.18+08	63429c67-5b55-4b88-998c-65d4464623c8	1	t	f
2063	wakeupdelay	唤醒延时	Variable	\N	\N	1	\N	65535	1	s		2018-03-08 19:33:59.995+08	2018-03-08 19:33:59.995+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	1	t	f
2125	moduleId	模块号	Variable	\N		1	0	\N	\N			2018-03-15 16:52:12.184+08	2018-03-15 16:52:12.184+08	63429c67-5b55-4b88-998c-65d4464623c8	5	t	f
1500	moduleId	模块号	Variable	\N		1	0			\N		2018-01-08 17:35:44.875+08	2018-03-12 16:37:58.395+08	157090bc-b53c-4ae3-94fc-4b3804ed6433	5	t	f
1496	moduleId	模块号	Variable	\N		1	0			\N		2018-01-08 17:33:37.648+08	2018-03-12 16:38:06.727+08	448efd11-ceec-4f64-93a0-ad7133e38b8d	5	t	f
1386	range	量程	Constant	\N		(0,70)	0			m/s		2018-01-08 13:55:43.528+08	2018-01-08 14:00:03.941+08	09e8eef6-6b70-4cda-84c2-a7680f7a535f	5	t	f
1392	range	量程	Constant	\N		(-40,125),(0,100)	0			℃,%RH		2018-01-08 14:10:26.915+08	2018-01-08 14:14:01.778+08	c36c08c3-4f22-474e-b748-c6c32288c802	5	t	f
2334	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 16:42:28.016+08	2018-03-26 16:42:28.016+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	5	t	f
1497	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-08 17:33:37.651+08	2018-01-08 17:33:37.651+08	448efd11-ceec-4f64-93a0-ad7133e38b8d	1	t	f
1499	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-08 17:35:44.871+08	2018-01-08 17:35:44.871+08	157090bc-b53c-4ae3-94fc-4b3804ed6433	1	t	f
1504	humiRange	湿度量程	Constant	\N	\N	(0,100)	\N	\N	\N	%		2018-01-08 18:05:01.003+08	2018-01-08 18:05:01.003+08	5f908b85-0f3a-48c0-bc83-8e191731a754	5	t	f
2340	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N	\N		2018-03-26 17:25:28.031+08	2018-03-26 17:25:28.031+08	8c2579cd-6aca-4902-a9d6-61e916a4541e	5	t	f
2344	channelId	通道号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-27 10:16:16.659+08	2018-03-27 10:16:16.659+08	4d523084-bf91-421f-bafc-f278a63c5541	5	t	f
2345	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-27 10:56:35.978+08	2018-03-27 10:56:35.978+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	5	t	f
2348	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-27 11:00:11.048+08	2018-03-27 11:00:11.048+08	362018b7-e626-4eab-a6ad-214d85cfcc03	1	t	f
1619	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-11 10:36:37.383+08	2018-01-11 10:36:37.383+08	58647986-2640-4318-902a-5ee7d04150ef	5	t	f
2349	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-27 11:10:51.423+08	2018-03-27 11:10:51.423+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	5	t	f
1710	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 13:54:59.29+08	2018-01-23 13:54:59.29+08	70ed36c0-d58f-482d-8337-fafed8a2e6ac	5	t	f
2350	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-27 11:11:16.233+08	2018-03-27 11:11:16.233+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	1	t	f
2357	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-03-27 11:27:12.758+08	2018-03-27 11:27:12.758+08	9110f259-e269-446d-afa3-798069f4534d	5	t	f
2555	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-08-15 14:38:59.653+08	2018-08-15 14:38:59.653+08	9f845f40-f7bf-4fe7-828e-8f488aff934e	5	t	f
2412	range	量程	Constant	\N		(0,10)	0			mm		2018-04-08 14:40:14.028+08	2018-04-08 15:43:21.824+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	5	t	f
2556	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-15 14:38:59.655+08	2018-08-15 14:38:59.655+08	9f845f40-f7bf-4fe7-828e-8f488aff934e	5	t	f
2416	protocolcode	协议号	Constant	\N		9102	0					2018-04-08 14:40:14.041+08	2018-04-09 14:52:04.737+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	5	t	f
2415	sensortype	传感器类型	Constant	\N		lf	0			\N		2018-04-08 14:40:14.035+08	2018-04-09 14:52:11.595+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	5	t	f
2413	devicetype	设备类型	Constant	\N		sensor	0					2018-04-08 14:40:14.031+08	2018-04-09 14:52:22.552+08	4142b1cc-3576-456b-b0e4-31e68cc16b32	5	t	f
1190	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 16:29:05.845+08	2018-04-09 15:13:13.808+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	5	t	f
2463	温湿度传感器	\N	Variable	\N	\N	\N	\N	35	1	\N		2018-04-24 15:29:24.958+08	2018-04-24 15:29:24.958+08	324eb312-14cd-4931-a6e0-f84880fb8ac5	1	t	f
2557	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-08-15 14:38:59.657+08	2018-08-15 14:38:59.657+08	9f845f40-f7bf-4fe7-828e-8f488aff934e	1	t	f
2560	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-15 14:39:57.343+08	2018-08-15 14:39:57.343+08	a99d7cc9-7afe-4415-93dd-bcdc193c5121	5	t	f
2564	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-15 17:13:27.47+08	2018-08-15 17:13:27.47+08	c1738ab8-25cd-4216-823d-0159c2d9fc82	5	t	f
2822	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:20:41.42+08	2019-02-25 14:20:41.42+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	5	t	f
2823	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2019-02-25 14:20:41.424+08	2019-02-25 14:20:41.424+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	5	t	f
2824	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2019-02-25 14:20:41.427+08	2019-02-25 14:20:41.427+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	1	t	f
2825	sensortype	设备类型	Constant	\N		zx	0	\N	\N	\N		2019-02-25 14:20:41.429+08	2019-02-25 14:20:41.429+08	1ecb51e2-e759-45ef-9792-89f34bb715d0	5	t	f
2882	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:51:46.937+08	2019-02-25 15:51:46.937+08	18b82e73-7501-445f-a72c-a8e20cf9da40	5	t	f
2883	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:51:46.94+08	2019-02-25 15:51:46.94+08	18b82e73-7501-445f-a72c-a8e20cf9da40	5	t	f
2884	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:51:46.942+08	2019-02-25 15:51:46.942+08	18b82e73-7501-445f-a72c-a8e20cf9da40	5	t	f
2885	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:51:46.944+08	2019-02-25 15:51:46.944+08	18b82e73-7501-445f-a72c-a8e20cf9da40	1	t	f
2886	range	量程	Constant	\N		(-136,136)	0	\N	\N	kN	正值是张拉力，负值是承压力	2019-02-25 15:51:46.947+08	2019-02-25 15:51:46.947+08	18b82e73-7501-445f-a72c-a8e20cf9da40	5	t	f
2887	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:51:46.949+08	2019-02-25 15:51:46.949+08	18b82e73-7501-445f-a72c-a8e20cf9da40	1	t	f
2973	aqi_st	模组类型-AQI	Constant	\N		aqi	0					2019-03-27 20:05:58.45+08	2019-04-02 09:58:04.67+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
443	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:23:44.922+08	2017-12-08 15:23:44.922+08	ea797ffb-87b5-4e0a-8da4-7f627c347b2f	5	t	f
444	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:23:44.926+08	2017-12-08 15:23:44.926+08	ea797ffb-87b5-4e0a-8da4-7f627c347b2f	5	t	f
445	range	量程	Constant	\N	\N	(0.5,200)	\N	\N	\N	m		2017-12-08 15:23:44.929+08	2017-12-08 15:23:44.929+08	ea797ffb-87b5-4e0a-8da4-7f627c347b2f	5	t	f
446	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:30:34.588+08	2017-12-08 15:30:34.588+08	8583cb29-4726-4532-9530-a5b338d3483c	5	t	f
447	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:30:34.591+08	2017-12-08 15:30:34.591+08	8583cb29-4726-4532-9530-a5b338d3483c	5	t	f
448	range	量程	Constant	\N	\N	(0.5,250)	\N	\N	\N	m		2017-12-08 15:30:34.595+08	2017-12-08 15:30:34.595+08	8583cb29-4726-4532-9530-a5b338d3483c	5	t	f
449	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-08 15:40:02.623+08	2017-12-08 15:40:02.623+08	dc5bdee9-14f3-4040-ad1c-faf008358890	5	t	f
450	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-08 15:40:02.627+08	2017-12-08 15:40:02.627+08	dc5bdee9-14f3-4040-ad1c-faf008358890	5	t	f
451	range	量程	Constant	\N	\N	(3,1000)	\N	\N	\N	m		2017-12-08 15:40:02.63+08	2017-12-08 15:40:02.63+08	dc5bdee9-14f3-4040-ad1c-faf008358890	5	t	f
453	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-11 14:01:04.75+08	2017-12-11 14:01:04.75+08	6aa982a5-d7a3-48ee-b1dc-afe4686ce796	5	t	f
454	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-11 15:27:03.017+08	2017-12-11 15:27:03.017+08	ef629030-d691-43fa-b6b4-b1465e60dace	5	t	f
455	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-12 10:23:59.561+08	2017-12-12 10:23:59.561+08	24064f03-7c7e-493b-99f2-c926717d28fc	5	t	f
457	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-12 10:23:59.567+08	2017-12-12 10:23:59.567+08	24064f03-7c7e-493b-99f2-c926717d28fc	5	t	f
458	range	量程	Constant	\N	\N	(0,10000)	\N	\N	\N	ug/m3		2017-12-12 11:37:35.296+08	2017-12-12 11:37:35.296+08	abb38d23-09f3-48fc-b9ee-4dfaf1db995b	5	t	f
459	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-12 11:55:07.954+08	2017-12-12 11:55:07.954+08	405df805-9088-45a7-b4b2-763299e0c57b	5	t	f
460	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-12 11:55:07.957+08	2017-12-12 11:55:07.957+08	405df805-9088-45a7-b4b2-763299e0c57b	5	t	f
461	range	范围	Constant	\N	\N	(0,60),(0,359.9)	\N	\N	\N	m/s,°		2017-12-12 11:55:07.961+08	2017-12-12 11:55:07.961+08	405df805-9088-45a7-b4b2-763299e0c57b	5	t	f
462	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-12 14:08:56.838+08	2017-12-12 14:08:56.838+08	2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	5	t	f
463	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-12 14:08:56.842+08	2017-12-12 14:08:56.842+08	2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	5	t	f
464	range	量程	Constant	\N	\N	(-10,50),(0,100)	\N	\N	\N	℃,%		2017-12-12 14:08:56.845+08	2017-12-12 14:08:56.845+08	2d16c6ea-ed14-4429-9fe7-88ca2e3cae4b	5	t	f
465	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-12 14:41:03.878+08	2017-12-12 14:41:03.878+08	10018134-99f1-486e-8071-dc652f44d152	5	t	f
466	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-12 14:41:03.879+08	2017-12-12 14:41:03.879+08	10018134-99f1-486e-8071-dc652f44d152	5	t	f
467	range	量程	Constant	\N	\N	(-40,120),(5,95)	\N	\N	\N	℃,%RH		2017-12-12 14:41:03.881+08	2017-12-12 14:41:03.881+08	10018134-99f1-486e-8071-dc652f44d152	5	t	f
468	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-13 13:09:16.249+08	2017-12-13 13:09:16.249+08	5cd62211-11dd-4deb-83bf-2873ae7dd42f	5	t	f
469	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-13 13:09:16.252+08	2017-12-13 13:09:16.252+08	5cd62211-11dd-4deb-83bf-2873ae7dd42f	5	t	f
470	range	量程	Constant	\N	\N	(0,50),(0,100)	\N	\N	\N	℃,%RH		2017-12-13 13:09:16.255+08	2017-12-13 13:09:16.255+08	5cd62211-11dd-4deb-83bf-2873ae7dd42f	5	t	f
471	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-13 13:21:56.931+08	2017-12-13 13:21:56.931+08	b475bf8f-00a0-457f-ad96-95b187dba62f	5	t	f
472	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-13 13:21:56.934+08	2017-12-13 13:21:56.934+08	b475bf8f-00a0-457f-ad96-95b187dba62f	5	t	f
473	range	量程	Constant	\N	\N	(-5,55),(0,100)	\N	\N	\N	℃,%RH		2017-12-13 13:21:56.939+08	2017-12-13 13:21:56.939+08	b475bf8f-00a0-457f-ad96-95b187dba62f	5	t	f
474	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-13 13:27:21.376+08	2017-12-13 13:27:21.376+08	63b7958b-9b1b-49ca-b01c-62ebe4df6376	5	t	f
475	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-13 13:27:21.379+08	2017-12-13 13:27:21.379+08	63b7958b-9b1b-49ca-b01c-62ebe4df6376	5	t	f
476	range	量程	Constant	\N	\N	(-10,60),(0,100)	\N	\N	\N	℃,%RH		2017-12-13 13:27:21.382+08	2017-12-13 13:27:21.382+08	63b7958b-9b1b-49ca-b01c-62ebe4df6376	5	t	f
477	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-13 13:40:01.327+08	2017-12-13 13:40:01.327+08	41da65aa-dd1b-4a8f-8758-13f624e45dad	5	t	f
478	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-13 13:40:01.331+08	2017-12-13 13:40:01.331+08	41da65aa-dd1b-4a8f-8758-13f624e45dad	5	t	f
479	range	量程	Constant	\N	\N	(-20,80),(0,100)	\N	\N	\N	℃,%RH		2017-12-13 13:40:01.335+08	2017-12-13 13:40:01.335+08	41da65aa-dd1b-4a8f-8758-13f624e45dad	5	t	f
480	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-13 13:46:22.568+08	2017-12-13 13:46:22.568+08	16f7e5ff-fb7a-4aa6-a701-9776f7638689	5	t	f
481	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-13 13:46:22.571+08	2017-12-13 13:46:22.571+08	16f7e5ff-fb7a-4aa6-a701-9776f7638689	5	t	f
482	range	量程	Constant	\N	\N	(-40,60),(0,100)	\N	\N	\N	℃,%RH		2017-12-13 13:46:22.575+08	2017-12-13 13:46:22.575+08	16f7e5ff-fb7a-4aa6-a701-9776f7638689	5	t	f
483	pointId	监测点ID	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-13 13:59:30.949+08	2017-12-13 13:59:30.949+08	7776a9dc-8e14-417c-a5fe-4b1dd1c869d7	5	t	f
485	112	\N	Variable	\N	\N		\N	\N	\N	\N		2017-12-13 17:37:15.188+08	2017-12-13 17:37:15.188+08	8cf5725f-9e2d-447c-b261-cc810a1ed07b	5	t	f
486	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-14 14:22:34.622+08	2017-12-14 14:22:34.622+08	61db6668-b790-47e8-9429-55bfa4f98b90	5	t	f
487	range	量程	Constant	\N	\N	(0,10000)	\N	\N	\N	ug/m3		2017-12-14 14:23:54.93+08	2017-12-14 14:23:54.93+08	61db6668-b790-47e8-9429-55bfa4f98b90	5	t	f
492	deviceType	设备类型	Constant	\N	\N	2	\N	\N	\N	\N		2017-12-14 16:55:58.288+08	2017-12-14 16:55:58.288+08	a30d283e-1af2-4531-ab6b-be1186799eea	2	t	f
493	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-14 16:55:58.291+08	2017-12-14 16:55:58.291+08	a30d283e-1af2-4531-ab6b-be1186799eea	5	t	f
494	range	量程	Constant	\N	\N	(-30,30),(-30,30)	\N	\N	\N	°,°		2017-12-14 16:55:58.295+08	2017-12-14 16:55:58.295+08	a30d283e-1af2-4531-ab6b-be1186799eea	5	t	f
489	deviceType	设备类型	Constant	\N		sensor	0			\N		2017-12-14 16:49:47.958+08	2017-12-14 16:56:17.282+08	af1cd7e8-52e1-4411-9c9a-20bc82a2786d	5	t	f
496	range	量程	Constant	\N		(0,1000)	0			mm		2017-12-18 14:15:56.101+08	2017-12-18 14:17:29.079+08	4d48086d-804a-426d-9867-0e87efdc74fe	5	t	f
497	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-18 17:23:33.752+08	2017-12-18 17:23:33.752+08	701ab719-e85b-4428-ad59-1b7adff31c56	5	t	f
495	moduleId	模块号	Variable	\N		1	0			\N		2017-12-18 10:57:40.232+08	2017-12-18 14:17:36.4+08	4d48086d-804a-426d-9867-0e87efdc74fe	5	t	f
2464	温度	\N	Variable	\N	\N	\N	6	120	0	\N		2018-05-09 11:11:01.659+08	2018-05-09 11:11:01.659+08	3b03e747-cc81-4f6e-9ccf-f828a5534096	2	t	f
484	range	量程	Constant	\N		(-30,30),(-30,30),(-25,70)	0			°,°,℃		2017-12-13 16:01:59.089+08	2017-12-20 16:02:12.061+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	5	t	f
491	range	量程	Constant	\N		(-30,30),(-30,30)	0			°,°		2017-12-14 16:49:47.964+08	2017-12-20 16:03:41.607+08	af1cd7e8-52e1-4411-9c9a-20bc82a2786d	5	t	f
498	range	沉降量程	Constant	\N		(0,1500)	0			mm		2017-12-19 13:42:28.733+08	2017-12-19 13:46:24.506+08	701ab719-e85b-4428-ad59-1b7adff31c56	5	t	f
499	tempRange	温度量程	Constant	\N	\N	(-10,30)	\N	\N	\N	℃		2017-12-19 13:50:17.216+08	2017-12-19 13:50:17.216+08	701ab719-e85b-4428-ad59-1b7adff31c56	5	t	f
500	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-19 14:21:59.044+08	2017-12-19 14:21:59.044+08	0eb7e920-0359-4b8b-b604-14bc1136e8f5	5	t	f
501	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-19 14:21:59.046+08	2017-12-19 14:21:59.046+08	0eb7e920-0359-4b8b-b604-14bc1136e8f5	5	t	f
502	range	量程	Constant	\N	\N	(0.1,1000)	\N	\N	\N	NTU		2017-12-19 14:21:59.049+08	2017-12-19 14:21:59.049+08	0eb7e920-0359-4b8b-b604-14bc1136e8f5	5	t	f
503	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-19 17:47:35.447+08	2017-12-19 17:47:35.447+08	235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	5	t	f
504	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-19 17:47:35.453+08	2017-12-19 17:47:35.453+08	235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	5	t	f
505	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-19 17:47:35.457+08	2017-12-19 17:47:35.457+08	235b7fe6-cf6f-4cf4-8d40-a3103cc0fba7	1	t	f
2132	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-19 14:57:03.378+08	2018-03-19 14:57:03.378+08	717279c9-81b5-4bfe-8dd3-906297d70e41	5	t	f
2159	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-22 09:59:58.372+08	2018-03-22 09:59:58.372+08	10f69514-4a4b-4ecd-a318-f8bf0c81a965	1	t	f
510	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-19 17:58:52.296+08	2017-12-19 17:58:52.296+08	dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	5	t	f
511	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-19 17:58:52.3+08	2017-12-19 17:58:52.3+08	dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	1	t	f
2347	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-27 10:59:53.476+08	2018-03-27 10:59:53.476+08	362018b7-e626-4eab-a6ad-214d85cfcc03	5	t	f
516	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 09:11:42.461+08	2017-12-20 09:11:42.461+08	6039a6d8-af54-411e-a520-451b20b6d089	5	t	f
517	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 09:11:42.464+08	2017-12-20 09:11:42.464+08	6039a6d8-af54-411e-a520-451b20b6d089	1	t	f
2358	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-27 11:28:14.204+08	2018-03-27 11:28:14.204+08	9110f259-e269-446d-afa3-798069f4534d	1	t	f
522	range	量程	Constant	\N		(0,5)	0			m		2017-12-20 11:47:41.558+08	2017-12-20 11:55:44.058+08	93f84dd4-087b-46ef-bdda-9db4adfdb16b	5	t	f
541	range	量程	Constant	\N	\N	(-30,30),(-30,30),(-20,80)	\N	\N	\N	°,°,℃		2017-12-20 15:13:11.457+08	2017-12-20 15:13:11.457+08	f5d141ad-ea96-4398-8712-2a802af988f8	5	t	f
523	range	量程	Constant	\N		(-20,60)	0			℃		2017-12-20 11:59:23.464+08	2017-12-20 11:59:44.026+08	1cdf6eb6-fcd9-4346-992d-6ddc41b956cf	5	t	f
524	range	量程	Constant	\N	\N	(0,1000)	\N	\N	\N	ug/m3		2017-12-20 13:44:01.553+08	2017-12-20 13:44:01.553+08	2f8c4ab2-42a9-44d8-bd3d-cfa9d1f55252	5	t	f
525	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 13:51:02.587+08	2017-12-20 13:51:02.587+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	5	t	f
526	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 13:51:02.59+08	2017-12-20 13:51:02.59+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	5	t	f
527	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 13:51:02.593+08	2017-12-20 13:51:02.593+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	1	t	f
528	range	量程	Constant	\N	\N	(0,2000)	\N	\N	\N	ug/m3		2017-12-20 13:51:02.595+08	2017-12-20 13:51:02.595+08	5e96e066-3520-443f-80a4-9a3a1a7badd6	5	t	f
529	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-20 13:59:41.27+08	2017-12-20 13:59:41.27+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	5	t	f
530	channelID	通道号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 13:59:41.274+08	2017-12-20 13:59:41.274+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	5	t	f
531	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-20 13:59:41.277+08	2017-12-20 13:59:41.277+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	5	t	f
532	range	量程	Constant	\N	\N	(0,50)	\N	\N	\N	ppm		2017-12-20 13:59:41.28+08	2017-12-20 13:59:41.28+08	ac8a15b2-1daa-48ce-b77f-52e2429c66bd	5	t	f
533	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 14:03:22.696+08	2017-12-20 14:03:22.696+08	676795c3-0d71-441d-aa0e-62b82dff8193	5	t	f
534	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 14:03:22.699+08	2017-12-20 14:03:22.699+08	676795c3-0d71-441d-aa0e-62b82dff8193	5	t	f
536	range	量程	Constant	\N	\N	(0,500)	\N	\N	\N	ppb		2017-12-20 14:03:22.709+08	2017-12-20 14:03:22.709+08	676795c3-0d71-441d-aa0e-62b82dff8193	5	t	f
540	range	量程	Constant	\N		(0,200)	0			mm		2017-12-20 14:30:07.225+08	2018-12-07 16:51:12.746+08	14f67669-6cec-42c0-a7ca-4b60950ec7b5	5	t	f
535	channelId	通道号	Variable	\N		1	0	255	1			2017-12-20 14:03:22.704+08	2017-12-20 14:04:05.097+08	676795c3-0d71-441d-aa0e-62b82dff8193	1	t	f
538	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 14:30:07.218+08	2017-12-20 14:30:07.218+08	14f67669-6cec-42c0-a7ca-4b60950ec7b5	5	t	f
539	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 14:30:07.222+08	2017-12-20 14:30:07.222+08	14f67669-6cec-42c0-a7ca-4b60950ec7b5	5	t	f
537	range	量程	Constant	\N		(0,100),(-20,80)	0			mm,℃		2017-12-20 14:27:53.873+08	2017-12-20 15:18:35.224+08	e08c86d5-195d-4cf6-a1a5-1cfd113ddd52	5	t	f
542	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 15:25:01.24+08	2017-12-20 15:25:01.24+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	5	t	f
543	range	量程	Constant	\N	\N	(0,500)	\N	\N	\N	ppb		2017-12-20 15:25:01.245+08	2017-12-20 15:25:01.245+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	5	t	f
544	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 15:25:01.251+08	2017-12-20 15:25:01.251+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	5	t	f
545	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 15:25:01.255+08	2017-12-20 15:25:01.255+08	6bf32a53-c1d4-4014-b0b9-da1af43bda76	1	t	f
546	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 15:39:19.359+08	2017-12-20 15:39:19.359+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	5	t	f
547	range	量程	Constant	\N	\N	(0,500)	\N	\N	\N	ppb		2017-12-20 15:39:19.364+08	2017-12-20 15:39:19.364+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	5	t	f
548	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 15:39:19.369+08	2017-12-20 15:39:19.369+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	5	t	f
549	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 15:39:19.374+08	2017-12-20 15:39:19.374+08	ad41eeec-8dff-4cbb-9a3a-8d42db92bca8	1	t	f
550	temp	温度	Variable	\N	\N	\N	2	100	-30	℃		2017-12-20 15:39:27.006+08	2017-12-20 15:39:27.006+08	cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	2	t	f
551	humi	湿度	Variable	\N	\N	\N	2	100	0	%		2017-12-20 15:39:27.01+08	2017-12-20 15:39:27.01+08	cd5e889f-775b-446c-9ffe-e2d8eeceaaa0	2	t	f
373	channel	通.道.号	Variable	\N		1	0	8	1			2017-12-01 09:59:04.616+08	2018-04-08 18:16:53.087+08	22d007b2-5200-4bf6-85dc-c755a7a75bcf	1	t	f
2561	deviceType	deviceType	Constant	\N		sensor	0	\N	\N	\N		2018-08-15 14:40:39.293+08	2018-08-15 14:40:39.293+08	b0c20a76-7e51-479c-9837-1516be5a1567	5	t	f
2568	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-17 11:33:00.289+08	2018-08-17 11:33:00.289+08	df1112e3-a161-4260-850f-8f6644389623	5	t	f
2826	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:21:57.07+08	2019-02-25 14:21:57.07+08	d26842d0-7685-4eec-869d-160b023932b9	5	t	f
2827	range	量程	Constant	\N		(-3000,3000)	0	\N	\N	με		2019-02-25 14:21:57.073+08	2019-02-25 14:21:57.073+08	d26842d0-7685-4eec-869d-160b023932b9	5	t	f
2828	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:21:57.075+08	2019-02-25 14:21:57.075+08	d26842d0-7685-4eec-869d-160b023932b9	1	t	f
2829	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-25 14:21:57.08+08	2019-02-25 14:21:57.08+08	d26842d0-7685-4eec-869d-160b023932b9	5	t	f
552	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 15:44:31.435+08	2017-12-20 15:44:31.435+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	5	t	f
553	range	量程	Constant	\N	\N	(0,100)	\N	\N	\N	%RH		2017-12-20 15:44:31.44+08	2017-12-20 15:44:31.44+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	5	t	f
554	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 15:44:31.444+08	2017-12-20 15:44:31.444+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	5	t	f
555	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 15:44:31.447+08	2017-12-20 15:44:31.447+08	3da31fde-9ea8-406f-9a1b-4a9932dbc2df	1	t	f
556	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-20 15:48:48.787+08	2017-12-20 15:48:48.787+08	466241f9-ceea-4552-b9c6-114413124018	5	t	f
557	range	量程	Constant	\N	\N	(0,20)	\N	\N	\N	ppm		2017-12-20 15:48:48.79+08	2017-12-20 15:48:48.79+08	466241f9-ceea-4552-b9c6-114413124018	5	t	f
558	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-20 15:48:48.793+08	2017-12-20 15:48:48.793+08	466241f9-ceea-4552-b9c6-114413124018	5	t	f
559	channelId	通道号	Variable	\N	\N	1	\N	255	1			2017-12-20 15:48:48.796+08	2017-12-20 15:48:48.796+08	466241f9-ceea-4552-b9c6-114413124018	1	t	f
2065	protocolcode	协议号	Constant	\N		1502	0			\N	Modbus盒式测斜协议	2018-03-08 20:11:52.114+08	2018-03-14 16:19:49.843+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	1	t	f
2155	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-22 09:57:41.576+08	2018-03-22 09:57:41.576+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	5	t	f
2133	deviceType	设备类型	Constant	\N		sensor	0			\N		2018-03-19 17:01:08.437+08	2018-03-19 17:03:27.112+08	4696ff30-0685-4f87-bc16-25d640a014a6	5	t	f
1201	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 16:34:08.835+08	2018-01-05 16:34:08.835+08	5eb050b5-8b57-4528-adce-b3633e613b6c	1	t	f
400	range	量程	Constant	\N		(-30,30),(-30,30)	0			°,°		2017-12-06 10:37:27.504+08	2017-12-21 09:36:51.162+08	6c19e60e-0ed7-4e22-abb4-ddc9caf20d91	5	t	f
1202	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 16:34:08.838+08	2018-01-05 16:34:08.838+08	5eb050b5-8b57-4528-adce-b3633e613b6c	5	t	f
566	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-21 11:15:16.289+08	2017-12-21 11:15:16.289+08	7c1b8df9-4088-4cc7-b07b-3299d827d7d0	5	t	f
565	range	量程	Constant	\N		(50,40000)	0			mm		2017-12-21 11:04:25.448+08	2017-12-21 11:26:18.317+08	f9cf9002-bdbd-458c-8534-37db6183e217	5	t	f
568	range	量程	Constant	\N		(0,20),(0,20)	0			m,m		2017-12-21 11:27:55.584+08	2017-12-21 11:28:43.762+08	21d99b83-6a52-4465-90c4-125d8330e1c1	5	t	f
2158	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-22 09:59:34.155+08	2018-03-22 09:59:34.155+08	10f69514-4a4b-4ecd-a318-f8bf0c81a965	5	t	f
2049	q	\N	Variable	\N	\N		\N	\N	\N	\N		2018-03-07 16:17:14.184+08	2018-03-07 16:17:14.184+08	24ff3733-db3f-4d37-b90a-edd44a77e054	5	t	f
569	range	量程	Constant	\N		(0,200)	0			mH2O		2017-12-21 11:32:06.762+08	2017-12-21 11:54:19.778+08	8e782506-4bab-4798-9e24-315107e3cc15	5	t	f
570	range	量程	Constant	\N	\N	(-20,70),(0,100)	\N	\N	\N	℃,%RH		2017-12-21 13:48:59.196+08	2017-12-21 13:48:59.196+08	497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	5	t	f
571	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-21 13:49:17.451+08	2017-12-21 13:49:17.451+08	497ca51c-dd0a-46cb-8651-ac4bb7bd45c0	5	t	f
572	range	量程	Constant	\N	\N	(0,60),(0,360)	\N	\N	\N	m/s,°		2017-12-21 14:11:59.238+08	2017-12-21 14:11:59.238+08	fd8e5a82-2b93-4d83-9132-4666b974079d	5	t	f
573	range	量程	Constant	\N	\N	(-30,30),(-30,30)	\N	\N	\N	°,°		2017-12-21 14:19:19.167+08	2017-12-21 14:19:19.167+08	7118fecd-555d-4d6c-9b3a-63b6ed0d2a45	5	t	f
574	range	量程	Constant	\N	\N	(-90,90),(-90,90)	\N	\N	\N	°,°		2017-12-21 14:22:39.249+08	2017-12-21 14:22:39.249+08	77d3bafd-4986-4848-b3c9-dfe847c6750e	5	t	f
575	range	量程	Constant	\N	\N	(-90,90),(-180,180)	\N	\N	\N	°		2017-12-21 15:07:07.226+08	2017-12-21 15:07:07.226+08	ef2cc4b4-23d3-4ff0-981b-84a8c98113ab	5	t	f
576	range	量程	Constant	\N	\N	(-90,90),(-180,180)	\N	\N	\N	°,°		2017-12-21 15:08:18.334+08	2017-12-21 15:08:18.334+08	d32b2513-a8bb-465c-aabf-0832f355ef6b	5	t	f
577	range	量程	Constant	\N	\N	(-90,90),(-90,90),(-40,80)	\N	\N	\N	°,°,℃		2017-12-21 15:19:10.14+08	2017-12-21 15:19:10.14+08	183c2cd5-5a53-4985-80aa-33a6ce2f82d4	5	t	f
578	range	量程	Constant	\N	\N	(-20,70),(0,95)	\N	\N	\N	℃,%RH		2017-12-21 16:37:36.694+08	2017-12-21 16:37:36.694+08	6af0f3be-6cb5-43c8-a588-490e10fdf4b7	5	t	f
579	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2017-12-21 16:37:36.699+08	2017-12-21 16:37:36.699+08	6af0f3be-6cb5-43c8-a588-490e10fdf4b7	5	t	f
580	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2017-12-21 16:37:36.703+08	2017-12-21 16:37:36.703+08	6af0f3be-6cb5-43c8-a588-490e10fdf4b7	5	t	f
581	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2017-12-21 17:50:57.701+08	2017-12-21 17:50:57.701+08	c7528fab-94f4-4110-9aaf-8964afa09c20	5	t	f
582	range	量程	Constant	\N	\N	(-20,80),(0,100)	\N	\N	\N	℃,%RH		2017-12-21 17:51:41.332+08	2017-12-21 17:51:41.332+08	c7528fab-94f4-4110-9aaf-8964afa09c20	5	t	f
611	key	\N	Variable	\N	\N	\N	\N	1	1	\N		2018-01-03 23:06:41.728+08	2018-01-03 23:06:41.728+08	30519425-7bd8-440f-83ea-f9da4767faf9	1	t	f
583	tempRange	温度	Constant	\N	\N	(-55,85)	\N	\N	\N	℃		2017-12-25 11:10:04.787+08	2017-12-25 11:10:04.787+08	7c1b8df9-4088-4cc7-b07b-3299d827d7d0	5	t	f
2360	111111	2	Variable	\N	\N	true	\N	\N	\N	1	2	2018-03-28 15:40:02.875+08	2018-03-28 15:40:02.875+08	7faf119d-7804-470c-a448-516d681cce6b	3	t	f
2417	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-04-09 16:11:41.576+08	2018-04-09 16:11:41.576+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	5	t	f
605	channelId	通道号	Variable	\N		1	0	128	1			2018-01-02 17:33:10.108+08	2018-01-08 16:39:31.104+08	608c11f3-91d9-4d92-9459-a4f7eb20bf1d	1	t	f
609	moduleId	模块号	Variable	\N		1	0			\N		2018-01-03 16:19:19.159+08	2018-01-18 17:33:00.428+08	4d523084-bf91-421f-bafc-f278a63c5541	5	f	f
2003	eee	\N	Variable	\N	\N	\N	\N	3	1	\N		2018-02-27 16:28:09.443+08	2018-02-27 16:28:09.443+08	1a6ea847-974c-49f4-b1e6-452665775d49	1	t	f
2064	interval	采集间隔	Variable	\N	\N	5	\N	65535	1	分		2018-03-08 19:34:49.095+08	2018-03-08 19:34:49.095+08	aee112f2-97fd-415e-b3b8-7009ea712ab1	1	t	f
2418	sensortype	传感器类型	Constant	\N	\N	lf	\N	\N	\N			2018-04-09 16:11:41.578+08	2018-04-09 16:11:41.578+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	5	t	f
2419	protocolcode	协议号	Constant	\N	\N	9102	\N	\N	\N			2018-04-09 16:11:41.581+08	2018-04-09 16:11:41.581+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	5	t	f
597	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2017-12-28 20:13:20.354+08	2017-12-28 20:13:20.354+08	aa64719f-ac6f-463c-83c5-dcdbd25be81e	5	t	f
598	channelId	通道号	Variable	\N	\N	1	\N	\N	\N			2017-12-28 20:13:20.359+08	2017-12-28 20:13:20.359+08	aa64719f-ac6f-463c-83c5-dcdbd25be81e	5	t	f
2467	range	量程	Constant	\N	\N	(-3000,3000)	\N	\N	\N	e		2018-05-10 17:53:00.796+08	2018-05-10 17:53:00.796+08	fdef19ae-68f1-4ad5-937b-3cb60e20d8ce	5	t	f
2420	range	量程	Constant	\N		(-10,10)	0			mm		2018-04-09 16:11:41.584+08	2018-05-16 17:52:37.128+08	0bf78d42-85ee-486c-bf43-c62c3168ee33	5	t	f
2499	account	账号	Variable	\N	\N		\N	\N	\N	\N		2018-06-19 09:45:35.596+08	2018-06-19 09:45:35.596+08	9aff4ead-342b-40e8-b365-6a53212df7dd	5	t	f
603	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-02 17:33:10.101+08	2018-01-02 17:33:10.101+08	608c11f3-91d9-4d92-9459-a4f7eb20bf1d	5	t	f
604	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-02 17:33:10.105+08	2018-01-02 17:33:10.105+08	608c11f3-91d9-4d92-9459-a4f7eb20bf1d	5	t	f
2500	pw	密码	Variable	\N	\N		\N	\N	\N			2018-06-19 09:45:35.603+08	2018-06-19 09:45:35.603+08	9aff4ead-342b-40e8-b365-6a53212df7dd	5	t	f
608	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-03 13:53:36.259+08	2018-01-03 13:53:36.259+08	46ad9444-1665-48d6-bb9a-37cee37d1604	5	t	f
567	range	结冰厚度量程	Constant	\N		(0,10)	0			mm		2017-12-21 11:15:16.292+08	2018-01-03 20:13:29.752+08	7c1b8df9-4088-4cc7-b07b-3299d827d7d0	5	t	f
612	p	\N	Variable	\N	\N	\N	\N	3	2	\N		2018-01-03 23:08:28.592+08	2018-01-03 23:08:28.592+08	34eeec21-d4e0-4716-a88e-42267e349980	1	t	f
2421	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-04-11 09:27:08.937+08	2018-04-11 09:27:08.937+08	d75d2473-6ed4-437c-8509-682f55d0d407	5	t	f
2066	sensortype	传感器类型	Constant	\N		cx	0					2018-03-08 20:12:30.833+08	2018-03-14 16:20:12.935+08	9e8050a9-f38a-45c3-a02b-40670bdf19b7	5	t	f
2067	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-08 20:18:18.435+08	2018-03-14 16:22:48.105+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	5	t	f
2134	deviceType	deviceType	Constant	\N		sensor	0			\N		2018-03-19 17:01:59.064+08	2018-03-19 17:02:48.309+08	660c0ba2-d714-4ad3-8166-a1fa25a9d7d1	5	t	f
2501	boxId	云盒编号	Variable	\N	\N		\N	\N	\N			2018-06-19 09:45:35.609+08	2018-06-19 09:45:35.609+08	9aff4ead-342b-40e8-b365-6a53212df7dd	5	t	f
2502	tokenUrl	tokenUrl	Variable	\N	\N		\N	\N	\N			2018-06-19 09:45:35.621+08	2018-06-19 09:45:35.621+08	9aff4ead-342b-40e8-b365-6a53212df7dd	5	t	f
2156	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-22 09:58:34.896+08	2018-03-22 09:58:34.896+08	e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	5	t	f
2503	dataUrl	dataUrl	Variable	\N	\N		\N	\N	\N			2018-06-19 09:45:35.624+08	2018-06-19 09:45:35.624+08	9aff4ead-342b-40e8-b365-6a53212df7dd	5	t	f
2563	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-15 14:41:47.966+08	2018-08-15 14:41:47.966+08	b15e4068-3a0b-43cf-898a-151d9a211756	5	t	f
1208	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 16:34:09.8+08	2018-01-05 16:34:09.8+08	7802bcc3-5fdb-441d-a57a-a89ca2ec158b	1	t	f
1209	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 16:34:09.803+08	2018-01-05 16:34:09.803+08	7802bcc3-5fdb-441d-a57a-a89ca2ec158b	5	t	f
2565	sensortype	传感器类型	Constant	\N		gdgs	0			\N		2018-08-16 15:26:40.016+08	2018-08-16 15:28:53.333+08	3553eba2-db23-4cb8-b96d-e0d443644324	5	t	f
2830	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-25 14:24:04.329+08	2019-02-25 14:24:04.329+08	f0443cf8-a24d-46f9-a894-7c731798736d	5	t	f
2831	protocolcode	协议号	Constant	\N		1401	0	\N	\N			2019-02-25 14:24:04.332+08	2019-02-25 14:24:04.332+08	f0443cf8-a24d-46f9-a894-7c731798736d	1	t	f
2832	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:24:04.334+08	2019-02-25 14:24:04.334+08	f0443cf8-a24d-46f9-a894-7c731798736d	5	t	f
2833	range	量程	Constant	\N		(-5000,5000)	0	\N	\N	με		2019-02-25 14:24:04.336+08	2019-02-25 14:24:04.336+08	f0443cf8-a24d-46f9-a894-7c731798736d	5	t	f
2913	value	参数值	Variable	\N		\N	6	99999	0			2019-03-07 15:14:53.166+08	2019-03-11 10:33:11.627+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	2	f	f
2974	gps_st	模组类型-GPS	Constant	\N		gps	0					2019-03-27 20:08:29.221+08	2019-04-02 09:57:42.627+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
641	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-04 11:56:59.894+08	2018-01-04 11:56:59.894+08	6a8343f7-8c07-4851-8924-f8d4f1f5ab78	5	t	f
642	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-04 11:56:59.899+08	2018-01-04 11:56:59.899+08	6a8343f7-8c07-4851-8924-f8d4f1f5ab78	5	t	f
2995	pm10_pre	执行前延迟-PM10	Variable	\N		25	0	600	0	百毫秒		2019-03-28 10:00:50.507+08	2019-04-02 09:57:50.1+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1210	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 16:48:16.721+08	2018-01-05 16:48:16.721+08	1e0d3ad9-26a9-427e-be48-685ffe3e84b7	5	t	f
1398	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 14:45:01.204+08	2018-01-08 14:45:01.204+08	8d1d1382-984f-4aa9-8e57-c2a2c21e0c06	5	t	f
1423	range	量程	Constant	\N	\N	(-40,80)	\N	\N	\N	℃		2018-01-08 16:03:38.883+08	2018-01-08 16:03:38.883+08	8d1d1382-984f-4aa9-8e57-c2a2c21e0c06	5	t	f
1421	tempRange	温度量程	Constant	\N		(-40,125)	0			℃		2018-01-08 16:00:26.359+08	2018-01-08 17:15:46.481+08	e5b27a73-2d4c-4b53-8bcd-86583097a730	5	t	f
1498	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:34:18.71+08	2018-01-08 17:34:18.71+08	5f908b85-0f3a-48c0-bc83-8e191731a754	5	t	f
1501	moduleId	模块号	Variable	\N		0	0	\N	\N	\N		2018-01-08 17:44:21.356+08	2018-01-08 17:44:21.356+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f	5	t	f
1503	tempRange	温度量程	Constant	\N	\N	(-40,120)	\N	\N	\N	℃		2018-01-08 18:04:25.036+08	2018-01-08 18:04:25.036+08	5f908b85-0f3a-48c0-bc83-8e191731a754	5	t	f
1509	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 18:26:58.129+08	2018-01-08 18:26:58.129+08	0dcb57e3-244f-44d3-8f9c-a50fc74481a8	5	t	f
1510	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 18:35:03.275+08	2018-01-08 18:35:03.275+08	29aa5799-e271-4913-8e21-04edddaa5be1	5	t	f
1511	range	量程	Constant	\N	\N	(-40,80)	\N	\N	\N	℃		2018-01-08 18:40:09.811+08	2018-01-08 18:40:09.811+08	29aa5799-e271-4913-8e21-04edddaa5be1	5	t	f
2068	protocolcode	协议号	Constant	\N		1401	0					2018-03-08 20:19:30.73+08	2018-03-14 16:22:56.322+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	1	t	f
2135	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-03-19 17:04:12.474+08	2018-03-19 17:04:12.474+08	e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	5	t	f
2136	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-03-19 17:04:37.041+08	2018-03-19 17:04:37.041+08	6c0d843c-169e-49b8-8dde-188699cc3077	5	t	f
2137	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-03-19 17:05:09.504+08	2018-03-19 17:05:09.504+08	d8860bee-374c-497a-a33a-258af59e3690	5	t	f
1215	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 16:50:30.027+08	2018-01-05 16:50:30.027+08	d55af283-4d11-4eb7-8099-890d98bfcc0c	1	t	f
1216	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 16:50:30.03+08	2018-01-05 16:50:30.03+08	d55af283-4d11-4eb7-8099-890d98bfcc0c	5	t	f
2139	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-03-19 17:06:30.172+08	2018-03-19 17:06:30.172+08	e58ee78a-e499-483c-acc8-a42683d62149	5	t	f
1399	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 14:52:14.741+08	2018-01-08 14:52:14.741+08	e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4	5	t	f
1400	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 14:56:03.581+08	2018-01-08 14:56:03.581+08	7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e	5	t	f
1869	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 17:19:51.386+08	2018-01-23 17:19:51.386+08	ddf17ba9-fcef-4ef4-97f0-c09e0503dfa3	5	t	f
1422	range	量程	Constant	\N		(0,30)	0			mm		2018-01-08 16:02:01.681+08	2018-01-08 16:26:00.38+08	e7a84149-53b0-4ba3-88e7-fe7e0e0f21d4	5	t	f
1502	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 18:00:05.72+08	2018-01-08 18:00:05.72+08	930f1b29-d056-40a8-9b86-62829634874c	5	t	f
2157	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-22 09:59:03.724+08	2018-03-22 09:59:03.724+08	e8ccf6dc-5626-4bb7-9f88-9bf8972619b4	1	t	f
1824	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 15:00:11.889+08	2018-03-26 15:52:48.129+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	5	t	f
1572	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 10:59:07.1+08	2018-01-09 10:59:07.1+08	29aa5799-e271-4913-8e21-04edddaa5be1	1	t	f
1620	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-11 11:13:31.335+08	2018-01-11 11:13:31.335+08	d53887ba-c67a-4b45-a1ed-1a61fbde6c4c	5	t	f
1711	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 14:02:27.127+08	2018-01-23 14:02:27.127+08	85ba72e3-3754-4b11-a144-757d7a01f1dc	5	t	f
2422	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-04-11 16:24:01.273+08	2018-04-11 16:24:01.273+08	6e1d3878-3ea2-4c73-9137-0ef98781be0c	5	t	f
2470	是否正常	是否正常	Variable	\N	\N	true	\N	\N	\N			2018-05-11 15:45:31.148+08	2018-05-11 15:45:31.148+08	efdb6604-3283-41b2-9a30-aa532a49d897	3	t	f
1825	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 15:00:11.892+08	2018-01-23 15:00:11.892+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	1	t	f
1826	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:00:11.894+08	2018-01-23 15:00:11.894+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	5	t	f
2469	温度	温度	Variable	\N		\N	2	50	0	℃		2018-05-11 15:45:31.143+08	2018-05-18 14:25:26.601+08	efdb6604-3283-41b2-9a30-aa532a49d897	2	t	f
2504	12222	\N	Tag	\N	\N	\N	\N	\N	\N	\N		2018-07-06 17:14:37.681+08	2018-07-06 17:14:37.681+08	e442b9a5-066f-4cde-b5f3-9709a193c328	\N	t	f
1895	devicetype	设备类型	Constant	\N		sensor	0					2018-01-24 11:19:02.117+08	2018-08-01 09:19:49.891+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	5	t	f
1847	range	量程	Constant	\N		(0,0.4)	0			MPa		2018-01-23 15:00:12.746+08	2018-01-23 15:00:47.515+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	5	t	f
1829	range	量程	Constant	\N		(0,0.8)	0			MPa		2018-01-23 15:00:11.9+08	2018-01-23 15:01:54.46+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	5	t	f
1859	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:06:34.968+08	2018-01-23 15:06:34.968+08	eee64353-8241-4a69-a2ed-5e42bbf4450c	5	t	f
2567	sensortype	传感器类型	Constant	\N		gdgs	0			\N		2018-08-16 16:25:36.797+08	2018-08-16 16:26:26.886+08	7bd233a3-8bb9-45d7-8298-278d0288de46	5	t	f
2569	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-08-24 09:09:28.374+08	2018-08-24 09:09:28.374+08	bbcd2556-3714-4360-80d1-af1f8be94404	5	t	f
1862	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2018-01-23 15:06:34.976+08	2018-01-23 15:06:34.976+08	eee64353-8241-4a69-a2ed-5e42bbf4450c	5	t	f
2595	test	sdf	Variable	\N	\N	true	\N	\N	\N	w	wasd撒旦法沙发	2018-09-12 13:56:08.4+08	2018-09-12 13:56:08.4+08	681c7dfc-f592-4339-a323-7a0ef757fd22	3	t	f
2844	devicetype	设备类型	Constant	\N		sensor	0	\N	\N			2019-02-25 15:41:07.37+08	2019-02-25 15:41:07.37+08	c169f72a-deae-4135-84ee-62d771722507	5	t	f
1870	moduleId	模块号	Variable	\N	\N	0	\N	\N	\N	\N		2018-01-24 11:05:24.824+08	2018-01-24 11:05:24.824+08	38b81b7d-bb3e-4885-aaea-6035faf20d1b	5	t	f
1871	range	量程	Constant	\N	\N	(0.5,80)	\N	\N	\N	mm		2018-01-24 11:05:24.828+08	2018-01-24 11:05:24.828+08	38b81b7d-bb3e-4885-aaea-6035faf20d1b	5	t	f
2845	range	量程	Constant	\N		(-5000,5000)	0	\N	\N	με		2019-02-25 15:41:07.373+08	2019-02-25 15:41:07.373+08	c169f72a-deae-4135-84ee-62d771722507	5	t	f
1894	range	量程	Constant	\N		(0,2)	0	\N	\N	MPa		2018-01-24 11:19:02.115+08	2018-01-24 11:19:02.115+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	5	t	f
2846	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2019-02-25 15:41:07.376+08	2019-02-25 15:41:07.376+08	c169f72a-deae-4135-84ee-62d771722507	1	t	f
2847	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-25 15:41:07.379+08	2019-02-25 15:41:07.379+08	c169f72a-deae-4135-84ee-62d771722507	5	t	f
2912	num	参数编号	Variable	\N	PM2.5系数A,PM2.5系数B,PM10系数A,PM10系数B,噪声系数A,噪声系数B,温度系数B,湿度系数B,风速系数B,联动阈值,控制回差	PM2.5系数A	0			\N		2019-03-07 15:13:39.237+08	2019-03-12 11:32:08.858+08	a820a6a6-2302-4291-bf8a-e6beb3e7f663	4	f	f
2931	sensortype	传感器类型	Constant	\N		wd	0			\N		2019-03-25 11:18:25.753+08	2019-03-25 11:24:28.062+08	2cea756f-0ed5-406d-88a5-b2c3b6ad9b6d	5	t	f
2996	gps_post	读取记录前延迟-GPS	Variable	\N		35	0	600	0	百毫秒		2019-03-28 10:29:33.625+08	2019-04-02 09:57:16.724+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1227	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 08:03:31.863+08	2018-01-08 08:03:31.863+08	684a2261-481c-4504-9f4b-665baf97aae6	5	t	f
1228	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-01-08 08:03:31.867+08	2018-01-08 08:03:31.867+08	684a2261-481c-4504-9f4b-665baf97aae6	1	t	f
2170	sensortype	传感器类型	Constant	\N		gxgs	0			\N		2018-03-23 16:23:44.757+08	2018-04-02 09:34:32.555+08	12a0ae21-df74-42b4-94ce-492125b941bd	5	t	f
2138	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-03-19 17:05:43.983+08	2018-03-19 17:05:43.983+08	10f69514-4a4b-4ecd-a318-f8bf0c81a965	5	t	f
2160	sensortype	传感器类型	Constant	\N		yc	0			\N		2018-03-23 13:42:40.25+08	2018-04-09 15:10:10.428+08	2e2456a6-9738-456c-abf1-94d5ebad124a	5	t	f
2165	sensortype	传感器类型	Variable	\N		yc	0					2018-03-23 15:38:53.467+08	2018-04-09 15:11:14.611+08	0f4f59de-cde7-4aec-a402-703e5426bb76	5	t	f
2167	protocolcode	协议号	Constant	\N		9002	0					2018-03-23 16:00:39.462+08	2018-04-09 15:11:47.464+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	5	t	f
2168	protocolcode	协议号	Constant	\N		9002	0			\N		2018-03-23 16:02:05.076+08	2018-04-09 15:12:11.208+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	5	t	f
2169	sensortype	传感器类型	Constant	\N		yc	0					2018-03-23 16:02:23.195+08	2018-04-09 15:12:16.573+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	5	t	f
2423	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 11:54:59.779+08	2018-04-16 11:54:59.779+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
2424	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 11:54:59.787+08	2018-04-16 11:54:59.787+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
2425	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 11:54:59.791+08	2018-04-16 11:54:59.791+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
2426	range	量程	Constant	\N	\N	(-1000,1000)	\N	\N	\N			2018-04-16 11:54:59.795+08	2018-04-16 11:54:59.795+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
2471	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-05-16 17:44:54.921+08	2018-05-16 17:44:54.921+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	5	t	f
2472	sensortype	传感器类型	Constant	\N	\N	lf	\N	\N	\N			2018-05-16 17:44:54.924+08	2018-05-16 17:44:54.924+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	5	t	f
2473	protocolcode	协议号	Constant	\N	\N	9102	\N	\N	\N			2018-05-16 17:44:54.927+08	2018-05-16 17:44:54.927+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	5	t	f
2579	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-24 16:11:23.741+08	2018-08-24 16:11:23.741+08	209249f3-7316-4e7d-a3bf-df78afc260eb	5	t	f
2474	range	量程	Constant	\N		(-50,50)	0			mm		2018-05-16 17:44:54.929+08	2018-05-16 17:51:49.898+08	bff19d80-ce20-4c3d-b158-df091a1fb5ac	5	t	f
713	model	型号	Constant	\N		GT-MCU4-MI600T	0					2018-01-04 15:33:35.135+08	2018-06-07 10:22:38.24+08	fb1119c8-c430-4066-9f02-60a558d92a68	5	t	f
2505	1	1	Variable	\N	\N	1	\N	1	1	\N		2018-07-10 14:47:24.853+08	2018-07-10 14:47:24.853+08	94540a5f-cb58-4a32-a605-05002a4391ed	1	t	f
2573	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-24 15:55:17.003+08	2018-08-24 15:55:17.003+08	a5766cb2-27a1-4d0a-939b-ac6aa0871a81	5	t	f
2982	aqi_p4	系数-SO2	Variable	\N		1	16	9999	-9999			2019-03-27 20:41:21.377+08	2019-04-08 13:52:56.889+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2976	pm10_p2	系数-PM10	Variable	\N		1	16	9999	-9999			2019-03-27 20:16:54.573+08	2019-04-08 13:52:54.167+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2576	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-24 16:11:23.016+08	2018-08-24 16:11:23.016+08	6de7929d-736b-4c4e-a1c3-e7550a7b6d31	5	t	f
2596	sensorID	传感器编号	Variable	\N	\N		\N	\N	\N	\N		2018-09-13 17:17:20.67+08	2018-09-13 17:17:20.67+08	a1d2070f-926a-42a1-8bf8-a39b89eb4c92	5	t	f
1406	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 15:10:26.573+08	2018-01-08 15:10:26.573+08	f5f27d3f-b8fd-44ee-97e2-8a78748a424f	5	t	f
1407	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 15:10:26.576+08	2018-01-08 15:10:26.576+08	f5f27d3f-b8fd-44ee-97e2-8a78748a424f	5	t	f
723	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 10:51:34.774+08	2018-01-05 10:51:34.774+08	d77b7e20-7877-47dc-aef4-37a663bac660	1	t	f
1408	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 15:10:26.583+08	2018-01-08 15:10:26.583+08	f5f27d3f-b8fd-44ee-97e2-8a78748a424f	1	t	f
727	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:06:57.961+08	2018-01-05 11:06:57.961+08	ba349741-3d03-49c6-a2cf-9e2156fd36c4	5	t	f
728	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:06:57.963+08	2018-01-05 11:06:57.963+08	ba349741-3d03-49c6-a2cf-9e2156fd36c4	1	t	f
729	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:06:58.699+08	2018-01-05 11:06:58.699+08	30da8546-87f0-4a5c-bd4f-f9919c954c82	5	t	f
730	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:06:58.706+08	2018-01-05 11:06:58.706+08	30da8546-87f0-4a5c-bd4f-f9919c954c82	1	t	f
731	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:06:58.823+08	2018-01-05 11:06:58.823+08	17c35362-c638-46de-bea3-840893daf864	5	t	f
732	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:06:58.826+08	2018-01-05 11:06:58.826+08	17c35362-c638-46de-bea3-840893daf864	1	t	f
733	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:00.034+08	2018-01-05 11:07:00.034+08	d14c6b02-4298-4713-b970-eba0aafee88b	5	t	f
734	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:00.036+08	2018-01-05 11:07:00.036+08	d14c6b02-4298-4713-b970-eba0aafee88b	1	t	f
735	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:00.157+08	2018-01-05 11:07:00.157+08	feb1fe0d-208d-41cf-9533-596f78fa835c	5	t	f
736	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:00.159+08	2018-01-05 11:07:00.159+08	feb1fe0d-208d-41cf-9533-596f78fa835c	1	t	f
724	moduleId	模块号	Variable	\N		0	0			\N		2018-01-05 10:51:34.777+08	2018-01-05 13:20:58.09+08	d77b7e20-7877-47dc-aef4-37a663bac660	5	t	f
2599	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-09-25 10:58:51.087+08	2018-09-25 10:58:51.087+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	5	t	f
2600	protocolcode	协议号	Constant	\N	\N	9112	\N	\N	\N			2018-09-25 10:58:51.089+08	2018-09-25 10:58:51.089+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	5	t	f
2601	range	量程	Constant	\N		(0,50)	0			mm		2018-09-25 10:58:51.091+08	2018-09-25 10:59:02.632+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	5	t	f
2598	sensortype	传感器类型	Constant	\N		lf	0			\N		2018-09-25 10:58:51.084+08	2018-09-25 11:00:44.832+08	19bb2b93-6e2e-4861-95df-67a68bc71fc4	5	t	f
2848	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:41:59.844+08	2019-02-25 15:41:59.844+08	9bcce139-4a57-4c96-ba1f-914569011b77	5	t	f
2849	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:41:59.847+08	2019-02-25 15:41:59.847+08	9bcce139-4a57-4c96-ba1f-914569011b77	1	t	f
2850	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:41:59.851+08	2019-02-25 15:41:59.851+08	9bcce139-4a57-4c96-ba1f-914569011b77	5	t	f
2851	range	量程	Constant	\N		(0,0.8)	0	\N	\N	MPa		2019-02-25 15:41:59.854+08	2019-02-25 15:41:59.854+08	9bcce139-4a57-4c96-ba1f-914569011b77	5	t	f
2852	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:41:59.857+08	2019-02-25 15:41:59.857+08	9bcce139-4a57-4c96-ba1f-914569011b77	5	t	f
2853	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:41:59.86+08	2019-02-25 15:41:59.86+08	9bcce139-4a57-4c96-ba1f-914569011b77	1	t	f
2928	id	设备编号	Constant	\N	\N	xxxx89788978	\N	\N	\N	\N		2019-03-19 10:11:54.301+08	2019-03-19 10:11:54.301+08	f2d1cabf-7888-4be1-9357-bf5052e5772c	5	t	f
2929	temptur	温度	Variable	\N	\N	36	2	69	10	°		2019-03-19 10:11:54.305+08	2019-03-19 10:11:54.305+08	f2d1cabf-7888-4be1-9357-bf5052e5772c	2	t	f
2932	sensortype	传感器类型	Constant	\N	\N	yb	\N	\N	\N	\N		2019-03-25 11:24:21.026+08	2019-03-25 11:24:21.026+08	3feb218e-5b82-496a-9f57-71be58552c0d	5	t	f
737	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:00.29+08	2018-01-05 11:07:00.29+08	35d1f34b-ccac-4110-9bb6-7e0a3327ef18	5	t	f
738	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:00.293+08	2018-01-05 11:07:00.293+08	35d1f34b-ccac-4110-9bb6-7e0a3327ef18	1	t	f
739	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:01.147+08	2018-01-05 11:07:01.147+08	0530f690-1f3c-430e-97c7-6dc82f96fd47	5	t	f
740	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:01.15+08	2018-01-05 11:07:01.15+08	0530f690-1f3c-430e-97c7-6dc82f96fd47	1	t	f
1229	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:17:08.61+08	2018-01-08 08:17:08.61+08	223ac440-c7b0-4005-8144-f33ce926d9bf	1	t	f
1230	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:17:08.613+08	2018-01-08 08:17:08.613+08	223ac440-c7b0-4005-8144-f33ce926d9bf	5	t	f
747	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:03.22+08	2018-01-05 11:07:03.22+08	27f99320-b0dc-4b93-bc24-f5ccf9337356	5	t	f
748	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:03.224+08	2018-01-05 11:07:03.224+08	27f99320-b0dc-4b93-bc24-f5ccf9337356	1	t	f
751	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:04.229+08	2018-01-05 11:07:04.229+08	b750e865-af38-40e9-a478-16fefb4cb618	5	t	f
752	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:04.232+08	2018-01-05 11:07:04.232+08	b750e865-af38-40e9-a478-16fefb4cb618	1	t	f
2162	sensortype	传感器类型	Constant	\N		gxgs	0			\N		2018-03-23 15:10:22.119+08	2018-04-02 09:34:41.529+08	61f09dd0-ba56-40e4-a2d1-45dab1143900	5	t	f
2161	protocolcode	协议号	Constant	\N		9002	0					2018-03-23 13:43:55.46+08	2018-04-09 15:10:04.786+08	2e2456a6-9738-456c-abf1-94d5ebad124a	5	t	f
2077	a	\N	Variable	\N	\N	0	\N	10	0	\N		2018-03-12 17:55:34.554+08	2018-03-12 17:55:34.554+08	ae356f39-ab83-4ac9-b847-31391780a6c5	1	t	f
759	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:47:57.151+08	2018-01-05 11:47:57.151+08	2574b00e-2491-471c-925a-5b713afa9561	5	t	f
1231	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:17:08.616+08	2018-01-08 08:17:08.616+08	223ac440-c7b0-4005-8144-f33ce926d9bf	5	t	f
2166	sensortype	传感器类型	Constant	\N		yc	0			\N		2018-03-23 16:00:09.565+08	2018-04-09 15:11:41.754+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	5	t	f
765	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 11:50:22.348+08	2018-01-05 11:50:22.348+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	5	t	f
2427	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 14:07:58.063+08	2018-04-16 14:07:58.063+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	5	t	f
771	range	量程	Constant	\N		(-3000,3000)	0			με		2018-01-05 11:50:22.364+08	2018-01-05 14:10:09.845+08	5f4e4e99-20b3-4bf7-95cb-a2f507595b2d	5	t	f
2429	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 14:07:58.072+08	2018-04-16 14:07:58.072+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	5	t	f
2430	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 14:07:58.074+08	2018-04-16 14:07:58.074+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	5	t	f
2443	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 16:00:53.323+08	2018-04-16 16:00:53.323+08	7674c64d-e09e-4257-8726-c64a26ed309a	5	t	f
2445	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 16:00:53.336+08	2018-04-16 16:00:53.336+08	7674c64d-e09e-4257-8726-c64a26ed309a	5	t	f
1249	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:38.822+08	2018-01-08 08:30:38.822+08	8e812d09-7b95-4c07-ad74-d4c66104e7a7	5	t	f
1250	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:38.824+08	2018-01-08 08:30:38.824+08	8e812d09-7b95-4c07-ad74-d4c66104e7a7	5	t	f
1251	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:38.826+08	2018-01-08 08:30:38.826+08	8e812d09-7b95-4c07-ad74-d4c66104e7a7	1	t	f
2446	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 16:00:53.339+08	2018-04-16 16:00:53.339+08	7674c64d-e09e-4257-8726-c64a26ed309a	5	t	f
1409	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 15:12:21.625+08	2018-01-08 15:12:21.625+08	0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e	5	t	f
1419	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 15:32:40.779+08	2018-01-08 15:32:40.779+08	2fd2ebfb-7858-40db-91a8-d933269ccf64	5	t	f
2171	sensortype	传感器	Constant	\N	\N	zd	\N	\N	\N	\N		2018-03-23 16:27:39.185+08	2018-03-23 16:27:39.185+08	c8fd3080-b416-4381-8bcc-e84c12471281	5	t	f
1809	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:57:48.829+08	2018-03-26 15:45:27.822+08	37c046eb-9a0e-49b0-95fb-f0128338f381	5	t	f
2582	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-08-24 16:11:25.609+08	2018-08-24 16:11:25.609+08	b0493f78-0950-47ac-bf5f-27797da84f44	5	t	f
1573	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 11:10:39.811+08	2018-01-09 11:10:39.811+08	5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	1	t	f
1575	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-09 11:10:39.822+08	2018-01-09 11:10:39.822+08	5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	5	t	f
2444	range	量程	Constant	\N		(-100,100)	0			kN		2018-04-16 16:00:53.326+08	2018-04-16 17:49:33.305+08	7674c64d-e09e-4257-8726-c64a26ed309a	5	t	f
2428	range	量程	Constant	\N		(-50,50)	0			kN		2018-04-16 14:07:58.066+08	2018-04-16 17:49:55.733+08	6c650368-cf3e-4a75-a30d-01b2a37356fb	5	t	f
2475	tst	\N	Variable	\N	\N	\N	\N	2	1	\N		2018-05-17 10:26:47.74+08	2018-05-17 10:26:47.74+08	e5c11c48-0e03-4229-b879-a487b7cda972	1	t	f
2602	uploadprocess	配置上传后处理	Variable	\N	restart,stop,start	restart	\N	\N	\N	\N		2018-09-25 15:45:24.017+08	2018-09-25 15:45:24.017+08	d929c576-62dd-4f0c-a2cc-15120347b903	4	t	f
1574	range	量程	Constant	\N		(0,100)	0			%RH		2018-01-09 11:10:39.817+08	2018-01-09 11:14:19.053+08	5c1ff344-5845-4376-8ea0-1ac8d45d9f3c	5	t	f
1621	123	123	Variable	\N	\N	111111	\N	\N	\N	\N		2018-01-11 15:19:04.812+08	2018-01-11 15:19:04.812+08	7d457a8b-5537-4186-bd68-df0c5868ef7e	5	t	f
1713	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-23 14:10:45.523+08	2018-01-23 14:10:45.523+08	931fef11-654a-4f36-bf37-dbc168c46e84	5	t	f
2603	triggermode	触发方式	Variable	\N	软件触发,模拟硬件触发,数字硬件触发,硬件模拟数字触发	软件触发	\N	\N	\N			2018-09-25 15:45:24.02+08	2018-09-25 15:45:24.02+08	d929c576-62dd-4f0c-a2cc-15120347b903	4	t	f
2605	devicermode	设备工作模式	Variable	\N	从设备异步,主设备异步,主设备同步	主设备异步	\N	\N	\N			2018-09-25 15:45:24.025+08	2018-09-25 15:45:24.025+08	d929c576-62dd-4f0c-a2cc-15120347b903	4	t	f
1807	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:57:48.825+08	2018-01-23 14:57:48.825+08	37c046eb-9a0e-49b0-95fb-f0128338f381	5	t	f
1808	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:57:48.827+08	2018-01-23 14:57:48.827+08	37c046eb-9a0e-49b0-95fb-f0128338f381	1	t	f
2606	hour	间隔触发启动时间小时	Variable	\N			0	23	0			2018-09-25 15:45:24.028+08	2018-09-25 15:54:27.662+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	f	f
2608	second	间隔触发启动时间秒	Variable	\N			0	59	0			2018-09-25 15:45:24.032+08	2018-09-25 15:55:12.366+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	f	f
2172	sensortype	传感器类型	Constant	\N		wsd	0			\N		2018-03-23 17:01:20.745+08	2018-04-09 15:12:46.617+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	5	t	f
2174	protocolcode	协议号	Constant	\N		1102	0			\N		2018-03-23 17:06:29.705+08	2018-04-09 15:13:23.317+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	5	t	f
2431	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 15:46:07.764+08	2018-04-16 15:46:07.764+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
2432	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 15:46:07.767+08	2018-04-16 15:46:07.767+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
749	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 11:07:03.721+08	2018-01-05 11:07:03.721+08	ecfacbbe-037c-42cb-89ce-68a2e6170758	5	t	f
750	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 11:07:03.734+08	2018-01-05 11:07:03.734+08	ecfacbbe-037c-42cb-89ce-68a2e6170758	1	t	f
2433	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 15:46:07.77+08	2018-04-16 15:46:07.77+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
2435	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 15:46:07.919+08	2018-04-16 15:46:07.919+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
2436	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 15:46:07.922+08	2018-04-16 15:46:07.922+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
2437	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 15:46:07.925+08	2018-04-16 15:46:07.925+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
2439	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 15:46:12.413+08	2018-04-16 15:46:12.413+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
2144	K1	K1一次项系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		2018-03-20 15:08:46.97+08	2018-03-20 15:31:35.267+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	2	t	f
2163	sensortype	传感器类型	Constant	\N	\N	gnss	\N	\N	\N	\N		2018-03-23 15:13:56.444+08	2018-03-23 15:13:56.444+08	526c42ea-d9a9-48d1-9862-b3118a7ef211	5	t	f
774	devicetype	设备类型	Constant	\N		sensor	0					2018-01-05 11:50:25.17+08	2018-03-26 11:27:37.936+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	5	t	f
2440	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 15:46:12.415+08	2018-04-16 15:46:12.415+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
1281	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:41.418+08	2018-01-08 08:30:41.418+08	f90de97b-b6e8-417a-b628-7b8e4bb9e335	5	t	f
2441	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 15:46:12.418+08	2018-04-16 15:46:12.418+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
1282	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:41.42+08	2018-01-08 08:30:41.42+08	f90de97b-b6e8-417a-b628-7b8e4bb9e335	5	t	f
2615	startiming5	定时触发启动时间5	Variable	\N			0					2018-09-25 15:45:24.046+08	2018-09-25 15:53:00.947+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
2434	range	量程	Constant	\N		(-2000,2000)	0					2018-04-16 15:46:07.772+08	2018-04-16 15:47:04.674+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
2438	range	量程	Constant	\N		(-3000,3000)	0					2018-04-16 15:46:07.927+08	2018-04-16 15:49:15.194+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
788	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 12:01:35.853+08	2018-01-05 12:01:35.853+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	5	t	f
2614	startiming4	定时触发启动时间4	Variable	\N			0					2018-09-25 15:45:24.044+08	2018-09-25 15:53:04.329+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
2442	range	量程	Constant	\N		(-4000,4000)	0					2018-04-16 15:46:12.42+08	2018-04-16 15:51:27.354+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
2476	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-05-17 13:55:17.809+08	2018-05-17 13:55:17.809+08	83881bee-4e8c-4ad6-a11f-45810d035b3d	5	t	f
2477	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-05-17 14:43:40.158+08	2018-05-17 14:43:40.158+08	82db02f1-7f86-44cf-b9a4-d32e28672a84	5	t	f
794	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2018-01-05 12:01:35.869+08	2018-01-05 12:01:35.869+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	5	t	f
2584	wakeupdelay	唤醒延时	Variable	\N	\N	1	\N	65535	1	s		2018-08-28 17:55:20.437+08	2018-08-28 17:55:20.437+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	1	t	f
2585	interval	采集间隔	Variable	\N	\N	5	\N	65535	1	分		2018-08-28 17:55:20.444+08	2018-08-28 17:55:20.444+08	c631f2ea-9e5c-415a-b56e-9d96c600e527	1	t	f
2586	node	设备ID	Variable	\N	\N	1	\N	65535	1	\N		2018-08-28 18:06:12.461+08	2018-08-28 18:06:12.461+08	9aa93498-820e-4fc6-a288-5b2274fb9246	1	t	f
2507	sensortype	传感器类型	Constant	\N		zd	0			\N		2018-07-18 09:51:58.272+08	2018-09-14 14:28:09.328+08	e32efbee-3c36-4be6-a4d3-d5058acf1fda	5	t	f
2613	startiming3	定时触发启动时间3	Variable	\N			0					2018-09-25 15:45:24.042+08	2018-09-25 15:53:07.966+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
810	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 14:02:09.835+08	2018-01-05 14:02:09.835+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	5	t	f
2612	startiming2	定时触发启动时间2	Variable	\N			0					2018-09-25 15:45:24.04+08	2018-09-25 15:53:11.994+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
2611	startiming1	定时触发启动时间1	Variable	\N			0					2018-09-25 15:45:24.038+08	2018-09-25 15:53:15.213+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
2609	acqtimeint	间隔触发采样时长	Variable	\N			0	50	1	s		2018-09-25 15:45:24.034+08	2018-09-25 15:55:03.125+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	f	f
2079	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-13 23:09:59.915+08	2018-03-13 23:09:59.915+08	384f80e3-ad51-400e-b0aa-8a3885961cec	5	t	f
2080	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-13 23:09:59.92+08	2018-03-13 23:09:59.92+08	384f80e3-ad51-400e-b0aa-8a3885961cec	1	t	f
819	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 14:02:10.858+08	2018-01-05 14:02:10.858+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	5	t	f
822	range	量程	Constant	\N		(-5000,5000)	0			με		2018-01-05 14:02:10.864+08	2018-01-05 14:06:50.902+08	13ee1f91-04cc-48af-820e-ffc0ed179b6c	5	t	f
813	range	量程	Constant	\N		(-3000,3000)	0			με		2018-01-05 14:02:09.841+08	2018-01-05 14:07:11.011+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	5	t	f
2164	protocolcode	协议号	Constant	\N		9002	0			\N		2018-03-23 15:38:05.596+08	2018-04-09 15:11:08.851+08	0f4f59de-cde7-4aec-a402-703e5426bb76	5	t	f
2145	K2	K2二次项系数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999			2018-03-20 15:09:15.121+08	2018-03-20 15:31:28.135+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	2	t	f
2147	Fo	Fo基准读数	Variable	\N		0	3	99999999999999999999999999999999	-99999999999999999999999999999999			2018-03-20 15:10:20.238+08	2018-03-22 13:52:22.16+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	2	t	f
2173	protocolcode	协议号	Constant	\N		1102	0					2018-03-23 17:01:55.532+08	2018-04-09 15:12:40.911+08	5c0f41c9-bbf5-416b-a77e-8fc5cabf06ed	5	t	f
2447	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 16:00:54.811+08	2018-04-16 16:00:54.811+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	5	t	f
2449	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 16:00:54.816+08	2018-04-16 16:00:54.816+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	5	t	f
2450	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 16:00:54.818+08	2018-04-16 16:00:54.818+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	5	t	f
1241	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:38.216+08	2018-01-08 08:30:38.216+08	e3713c95-6aa3-4a2e-ad89-579a16cb1a03	5	t	f
1242	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:38.219+08	2018-01-08 08:30:38.219+08	e3713c95-6aa3-4a2e-ad89-579a16cb1a03	5	t	f
1243	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:38.221+08	2018-01-08 08:30:38.221+08	e3713c95-6aa3-4a2e-ad89-579a16cb1a03	1	t	f
2616	startiming6	定时触发启动时间6	Variable	\N			0					2018-09-25 15:45:24.048+08	2018-09-25 15:52:57.616+08	d929c576-62dd-4f0c-a2cc-15120347b903	5	f	f
2854	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:43:07.054+08	2019-02-25 15:43:07.054+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	5	t	f
2455	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 16:14:51.133+08	2018-04-16 16:14:51.133+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	5	t	f
2456	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 16:14:51.138+08	2018-04-16 16:14:51.138+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	5	t	f
2457	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 16:14:51.146+08	2018-04-16 16:14:51.146+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	5	t	f
1257	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:39.713+08	2018-01-08 08:30:39.713+08	3c8c9002-2d60-43f0-9a2c-52daa53cab54	5	t	f
1258	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:39.715+08	2018-01-08 08:30:39.715+08	3c8c9002-2d60-43f0-9a2c-52daa53cab54	5	t	f
1259	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:39.716+08	2018-01-08 08:30:39.716+08	3c8c9002-2d60-43f0-9a2c-52daa53cab54	1	t	f
2855	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:43:07.056+08	2019-02-25 15:43:07.056+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	5	t	f
2448	range	量程	Constant	\N		(-200,200)	0			kN		2018-04-16 16:00:54.813+08	2018-04-16 17:50:05.038+08	4a7b8b8f-6ba0-4731-af44-8f3f6d30a928	5	t	f
2458	range	量程	Constant	\N		(-400,400)	0			kN		2018-04-16 16:14:51.169+08	2018-04-16 17:50:45.08+08	110a38a6-8cb9-43c5-9682-4b1ba0e9d01f	5	t	f
2478	test	测试	Constant	\N	\N	25.2	\N	\N	\N	\N		2018-05-18 14:16:07.418+08	2018-05-18 14:16:07.418+08	efdb6604-3283-41b2-9a30-aa532a49d897	2	t	f
1265	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:40.3+08	2018-01-08 08:30:40.3+08	5c18688a-731b-40d0-b4dd-4ba002026bb3	5	t	f
1266	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:40.303+08	2018-01-08 08:30:40.303+08	5c18688a-731b-40d0-b4dd-4ba002026bb3	5	t	f
1267	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:40.309+08	2018-01-08 08:30:40.309+08	5c18688a-731b-40d0-b4dd-4ba002026bb3	1	t	f
2856	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:43:07.058+08	2019-02-25 15:43:07.058+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	1	t	f
2857	range	量程	Constant	\N		(0,1)	0	\N	\N	MPa		2019-02-25 15:43:07.06+08	2019-02-25 15:43:07.06+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	5	t	f
2587	sensortype	传感器类型	Constant	\N		standard485	0			\N		2018-09-05 09:55:00.367+08	2018-09-05 14:59:39.414+08	5c6b67cd-fe7a-472e-8907-63baa655cb42	5	t	f
1273	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:40.883+08	2018-01-08 08:30:40.883+08	9bdf8d5c-e571-4dd4-9614-0099745b0a73	5	t	f
1274	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:40.886+08	2018-01-08 08:30:40.886+08	9bdf8d5c-e571-4dd4-9614-0099745b0a73	5	t	f
1275	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:40.888+08	2018-01-08 08:30:40.888+08	9bdf8d5c-e571-4dd4-9614-0099745b0a73	1	t	f
2858	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:43:07.062+08	2019-02-25 15:43:07.062+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	5	t	f
2859	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:43:07.064+08	2019-02-25 15:43:07.064+08	9bd34a2c-73d9-4615-af4b-1d61a6fc81bd	1	t	f
2997	gps_pre	执行前延迟-GPS	Variable	\N		25	0	600	0	百毫秒		2019-03-28 10:30:00.133+08	2019-04-02 09:56:56.569+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
2978	pm100_p1	系数-PM100	Variable	\N		1	16	9999	-9999			2019-03-27 20:18:39.017+08	2019-04-08 13:52:51.557+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2610	acqtiming	定时触发采样时长(s)	Variable	\N			0	50	1	s		2018-09-25 15:45:24.036+08	2019-08-22 09:44:11.641+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	f	f
2146	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			2018-03-20 15:09:42.681+08	2018-03-20 15:09:42.681+08	874e1ee5-94fe-49aa-94b0-6d6bfef680bc	2	t	f
2175	sensortype	传感器类型	Constant	\N		wsd	0					2018-03-23 17:06:47.801+08	2018-04-09 15:13:28.028+08	bc476c11-0887-40fb-ae9e-06ab514a44c0	5	t	f
2451	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-04-16 16:01:22.172+08	2018-04-16 16:01:22.172+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	5	t	f
780	range	量程	Constant	\N		(-5000,5000)	0			με		2018-01-05 11:50:25.191+08	2018-01-05 14:09:31.096+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	5	t	f
2453	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-04-16 16:01:22.177+08	2018-04-16 16:01:22.177+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	5	t	f
2454	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-04-16 16:01:22.179+08	2018-04-16 16:01:22.179+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	5	t	f
2633	sensortype	设备类型	Constant	\N		pit	0			\N		2018-10-30 18:29:43.875+08	2018-10-31 08:21:54.561+08	a5dda81c-6a85-4e7b-97f3-be45b980646e	5	t	f
2452	range	量程	Constant	\N		(-300,300)	0			kN		2018-04-16 16:01:22.175+08	2018-04-16 17:50:23.508+08	4fbfd1e0-1a1a-4d6f-b99b-f6254cf21d66	5	t	f
2479	test1	测试	Tag	\N	\N	\N	\N	\N	\N			2018-05-18 14:22:06.832+08	2018-05-18 14:22:06.832+08	efdb6604-3283-41b2-9a30-aa532a49d897	\N	t	f
1283	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:41.422+08	2018-01-08 08:30:41.422+08	f90de97b-b6e8-417a-b628-7b8e4bb9e335	1	t	f
2510	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-07-19 09:35:55.198+08	2018-07-19 09:35:55.198+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5	t	f
2511	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-07-19 09:35:55.2+08	2018-07-19 09:35:55.2+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5	t	f
2081	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 08:03:41.093+08	2018-03-14 08:03:41.093+08	77d8ba09-082d-405d-aeca-9a0d66f902c3	5	t	f
2514	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2018-07-19 09:35:56.587+08	2018-07-19 09:35:56.587+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	5	t	f
2515	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-07-19 09:35:56.589+08	2018-07-19 09:35:56.589+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	5	t	f
866	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 14:50:21.912+08	2018-01-05 14:50:21.912+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	5	t	f
2512	range	量程	Constant	\N		(-5000,5000)	0					2018-07-19 09:35:55.203+08	2018-07-19 09:49:54.683+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5	t	f
868	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 14:50:21.918+08	2018-01-05 14:50:21.918+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	1	t	f
2516	range	量程	Constant	\N		(-6000,6000)	0					2018-07-19 09:35:56.592+08	2018-07-19 09:51:16.302+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	5	t	f
2588	protocolcode	协议号	Constant	\N	\N	9002	\N	\N	\N	\N		2018-09-06 11:04:09.938+08	2018-09-06 11:04:09.938+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	5	t	f
2618	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-09-29 15:46:46.755+08	2018-09-29 15:46:46.755+08	d5df12f1-ea7f-45d0-81a9-79a1fb4e0c90	5	t	f
1289	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 08:30:41.989+08	2018-01-08 08:30:41.989+08	44c42c98-a486-411a-8813-c6ba48aab00c	5	t	f
1290	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 08:30:41.991+08	2018-01-08 08:30:41.991+08	44c42c98-a486-411a-8813-c6ba48aab00c	5	t	f
1291	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 08:30:41.993+08	2018-01-08 08:30:41.993+08	44c42c98-a486-411a-8813-c6ba48aab00c	1	t	f
2621	protocolcode	协议号	Constant	\N	\N	9002	\N	\N	\N	\N		2018-10-10 16:53:47.28+08	2018-10-10 16:53:47.28+08	e5ed186c-f248-4b06-ae1c-8ada54d1c67d	5	t	f
1410	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 15:14:58.289+08	2018-01-08 15:14:58.289+08	e2d104b1-9c57-4a16-8d05-07817bc8b785	1	t	f
2625	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-10-12 09:21:28.244+08	2018-10-12 09:21:28.244+08	177e7e33-3dae-4163-8d7d-1778e70b4a8b	5	t	f
1411	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 15:14:58.292+08	2018-01-08 15:14:58.292+08	e2d104b1-9c57-4a16-8d05-07817bc8b785	5	t	f
1412	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 15:14:58.294+08	2018-01-08 15:14:58.294+08	e2d104b1-9c57-4a16-8d05-07817bc8b785	5	t	f
2627	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-10-24 15:43:36.227+08	2018-10-24 15:43:36.227+08	3ad4be85-c6f9-46b8-97dd-39d01e4ef858	5	t	f
1418	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 15:25:13.488+08	2018-01-08 15:25:13.488+08	4866de4e-56ad-435f-a21b-0f2b00011e12	5	t	f
1420	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 15:50:34.81+08	2018-01-08 15:50:34.81+08	72fb9e20-7c7b-4ccb-9da1-d8600223beca	5	t	f
2644	formula	多项式公式	Constant	\N	\N	L=A*△θ^2+B*△θ+C	\N	\N	\N	\N		2018-11-17 09:39:56.61+08	2018-11-17 09:39:56.61+08	f12a248f-faab-43f2-bfbe-088da7f471dc	5	t	f
2651	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-11-23 10:32:50.918+08	2018-11-23 10:32:50.918+08	87a47520-e1a3-474c-b8b2-b1fd5dd521a9	5	t	f
2654	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-12-11 14:09:43.576+08	2018-12-11 14:09:43.576+08	0b4f75d6-d921-4913-a9de-cfff3b99d56e	5	t	f
864	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 14:50:21.906+08	2018-03-02 10:35:27.598+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	5	t	f
2673	range	量程	Constant	\N		(0,360)	0			°		2018-12-14 11:36:57.535+08	2018-12-14 11:37:39.223+08	6a6797bd-fdda-4b37-bbab-ce377a01521b	5	t	f
2674	sensortype	传感器类型	Constant	\N	\N	qixiangzhan	\N	\N	\N	\N		2018-12-21 17:23:02.757+08	2018-12-21 17:23:02.757+08	11c61b7f-9d36-4273-b679-898a09fe21e9	5	t	f
2690	sensorType	设备类型	Constant	\N	\N	YB	\N	\N	\N	\N		2019-01-07 16:46:20.095+08	2019-01-07 16:46:20.095+08	e6c538b8-f82a-4e8f-9d47-529a835fc779	5	t	f
2691	sensortype	传感器类型	Constant	\N		sw	0	\N	\N			2019-01-19 17:15:44.553+08	2019-01-19 17:15:44.553+08	0a341896-3c5d-4e60-af19-fe5f645c6967	5	t	f
2693	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-01-19 17:15:44.558+08	2019-01-19 17:15:44.558+08	0a341896-3c5d-4e60-af19-fe5f645c6967	5	t	f
2692	protocolcode	协议号	Constant	\N		9005	0			\N		2019-01-19 17:15:44.556+08	2019-01-19 17:16:28.599+08	0a341896-3c5d-4e60-af19-fe5f645c6967	1	t	f
2702	sensortype	传感器类型	Constant	\N		wd	0			\N		2019-01-25 11:16:58.826+08	2019-01-25 11:17:44.387+08	04425c48-b89c-498d-8372-b3a64d1abf1e	5	t	f
2705	interval	采集间隔	Variable	\N	\N	5	\N	1400	0	min		2019-02-13 17:25:27.786+08	2019-02-13 17:25:27.786+08	9d5905bc-0969-4032-ad57-69d6490fbc47	1	t	f
2711	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-22 11:35:12.169+08	2019-02-22 11:35:12.169+08	d1b35088-9410-4203-924c-75b60634c7c6	5	t	f
2709	size	尺寸	Variable	\N	64*80,96*48,96*96	64*80	0			\N		2019-02-15 17:16:22.237+08	2019-02-15 17:22:38.456+08	e1d537c6-2a5b-4b97-91ea-a2bd94093494	4	t	f
2710	postion	位置	Variable	\N	male,female,public	public	\N	\N	\N	\N		2019-02-21 09:43:57.893+08	2019-02-21 09:43:57.893+08	d5bfb91e-3d09-4068-ac33-5974e8b7f039	4	t	f
2719	Device_ID	设备ID	Variable	\N			0	\N	\N	\N	传感器唯一ID号	2019-02-25 11:38:45.237+08	2019-02-25 11:38:45.237+08	ef68a37c-37fa-40d7-8537-dcbc64eaf1e1	5	t	f
2860	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:44:37.214+08	2019-02-25 15:44:37.214+08	998a52d3-f5ee-4d52-997f-1865b390e26b	1	t	f
2861	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:44:37.217+08	2019-02-25 15:44:37.217+08	998a52d3-f5ee-4d52-997f-1865b390e26b	1	t	f
2862	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:44:37.221+08	2019-02-25 15:44:37.221+08	998a52d3-f5ee-4d52-997f-1865b390e26b	5	t	f
2148	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-21 13:45:09.035+08	2018-03-21 13:45:09.035+08	1f6ae927-989f-48b3-9fa4-18518326953b	5	t	f
2152	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-21 13:47:25.318+08	2018-03-21 13:47:25.318+08	c50b3ecc-a416-4991-b64f-f2c79d8d1848	5	t	f
906	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 14:53:53.085+08	2018-03-02 10:35:14.609+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	5	t	f
854	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 14:46:16.366+08	2018-01-05 14:46:16.366+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	5	t	f
856	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 14:46:16.37+08	2018-01-05 14:46:16.37+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	1	t	f
2178	protocolcode	协议号	Constant	\N		1502	0			\N		2018-03-23 17:57:01.928+08	2018-04-09 15:14:01.434+08	d32eacce-7db0-4c15-b17c-f1d870389c14	5	t	f
2095	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 15:32:30.978+08	2018-03-14 15:32:30.978+08	5d399cb2-7e5a-4a27-bff0-e1769f43499d	5	t	f
2176	sensortype	传感器类型	Constant	\N		cx	0			\N		2018-03-23 17:40:52.863+08	2018-04-09 15:14:06.191+08	d32eacce-7db0-4c15-b17c-f1d870389c14	5	t	f
852	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 14:46:16.363+08	2018-03-02 10:35:39.767+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	5	t	f
930	range	量程	Constant	\N		(-75,75)	0			kN	正值是张拉力，负值是承压力	2018-01-05 15:06:25.946+08	2018-03-02 10:46:03.152+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	5	t	f
2096	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-03-14 15:32:30.981+08	2018-03-14 15:32:30.981+08	5d399cb2-7e5a-4a27-bff0-e1769f43499d	1	t	f
2097	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 15:32:44.493+08	2018-03-14 15:32:44.493+08	aa6f3b0e-9bd2-41e8-801d-730aca3e32fb	5	t	f
2098	channelId	通道号	Variable	\N	\N	1	\N	255	1			2018-03-14 15:32:44.496+08	2018-03-14 15:32:44.496+08	aa6f3b0e-9bd2-41e8-801d-730aca3e32fb	1	t	f
2655	range	量程	Variable	\N		(0,1500)	0			mm		2018-12-11 14:10:14.369+08	2018-12-11 14:10:45.44+08	0b4f75d6-d921-4913-a9de-cfff3b99d56e	5	t	f
2675	sensortype	传感器类型	Constant	\N	\N	fsfx	\N	\N	\N	\N		2018-12-21 17:23:59.061+08	2018-12-21 17:23:59.061+08	495526a7-7701-4e9c-8dfd-bbfd7e0b163b	5	t	f
889	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 14:53:22.541+08	2018-01-05 14:53:22.541+08	607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e	5	t	f
890	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 14:53:22.544+08	2018-01-05 14:53:22.544+08	607fa5aa-d8d7-48be-bf60-b8a6d0de2e8e	1	t	f
2086	sensortype	传感器类型	Constant	\N		cx	0					2018-03-14 09:28:09.561+08	2018-07-23 17:13:05.627+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	5	t	f
2085	protocolcode	协议号	Constant	\N		1503	0			\N	Modbus杆式测斜协议	2018-03-14 09:27:36.399+08	2018-07-23 17:13:14.688+08	c9946e27-bce7-41eb-b341-d6b03a7f115f	5	t	f
2517	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-07-23 17:15:42.3+08	2018-07-23 17:15:42.3+08	af1cd7e8-52e1-4411-9c9a-20bc82a2786d	5	t	f
2589	sensortype	传感器类型	Constant	\N		standard	0			\N		2018-09-07 09:46:01.485+08	2018-09-07 10:18:34.645+08	be5be8af-c339-4f15-b2b7-0f16e1e51792	5	t	f
896	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 14:53:24.82+08	2018-01-05 14:53:24.82+08	49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae	5	t	f
897	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 14:53:24.822+08	2018-01-05 14:53:24.822+08	49b0b2b7-b6e7-4ec8-adf8-4c94dcfb2eae	1	t	f
2591	sensortype	传感器类型	Constant	\N		standard	0	\N	\N	\N		2018-09-07 10:55:19.84+08	2018-09-07 10:55:19.84+08	97078fa2-e944-487b-8913-e3c2c33c6ff0	5	t	f
2620	range	量程	Constant	\N	\N	(-30,30)	\N	\N	\N	°		2018-10-05 09:56:54.423+08	2018-10-05 09:56:54.423+08	6ac55754-f252-4ba5-ba9c-72a158734b97	5	t	f
2622	protocolcode	协议号	Constant	\N	\N	9004	\N	\N	\N	\N		2018-10-11 14:47:31.929+08	2018-10-11 14:47:31.929+08	177e7e33-3dae-4163-8d7d-1778e70b4a8b	1	t	f
2623	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N	\N		2018-10-11 15:17:22.717+08	2018-10-11 15:17:22.717+08	e5ed186c-f248-4b06-ae1c-8ada54d1c67d	5	t	f
2628	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N			2018-10-24 15:44:13.681+08	2018-10-24 15:44:13.681+08	3ad4be85-c6f9-46b8-97dd-39d01e4ef858	5	t	f
2632	initial	初值	Variable	\N		0	3	9999999	0	kWh		2018-10-26 17:54:01.968+08	2018-11-01 16:40:37.535+08	4a91ace7-e5da-44c8-843d-43fb6a130847	2	t	f
2641	sourceld	2	Variable	\N	\N		\N	\N	\N	\N		2018-11-05 11:05:43.253+08	2018-11-05 11:05:43.253+08	706988da-65c8-4388-a4ab-47e553cd1085	5	t	f
908	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 14:53:53.091+08	2018-01-05 14:53:53.091+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	5	t	f
910	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 14:53:53.095+08	2018-01-05 14:53:53.095+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	1	t	f
2645	A	二次项系数A	Variable	\N	\N	0	6	10000	-10000			2018-11-17 09:41:07.461+08	2018-11-17 09:41:07.461+08	f12a248f-faab-43f2-bfbe-088da7f471dc	2	t	f
912	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 14:57:25.935+08	2018-01-05 14:57:25.935+08	e6a3a1f5-2a8f-48a0-9758-407065bae1e9	5	t	f
913	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-05 14:57:25.938+08	2018-01-05 14:57:25.938+08	e6a3a1f5-2a8f-48a0-9758-407065bae1e9	1	t	f
2652	deviceType	设备类型	Constant	\N	\N	DTU	\N	\N	\N	\N		2018-11-23 16:18:45.326+08	2018-11-23 16:18:45.326+08	1db3d346-d4ae-41e3-9a98-d22760482541	5	t	f
2653	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N			2018-11-23 16:18:45.328+08	2018-11-23 16:18:45.328+08	1db3d346-d4ae-41e3-9a98-d22760482541	5	t	f
2863	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:44:37.223+08	2019-02-25 15:44:37.223+08	998a52d3-f5ee-4d52-997f-1865b390e26b	5	t	f
2703	sensortype	传感器类型	Constant	\N	\N	yb	\N	\N	\N	\N		2019-01-25 11:17:28.922+08	2019-01-25 11:17:28.922+08	d94bb4f7-d5a8-4bb0-b866-c8008e5123ab	5	t	f
2707	interval2	2级告警阈值间隔	Variable	\N	\N	5	\N	1440	1	min		2019-02-13 17:27:50.298+08	2019-02-13 17:27:50.298+08	9d5905bc-0969-4032-ad57-69d6490fbc47	1	t	f
2712	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-22 11:35:40.5+08	2019-02-22 11:35:40.5+08	283a3cd5-8593-4b92-a528-bbd35a07b288	5	t	f
2720	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:41:29.997+08	2019-02-25 11:41:29.997+08	a97834b4-727b-42ad-9ce0-aede595a5727	5	t	f
2721	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:41:30.001+08	2019-02-25 11:41:30.001+08	a97834b4-727b-42ad-9ce0-aede595a5727	1	t	f
2722	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:41:30.004+08	2019-02-25 11:41:30.004+08	a97834b4-727b-42ad-9ce0-aede595a5727	5	t	f
2723	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:41:30.006+08	2019-02-25 11:41:30.006+08	a97834b4-727b-42ad-9ce0-aede595a5727	1	t	f
2724	range	量程	Constant	\N		(0,0.2)	0	\N	\N	MPa		2019-02-25 11:41:30.008+08	2019-02-25 11:41:30.008+08	a97834b4-727b-42ad-9ce0-aede595a5727	5	t	f
2725	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:41:30.012+08	2019-02-25 11:41:30.012+08	a97834b4-727b-42ad-9ce0-aede595a5727	5	t	f
2864	range	量程	Constant	\N		(0,2)	0	\N	\N	MPa		2019-02-25 15:44:37.226+08	2019-02-25 15:44:37.226+08	998a52d3-f5ee-4d52-997f-1865b390e26b	5	t	f
2865	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:44:37.229+08	2019-02-25 15:44:37.229+08	998a52d3-f5ee-4d52-997f-1865b390e26b	5	t	f
2917	Account	账号	Variable	\N	\N		\N	\N	\N	\N		2019-03-15 11:32:44.159+08	2019-03-15 11:32:44.159+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	5	t	f
2149	channelId	通道号	Variable	\N	\N	\N	\N	128	1			2018-03-21 13:45:47.548+08	2018-03-21 13:45:47.548+08	1f6ae927-989f-48b3-9fa4-18518326953b	1	t	f
2151	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-21 13:47:07.222+08	2018-03-21 13:47:07.222+08	abfa6634-cca0-4696-b67e-1c2eb2e57c9b	1	t	f
1815	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 15:00:11.27+08	2018-03-26 15:47:55.056+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	5	t	f
1833	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 15:00:12.545+08	2018-03-26 16:16:12.806+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	5	t	f
1842	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 15:00:12.738+08	2018-03-26 16:17:41.379+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	5	t	f
2177	sensortype	传感器类型	Constant	\N		cx	0			\N		2018-03-23 17:55:54.66+08	2018-04-09 15:14:32.533+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	5	t	f
1424	humiRange	湿度量程	Constant	\N	\N	(0,100)	\N	\N	\N	%		2018-01-08 16:04:46.005+08	2018-01-08 16:04:46.005+08	e5b27a73-2d4c-4b53-8bcd-86583097a730	5	t	f
2708	interval3	3级告警阈值间隔	Variable	\N	\N	5	\N	1440	1	min		2019-02-13 17:28:23.012+08	2019-02-13 17:28:23.012+08	9d5905bc-0969-4032-ad57-69d6490fbc47	1	t	f
1581	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 11:31:58.85+08	2018-01-09 11:31:58.85+08	92bad770-f845-4bd8-8e2b-55e5343a2201	1	t	f
1582	range	量程	Constant	\N		(0,100)	0	\N	\N	%RH		2018-01-09 11:31:58.853+08	2018-01-09 11:31:58.853+08	92bad770-f845-4bd8-8e2b-55e5343a2201	5	t	f
1588	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-09 11:31:58.868+08	2018-01-09 11:31:58.868+08	92bad770-f845-4bd8-8e2b-55e5343a2201	5	t	f
2713	sensortype	传感器类型	Constant	\N		dy	0			\N		2019-02-22 13:27:41.913+08	2019-02-22 13:41:41.358+08	ef6476c9-709e-4afb-a4d9-57009ee3ecf5	5	t	f
1697	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-18 15:22:34.537+08	2018-01-18 15:22:34.537+08	c0b0b779-cafb-4d7f-b4ff-64534e422738	5	t	f
1698	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-18 15:22:34.717+08	2018-01-18 15:22:34.717+08	abefa36d-6587-4818-bb39-e14a51c26b4e	5	t	f
1699	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-18 15:22:34.895+08	2018-01-18 15:22:34.895+08	79ef29a0-9796-43ce-957d-952d3b16d70a	5	t	f
1700	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-18 15:22:35.059+08	2018-01-18 15:22:35.059+08	ef4d9187-0ca8-44c7-b7f5-42e6c0904fd5	5	t	f
2726	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:42:07.458+08	2019-02-25 11:42:07.458+08	bf5a92b7-59ab-429b-bce7-da858650205e	1	t	f
2518	Device_ID	设备ID	Variable	\N			0			\N	传感器唯一ID号	2018-07-24 09:54:19.996+08	2018-07-28 13:35:35.538+08	4a1c835d-1f99-4d95-8d21-ceab11c714d3	5	t	f
1816	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 15:00:11.272+08	2018-01-23 15:00:11.272+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	1	t	f
1817	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:00:11.274+08	2018-01-23 15:00:11.274+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	5	t	f
2727	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:42:07.462+08	2019-02-25 11:42:07.462+08	bf5a92b7-59ab-429b-bce7-da858650205e	5	t	f
2624	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-10-11 15:18:27.984+08	2018-10-11 15:18:27.984+08	e5ed186c-f248-4b06-ae1c-8ada54d1c67d	5	t	f
2629	protocolcode	协议号	Constant	\N	\N	2405	\N	\N	\N			2018-10-24 15:44:50.575+08	2018-10-24 15:44:50.575+08	3ad4be85-c6f9-46b8-97dd-39d01e4ef858	1	t	f
2646	B	一次项系数B	Variable	\N	\N	1	6	10000	-10000			2018-11-17 09:42:06.793+08	2018-11-17 09:42:06.793+08	f12a248f-faab-43f2-bfbe-088da7f471dc	2	t	f
1834	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 15:00:12.547+08	2018-01-23 15:00:12.547+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	1	t	f
1835	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:00:12.548+08	2018-01-23 15:00:12.548+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	5	t	f
2728	range	量程	Constant	\N		(0,0.4)	0	\N	\N	MPa		2019-02-25 11:42:07.465+08	2019-02-25 11:42:07.465+08	bf5a92b7-59ab-429b-bce7-da858650205e	5	t	f
1843	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 15:00:12.739+08	2018-01-23 15:00:12.739+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	1	t	f
1844	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 15:00:12.741+08	2018-01-23 15:00:12.741+08	91766d07-1ae8-4f40-9fed-0d9a21eaf6f3	5	t	f
2729	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:42:07.468+08	2019-02-25 11:42:07.468+08	bf5a92b7-59ab-429b-bce7-da858650205e	5	t	f
2730	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:42:07.471+08	2019-02-25 11:42:07.471+08	bf5a92b7-59ab-429b-bce7-da858650205e	1	t	f
1838	range	量程	Constant	\N		(0,0.6)	0			MPa		2018-01-23 15:00:12.553+08	2018-01-23 15:01:26.726+08	2aba0129-a2af-4e99-ad8e-ca8e20aa62f6	5	t	f
1820	range	量程	Constant	\N		(0,1.0)	0			MPa		2018-01-23 15:00:11.279+08	2018-01-23 15:02:33.408+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	5	t	f
2731	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:42:07.473+08	2019-02-25 11:42:07.473+08	bf5a92b7-59ab-429b-bce7-da858650205e	5	t	f
2866	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:46:09.674+08	2019-02-25 15:46:09.674+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	5	t	f
918	range	量程	Constant	\N		(-136,136)	0			kN	正值是张拉力，负值是承压力	2018-01-05 14:58:44.748+08	2018-03-02 10:45:07.073+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	5	t	f
2867	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2019-02-25 15:46:09.677+08	2019-02-25 15:46:09.677+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	5	t	f
2868	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2019-02-25 15:46:09.68+08	2019-02-25 15:46:09.68+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	5	t	f
2869	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:46:09.683+08	2019-02-25 15:46:09.683+08	a62aba76-29bb-43b8-a1fe-2dff7c77ecb8	1	t	f
2918	PassWord	密码	Variable	\N	\N		\N	\N	\N			2019-03-15 11:32:56.515+08	2019-03-15 11:32:56.515+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	5	t	f
2998	pm100_post	读取记录前延迟-PM100	Variable	\N		35	0	600	0	百毫秒		2019-03-28 10:31:04.895+08	2019-04-02 09:56:18.561+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
2971	pm100_st	模组型号-PM100	Constant	\N		pm100	0					2019-03-27 20:04:23.206+08	2019-04-02 09:56:34.206+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
2150	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-21 13:46:34.061+08	2018-03-21 13:46:34.061+08	abfa6634-cca0-4696-b67e-1c2eb2e57c9b	5	t	f
1301	cpu使用率	cpu使用率	Variable	\N	\N	5.0	2	100.0	0.0	%	cpu使用率	2018-01-08 09:46:41.168+08	2018-01-08 09:46:41.168+08	078b521f-572a-48bb-b327-09f918ef1e92	2	t	f
1302	内存使用率	内存使用率	Variable	\N	\N	5	2	100	0	%	内存使用率	2018-01-08 09:46:41.174+08	2018-01-08 09:46:41.174+08	078b521f-572a-48bb-b327-09f918ef1e92	2	t	f
1311	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 10:24:01.172+08	2018-01-08 10:24:01.172+08	e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f	5	t	f
1312	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 10:24:02.017+08	2018-01-08 10:24:02.017+08	4253e350-b64f-4b81-b19b-bcd45c6181ad	5	t	f
1313	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 10:24:02.593+08	2018-01-08 10:24:02.593+08	0eab3179-48cc-4e55-8ec9-b7516415aa75	5	t	f
1425	range	量程	Constant	\N		(-10,10)	0			°		2018-01-08 16:08:40.421+08	2018-01-08 16:10:10.948+08	7c4c667b-dbf0-4c9b-9d7d-7ad9b61b200e	5	t	f
1444	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:27:57.466+08	2018-01-08 16:27:57.466+08	f9331a24-582f-45b8-bea8-b919ffd48516	5	t	f
1443	range	量程	Constant	\N		(0,280)	0			mm		2018-01-08 16:27:57.463+08	2018-01-08 16:47:10.943+08	f9331a24-582f-45b8-bea8-b919ffd48516	5	t	f
1458	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:50:49.899+08	2018-01-08 16:50:49.899+08	64d50498-d37a-4f4a-99f8-2268e82a035e	5	t	f
2981	aqi_p3	系数-NO2	Variable	\N		1	16	9999	-9999			2019-03-27 20:25:24.916+08	2019-04-08 13:51:49.74+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
1459	range	量程	Constant	\N		(0,4000)	0			mm/s		2018-01-08 16:50:49.903+08	2018-01-08 16:51:17.712+08	64d50498-d37a-4f4a-99f8-2268e82a035e	5	t	f
2179	protocolcode	协议号	Constant	\N		1503	0			\N		2018-03-23 17:57:35.728+08	2018-04-09 15:14:26.68+08	771be2fa-a2f9-4ba8-8c08-76b091627b87	5	t	f
1528	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-08 19:23:48.717+08	2018-01-08 19:23:48.717+08	537cf41f-69a4-47de-81ee-63485ab8df1d	1	t	f
2483	123456	12	Variable	\N	\N	\N	\N	12	12	\N		2018-05-28 17:34:00.466+08	2018-05-28 17:34:00.466+08	899dde06-bd1d-4215-963e-23596c3fda7f	1	t	f
1531	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 19:23:48.729+08	2018-01-08 19:23:48.729+08	537cf41f-69a4-47de-81ee-63485ab8df1d	5	t	f
2592	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-09-07 11:09:31.058+08	2018-09-07 11:19:16.913+08	afb69a31-61c2-417c-b62e-c41730b3e6a1	5	t	f
2594	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2018-09-07 11:22:10.562+08	2018-09-07 11:22:10.562+08	db345382-4b53-424d-b563-909bfe0a36cd	5	t	f
1589	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 14:07:31.224+08	2018-01-09 14:07:31.224+08	0beb606c-f306-4476-8526-31646c8107e5	1	t	f
1624	moduleId	模块号	Variable	\N		0	0	\N	\N	\N		2018-01-12 10:08:09.36+08	2018-01-12 10:08:09.36+08	301f43b2-e055-4169-8a27-c3d69b246a19	5	t	f
1625	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-12 10:08:09.364+08	2018-01-12 10:08:09.364+08	301f43b2-e055-4169-8a27-c3d69b246a19	1	t	f
1590	range	量程	Constant	\N		(0,359)	0			°		2018-01-09 14:07:31.228+08	2018-01-09 14:10:09.236+08	0beb606c-f306-4476-8526-31646c8107e5	5	t	f
2626	sensortype	传感器类型	Constant	\N		sw	0					2018-10-12 09:21:51.509+08	2018-10-29 15:41:24.106+08	177e7e33-3dae-4163-8d7d-1778e70b4a8b	5	t	f
1600	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-09 14:14:58.479+08	2018-01-09 14:14:58.479+08	85f5b6fd-92cc-4d22-9dff-952c59003e3f	5	t	f
1604	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 14:14:58.488+08	2018-01-09 14:14:58.488+08	85f5b6fd-92cc-4d22-9dff-952c59003e3f	1	t	f
2698	interval1	1级阈值告警粒度	Variable	\N		5	0	1440	1	min		2019-01-22 15:15:43.203+08	2019-01-22 15:16:18.477+08	ff9746d5-839e-46dc-aae9-ec714680e041	1	t	f
1599	range	量程	Constant	\N		(0,70)	0			m/s		2018-01-09 14:14:58.477+08	2018-01-09 14:51:10.494+08	85f5b6fd-92cc-4d22-9dff-952c59003e3f	5	t	f
2636	sensortype	传感器类型	Constant	\N		vistors	0			\N		2018-10-30 19:23:21.9+08	2018-10-30 20:53:20.66+08	d5bfb91e-3d09-4068-ac33-5974e8b7f039	5	t	f
1626	formula	计算公式	Constant	\N		ε=k*(fi^2-f0^2)+kt*(ti-to)	0	\N	\N			2018-01-12 10:08:09.367+08	2018-01-12 10:08:09.367+08	301f43b2-e055-4169-8a27-c3d69b246a19	5	t	f
1627	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-12 10:08:09.37+08	2018-01-12 10:08:09.37+08	301f43b2-e055-4169-8a27-c3d69b246a19	5	t	f
1628	t0	初始温度	Variable	\N	\N	0	2	200	-50	℃		2018-01-12 10:08:09.373+08	2018-01-12 10:08:09.373+08	301f43b2-e055-4169-8a27-c3d69b246a19	2	t	f
1629	range	量程	Constant	\N		(-3000,3000)	0	\N	\N	με		2018-01-12 10:08:09.376+08	2018-01-12 10:08:09.376+08	301f43b2-e055-4169-8a27-c3d69b246a19	5	t	f
1630	f0	初始频率	Variable	\N	\N	1600	5	999999	-999999	Hz		2018-01-12 10:08:09.379+08	2018-01-12 10:08:09.379+08	301f43b2-e055-4169-8a27-c3d69b246a19	2	t	f
1631	kt	温度补偿系数	Variable	\N	\N	0	16	9999999	-99999999			2018-01-12 10:08:09.381+08	2018-01-12 10:08:09.381+08	301f43b2-e055-4169-8a27-c3d69b246a19	2	t	f
1632	k	模量系数	Variable	\N	\N	0	16	999999999	-99999999			2018-01-12 10:08:09.383+08	2018-01-12 10:08:09.383+08	301f43b2-e055-4169-8a27-c3d69b246a19	2	t	f
2099	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-14 15:32:53.623+08	2018-03-14 15:32:53.623+08	4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee	5	t	f
2100	channelId	通道号	Variable	\N		1	0	255	1			2018-03-14 15:32:53.626+08	2018-03-14 15:32:53.626+08	4af8678b-8f9b-48e6-b8f0-ea7ec7ed53ee	1	t	f
2647	C	常量	Variable	\N	\N	0	6	10000	-10000			2018-11-17 09:44:59.372+08	2018-11-17 09:44:59.372+08	f12a248f-faab-43f2-bfbe-088da7f471dc	2	t	f
2697	interval	采集间隔	Variable	\N	\N	5	\N	1400	0	min		2019-01-22 15:15:43.201+08	2019-01-22 15:15:43.201+08	ff9746d5-839e-46dc-aae9-ec714680e041	1	t	f
2700	interval3	3级阈值告警粒度	Variable	\N	\N	5	\N	1400	1	min		2019-01-22 15:15:43.207+08	2019-01-22 15:15:43.207+08	ff9746d5-839e-46dc-aae9-ec714680e041	1	t	f
2699	interval2	2级阈值告警粒度	Variable	\N		5	0	1440	1	min		2019-01-22 15:15:43.205+08	2019-01-22 15:16:15.087+08	ff9746d5-839e-46dc-aae9-ec714680e041	1	t	f
2593	sensortype	传感器类型	Constant	\N		dy	0			\N		2018-09-07 11:18:28.055+08	2019-02-22 13:50:17.326+08	6c5b2840-b01d-4bb3-8ab1-a831b3880184	5	t	f
2732	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:44:07.975+08	2019-02-25 11:44:07.975+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	1	t	f
2733	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:44:07.979+08	2019-02-25 11:44:07.979+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	5	t	f
2734	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:44:07.981+08	2019-02-25 11:44:07.981+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	5	t	f
2735	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:44:07.983+08	2019-02-25 11:44:07.983+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	1	t	f
2736	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:44:07.985+08	2019-02-25 11:44:07.985+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	5	t	f
2737	range	量程	Constant	\N		(0,0.6)	0	\N	\N	MPa		2019-02-25 11:44:07.987+08	2019-02-25 11:44:07.987+08	b8904c0e-1294-49f9-b0e9-dadd79c4efe4	5	t	f
2870	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:46:53.851+08	2019-02-25 15:46:53.851+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	1	t	f
2871	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:46:53.854+08	2019-02-25 15:46:53.854+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	5	t	f
2872	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:46:53.856+08	2019-02-25 15:46:53.856+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	1	t	f
2873	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:46:53.858+08	2019-02-25 15:46:53.858+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	5	t	f
2153	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-21 13:47:47.269+08	2018-03-21 13:47:47.269+08	c50b3ecc-a416-4991-b64f-f2c79d8d1848	1	t	f
959	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:18:31.361+08	2018-01-05 15:18:31.361+08	73a7b800-25d7-41ad-872d-96cc4f9430de	5	t	f
961	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:18:31.365+08	2018-01-05 15:18:31.365+08	73a7b800-25d7-41ad-872d-96cc4f9430de	1	t	f
2192	range	量程	Constant	\N		(-3000,3000)	0			με		2018-03-26 11:16:13.122+08	2018-03-26 11:17:40.401+08	2e0d00cd-a321-4504-b716-41813848cbdb	5	t	f
2225	range	量程	Constant	\N		(-5000,5000)	0	\N	\N	με		2018-03-26 11:27:35.472+08	2018-03-26 11:27:35.472+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	5	t	f
2226	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-03-26 11:28:21.386+08	2018-03-26 11:28:21.386+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	1	t	f
957	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:18:31.356+08	2018-03-02 10:34:58.437+08	73a7b800-25d7-41ad-872d-96cc4f9430de	5	t	f
1606	RL	数字量下限	Constant	\N		0	0			mm/min		2018-01-09 15:01:35.229+08	2018-01-09 15:25:50.443+08	db974c14-3d61-403d-b847-e0523ad53964	1	t	f
1426	range	量程	Constant	\N		(0,5000)	0			mm/s		2018-01-08 16:09:57.762+08	2018-01-08 16:49:58.833+08	217607ad-e8e6-4940-91ff-dc4d831cccbc	5	t	f
1537	range	量程	Constant	\N	\N	(0,100)	\N	\N	\N	%		2018-01-08 19:24:50.444+08	2018-01-08 19:24:50.444+08	f55d7414-2db9-4c07-ad9b-34637318171e	5	t	f
1544	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-08 19:28:51.397+08	2018-01-08 19:28:51.397+08	2dead818-122a-42d9-8f52-3aa8d92ab0c3	5	t	f
1545	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-08 19:28:51.399+08	2018-01-08 19:28:51.399+08	2dead818-122a-42d9-8f52-3aa8d92ab0c3	1	t	f
1546	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-08 19:28:51.401+08	2018-01-08 19:28:51.401+08	2dead818-122a-42d9-8f52-3aa8d92ab0c3	5	t	f
2235	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2018-03-26 11:32:31.618+08	2018-03-26 11:32:31.618+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	1	t	f
2232	range	量程	Constant	\N		(-75,75)	0			kN		2018-03-26 11:30:25.52+08	2018-03-26 11:32:46.14+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
2234	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:30:25.535+08	2018-04-09 15:05:16.217+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
2233	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:30:25.528+08	2018-04-09 15:05:21.481+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
2231	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:30:25.514+08	2018-04-09 15:05:26.793+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
2222	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:27:35.464+08	2018-04-09 15:05:52.137+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	5	t	f
2223	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:27:35.466+08	2018-04-09 15:05:57.898+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	5	t	f
2224	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:27:35.469+08	2018-04-09 15:06:03.396+08	9297adfa-1972-45e3-a5c4-0f31a0acbe84	5	t	f
2194	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:16:13.126+08	2018-04-09 15:07:24.797+08	2e0d00cd-a321-4504-b716-41813848cbdb	5	t	f
2193	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:16:13.123+08	2018-04-09 15:07:29.621+08	2e0d00cd-a321-4504-b716-41813848cbdb	5	t	f
2191	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:16:13.119+08	2018-04-09 15:07:36.206+08	2e0d00cd-a321-4504-b716-41813848cbdb	5	t	f
2180	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 10:56:03.89+08	2018-04-09 15:15:11.049+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	5	t	f
2484	士大夫	士大夫	Variable	\N	\N	4	3	4	4	米	的首发机会d	2018-05-28 17:47:14.473+08	2018-05-28 17:47:14.473+08	899dde06-bd1d-4215-963e-23596c3fda7f	2	t	f
2520	protocolcode	协议号	Constant	\N	\N	1102	\N	\N	\N	\N		2018-07-31 17:06:37.699+08	2018-07-31 17:06:37.699+08	b3f251c1-ab5e-4427-8b38-9180d6544783	5	t	f
1605	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-09 15:01:35.225+08	2018-01-09 15:01:35.225+08	db974c14-3d61-403d-b847-e0523ad53964	5	t	f
1609	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-09 15:01:35.237+08	2018-01-09 15:01:35.237+08	db974c14-3d61-403d-b847-e0523ad53964	1	t	f
1610	formula	公式	Constant	\N	\N	y=(RH-RL)/(aH-aL)*(x-aL)+RL	\N	\N	\N	\N		2018-01-09 15:01:35.239+08	2018-01-09 15:01:35.239+08	db974c14-3d61-403d-b847-e0523ad53964	5	t	f
1611	aL	模拟量下限	Constant	\N		4	0	\N	\N	mA		2018-01-09 15:01:35.242+08	2018-01-09 15:01:35.242+08	db974c14-3d61-403d-b847-e0523ad53964	1	t	f
1612	aH	模拟量上限	Constant	\N	\N	20	\N	\N	\N	mA		2018-01-09 15:01:35.244+08	2018-01-09 15:01:35.244+08	db974c14-3d61-403d-b847-e0523ad53964	1	t	f
1608	RH	数字量上限	Constant	\N		4	0			mm/min		2018-01-09 15:01:35.234+08	2018-01-09 15:25:57.625+08	db974c14-3d61-403d-b847-e0523ad53964	1	t	f
1607	range	量程	Constant	\N		(0,4)	0			mm/min		2018-01-09 15:01:35.232+08	2018-01-09 15:29:42.85+08	db974c14-3d61-403d-b847-e0523ad53964	5	t	f
1633	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-12 11:27:20.222+08	2018-01-12 11:27:20.222+08	99978bc0-b3c7-4ba1-9064-723c2c13b95f	5	t	f
1639	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:34:03.668+08	2018-01-16 10:34:03.668+08	70177dd0-b5ab-45c0-8338-a6f69138f85f	5	t	f
1640	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:34:04.001+08	2018-01-16 10:34:04.001+08	72b0bf25-78ae-4ab5-995b-c83cfbf52484	5	t	f
1641	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:34:04.407+08	2018-01-16 10:34:04.407+08	0bae88b4-e518-4869-96ea-c833160a9914	5	t	f
1642	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 11:50:37.251+08	2018-01-16 11:50:37.251+08	0d123bba-3d2e-4252-a27e-af567da8aca1	5	t	f
1650	range	量程	Constant	\N	\N	(0,500)	\N	\N	\N	mm		2018-01-17 17:17:24.484+08	2018-01-17 17:17:24.484+08	a0bf9003-9dbd-4cc7-8bea-7da81ce69f32	5	t	f
2523	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N			2018-07-31 17:21:07.03+08	2018-07-31 17:21:07.03+08	11a0df92-8921-470b-af9c-d7593b8b1f78	5	t	f
2637	postion	厕所位置	Variable	\N	male,female,public	male	0			\N		2018-10-30 22:17:59.354+08	2018-11-05 15:28:34.211+08	b03b1516-7e4a-41a4-9765-a1a485bb998a	4	t	f
2648	dedc	去直流	Variable	\N		false	0			\N		2018-11-17 14:03:27.917+08	2018-11-17 14:09:57.637+08	e32efbee-3c36-4be6-a4d3-d5058acf1fda	3	t	f
953	range	量程	Constant	\N		(-160,160)	0			kN	正值是张拉力，负值是承压力	2018-01-05 15:18:31.346+08	2018-03-02 10:44:29.902+08	73a7b800-25d7-41ad-872d-96cc4f9430de	5	t	f
2701	enumV	枚举变量	Variable	\N	枚举1,枚举2	\N	\N	\N	\N	\N		2019-01-22 17:15:21.166+08	2019-01-22 17:15:21.166+08	67b821eb-caf8-4352-a59b-360e7c9a3ad9	4	t	f
2706	interval1	1级告警阈值间隔	Variable	\N	\N	5	\N	1400	1	min		2019-02-13 17:27:03.815+08	2019-02-13 17:27:03.815+08	9d5905bc-0969-4032-ad57-69d6490fbc47	1	t	f
2715	sensortype	传感器类型	Constant	\N		zx	0	\N	\N	\N		2019-02-22 13:35:17.655+08	2019-02-22 13:35:17.655+08	4068ff34-b211-4386-b274-0a6b12f35b59	5	t	f
2738	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:46:10.881+08	2019-02-25 11:46:10.881+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	1	t	f
2739	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:46:10.884+08	2019-02-25 11:46:10.884+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	5	t	f
950	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 15:11:56.645+08	2018-01-05 15:11:56.645+08	e2d93988-c0e0-4581-b406-e43e455f7864	5	t	f
1314	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 10:43:07.601+08	2018-01-08 10:43:07.601+08	b1c85f0b-c610-4243-83a4-3a1e87b411ad	1	t	f
2195	sensortype	设备类型	Constant	\N		zx	0			\N		2018-03-26 11:21:36.103+08	2018-03-26 11:21:41.596+08	cd2cc136-a81a-4c2d-a9cb-27fcb4b0aff3	5	t	f
1317	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 10:43:07.609+08	2018-01-08 10:43:07.609+08	b1c85f0b-c610-4243-83a4-3a1e87b411ad	5	t	f
1318	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 10:43:07.611+08	2018-01-08 10:43:07.611+08	b1c85f0b-c610-4243-83a4-3a1e87b411ad	5	t	f
1322	range	量程	Constant	\N		(0,5)	0			mm		2018-01-08 10:47:53.791+08	2018-01-08 10:48:02.464+08	0eab3179-48cc-4e55-8ec9-b7516415aa75	5	t	f
1323	range	量程	Constant	\N	\N	(0,40)	\N	\N	\N	\N		2018-01-08 10:48:47.709+08	2018-01-08 10:48:47.709+08	4253e350-b64f-4b81-b19b-bcd45c6181ad	5	t	f
1427	range	量程	Constant	\N	\N	(0,10)	\N	\N	\N	m/s		2018-01-08 16:14:02.657+08	2018-01-08 16:14:02.657+08	e2d93988-c0e0-4581-b406-e43e455f7864	5	t	f
1428	range	量程	Constant	\N		(0,4000)	0			mm/s		2018-01-08 16:15:00.005+08	2018-01-08 16:26:34.797+08	0e1586ef-cbec-4dc3-8ff4-af3e4c7c8d2e	5	t	f
1454	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:50:48.42+08	2018-01-08 16:50:48.42+08	80e5052f-477a-4e27-a3bc-0ec95ab3d4a2	5	t	f
1456	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:50:48.917+08	2018-01-08 16:50:48.917+08	fbc83633-74fd-494b-b1b7-75d289358b27	5	t	f
1457	range	量程	Constant	\N		(0,4000)	0			mm/s		2018-01-08 16:50:48.92+08	2018-01-08 16:52:20.662+08	fbc83633-74fd-494b-b1b7-75d289358b27	5	t	f
1455	range	量程	Constant	\N		(0,8000)	0			mm/s		2018-01-08 16:50:48.423+08	2018-01-08 16:52:59.895+08	80e5052f-477a-4e27-a3bc-0ec95ab3d4a2	5	t	f
1464	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:54:49.762+08	2018-01-08 16:54:49.762+08	bfc79caf-826f-4f9d-a709-241529e118b5	5	t	f
1465	range	量程	Constant	\N		(0,20)	0			m/s		2018-01-08 16:54:49.764+08	2018-01-08 17:00:27.963+08	bfc79caf-826f-4f9d-a709-241529e118b5	5	t	f
2254	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:35:24.381+08	2018-04-09 15:03:33.759+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
1613	osVersion	操作系统版本	Constant	\N	\N	windws7	\N	\N	\N	\N		2018-01-09 17:00:52.112+08	2018-01-09 17:00:52.112+08	7d457a8b-5537-4186-bd68-df0c5868ef7e	5	t	f
1634	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 09:44:42.446+08	2018-01-16 09:44:42.446+08	c02185df-1224-4e63-aab4-3d284c8bb526	5	t	f
1636	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:33:58.421+08	2018-01-16 10:33:58.421+08	e47f8159-ee4b-45c0-b827-30b69d0328d8	5	t	f
1637	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:33:59.662+08	2018-01-16 10:33:59.662+08	ff38a597-0318-47bb-a647-5ad78dd2dca8	5	t	f
1638	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-16 10:34:00.741+08	2018-01-16 10:34:00.741+08	addad535-5578-4010-9d74-dbeab2b9e9eb	5	t	f
2219	range	量程	Constant	\N		(-3000,3000)	0	\N	\N	με		2018-03-26 11:27:33.48+08	2018-03-26 11:27:33.48+08	d31031ab-0237-41a5-adc0-867c1e9952f7	5	t	f
1751	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:46:19.642+08	2018-01-23 14:46:19.642+08	099c6283-519f-4946-aa9d-f0059a76b832	1	t	f
2237	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 11:35:01.813+08	2018-03-26 11:35:01.813+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	1	t	f
1754	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:46:19.647+08	2018-01-23 14:46:19.647+08	099c6283-519f-4946-aa9d-f0059a76b832	5	t	f
2255	range	量程	Constant	\N		(-160,160)	0			kN		2018-03-26 11:35:24.383+08	2018-03-26 11:38:49.417+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
1750	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:46:19.64+08	2018-03-26 15:07:21.186+08	099c6283-519f-4946-aa9d-f0059a76b832	5	t	f
1775	moduleId	模块号	Variable	\N		1	0			\N		2018-01-23 14:53:15.229+08	2018-03-26 15:19:21.957+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	5	t	f
1773	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-23 14:53:15.224+08	2018-01-23 14:53:15.224+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	5	t	f
2253	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:35:24.379+08	2018-04-09 15:03:38.355+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
1776	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-23 14:53:15.232+08	2018-01-23 14:53:15.232+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	1	t	f
1753	range	量程	Constant	\N		(-4000,4000)	0			KN		2018-01-23 14:46:19.646+08	2018-03-02 14:16:16.254+08	099c6283-519f-4946-aa9d-f0059a76b832	5	t	f
2252	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:35:24.377+08	2018-04-09 15:03:43.04+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
2216	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:27:33.474+08	2018-04-09 15:06:24.716+08	d31031ab-0237-41a5-adc0-867c1e9952f7	5	t	f
2217	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:27:33.476+08	2018-04-09 15:06:29.566+08	d31031ab-0237-41a5-adc0-867c1e9952f7	5	t	f
2218	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:27:33.478+08	2018-04-09 15:06:34.752+08	d31031ab-0237-41a5-adc0-867c1e9952f7	5	t	f
2181	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 10:56:34.904+08	2018-04-09 15:15:05.106+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4	5	t	f
2486	K1	K1一次项系数	Variable	\N		1	16	100000000000000000000000000000000	-100000000000000000000000000000000	\N		2018-05-31 14:37:08.579+08	2018-05-31 14:37:08.579+08	563221c8-bdb4-4511-b781-25cab72585a7	2	t	f
2487	K2	K2二次项系数	Variable	\N		0	16	100000000000000000000000000000000	-100000000000000000000000000000000			2018-05-31 14:37:08.582+08	2018-05-31 14:37:08.582+08	563221c8-bdb4-4511-b781-25cab72585a7	2	t	f
2488	Fo	Fo基准读数	Variable	\N		0	3	100000000000000000000000000000000	-100000000000000000000000000000000			2018-05-31 14:37:08.585+08	2018-05-31 14:37:08.585+08	563221c8-bdb4-4511-b781-25cab72585a7	2	t	f
2489	K3	K3三次项系数	Variable	\N	\N	0	16	100000000000000000000000000000000	-100000000000000000000000000000000			2018-05-31 14:37:08.587+08	2018-05-31 14:37:08.587+08	563221c8-bdb4-4511-b781-25cab72585a7	2	t	f
2521	sensortype	传感器类型	Constant	\N	\N	wsd	\N	\N	\N			2018-07-31 17:07:12.42+08	2018-07-31 17:07:12.42+08	b3f251c1-ab5e-4427-8b38-9180d6544783	5	t	f
2638	sensortype	传感器类型	Constant	\N		weather	0			\N		2018-10-31 07:14:30.721+08	2018-10-31 07:15:12.795+08	b03b1516-7e4a-41a4-9765-a1a485bb998a	5	t	f
2740	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:46:10.886+08	2019-02-25 11:46:10.886+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	1	t	f
2741	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:46:10.888+08	2019-02-25 11:46:10.888+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	5	t	f
2742	range	量程	Constant	\N		(0,0.8)	0	\N	\N	MPa		2019-02-25 11:46:10.89+08	2019-02-25 11:46:10.89+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	5	t	f
2743	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:46:10.892+08	2019-02-25 11:46:10.892+08	a789d4ac-3f4e-4a82-bfdb-4a7237c2ba62	5	t	f
2236	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:34:36.053+08	2018-03-26 11:34:47.954+08	11f0a3dc-13ad-4c40-ae16-1b2f1d139564	5	t	f
999	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:36:59.876+08	2018-03-26 15:06:03.565+08	780ffe7d-7369-4d2f-9184-32790466f2ba	5	t	f
990	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:36:59.08+08	2018-03-26 15:06:18.51+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	5	t	f
2198	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:24:13.152+08	2018-04-09 15:06:54.657+08	1bda935e-56de-4365-b60e-f02d19299795	5	t	f
2200	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:24:13.156+08	2018-04-09 15:06:59.771+08	1bda935e-56de-4365-b60e-f02d19299795	5	t	f
981	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:36:58.477+08	2018-03-26 15:06:32.821+08	d2a5375c-0240-4435-9b8f-a62372fafaca	5	t	f
974	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:33:22.385+08	2018-03-26 15:06:48.062+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	5	t	f
2201	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:24:13.158+08	2018-04-09 15:07:05.523+08	1bda935e-56de-4365-b60e-f02d19299795	5	t	f
2490	sensortype	传感器	Constant	\N		zd	0			\N		2018-06-04 18:00:55.124+08	2018-06-04 18:01:29.289+08	51654fb3-cd61-405e-890f-ade3931c8b7e	5	t	f
2522	protocolcode	协议号	Constant	\N	\N	9002	\N	\N	\N	\N		2018-07-31 17:20:44.967+08	2018-07-31 17:20:44.967+08	11a0df92-8921-470b-af9c-d7593b8b1f78	5	t	f
951	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-05 15:14:00.869+08	2018-01-05 15:14:00.869+08	217607ad-e8e6-4940-91ff-dc4d831cccbc	5	t	f
2182	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:16:03.996+08	2018-03-26 11:23:53.844+08	b6095ab3-88ff-4a71-8f42-f0656b301e1e	5	f	f
975	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:33:22.387+08	2018-01-05 15:33:22.387+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	1	t	f
2199	range	量程	Constant	\N		(-1500,1500)	0	\N	\N	με		2018-03-26 11:24:13.154+08	2018-03-26 11:24:13.154+08	1bda935e-56de-4365-b60e-f02d19299795	5	t	f
1761	range	量程	Constant	\N		(-500,500)	0			kN		2018-01-23 14:49:59.765+08	2021-03-02 13:51:55.104+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	5	t	f
1768	range	量程	Constant	\N		(-1000,1000)	0			KN		2018-01-23 14:53:15.211+08	2021-03-02 13:52:31.974+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	5	t	f
978	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:33:22.395+08	2018-01-05 15:33:22.395+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	5	t	f
977	range	量程	Constant	\N		(0,0.2)	0			MPa		2018-01-05 15:33:22.393+08	2018-01-05 15:34:45.321+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	5	t	f
2639	postion	位置	Variable	\N	male,female	male	0			\N		2018-10-31 08:23:39.91+08	2018-10-31 08:25:16.603+08	a5dda81c-6a85-4e7b-97f3-be45b980646e	4	t	f
2640	initial	初值	Variable	\N	\N	0	3	100000000	0	t		2018-11-02 11:07:55.794+08	2018-11-02 11:07:55.794+08	b440e042-3173-43c6-887c-3cf4ce8a49e4	2	t	f
985	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:36:58.489+08	2018-01-05 15:36:58.489+08	d2a5375c-0240-4435-9b8f-a62372fafaca	1	t	f
988	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:36:58.497+08	2018-01-05 15:36:58.497+08	d2a5375c-0240-4435-9b8f-a62372fafaca	5	t	f
2744	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:52:46.024+08	2019-02-25 11:52:46.024+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	5	t	f
994	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:36:59.09+08	2018-01-05 15:36:59.09+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	1	t	f
2745	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:52:46.028+08	2019-02-25 11:52:46.028+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	1	t	f
997	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:36:59.097+08	2018-01-05 15:36:59.097+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	5	t	f
2746	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:52:46.031+08	2019-02-25 11:52:46.031+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	5	t	f
2747	range	量程	Constant	\N		(0,1.0)	0	\N	\N	MPa		2019-02-25 11:52:46.033+08	2019-02-25 11:52:46.033+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	5	t	f
2748	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:52:46.036+08	2019-02-25 11:52:46.036+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	5	t	f
2749	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:52:46.039+08	2019-02-25 11:52:46.039+08	369b29f9-7664-42c3-8510-7ad4c7b5bc06	1	t	f
1003	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:36:59.892+08	2018-01-05 15:36:59.892+08	780ffe7d-7369-4d2f-9184-32790466f2ba	1	t	f
2874	range	量程	Constant	\N		(0,0.2)	0	\N	\N	MPa		2019-02-25 15:46:53.859+08	2019-02-25 15:46:53.859+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	5	t	f
986	range	量程	Constant	\N		(0,0.4)	0			MPa		2018-01-05 15:36:58.492+08	2018-01-05 15:37:33.461+08	d2a5375c-0240-4435-9b8f-a62372fafaca	5	t	f
995	range	量程	Constant	\N		(0,0.8)	0			MPa		2018-01-05 15:36:59.092+08	2018-01-05 15:38:14.052+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	5	t	f
1004	range	量程	Constant	\N		(0,1)	0			MPa		2018-01-05 15:36:59.896+08	2018-01-05 15:39:00.379+08	780ffe7d-7369-4d2f-9184-32790466f2ba	5	t	f
1324	range	量程	Constant	\N	\N	(0,8)	\N	\N	\N	mm		2018-01-08 10:49:25.145+08	2018-01-08 10:49:25.145+08	e55e2ee6-c58a-481c-9bd3-9df2b38dfa3f	5	t	f
2875	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:46:53.861+08	2019-02-25 15:46:53.861+08	8ed1774f-8bb9-4a49-a182-c2b4bd1b87e3	5	t	f
2718	sensortype	传感器类型	Constant	\N		pressure	0			\N		2019-02-22 17:45:36.704+08	2019-02-26 14:49:45.9+08	b21b534c-d8f1-4caf-a405-1682a99dc1a9	5	t	f
2919	ModuleCode	模块代号	Variable	\N	\N		\N	\N	\N			2019-03-15 11:34:20.29+08	2019-03-15 11:34:20.29+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	5	t	f
2999	pm100_pre	执行前延迟-PM100	Variable	\N		25	0	600	0	百毫秒		2019-03-28 10:31:54.136+08	2019-04-02 09:56:03.374+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1006	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:36:59.904+08	2018-01-05 15:36:59.904+08	780ffe7d-7369-4d2f-9184-32790466f2ba	5	t	f
1325	range	量程	Constant	\N	\N	(0,500)	\N	\N	\N	mm		2018-01-08 10:50:17.151+08	2018-01-08 10:50:17.151+08	f2c96428-649e-47e9-9b6f-e5749195cb33	5	t	f
1350	channelId	通道号	Variable	\N		1	0	255	1	\N		2018-01-08 11:44:22.246+08	2018-01-08 11:44:22.246+08	92d06569-3e06-4ceb-91e5-d28589632145	1	t	f
1354	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2018-01-08 11:44:22.255+08	2018-01-08 11:44:22.255+08	92d06569-3e06-4ceb-91e5-d28589632145	5	t	f
1355	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2018-01-08 11:44:22.257+08	2018-01-08 11:44:22.257+08	92d06569-3e06-4ceb-91e5-d28589632145	5	t	f
2185	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:16:11.531+08	2018-04-09 15:08:29.662+08	02513eed-ba94-456b-86e0-89ea996b879d	5	t	f
1016	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-05 15:48:51.396+08	2018-01-05 15:48:51.396+08	424f45f6-916c-4383-bce4-c71153f82e63	1	t	f
2186	range	量程	Constant	\N		(-5000,5000)	0			με		2018-03-26 11:16:11.537+08	2018-03-26 11:22:43.296+08	02513eed-ba94-456b-86e0-89ea996b879d	5	t	f
1018	moduleId	模块号	Variable	\N		1	0			\N		2018-01-05 15:48:51.401+08	2018-03-26 15:05:50.015+08	424f45f6-916c-4383-bce4-c71153f82e63	5	t	f
2187	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:16:11.54+08	2018-04-09 15:08:34.815+08	02513eed-ba94-456b-86e0-89ea996b879d	5	t	f
1022	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-05 15:48:51.41+08	2018-01-05 15:48:51.41+08	424f45f6-916c-4383-bce4-c71153f82e63	5	t	f
2188	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:16:11.543+08	2018-04-09 15:08:40.146+08	02513eed-ba94-456b-86e0-89ea996b879d	5	t	f
1023	range	量程	Constant	\N		(0,2)	0			MPa		2018-01-05 15:48:51.412+08	2018-01-05 15:54:49.122+08	424f45f6-916c-4383-bce4-c71153f82e63	5	t	f
2527	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N			2018-08-01 09:19:07.196+08	2018-08-01 09:19:07.196+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	5	t	f
2524	devicetype	设备类型	Constant	\N		sensor	0			\N		2018-08-01 09:10:37.694+08	2018-08-01 09:19:58.425+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	5	t	f
2529	protocolcode	协议号	Constant	\N	\N	9002	\N	\N	\N			2018-08-01 09:32:10.281+08	2018-08-01 09:32:10.281+08	76288807-186e-4444-a1ce-6be599aacfd2	5	t	f
2750	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 11:55:32.986+08	2019-02-25 11:55:32.986+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	5	t	f
2751	range	量程	Constant	\N		(0,2.0)	0	\N	\N	MPa		2019-02-25 11:55:33.004+08	2019-02-25 11:55:33.004+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	5	t	f
2752	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 11:55:33.006+08	2019-02-25 11:55:33.006+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	5	t	f
2753	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 11:55:33.008+08	2019-02-25 11:55:33.008+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	5	t	f
2754	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 11:55:33.011+08	2019-02-25 11:55:33.011+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	1	t	f
2755	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 11:55:33.013+08	2019-02-25 11:55:33.013+08	ff97f842-4bf0-4384-b4b6-05a9783aa809	1	t	f
2983	aqi_p5	系数-VOC	Variable	\N		1	16	9999	-9999			2019-03-27 20:42:25.281+08	2019-04-08 13:51:54.518+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2876	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 15:47:53.775+08	2019-02-25 15:47:53.775+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	5	t	f
2877	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 15:47:53.779+08	2019-02-25 15:47:53.779+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	1	t	f
2878	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 15:47:53.781+08	2019-02-25 15:47:53.781+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	5	t	f
2879	range	量程	Constant	\N		(-160,160)	0	\N	\N	kN	正值是张拉力，负值是承压力	2019-02-25 15:47:53.783+08	2019-02-25 15:47:53.783+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	5	t	f
2880	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 15:47:53.786+08	2019-02-25 15:47:53.786+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	1	t	f
2881	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 15:47:53.788+08	2019-02-25 15:47:53.788+08	e7ed3509-511e-4c5d-8aec-3f331ec8defa	5	t	f
2920	ModuleAddress	模块地址	Variable	\N	\N		\N	\N	\N			2019-03-15 11:35:37.991+08	2019-03-15 11:35:37.991+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	5	t	f
1429	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:15:24.177+08	2018-01-08 16:15:24.177+08	45aee45b-bc26-4ac7-a8ed-3dcbe187b2de	5	t	f
1450	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 16:27:59.744+08	2018-01-08 16:27:59.744+08	d3ae39b6-419c-4d57-a353-69768f82908a	5	t	f
1449	range	量程	Constant	\N		(0,65)	0			mm		2018-01-08 16:27:59.741+08	2018-01-08 16:28:31.924+08	d3ae39b6-419c-4d57-a353-69768f82908a	5	t	f
1467	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-08 17:03:45.969+08	2018-01-08 17:03:45.969+08	a54c400e-8b31-47ec-9820-550d04916f47	5	t	f
3006	sensortype	传感器类型	Constant	\N		kq	0			\N		2019-03-29 10:00:14.029+08	2019-03-29 10:43:50.821+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	5	t	f
3007	test	fa	Variable	\N	\N	true	\N	\N	\N	\N		2019-03-29 16:40:02.748+08	2019-03-29 16:40:02.748+08	044ef7b0-afed-464c-b3fb-8bbf7fa42023	3	t	f
2987	aqi_rd	是否启用-AQI模组	Variable	\N		true	0			\N		2019-03-28 09:27:07.085+08	2019-04-02 09:55:10.271+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	3	t	f
3000	am2305_post	读取记录前延迟-AM2305	Variable	\N		35	0	600	0	百毫秒		2019-03-28 10:37:10.761+08	2019-04-02 09:55:44.37+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1466	range	量程	Constant	\N		(-5,55)	0			℃		2018-01-08 17:03:45.965+08	2018-01-08 17:06:09.813+08	a54c400e-8b31-47ec-9820-550d04916f47	5	t	f
1903	range	量程	Constant	\N	\N	(‐40,120),(0,100)	\N	\N	\N			2018-01-24 11:26:28.353+08	2018-01-24 11:26:28.353+08	780de52c-47eb-46cb-b77b-3d919bae5ffb	5	t	f
1904	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-01-24 11:26:28.355+08	2018-01-24 11:26:28.355+08	780de52c-47eb-46cb-b77b-3d919bae5ffb	5	t	f
1905	deviceType	设备类型	Constant	\N		sensor	0	\N	\N			2018-01-24 11:26:28.357+08	2018-01-24 11:26:28.357+08	780de52c-47eb-46cb-b77b-3d919bae5ffb	5	t	f
1925	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-24 11:33:34.543+08	2018-01-24 11:33:34.543+08	27930598-2f6e-4932-a816-9685f17969b5	1	t	f
1926	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-24 11:33:34.545+08	2018-01-24 11:33:34.545+08	27930598-2f6e-4932-a816-9685f17969b5	5	t	f
1928	range	量程	Constant	\N		(0,100)	0	\N	\N	mm		2018-01-24 11:33:34.55+08	2018-01-24 11:33:34.55+08	27930598-2f6e-4932-a816-9685f17969b5	5	t	f
1932	moduleId	模块号	Variable	\N		1	0			\N		2018-01-24 11:33:34.558+08	2018-03-02 15:36:16.388+08	27930598-2f6e-4932-a816-9685f17969b5	5	t	f
2249	range	量程	Constant	\N		(-136,136)	0			kN		2018-03-26 11:35:23.231+08	2018-03-26 11:37:37.858+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
2246	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:35:23.224+08	2018-04-09 15:04:03.661+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
2247	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:35:23.227+08	2018-04-09 15:04:08.042+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
2248	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:35:23.23+08	2018-04-09 15:04:14.653+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
2240	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:35:23.118+08	2018-04-09 15:04:33.17+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5	t	f
2241	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:35:23.12+08	2018-04-09 15:04:37.659+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5	t	f
2242	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:35:23.122+08	2018-04-09 15:04:45.079+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5	t	f
2525	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N			2018-08-01 09:10:55.391+08	2018-08-01 09:10:55.391+08	75c932d0-2df0-4628-81dd-0e9c1f11ff60	5	t	f
2526	protocolcode	协议号	Constant	\N		9002	0			\N		2018-08-01 09:17:02.484+08	2018-08-01 09:18:40.002+08	9b8ef29d-23a7-423f-9e4b-4a4fa9dbebec	5	t	f
2528	sensortype	传感器类型	Constant	\N	\N	yc	\N	\N	\N	\N		2018-08-01 09:31:53.994+08	2018-08-01 09:31:53.994+08	76288807-186e-4444-a1ce-6be599aacfd2	5	t	f
2834	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 14:25:00.176+08	2019-02-25 14:25:00.176+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	5	t	f
2835	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 14:25:00.185+08	2019-02-25 14:25:00.185+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	1	t	f
2836	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 14:25:00.195+08	2019-02-25 14:25:00.195+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	5	t	f
2837	range	量程	Constant	\N		(-3000,3000)	0	\N	\N	με		2019-02-25 14:25:00.197+08	2019-02-25 14:25:00.197+08	3d19a0b1-da48-466d-88d1-dc7c1f73bc68	5	t	f
2921	Url	URL	Variable	\N	\N	http://www.jsjtm.com.cn:8080/api/RawData/GetRawDataList	\N	\N	\N	\N		2019-03-15 13:42:26.342+08	2019-03-15 13:42:26.342+08	2f25fa6f-a99e-440e-ac0a-29ada5069d4f	5	t	f
3001	am2305_pre	执行前延迟-AM2305	Variable	\N		25	0	600	0	百毫秒		2019-03-28 10:42:06.789+08	2019-04-02 09:54:52.459+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
2984	aqi_p6	系数-交叉干扰K1	Variable	\N		1	16	9999	-9999			2019-03-27 20:43:46.032+08	2019-04-08 13:52:03.449+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2985	aqi_p7	系数-交叉干扰K2	Variable	\N		0.15	16	9999	-9999			2019-03-27 20:44:46.895+08	2019-04-08 13:52:06.517+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2994	pm10_post	读取记录前延迟-PM10	Variable	\N		35	0	600	0	百毫秒		2019-03-28 10:00:08.152+08	2019-04-02 09:56:41.692+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	1	t	f
1912	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-24 11:30:26.799+08	2018-01-24 11:30:26.799+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	1	t	f
1913	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-24 11:30:26.801+08	2018-01-24 11:30:26.801+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	5	t	f
1906	range	量程	Constant	\N		(0,100)	0			mm		2018-01-24 11:30:26.785+08	2018-01-24 11:31:39.219+08	1d48c633-6d83-4b96-a572-6f59a0100c9b	5	t	f
1916	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-24 11:32:25.019+08	2018-01-24 11:32:25.019+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	1	t	f
1917	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-24 11:32:25.021+08	2018-01-24 11:32:25.021+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	5	t	f
2261	range	量程	Constant	\N		(0,0.2)	0			MPa		2018-03-26 11:41:39.472+08	2018-03-26 11:42:18.406+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	5	t	f
1919	range	量程	Constant	\N		(0,200)	0			mm		2018-01-24 11:32:25.025+08	2018-01-24 11:32:45.539+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	5	t	f
1923	moduleId	模块号	Variable	\N		1	0			\N		2018-01-24 11:32:25.032+08	2018-03-02 15:36:22.959+08	50600703-5c4c-4ceb-a44d-d0b79882b1dc	5	t	f
2267	range	量程	Constant	\N		(0,0.4)	0			MPa		2018-03-26 11:43:22.772+08	2018-03-26 11:44:00.985+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	5	t	f
2273	range	量程	Constant	\N		(0,0.8)	0			MPa		2018-03-26 11:43:22.892+08	2018-03-26 11:44:54.88+08	3aba791d-d6b2-4175-bb20-109f210f4065	5	t	f
2279	range	量程	Constant	\N		(0,1)	0			MPa		2018-03-26 11:43:23.215+08	2018-03-26 11:46:52.893+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	5	t	f
2291	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 13:48:02.838+08	2018-03-26 13:48:02.838+08	b77b1ad2-2546-4219-bbe8-dc6b71d7fe01	1	t	f
2293	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 13:53:09.465+08	2018-03-26 13:53:09.465+08	73a7b800-25d7-41ad-872d-96cc4f9430de	1	t	f
2285	range	量程	Constant	\N		(0,2)	0			MPa		2018-03-26 11:43:24.242+08	2018-03-26 14:03:08.42+08	f30482b9-b518-4048-8217-bd64158911e6	5	t	f
2296	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:13:30.072+08	2018-03-26 14:13:30.072+08	d2a5375c-0240-4435-9b8f-a62372fafaca	5	t	f
2298	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:20:54.027+08	2018-03-26 14:20:54.027+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	5	t	f
2304	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:37:02.797+08	2018-03-26 14:37:02.797+08	90a2bc12-2214-43ff-9154-9b9212de2c10	5	t	f
2305	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:37:26.71+08	2018-03-26 14:37:26.71+08	90a2bc12-2214-43ff-9154-9b9212de2c10	2	t	f
2308	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:01:23.402+08	2018-03-26 15:01:23.402+08	5e7775c1-0766-436e-b701-b1102833b98d	5	t	f
2316	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:20:41.593+08	2018-03-26 15:20:41.593+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	5	t	f
2317	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:21:13.874+08	2018-03-26 15:21:13.874+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	1	t	f
2319	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:26:03.935+08	2018-03-26 15:26:03.935+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	1	t	f
2320	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:34:28.816+08	2018-03-26 15:34:28.816+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	5	t	f
2323	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:41:51.233+08	2018-03-26 15:41:51.233+08	37c046eb-9a0e-49b0-95fb-f0128338f381	1	t	f
2326	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:52:20.914+08	2018-03-26 15:52:20.914+08	cb4eb310-0876-492a-9e06-8cd0a5542c5b	5	t	f
2284	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:43:24.24+08	2018-04-09 14:58:33.542+08	f30482b9-b518-4048-8217-bd64158911e6	5	t	f
2283	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:43:24.238+08	2018-04-09 14:58:38.296+08	f30482b9-b518-4048-8217-bd64158911e6	5	t	f
2282	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:43:24.236+08	2018-04-09 14:58:43.621+08	f30482b9-b518-4048-8217-bd64158911e6	5	t	f
2278	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:43:23.211+08	2018-04-09 14:59:02.954+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	5	t	f
2277	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:43:23.207+08	2018-04-09 14:59:09.644+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	5	t	f
2276	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:43:23.203+08	2018-04-09 14:59:14.7+08	0c5218a3-4fe6-437c-bfee-0c7b4d8d5b83	5	t	f
2270	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:43:22.885+08	2018-04-09 15:00:15.4+08	3aba791d-d6b2-4175-bb20-109f210f4065	5	t	f
2271	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:43:22.888+08	2018-04-09 15:00:24.731+08	3aba791d-d6b2-4175-bb20-109f210f4065	5	t	f
2272	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:43:22.89+08	2018-04-09 15:00:30.818+08	3aba791d-d6b2-4175-bb20-109f210f4065	5	t	f
2264	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:43:22.766+08	2018-04-09 15:01:16.075+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	5	t	f
2265	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:43:22.768+08	2018-04-09 15:01:21.352+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	5	t	f
2266	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:43:22.77+08	2018-04-09 15:01:26.589+08	a9d42f6d-8409-415c-937e-aea8bebf7a50	5	t	f
2258	devicetype	设备类型	Constant	\N		sensor	0					2018-03-26 11:41:39.466+08	2018-04-09 15:01:53.721+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	5	t	f
2259	sensortype	传感器类型	Constant	\N		zx	0			\N		2018-03-26 11:41:39.468+08	2018-04-09 15:01:59.725+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	5	t	f
2260	protocolcode	协议号	Constant	\N		1401	0					2018-03-26 11:41:39.47+08	2018-04-09 15:02:06.142+08	fa5f7d2a-71d9-4ee5-9150-c4db8d3a6e45	5	t	f
2530	sensortype	设备类型	Constant	\N	\N	ZX	\N	\N	\N	\N		2018-08-02 09:59:23.042+08	2018-08-02 09:59:23.042+08	915fc949-c75f-47a9-8ba5-f516f0eb6228	5	t	f
2531	Device_ID	设备ID	Variable	\N			0	\N	\N	\N	传感器唯一ID号	2018-08-02 10:37:02.622+08	2018-08-02 10:37:02.622+08	e1f36777-486a-4527-a30f-61d17b7a8796	5	t	f
2762	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 13:31:57.696+08	2019-02-25 13:31:57.696+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	5	t	f
2763	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 13:31:57.699+08	2019-02-25 13:31:57.699+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	5	t	f
2764	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 13:31:57.702+08	2019-02-25 13:31:57.702+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	1	t	f
2766	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 13:31:57.707+08	2019-02-25 13:31:57.707+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	1	t	f
2767	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 13:31:57.709+08	2019-02-25 13:31:57.709+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	5	t	f
1949	moduleId	模块号	Variable	\N		1	0			\N		2018-01-24 11:34:50.418+08	2018-03-02 15:36:00.824+08	362018b7-e626-4eab-a6ad-214d85cfcc03	5	t	f
1940	moduleId	模块号	Variable	\N		1	0			\N		2018-01-24 11:34:49.504+08	2018-03-02 15:36:08.792+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	5	t	f
2286	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 13:34:08.546+08	2018-03-26 13:34:08.546+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	5	t	f
2765	range	量程	Constant	\N		(-600,600)	0			t		2019-02-25 13:31:57.704+08	2020-04-14 10:16:56.448+08	9768653f-3bb0-4f60-9842-ed5df2685dc4	5	t	f
1938	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-24 11:34:49.5+08	2018-01-24 11:34:49.5+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	5	t	f
1939	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-24 11:34:49.502+08	2018-01-24 11:34:49.502+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	1	t	f
2294	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:01:59.543+08	2018-03-26 14:01:59.543+08	abaf6bf4-288f-4d21-9fab-515213e6dcac	5	t	f
2301	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:25:53.787+08	2018-03-26 14:25:53.787+08	780ffe7d-7369-4d2f-9184-32790466f2ba	1	t	f
2302	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:28:35.368+08	2018-03-26 14:28:35.368+08	424f45f6-916c-4383-bce4-c71153f82e63	5	t	f
2315	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:17:25.363+08	2018-03-26 15:17:25.363+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	1	t	f
2318	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:25:44.717+08	2018-03-26 15:25:44.717+08	1bcd78b8-bd96-4c95-8e19-27a1ac7356c9	5	t	f
1947	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2018-01-24 11:34:50.414+08	2018-01-24 11:34:50.414+08	362018b7-e626-4eab-a6ad-214d85cfcc03	5	t	f
1948	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-01-24 11:34:50.416+08	2018-01-24 11:34:50.416+08	362018b7-e626-4eab-a6ad-214d85cfcc03	1	t	f
2324	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:46:05.401+08	2018-03-26 15:46:05.401+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	5	t	f
1934	range	量程	Constant	\N		(0,50)	0			mm		2018-01-24 11:34:49.493+08	2018-01-24 11:35:13.384+08	e5f12d4b-bb3c-4158-b98e-8af3579bd2cc	5	t	f
1943	range	量程	Constant	\N		(0,200)	0			mm		2018-01-24 11:34:50.407+08	2018-01-24 11:35:50.56+08	362018b7-e626-4eab-a6ad-214d85cfcc03	5	t	f
1960	lng	经度	Variable	\N	\N	\N	6	180	0	\N		2018-01-24 22:05:34.245+08	2018-01-24 22:05:34.245+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	2	t	f
1961	lat	纬度	Variable	\N	\N	\N	6	90	0			2018-01-24 22:05:34.249+08	2018-01-24 22:05:34.249+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	2	t	f
1962	speed	车速	Variable	\N	\N	\N	2	220	0	km/h		2018-01-24 22:05:34.254+08	2018-01-24 22:05:34.254+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4	2	t	f
1963	电压	电压	Variable	\N	\N	true	\N	\N	\N	伏特		2018-01-26 09:39:05.325+08	2018-01-26 09:39:05.325+08	7697d048-c21e-4b28-8c88-a59de01bae96	3	t	f
1964	1	1	Variable	\N	1	\N	\N	\N	\N	\N		2018-01-26 12:00:59.939+08	2018-01-26 12:00:59.939+08	7697d048-c21e-4b28-8c88-a59de01bae96	4	t	f
1965	2		Variable	\N	\N	1	\N	\N	\N			2018-01-26 12:01:10.736+08	2018-01-26 12:01:10.736+08	7697d048-c21e-4b28-8c88-a59de01bae96	6	t	f
1967	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-30 17:26:52.489+08	2018-01-30 17:26:52.489+08	67becf68-18c7-4ab3-83b2-d306f89bd25d	5	t	f
1968	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-01-30 17:38:49.933+08	2018-01-30 17:38:49.933+08	745e1f26-ee66-45dd-9606-052a34a944fc	5	t	f
1982	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-05 14:54:12.683+08	2018-02-05 14:54:12.683+08	d148ae2e-c0dd-4e57-a0e8-833d32107f31	5	t	f
1983	test	test	Variable	\N	\N	50	\N	100	10	aaa	aaaaa	2018-02-06 16:34:19.424+08	2018-02-06 16:34:19.424+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	1	t	f
1984	test2	test2	Variable	\N	\N	aaa	\N	\N	\N	aaaaa	aaaaaa	2018-02-06 16:34:19.431+08	2018-02-06 16:34:19.431+08	9497edfc-bee0-4aac-b65d-2f1af60cc760	5	t	f
1981	devicetype	设备类型	Constant	\N		sensor	0					2018-02-05 11:22:03.801+08	2018-04-09 15:09:59.656+08	2e2456a6-9738-456c-abf1-94d5ebad124a	5	t	f
1986	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-06 17:17:32.205+08	2018-02-06 17:17:32.205+08	7fefd73e-8fd9-48a6-8d7a-76f5796a8197	5	t	f
1987	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-06 17:32:56.532+08	2018-02-06 17:32:56.532+08	9137c92c-6de6-4b00-bafc-a995288280f7	5	t	f
1988	test2	\N	Variable	\N	\N	\N	\N	111	50	\N		2018-02-06 17:44:49.273+08	2018-02-06 17:44:49.273+08	edcdb4a2-9f82-46d7-bba1-3ebb4f69483e	1	t	f
1989	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-07 09:45:44.219+08	2018-02-07 09:45:44.219+08	5ecfc751-afb0-4596-a6f7-85a31eca40c3	5	t	f
1990	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-07 16:40:02.724+08	2018-02-07 16:40:02.724+08	aaa7d270-43dc-4864-bb0a-967c33658698	5	t	f
1991	channelId	通道号	Variable	\N	\N	1	\N	\N	\N			2018-02-07 16:40:02.73+08	2018-02-07 16:40:02.73+08	aaa7d270-43dc-4864-bb0a-967c33658698	5	t	f
1992	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-09 14:00:33.319+08	2018-02-09 14:00:33.319+08	ee8205dc-c9b0-4c29-b85f-9a54216ab198	5	t	f
1994	channelId	通道号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-11 16:58:22.027+08	2018-02-11 16:58:22.027+08	c98659b5-30ec-471f-9654-41f5f8df47b0	5	t	f
1995	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-02-11 16:58:22.031+08	2018-02-11 16:58:22.031+08	c98659b5-30ec-471f-9654-41f5f8df47b0	5	t	f
1996	channelId	通道号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-11 16:59:37.27+08	2018-02-11 16:59:37.27+08	d87be87a-12ba-4e65-97ba-816bcb3e2e62	5	t	f
1997	channelId	通道号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-11 17:02:18.535+08	2018-02-11 17:02:18.535+08	9137c92c-6de6-4b00-bafc-a995288280f7	5	t	f
1993	channelId	通道号	Variable	\N		1	0			\N		2018-02-11 16:51:13.583+08	2018-02-11 17:02:38.884+08	7fefd73e-8fd9-48a6-8d7a-76f5796a8197	5	t	f
1998	channelId	通道号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-11 17:07:24.786+08	2018-02-11 17:07:24.786+08	fdf34922-d64e-4616-9313-96d7d94b8412	5	t	f
1976	devicetype	设备类型	Constant	\N		sensor	0					2018-02-05 11:21:49.807+08	2018-04-09 15:11:04.772+08	0f4f59de-cde7-4aec-a402-703e5426bb76	5	t	f
1974	devicetype	设备类型	Constant	\N		sensor	0					2018-02-05 11:21:34.57+08	2018-04-09 15:11:34.831+08	cef1d2a2-c44e-4143-84bd-2a65140e33d0	5	t	f
1971	devicetype	设备类型	Constant	\N		sensor	0					2018-02-05 11:21:19.497+08	2018-04-09 15:12:21.336+08	9f610c4d-c4f6-4e5b-bafc-5fb720bd8ca8	5	t	f
2532	sensortype	设备类型	Constant	\N		485	0			\N		2018-08-03 07:13:57.976+08	2018-08-03 07:33:47.903+08	cd27d23f-a55d-4ce0-8c59-33675bb5ad62	5	t	f
2684	ranges	\N	Constant	\N		-180,180	0			°		2018-12-24 11:48:02.134+08	2018-12-24 11:49:11.816+08	fc561f5f-92c8-4549-8e02-dd01dd276aef	5	t	f
2768	moduleId	模块号	Variable	\N		1	0	\N	\N	\N		2019-02-25 13:32:42.954+08	2019-02-25 13:32:42.954+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	5	t	f
2769	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-02-25 13:32:42.957+08	2019-02-25 13:32:42.957+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	5	t	f
2770	channelId	通道号	Variable	\N	\N	1	\N	128	1			2019-02-25 13:32:42.96+08	2019-02-25 13:32:42.96+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	1	t	f
2772	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-02-25 13:32:42.965+08	2019-02-25 13:32:42.965+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	5	t	f
1999	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2018-02-11 17:07:24.789+08	2018-02-11 17:07:24.789+08	fdf34922-d64e-4616-9313-96d7d94b8412	5	t	f
2000	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-11 17:16:18.672+08	2018-02-11 17:16:18.672+08	b53146b9-7737-46cd-a305-e2c9cb286d3d	5	t	f
2001	channelId	通道号	Variable	\N	\N	1	\N	\N	\N			2018-02-11 17:16:18.674+08	2018-02-11 17:16:18.674+08	b53146b9-7737-46cd-a305-e2c9cb286d3d	5	t	f
2002	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-27 09:46:30.779+08	2018-02-27 09:46:30.779+08	a8e0db23-0d35-4eb1-a5b8-deadd9c3d80d	5	t	f
2004	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:01:53.185+08	2018-02-28 16:01:53.185+08	12adcb99-432b-46f5-9240-dad30ec75ea6	5	t	f
2005	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:21:12.186+08	2018-02-28 16:21:12.186+08	bcc5cadb-0395-464b-8ead-ac3917b49e30	5	t	f
2006	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:21:13.132+08	2018-02-28 16:21:13.132+08	8e752366-9256-4bab-a79b-276a89aea484	5	t	f
2007	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:21:13.703+08	2018-02-28 16:21:13.703+08	87bf38c3-0b08-4bcf-98b4-12060fd9a345	5	t	f
2008	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:21:14.336+08	2018-02-28 16:21:14.336+08	167d20c6-d128-4532-9974-d4a55788823e	5	t	f
2009	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:48:43.064+08	2018-02-28 16:48:43.064+08	10ac4010-ff56-4d05-9e45-55f84f4292aa	5	t	f
2010	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:48:44.8+08	2018-02-28 16:48:44.8+08	1f16c362-1f8e-4cbc-8b2c-8f43dd306390	5	t	f
2011	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:48:45.394+08	2018-02-28 16:48:45.394+08	8571c1b0-8472-45b5-955f-5a7614a2f08c	5	t	f
2012	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:48:46.028+08	2018-02-28 16:48:46.028+08	a570a2de-ca66-488a-a078-6c6b14b71f2a	5	t	f
2013	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-02-28 16:48:46.695+08	2018-02-28 16:48:46.695+08	d54f6d25-04dc-4847-8dda-9c54d54b2d8f	5	t	f
2287	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 13:34:32.969+08	2018-03-26 13:34:32.969+08	0dcf5869-2683-44e4-a0c0-ddd8e9adb8f1	1	t	f
2292	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 13:52:53.778+08	2018-03-26 13:52:53.778+08	73a7b800-25d7-41ad-872d-96cc4f9430de	5	t	f
2299	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 14:21:10.737+08	2018-03-26 14:21:10.737+08	ccb72dc5-f9bc-424d-a3ec-e6e9121bc534	1	t	f
2306	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 14:44:34.677+08	2018-03-26 14:44:34.677+08	5dc26bc7-d2a8-42e8-9bf1-48505ee2b3f8	5	t	f
2023	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2018-03-01 14:29:42.739+08	2018-03-01 14:29:42.739+08	c69575ab-795c-45ec-8901-f370255beff1	5	t	f
2024	channelId	通道号	Variable	\N	\N	1	\N	128	1			2018-03-01 14:29:42.743+08	2018-03-01 14:29:42.743+08	c69575ab-795c-45ec-8901-f370255beff1	1	t	f
952	range	量程	Constant	\N		(-105,105)	0			kN	正值是张拉力，负值是承压力	2018-01-05 15:17:15.15+08	2018-03-02 10:45:33.371+08	473aee20-7c00-41cd-bd6e-b44c35c758ea	5	t	f
2309	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:01:49.752+08	2018-03-26 15:01:49.752+08	5e7775c1-0766-436e-b701-b1102833b98d	1	t	f
2310	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:07:47.836+08	2018-03-26 15:07:47.836+08	099c6283-519f-4946-aa9d-f0059a76b832	5	t	f
2311	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:08:24.496+08	2018-03-26 15:08:24.496+08	099c6283-519f-4946-aa9d-f0059a76b832	1	t	f
2313	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:12:58.27+08	2018-03-26 15:12:58.27+08	c0cde67c-9734-4a3c-bb52-0caba0ae8724	1	t	f
2314	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2018-03-26 15:17:00.475+08	2018-03-26 15:17:00.475+08	bbfa13d3-fd42-4230-97e6-792463dbaf85	5	t	f
2321	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:35:21.33+08	2018-03-26 15:35:21.33+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	1	t	f
2325	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2018-03-26 15:46:20.884+08	2018-03-26 15:46:20.884+08	c66d4e20-81b0-4a5c-b2de-6dcf7023dd0d	1	t	f
2685	ranges	\N	Constant	\N		-60,60	0			°		2018-12-24 11:53:24.895+08	2018-12-24 14:15:39.179+08	6f051a40-1c14-47c6-8124-3077f27facc5	5	t	f
2773	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-02-25 13:32:42.968+08	2019-02-25 13:32:42.968+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	1	t	f
2922	sensortype	设备类型	Constant	\N	\N	ZX	\N	\N	\N	\N		2019-03-15 14:35:35.888+08	2019-03-15 14:35:35.888+08	df22cddf-5a50-41f7-980a-0bbef6aeb763	5	t	f
2975	weakupdelay	唤醒延迟	Variable	\N		20	0	65535	1	s		2019-03-27 20:10:04.436+08	2019-03-27 20:10:59.954+08	d8de8739-f146-41e0-877e-747f30ac59a7	1	t	f
3002	k	模量系数	Variable	\N	\N	1	16	99999	-99999	\N		2019-03-28 17:24:57.528+08	2019-03-28 17:24:57.528+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	2	t	f
3008	electricity	电量	Variable	\N	\N	50	\N	100	0	%		2019-04-04 11:01:54.211+08	2019-04-04 11:01:54.211+08	fde20cf0-6bb6-4987-8830-dec5aa5874f2	1	t	f
3009	value	参数值	Variable	\N		\N	6	99999	0			2019-04-04 11:32:30.475+08	2019-04-04 11:32:30.475+08	cecf35d0-533a-45cd-b740-42f93c4f3df2	2	t	f
3010	num	参数编号	Variable	\N	PM2.5系数A,PM2.5系数B,PM10系数A,PM10系数B,噪声系数A,噪声系数B,温度系数B,湿度系数B,风速系数B,联动阈值,控制回差	PM2.5系数A	0	\N	\N	\N		2019-04-04 11:32:30.478+08	2019-04-04 11:32:30.478+08	cecf35d0-533a-45cd-b740-42f93c4f3df2	4	t	f
3011	sensortype	设备类型	Constant	\N	\N	QZY	\N	\N	\N	\N		2019-04-08 13:51:42.519+08	2019-04-08 13:51:42.519+08	7f81d1d0-150c-49d4-9b52-4eda0387c996	5	t	f
2980	aqi_p2	系数-O3	Variable	\N		1	16	9999	-9999			2019-03-27 20:23:08.338+08	2019-04-08 13:52:17.001+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2977	pm10_p1	系数-PM2.5	Variable	\N		1	16	9999	-9999			2019-03-27 20:17:41.278+08	2019-04-08 13:52:19.958+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2986	aqi_p8	系数-交叉干扰K3	Variable	\N		0.4	16	9999	-9999			2019-03-27 20:46:39.33+08	2019-04-08 13:52:27.543+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
2979	aqi_p1	系数-CO	Variable	\N		1	16	9999	-9999			2019-03-27 20:19:12.285+08	2019-04-08 13:52:46.088+08	0f3aa84f-d64b-4135-8ce1-f3a704751a4c	2	t	t
3012	sensortype	设备类型	Constant	\N	\N	prism_L	\N	\N	\N	\N		2019-04-08 14:21:05.473+08	2019-04-08 14:21:05.473+08	b73a2e67-7654-49ce-890a-7c2dfec89a03	5	t	f
3013	sensortype	设备类型	Constant	\N		bj	0			\N		2019-04-16 11:25:00.683+08	2019-04-16 11:25:04.649+08	85e05ea0-94ca-4806-9393-78780b771a4b	5	t	f
3014	sensortype	设备类型	Constant	\N	\N	laser	\N	\N	\N	\N		2019-04-16 11:25:50.032+08	2019-04-16 11:25:50.032+08	82e60098-d956-499c-97c8-810ba64a8589	5	t	f
3016	sensortype	传感器类型	Constant	\N		gnss	0			\N		2019-04-18 17:15:46.695+08	2019-04-18 17:18:54.634+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	5	t	f
3017	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-04-18 17:58:14.599+08	2019-04-18 17:58:14.599+08	6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a	5	t	f
3018	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2019-04-18 17:58:14.602+08	2019-04-18 17:58:14.602+08	6bc95aa6-88cd-4473-98fc-7f4a1d76fc4a	1	t	f
3019	sensortype	设备类型	Constant	\N	\N	yc	\N	\N	\N	\N		2019-04-18 18:47:42.239+08	2019-04-18 18:47:42.239+08	f929d6c9-de63-4cb0-89f9-f9e7a22cbadb	5	t	f
3020	protocolcode	协议号	Constant	\N	\N	9002	\N	\N	\N			2019-04-18 18:47:42.243+08	2019-04-18 18:47:42.243+08	f929d6c9-de63-4cb0-89f9-f9e7a22cbadb	5	t	f
3021	mouduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2019-04-19 13:38:21.231+08	2019-04-19 13:38:21.231+08	efdfb5bf-1488-40b5-825f-629d60ebe7f7	5	t	f
3023	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-04-22 13:13:08.926+08	2019-04-22 13:13:08.926+08	5d98962d-dbd8-4688-ae48-dbebdce861f6	5	t	f
3024	range	量程	Variable	\N		(0,1000)	0			mm		2019-04-22 13:13:08.93+08	2019-04-22 13:15:07.69+08	5d98962d-dbd8-4688-ae48-dbebdce861f6	5	t	f
3025	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-04-23 14:22:13.677+08	2019-04-23 14:22:13.677+08	fb1aa362-5048-47df-a1b3-89bc55bfe786	5	t	f
3026	range	量程	Variable	\N		(0,2500)	0			mm		2019-04-23 14:22:13.68+08	2019-04-23 14:23:11.711+08	fb1aa362-5048-47df-a1b3-89bc55bfe786	5	t	f
3027	sensortype	输出类型	Constant	\N		V1	0			\N		2019-04-23 16:05:41.916+08	2019-04-23 16:06:07.911+08	2698c5d7-398d-41ad-bdea-68e26f77a6bd	5	t	f
3028	sensortype	输出类型	Constant	\N	\N	V1	\N	\N	\N	\N		2019-04-23 16:06:28.893+08	2019-04-23 16:06:28.893+08	272894c2-dcd9-4a14-8205-f1e9a093f3cd	5	t	f
3029	sensortype	输出类型	Constant	\N	\N	V1	\N	\N	\N	\N		2019-04-24 17:07:37.293+08	2019-04-24 17:07:37.293+08	29a8cde9-51c6-4647-8153-de06449e2ba2	5	t	f
3030	sensortype	输出类型	Constant	\N	\N	V1	\N	\N	\N	\N		2019-04-24 17:07:56.656+08	2019-04-24 17:07:56.656+08	0ffa5291-87ea-4e05-b031-ef948c53b474	5	t	f
3033	属性A	属性A	Variable	\N	\N	true	\N	\N	\N	\N		2019-04-26 13:07:35.57+08	2019-04-26 13:07:35.57+08	d59a244e-554e-478d-b874-b75dc0dff2b5	3	t	f
3038	deviceSerial	序列号	Variable	\N	\N		\N	\N	\N			2019-04-30 09:49:47.713+08	2019-04-30 09:49:47.713+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	5	t	f
3040	环境	\N	Variable	\N	\N	\N	2	99.99	0.00	\N		2019-05-06 10:14:28.467+08	2019-05-06 10:14:28.467+08	9ac9f312-0f0e-45d4-8d00-8420be016826	2	t	f
3037	tokenUrl	URL	Variable	\N			0			\N		2019-04-30 09:49:47.705+08	2019-05-06 14:55:49.806+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	5	t	f
3042	secret	密码	Variable	\N	\N		\N	\N	\N			2019-05-06 14:57:11.472+08	2019-05-06 14:57:11.472+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	5	t	f
3041	username	用户名	Variable	\N			0			\N		2019-05-06 14:56:10.407+08	2019-05-06 15:21:08.63+08	a9dc9dd4-9a62-4dfa-968a-69e2c4472a0a	5	t	f
3075	temps	Temperature zone	Constant	\N	\N	1	\N	\N	\N	\N		2019-05-20 14:00:03.739+08	2019-05-20 14:00:03.739+08	ecad4b77-ab58-460f-8469-b89b3c77d796	1	t	f
3048	K1	K1一次项系数	Variable	\N		1	16	999999999999999	-99999999999999	\N		2019-05-07 10:31:26.487+08	2019-05-07 10:57:42.853+08	ef966a9a-d938-4526-af04-cee74ea9b600	2	t	f
3049	K2	K2二次项系数	Variable	\N		0	16	9999999999999999	-99999999999999999999			2019-05-07 10:31:52.779+08	2019-05-07 10:57:52.361+08	ef966a9a-d938-4526-af04-cee74ea9b600	2	t	f
3050	K3	K3三次项系数	Variable	\N		0	16	99999999999999999	-999999999999999999999			2019-05-07 10:32:21.247+08	2019-05-07 10:58:00.553+08	ef966a9a-d938-4526-af04-cee74ea9b600	2	t	f
3051	Fo	Fo基准读数	Variable	\N		0	3	99999999999999999	-99999999999999			2019-05-07 10:33:11.734+08	2019-05-07 11:22:03.09+08	ef966a9a-d938-4526-af04-cee74ea9b600	2	t	f
3054	channel	Channel	Variable	\N	1,2,3,4	4	\N	\N	\N	\N		2019-05-08 17:53:13.493+08	2019-05-08 17:53:13.493+08	1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17	4	t	f
3058	devType	DeviceType	Constant	\N		REFRIGERATOR	0			\N		2019-05-08 18:21:35.997+08	2019-05-08 18:22:15.85+08	ecad4b77-ab58-460f-8469-b89b3c77d796	5	t	f
3061	channel	Channel	Variable	\N	1,2,3,4	1	\N	\N	\N	\N		2019-05-08 19:46:22.176+08	2019-05-08 19:46:22.176+08	ecad4b77-ab58-460f-8469-b89b3c77d796	4	t	f
3070	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2019-05-15 10:32:01.181+08	2019-05-15 10:32:01.181+08	6474815f-e86c-4909-966f-5fb6efc5c674	5	t	f
3091	account	账号	Variable	\N	\N		\N	\N	\N	\N		2019-05-30 11:20:53.245+08	2019-05-30 11:20:53.245+08	7f382df2-35f7-4128-9276-d2a3a40d6547	5	t	f
3071	interval	采集间隔	Variable	\N		60	0	120	0	s		2019-05-16 17:40:04.222+08	2019-05-16 17:56:15.053+08	ff67a769-94ed-4f3d-b944-b1f4d4468eec	1	t	f
3092	pw	密码	Variable	\N	\N		\N	\N	\N			2019-05-30 11:20:53.247+08	2019-05-30 11:20:53.247+08	7f382df2-35f7-4128-9276-d2a3a40d6547	5	t	f
3055	devType	DeviceType	Constant	\N		INDOORTEMPSENSOR	0					2019-05-08 17:56:10.915+08	2019-05-20 14:09:07.28+08	1c6ea7b5-ffd8-4e6c-b190-c2cbdbe65a17	5	t	f
3077	initConsumption	Init Consumption	Variable	\N	\N	0	3	9999999	0.000	kWh	Initial Power Consumption	2019-05-20 21:52:06.088+08	2019-05-20 21:52:06.088+08	ecad4b77-ab58-460f-8469-b89b3c77d796	2	t	f
3072	k	系数	Variable	\N		1	6	99999	-99999	KN/Hz^2		2019-05-17 10:03:54.369+08	2019-05-17 16:10:39.725+08	82c4e869-135f-466b-af92-27b7979b1fd2	2	t	f
3073	f0	初始频率	Variable	\N		0	6	99999	-99999	HZ		2019-05-17 10:04:52.928+08	2019-05-17 17:24:02.813+08	82c4e869-135f-466b-af92-27b7979b1fd2	2	t	f
3078	phaseVoltage	Phase Voltage	Variable	\N	220,380	220	\N	\N	\N	V		2019-05-22 13:16:07.517+08	2019-05-22 13:16:07.517+08	0a9ddd56-9373-42fc-b426-17797eeee64a	4	t	f
3079	phaseVoltage	Phase Voltage	Variable	\N	220,380	220	\N	\N	\N	V	Phase Voltage	2019-05-22 15:21:44.232+08	2019-05-22 15:21:44.232+08	ecad4b77-ab58-460f-8469-b89b3c77d796	4	t	f
3093	boxId	云盒编号	Variable	\N	\N		\N	\N	\N			2019-05-30 11:20:53.249+08	2019-05-30 11:20:53.249+08	7f382df2-35f7-4128-9276-d2a3a40d6547	5	t	f
3052	devType	DeviceType	Constant	\N		CDUENERGY	0					2019-05-08 11:17:27.695+08	2019-05-22 15:40:43.729+08	0a9ddd56-9373-42fc-b426-17797eeee64a	5	t	f
3056	doors	Doors	Constant	\N		2	0				Doors count	2019-05-08 18:17:31.613+08	2019-05-19 01:23:02.143+08	ecad4b77-ab58-460f-8469-b89b3c77d796	1	t	f
3074	cycletime	采集周期	Variable	\N	\N	3600	\N	4294967295	0	秒		2019-05-20 10:06:23.377+08	2019-05-20 10:06:23.377+08	573fb497-e583-41c4-ba6b-ecf548921eaf	1	t	f
3076	initConsumption	Init Consumption	Variable	\N		0.00	3	99999	-99999	KWh	Initial Consumption	2019-05-20 21:46:10.186+08	2019-05-23 19:41:54.212+08	0a9ddd56-9373-42fc-b426-17797eeee64a	2	t	f
3081	channelId	通道号	Variable	\N	\N	1	\N	255	1	\N		2019-05-24 08:45:17+08	2019-05-24 08:45:17+08	6474815f-e86c-4909-966f-5fb6efc5c674	1	t	f
3094	tokenUrl	tokenUrl	Variable	\N	\N		\N	\N	\N			2019-05-30 11:20:53.251+08	2019-05-30 11:20:53.251+08	7f382df2-35f7-4128-9276-d2a3a40d6547	5	t	f
3095	dataUrl	dataUrl	Variable	\N	\N		\N	\N	\N			2019-05-30 11:20:53.253+08	2019-05-30 11:20:53.253+08	7f382df2-35f7-4128-9276-d2a3a40d6547	5	t	f
3085	sensortype	设备类型	Constant	\N		485	0					2019-05-28 18:02:18.458+08	2019-05-29 15:24:59.019+08	290bae7d-a183-4af8-be82-963486855761	5	t	f
3100	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-11 15:50:05.715+08	2019-06-11 15:50:05.715+08	888fb650-543d-4141-a70e-7dff25dfffe7	5	t	f
3101	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-11 15:55:27.39+08	2019-06-11 15:55:27.39+08	2f885022-839d-4c38-ae7a-b4c9881ca394	5	t	f
3102	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-11 15:59:09.869+08	2019-06-11 15:59:09.869+08	c12a0cbf-c2fa-4f1e-a52e-e371df51e0fb	5	t	f
3104	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2019-06-11 16:14:17.1+08	2019-06-11 16:14:17.1+08	f93393d2-0bfd-4685-b6d9-31287c466007	5	t	f
3107	sensortype	传感器类型	Constant	\N	\N	dy	\N	\N	\N	\N		2019-06-11 17:13:27.519+08	2019-06-11 17:13:27.519+08	6c6b5c79-b408-447c-b2b1-3ff7bf122a19	5	t	f
3108	sensortype	传感器类型	Constant	\N	\N	dy	\N	\N	\N	\N		2019-06-11 17:18:00.742+08	2019-06-11 17:18:00.742+08	67f6e3ca-2368-45ff-a678-53f942e71caa	5	t	f
3109	sensortype	传感器类型	Constant	\N	\N	dy	\N	\N	\N	\N		2019-06-11 17:20:41.981+08	2019-06-11 17:20:41.981+08	4f72b98e-690d-429f-9b64-ab8de1c41a0b	5	t	f
3110	sensortype	传感器类型	Constant	\N	\N	dy	\N	\N	\N	\N		2019-06-11 17:24:10.325+08	2019-06-11 17:24:10.325+08	96e0e6a4-fb0a-4e01-ba5b-1ab1feff3aee	5	t	f
3111	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2019-06-11 17:28:58.637+08	2019-06-11 17:28:58.637+08	14068f43-74c6-48e8-b004-29eefa28fd36	5	t	f
3112	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2019-06-11 17:32:28.586+08	2019-06-11 17:32:28.586+08	958debc4-8460-4237-a960-d51a6a866071	5	t	f
3113	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:15:57.568+08	2019-06-18 18:15:57.568+08	d3c271ff-22cb-4938-8c5f-c63484107a38	5	t	f
3114	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:16:41.625+08	2019-06-18 18:16:41.625+08	dc1f2a7f-e0b1-4894-852c-6eaa5c66ef83	5	t	f
3115	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:17:37.223+08	2019-06-18 18:17:37.223+08	b8061f6d-fe6e-443d-bed9-8b4e7fb81a71	5	t	f
3116	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:31:21.701+08	2019-06-18 18:31:21.701+08	3636e235-3352-4944-8092-c0b68a659ef1	5	t	f
3117	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:32:05.236+08	2019-06-18 18:32:05.236+08	7fae0d43-0664-4c19-9d35-db80a97b6da2	5	t	f
3118	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:32:42.478+08	2019-06-18 18:32:42.478+08	c06263f7-c818-41f4-949a-4a526770fa9b	5	t	f
3119	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:33:16.504+08	2019-06-18 18:33:16.504+08	2142db9e-293b-43a9-9883-3d41391ba533	5	t	f
3120	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:35:38.864+08	2019-06-18 18:35:38.864+08	57df002c-3fa7-4684-a2b3-f46f54b7f87b	5	t	f
3122	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:38:08.026+08	2019-06-18 18:38:08.026+08	6daadb42-2ee7-41fa-a6bd-85d9c0d77383	5	t	f
3123	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:39:09.127+08	2019-06-18 18:39:09.127+08	c70bf363-fc19-41f9-80df-27a231a1a2bd	5	t	f
3124	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:46:11.208+08	2019-06-18 18:46:11.208+08	f70240a0-3384-4984-a854-65fe5b16dc0a	5	t	f
3125	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-06-18 18:47:13.433+08	2019-06-18 18:47:13.433+08	3d182049-68c9-440d-adde-b62b71abee38	5	t	f
3127	model	型号	Constant	\N	\N	RN620	\N	\N	\N	\N		2019-06-20 09:20:53.347+08	2019-06-20 09:20:53.347+08	1b795716-096c-409d-8b43-290e31a0d4d5	5	t	f
3128	model	型号	Constant	\N	\N	RN630	\N	\N	\N	\N		2019-06-20 09:22:50.982+08	2019-06-20 09:22:50.982+08	b10f2486-b1e8-48d6-8683-216a40bcb3bb	5	t	f
3129	module	模块号	Variable	\N	\N		\N	\N	\N	\N		2019-06-21 13:54:04.842+08	2019-06-21 13:54:04.842+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	5	t	f
3130	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N	\N		2019-06-24 16:49:45.144+08	2019-06-24 16:49:45.144+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a	5	t	f
3131	1	232	Variable	\N	\N	true	\N	\N	\N	565	62	2019-06-25 15:49:19.32+08	2019-06-25 15:49:19.32+08	239fdc2a-bd0a-4cd6-b0c4-f7371f99f620	3	t	f
3133	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2019-06-27 09:35:21.043+08	2019-06-27 09:35:21.043+08	4b13a538-ac93-4bc0-8515-4181c57b8650	5	t	f
3134	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2019-06-27 09:35:29.156+08	2019-06-27 09:35:29.156+08	d1d8105f-3b3d-4c89-a378-2e76afbb6f36	5	t	f
3136	deviceType	设备类型	Constant	\N		sensor	0	\N	\N			2019-06-27 13:03:58.367+08	2019-06-27 13:03:58.367+08	1c182e32-a4cb-4882-991a-be791c200d73	5	t	f
3137	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2019-07-06 16:55:42.77+08	2019-07-06 16:55:42.77+08	6980d68e-b6b4-4ab2-a048-042672a46cef	5	t	f
3138	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2019-07-06 17:22:08.758+08	2019-07-06 17:22:08.758+08	7b879c12-2bc2-4ff7-a2ba-b730169c30c9	5	t	f
3139	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N	\N		2019-07-08 18:21:40.584+08	2019-07-08 18:21:40.584+08	54335927-f86b-44bd-aebe-f07fc9cddaed	5	t	f
3142	sensortype	设备类型	Constant	\N		gdgszx	0			无	协议用关键字	2019-07-09 15:10:12.119+08	2019-07-09 15:13:34.911+08	4fa8750d-807d-4c0c-9526-2662418f6f2f	5	t	f
3144	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-07-09 15:36:01.965+08	2019-07-09 15:36:01.965+08	6def140f-5189-490c-ab4c-57e84dfcd3bf	5	t	f
3145	devType	\N	Constant	\N	\N	REFRIGERATOR	\N	\N	\N	\N		2019-07-15 13:27:37.581+08	2019-07-15 13:27:37.581+08	01da29ac-f803-4381-ae7f-28264effac4f	5	t	f
3146	devType	\N	Constant	\N	\N	REFRIGERATOR	\N	\N	\N	\N		2019-07-15 14:04:02.974+08	2019-07-15 14:04:02.974+08	151950ee-2a96-4cb7-a2c7-8b8e15dcae36	5	t	f
3148	devType	\N	Constant	\N	\N	REFRIGERATOR	\N	\N	\N	\N		2019-07-15 14:31:13.757+08	2019-07-15 14:31:13.757+08	7b8591c6-00a5-4a8f-9da0-f325fc60e8fa	5	t	f
3149	am2305_pre	前延迟-AM2305	Variable	\N	\N	25	\N	600	0	百毫秒		2019-07-17 14:41:29.811+08	2019-07-17 14:41:29.811+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3150	aqi_p1	系数-CO	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:43:17.275+08	2019-07-17 14:43:17.275+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3151	aqi_p8	系数-交叉干扰K3	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:43:43.354+08	2019-07-17 14:43:43.354+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3152	aqi_p2	系数-O3	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:44:12.567+08	2019-07-17 14:44:12.567+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3153	pm10_post	后延迟-PM10	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:44:37.995+08	2019-07-17 14:44:37.995+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3154	aqi_p7	系数-交叉干扰K2	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:49:15.034+08	2019-07-17 14:49:15.034+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3155	pm100_pc	协议号-PM100	Constant	\N	\N	5003	\N	\N	\N			2019-07-17 14:49:41.812+08	2019-07-17 14:49:41.812+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3156	gps_rd	是否启用-gps模组	Variable	\N	\N	true	\N	\N	\N			2019-07-17 14:50:52.548+08	2019-07-17 14:50:52.548+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	3	t	f
3157	am2305_pc	协议-AM2305	Constant	\N	\N	5004	\N	\N	\N			2019-07-17 14:51:12.384+08	2019-07-17 14:51:12.384+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3158	aqi_pre	前延迟-AQI	Variable	\N	\N	25	\N	600	0	百毫秒		2019-07-17 14:51:35.155+08	2019-07-17 14:51:35.155+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3159	pm100_rd	是否启用-PM100模组	Variable	\N	\N	true	\N	\N	\N			2019-07-17 14:52:07.154+08	2019-07-17 14:52:07.154+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	3	t	f
3160	pm100_pre	执行前延迟-PM100	Variable	\N	\N	25	\N	600	0	百毫秒		2019-07-17 14:52:34.461+08	2019-07-17 14:52:34.461+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3161	aqi_p5	系数-VOC	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:52:56.793+08	2019-07-17 14:52:56.793+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3162	sensortype	传感器类型	Variable	\N	\N	kq	\N	\N	\N			2019-07-17 14:54:17.658+08	2019-07-17 14:54:17.658+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3163	aqi_rd	是否启用-AQI模组	Variable	\N	\N	true	\N	\N	\N			2019-07-17 14:54:38.113+08	2019-07-17 14:54:38.113+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	3	t	f
3164	am2305_post	后延迟-AM2305	Variable	\N	\N	35	\N	600	0	百毫秒		2019-07-17 14:55:09.761+08	2019-07-17 14:55:09.761+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3165	aqi_p6	系数-交叉干扰K1	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:55:53.628+08	2019-07-17 14:55:53.628+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3166	gps_post	后延迟-GPS	Variable	\N	\N	35	\N	600	0	百毫秒		2019-07-17 14:56:27.862+08	2019-07-17 14:56:27.862+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3167	aqi_p4	系数-SO2	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:56:50.912+08	2019-07-17 14:56:50.912+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3168	pm10_p2	系数-PM10	Variable	\N	\N	1	16	9999	-9999			2019-07-17 14:57:19.266+08	2019-07-17 14:57:19.266+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3169	gps_pre	前延迟-GPS	Variable	\N	\N	25	\N	600	0	百毫秒		2019-07-17 14:57:44.228+08	2019-07-17 14:57:44.228+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3170	pm100_p1	系数-PM100	Variable	\N	\N	1	16	9999	-9999	百毫秒		2019-07-17 14:58:08.228+08	2019-07-17 14:58:08.228+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3171	pm100_post	后延迟-PM100	Variable	\N	\N	35	\N	600	0	百毫秒		2019-07-17 14:58:55.33+08	2019-07-17 14:58:55.33+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3172	pm100_st	模组型号-PM100	Constant	\N	\N	pm100	\N	\N	\N			2019-07-17 14:59:44.019+08	2019-07-17 14:59:44.019+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3173	aqi_p3	系数-NO2	Variable	\N	\N	1	16	9999	-9999			2019-07-17 15:00:10.319+08	2019-07-17 15:00:10.319+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	2	t	f
3174	pm10_rd	是否启用PM2.5模组	Variable	\N	\N	true	\N	\N	\N			2019-07-17 15:00:51.398+08	2019-07-17 15:00:51.398+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	3	t	f
3175	pm10_pc	协议-PM2.5,PM10	Constant	\N	\N	5002	\N	\N	\N			2019-07-17 15:01:23.838+08	2019-07-17 15:01:23.838+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3176	aqi_post	后延迟-AQI	Variable	\N	\N	35	\N	600	0	百毫秒		2019-07-17 15:02:01.288+08	2019-07-17 15:02:01.288+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	1	t	f
3177	aqi_pc	协议-AQI	Constant	\N	\N	5000	\N	\N	\N			2019-07-17 15:02:24.272+08	2019-07-17 15:02:24.272+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3178	aqi_st	模组类型-AQI	Constant	\N	\N	aqi	\N	\N	\N			2019-07-17 15:03:11.967+08	2019-07-17 15:03:11.967+08	a16a5d8d-9c8b-4bc0-aed1-c7736f212c17	5	t	f
3180	3	r	Variable	\N	\N	\N	\N	3	1	\N		2019-07-22 10:33:56.64+08	2019-07-22 10:33:56.64+08	6d2dad31-9715-4522-a382-9b1b99f9bebc	1	t	f
3140	SIMNum	SIM卡号	Variable	\N		13912345678	0					2019-07-08 18:21:40.587+08	2019-07-25 09:52:25.752+08	54335927-f86b-44bd-aebe-f07fc9cddaed	5	t	f
3181	sensortype	传感器类型	Constant	\N		yc	0					2019-07-23 21:20:35.029+08	2019-07-23 22:22:18.982+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	5	t	f
3182	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-07-23 22:23:33.268+08	2019-07-23 22:23:33.268+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	5	t	f
3183	addr	Address	Variable	\N			0			\N		2019-07-25 12:55:45.595+08	2019-07-25 12:55:52.635+08	64af86ba-2ede-48c5-b410-7e40264cdd8a	5	t	f
3184	devType	\N	Variable	\N	\N		\N	\N	\N	\N		2019-08-01 13:40:55.669+08	2019-08-01 13:40:55.669+08	7b879c12-2bc2-4ff7-a2ba-b730169c30c9	5	f	f
3186	sensortype	传感器类型	Constant	\N	\N	weight	\N	\N	\N	\N		2019-08-05 09:21:24.241+08	2019-08-05 09:21:24.241+08	32349c76-d117-4331-8a10-9b7ea057c2ab	5	t	f
3196	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2019-08-12 17:18:06.64+08	2019-08-12 17:18:06.64+08	d77b7e20-7877-47dc-aef4-37a663bac660	5	t	f
3197	sensortype	设备类型	Constant	\N	\N	standard485	\N	\N	\N	\N		2019-08-12 17:26:37.843+08	2019-08-12 17:26:37.843+08	53070eae-7839-46df-9492-f1b4c0b0b101	5	t	f
3195	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-12 17:17:56.854+08	2019-08-13 09:32:31.716+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
3194	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:17:33.612+08	2019-08-13 09:32:36.814+08	d3763c4f-94ba-4ae4-b35e-ccff2340c16a	5	t	f
3191	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-12 17:15:40.522+08	2019-08-13 09:32:54.725+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
3190	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:15:18.812+08	2019-08-13 09:32:58.309+08	aab61193-270e-4d06-9bdf-9da5194c744a	5	t	f
3189	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-12 17:12:00.762+08	2019-08-13 09:35:14.835+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5	t	f
3188	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:11:33.207+08	2019-08-13 09:35:17.905+08	0b09cbd9-3881-4b4a-8910-0e8730d5d935	5	t	f
3193	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-12 17:16:36.564+08	2019-08-13 09:35:37.088+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
3192	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:16:14.55+08	2019-08-13 09:35:40.373+08	ca6af9e3-f1dc-4992-8029-d0e438ef99b5	5	t	f
3199	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:34:44.731+08	2019-08-13 09:42:26.563+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	5	t	f
3198	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-12 17:34:15.951+08	2019-08-13 09:42:29.906+08	f9f9d2f0-2a96-491a-b5cc-f2a4875e5d17	5	t	f
3201	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-13 09:14:43.259+08	2019-08-13 09:42:47.979+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5	t	f
3200	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-12 17:35:40.809+08	2019-08-13 09:42:50.955+08	8fcb81d8-34ce-41b8-93c9-69d15060fa40	5	t	f
3203	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-13 09:16:26.198+08	2019-08-13 09:43:04.02+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
3202	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-13 09:15:15.973+08	2019-08-13 09:43:08.152+08	20ff998d-3014-4f62-ad12-37b56883c435	5	t	f
3205	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-13 09:17:09.429+08	2019-08-13 09:43:22.188+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
3204	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-13 09:16:52.623+08	2019-08-13 09:43:25.231+08	c60cc02d-8c37-447a-9f9d-947aa66b7f39	5	t	f
3206	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-13 09:17:45.097+08	2019-08-13 09:43:51.475+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
3207	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-13 09:18:04.803+08	2019-08-13 09:43:55.207+08	df68d6a9-c963-4bc4-a122-332e3d1435ac	5	t	f
3209	downer	频率下限	Variable	\N		1000	0			Hz		2019-08-13 09:18:59.417+08	2019-08-13 09:44:12.452+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
3208	upper	频率上限	Variable	\N		2000	0			Hz		2019-08-13 09:18:43.955+08	2019-08-13 09:44:15.709+08	84deac79-cd1d-4320-bcc6-3a0cdd4451da	5	t	f
3210	sensortype	设备类型	Constant	\N	\N	standard485	\N	\N	\N	\N		2019-08-13 17:52:48.321+08	2019-08-13 17:52:48.321+08	a7c51497-66e3-4e63-aa6f-7b243fb8ea77	5	t	f
3211	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-08-22 08:50:13.687+08	2019-08-22 08:50:13.687+08	5b40bb69-7692-4cee-b6df-bd7871764131	5	t	f
3212	sensortype	传感器类型	Constant	\N	\N	wsd	\N	\N	\N			2019-08-22 08:51:02.726+08	2019-08-22 08:51:02.726+08	5b40bb69-7692-4cee-b6df-bd7871764131	5	t	f
3213	protocolcode	协议号	Constant	\N	\N	1102	\N	\N	\N			2019-08-22 08:51:55.185+08	2019-08-22 08:51:55.185+08	5b40bb69-7692-4cee-b6df-bd7871764131	1	t	f
3214	range	量程	Constant	\N		(-40,120),(0,100)	0			℃,%RH		2019-08-22 08:52:59.828+08	2019-08-22 08:53:19.322+08	5b40bb69-7692-4cee-b6df-bd7871764131	5	t	f
2607	minute	间隔触发启动时间分钟	Variable	\N			0	59	0	min		2018-09-25 15:45:24.03+08	2019-08-22 09:43:44.352+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	f	f
2604	triggerint	采样触发间隔(s)	Variable	\N		1800	0	86400	0	s		2018-09-25 15:45:24.023+08	2019-08-22 09:43:56.948+08	d929c576-62dd-4f0c-a2cc-15120347b903	1	t	f
3215	uploadprocess	配置上传后处理	Variable	\N	restart,stop,start	restart	\N	\N	\N	\N		2019-08-22 09:53:54.778+08	2019-08-22 09:53:54.778+08	d6189068-bb18-4c68-a359-8e3139ab22e5	4	t	f
3216	triggermode	触发方式	Variable	\N	软件触发,模拟硬件触发,数字硬件触发,硬件模拟数字触发	软件触发	\N	\N	\N			2019-08-22 10:04:33.491+08	2019-08-22 10:04:33.491+08	d6189068-bb18-4c68-a359-8e3139ab22e5	4	t	f
3217	devicermode	设备工作模式	Variable	\N	从设备异步,主设备异步,主设备同步	主设备异步	\N	\N	\N			2019-08-22 10:06:42.458+08	2019-08-22 10:06:42.458+08	d6189068-bb18-4c68-a359-8e3139ab22e5	4	t	f
3218	hour	间隔触发启动时间小时	Variable	\N	\N	\N	\N	23	0			2019-08-22 10:10:08.182+08	2019-08-22 10:10:08.182+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	f	f
3219	second	间隔触发启动时间秒	Variable	\N	\N	\N	\N	59	0	\N		2019-08-22 10:19:56.694+08	2019-08-22 10:19:56.694+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	f	f
3220	startiming5	定时触发启动时间5	Variable	\N	\N		\N	\N	\N			2019-08-22 10:20:52.298+08	2019-08-22 10:20:52.298+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3221	startiming4	定时触发启动时间4	Variable	\N	\N		\N	\N	\N			2019-08-22 10:21:28.737+08	2019-08-22 10:21:28.737+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3222	startiming3	定时触发启动时间3	Variable	\N	\N		\N	\N	\N			2019-08-22 10:22:08.722+08	2019-08-22 10:22:08.722+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3223	startiming2	定时触发启动时间2	Variable	\N	\N		\N	\N	\N			2019-08-22 10:22:43.491+08	2019-08-22 10:22:43.491+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3224	startiming1	定时触发启动时间1	Variable	\N	\N		\N	\N	\N			2019-08-22 10:23:24.442+08	2019-08-22 10:23:24.442+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3225	acqtimeint	间隔触发采样时长	Variable	\N	\N	\N	\N	50	1	s		2019-08-22 10:24:31.936+08	2019-08-22 10:24:31.936+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	f	f
3226	startiming6	定时触发启动时间6	Variable	\N	\N		\N	\N	\N			2019-08-22 10:25:05.652+08	2019-08-22 10:25:05.652+08	d6189068-bb18-4c68-a359-8e3139ab22e5	5	f	f
3228	minute	间隔触发启动时间分钟	Variable	\N	\N	\N	\N	59	0	min		2019-08-22 10:35:22.501+08	2019-08-22 10:35:22.501+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	f	f
3229	triggerint	采样触发间隔(s)	Variable	\N	\N	1800	\N	86400	0	s		2019-08-22 10:37:06.243+08	2019-08-22 10:37:06.243+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	t	f
3230	sensortype	类型	Constant	\N	\N	standard485	\N	\N	\N	\N		2019-08-27 16:38:25.588+08	2019-08-27 16:38:25.588+08	8c23f875-86cf-4fe7-a315-526c7a1d0187	5	t	f
515	sensortype	设备类型	Constant	\N		standard485	0			无	无	2017-12-20 09:11:42.456+08	2019-08-27 17:40:35.144+08	6039a6d8-af54-411e-a520-451b20b6d089	5	t	f
509	sensortype	设备类型	Constant	\N		standard485	0			无	无	2017-12-19 17:58:52.292+08	2019-08-27 17:41:03.48+08	dfffdb75-6ad1-4092-95d2-ac6596b3c4ce	5	t	f
3227	acqtiming	定时触发采样时长	Variable	\N		\N	0	50	1	s		2019-08-22 10:34:07.508+08	2019-08-29 11:03:36.683+08	d6189068-bb18-4c68-a359-8e3139ab22e5	1	f	f
3232	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N	\N		2019-08-30 14:28:31.132+08	2019-08-30 14:28:31.132+08	421933bd-e149-4d7c-ad95-ef8aa2a2692c	5	t	f
3233	SIMNum	SIM卡号	Variable	\N	\N	13912345678	\N	\N	\N			2019-08-30 14:28:31.135+08	2019-08-30 14:28:31.135+08	421933bd-e149-4d7c-ad95-ef8aa2a2692c	5	t	f
3234	pointId	监测点ID	Variable	\N	\N	1	\N	\N	\N			2019-09-04 13:53:37.985+08	2019-09-04 13:53:37.985+08	c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	5	t	f
3235	beginTime	初始时间	Variable	\N	\N	20180102030405	\N	\N	\N			2019-09-04 13:53:37.988+08	2019-09-04 13:53:37.988+08	c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	5	t	f
3236	sensortype	传感器类型	Constant	\N	\N	gnss	\N	\N	\N			2019-09-04 13:53:37.991+08	2019-09-04 13:53:37.991+08	c3ed0f20-828b-46bd-b8ef-b7821cd0fcce	5	t	f
3251	sensortype	传感器类型	Constant	\N	\N	fs	\N	\N	\N			2019-09-19 14:08:46.196+08	2019-09-19 14:08:46.196+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	5	t	f
3237	protocolcode	协议号	Constant	\N		9030	0			\N	齐兴自研协议	2019-09-04 15:09:30.102+08	2019-09-04 15:10:11.384+08	7efbc3e8-ff6b-433b-9041-c76b9df89644	1	t	f
3238	protocolcode	协议号	Constant	\N	\N	1992	\N	\N	\N	\N		2019-09-04 15:40:23.403+08	2019-09-04 15:40:23.403+08	aa630d67-b466-4f6a-9a04-fe5744954d20	1	t	f
3239	protocolcode	协议号	Constant	\N	\N	1992	\N	\N	\N	\N		2019-09-04 15:48:38.154+08	2019-09-04 15:48:38.154+08	e600502e-b2ff-466a-9fa6-b9e9e554647c	1	t	f
3240	sensortype	传感器类型	Constant	\N	\N	485	\N	\N	\N	\N		2019-09-06 11:33:44.911+08	2019-09-06 11:33:44.911+08	e600502e-b2ff-466a-9fa6-b9e9e554647c	5	t	f
3241	cycletime	采集周期	Variable	\N	\N	30	\N	99999	1	分钟		2019-09-10 16:42:10.7+08	2019-09-10 16:42:10.7+08	70c53b9c-f7ec-48ce-b790-bd96754d2d3b	1	t	f
3246	sensortype	传感器类型	Constant	\N		JLSZ	0			无	无	2019-09-10 16:52:37.778+08	2019-09-10 16:55:26.793+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	5	t	f
3245	protocolcode	协议号	Constant	\N		9030	0			无	无	2019-09-10 16:52:37.776+08	2019-09-10 16:55:34.323+08	42eb2303-14bd-4431-9ca6-d5b8b2590d1d	1	t	f
3249	pointId	设备IMEI	Variable	\N	\N		\N	\N	\N	\N		2019-09-17 09:35:22.053+08	2019-09-17 09:35:22.053+08	69f9043f-2ce4-4d39-97fe-94f6c2f6185c	5	t	f
3250	cycletime	采集周期	Variable	\N	\N	3600	\N	4294967295	0	秒		2019-09-19 09:37:37.208+08	2019-09-19 09:37:37.208+08	6225c8bb-1497-4354-ad28-e5eb698de9f0	1	t	f
3253	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2019-09-19 14:09:51.113+08	2019-09-19 14:09:51.113+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	5	t	f
3252	protocolcode	协议号	Constant	\N		9218	0					2019-09-19 14:09:20.913+08	2019-09-19 16:34:46.102+08	8f52b7da-f1a6-49c7-a4ac-cd4bf7ee3aea	1	t	f
3255	sensortype	传感器类型	Constant	\N		fx	0					2019-09-19 16:36:32.223+08	2019-09-19 16:40:07.059+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	5	t	f
3254	protocolcode	协议号	Constant	\N		9219	0					2019-09-19 16:35:23.151+08	2019-09-19 16:38:52.291+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	1	t	f
3256	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-09-19 16:39:41.695+08	2019-09-19 16:39:41.695+08	a6d30b7e-a718-4cbf-80be-2ddefa2445ab	5	t	f
3257	sensortype	传感器类型	Constant	\N		dy	0			\N		2019-09-25 10:40:00.752+08	2019-09-25 10:40:34.611+08	fe3a614d-329c-4b70-99ff-f95ccb28ab79	5	t	f
3258	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-09-25 11:08:38.903+08	2019-09-25 11:08:38.903+08	d756ead6-3c0a-4d1e-be3f-dde6e031a048	5	t	f
3261	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2019-09-25 11:24:05.412+08	2019-09-25 11:24:05.412+08	50fc0df9-2b02-445b-b04e-17209e8c69ee	5	t	f
3265	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2019-09-25 11:54:59.675+08	2019-09-25 11:54:59.675+08	73ac8e46-173b-4f23-bb89-edd506496e34	5	t	f
3267	sensortype	传感器类型	Constant	\N		dm	0			\N		2019-09-25 16:15:07.536+08	2019-09-25 16:15:24.738+08	f7374ca5-78cb-4578-bfe3-df32eb350d05	5	t	f
3268	sensortype	传感器类型	Constant	\N	\N	dz	\N	\N	\N	\N		2019-09-25 16:17:50.71+08	2019-09-25 16:17:50.71+08	37bc2c29-264c-4366-8fe1-9c2984702b94	5	t	f
3269	sensortype	传感器类型	Constant	\N	\N	db	\N	\N	\N	\N		2019-09-25 16:24:59.808+08	2019-09-25 16:24:59.808+08	5102e0bc-4778-43b6-80d3-fd71e4032088	5	t	f
3270	sensortype	传感器类型	Constant	\N	\N	db	\N	\N	\N	\N		2019-09-25 16:25:36.57+08	2019-09-25 16:25:36.57+08	f535897b-dc69-4835-b0d7-b4a6062db938	5	t	f
3271	sensortype	传感器类型	Constant	\N	\N	db	\N	\N	\N	\N		2019-09-25 17:25:19.291+08	2019-09-25 17:25:19.291+08	f29e4bb2-0e42-4016-b27e-f2377c115ff1	5	t	f
3272	sensortype	传感器类型	Constant	\N	\N	dt	\N	\N	\N	\N		2019-09-26 11:36:30.268+08	2019-09-26 11:36:30.268+08	005826c9-dd60-4013-99bc-da28bc0d9c93	5	t	f
3273	sensortype	传感器类型	Constant	\N	\N	db	\N	\N	\N	\N		2019-09-27 17:23:24.157+08	2019-09-27 17:23:24.157+08	8392cdb0-52c7-4fee-8ace-a64e5cf86240	5	t	f
3274	url	URL	Variable	\N	\N		\N	\N	\N	\N		2019-09-29 14:37:47.044+08	2019-09-29 14:37:47.044+08	569fbb47-7ddc-4dd9-a1d0-e9e15d4ac448	5	t	f
3275	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2019-09-29 17:52:05.109+08	2019-09-29 17:52:05.109+08	0edf8e7f-0f5f-440a-a83a-333e5d90a2ef	5	t	f
3276	sensortype	设备类型	Constant	\N	\N	gdgszx	\N	\N	\N	\N		2019-10-08 16:13:13.815+08	2019-10-08 16:13:13.815+08	66d2c15b-394a-4b84-b7d3-b991be41d9b0	5	t	f
3105	sensortype	传感器类型	Constant	\N		standard	0					2019-06-11 16:18:29.013+08	2019-10-09 11:08:50.631+08	acd9ad51-99a5-4b2c-98ce-0d2d6c4dd848	5	t	f
3280	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2019-10-09 11:52:32.522+08	2019-10-09 11:52:32.522+08	28463128-4e0e-4167-8aa6-3c6f5accc368	5	t	f
3281	sensortype	传感器类型	Constant	\N	\N	dy	\N	\N	\N	\N		2019-10-09 15:08:23.161+08	2019-10-09 15:08:23.161+08	d52023ca-77dc-4b31-941a-5cb6d2b1a297	5	t	f
3277	deviceid	设备编号	Variable	\N			0					2019-10-08 16:14:35.311+08	2019-10-11 13:17:40.767+08	66d2c15b-394a-4b84-b7d3-b991be41d9b0	5	t	f
3282	deviceid	设备编号	Variable	\N	\N		\N	\N	\N	\N		2019-10-11 14:16:27.007+08	2019-10-11 14:16:27.007+08	1fff247a-6494-4752-91b7-74565fa1f314	5	t	f
3301	k	转换系数	Variable	\N	\N	1	16	99999	-99999	\N		2019-10-30 10:06:34.491+08	2019-10-30 10:06:34.491+08	56c84083-d705-4aa0-94d2-34b731f75f97	2	t	f
3302	sensortype	设备类型	Constant	\N	\N	prism_L_FS	\N	\N	\N	\N		2019-11-05 14:06:15.049+08	2019-11-05 14:06:15.049+08	6431292f-5b95-41f0-8291-ff902e58b376	5	t	f
3289	organcode	机构编码	Variable	\N	\N		\N	\N	\N	\N		2019-10-16 15:16:12.227+08	2019-10-16 15:16:12.227+08	30cf2191-2a9e-40dd-a83f-969d2f053e1e	5	t	f
3290	unitcode	单位编码	Variable	\N	\N		\N	\N	\N			2019-10-16 15:16:12.23+08	2019-10-16 15:16:12.23+08	30cf2191-2a9e-40dd-a83f-969d2f053e1e	5	t	f
3291	ttype	垃圾桶类型	Variable	\N	厨余,纸张,金属,塑料,玻璃,其他,回收,有害,织物,感染,损伤,化学,病理,大件,建筑,书报,塑料瓶,电子垃圾,干垃圾,湿垃圾,易腐垃圾	回收	\N	\N	\N	\N		2019-10-16 15:20:46.757+08	2019-10-16 15:20:46.757+08	213e2ff2-285b-445d-8661-24f6f91bf7b8	4	t	f
3303	sensortype	设备类型	Constant	\N	\N	QZY	\N	\N	\N	\N		2019-11-05 14:15:48.124+08	2019-11-05 14:15:48.124+08	1e6fc551-3ad9-4963-9754-142f9c470c9c	5	t	f
3292	deviceid	设备编号	Variable	\N	\N		\N	\N	\N	\N		2019-10-21 14:29:18.066+08	2019-10-21 14:29:18.066+08	a8607ea4-e6db-4dc6-9e64-3e8db3628ba0	5	t	f
3294	matchName	匹配灯具名称	Variable	\N	\N		\N	\N	\N	\N		2019-10-22 14:21:01.998+08	2019-10-22 14:21:01.998+08	f19f1e04-8739-4652-9869-5fe16698e82e	5	t	f
3297	start	起始时间	Variable	\N		0	0			\N		2019-10-28 14:56:23.628+08	2019-10-28 14:57:09.375+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	5	f	f
3298	stop	结束时间	Variable	\N		0	0					2019-10-28 14:56:55.364+08	2019-10-28 14:57:13.627+08	2b04a6d8-4af7-428f-95c9-325800c4b59d	5	f	f
3300	k	转换系数	Variable	\N		1	16	99999	-99999	\N		2019-10-30 09:39:28.833+08	2019-10-30 09:39:59.939+08	09252236-560b-47e1-bf81-f774d303ba26	2	t	f
3319	sensortype	传感器类型	Constant	\N		cx	0	\N	\N			2019-11-21 11:47:17.672+08	2019-11-21 11:47:17.672+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	5	t	f
3320	devicetype	设备类型	Constant	\N		sensor	0	\N	\N			2019-11-21 11:47:17.674+08	2019-11-21 11:47:17.674+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	5	t	f
3321	range	量程	Constant	\N		 (-30,30),(-30,30),(-25,70)	0	\N	\N	°,°,℃		2019-11-21 11:47:17.676+08	2019-11-21 11:47:17.676+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	5	t	f
3322	protocolcode	协议号	Constant	\N		1503	0	\N	\N	\N	Modbus杆式测斜协议	2019-11-21 11:47:17.678+08	2019-11-21 11:47:17.678+08	a0d06bbf-dedc-47dc-8d1e-52e2a282a93a	5	t	f
3323	sensortype	传感器类型	Constant	\N		cx	0	\N	\N			2019-11-21 11:47:19.245+08	2019-11-21 11:47:19.245+08	868f47ed-fe83-49c4-be2c-70731b436220	5	t	f
3324	devicetype	设备类型	Constant	\N		sensor	0	\N	\N			2019-11-21 11:47:19.249+08	2019-11-21 11:47:19.249+08	868f47ed-fe83-49c4-be2c-70731b436220	5	t	f
3326	protocolcode	协议号	Constant	\N		1503	0	\N	\N	\N	Modbus杆式测斜协议	2019-11-21 11:47:19.255+08	2019-11-21 11:47:19.255+08	868f47ed-fe83-49c4-be2c-70731b436220	5	t	f
3325	range	量程	Constant	\N		 (-30,30),(-25,70)	0			°,℃		2019-11-21 11:47:19.252+08	2019-11-21 11:50:01.786+08	868f47ed-fe83-49c4-be2c-70731b436220	5	t	f
3353	moduleid	模块号	Variable	\N			0					2020-01-02 14:28:42.887+08	2020-08-24 15:10:11.685+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	5	t	f
3327	start	启动时间	Variable	\N		0	0			\N		2019-11-26 14:08:45.409+08	2019-11-26 14:09:08.599+08	c150497e-123d-4ce0-bc80-9a537ee84489	5	t	f
3332	sensortype	传感器类型	Constant	\N	\N	weight	\N	\N	\N	\N		2019-11-27 14:14:56.585+08	2019-11-27 14:14:56.585+08	ba311e19-eea2-4eff-8674-1a146dab66c3	5	t	f
3337	module	模块号	Variable	\N	\N	\N	\N	10000	0	\N		2019-12-06 15:19:07.088+08	2019-12-06 15:19:07.088+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	1	t	f
3339	SpeedLimitDown	车速下限	Variable	\N	\N	0	\N	200	0	km/h		2019-12-06 15:24:19.995+08	2019-12-06 15:24:19.995+08	ba311e19-eea2-4eff-8674-1a146dab66c3	1	t	f
3351	sensortype	传感器类型	Constant	\N		gscx	0					2019-12-26 13:50:05.521+08	2020-11-16 14:54:58.212+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	5	t	f
3330	unitType	测斜类型	Variable	\N		0	0					2019-11-26 17:02:36.368+08	2019-12-09 10:45:31.488+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	5	t	f
3340	returnTime	回传时间（分钟）	Variable	\N	\N	0	\N	\N	\N	\N		2019-12-09 11:15:43.281+08	2019-12-09 11:15:43.281+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	5	t	f
3331	ceMoudle	测斜编号（逗号隔开，底部为第一根）	Variable	\N		1,2,3	0					2019-11-26 17:05:41.352+08	2019-12-09 11:23:35.79+08	61a4ad5e-774e-40d2-9ea6-937da62db64b	5	t	f
3341	direction	方向	Variable	\N	上桥,下桥	上桥	\N	\N	\N	\N		2019-12-11 10:41:52.089+08	2019-12-11 10:41:52.089+08	ba311e19-eea2-4eff-8674-1a146dab66c3	4	t	f
3338	SpeedLimitUp	车速上限	Variable	\N		150	0	300	0	km/h		2019-12-06 15:22:35.477+08	2019-12-16 11:25:57.145+08	ba311e19-eea2-4eff-8674-1a146dab66c3	1	t	f
3344	devType		Constant	\N		DOOR	0					2019-12-16 11:28:20.105+08	2019-12-16 11:29:40.93+08	fbb11421-cbb6-435e-b9f0-4bf1e056016c	5	t	f
3336	WeightLimitDown	车重下限	Variable	\N		0	0	200000	0	Kg		2019-12-06 15:19:00.685+08	2019-12-16 11:36:20.954+08	ba311e19-eea2-4eff-8674-1a146dab66c3	1	t	f
3335	WeightLimitUp	车重上限	Variable	\N		100000	0	100000	0	Kg		2019-12-06 15:17:32.486+08	2019-12-16 11:36:39.215+08	ba311e19-eea2-4eff-8674-1a146dab66c3	1	t	f
3345	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2019-12-16 11:39:53.123+08	2019-12-16 11:39:53.123+08	fbb11421-cbb6-435e-b9f0-4bf1e056016c	5	t	f
3346	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2019-12-17 15:53:57.63+08	2019-12-17 15:53:57.63+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	5	t	f
3347	devType	\N	Constant	\N	\N	TEMPERATURE	\N	\N	\N	\N		2019-12-17 15:56:17.682+08	2019-12-17 15:56:17.682+08	0fbc8f32-4f32-4e21-bbba-34023ac70ff4	5	t	f
3348	k	转换系数	Variable	\N	\N	1	16	99999	-99999	\N		2019-12-20 18:07:22.86+08	2019-12-20 18:07:22.86+08	cc36cffd-a5ac-44e5-8fe7-c2ad64a3e55b	2	t	f
3352	mode	模式	Variable	\N			0			\N		2020-01-02 14:28:12.809+08	2020-01-02 14:28:29.653+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96	5	t	f
3354	sentype	设备类型	Constant	\N	\N	rainfall	\N	\N	\N	\N		2020-01-06 16:12:31.69+08	2020-01-06 16:12:31.69+08	8c23f875-86cf-4fe7-a315-526c7a1d0187	5	t	f
3355	sensortype	设备类型	Constant	\N	\N	noise	\N	\N	\N	\N		2020-01-07 14:23:43.169+08	2020-01-07 14:23:43.169+08	afba576d-0e5e-48cf-a9fa-18a3f986d812	5	t	f
3356	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-01-07 15:57:14.017+08	2020-01-07 15:57:14.017+08	b1ce7bb7-4d25-468a-ab2b-22347d65b166	5	t	f
3363	sensortype	设备型号	Variable	\N	\N	noise	\N	\N	\N	\N		2020-01-17 16:10:12.493+08	2020-01-17 16:10:12.493+08	20d96ea0-8995-453b-aa12-191acb05eced	5	t	f
3360	protocolcode	协议号	Constant	\N		9602	0			”“	”“	2020-01-09 16:29:24.196+08	2020-01-10 14:01:26.026+08	afba576d-0e5e-48cf-a9fa-18a3f986d812	5	t	f
3364	devType	\N	Constant	\N	\N	NaN	\N	\N	\N	\N		2020-02-11 18:45:30.292+08	2020-02-11 18:45:30.292+08	c7c40505-1247-43ea-a898-e767eeae6943	5	t	f
3365	protocolcode	协议号	Constant	\N	\N	9101	\N	\N	\N	\N		2020-02-21 13:10:24.676+08	2020-02-21 13:10:24.676+08	31be3fb7-3369-4966-8e26-b561dc31b6fd	5	t	f
3366	devType	\N	Constant	\N	\N	NASCONTROLLER	\N	\N	\N	\N		2020-02-27 20:53:48.464+08	2020-02-27 20:53:48.464+08	2f966726-181d-4301-8415-5987393db114	5	t	f
3367	gpio	GPIO	Variable	\N	\N	\N	\N	40	1		GPIO口	2020-02-27 20:55:11.887+08	2020-02-27 20:55:11.887+08	2f966726-181d-4301-8415-5987393db114	1	t	f
3368	ip	IP地址	Variable	\N	\N	10.8.30.2	\N	\N	\N		NAS 服务器地址	2020-02-27 20:55:39.511+08	2020-02-27 20:55:39.511+08	2f966726-181d-4301-8415-5987393db114	5	t	f
3369	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2020-02-27 22:26:35.061+08	2020-02-27 22:26:35.061+08	80f33249-c402-4942-8c91-15f19638dce4	5	t	f
3370	ieeeAddr	\N	Variable	\N	\N		\N	\N	\N	\N		2020-03-07 16:35:47.324+08	2020-03-07 16:35:47.324+08	c82a7f0e-848f-4659-9555-8b275c33036e	5	t	f
3371	sensortype	传感器类型	Constant	\N	\N	lx	\N	\N	\N	\N		2020-03-10 13:58:11.818+08	2020-03-10 13:58:11.818+08	43060aae-0e85-4ec6-9fc9-b05216b11e13	5	t	f
3372	protocolcode	协议号	Constant	\N	\N	1663	\N	\N	\N			2020-03-10 13:58:42.938+08	2020-03-10 13:58:42.938+08	43060aae-0e85-4ec6-9fc9-b05216b11e13	1	t	f
3373	sensortype	传感器类型	Constant	\N	\N	wsd	\N	\N	\N	\N		2020-03-10 14:00:00.117+08	2020-03-10 14:00:00.117+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	5	t	f
3374	protocolcode	协议号	Constant	\N	\N	1201	\N	\N	\N			2020-03-10 14:00:24.851+08	2020-03-10 14:00:24.851+08	6f6f83fa-1af9-4e4c-8d3f-53c2a4d1b4ca	1	t	f
3375	pointId	监测点ID	Variable	\N	\N	1	\N	\N	\N	\N		2020-03-12 15:38:21.509+08	2020-03-12 15:38:21.509+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	5	t	f
3376	beginTime	初始时间	Variable	\N	\N	20180102030405	\N	\N	\N			2020-03-12 15:38:44.441+08	2020-03-12 15:38:44.441+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	5	t	f
3406	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2020-04-08 15:56:47.858+08	2020-04-08 15:56:47.858+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	5	t	f
3377	sensortype	传感器类型	Constant	\N		gnss	0					2020-03-12 15:39:06.664+08	2020-03-12 15:39:25.672+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	5	t	f
3379	protocolcode	协议号	Constant	\N		1401	0					2020-03-12 17:19:03.929+08	2020-03-13 17:39:42.229+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	5	t	f
3407	SIMNum	SIM卡号	Variable	\N	\N	13212345678	\N	\N	\N	\N		2020-04-09 10:46:39.411+08	2020-04-09 10:46:39.411+08	bfa2c35f-19d1-450b-a04a-b0e211b43bf5	5	t	f
3408	deviceType	设备类型	Constant	\N	\N	gateway	\N	\N	\N			2020-04-09 10:47:09.793+08	2020-04-09 10:47:09.793+08	bfa2c35f-19d1-450b-a04a-b0e211b43bf5	5	t	f
3378	sensortype	传感器类型	Constant	\N		zxwd	0					2020-03-12 17:18:32.713+08	2020-03-16 15:17:15.97+08	2ea1c0ff-9d04-4a29-addb-ceaf8b4c1744	5	t	f
3380	protocolcode	协议号	Constant	\N	\N	9031	\N	\N	\N	\N		2020-03-18 14:13:11.94+08	2020-03-18 14:13:11.94+08	1e4fb0f1-79a1-4246-a85c-478b55f8df95	1	t	f
3381	sensortype	传感器型号	Constant	\N	\N	JLSZ	\N	\N	\N			2020-03-18 14:13:50.983+08	2020-03-18 14:13:50.983+08	1e4fb0f1-79a1-4246-a85c-478b55f8df95	5	t	f
3382	数据	mqtt	Variable	\N	\N	\N	2	3000	0	\N		2020-03-20 10:56:08.941+08	2020-03-20 10:56:08.941+08	1131f328-b9a1-4361-beae-547a1acb032d	2	t	f
3383	sensortype	传感器类型	Constant	\N	\N	duowei	\N	\N	\N	\N		2020-03-25 16:43:26.918+08	2020-03-25 16:43:26.918+08	47de1028-1b35-4a17-b78e-f66178ecb4e6	5	t	f
3384	deviceSerial	设备序列号	Variable	\N	\N		\N	\N	\N	\N		2020-04-01 10:09:24.309+08	2020-04-01 10:09:24.309+08	f070a6a5-406b-4567-ab70-0ba9cc204545	5	t	f
3385	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N	\N		2020-04-03 17:19:01.229+08	2020-04-03 17:19:01.229+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	5	t	f
3386	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-03 17:19:01.234+08	2020-04-03 17:19:01.234+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	5	t	f
3387	protocolcode	协议号	Constant	\N	\N	1503	\N	\N	\N		Modbus杆式测斜协议	2020-04-03 17:19:01.238+08	2020-04-03 17:19:01.238+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	5	t	f
3388	range	量程	Constant	\N	\N	(-30,30),(-25,70)	\N	\N	\N	°,℃		2020-04-03 17:19:01.241+08	2020-04-03 17:19:01.241+08	ca2fe08c-b600-4472-8de2-3c549ea7d150	5	t	f
3389	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2020-04-08 13:19:27.047+08	2020-04-08 13:19:27.047+08	0796dca5-8068-4bc2-a73f-99160576a988	1	t	f
3390	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2020-04-08 13:20:09.406+08	2020-04-08 13:20:09.406+08	0796dca5-8068-4bc2-a73f-99160576a988	5	t	f
3391	range	量程	Constant	\N	\N	(-5000,5000)	\N	\N	\N	kN		2020-04-08 13:21:09.264+08	2020-04-08 13:21:09.264+08	0796dca5-8068-4bc2-a73f-99160576a988	5	t	f
3392	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-08 13:22:01.628+08	2020-04-08 13:22:01.628+08	0796dca5-8068-4bc2-a73f-99160576a988	5	t	f
3393	channelId	通道号	Variable	\N	\N	1	\N	128	1			2020-04-08 13:22:39.545+08	2020-04-08 13:22:39.545+08	0796dca5-8068-4bc2-a73f-99160576a988	1	t	f
3394	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2020-04-08 13:23:28.144+08	2020-04-08 13:23:28.144+08	0796dca5-8068-4bc2-a73f-99160576a988	5	t	f
3395	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-04-08 15:18:35.61+08	2020-04-08 15:18:35.61+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	5	t	f
3396	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2020-04-08 15:18:35.613+08	2020-04-08 15:18:35.613+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	5	t	f
3397	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-08 15:18:35.615+08	2020-04-08 15:18:35.615+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	5	t	f
3398	range	量程	Constant	\N		(0,0.6)	0			MPa		2020-04-08 15:18:35.617+08	2020-04-08 15:19:01.632+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	5	t	f
3399	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2020-04-08 15:19:39.691+08	2020-04-08 15:19:39.691+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	1	t	f
3400	channelId	通道号	Variable	\N	\N	1	\N	128	1			2020-04-08 15:20:27.051+08	2020-04-08 15:20:27.051+08	c5a82ea8-374b-4efd-b9e9-716b216d8ee4	1	t	f
3401	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-04-08 15:53:51.42+08	2020-04-08 15:53:51.42+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	5	t	f
3402	channelId	通道号分类	Variable	\N	\N	1	\N	128	1			2020-04-08 15:54:30.263+08	2020-04-08 15:54:30.263+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	1	t	f
3403	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-08 15:55:01.552+08	2020-04-08 15:55:01.552+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	5	t	f
3404	range	量程	Constant	\N	\N	(0,6)	\N	\N	\N	MPa		2020-04-08 15:55:47.972+08	2020-04-08 15:55:47.972+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	5	t	f
3405	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N			2020-04-08 15:56:23.383+08	2020-04-08 15:56:23.383+08	385b0bd6-f460-40fc-9a65-78aaba84aaf3	1	t	f
3409	range	量程	Constant	\N	\N	(-30,30),(-25,70)	\N	\N	\N	°,℃		2020-04-09 11:45:01.373+08	2020-04-09 11:45:01.373+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	5	t	f
3410	protocolcode	协议号	Constant	\N	\N	1503	\N	\N	\N			2020-04-09 11:48:04.23+08	2020-04-09 11:48:04.23+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	5	t	f
3411	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-09 11:49:04.035+08	2020-04-09 11:49:04.035+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	5	t	f
3412	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N			2020-04-09 11:49:37.674+08	2020-04-09 11:49:37.674+08	cf08e20c-2c85-4a1d-84a6-b773c3291124	5	t	f
3413	sensortype	传感器类型	Variable	\N	\N	cx	\N	\N	\N	\N		2020-04-10 14:35:20.909+08	2020-04-10 14:35:20.909+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	5	t	f
3414	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-10 14:35:20.917+08	2020-04-10 14:35:20.917+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	5	t	f
3415	protocolcode	协议号	Constant	\N	\N	1503	\N	\N	\N			2020-04-10 14:35:20.922+08	2020-04-10 14:35:20.922+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	5	t	f
3416	range	量程	Variable	\N	\N	(-30,30),(-25,70)	\N	\N	\N	°,℃		2020-04-10 14:35:20.93+08	2020-04-10 14:35:20.93+08	854b696f-3001-4d7f-bffc-1e78e73b7d31	5	t	f
3417	range	量程	Variable	\N	\N	 (-30,30),(-25,70)	\N	\N	\N	°,℃		2020-04-13 10:48:03.089+08	2020-04-13 10:48:03.089+08	2f588726-18df-4ab2-b677-5c4479cef768	5	t	f
3418	protocolcode	协议号	Constant	\N	\N	1503	\N	\N	\N			2020-04-13 10:48:03.092+08	2020-04-13 10:48:03.092+08	2f588726-18df-4ab2-b677-5c4479cef768	5	t	f
3419	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-13 10:48:03.094+08	2020-04-13 10:48:03.094+08	2f588726-18df-4ab2-b677-5c4479cef768	5	t	f
3420	sensortype	传感器类型	Variable	\N	\N	cx	\N	\N	\N			2020-04-13 10:48:03.096+08	2020-04-13 10:48:03.096+08	2f588726-18df-4ab2-b677-5c4479cef768	5	t	f
3421	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N	\N		2020-04-13 11:44:59.535+08	2020-04-13 11:44:59.535+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	5	t	f
3422	protocolcode	协议号	Constant	\N	\N	1502	\N	\N	\N			2020-04-13 11:44:59.538+08	2020-04-13 11:44:59.538+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	5	t	f
3423	range	量程	Constant	\N		(-30,30),(-30,30),(-25,70)	0			°,°,℃		2020-04-13 11:44:59.541+08	2020-04-13 11:45:26.621+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	5	t	f
3424	devicetype	设备类型	Variable	\N	\N	sensor	\N	\N	\N	\N		2020-04-13 11:46:03.968+08	2020-04-13 11:46:03.968+08	b3c05fb2-59b8-4bf7-b85d-7823a6781395	5	t	f
3425	protocolcode	协议号	Constant	\N	\N	1503	\N	\N	\N	\N		2020-04-13 13:05:47.958+08	2020-04-13 13:05:47.958+08	71c10138-4c73-4682-af9b-a904323eeac2	5	t	f
3426	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N			2020-04-13 13:05:47.963+08	2020-04-13 13:05:47.963+08	71c10138-4c73-4682-af9b-a904323eeac2	5	t	f
3427	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-13 13:05:47.967+08	2020-04-13 13:05:47.967+08	71c10138-4c73-4682-af9b-a904323eeac2	5	t	f
3428	range	量程	Constant	\N	\N	 (-30,30),(-30,30),(-25,70)	\N	\N	\N			2020-04-13 13:05:47.97+08	2020-04-13 13:05:47.97+08	71c10138-4c73-4682-af9b-a904323eeac2	5	t	f
3429	protocolcode	协议号	Constant	\N	\N	9030	\N	\N	\N	\N		2020-04-13 13:25:53.459+08	2020-04-13 13:25:53.459+08	9699ac1e-3bc8-4a9a-960f-4c82cc2507ff	5	t	f
3430	protocolcode	协议号	Constant	\N	\N	9030	\N	\N	\N	\N		2020-04-13 13:29:23.768+08	2020-04-13 13:29:23.768+08	cbdb48d6-afd7-4322-884a-d37d56f96176	5	t	f
3431	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2020-04-13 16:31:25.306+08	2020-04-13 16:31:25.306+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	5	t	f
3432	moduleId	模块号	Variable	\N	\N	1	\N	\N	\N			2020-04-13 16:31:25.31+08	2020-04-13 16:31:25.31+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	5	t	f
3434	sensortype	传感器类型	Constant	\N	\N	 cj	\N	\N	\N	\N		2020-04-13 16:42:59.176+08	2020-04-13 16:42:59.176+08	8fd9d375-1389-43b9-9423-654a4dd5af44	5	t	f
3435	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-04-13 16:42:59.179+08	2020-04-13 16:42:59.179+08	8fd9d375-1389-43b9-9423-654a4dd5af44	5	t	f
3436	range	量程	Constant	\N	\N	(0.5,80)	\N	\N	\N	mm		2020-04-13 16:42:59.182+08	2020-04-13 16:42:59.182+08	8fd9d375-1389-43b9-9423-654a4dd5af44	5	t	f
3437	protocolcode	协议号	Constant	\N	\N	9509	\N	\N	\N			2020-04-13 16:42:59.185+08	2020-04-13 16:42:59.185+08	8fd9d375-1389-43b9-9423-654a4dd5af44	5	t	f
3438	k	转换系数	Variable	\N	\N	1	16	99999	-99999	\N		2020-04-13 17:20:54.427+08	2020-04-13 17:20:54.427+08	a81d1a62-5c7f-4c96-8abe-fe4a0bca5dcc	2	t	f
2771	range	量程	Constant	\N		(-500,500)	0			t		2019-02-25 13:32:42.963+08	2020-04-14 09:51:30.301+08	c952a71d-a917-40a7-aecc-cf2dc40c238a	5	t	f
3439	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-04-14 10:23:58.886+08	2020-04-14 10:23:58.886+08	6e79c080-ecb3-4222-927e-f2dfcd85683a	5	t	f
3440	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-04-14 10:32:45.13+08	2020-04-14 10:32:45.13+08	2b960cb5-8b22-4a35-b811-2a74b8f47196	5	t	f
3441	sensortype	传感器类型	Constant	\N	\N	ZX	\N	\N	\N	\N		2020-04-14 10:39:24.289+08	2020-04-14 10:39:24.289+08	2e98107c-2635-43a9-a89f-872152bac901	5	t	f
3442	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N	\N		2020-04-14 10:44:39.274+08	2020-04-14 10:44:39.274+08	2de0b18f-a13a-48a9-8e34-6bfeff609972	5	t	f
3443	protocolcode	协议号	Constant	\N	\N	1102	\N	\N	\N	\N		2020-04-14 10:52:48.228+08	2020-04-14 10:52:48.228+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	1	t	f
3433	range	量程	Variable	\N		(‐40,120)	0					2020-04-13 16:31:25.313+08	2020-04-14 10:56:09.103+08	0df31ce5-f6b4-4f95-a5f8-07c4ccc52346	5	t	f
3444	kt	温补系数	Variable	\N	\N	0	3	1000	-1000	\N		2020-04-21 14:04:39.535+08	2020-04-21 14:04:39.535+08	8cee37a9-d972-4d3b-97eb-53c9a87dbe9c	2	t	f
3445	t0	温度初值	Variable	\N	\N	0	2	100	-100	℃		2020-04-21 14:05:22.453+08	2020-04-21 14:05:22.453+08	8cee37a9-d972-4d3b-97eb-53c9a87dbe9c	2	t	f
3447	sno	\N	Tag	\N	\N	\N	\N	\N	\N	\N		2020-04-22 19:14:33.289+08	2020-04-22 19:14:33.289+08	f9304770-9fc6-4203-a75a-2759b659a4d7	5	t	f
3448	moduleId	探头编号	Variable	\N	\N		\N	\N	\N	\N		2020-05-11 10:58:14.701+08	2020-05-11 10:58:14.701+08	57b88830-72c4-4739-8d3b-3754fb371135	5	t	f
3449	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2020-05-14 11:39:53.452+08	2020-05-14 11:39:53.452+08	82d6439d-e647-44e7-ba65-2de818baea7f	5	t	f
3450	sensortype	传感器类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2020-05-20 09:22:50.323+08	2020-05-20 09:22:50.323+08	9c12215f-afab-45e9-8341-1e487df6d020	5	t	f
3451	sensortype	设备类型	Constant	\N	\N	gdgs	\N	\N	\N	\N		2020-05-20 09:26:32.549+08	2020-05-20 09:26:32.549+08	06cc1b7c-e6a3-4caf-9b5a-0e7ab8800ec2	5	t	f
3452	cycletime	采集间隔	Variable	\N	\N		\N	\N	\N	\N		2020-05-26 10:15:05.235+08	2020-05-26 10:15:05.235+08	94e0657d-9d34-4baf-bac1-34cb6610e051	5	t	f
3462	registerCount	寄存器个数	Variable	\N	\N	14	\N	\N	\N	\N		2020-07-01 13:42:36.184+08	2020-07-01 13:42:36.184+08	5865ba02-99d8-4649-a200-c40dfa917982	5	t	f
3455	G	直线系数G	Variable	\N		1	2	9999999999999999	-999999999999999			2020-06-11 14:33:34.373+08	2020-06-11 15:25:21.676+08	59ffec5d-7c08-417e-bddc-8483466e1d66	2	t	f
3456	K	温度系数K	Variable	\N		1	2	9999999999999999	-999999999999999			2020-06-11 14:34:16.954+08	2020-06-11 15:25:39.704+08	59ffec5d-7c08-417e-bddc-8483466e1d66	2	t	f
3457	ceMoudle	测斜编号（逗号隔开，底部为第一根）	Variable	\N	\N	1,2,3	\N	\N	\N	\N		2020-06-12 09:44:09.784+08	2020-06-12 09:44:09.784+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	5	t	f
3461	uploadinteral	上传间隔	Variable	\N			0			s		2020-06-30 08:39:03.076+08	2020-06-30 09:07:31.999+08	c3507ba4-b2b5-45b8-aecb-84079c90649d	5	t	f
3453	T0	温度初值T0	Variable	\N		0	2	99999999999999999999	-9999999999999999	℃		2020-06-11 14:31:14.898+08	2020-06-11 15:24:39.372+08	59ffec5d-7c08-417e-bddc-8483466e1d66	2	t	f
3458	returnTime	回传时间	Variable	\N	\N	0	\N	\N	\N	min		2020-06-12 09:45:28.108+08	2020-06-12 09:45:28.108+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	5	t	f
3459	unitType	测斜类型	Variable	\N	\N	0	\N	\N	\N			2020-06-12 09:46:20.307+08	2020-06-12 09:46:20.307+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a	5	t	f
3454	R0	模数初值R0	Variable	\N		0	2	99999999999999	-9999999999999999	Dig		2020-06-11 14:32:35.844+08	2020-06-18 11:49:48.039+08	59ffec5d-7c08-417e-bddc-8483466e1d66	2	t	f
456	range	量程	Constant	\N		(0,2000)	0			mm		2017-12-12 10:23:59.564+08	2020-07-14 17:01:49.735+08	24064f03-7c7e-493b-99f2-c926717d28fc	5	t	f
3466	sensortype	传感器类型	Constant	\N	\N	gnss	\N	\N	\N	\N		2020-07-20 09:49:47.236+08	2020-07-20 09:49:47.236+08	069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	5	t	f
3460	acqinteral	采集间隔	Variable	\N			0			s		2020-06-30 08:38:31.459+08	2020-06-30 09:07:37.637+08	c3507ba4-b2b5-45b8-aecb-84079c90649d	5	t	f
3467	beginTime	初始时间	Variable	\N	\N	20180102030405	\N	\N	\N	\N		2020-07-20 09:50:30.535+08	2020-07-20 09:50:30.535+08	069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	5	t	f
3468	pointId	监测点ID	Variable	\N	\N	1	\N	\N	\N			2020-07-20 09:50:56.64+08	2020-07-20 09:50:56.64+08	069e9c4f-794e-4b89-abc9-d53ab5d5cf7a	5	t	f
3469	address	设备地址	Variable	\N	\N		\N	\N	\N	\N		2020-07-20 16:30:43.051+08	2020-07-20 16:30:43.051+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	5	t	f
3470	code	项目编码	Variable	\N	\N		\N	\N	\N			2020-07-20 16:31:15.209+08	2020-07-20 16:31:15.209+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	5	t	f
3471	dataUrl	dataUrl	Variable	\N	\N	http://123.57.47.163:8008/eelink/api/getGHDatas	\N	\N	\N			2020-07-20 16:32:14.198+08	2020-07-20 16:32:14.198+08	f54dc0a0-6317-4a46-9f09-4d8024ff6959	5	t	f
3476	nodenum	节点数	Variable	\N	\N		\N	\N	\N	\N		2020-08-10 08:55:15.583+08	2020-08-10 08:55:15.583+08	8581898c-d047-4cdc-8ccc-ef33a1567435	5	t	f
3477	initial	初值	Variable	\N	\N	0	3	1000000	0	kWh		2020-08-13 09:25:55.331+08	2020-08-13 09:25:55.331+08	11b16ed9-a251-4907-b941-5a31ea559da1	2	t	f
3479	sensortype	设备类型	Constant	\N	\N	prism_L_0	\N	\N	\N	\N		2020-08-14 16:26:35.678+08	2020-08-14 16:26:35.678+08	7599bfb7-18fc-40c7-be52-ff9fd0d1519e	5	t	f
3478	K	互感系数	Variable	\N		50	0	100	1			2020-08-13 09:25:55.335+08	2020-08-13 10:01:31.707+08	11b16ed9-a251-4907-b941-5a31ea559da1	1	t	f
3480	registersNum	寄存器数量	Variable	\N	\N		\N	\N	\N	\N		2020-08-26 14:07:08.141+08	2020-08-26 14:07:08.141+08	945563fe-656a-461e-8dca-7a4b2edbf9d0	5	t	f
3486	sentype	设备类型	Constant	\N	\N	rainfall	\N	\N	\N	\N		2020-08-27 16:22:16.998+08	2020-08-27 16:22:16.998+08	35e7c6a8-9125-4612-889d-259e09a24735	5	t	f
3487	sensortype	类型	Constant	\N	\N	standard485	\N	\N	\N			2020-08-27 16:22:17+08	2020-08-27 16:22:17+08	35e7c6a8-9125-4612-889d-259e09a24735	5	t	f
3488	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N	\N		2020-08-27 16:38:22.115+08	2020-08-27 16:38:22.115+08	899def98-516b-4c5f-a7e8-2fd48018bf12	5	t	f
3489	sensorType	设备类型	Variable	\N	\N	CGQ	\N	\N	\N	\N		2020-09-01 10:29:11.22+08	2020-09-01 10:29:11.22+08	8f3e91ce-4354-4d6a-826a-c727aaabaa58	5	t	f
3493	sensortype	传感器类型	Constant	\N	\N	pic	\N	\N	\N	\N		2020-09-10 11:15:15.557+08	2020-09-10 11:15:15.557+08	207df42a-f8cf-47d0-a4bc-d1d5d9114928	5	t	f
3494	dataUrl	dataUrl	Variable	\N	\N	http://182.92.232.25:6830/partner/channel	\N	\N	\N	\N		2020-09-11 10:25:19.027+08	2020-09-11 10:25:19.027+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	5	t	f
3495	tokenUrl	tokenUrl	Variable	\N	\N	http://182.92.232.25:6830/sys/login	\N	\N	\N			2020-09-11 10:25:48.367+08	2020-09-11 10:25:48.367+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	5	t	f
3497	username	账号	Variable	\N	\N		\N	\N	\N			2020-09-11 10:30:43.754+08	2020-09-11 10:30:43.754+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	5	t	f
3498	password	密码	Variable	\N	\N		\N	\N	\N			2020-09-11 10:31:14.611+08	2020-09-11 10:31:14.611+08	f6c2a1a6-fe9e-4d10-87dc-0dd622c65c43	5	t	f
3499	sensortype	传感器类型	Constant	\N		gnss_t500	0			无		2020-09-11 14:36:39.669+08	2020-09-11 14:50:06.338+08	2a7828f8-5044-43fb-9435-9a59ec4d769a	5	t	f
3501	sensortype	设备类型	Constant	\N	\N	prism_L_0	\N	\N	\N	\N		2020-09-18 11:09:37.834+08	2020-09-18 11:09:37.834+08	8523278f-0788-4ef6-8669-64d28b348c59	5	t	f
3504	sensorType	设备类型	Constant	\N	\N	257	\N	\N	\N	\N		2020-09-21 11:51:45.863+08	2020-09-21 11:51:45.863+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	1	t	f
3506	device_id	设备ID	Variable	\N	\N		\N	\N	\N	\N		2020-09-21 13:34:34.324+08	2020-09-21 13:34:34.324+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	5	t	f
3507	device_id	设备ID	Variable	\N	\N		\N	\N	\N	\N		2020-09-21 13:35:04.624+08	2020-09-21 13:35:04.624+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	5	t	f
3505	device_id	设备ID	Variable	\N			0			.	无	2020-09-21 13:34:01.043+08	2020-09-27 10:30:13.396+08	55f72e62-0922-4975-9714-058decf7a14d	5	t	f
3509	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2020-09-28 10:33:27.954+08	2020-09-28 10:33:27.954+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	5	t	f
3510	sensortype	传感器类型	Constant	\N	\N	fs	\N	\N	\N			2020-09-28 10:33:27.956+08	2020-09-28 10:33:27.956+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	5	t	f
3511	devicetype	设备类型	Constant	\N	\N	sensor	\N	\N	\N	\N		2020-09-28 10:45:02.919+08	2020-09-28 10:45:02.919+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	5	t	f
3512	protocolcode	协议号	Constant	\N	\N	9219	\N	\N	\N			2020-09-28 10:45:02.922+08	2020-09-28 10:45:02.922+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	1	t	f
3513	sensortype	传感器类型	Constant	\N	\N	fx	\N	\N	\N			2020-09-28 10:45:02.925+08	2020-09-28 10:45:02.925+08	455f2a29-2660-4cfa-97f9-ef7f357d59d6	5	t	f
3508	protocolcode	协议号	Constant	\N		9218	0					2020-09-28 10:33:27.951+08	2020-09-28 10:50:31.502+08	e6b4e767-9ae2-459f-99fc-042b9d6af678	1	t	f
3503	sensorType	设备类型	Constant	\N		513	0			.	无	2020-09-21 11:50:24.73+08	2020-09-28 15:08:13.365+08	55f72e62-0922-4975-9714-058decf7a14d	1	t	f
3502	sensorType	设备类型	Constant	\N		514	0			.	无	2020-09-21 11:49:24.452+08	2020-09-28 15:10:22.682+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	1	t	f
3516	device_id	设备ID	Variable	\N	\N		\N	\N	\N	\N		2020-10-10 10:46:03.702+08	2020-10-10 10:46:03.702+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	5	t	f
3517	sensorType	设备类型	Constant	\N		514	0	\N	\N	.	无	2020-10-10 10:46:03.706+08	2020-10-10 10:46:03.706+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	1	t	f
3518	sensorType	设备类型	Constant	\N		513	0	\N	\N	.	无	2020-10-10 10:46:11.535+08	2020-10-10 10:46:11.535+08	f0d5077b-4260-422c-87e3-92d13d136ebf	1	t	f
3519	device_id	设备ID	Variable	\N			0	\N	\N	.	无	2020-10-10 10:46:11.541+08	2020-10-10 10:46:11.541+08	f0d5077b-4260-422c-87e3-92d13d136ebf	5	t	f
3532	deviceSerial	设备号	Variable	\N	\N		\N	\N	\N	\N		2020-10-20 16:21:29.063+08	2020-10-20 16:21:29.063+08	f89c588a-f68a-4208-857b-555022da9f9e	5	t	f
3533	sensortype	传感器类型	Constant	\N	\N	standard	\N	\N	\N	\N		2020-10-23 17:03:59.972+08	2020-10-23 17:03:59.972+08	d26881e7-f69e-4b7d-9041-47009bd2c298	5	t	f
3523	loraid	LoraID	Variable	\N	\N	0	\N	\N	\N	\N		2020-10-15 14:25:11.424+08	2020-10-15 14:25:11.424+08	4452ff6a-859b-45e6-9e9c-c6b59ee3667b	5	t	f
3524	hard	硬件版本	Constant	\N	\N	16	\N	\N	\N	\N	0x10	2020-10-15 14:33:56.796+08	2020-10-15 14:33:56.796+08	b6d47de4-d27f-45de-a8b2-adfedc7f0f6a	1	t	f
3525	hard	硬件版本	Constant	\N	\N	16	\N	\N	\N	\N	0x10	2020-10-15 14:34:27.939+08	2020-10-15 14:34:27.939+08	55f72e62-0922-4975-9714-058decf7a14d	1	t	f
3526	hard	硬件版本	Constant	\N	\N	16	\N	\N	\N	\N	0x10	2020-10-15 14:34:56.232+08	2020-10-15 14:34:56.232+08	dc3e2b45-f9db-4aec-993a-d8369918a67e	1	t	f
3521	hard	硬件版本	Constant	\N		16	0			.	0x10	2020-10-10 10:53:50.914+08	2020-10-15 16:25:41.954+08	fa3e1751-abcf-43d6-89d5-ad9bc9a979b6	1	t	f
3530	sensortype	设备类型	Constant	\N		声光报警	0			无	无	2020-10-16 14:22:53.599+08	2020-11-24 15:49:31.732+08	1450b04e-214d-47b0-8e32-def5a361cc48	5	t	f
3527	sensortype	传感器类型	Constant	\N	\N	cj	\N	\N	\N	\N		2020-10-16 11:41:30.101+08	2020-10-16 11:41:30.101+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	5	t	f
3520	hard	硬件版本	Constant	\N		17	0			.	0x10	2020-10-10 10:53:02.194+08	2020-10-30 16:01:28.71+08	f0d5077b-4260-422c-87e3-92d13d136ebf	1	t	f
3534	sensortype	传感器型号	Constant	\N	\N	wsd	\N	\N	\N	\N		2020-11-04 09:56:29.882+08	2020-11-04 09:56:29.882+08	e3e8ca1e-1676-4b76-96ed-131ba8516599	5	t	f
3535	sensortype	传感器类型	Constant	\N	\N	lx	\N	\N	\N	\N		2020-11-04 10:06:19.428+08	2020-11-04 10:06:19.428+08	2d0ff832-a7e0-4029-94bf-d7203c1fa793	5	t	f
3538	acqinterval	采集间隔	Variable	\N	\N		\N	\N	\N		min	2020-11-10 15:16:48.493+08	2020-11-10 15:16:48.493+08	fb922722-9262-470f-8064-4b78234fa802	5	f	f
3537	returnTime	回传时间间隔	Variable	\N			0			min		2020-11-10 15:15:29.527+08	2020-11-10 15:16:54.882+08	fb922722-9262-470f-8064-4b78234fa802	5	f	f
3540	bps	采集波特率	Variable	\N	\N		\N	\N	\N			2020-11-10 15:19:20.788+08	2020-11-10 15:19:20.788+08	fb922722-9262-470f-8064-4b78234fa802	5	f	f
3541	sa	服务器地址	Variable	\N	\N	218.3.126.49	\N	\N	\N			2020-11-10 15:20:29.567+08	2020-11-10 15:20:29.567+08	fb922722-9262-470f-8064-4b78234fa802	5	f	f
3542	port	端口	Variable	\N	\N	19800	\N	\N	\N			2020-11-10 15:21:14.254+08	2020-11-10 15:21:14.254+08	fb922722-9262-470f-8064-4b78234fa802	5	f	f
3544	sensortype	传感器类型	Constant	\N	\N	cx	\N	\N	\N	\N		2020-11-11 09:55:32.35+08	2020-11-11 09:55:32.35+08	c991c138-3b47-4a21-af81-9ba1df554176	5	t	f
3529	sensortype	传感器类型	Constant	\N		kx	0					2020-10-16 13:52:59.067+08	2020-11-16 10:23:14.29+08	b7dd781d-dba7-4228-b49f-8aee75e42625	5	t	f
3536	sensortype	传感器类型	Constant	\N		rainfall	0					2020-11-04 10:10:46.631+08	2020-11-19 15:51:58.522+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	5	t	f
3582	password	密码	Variable	\N	\N	TJU123456	\N	\N	\N			2020-12-31 13:44:15.46+08	2020-12-31 13:44:15.46+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	5	t	f
3554	hard	硬件版本	Constant	\N	\N	16	\N	\N	\N	\N	0x10	2020-11-11 17:46:32.112+08	2020-11-11 17:46:32.112+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	1	t	f
3555	device_id	设备ID	Variable	\N	\N		\N	\N	\N	\N		2020-11-11 17:46:32.115+08	2020-11-11 17:46:32.115+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	5	t	f
3556	sensorType	设备类型	Constant	\N	\N	257	\N	\N	\N	\N		2020-11-11 17:46:32.117+08	2020-11-11 17:46:32.117+08	92bbac70-53a3-4d25-b8ab-b4287c52359d	1	t	f
3557	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2020-11-16 09:26:32.47+08	2020-11-16 09:26:32.47+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	1	t	f
3558	sensortype	传感器类型	Constant	\N	\N	ty	\N	\N	\N	\N		2020-11-16 09:26:32.474+08	2020-11-16 09:26:32.474+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	5	t	f
3559	DefaultFormulaId	默认公式	Constant	\N	\N	927f1c11-f9a3-4c84-a565-57ee9245e41f	\N	\N	\N	\N		2020-11-18 09:39:13.236+08	2020-11-18 09:39:13.236+08	90e48651-6ab9-4f11-95e9-c2c7eb4c3c15	5	t	f
3560	DefaultFormulaId	默认公式	Constant	\N	\N	c5378a9c-9406-4583-9ae8-5fddb5a5d65e	\N	\N	\N	\N		2020-11-18 09:40:40.96+08	2020-11-18 09:40:40.96+08	c991c138-3b47-4a21-af81-9ba1df554176	5	t	f
3561	DefaultFormulaId	默认公式	Constant	\N	\N	b545defc-450b-4986-83ef-445423df6f98	\N	\N	\N	\N		2020-11-18 09:53:52.96+08	2020-11-18 09:53:52.96+08	c51512a6-3e90-4b6e-8a21-987464b10ca9	5	t	f
3564	DefaultFormulaId	默认公式	Constant	\N	\N	b545defc-450b-4986-83ef-445423df6f98	\N	\N	\N	\N		2020-11-18 09:58:31.566+08	2020-11-18 09:58:31.566+08	1450b04e-214d-47b0-8e32-def5a361cc48	5	t	f
3565	DefaultFormulaId	默认公式	Constant	\N	\N	d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	\N	\N	\N	\N		2020-11-18 10:03:41.232+08	2020-11-18 10:03:41.232+08	b7dd781d-dba7-4228-b49f-8aee75e42625	5	t	f
3566	DefaultFormulaId	默认公式	Constant	\N	\N	68180c88-8643-47ba-815c-90668639e80f	\N	\N	\N	\N		2020-11-18 10:04:48.989+08	2020-11-18 10:04:48.989+08	0b84defc-2160-4d4a-8d71-6f350b4d6666	5	t	f
3567	DefaultFormulaId	默认公式	Variable	\N	\N	b545defc-450b-4986-83ef-445423df6f98	\N	\N	\N	\N		2020-11-18 10:09:14.494+08	2020-11-18 10:09:14.494+08	e92738ba-66bf-4ec9-85c5-c1f2b4d7780e	5	t	f
3568	DefaultFormulaId	默认公式	Constant	\N	\N	bdb43886-e71d-4135-ad42-6e296635b02e	\N	\N	\N	\N		2020-11-18 10:10:51.751+08	2020-11-18 10:10:51.751+08	d2e74fbe-59fe-420d-b127-c61ba8236f42	5	t	f
3569	protocolcode	协议号	Constant	\N	\N	1401	\N	\N	\N	\N		2020-11-20 08:58:54.974+08	2020-11-20 08:58:54.974+08	af9ec966-1c73-4e23-bae8-5ffcb4661942	5	t	f
3570	sensortype	传感器类型	Constant	\N	\N	zx	\N	\N	\N			2020-11-20 08:59:43.003+08	2020-11-20 08:59:43.003+08	af9ec966-1c73-4e23-bae8-5ffcb4661942	5	t	f
3571	DefaultFormulaId	默认公式	Constant	\N	\N	b545defc-450b-4986-83ef-445423df6f98	\N	\N	\N	\N		2020-11-20 10:08:49.247+08	2020-11-20 10:08:49.247+08	207df42a-f8cf-47d0-a4bc-d1d5d9114928	5	t	f
3563	DefaultFormulaId	默认公式	Constant	\N		898c3c4f-ecab-4aa9-9a95-accd00e26193	0					2020-11-18 09:57:36.473+08	2020-11-20 10:57:52.133+08	2d0ff832-a7e0-4029-94bf-d7203c1fa793	5	t	f
3585	moduleNo	设备号	Variable	\N	\N		\N	\N	\N	\N		2020-12-31 14:44:56.77+08	2020-12-31 14:44:56.77+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	5	t	f
3562	DefaultFormulaId	默认公式	Constant	\N		fae5e233-4034-4ebe-8e7b-0bf35a648ec9	0					2020-11-18 09:56:24.607+08	2020-11-20 11:20:29.833+08	e3e8ca1e-1676-4b76-96ed-131ba8516599	5	t	f
3572	sensortype	传感器类型	Constant	\N	\N	standard485	\N	\N	\N	\N		2020-11-26 11:43:44.645+08	2020-11-26 11:43:44.645+08	86aa83da-35f2-4247-8660-4d23b9c30a1c	5	t	f
3573	sensortype	传感器类型	Constant	\N	\N	standard485	\N	\N	\N	\N		2020-11-26 11:47:01.528+08	2020-11-26 11:47:01.528+08	c02e4b7c-e6b7-4d83-969c-34059f84af1f	5	t	f
3574	interval	粒度	Variable	\N	\N	\N	\N	1440	0	min		2020-12-03 17:40:46.601+08	2020-12-03 17:40:46.601+08	085307b7-181b-4059-9e81-1cbfff8fa061	1	t	f
3575	direction	方向	Variable	\N	左进右出,右进左出	左进右出	\N	\N	\N			2020-12-03 17:40:46.605+08	2020-12-03 17:40:46.605+08	085307b7-181b-4059-9e81-1cbfff8fa061	4	t	f
3576	device_id	基站ID	Variable	\N	\N		\N	\N	\N	\N		2020-12-09 13:54:25.977+08	2020-12-09 13:54:25.977+08	8001366f-40a9-4e0c-affa-d050c5eacf17	5	t	f
3577	closTime	闭合时间	Variable	\N	\N	2	\N	\N	\N	s		2020-12-24 09:23:58.513+08	2020-12-24 09:23:58.513+08	7b536454-20a7-4c1b-bfeb-4a0f018d2673	5	t	f
3578	cycle	周期	Variable	\N	\N	300000	\N	\N	\N	ms		2020-12-24 16:03:29.503+08	2020-12-24 16:03:29.503+08	d67fea40-a63c-4087-b5fd-5e5f0c387893	5	t	f
3579	sensortype	传感器类型	Constant	\N	\N	多点位移	\N	\N	\N	\N		2020-12-30 15:52:41.406+08	2020-12-30 15:52:41.406+08	d9aab088-57f5-43ba-b30b-3342219a4b75	5	t	f
3580	dataUrl	dataUrl	Variable	\N		http://gtd.vp.cn/dataChart/queryShareDataList.do	0			\N		2020-12-31 13:41:41.63+08	2020-12-31 13:42:29.232+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	5	t	f
3581	username	用户名	Variable	\N	\N	tdjgjkjc	\N	\N	\N			2020-12-31 13:43:37.962+08	2020-12-31 13:43:37.962+08	1dae2ae1-5be8-4cd2-824f-cc4948f75959	5	t	f
3588	sensortype	设备类型	Constant	\N	\N	prism_L_0	\N	\N	\N			2021-01-08 17:44:35.801+08	2021-01-08 17:44:35.801+08	daaea98a-a1a5-40c5-b34f-108d16d94b12	5	t	f
3589	sensortype	设备类型	Constant	\N	\N	prism_L	\N	\N	\N	\N		2021-01-08 17:46:14.768+08	2021-01-08 17:46:14.768+08	2d2bb5aa-7dae-4123-bf05-5cdc08d7480f	5	t	f
3591	sensortype	传感器类型	Constant	\N		js	0					2021-01-18 12:37:46.562+08	2021-01-18 12:38:16.136+08	7d999707-8940-47f8-995e-f50b44e48ede	5	t	f
3596	sensortype	传感器类型	Constant	\N	\N	hs	\N	\N	\N	\N		2021-01-18 14:09:49.984+08	2021-01-18 14:09:49.984+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	5	t	f
3590	DefaultFormulaId	默认公式	Constant	\N		b545defc-450b-4986-83ef-445423df6f98	0					2021-01-18 12:37:46.559+08	2021-01-18 13:57:55.962+08	7d999707-8940-47f8-995e-f50b44e48ede	5	t	f
3592	sensortype	传感器类型	Constant	\N	\N	qj	\N	\N	\N	\N		2021-01-18 14:02:08.274+08	2021-01-18 14:02:08.274+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	5	t	f
3593	DefaultFormulaId	默认公式	Constant	\N	\N	b545defc-450b-4986-83ef-445423df6f98	\N	\N	\N			2021-01-18 14:02:08.279+08	2021-01-18 14:02:08.279+08	ecf4b234-2797-4fbc-bf0d-0f3f41dbd017	5	t	f
3594	sensortype	传感器类型	Constant	\N	\N	tw	\N	\N	\N	\N		2021-01-18 14:04:59.681+08	2021-01-18 14:04:59.681+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	5	t	f
3595	DefaultFormulaId	默认公式	Constant	\N	\N	ed141cf4-ca2c-49a1-9704-afee24dc9c71	\N	\N	\N			2021-01-18 14:04:59.684+08	2021-01-18 14:04:59.684+08	d1b7163a-96fb-4364-a1ec-73b29be3dbc0	5	t	f
3597	DefaultFormulaId	默认公式	Constant	\N	\N	ed141cf4-ca2c-49a1-9704-afee24dc9c71	\N	\N	\N			2021-01-18 14:09:49.99+08	2021-01-18 14:09:49.99+08	c677c2a2-bc09-4171-ad9c-f9ddfbf3d046	5	t	f
3598	sensortype	传感器类型	Constant	\N	\N	nw	\N	\N	\N	\N		2021-01-18 14:14:29.682+08	2021-01-18 14:14:29.682+08	e2ad2fb6-75a3-490f-82ae-eac117102885	5	t	f
3599	DefaultFormulaId	默认公式	Constant	\N	\N	ed141cf4-ca2c-49a1-9704-afee24dc9c71	\N	\N	\N			2021-01-18 14:14:29.695+08	2021-01-18 14:14:29.695+08	e2ad2fb6-75a3-490f-82ae-eac117102885	5	t	f
3602	sensortype	传感器类型	Constant	\N	\N	cj	\N	\N	\N	\N		2021-01-26 15:59:08.599+08	2021-01-26 15:59:08.599+08	dadaf677-ed6c-4f61-ba61-d030f157dd14	5	t	f
3603	deviceType	设备类型	Constant	\N	\N	sensor	\N	\N	\N			2021-01-26 15:59:08.685+08	2021-01-26 15:59:08.685+08	dadaf677-ed6c-4f61-ba61-d030f157dd14	5	t	f
3604	protocolcode	协议号	Constant	\N	\N	9509	\N	\N	\N			2021-01-26 15:59:08.691+08	2021-01-26 15:59:08.691+08	dadaf677-ed6c-4f61-ba61-d030f157dd14	5	t	f
3605	accelerationrange	加速度量程	Variable	\N	2,4,8	2	\N	\N	\N	g		2021-01-29 10:12:04.682+08	2021-01-29 10:12:04.682+08	c51a8eb3-9068-456f-9922-5934de559a71	4	t	f
3606	lagpoint	滞后点数	Variable	\N	\N	0	\N	2048	0			2021-01-29 10:12:04.969+08	2021-01-29 10:12:04.969+08	c51a8eb3-9068-456f-9922-5934de559a71	1	t	f
3607	triggermode	触发方式	Variable	\N	绝对值,上升沿,下降沿,峰值	绝对值	\N	\N	\N			2021-01-29 10:12:04.974+08	2021-01-29 10:12:04.974+08	c51a8eb3-9068-456f-9922-5934de559a71	4	t	f
3608	duration	定时采集粒度	Variable	\N	\N	5	\N	999999	0	min		2021-01-29 10:12:04.977+08	2021-01-29 10:12:04.977+08	c51a8eb3-9068-456f-9922-5934de559a71	1	t	f
3610	sduration	定时采集时长	Variable	\N	\N	5	\N	99999	0	s		2021-01-29 10:12:05.26+08	2021-01-29 10:12:05.26+08	c51a8eb3-9068-456f-9922-5934de559a71	1	t	f
3611	das	去直流	Variable	\N	\N	true	\N	\N	\N			2021-01-29 10:12:05.263+08	2021-01-29 10:12:05.263+08	c51a8eb3-9068-456f-9922-5934de559a71	3	t	f
3612	amplification	放大倍数	Variable	\N	1,10,100,1000	1	\N	\N	\N			2021-01-29 10:12:05.266+08	2021-01-29 10:12:05.266+08	c51a8eb3-9068-456f-9922-5934de559a71	4	t	f
3613	amplitudeadj	幅值修正参数	Variable	\N	\N	0	2	51241	0			2021-01-29 10:12:05.268+08	2021-01-29 10:12:05.268+08	c51a8eb3-9068-456f-9922-5934de559a71	2	t	f
3614	tduration	加速度触发采集时长	Variable	\N	\N	5	\N	999999	0	s		2021-01-29 10:12:05.271+08	2021-01-29 10:12:05.271+08	c51a8eb3-9068-456f-9922-5934de559a71	1	t	f
3615	triglevel	触发电平	Variable	\N	\N	30	2	300	5	mv		2021-01-29 10:12:05.274+08	2021-01-29 10:12:05.274+08	c51a8eb3-9068-456f-9922-5934de559a71	2	t	f
3616	triggerjoin	参与触发方式	Variable	\N	不参与,参与	参与	\N	\N	\N			2021-01-29 10:12:05.276+08	2021-01-29 10:12:05.276+08	c51a8eb3-9068-456f-9922-5934de559a71	4	t	f
3617	samplefreq	采样频率	Variable	\N	100,200	100	\N	\N	\N	Hz		2021-01-29 10:12:05.279+08	2021-01-29 10:12:05.279+08	c51a8eb3-9068-456f-9922-5934de559a71	4	t	f
3618	filterfreq	过滤频率	Variable	\N	\N	128	\N	2048	64	Hz		2021-01-29 10:12:05.281+08	2021-01-29 10:12:05.281+08	c51a8eb3-9068-456f-9922-5934de559a71	1	t	f
3619	dcdriftadj	直流漂移校准参数	Variable	\N	\N	0	2	6255	0			2021-01-29 10:12:05.283+08	2021-01-29 10:12:05.283+08	c51a8eb3-9068-456f-9922-5934de559a71	2	t	f
3621	duration	定时采集	Variable	\N	\N	5	\N	999999	0	min		2021-02-01 11:49:22.386+08	2021-02-01 11:49:22.386+08	cce5d34b-3464-4566-81e6-3ff2540af13e	1	t	f
3622	moduleid	模块号	Variable	\N	\N		\N	\N	\N	\N		2021-02-04 16:04:59.969+08	2021-02-04 16:04:59.969+08	408d0732-eb70-4420-89b3-8f5ab433528f	5	t	f
3623	disport	地灾端口	Variable	\N			0					2021-02-19 10:13:17.524+08	2021-02-19 10:15:19.091+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	5	f	f
3624	password	密码	Variable	\N	\N		\N	\N	\N	\N		2021-02-19 10:53:23.458+08	2021-02-19 10:53:23.458+08	a1923ce2-b8a5-45cb-9d98-6a42901cee7c	5	f	f
3625	sensortype	传感器类型	Constant	\N	\N	LF	\N	\N	\N	\N		2021-02-20 15:54:20.578+08	2021-02-20 15:54:20.578+08	ff8195ce-78e0-4668-81bb-8f26e83411a9	5	t	f
3627	loraid	LoraID	Variable	\N	\N	0	\N	\N	\N	\N		2021-02-24 11:18:06.869+08	2021-02-24 11:18:06.869+08	5b625df3-f714-4971-94a8-625e9c8812fc	5	t	f
1777	range	量程	Constant	\N		(-2000,2000)	0			kN		2018-01-23 14:53:15.42+08	2021-03-02 13:53:02.387+08	f6b98e0f-0bfe-4a95-808c-d6d10b4c803b	5	t	f
1795	range	量程	Constant	\N		(-4000,4000)	0			kN		2018-01-23 14:53:16.006+08	2021-03-02 13:58:14.991+08	8bab3e11-dc23-4082-97ec-a04e78fa19c3	5	t	f
\.


--
-- Name: DeviceProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."DeviceProperty_id_seq"', 3627, true);


--
-- Data for Name: Dimension; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Dimension" (id, name, "desc", "createdAt", "updatedAt", "thingId") FROM stdin;
\.


--
-- Data for Name: DimensionCapability; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."DimensionCapability" (id, repeats, "interval", qos, timeout, "createdAt", "updatedAt", "deviceCapabilityId", "dimensionId", "errTimesToDrop") FROM stdin;
\.


--
-- Data for Name: FeedBack; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."FeedBack" (id, email, mobile, title, "desc", status, "operatorId", "operatorName", remark, "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: FilteredResource; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."FilteredResource" (id, name, "desc", type, key, "createBy", "belongTo", properties, "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: FormulaMeta; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."FormulaMeta" (id, name, formula, key, "desc", "createdAt", "updatedAt", "deviceMetaId") FROM stdin;
ea7f8dfb-96fe-4a26-90bc-1b51c9cae11b	减初值公式	\N	\N		2018-03-01 14:32:31.496+08	2018-03-01 14:32:31.496+08	c69575ab-795c-45ec-8901-f370255beff1
9237d478-75b4-48a0-a403-98172bf6c694	基泰通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-03-06 16:53:45.741+08	2018-03-19 16:32:14.219+08	4e281788-df68-4193-bbe0-9159eee1f24e
155ebc9a-097d-4567-baf4-6271f43c2669	模拟量线性转换数字量公式	P = (dH - dL) / (aH-aL) *(value-aL) + dL	\N		2018-03-14 08:04:46.726+08	2018-03-29 17:29:31.844+08	77d8ba09-082d-405d-aeca-9a0d66f902c3
3e38a57f-b980-45b4-8f8f-1929160edfaa	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-07-23 11:11:42.56+08	2018-07-23 11:11:42.56+08	b0a93683-5c88-4f1d-81de-5e41fed44566
df6a9e9a-ecfa-46b2-9244-698035b23dfa	基泰角度多项式转换	P = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)	\N		2018-03-14 08:12:30.863+08	2018-03-29 17:30:04.216+08	77d8ba09-082d-405d-aeca-9a0d66f902c3
1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a	振弦公式	ε=K*(Fi^2-Fo^2)	\N	无温度计算	2018-03-12 16:31:26.794+08	2018-07-23 17:50:55.868+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f
749b1167-3ce5-41a1-a434-9102a9e3f387	公式1	\N	\N		2018-03-07 14:13:37.317+08	2018-03-07 14:13:37.317+08	7b31296c-6b22-4505-8f3d-8f7f2bb6d7c4
209ff0d2-7a85-4997-804a-d64bb04ba531	振弦公式	ε=K*(Fi^2-Fo^2)	\N	无温补	2018-03-29 18:48:07.577+08	2018-03-29 18:48:24.796+08	4866de4e-56ad-435f-a21b-0f2b00011e12
96edcaa5-a909-4ecf-99c4-71cbe4b7b0d7	公式无	\N	\N		2018-03-12 15:11:05.756+08	2018-03-12 15:11:05.756+08	4866de4e-56ad-435f-a21b-0f2b00011e12
0e03ebe4-bdad-4a8f-840c-ba09293c2488	模拟量转换公式	P=(Ii-Io)/K	\N		2018-08-03 10:44:55.736+08	2018-08-03 10:44:55.736+08	f556a96a-5649-49c8-beae-aa08f2faa752
5ca2d973-f401-451a-a9dd-6a17e2ac3a92	公式无	\N	\N	公式无	2018-03-12 16:34:46.28+08	2018-03-12 16:35:34.097+08	cad4657b-dba7-4ad9-990c-bf0ce3ee1e6f
b3ba8400-5a93-4fee-a990-e2623acda7f0	通用振弦公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-08-15 13:50:49.819+08	2018-08-15 13:50:49.819+08	0b9ab6dc-b8e5-4f20-a507-567be8892e4f
579e1467-b18d-4cbf-98d4-6d3602b6dfb5	123456	\N	\N		2018-05-28 17:34:48.214+08	2018-05-28 17:34:48.214+08	899dde06-bd1d-4215-963e-23596c3fda7f
72133db4-abf6-4073-bc7f-b99c12aca33c	基泰通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-04-02 17:22:44.718+08	2018-05-10 09:06:03.473+08	8b83567e-d874-40f2-a7e4-f78d6cb5415c
0ca79346-8d3a-4aca-ba68-833fce60cbf8	基泰通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-03-06 15:06:57.277+08	2018-03-19 16:31:56.801+08	cf03d97a-0c99-494f-821d-da2dc02126dc
6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	振弦公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-03-13 17:34:07.471+08	2018-03-20 16:39:16.24+08	e60e191c-767a-479d-a33e-589622634060
60039eec-76e3-47ec-9024-32d1bbd55287	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-03-06 11:32:37.813+08	2018-03-21 13:39:32.573+08	2574b00e-2491-471c-925a-5b713afa9561
407c070f-d757-448d-8d63-9fe3a26293ef	差阻计算应变公式	ε=f*(R1/r1 -Zo)+b*[α*（R1+r1-Ro）]	\N		2018-03-22 15:11:08.195+08	2018-03-22 15:11:08.195+08	4e281788-df68-4193-bbe0-9159eee1f24e
3716716b-c893-45f6-8566-e285dec7ddd0	转换公式	ε=k*(fi^2-f0^2)+kt*(ti-to)	\N		2018-03-26 10:43:18.805+08	2018-03-26 10:43:18.805+08	2d9520e9-143b-48c2-960f-5c9dca7a21b4
c6df07ed-3777-4e2b-aba1-d4cfbab61e06	基泰通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-03-06 15:47:59.154+08	2018-05-10 09:06:34.359+08	f65db984-9da0-4cef-a9ea-7de5e02ef42f
4a3e1673-0bb5-4cb0-b7a1-1e03b4e1bdf2	振弦公式	p=()()()	\N		2018-05-10 17:58:16.82+08	2018-05-10 17:58:16.82+08	67b821eb-caf8-4352-a59b-360e7c9a3ad9
82211766-487b-4e8d-9b03-bc288381880d	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-03-07 16:37:53.109+08	2018-03-28 16:18:51.798+08	1e0d3ad9-26a9-427e-be48-685ffe3e84b7
9010ed47-fe9a-494d-8805-c42604e61bdd	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-03-28 23:18:54.766+08	2018-03-28 23:18:54.766+08	72fb9e20-7c7b-4ccb-9da1-d8600223beca
121058ad-ddc3-41a9-bd75-36e58162a204	基康倾角仪转换公式	D(mm)  =  G×L (R1 -R0)	\N		2018-03-29 14:25:23.415+08	2018-03-29 14:25:23.415+08	2574b00e-2491-471c-925a-5b713afa9561
1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9	模拟量转换数字量公式	P=(dH - dL) / (aH-aL) *(value-aL) +dL	\N		2018-03-29 14:53:46.392+08	2018-03-29 14:53:46.392+08	2574b00e-2491-471c-925a-5b713afa9561
1c900f29-83ed-4ef1-95af-5ac4338f8c08	振弦公式	ε=K*(Fi^2-Fo^2)	\N	无温补	2018-05-17 14:55:50.718+08	2018-05-17 14:55:50.718+08	82db02f1-7f86-44cf-b9a4-d32e28672a84
5c22c26c-2a9e-439f-b585-2d5e1031fc23	基康通用公式	P=K2*(R1-R0)^2+K1*(R1-R0)+C	\N	P=K2*(R1-R0)^2+K1*(R1-R0)+C	2018-05-28 15:15:46.37+08	2018-05-28 15:17:46.692+08	2574b00e-2491-471c-925a-5b713afa9561
449d0a01-4fc8-4479-8c73-3d96d07b130d	test	c=a+b	\N		2018-07-03 19:14:32.19+08	2018-07-03 19:14:32.19+08	5838090c-ced5-4fb2-9320-53c516ee9b33
18760c89-e1c8-416d-a74e-8e273f8329a7	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B	\N	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B	2018-03-08 16:52:11.318+08	2018-07-09 11:49:11.466+08	2fd2ebfb-7858-40db-91a8-d933269ccf64
c350170b-1b26-41db-9aa2-011c75365424	11112	1	\N	3	2018-07-12 11:08:19.753+08	2018-07-12 11:08:19.753+08	e442b9a5-066f-4cde-b5f3-9709a193c328
3abb17e6-e48f-467d-840e-87a6666ee188	ModBus磁通量公式	F=C2*U^2+C1*U+C0;U=Vi-(Ti-T0)*Kt-(Tci-Tc0)*Ktm	\N		2018-03-02 16:40:34.805+08	2018-07-19 17:11:24.723+08	ec223bfa-7244-4458-8180-4205fd31ac24
71cb1135-1200-4d2f-ac70-c5973a66e49a	磁通量公式（old）	F=C2*U^2+C1*U+C0;U=Vi-(Ti-T0)*Kt-(Tci-Tc0)*Ktm	\N		2018-03-02 17:20:02.196+08	2018-07-19 17:12:08.528+08	a812ef4d-0c77-49e6-bad2-c74c79c50e49
265b6e0c-ccfe-4cbd-bde2-362c37e12a44	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-03-01 10:44:31.942+08	2018-07-19 17:14:23.075+08	175e2759-ae38-4ac5-a62c-6ed4877f3863
eca449f9-8e01-4a93-bb4d-0951e272b768	模拟量转换数字量公式	phy = (dH - dL) / (aH-aL) *(data1-aL) + dL	\N		2018-03-14 00:29:54.332+08	2018-07-23 09:10:15.694+08	0dcb57e3-244f-44d3-8f9c-a50fc74481a8
0170f4f5-2ed4-43e1-bd3a-d3f774359bf0	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-03-07 17:25:33.023+08	2018-07-23 09:24:10.944+08	99978bc0-b3c7-4ba1-9064-723c2c13b95f
b9f886b0-757e-4654-b75c-425c6f1a8804	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-06-15 09:40:19.294+08	2018-07-23 11:16:18.44+08	88155a32-3321-4f89-86ba-c204d101cce7
b697c668-ee32-4c39-b465-08d30a05ed1c	y=ax+b	y=ax+b	\N	基泰转换公式	2018-03-06 16:19:00.848+08	2018-07-23 11:31:21.853+08	2dfa1f51-0e5a-4e11-a86d-f8487d602ebf
d7ca67ec-0077-4e81-8f64-4642f1d94fce	振弦公式	P=k*(Fi^2-F0^2)	\N		2018-03-13 23:11:17.996+08	2018-07-24 18:04:56.305+08	930f1b29-d056-40a8-9b86-62829634874c
ecae192b-0460-431c-bb0e-fb64358a6ac0	振弦公式	ε=K*(Fi^2-Fo^2)	\N		2018-08-02 09:44:35.062+08	2018-08-02 09:44:35.062+08	82edfa3d-c080-4212-ad83-32be43b48841
be4aed0f-76d0-43ba-b4f3-01a0229e817b	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2018-08-27 14:29:29.92+08	2018-08-27 14:29:29.92+08	99c61d5d-4b9d-4fca-9d8c-e6d530b15871
2557b15d-db8f-4129-86b7-d04b8b5cd50f	水位公式	waterlevel=h+1000*[K*(Fo^2-Fi^2)+Kt*(Ti-To)]/9.8	\N		2018-08-27 14:35:56.478+08	2018-08-27 14:43:03.445+08	99c61d5d-4b9d-4fca-9d8c-e6d530b15871
ed2744e0-eecf-42f0-8732-65fcd7e46d24	角度计算公式	α=K(Vi-V0)	\N	数泰角度计算公式	2018-09-07 09:28:39.433+08	2018-09-07 09:33:44.588+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
ff2de59e-fd95-42c6-93cc-d827da25dd0c	DT振弦公式	µ=K*(Fi^2-F0^2)+Kt(Ti-To)	\N	振弦公式	2018-09-07 11:32:11.945+08	2018-09-07 11:32:11.945+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
a6bc41f8-f061-4714-acd6-7b839a4559fc	角度计算公式	y=（x*10-125000）/3600	\N		2018-09-21 15:25:55.749+08	2018-09-21 15:25:55.749+08	0b9ab6dc-b8e5-4f20-a507-567be8892e4f
37f306ac-245e-4f3b-af76-4fe38cf3a8f7	通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)+Po	\N		2018-09-29 15:50:14.368+08	2018-09-29 15:52:25.432+08	477ce1aa-aaae-40d3-a55e-2d3ef3a38e23
c4f1e8d6-82f3-4436-b65e-4d1a8474612e	波长转温度公式	T=1000.0*(wavelength - WTo)/KT+To	\N		2018-10-24 13:57:16.085+08	2018-10-24 16:00:54.667+08	7febae4c-c706-48a8-9f99-e546f48e338b
f4e36088-8943-4147-b898-324dafb20220	应变公式	µ=K*(X-X0)+K1*(Y-Y0)	\N		2019-09-25 15:42:34.33+08	2019-09-25 15:43:04.042+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
fe13db66-da09-464c-89af-e9d080352d7d	通用公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2018-11-23 17:04:01.388+08	2018-11-23 17:04:01.388+08	3b796285-ef41-4963-9304-f0909623f5c7
6eadaa20-f803-4859-8ed0-3bd1afa830cb	转换公式	p=K*(Fi-Fo)+Co	\N	 转化公式：（测量值-初始值）标定系数+标定常数	2018-12-20 16:00:17.368+08	2018-12-20 16:00:17.368+08	4c79d9ed-386d-4540-bff3-82caf4d9d329
83c9a688-5f70-472f-abce-c1c127ce189b	波长转应变公式	ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K	\N		2018-10-24 15:38:59.927+08	2019-01-25 11:26:58.258+08	7febae4c-c706-48a8-9f99-e546f48e338b
0b32473a-7ac5-4c09-8cfa-30f3300313e9	无	\N	\N		2019-02-22 15:26:15.378+08	2019-02-22 15:26:15.378+08	2b04a6d8-4af7-428f-95c9-325800c4b59d
0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9	DT振弦公式	µ=K*(Fi^2-F0^2)+Kt(Ti-To)	\N		2019-02-22 15:26:27.328+08	2019-02-22 15:26:27.328+08	2b04a6d8-4af7-428f-95c9-325800c4b59d
5116bca0-de6b-4f0b-b995-31c9801ee401	模拟量电压换算公式	α=K(Vi-V0)	\N		2019-02-22 15:35:40.367+08	2019-02-22 15:35:40.367+08	2b04a6d8-4af7-428f-95c9-325800c4b59d
73db0431-7f3c-451d-9852-38c75cdf1b79	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2019-02-25 16:39:12.313+08	2019-02-25 16:39:12.313+08	3c72a231-83a6-4d92-88d3-d58e0660cef9
904ee015-6df9-4626-90bd-2c3cc6e78f63	通用振弦公式	P=K1*(Fi-Fo)+Kt(Ti-To)+Po 	\N		2019-02-13 09:27:00.207+08	2019-02-26 16:13:10.86+08	c9459443-e9d6-48eb-b37d-d25dfb8faaac
cf1251b1-bf67-4ed5-9287-70ff21c4ea2f	上线公式	1+1=2	\N		2019-03-07 11:29:22.851+08	2019-03-07 11:29:22.851+08	a0803ec9-69c4-41dd-9531-2de25b6274b3
75a20e66-91ae-4d62-8f69-faef769091b1	电压换算公式	P=K*Um/W	\N		2019-03-12 14:04:55.111+08	2019-03-12 14:04:55.111+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522
96e821da-a5f5-448b-9a60-b4e83202b252	线性公式	P=K*Um+Po	\N		2019-03-13 13:50:10.35+08	2019-03-13 13:50:10.35+08	61e3c33e-85cf-4894-9fc6-70fc3fd7a522
02079e63-b1de-4da9-8424-ebded758b627	波长转温度公式	(wavelength - WTo)/KT+To	\N		2019-03-25 11:34:17.793+08	2019-03-25 11:34:17.793+08	765f6712-b911-4681-9d31-ce9ee3a45702
a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	波长转应变公式	ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]/K	\N		2019-03-25 13:42:36.424+08	2019-03-25 13:42:36.424+08	765f6712-b911-4681-9d31-ce9ee3a45702
5ffcc514-3e04-44e3-824a-c732c656a8c7	振弦公式	P=K(fo^2-fi^2)	\N		2019-04-25 15:14:13.239+08	2019-04-25 15:14:45.779+08	83960893-0d31-4f1e-a576-69a4e7bce94c
acb091fb-01aa-4316-9406-e52f4d5d84bd	公式A	\N	\N		2019-04-26 13:07:51.118+08	2019-04-26 13:07:51.118+08	d59a244e-554e-478d-b874-b75dc0dff2b5
aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c	振弦公式	Phy =K * (Fi ^ 2 - Fo ^ 2) 	\N		2019-05-22 10:39:40.146+08	2019-05-22 10:39:40.146+08	721eaa20-a7b1-457b-a5b3-f5eb9b313129
b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	SOIL通用公式	 P=K2*(R1-R0)^2+K1*(R1-R0)+C	\N	P=K2*(R1-R0)^2+K1*(R1-R0)+C	2019-05-23 14:04:04.683+08	2019-05-23 14:04:04.683+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592
e74b9abf-dce9-435c-b500-e9060e048fb9	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B	\N		2019-06-05 11:00:15.536+08	2020-09-15 09:24:00.15+08	d9b333ed-096a-405a-9c9a-905cd04d2368
f7c7c02c-833e-4c2c-9119-492d7a340331	test	1	\N	1	2019-05-10 15:53:38.289+08	2019-05-10 15:53:38.289+08	f0c41435-ecaf-4e42-b592-b53aaa72f721
6b2e8948-20f3-4655-a1b2-4b14a7a79853	振弦公式	\N	\N		2019-05-10 17:55:53.464+08	2019-05-10 17:55:53.464+08	43bea8b9-c871-432f-90d5-414d9d907254
beeaa0c3-fc06-4684-a771-8434726179cf	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2019-05-14 14:23:05.587+08	2019-05-14 14:23:05.587+08	d634c358-000d-4c53-8c4b-0f411b4a52c3
2edaa49c-0668-41cd-a987-a3f64cf9c81c	模拟量转换数字量	P=(dH - dL) / (aH-aL) *(value-aL) +dL	\N		2019-05-14 14:32:02.786+08	2019-05-14 14:32:02.786+08	d634c358-000d-4c53-8c4b-0f411b4a52c3
bee9dea8-27e2-4698-9202-885b4b2a0bbd	SOIL倾角仪转换公式	D(mm) = G×L (R1 -R0)	\N		2019-05-14 14:27:53.825+08	2019-05-14 15:55:43.623+08	d634c358-000d-4c53-8c4b-0f411b4a52c3
5b5f6379-cb2f-49e4-bf4f-92c230604fda	SOIL通用公式	P=K2*(R1-R0)^2+K1*(R1-R0)+C	\N	P=K2*(R1-R0)^2+K1*(R1-R0)+C	2019-05-14 14:16:43.308+08	2019-05-14 15:58:11.543+08	d634c358-000d-4c53-8c4b-0f411b4a52c3
7be774d7-af98-47fa-b941-286639c151e9	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2019-05-23 14:13:14.471+08	2019-05-23 14:13:14.471+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592
630b1eca-f335-4da0-90fb-c21f58f32798	SOIL倾角仪转换	D(mm) = G×L (R1 -R0)	\N		2019-05-23 14:17:16.146+08	2019-05-23 14:17:16.146+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592
65ca4fef-0880-442f-938e-da24d950557d	模拟量转换数字量	P=(dH - dL) / (aH-aL) *(value-aL) +dL	\N		2019-05-23 14:21:27.257+08	2019-05-23 14:21:27.257+08	b69e622c-7f6b-4539-8ff3-f3027cb3a592
5a40c554-1256-4aec-b591-0202fc0f267a	温度计算	y=a*ln(x)+b	\N		2019-05-28 16:01:22.753+08	2019-05-28 16:01:50.688+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
63aa490f-c8ba-4b11-b890-18cfee871d70	DT振弦公式	µ=K*(Fi^2-F0^2)+Kt(Ti-To)	\N		2019-06-11 15:07:38.545+08	2019-06-11 15:07:38.545+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71
871940ec-0348-4f4c-942e-8785322e66f4	电阻温度计算公式	y=a*ln(x)+b	\N		2019-05-29 15:39:42.893+08	2019-05-29 15:39:42.893+08	f556a96a-5649-49c8-beae-aa08f2faa752
d062cb83-d762-42e2-a2dc-37d75f24bf18	模拟量电压换算公式	α=K(Vi-V0)	\N		2019-06-11 15:14:40.062+08	2019-06-11 15:14:40.062+08	5a3bf41b-78ef-45fa-96e2-ac2a42767d71
583a326f-d743-4f66-b60d-89b60c35e439	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2019-04-10 15:14:03.767+08	2019-05-30 16:01:19+08	53efa30f-f738-43ef-9600-0963b6b108fd
ac0133f4-cdfd-424a-aae0-598e71b861a6	振弦公式	 P=K*(Fi^2-Fo^2)	\N		2019-05-10 15:25:59.984+08	2019-05-31 17:58:00.507+08	dc3255a4-0fb9-4ab9-85cd-714e6c5d70d0
6cea049d-f41a-43f9-9e88-d8aeea9aca7f	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2019-06-03 10:44:50.805+08	2019-06-03 10:44:50.805+08	85e07675-26a2-435b-8ee9-6c790ffe7463
2bd2a601-c351-4e47-bbbe-9a787efd6026	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2019-06-24 16:50:58.613+08	2019-06-24 16:50:58.613+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a
bd266924-534e-4f2b-84a9-5e7b7c8f61de	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B	\N		2019-06-05 10:44:32.896+08	2020-09-15 09:25:36.907+08	fd43ad33-b4b0-46a5-b48c-5a4fa76e0aed
d157f3b3-41c1-4e8b-8141-76c56d56b8ed	振弦公式	Phy =K * (Fi ^ 2 - Fo ^ 2)	\N		2019-08-01 15:01:18.178+08	2019-08-01 15:01:18.178+08	f75a7b9a-2288-4f05-b3ec-5f17a297e53c
be45ef93-4eef-44e3-a4af-c6499d52929b	巡天科技通用公式	 P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2019-08-27 09:55:31.849+08	2019-08-27 09:55:31.849+08	ec8018e2-1de6-4384-ac85-01405362dc83
9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B	\N		2019-06-05 11:09:10.444+08	2020-09-14 10:46:08.714+08	d8d4cee4-3e1d-4d43-8861-53ccd536112e
9f84b4f7-7860-47a6-9dc9-f066fb873dff	振弦公式	P=K*(Fi^2-Fo^2)	\N		2020-06-05 15:11:01.364+08	2020-06-08 11:16:11.688+08	ee98ef38-7fda-425a-9fae-5000c658a83e
5daeb319-4f65-4e98-b0d6-06dd3eb2575d	电阻转换温度	T=1/(A+B*LnR+C*LnR^3)-273.2	\N		2019-08-28 16:12:07.121+08	2019-08-28 16:12:07.121+08	573fb497-e583-41c4-ba6b-ecf548921eaf
4cf90a17-8779-4902-9e06-2c4c75e37fec	电阻转换温度	(系统不支持自动计算): T=1/(A+B*LnR+C*LnR^3)-273.2	\N		2019-09-19 09:42:10.781+08	2019-09-19 09:42:10.781+08	6225c8bb-1497-4354-ad28-e5eb698de9f0
2d30190b-bf0a-49ee-9c8c-ce67465de1bb	钢结构应变公式	(系统不支持自动计算): ε=E*{G*C0*(R1-R0)+[1/(A+B*LnR+C*LnR^3)-273.2-T0]*(Y1-Y2)}	\N		2019-09-19 09:49:49.402+08	2019-09-19 09:49:49.402+08	6225c8bb-1497-4354-ad28-e5eb698de9f0
04d11a24-68c7-4a80-bfc1-ffb924f24296	混凝土结构应变	(系统不支持自动计算): ε=E*{G*C0*(R1-R0)+K*[1/(A+B*LnR+C*LnR^3)-273.2-T0]}	\N		2019-09-19 10:34:23.817+08	2019-09-19 10:34:23.817+08	6225c8bb-1497-4354-ad28-e5eb698de9f0
86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	裂缝公式	(系统不支持自动计算): (系统不支持自动计算): L=G1(R1-R0)+k(T1-T0)	\N		2019-09-20 15:45:46.101+08	2019-09-20 15:45:46.101+08	6225c8bb-1497-4354-ad28-e5eb698de9f0
dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52	土压力振弦式计算公式	µ=K*((X^2)/1000-X0)+K1*(Y-Y0)	\N		2019-09-25 15:25:40.061+08	2019-09-25 15:25:59.19+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
5773316d-3a54-4974-86d6-eff99007cf04	土压力模拟量公式	µ=K*(X-4)	\N		2019-09-25 15:37:49.584+08	2019-09-25 15:37:49.584+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
eb23e709-ad84-4257-a0a7-e7bc44e81f29	新ModBus磁通量公式	F=C2*U^2+C1*U+C0+F0；U=V0-(Vi-(Ti-TO)*Kt-(Tci-Tco)*Ktm）	\N		2019-09-26 15:26:23.322+08	2019-09-26 15:26:23.322+08	ec223bfa-7244-4458-8180-4205fd31ac24
5b391db9-96c6-4ebe-88f0-75aea18bd5df	通用振弦公式	(系统不支持自动计算): P=K1*(Fi-Fo)+Kt(Ti-To)+Po	\N		2019-09-29 16:28:54.739+08	2019-09-29 16:28:54.739+08	f190bf5a-78ab-4963-aac1-2fda921f2507
51618f61-48a1-4680-9485-1b5f353ee3f7	振弦公式	F=K*(Fi^2 - F0^2) + Kt*(Ti-T0)	\N		2019-10-14 09:34:22.142+08	2019-10-14 09:34:22.142+08	6b90f580-9b05-42a8-ba6a-113143823d44
abc52bef-269a-4be1-82f0-5d3626a3ca44	钢结构应变公式	ε=E*G*(Fi^2-Fo^2)	\N		2019-08-28 09:52:25.798+08	2021-01-15 13:13:21.806+08	573fb497-e583-41c4-ba6b-ecf548921eaf
e217b93e-d22e-40ec-a8ca-5fccb0db6819	通用振弦公式	P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)	\N		2019-11-11 14:54:21.29+08	2019-11-11 14:54:21.29+08	c2c9fa03-e2cf-45f7-ae3f-5cb586ab5a77
9091e551-9ef7-4867-9cad-ea5e8c25f39b	振弦通用公式	ε=K*(Fi^2 - F0^2) + Kt*(Ti-T0)	\N		2019-11-15 13:23:12.244+08	2019-11-15 13:23:12.244+08	e95109a9-cf5a-4e13-b52b-1f85101fd99a
9784b5cb-8a88-4c6a-86c8-51afd961b78d	通用公式	PΔ＝A(F2－F02)+B(F－F0)	\N	金帆的通用公式	2019-11-20 09:50:03.993+08	2019-11-20 09:50:03.993+08	40c3cf7a-91d6-4c0e-aa48-4839dd6815cc
5997f9c1-c604-4035-ade3-6ed5b18559bb	振弦通用公式	ε=K*(Fi^2 - F0^2) + Kt*(Ti-T0)	\N		2019-11-21 13:04:31.07+08	2019-11-21 13:04:31.07+08	61a4ad5e-774e-40d2-9ea6-937da62db64b
7db881d1-76ee-4a11-b932-c658d8d0eaed	无	\N	\N		2019-12-13 10:39:49.257+08	2019-12-13 10:39:49.257+08	175e2759-ae38-4ac5-a62c-6ed4877f3863
5bbfb838-05a1-4957-bfa7-b5a8af1a0beb	无	无	\N		2019-12-13 10:15:14.046+08	2019-12-13 10:52:51.716+08	61a4ad5e-774e-40d2-9ea6-937da62db64b
93c9ce42-f58d-4b35-83f5-df5f1c06411b	倾角计算公式	K*(X-X0)/1000	\N	这个是wu	2020-01-10 16:51:39.164+08	2020-01-10 16:51:39.164+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
a999457c-b28e-4168-9d60-0db37c72ad23	裂缝计计算公式	K*(X^2-X0^2)/1000	\N	DTC-LF	2020-01-13 10:29:55.365+08	2020-01-13 10:30:22.438+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
c7cc1565-33ee-46fb-ac94-a93f093ddd73	多点沉降计计算公式	K*(X-X0)	\N	DTC-SYL     wu	2020-01-13 10:39:42.138+08	2020-01-13 10:39:42.138+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6	混凝土应变计	k*(X^2-X0^2)/1000+k1*(Y-Y0)	\N	DTC-YB-SC    wu	2020-01-13 10:45:45.014+08	2020-01-13 10:45:45.014+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
3207c7a3-db9b-40cf-ab1b-6949a3122239	土壤水分传感器	0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9	\N	DTC-SD	2020-01-13 10:53:55.571+08	2020-01-13 10:53:55.571+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
5b473f0a-e785-42b1-bbeb-5e3530c41422	温度计算公式	X	\N	这个公式不参与计算	2020-01-14 15:21:23.112+08	2020-01-14 15:21:23.112+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
611dc5c5-fa03-458b-bd65-3e24c593855d	湿度计算公式	kx	\N		2020-01-15 16:49:27.6+08	2020-01-15 16:49:27.6+08	32cd67be-b8f0-42fe-9ef4-79ad8fbed488
9024228a-4e22-47cd-b2b7-2c579649330a	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2020-04-08 16:13:08.754+08	2020-04-08 16:13:20.037+08	33215263-67ff-4ca8-9cec-d4c05068b412
1af7b597-73ac-4002-b7f9-885ba65dc41d	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2020-04-08 16:19:26.702+08	2020-04-08 16:19:26.702+08	f54c9b05-e722-4677-9e19-4fbbeeee0938
63e815fd-ec3a-490b-8734-eb91e37ba781	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2020-04-08 16:25:16.841+08	2020-04-08 16:25:16.841+08	718d8823-39a8-40fd-b726-76fde0fd8094
8102b4e7-9f04-43f0-a644-5b89c281f52f	转换公式	E=G*(R-R0)	\N		2020-05-13 11:36:44.904+08	2020-05-13 11:36:44.904+08	ec7b0da8-24a8-48ad-b64a-0ea416189d8a
1cb1bdc4-03eb-47f6-bde4-992f0c899269	通用公式	ε=K*(Fi^2 - F0^2)/Aj	\N		2020-06-12 09:47:26.718+08	2020-06-15 10:05:39.363+08	c8c925b5-d496-4eb8-a0c7-189ce391ff1a
c92fb572-f818-488a-a012-e615d38abbf2	振弦通用公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2020-06-16 13:51:21.352+08	2020-06-16 13:51:21.352+08	a999f92a-a9c4-4b33-a805-9bbb221f1935
b2c21e4b-a55d-4393-ab15-8906088b94fa	无	无	\N	无公式计算	2020-06-16 13:55:15.744+08	2020-06-16 13:55:15.744+08	a999f92a-a9c4-4b33-a805-9bbb221f1935
0f44be27-ca09-4e9c-bd86-10d82e752723	公式	ε=(λ-A)/B	\N		2020-06-18 14:08:10.959+08	2020-06-18 14:08:10.959+08	9c12215f-afab-45e9-8341-1e487df6d020
9525b166-34e1-4182-95a9-644a8f98a2d8	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2020-08-03 09:57:23.168+08	2020-08-03 09:57:23.168+08	c283a48d-8843-4cb6-9c01-336738a8137a
490563df-dd29-4c58-9546-7a8716222d00	振弦公式	ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)	\N		2020-06-29 09:50:03.949+08	2020-06-29 09:50:03.949+08	c3507ba4-b2b5-45b8-aecb-84079c90649d
be82ba24-d38b-4da1-aac3-2fb222e2012f	无		\N		2020-06-29 09:56:15.694+08	2020-06-29 09:56:15.694+08	c3507ba4-b2b5-45b8-aecb-84079c90649d
55b9e150-f78d-4cbd-a353-f99c4df93cb6	地应力公式	P=A*(Fi^2-Fo^2)-B*(Fi-Fo）	\N		2020-10-13 16:56:29.659+08	2020-10-13 16:56:29.659+08	c283a48d-8843-4cb6-9c01-336738a8137a
bdb43886-e71d-4135-ad42-6e296635b02e	测斜公式	Δl=c*[sin(αi)-sin(α0)]	\N		2020-11-11 15:32:21.582+08	2020-11-11 15:32:21.582+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
c5378a9c-9406-4583-9ae8-5fddb5a5d65e	减初值公式	phy=DAQi-DAQ0	\N		2020-11-11 15:39:39.776+08	2020-11-11 15:39:39.776+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	水位公式	waterlevel=h+1000*k*(f0^2-fi^2)/9.8	\N		2020-11-11 15:43:16.337+08	2020-11-11 15:43:16.337+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
14c1729f-4851-411d-9828-84fb5b11f593	初值减测值	phy=C0-Ci	\N		2020-11-11 15:46:21.875+08	2020-11-11 15:46:21.875+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
68180c88-8643-47ba-815c-90668639e80f	激光测距	Δh=(len0-leni)*H/len0	\N		2020-11-11 15:47:37.836+08	2020-11-11 15:47:37.836+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
b545defc-450b-4986-83ef-445423df6f98	无	无	\N		2020-11-11 15:54:24.82+08	2020-11-11 15:54:24.82+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
927f1c11-f9a3-4c84-a565-57ee9245e41f	振弦公式	ε=k*(fi^2-f0^2)+kt*(ti-to)	\N		2020-11-16 14:03:23.764+08	2020-11-16 14:03:23.764+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
898c3c4f-ecab-4aa9-9a95-accd00e26193	减初值	phy=DAQi-DAQ0	\N		2020-11-16 16:19:51.677+08	2020-11-16 16:19:51.677+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
fae5e233-4034-4ebe-8e7b-0bf35a648ec9	土壤温湿度公式	无	\N		2020-11-20 11:13:59.799+08	2020-11-20 11:13:59.799+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
cb006abf-3e22-4ead-830c-5a0a427c4024	地应力公式	P=A*(Fi^2-Fo^2)-B*(Fi-Fo）	\N		2020-11-24 11:47:45.885+08	2020-11-24 11:47:45.885+08	f963b588-8c55-4b9b-b455-8e7302d88408
057d8b2b-fafc-4937-897d-deff727f1032	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2020-11-24 11:52:43.869+08	2020-11-24 11:52:43.869+08	f963b588-8c55-4b9b-b455-8e7302d88408
41d90649-a6bb-4671-b100-c37a75836437	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2020-12-11 16:03:19.403+08	2020-12-11 16:03:19.403+08	8c5826bc-d7e6-4506-9dab-ded01f4c2346
61c4b4b9-028e-4788-8af4-c97e1084d1c8	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2020-12-16 15:46:31.084+08	2020-12-16 15:46:31.084+08	1a190e1d-27a0-4b3a-8635-8737f24de024
21d229f6-5f74-405a-a06e-1f7dc84dbcb3	振弦公式	P=K*(Fi^2-Fo^2)+Kt*(Ti-To）	\N		2020-12-16 17:15:01.434+08	2020-12-16 17:15:01.434+08	4f041931-dc1f-4868-985b-e5f1d27b1d38
d3c03d95-0625-44e5-a097-d371daa46150	混凝土结构应变	ε=E*G*(Fi^2-Fo^2)+K*[1/(A+B*LnR+C*LnR^3)-273.2-T0]	\N		2019-08-28 09:53:52.824+08	2021-01-15 13:06:58.032+08	573fb497-e583-41c4-ba6b-ecf548921eaf
ed141cf4-ca2c-49a1-9704-afee24dc9c71	单值阈值下发	无	\N		2021-01-18 09:55:07.086+08	2021-01-18 09:55:07.086+08	98e6aaea-a6e2-449e-8b46-47fa016b1b96
\.


--
-- Data for Name: FormulaProperty; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."FormulaProperty" (id, name, "showName", category, image, enum, "defaultValue", "precision", max, min, unit, "desc", required, "createdAt", "updatedAt", "formulaMetaId", "propertyTypeId", "isOtherParameter") FROM stdin;
164	Fo	Fo基准读数	Variable	\N	\N	0	3	100000000	-100000000			t	2018-04-02 17:25:11.425+08	2018-04-02 17:25:11.432+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
166	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-04-02 17:26:59.89+08	2018-04-02 17:26:59.896+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
202	K	模量系数K	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-08-27 14:36:48.027+08	2018-08-27 14:36:48.027+08	2557b15d-db8f-4129-86b7-d04b8b5cd50f	2	f
102	Kt	温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-08 16:53:18.874+08	2018-03-08 16:53:18.88+08	18760c89-e1c8-416d-a74e-8e273f8329a7	2	f
103	Fo	频率初值	Variable	\N	\N	0	3	100000	-100000	HZ		t	2018-03-08 16:54:00.879+08	2018-03-08 16:54:00.884+08	18760c89-e1c8-416d-a74e-8e273f8329a7	2	f
169	K1	一次项系数K1	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-05-28 15:17:32.795+08	2018-05-28 15:18:54.74+08	5c22c26c-2a9e-439f-b585-2d5e1031fc23	2	f
104	To	温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2018-03-08 16:54:31.712+08	2018-03-08 16:54:31.719+08	18760c89-e1c8-416d-a74e-8e273f8329a7	2	f
207	Kx	X轴角度转换系数	Variable	\N		1	3	100000	-100000	\N		t	2018-09-07 09:29:54.005+08	2018-09-07 09:32:43.774+08	ed2744e0-eecf-42f0-8732-65fcd7e46d24	2	f
178	To	初始温度	Variable	\N	\N	0	3	100	-100	℃		t	2018-06-15 09:41:46.416+08	2018-06-15 09:41:46.424+08	b9f886b0-757e-4654-b75c-425c6f1a8804	2	f
208	Ky	Y轴角度转换系数	Variable	\N	\N	1	3	100000	-100000			t	2018-09-07 09:33:13.993+08	2018-09-07 09:33:13.993+08	ed2744e0-eecf-42f0-8732-65fcd7e46d24	2	f
188	K	转换系数K	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-08-02 09:46:16.983+08	2018-08-02 09:46:24.029+08	ecae192b-0460-431c-bb0e-fb64358a6ac0	2	f
99	Fo	Fo频率初值	Variable	\N	\N	0	3	100000	-100000	HZ		t	2018-03-07 17:32:57.254+08	2018-03-07 17:32:57.261+08	0170f4f5-2ed4-43e1-bd3a-d3f774359bf0	2	f
191	K	转转系数K	Variable	\N	\N	1	6	100000000	-100000000			t	2018-08-03 10:46:24.113+08	2018-08-03 10:46:24.113+08	0e03ebe4-bdad-4a8f-840c-ba09293c2488	2	f
195	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-15 13:57:03.758+08	2018-08-15 13:57:03.758+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
101	K	模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-08 16:52:50.895+08	2018-03-08 16:52:50.903+08	18760c89-e1c8-416d-a74e-8e273f8329a7	2	f
200	Kt	温补系数Kt	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-27 14:33:36.685+08	2018-08-27 14:33:36.685+08	be4aed0f-76d0-43ba-b4f3-01a0229e817b	2	f
105	B	初值	Variable	\N	\N	0	5	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-12 09:36:15.918+08	2018-03-12 09:36:15.925+08	18760c89-e1c8-416d-a74e-8e273f8329a7	2	f
198	K	模量系数K	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-08-27 14:32:01.225+08	2018-08-27 14:33:46.679+08	be4aed0f-76d0-43ba-b4f3-01a0229e817b	2	f
211	Kt	温补系数Kt	Variable	\N	\N	0	16	99999999	-99999999			t	2018-09-07 11:37:03.947+08	2018-09-07 11:37:03.947+08	ff2de59e-fd95-42c6-93cc-d827da25dd0c	2	f
214	K1	K1一次项系数	Variable	\N	\N	1	16	1000000000000	-1000000000000	\N		t	2018-09-29 15:53:11.089+08	2018-09-29 15:53:11.089+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
217	K3	K3三次项系数	Variable	\N	\N	0	16	1000000000000	-1000000000000			t	2018-09-29 15:56:11.675+08	2018-09-29 15:56:11.675+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
220	Po	修正值(常数项)	Variable	\N	\N	0	5	1000000000	-1000000000			t	2018-09-29 15:58:37.339+08	2018-09-29 15:58:37.339+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
224	To	温度初值To	Variable	\N	\N	0	2	100	-100	℃		t	2018-10-24 13:58:06.122+08	2018-10-24 13:58:06.122+08	c4f1e8d6-82f3-4436-b65e-4d1a8474612e	2	f
237	Fo	初始频率Fo	Variable	\N	\N	0	3	100000	-100000	HZ		t	2018-11-23 17:07:37.502+08	2018-11-23 17:07:37.502+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
234	K1	一次项系数K1	Variable	\N		1	10	100000	-100000	\N		t	2018-11-23 17:04:50.397+08	2018-11-23 17:06:40.932+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
240	K	标定系数	Variable	\N	\N	1	12	10000000000	-1000000000	\N		t	2018-12-20 16:01:10.234+08	2018-12-20 16:01:10.234+08	6eadaa20-f803-4859-8ed0-3bd1afa830cb	2	f
243	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-02-13 09:27:53.011+08	2019-02-13 09:27:53.011+08	904ee015-6df9-4626-90bd-2c3cc6e78f63	2	f
227	K	应变系数K	Variable	\N		1	16	1000000000000	-100000000000	\N		t	2018-10-24 15:50:00.505+08	2019-01-25 11:36:53.49+08	83c9a688-5f70-472f-abce-c1c127ce189b	2	f
230	Kwt	温度的温度系数Kwt	Variable	\N		1	16	100000000000	-100000000000			t	2018-10-24 15:58:08.469+08	2019-03-25 13:50:21.44+08	83c9a688-5f70-472f-abce-c1c127ce189b	2	f
249	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000	\N		t	2019-02-22 15:27:06.675+08	2019-02-22 15:27:06.675+08	0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9	2	f
34	F0	初值	Variable	\N	\N	1.12	2	100	0	\N		t	2018-03-01 14:32:55.825+08	2018-03-01 14:32:55.832+08	ea7f8dfb-96fe-4a26-90bc-1b51c9cae11b	2	f
21	Kt	温度补偿系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-01 10:47:46.834+08	2018-03-02 10:15:09.257+08	265b6e0c-ccfe-4cbd-bde2-362c37e12a44	2	f
19	K	模量系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-01 10:46:08.51+08	2018-03-02 10:15:48.739+08	265b6e0c-ccfe-4cbd-bde2-362c37e12a44	2	f
20	Fo	初始频率	Variable	\N		0	5	99999	-99999	HZ		t	2018-03-01 10:47:03.216+08	2018-03-02 10:16:16.889+08	265b6e0c-ccfe-4cbd-bde2-362c37e12a44	2	f
22	To	初始温度	Variable	\N		0	3	100	-100	℃		t	2018-03-01 10:48:43.499+08	2018-03-02 10:16:43.603+08	265b6e0c-ccfe-4cbd-bde2-362c37e12a44	2	f
47	C1	C1线性拟合系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 16:42:39.105+08	2018-03-02 16:42:39.112+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
107	K	K系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-12 16:34:18.912+08	2018-03-12 16:34:18.919+08	1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a	2	f
106	Fo	Fo初值	Variable	\N		0	3	1000000	-1000000	HZ		t	2018-03-12 16:33:45.211+08	2018-03-12 16:34:27.981+08	1ec1750e-a4b7-4f6f-99ba-30cbc1df3f6a	2	f
108	K1	K1一次项系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-13 17:34:50.013+08	2018-03-20 16:38:10.226+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
110	Fo	Fo基准读数	Variable	\N		0	3	100000	-100000			t	2018-03-13 17:36:40.187+08	2018-03-20 16:40:17.559+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
48	C2	C2二次项拟合系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 16:44:01.746+08	2018-03-02 16:44:01.753+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
46	C0	C0线性拟合常数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-02 16:41:55.874+08	2018-03-02 16:44:09.195+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
49	T0	T0温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-03-02 16:45:42.729+08	2018-03-02 16:45:42.735+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
50	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 16:46:19.752+08	2018-03-02 16:46:19.76+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
51	vol	vol激励电压(V)	Variable	\N	\N	0	6	10000	-10000	V		t	2018-03-02 16:47:56.584+08	2018-03-02 16:47:56.592+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
53	Deg	是否消磁(Deg;1:消磁，0:不消磁)	Variable	\N	\N	1	\N	1	0			t	2018-03-02 16:49:24.488+08	2018-03-02 16:49:24.494+08	3abb17e6-e48f-467d-840e-87a6666ee188	1	f
54	Tc0	Tc0采集仪温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-03-02 16:50:10.662+08	2018-03-02 16:50:10.679+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
55	reg	reg理论电阻值(Ω)	Variable	\N	\N	0	3	10000	-10000	Ω		t	2018-03-02 16:51:18.506+08	2018-03-02 16:51:18.516+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
56	Des	是否判断采集(Des;1:是，0:否)	Variable	\N	\N	0	\N	1	0			t	2018-03-02 16:51:53.665+08	2018-03-02 16:51:53.672+08	3abb17e6-e48f-467d-840e-87a6666ee188	1	f
58	C1	C1线性拟合系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 17:22:03.75+08	2018-03-02 17:22:03.758+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
62	C0	C0线性拟合常数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 17:25:56.144+08	2018-03-02 17:25:56.153+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
63	V0	V0零点电压	Variable	\N	\N	0	3	1000	-1000	V		t	2018-03-02 17:26:59.379+08	2018-03-02 17:26:59.385+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
165	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-04-02 17:26:14.228+08	2018-04-02 17:26:14.232+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
170	K2	二次项系数K2	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-05-28 15:19:26.622+08	2018-05-28 15:19:26.629+08	5c22c26c-2a9e-439f-b585-2d5e1031fc23	2	f
171	R0	基准值R0	Variable	\N	\N	0	5	1000000	-1000000			t	2018-05-28 15:23:46.203+08	2018-05-28 15:23:46.211+08	5c22c26c-2a9e-439f-b585-2d5e1031fc23	2	f
231	Kt	应变的温度系数Kt	Variable	\N		1	16	100000000000	-100000000000		应变计的温度系数Kt	t	2018-10-24 15:59:43.806+08	2019-03-25 13:47:32.559+08	83c9a688-5f70-472f-abce-c1c127ce189b	2	f
179	Fo	初始频率	Variable	\N	\N	0	5	99999	-99999	HZ		t	2018-06-15 09:42:36.576+08	2018-06-15 09:42:36.581+08	b9f886b0-757e-4654-b75c-425c6f1a8804	2	f
181	Kt	温度补偿系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-06-15 09:44:38.793+08	2018-06-15 09:44:38.818+08	b9f886b0-757e-4654-b75c-425c6f1a8804	2	f
184	To	初始温度	Variable	\N	\N	0	3	100	-100	℃		t	2018-07-23 11:12:25.812+08	2018-07-23 11:12:25.822+08	3e38a57f-b980-45b4-8f8f-1929160edfaa	2	f
189	Fo	初始频率	Variable	\N	\N	0	3	999999	-999999	HZ		t	2018-08-02 09:47:37.783+08	2018-08-02 09:47:37.783+08	ecae192b-0460-431c-bb0e-fb64358a6ac0	2	f
192	Fo	Fo基准读数	Variable	\N	\N	0	3	100000	-100000	\N		t	2018-08-15 13:52:22.564+08	2018-08-15 13:52:22.564+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
194	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-15 13:55:27.449+08	2018-08-15 13:55:27.449+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
196	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-15 13:59:05.106+08	2018-08-15 13:59:05.106+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
199	Fo	频率初值Fo	Variable	\N		0	3	100000	-100000	HZ		t	2018-08-27 14:32:58.598+08	2018-08-27 14:33:53.84+08	be4aed0f-76d0-43ba-b4f3-01a0229e817b	2	f
203	频率初值Fo	频率初值Fo	Variable	\N	\N	0	3	100000	-100000	HZ		t	2018-08-27 14:37:40.709+08	2018-08-27 14:37:40.709+08	2557b15d-db8f-4129-86b7-d04b8b5cd50f	2	f
206	h	深度初值(m)	Variable	\N	\N	0	5	10000	-10000	m		t	2018-08-27 14:45:37.428+08	2018-08-27 14:45:37.428+08	2557b15d-db8f-4129-86b7-d04b8b5cd50f	2	f
209	Vo	电压初值Vo	Variable	\N	\N	0	3	20	0	V		t	2018-09-07 09:41:34.49+08	2018-09-07 09:41:34.49+08	ed2744e0-eecf-42f0-8732-65fcd7e46d24	2	f
212	Fo	初始频率	Variable	\N	\N	0	3	10000000	-10000000	HZ		t	2018-09-07 11:38:13.301+08	2018-09-07 11:38:13.301+08	ff2de59e-fd95-42c6-93cc-d827da25dd0c	2	f
213	To	温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2018-09-07 11:40:48.113+08	2018-09-07 11:40:48.113+08	ff2de59e-fd95-42c6-93cc-d827da25dd0c	2	f
215	Fo	Fo基准读数	Variable	\N	\N	0	3	100000	-100000			t	2018-09-29 15:54:33.77+08	2018-09-29 15:54:33.77+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
218	Kt	Kt温补系数	Variable	\N	\N	0	16	1000000000000	-1000000000000			t	2018-09-29 15:56:43.573+08	2018-09-29 15:56:43.573+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
228	Wo	应变波长初值Wo	Variable	\N		0	16	1000000000000	-100000000000	T0温度下的应变波长值Wo		t	2018-10-24 15:51:06.893+08	2019-01-25 11:37:01.107+08	83c9a688-5f70-472f-abce-c1c127ce189b	2	f
235	K2	二次项系数K2	Variable	\N	\N	0	10	100000	-100000			t	2018-11-23 17:05:30.754+08	2018-11-23 17:05:30.754+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
238	To	温度初值To	Variable	\N	\N	0	2	100	-100	℃		t	2018-11-23 17:08:05.393+08	2018-11-23 17:08:05.393+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
241	Fo	初始值	Variable	\N	\N	0	10	100000000	-10000000			t	2018-12-20 16:01:38.771+08	2018-12-20 16:01:38.771+08	6eadaa20-f803-4859-8ed0-3bd1afa830cb	2	f
250	To	温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2019-02-22 15:32:42.029+08	2019-02-22 15:32:42.029+08	0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9	2	f
244	K1	K1一次项系数	Variable	\N		1	16	1000000000000	-100000000000			t	2019-02-13 09:28:58.144+08	2019-02-13 09:29:11.961+08	904ee015-6df9-4626-90bd-2c3cc6e78f63	2	f
247	Fo	Fo基准读数	Variable	\N	\N	0	3	1000000	-100000			t	2019-02-13 09:33:41.45+08	2019-02-13 09:33:41.45+08	904ee015-6df9-4626-90bd-2c3cc6e78f63	2	f
252	Kt	温补系数Kt	Variable	\N	\N	0	16	10000000	-10000000			t	2019-02-22 15:34:35.51+08	2019-02-22 15:34:35.51+08	0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9	2	f
254	Ky	Ky转换系数	Variable	\N		1	3	100000	-100000			t	2019-02-22 15:38:39.367+08	2019-02-22 15:40:16.634+08	5116bca0-de6b-4f0b-b995-31c9801ee401	2	f
256	To	初始温度To	Variable	\N	\N	0	3	100	-100	℃		t	2019-02-25 16:39:53.679+08	2019-02-25 16:39:53.679+08	73db0431-7f3c-451d-9852-38c75cdf1b79	2	f
258	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000			t	2019-02-25 16:43:39.969+08	2019-02-25 16:43:39.969+08	73db0431-7f3c-451d-9852-38c75cdf1b79	2	f
246	Po	Po初值	Variable	\N		0	5	100000000	-100000000			t	2019-02-13 09:31:27.946+08	2019-02-26 16:13:56.393+08	904ee015-6df9-4626-90bd-2c3cc6e78f63	2	f
225	Kwt	温度系数Kwt	Variable	\N		1	6	10000000	-10000000			t	2018-10-24 13:58:36.716+08	2019-03-25 11:36:03.711+08	c4f1e8d6-82f3-4436-b65e-4d1a8474612e	2	f
52	Ktm	Ktm采集仪补偿系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 16:48:56.005+08	2018-03-02 16:48:56.011+08	3abb17e6-e48f-467d-840e-87a6666ee188	2	f
57	Kt	Kt温补系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-02 17:21:13.09+08	2018-03-02 17:21:13.098+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
59	T0	T0温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-03-02 17:23:09.665+08	2018-03-02 17:23:09.673+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
60	V0B	V0B零点标定电压	Variable	\N	\N	0	3	1000	-1000	V		t	2018-03-02 17:24:06.105+08	2018-03-02 17:24:06.111+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
61	C2	C2二次项拟合系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-02 17:24:53.959+08	2018-03-02 17:24:53.965+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
64	Uj	Uj激励电压(V)	Variable	\N	\N	0	3	1000	-1000	V		t	2018-03-05 17:24:24.793+08	2018-03-05 17:24:24.801+08	71cb1135-1200-4d2f-ac70-c5973a66e49a	2	f
167	Fo	频率初值	Variable	\N	\N	0	5	100000000	-100000000	HZ		t	2018-05-17 14:57:35.109+08	2018-05-17 14:57:35.676+08	1c900f29-83ed-4ef1-95af-5ac4338f8c08	2	f
172	C	修正值C	Variable	\N	\N	0	5	1000000	-1000000			t	2018-05-28 15:26:30.375+08	2018-05-28 15:26:30.383+08	5c22c26c-2a9e-439f-b585-2d5e1031fc23	2	f
180	K	模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-06-15 09:43:59.362+08	2018-06-15 09:43:59.368+08	b9f886b0-757e-4654-b75c-425c6f1a8804	2	f
94	K	K模量系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-07 16:39:24.659+08	2018-03-28 16:19:20.373+08	82211766-487b-4e8d-9b03-bc288381880d	2	f
69	K	K模量系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-06 11:34:14.013+08	2018-03-20 18:08:33.68+08	60039eec-76e3-47ec-9024-32d1bbd55287	2	f
70	Kt	Kt温补系数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 11:35:07.324+08	2018-03-20 18:08:19.011+08	60039eec-76e3-47ec-9024-32d1bbd55287	2	f
71	Fo	Fo频率初值	Variable	\N		0	3	100000	-100000	HZ		t	2018-03-06 11:36:04.186+08	2018-03-20 18:08:13.067+08	60039eec-76e3-47ec-9024-32d1bbd55287	2	f
73	K1	K1一次项系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-06 15:07:32.587+08	2018-03-06 15:08:44.603+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
80	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 15:49:18.518+08	2018-03-06 15:49:18.525+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
74	K2	K2二次项系数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-06 15:10:53.665+08	2018-03-06 15:11:36.374+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
76	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 15:12:53.138+08	2018-03-06 15:12:53.143+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
75	K3	K3三次项系数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 15:11:30.05+08	2018-03-06 15:13:01.19+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
91	Fo	Fo基准读数	Variable	\N		0	3	100000	-100000			t	2018-03-06 16:56:24.083+08	2018-03-20 16:42:40.186+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
78	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-03-06 15:15:05.885+08	2018-03-06 15:15:06.376+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
79	K1	K1一次项系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-06 15:48:31.85+08	2018-03-06 15:48:31.86+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
81	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 15:49:45.964+08	2018-03-06 15:49:45.974+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
82	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 15:50:23.441+08	2018-03-06 15:50:23.448+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
86	b	转换初值	Variable	\N		\N	5	9999999999	-9999999999		N = Ya + b ，计算出b	t	2018-03-06 16:19:56.13+08	2018-03-06 16:34:31.799+08	b697c668-ee32-4c39-b465-08d30a05ed1c	2	f
87	K1	K1一次项系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-06 16:54:16.76+08	2018-03-06 16:54:16.767+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
83	Fo	Fo基准初值	Variable	\N		0	3	1000000	-100000			t	2018-03-06 15:50:58.843+08	2018-03-06 15:58:40.224+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
84	To	To温度初值	Variable	\N		0	3	100	-100	℃		t	2018-03-06 15:51:41.015+08	2018-03-06 15:58:43.901+08	c6df07ed-3777-4e2b-aba1-d4cfbab61e06	2	f
88	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 16:54:52.366+08	2018-03-06 16:54:52.373+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
85	a	转换系数	Variable	\N		\N	5	9999999999	-9999999999	\N	a = （N - M）/ （Y - X），客户的测量范围是M—N（M < N）,精度范围X—Y（X < Y）	t	2018-03-06 16:19:33.32+08	2018-03-06 16:34:21.591+08	b697c668-ee32-4c39-b465-08d30a05ed1c	2	f
89	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 16:55:24.701+08	2018-03-06 16:55:24.708+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
90	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-06 16:55:53.241+08	2018-03-06 16:55:53.248+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
72	To	To温度初值	Variable	\N		0	3	100	-100	℃		t	2018-03-06 11:36:42.07+08	2018-03-20 18:08:05.883+08	60039eec-76e3-47ec-9024-32d1bbd55287	2	f
92	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-03-06 16:57:09.586+08	2018-03-06 16:57:09.594+08	9237d478-75b4-48a0-a403-98172bf6c694	2	f
95	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-07 16:40:23.252+08	2018-03-07 16:40:23.261+08	82211766-487b-4e8d-9b03-bc288381880d	2	f
93	Fo	Fo频率初值	Variable	\N		0	3	1000000	-1000000	HZ		t	2018-03-07 16:38:42.459+08	2018-03-07 16:40:36.313+08	82211766-487b-4e8d-9b03-bc288381880d	2	f
96	To	To温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2018-03-07 16:41:56.92+08	2018-03-07 16:41:56.927+08	82211766-487b-4e8d-9b03-bc288381880d	2	f
97	K	K模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-07 17:30:46.367+08	2018-03-07 17:30:46.374+08	0170f4f5-2ed4-43e1-bd3a-d3f774359bf0	2	f
98	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-07 17:32:15.628+08	2018-03-07 17:32:15.634+08	0170f4f5-2ed4-43e1-bd3a-d3f774359bf0	2	f
185	Fo	初始频率	Variable	\N		0	5	99999999999999	-99999999999999	Hz		t	2018-07-23 11:13:10.206+08	2018-07-23 11:13:44.549+08	3e38a57f-b980-45b4-8f8f-1929160edfaa	2	f
100	To	To温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2018-03-07 17:33:27.779+08	2018-03-07 17:33:27.785+08	0170f4f5-2ed4-43e1-bd3a-d3f774359bf0	2	f
111	To	To温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2018-03-13 17:37:12.71+08	2018-03-13 17:37:12.715+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
109	Kt	Kt温补系数	Variable	\N		0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-13 17:35:26.412+08	2018-03-13 17:37:21.904+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
112	K	K模量系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-13 23:12:33.333+08	2018-03-29 15:44:10.042+08	d7ca67ec-0077-4e81-8f64-4642f1d94fce	2	f
138	a	a零上温度系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	℃/Ω		t	2018-03-22 15:22:15.845+08	2018-03-22 15:25:15.824+08	407c070f-d757-448d-8d63-9fe3a26293ef	2	f
115	aL	模拟量下限	Variable	\N	\N	4	3	20	0			t	2018-03-14 00:31:28.264+08	2018-03-14 00:31:28.273+08	eca449f9-8e01-4a93-bb4d-0951e272b768	2	f
114	aH	模拟量上限	Variable	\N		20	3	20	0			t	2018-03-14 00:30:51.554+08	2018-03-14 00:31:37.009+08	eca449f9-8e01-4a93-bb4d-0951e272b768	2	f
116	dH	数字量上限	Variable	\N	\N	\N	3	100000000	-100000000			t	2018-03-14 00:32:51.481+08	2018-03-14 00:32:51.488+08	eca449f9-8e01-4a93-bb4d-0951e272b768	2	f
117	dL	数字量下限	Variable	\N	\N	\N	3	100000000	-100000000			t	2018-03-14 00:33:44.487+08	2018-03-14 00:33:44.495+08	eca449f9-8e01-4a93-bb4d-0951e272b768	2	f
118	dL	dL数字量下限	Variable	\N	\N	0	3	1000000	-1000000	\N		t	2018-03-14 08:06:25.22+08	2018-03-14 08:06:25.743+08	155ebc9a-097d-4567-baf4-6271f43c2669	2	f
119	dH	dH数字量上限	Variable	\N	\N	0	3	1000000	-1000000			t	2018-03-14 08:07:52.302+08	2018-03-14 08:07:52.309+08	155ebc9a-097d-4567-baf4-6271f43c2669	2	f
120	aL	aL模拟量下限	Variable	\N	\N	4	\N	20	0			t	2018-03-14 08:09:14.613+08	2018-03-14 08:09:14.62+08	155ebc9a-097d-4567-baf4-6271f43c2669	1	f
121	aH	aH模拟量上限	Variable	\N	\N	20	\N	20	0			t	2018-03-14 08:10:10.845+08	2018-03-14 08:10:10.853+08	155ebc9a-097d-4567-baf4-6271f43c2669	1	f
122	Fo	Fo基准初值	Variable	\N	\N	0	6	100000000	-10000000	\N		t	2018-03-14 08:13:17.181+08	2018-03-14 08:13:17.186+08	df6a9e9a-ecfa-46b2-9244-698035b23dfa	2	f
123	K1	K1一次项系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-14 08:14:00.865+08	2018-03-14 08:14:00.87+08	df6a9e9a-ecfa-46b2-9244-698035b23dfa	2	f
125	K3	K3三次项系数	Variable	\N	\N	1	16	10000000	-100000000			t	2018-03-14 08:15:50.858+08	2018-03-14 08:15:50.864+08	df6a9e9a-ecfa-46b2-9244-698035b23dfa	2	f
124	K2	K2二次项系数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-14 08:14:58.485+08	2018-03-14 08:16:00.051+08	df6a9e9a-ecfa-46b2-9244-698035b23dfa	2	f
133	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-20 16:38:48.16+08	2018-03-20 16:38:48.17+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
140	k	模量系数	Variable	\N	\N	1	16	9999999999	-9999999999	\N		t	2018-03-26 10:45:15.297+08	2018-03-26 10:45:15.31+08	3716716b-c893-45f6-8566-e285dec7ddd0	2	f
134	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-20 16:39:57.199+08	2018-03-20 16:39:57.209+08	6f3f738c-fcc3-4ebf-9695-6d0275cbc3ff	2	f
77	Fo	Fo基准读数	Variable	\N		0	3	100000	-100000			t	2018-03-06 15:14:18.783+08	2018-03-20 16:41:12.274+08	0ca79346-8d3a-4aca-ba68-833fce60cbf8	2	f
141	f0	频率初值	Variable	\N	\N	1	16	999999999	-100000	Hz		t	2018-03-26 10:46:04.944+08	2018-03-26 10:46:04.955+08	3716716b-c893-45f6-8566-e285dec7ddd0	2	f
136	Zo	Zo电阻比基准值	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-22 15:16:37.104+08	2018-03-22 15:16:37.108+08	407c070f-d757-448d-8d63-9fe3a26293ef	2	f
137	b	b温度修正系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-22 15:17:40.831+08	2018-03-22 15:17:40.839+08	407c070f-d757-448d-8d63-9fe3a26293ef	2	f
139	Ro	Ro计算0℃电阻值	Variable	\N		0	3	1000	-1000	Ω		t	2018-03-22 15:24:14.803+08	2018-03-22 15:24:55.723+08	407c070f-d757-448d-8d63-9fe3a26293ef	2	f
135	f	f最小读数	Variable	\N		1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-22 15:12:27.542+08	2018-03-22 15:25:06.891+08	407c070f-d757-448d-8d63-9fe3a26293ef	2	f
142	kt	温度补偿系数	Variable	\N	\N	1	16	100000	-100000			t	2018-03-26 10:46:32.897+08	2018-03-26 10:46:32.91+08	3716716b-c893-45f6-8566-e285dec7ddd0	2	f
143	t0	初始温度	Variable	\N	\N	1	16	100000000	-100000000	℃		t	2018-03-26 10:47:23.578+08	2018-03-26 10:47:23.584+08	3716716b-c893-45f6-8566-e285dec7ddd0	2	f
147	Fo	Fo频率初值	Variable	\N	\N	0	3	100000000	-100000000	HZ		t	2018-03-28 23:20:50.926+08	2018-03-28 23:20:50.933+08	9010ed47-fe9a-494d-8805-c42604e61bdd	2	f
146	K	K模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-28 23:19:35.978+08	2018-03-28 23:19:35.983+08	9010ed47-fe9a-494d-8805-c42604e61bdd	2	f
148	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-28 23:21:25.87+08	2018-03-28 23:21:25.879+08	9010ed47-fe9a-494d-8805-c42604e61bdd	2	f
149	To	To温度初值	Variable	\N	\N	0	2	100	-100			t	2018-03-28 23:21:59.498+08	2018-03-28 23:21:59.503+08	9010ed47-fe9a-494d-8805-c42604e61bdd	2	f
150	G	G(直线系数)	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-29 14:27:06.409+08	2018-03-29 14:27:06.415+08	121058ad-ddc3-41a9-bd75-36e58162a204	2	f
151	L	L(间距)	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	mm		t	2018-03-29 14:27:41.997+08	2018-03-29 14:27:42.01+08	121058ad-ddc3-41a9-bd75-36e58162a204	2	f
152	Rx0	Rx0(x方向初值)	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-29 14:28:32.67+08	2018-03-29 14:28:32.685+08	121058ad-ddc3-41a9-bd75-36e58162a204	2	f
153	Ry0	Ry0(Y方向初值)	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-29 14:29:07.859+08	2018-03-29 14:29:07.871+08	121058ad-ddc3-41a9-bd75-36e58162a204	2	f
155	aH	模拟量上限	Variable	\N	\N	20	\N	20	0			t	2018-03-29 14:55:30.434+08	2018-03-29 14:55:30.441+08	1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9	1	f
154	aL	模拟量下限	Variable	\N		4	0	20	0	\N		t	2018-03-29 14:54:53.964+08	2018-03-29 14:55:36.579+08	1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9	1	f
156	dL	dL数字量下限	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-29 14:57:41.906+08	2018-03-29 14:57:41.913+08	1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9	2	f
157	dH	数字量上限	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-03-29 14:58:19.429+08	2018-03-29 14:58:19.436+08	1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9	2	f
113	Fo	Fo频率初值	Variable	\N		0	3	100000	-100000	HZ		t	2018-03-13 23:13:48.141+08	2018-03-29 15:44:05.154+08	d7ca67ec-0077-4e81-8f64-4642f1d94fce	2	f
158	K	模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-03-29 18:48:49.042+08	2018-03-29 18:48:49.05+08	209ff0d2-7a85-4997-804a-d64bb04ba531	2	f
168	K	模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-05-17 14:58:17.779+08	2018-05-17 14:58:17.792+08	1c900f29-83ed-4ef1-95af-5ac4338f8c08	2	f
159	Fo	频率初值	Variable	\N		0	5	100000000	-100000000	HZ		t	2018-03-29 18:49:31.676+08	2018-03-29 18:49:38.737+08	209ff0d2-7a85-4997-804a-d64bb04ba531	2	f
264	WTo	初始波长WTo	Variable	\N	\N	0	6	100000000	-100000000	\N		t	2019-03-25 11:35:08.387+08	2019-03-25 11:35:08.387+08	02079e63-b1de-4da9-8424-ebded758b627	2	f
161	K1	K1一次项系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2018-04-02 17:23:10.427+08	2018-04-02 17:23:10.434+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
162	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-04-02 17:23:55.568+08	2018-04-02 17:23:55.576+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
163	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-04-02 17:24:25.893+08	2018-04-02 17:24:25.9+08	72133db4-abf6-4073-bc7f-b99c12aca33c	2	f
173	P	原始值指数P	Variable	\N		1	0	10	-10	\N		t	2018-05-28 17:05:29.296+08	2018-05-28 18:07:59.243+08	5c22c26c-2a9e-439f-b585-2d5e1031fc23	1	f
182	aa	a	Variable	\N	\N	\N	2	400	99	\N		t	2018-07-03 19:24:26.826+08	2018-07-03 19:24:26.847+08	449d0a01-4fc8-4479-8c73-3d96d07b130d	2	f
186	K	模量系数	Variable	\N	\N	1	16	99999999999999	-99999999999999			t	2018-07-23 11:14:24.587+08	2018-07-23 11:14:24.591+08	3e38a57f-b980-45b4-8f8f-1929160edfaa	2	f
187	Kt	温度补偿系数	Variable	\N	\N	1	16	99999999999999	-99999999999999			t	2018-07-23 11:14:56.407+08	2018-07-23 11:14:56.415+08	3e38a57f-b980-45b4-8f8f-1929160edfaa	2	f
190	Io	模拟量初值Io	Variable	\N		0	3	10000	-10000	mA		t	2018-08-03 10:45:46.924+08	2018-08-03 10:49:05.552+08	0e03ebe4-bdad-4a8f-840c-ba09293c2488	2	f
193	K1	K1一次项系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-15 13:54:23.515+08	2018-08-15 13:54:23.515+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
197	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2018-08-15 14:08:57.433+08	2018-08-15 14:08:57.433+08	b3ba8400-5a93-4fee-a990-e2623acda7f0	2	f
201	To	温度初值To	Variable	\N	\N	0	3	100	-100	℃		t	2018-08-27 14:34:33.116+08	2018-08-27 14:34:33.116+08	be4aed0f-76d0-43ba-b4f3-01a0229e817b	2	f
204	Kt	温补系数Kt	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2018-08-27 14:38:14.897+08	2018-08-27 14:38:14.897+08	2557b15d-db8f-4129-86b7-d04b8b5cd50f	2	f
205	To	温度初值To	Variable	\N	\N	0	3	100	-100	℃		t	2018-08-27 14:44:30.7+08	2018-08-27 14:44:30.7+08	2557b15d-db8f-4129-86b7-d04b8b5cd50f	2	f
210	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000	\N		t	2018-09-07 11:33:24.704+08	2018-09-07 11:33:24.704+08	ff2de59e-fd95-42c6-93cc-d827da25dd0c	2	f
216	K2	K2二次项系数	Variable	\N	\N	0	16	10000000000	-10000000000			t	2018-09-29 15:55:25.458+08	2018-09-29 15:55:25.458+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
219	To	To温度初值	Variable	\N	\N	0	2	100	-100			t	2018-09-29 15:57:14.004+08	2018-09-29 15:57:14.004+08	37f306ac-245e-4f3b-af76-4fe38cf3a8f7	2	f
245	Kt	Kt温补系数	Variable	\N		0	16	1000000000000	-1000000000000			t	2019-02-13 09:30:10.871+08	2019-02-13 09:30:25.892+08	904ee015-6df9-4626-90bd-2c3cc6e78f63	2	f
236	K3	三次项次数K3	Variable	\N	\N	0	10	100000	-100000			t	2018-11-23 17:06:25.401+08	2018-11-23 17:06:25.401+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
239	Kt	温补系数Kt	Variable	\N		0	10	100000	-100000	\N		t	2018-11-23 17:49:12.606+08	2018-11-23 17:52:19.656+08	fe13db66-da09-464c-89af-e9d080352d7d	2	f
242	Co	标定常数	Variable	\N		0	6	10000000	-1000000			t	2018-12-20 16:02:14.967+08	2018-12-20 16:08:47.195+08	6eadaa20-f803-4859-8ed0-3bd1afa830cb	2	f
265	Kwt	温度系数Kwt	Variable	\N	\N	1	6	100000000	-100000000			t	2019-03-25 11:35:50.913+08	2019-03-25 11:35:50.913+08	02079e63-b1de-4da9-8424-ebded758b627	2	f
251	Fo	初始频率	Variable	\N	\N	0	3	10000000	-10000000	HZ		t	2019-02-22 15:33:37.007+08	2019-02-22 15:33:37.007+08	0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9	2	f
232	cn	关联的温度通道与节点如5,12	Variable	\N		1,1	0			\N	形如5,12 代表通道5下面节点12的温度计	t	2018-10-24 16:10:10.462+08	2019-01-25 11:18:50.114+08	83c9a688-5f70-472f-abce-c1c127ce189b	5	f
253	Vo	电压初值Vo	Variable	\N	\N	0	3	20	0	V		t	2019-02-22 15:36:27.656+08	2019-02-22 15:36:27.656+08	5116bca0-de6b-4f0b-b995-31c9801ee401	2	f
268	Wo	应变波长初值Wo	Variable	\N	\N	0	16	1000000000000	-1000000000000		T0温度下的应变波长值Wo	t	2019-03-25 13:45:47.627+08	2019-03-25 13:45:47.627+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	2	f
255	Kx	Ky转换系数	Variable	\N		1	3	100000	-100000			t	2019-02-22 15:39:44.06+08	2019-02-22 15:40:24.799+08	5116bca0-de6b-4f0b-b995-31c9801ee401	2	f
257	Fo	初始频率Fo	Variable	\N	\N	0	5	100000	-100000	HZ		t	2019-02-25 16:42:52.11+08	2019-02-25 16:42:52.11+08	73db0431-7f3c-451d-9852-38c75cdf1b79	2	f
259	Kt	温补系数Kt	Variable	\N	\N	0	16	1000000	-1000000	\N		t	2019-02-25 16:45:48.121+08	2019-02-25 16:45:48.121+08	73db0431-7f3c-451d-9852-38c75cdf1b79	2	f
262	K	系数K	Variable	\N		1	8	10000000	-10000000	\N		t	2019-03-13 13:51:04.378+08	2019-03-13 13:51:23.647+08	96e821da-a5f5-448b-9a60-b4e83202b252	2	f
260	K	系数K	Variable	\N		1	8	10000000	-1000000	\N		t	2019-03-12 14:05:31.01+08	2019-03-13 13:51:35.187+08	75a20e66-91ae-4d62-8f69-faef769091b1	2	f
261	W	放大倍数W	Variable	\N		1	8	10000000	-10000000			t	2019-03-12 14:06:07.774+08	2019-03-13 13:51:41.31+08	75a20e66-91ae-4d62-8f69-faef769091b1	2	f
263	Po	修正值Po	Variable	\N	\N	0	8	100000000	-100000000			t	2019-03-13 13:52:39.302+08	2019-03-13 13:52:39.302+08	96e821da-a5f5-448b-9a60-b4e83202b252	2	f
226	WTo	初始波长WTo	Variable	\N		0	6	100000000	-100000000			t	2018-10-24 13:59:05.589+08	2019-03-25 11:34:54.732+08	c4f1e8d6-82f3-4436-b65e-4d1a8474612e	2	f
266	To	温度修正值To	Variable	\N	\N	0	2	100	-100	℃		t	2019-03-25 11:38:08.985+08	2019-03-25 11:38:08.985+08	02079e63-b1de-4da9-8424-ebded758b627	2	f
269	Kt	应变的温度系数Kt	Variable	\N	\N	1	16	100000000000	-100000000000		应变计的温度系数Kt	t	2019-03-25 13:47:23.937+08	2019-03-25 13:47:23.937+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	2	f
229	WTo	温度波长初值WTo	Variable	\N		0	16	100000000000	-100000000000		温度传感器在T0温度下的波长值（nm）	t	2018-10-24 15:54:17.118+08	2019-03-25 13:43:30.554+08	83c9a688-5f70-472f-abce-c1c127ce189b	2	f
267	WTo	温度波长初值WTo	Variable	\N	\N	0	16	100000000000	-100000000000		温度传感器在T0温度下的波长值（nm）	t	2019-03-25 13:44:47.751+08	2019-03-25 13:44:47.751+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	2	f
270	Kwt	温度的温度系数Kwt	Variable	\N	\N	1	16	100000000000	-100000000000			t	2019-03-25 13:51:16.195+08	2019-03-25 13:51:16.195+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	2	f
271	K	应变系数K	Variable	\N	\N	1	16	1000000000000	-1000000000000			t	2019-03-25 13:52:07.893+08	2019-03-25 13:52:07.893+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	2	f
272	cn	关联的温度通道与节点如5,12	Variable	\N		1,1	0				如5,12 代表通道5下面节点12的温度计	t	2019-03-25 13:53:01.42+08	2019-03-25 14:03:44.553+08	a9bc6a3e-3aae-4ee7-a354-c174ea0577f5	5	f
275	Fo	初始频率Fo	Variable	\N	\N	0	3	100000000	-100000000			t	2019-04-10 15:19:53.488+08	2019-04-10 15:19:53.488+08	583a326f-d743-4f66-b60d-89b60c35e439	2	f
273	K	模量系数K	Variable	\N		1	10	100000000000	-100000000000	\N		t	2019-04-10 15:14:46.721+08	2019-04-10 15:21:40.901+08	583a326f-d743-4f66-b60d-89b60c35e439	2	f
276	K	模量系数K	Variable	\N	\N	1	3	1000000	-1000000	\N		t	2019-04-25 15:15:27.989+08	2019-04-25 15:15:27.989+08	5ffcc514-3e04-44e3-824a-c732c656a8c7	2	f
277	fo	频率初值fo	Variable	\N	\N	0	3	10000000	-1000000	HZ		t	2019-04-25 15:16:09.434+08	2019-04-25 15:16:09.434+08	5ffcc514-3e04-44e3-824a-c732c656a8c7	2	f
278	参数A	参数A	Tag	\N	\N	\N	\N	\N	\N	\N		t	2019-04-26 13:08:13.872+08	2019-04-26 13:08:13.872+08	acb091fb-01aa-4316-9406-e52f4d5d84bd	1	f
285	1	1	Variable	\N	\N	\N	\N	1	1			t	2019-05-10 16:00:24.23+08	2019-05-10 16:00:24.23+08	f7c7c02c-833e-4c2c-9119-492d7a340331	1	f
287	F0	初始频率	Variable	\N	\N	0	6	99999	-99999	Hz		t	2019-05-10 16:01:41.786+08	2019-05-10 16:01:41.786+08	ac0133f4-cdfd-424a-aae0-598e71b861a6	2	f
286	K	系数	Variable	\N		1	6	99999	-99999			t	2019-05-10 16:00:52.476+08	2019-05-10 16:01:48.346+08	ac0133f4-cdfd-424a-aae0-598e71b861a6	2	f
288	K1	一次项系数K1	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2019-05-14 14:18:56.749+08	2019-05-14 14:18:56.749+08	5b5f6379-cb2f-49e4-bf4f-92c230604fda	2	f
289	K2	二次项系数K2	Variable	\N	\N	0	16	999999999999999	-999999999999999			t	2019-05-14 14:20:01.505+08	2019-05-14 14:20:01.505+08	5b5f6379-cb2f-49e4-bf4f-92c230604fda	2	f
290	R0	基准值R0	Variable	\N	\N	0	5	1000000	-1000000			t	2019-05-14 14:20:45.428+08	2019-05-14 14:20:45.428+08	5b5f6379-cb2f-49e4-bf4f-92c230604fda	2	f
291	C	修正值C	Variable	\N	\N	0	5	1000000	-1000000			t	2019-05-14 14:21:28.371+08	2019-05-14 14:21:28.371+08	5b5f6379-cb2f-49e4-bf4f-92c230604fda	2	f
292	P	原始值指数P	Variable	\N	\N	1	\N	10	-10			t	2019-05-14 14:22:04.394+08	2019-05-14 14:22:04.394+08	5b5f6379-cb2f-49e4-bf4f-92c230604fda	1	f
293	K	K模量系数	Variable	\N	\N	1	16	99999999999999	-99999999999999	\N		t	2019-05-14 14:24:31.81+08	2019-05-14 14:24:31.81+08	beeaa0c3-fc06-4684-a771-8434726179cf	2	f
294	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999	-99999999999999			t	2019-05-14 14:25:25.177+08	2019-05-14 14:25:25.177+08	beeaa0c3-fc06-4684-a771-8434726179cf	2	f
295	Fo	Fo频率初值	Variable	\N	\N	0	3	100000	-100000	HZ		t	2019-05-14 14:26:37.981+08	2019-05-14 14:26:37.981+08	beeaa0c3-fc06-4684-a771-8434726179cf	2	f
296	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-05-14 14:27:25.516+08	2019-05-14 14:27:25.516+08	beeaa0c3-fc06-4684-a771-8434726179cf	2	f
297	G	G(直线系数)	Variable	\N	\N	1	16	9999999999999999	-9999999999999999	\N		t	2019-05-14 14:28:40.827+08	2019-05-14 14:28:40.827+08	bee9dea8-27e2-4698-9202-885b4b2a0bbd	2	f
298	L	L(间距)	Variable	\N	\N	1	16	99999999999999	-99999999999999	mm		t	2019-05-14 14:29:54.113+08	2019-05-14 14:29:54.113+08	bee9dea8-27e2-4698-9202-885b4b2a0bbd	2	f
299	Rx0	Rx0(x方向初值)	Variable	\N	\N	0	16	9999999999999999999	-9999999999999999999			t	2019-05-14 14:30:41.335+08	2019-05-14 14:30:41.335+08	bee9dea8-27e2-4698-9202-885b4b2a0bbd	2	f
300	Ry0	Ry0(Y方向初值)	Variable	\N	\N	0	16	999999999999999999	-999999999999999999			t	2019-05-14 14:31:25.155+08	2019-05-14 14:31:25.155+08	bee9dea8-27e2-4698-9202-885b4b2a0bbd	2	f
301	aH	模拟量上限	Variable	\N	\N	20	\N	20	0	\N		t	2019-05-14 14:33:01.299+08	2019-05-14 14:33:01.299+08	2edaa49c-0668-41cd-a987-a3f64cf9c81c	1	f
302	aL	模拟量下限	Variable	\N	\N	4	\N	20	0			t	2019-05-14 14:33:37.501+08	2019-05-14 14:33:37.501+08	2edaa49c-0668-41cd-a987-a3f64cf9c81c	1	f
303	dL	dL数字量下限	Variable	\N	\N	0	16	99999999999999	-99999999999999			t	2019-05-14 14:34:24.777+08	2019-05-14 14:34:24.777+08	2edaa49c-0668-41cd-a987-a3f64cf9c81c	2	f
304	dH	数字量上限	Variable	\N	\N	1	16	99999999999999	-99999999999999			t	2019-05-14 14:35:11.082+08	2019-05-14 14:35:11.082+08	2edaa49c-0668-41cd-a987-a3f64cf9c81c	2	f
307	K	模量系数K	Variable	\N	\N	1	10	10000000	-10000000	\N		t	2019-05-22 10:48:50.692+08	2019-05-22 10:48:50.692+08	aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c	2	f
308	Fo	频率初值Fo	Variable	\N	\N	0	5	10000000	-10000000	HZ		t	2019-05-22 10:49:41.679+08	2019-05-22 10:49:41.679+08	aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c	2	f
309	K1	一次项系数K1	Variable	\N	\N	1	16	9999999999999999	-9999999999999999	\N		t	2019-05-23 14:04:59.493+08	2019-05-23 14:04:59.493+08	b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	2	f
310	K2	二次项系数K2	Variable	\N	\N	0	16	999999999999999	-999999999999999			t	2019-05-23 14:06:20.852+08	2019-05-23 14:06:20.852+08	b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	2	f
311	R0	基准值R0	Variable	\N	\N	0	5	1000000	-1000000			t	2019-05-23 14:07:20.556+08	2019-05-23 14:07:20.556+08	b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	2	f
312	C	修正值C	Variable	\N	\N	0	5	1000000	-1000000			t	2019-05-23 14:11:29.891+08	2019-05-23 14:11:29.891+08	b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	2	f
313	P	原始值指数P	Variable	\N	\N	1	\N	10	-10			t	2019-05-23 14:12:23.585+08	2019-05-23 14:12:23.585+08	b9168d49-7bd9-4a0a-8089-b7b13f0b33e5	1	f
314	K	K模量系数	Variable	\N	\N	1	16	99999999999999	-99999999999999	\N		t	2019-05-23 14:14:09.416+08	2019-05-23 14:14:09.416+08	7be774d7-af98-47fa-b941-286639c151e9	2	f
315	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999	-99999999999999			t	2019-05-23 14:15:02.783+08	2019-05-23 14:15:02.783+08	7be774d7-af98-47fa-b941-286639c151e9	2	f
316	Fo	Fo频率初值	Variable	\N	\N	0	3	100000	-100000	HZ		t	2019-05-23 14:16:00.44+08	2019-05-23 14:16:00.44+08	7be774d7-af98-47fa-b941-286639c151e9	2	f
317	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-05-23 14:16:44.267+08	2019-05-23 14:16:44.267+08	7be774d7-af98-47fa-b941-286639c151e9	2	f
318	G	G(直线系数)	Variable	\N	\N	1	16	9999999999999999	-9999999999999999	\N		t	2019-05-23 14:18:19.921+08	2019-05-23 14:18:19.921+08	630b1eca-f335-4da0-90fb-c21f58f32798	2	f
319	L	L(间距)	Variable	\N	\N	1	16	99999999999999	-99999999999999	mm		t	2019-05-23 14:19:15.419+08	2019-05-23 14:19:15.419+08	630b1eca-f335-4da0-90fb-c21f58f32798	2	f
320	Rx0	Rx0(x方向初值)	Variable	\N	\N	0	16	9999999999999999999	-9999999999999999999			t	2019-05-23 14:20:06.688+08	2019-05-23 14:20:06.688+08	630b1eca-f335-4da0-90fb-c21f58f32798	2	f
321	Ry0	Ry0(Y方向初值)	Variable	\N	\N	0	16	99999999999999	-99999999999999			t	2019-05-23 14:20:53.085+08	2019-05-23 14:20:53.085+08	630b1eca-f335-4da0-90fb-c21f58f32798	2	f
322	aH	模拟量上限	Variable	\N	\N	20	\N	20	0	\N		t	2019-05-23 14:22:06.741+08	2019-05-23 14:22:06.741+08	65ca4fef-0880-442f-938e-da24d950557d	1	f
323	aL	模拟量下限	Variable	\N	\N	4	\N	20	0			t	2019-05-23 14:22:40.671+08	2019-05-23 14:22:40.671+08	65ca4fef-0880-442f-938e-da24d950557d	1	f
324	dL	dL数字量下限	Variable	\N	\N	0	16	99999999999999	-99999999999999			t	2019-05-23 14:23:45.567+08	2019-05-23 14:23:45.567+08	65ca4fef-0880-442f-938e-da24d950557d	2	f
325	dH	数字量上限	Variable	\N	\N	1	16	99999999999999	-99999999999999			t	2019-05-23 14:24:28.774+08	2019-05-23 14:24:28.774+08	65ca4fef-0880-442f-938e-da24d950557d	2	f
327	b	初值	Variable	\N		\N	16	99999999	-99999999			t	2019-05-28 16:21:17.888+08	2019-05-28 16:21:37.333+08	5a40c554-1256-4aec-b591-0202fc0f267a	2	f
326	a	系数	Variable	\N		0	16	99999999	-99999999	\N		t	2019-05-28 16:20:05.352+08	2019-05-28 16:23:06.21+08	5a40c554-1256-4aec-b591-0202fc0f267a	2	f
332	a	a	Variable	\N	\N	1	6	100000000	-100000000	\N		t	2019-05-29 15:48:33.416+08	2019-05-29 15:48:33.416+08	871940ec-0348-4f4c-942e-8785322e66f4	2	f
333	b	b	Variable	\N	\N	1	6	100000000	-100000000			t	2019-05-29 15:51:21.761+08	2019-05-29 15:51:21.761+08	871940ec-0348-4f4c-942e-8785322e66f4	2	f
334	T0	初始温度	Variable	\N	\N		1	99999	-99999	℃		t	2019-05-30 16:04:05.333+08	2019-05-30 16:04:05.333+08	583a326f-d743-4f66-b60d-89b60c35e439	2	f
338	K	模量系数K	Variable	\N	\N	\N	10	100000000000	-100000000000			t	2019-06-03 10:47:44.324+08	2019-06-03 10:47:44.324+08	6cea049d-f41a-43f9-9e88-d8aeea9aca7f	2	f
335	Kt	系数	Variable	\N	\N	\N	6	99999	-99999			t	2019-05-30 16:07:17.947+08	2019-05-30 16:07:17.947+08	583a326f-d743-4f66-b60d-89b60c35e439	2	f
336	Kt	温补系数Kt	Variable	\N		\N	6	99999	-99999	\N		t	2019-06-03 10:45:54.932+08	2019-06-03 10:49:12.237+08	6cea049d-f41a-43f9-9e88-d8aeea9aca7f	2	f
340	Kt	温补系数	Variable	\N	\N	\N	6	99999	-99999	\N		t	2019-06-05 10:45:38.169+08	2019-06-05 10:45:38.169+08	bd266924-534e-4f2b-84a9-5e7b7c8f61de	2	f
337	To	初始温度To	Variable	\N		\N	2	99999	-99999	℃		t	2019-06-03 10:46:51.943+08	2019-06-05 16:36:14.923+08	6cea049d-f41a-43f9-9e88-d8aeea9aca7f	2	f
342	K	模量系数K	Variable	\N	\N	\N	6	9999999	-9999999			t	2019-06-05 10:47:51.521+08	2019-06-05 10:47:51.521+08	bd266924-534e-4f2b-84a9-5e7b7c8f61de	2	f
343	Fo	初始频率Fo	Variable	\N	\N	\N	3	9999999	-9999999			t	2019-06-05 10:48:56.236+08	2019-06-05 10:48:56.236+08	bd266924-534e-4f2b-84a9-5e7b7c8f61de	2	f
347	Fo	初始频率Fo	Variable	\N	\N	\N	3	9999999	-9999999			t	2019-06-05 11:03:15.312+08	2019-06-05 11:03:15.312+08	e74b9abf-dce9-435c-b500-e9060e048fb9	2	f
341	To	初始温度To	Variable	\N		\N	1	999999	-999999	℃		t	2019-06-05 10:46:56.963+08	2019-06-05 10:49:08.613+08	bd266924-534e-4f2b-84a9-5e7b7c8f61de	2	f
344	Kt	温补系数	Variable	\N	\N	\N	6	99999	-99999	\N		t	2019-06-05 11:01:08.078+08	2019-06-05 11:01:08.078+08	e74b9abf-dce9-435c-b500-e9060e048fb9	2	f
345	To	初始温度To	Variable	\N	\N	\N	1	999999	-999999	℃		t	2019-06-05 11:01:52.384+08	2019-06-05 11:01:52.384+08	e74b9abf-dce9-435c-b500-e9060e048fb9	2	f
346	K	模量系数K	Variable	\N	\N	\N	6	9999999	-9999999			t	2019-06-05 11:02:33.818+08	2019-06-05 11:02:33.818+08	e74b9abf-dce9-435c-b500-e9060e048fb9	2	f
348	Kt	温补系数	Variable	\N	\N	\N	6	99999	-99999	\N		t	2019-06-05 11:10:53.815+08	2019-06-05 11:10:53.815+08	9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	2	f
339	Fo	初始频率Fo	Variable	\N			3	100000000	-100000000			t	2019-06-03 10:48:41.976+08	2019-06-05 16:35:56.182+08	6cea049d-f41a-43f9-9e88-d8aeea9aca7f	2	f
352	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000	\N		t	2019-06-11 15:08:26.562+08	2019-06-11 15:08:26.562+08	63aa490f-c8ba-4b11-b890-18cfee871d70	2	f
353	To	温度初值	Variable	\N	\N	0	2	100	-100	℃		t	2019-06-11 15:11:55.866+08	2019-06-11 15:11:55.866+08	63aa490f-c8ba-4b11-b890-18cfee871d70	2	f
354	Kt	温补系数Kt	Variable	\N	\N	0	16	10000000	-10000000			t	2019-06-11 15:13:29.701+08	2019-06-11 15:13:29.701+08	63aa490f-c8ba-4b11-b890-18cfee871d70	2	f
355	Fo	初始频率	Variable	\N	\N	0	3	10000000	-10000000	HZ		t	2019-06-11 15:14:20.768+08	2019-06-11 15:14:20.768+08	63aa490f-c8ba-4b11-b890-18cfee871d70	2	f
356	Ky	Ky转换系数	Variable	\N	\N	1	3	100000	-100000	\N		t	2019-06-11 15:15:21.429+08	2019-06-11 15:15:21.429+08	d062cb83-d762-42e2-a2dc-37d75f24bf18	2	f
357	Vo	电压初值Vo	Variable	\N	\N	0	3	20	0	V		t	2019-06-11 15:16:06.014+08	2019-06-11 15:16:06.014+08	d062cb83-d762-42e2-a2dc-37d75f24bf18	2	f
358	Kx	Ky转换系数	Variable	\N	\N	1	3	100000	-100000			t	2019-06-11 15:16:46.262+08	2019-06-11 15:16:46.262+08	d062cb83-d762-42e2-a2dc-37d75f24bf18	2	f
360	Kt	Kt温补系数	Variable	\N	\N	0	16	9999999999999999999	-9999999999999999999			t	2019-06-24 16:53:26.406+08	2019-06-24 16:53:26.406+08	2bd2a601-c351-4e47-bbbe-9a787efd6026	2	f
361	K	K模量系数	Variable	\N	\N	1	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2019-06-24 16:54:19.93+08	2019-06-24 16:54:19.93+08	2bd2a601-c351-4e47-bbbe-9a787efd6026	2	f
362	Fo	Fo频率初值	Variable	\N	\N	0	3	100000000	-100000000	HZ		t	2019-06-24 16:55:56.505+08	2019-06-24 16:55:56.505+08	2bd2a601-c351-4e47-bbbe-9a787efd6026	2	f
359	To	To温度初值	Variable	\N		0	2	100	-100	℃		t	2019-06-24 16:52:06.36+08	2019-06-24 16:56:19.175+08	2bd2a601-c351-4e47-bbbe-9a787efd6026	2	f
350	K	模量系数K	Variable	\N		1	16	9999999999999999999	-999999999999999999			t	2019-06-05 11:12:27.298+08	2019-07-09 09:49:40.506+08	9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	2	f
351	Fo	初始频率Fo	Variable	\N		0	5	100000	-100000	HZ		t	2019-06-05 11:13:28.561+08	2019-07-09 09:49:49.925+08	9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	2	f
349	To	初始温度To	Variable	\N			3	999999	-999999	℃		t	2019-06-05 11:11:47.027+08	2019-07-09 09:50:05.531+08	9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	2	f
363	Fo	频率初值Fo	Variable	\N	\N	0	5	10000000	-10000000	HZ		t	2019-08-01 15:03:13.664+08	2019-08-01 15:03:13.664+08	d157f3b3-41c1-4e8b-8141-76c56d56b8ed	2	f
364	K	模量系数K	Variable	\N	\N	1	10	10000000	-10000000			t	2019-08-01 15:04:29.041+08	2019-08-01 15:04:29.041+08	d157f3b3-41c1-4e8b-8141-76c56d56b8ed	2	f
365	Fo	Fo基准读数	Variable	\N		0	3	10000	-10000	\N		t	2019-08-27 09:57:07.819+08	2019-08-27 09:57:25.438+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
366	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-08-27 09:58:14.158+08	2019-08-27 09:58:14.158+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
367	K1	K1一次项系数	Variable	\N	\N	1	16	999999999999999999999999	-9999999999999999999999			t	2019-08-27 09:59:59.988+08	2019-08-27 09:59:59.988+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
368	K2	K2二次项系数	Variable	\N	\N	0	16	99999999999999999999	-999999999999999999999999			t	2019-08-27 10:00:37.751+08	2019-08-27 10:00:37.751+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
369	K3	K3三次项系数	Variable	\N	\N	0	16	9999999999999999999	-999999999999999999			t	2019-08-27 10:01:25.258+08	2019-08-27 10:01:25.258+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
370	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999	-99999999999999999999			t	2019-08-27 10:02:12.56+08	2019-08-27 10:02:12.56+08	be45ef93-4eef-44e3-a4af-c6499d52929b	2	f
376	E	弹模	Variable	\N	\N	\N	8	999999999	-999999999	\N		t	2019-08-28 10:29:59.911+08	2019-08-28 10:29:59.911+08	abc52bef-269a-4be1-82f0-5d3626a3ca44	2	f
383	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000	\N		t	2019-08-28 15:14:03.613+08	2019-08-28 15:14:03.613+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
384	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-08-28 15:14:55.169+08	2019-08-28 15:14:55.169+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
385	C	系数c	Variable	\N		0.0000001019	12	100000	-100000			t	2019-08-28 15:16:34.511+08	2021-01-15 13:07:33.896+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
389	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000	\N		t	2019-08-28 16:13:41.149+08	2019-08-28 16:13:41.149+08	5daeb319-4f65-4e98-b0d6-06dd3eb2575d	2	f
390	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-08-28 16:15:00.556+08	2019-08-28 16:15:00.556+08	5daeb319-4f65-4e98-b0d6-06dd3eb2575d	2	f
375	T0	T0初值	Variable	\N		0	2	9999999999	-999999999			t	2019-08-28 10:28:30.352+08	2019-08-28 16:18:14.69+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
377	G	系数	Variable	\N		0	8	999999999999	-99999999999999			t	2019-08-28 10:31:16.152+08	2019-08-28 16:18:59.444+08	abc52bef-269a-4be1-82f0-5d3626a3ca44	2	f
392	C	系数C	Variable	\N	\N	0.0002369	12	100000	-100000	\N		t	2019-09-19 09:43:22.522+08	2019-09-19 09:43:22.522+08	4cf90a17-8779-4902-9e06-2c4c75e37fec	2	f
393	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-09-19 09:44:49.048+08	2019-09-19 09:44:49.048+08	4cf90a17-8779-4902-9e06-2c4c75e37fec	2	f
394	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000			t	2019-09-19 09:49:19.532+08	2019-09-19 09:49:19.532+08	4cf90a17-8779-4902-9e06-2c4c75e37fec	2	f
395	Y2	混凝土结构的热膨胀系数Y2	Variable	\N	\N	0	8	999999999999	-99999999999999	\N		t	2019-09-19 10:20:19.798+08	2019-09-19 10:20:19.798+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
396	R0	R0初值	Variable	\N	\N	0	2	999999999999	-999999999999			t	2019-09-19 10:21:14.755+08	2019-09-19 10:21:14.755+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
397	G	系数	Variable	\N	\N	0	8	999999999999	-99999999999999			t	2019-09-19 10:24:02.966+08	2019-09-19 10:24:02.966+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
398	Y1	振弦材料的膨胀系数Y1	Variable	\N	\N	0	8	999999999999	-99999999999			t	2019-09-19 10:25:34.621+08	2019-09-19 10:25:34.621+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
399	T0	T0初值	Variable	\N	\N	0	2	9999999999	-9999999999			t	2019-09-19 10:26:50.149+08	2019-09-19 10:26:50.149+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
400	C	系数C	Variable	\N	\N	0.0000001019	12	100000	-100000			t	2019-09-19 10:27:48.373+08	2019-09-19 10:27:48.373+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
401	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-09-19 10:28:43.69+08	2019-09-19 10:28:43.69+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
402	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000			t	2019-09-19 10:31:39.678+08	2019-09-19 10:31:39.678+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
403	C0	平均修正系数	Variable	\N	\N	\N	8	999999999999	-999999999999			t	2019-09-19 10:32:47.193+08	2019-09-19 10:32:47.193+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
404	E	弹模	Variable	\N	\N	\N	8	999999999	-999999999			t	2019-09-19 10:33:45.28+08	2019-09-19 10:33:45.28+08	2d30190b-bf0a-49ee-9c8c-ce67465de1bb	2	f
405	C0	平均修正系数	Variable	\N	\N	0	8	99999999	-999999999	\N		t	2019-09-19 10:36:11.496+08	2019-09-19 10:36:11.496+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
406	T0	T0初值	Variable	\N	\N	0	2	9999999999	-999999999			t	2019-09-19 10:37:02.6+08	2019-09-19 10:37:02.6+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
407	R0	R0初值	Variable	\N	\N	0	2	9999999	-9999999			t	2019-09-19 10:41:02.246+08	2019-09-19 10:41:02.246+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
408	G	系数	Variable	\N	\N	0	8	999999999	-999999999			t	2019-09-19 10:41:49.257+08	2019-09-19 10:41:49.257+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
409	C	系数c	Variable	\N	\N	0.0000001019	12	100000	-100000			t	2019-09-19 10:42:54.991+08	2019-09-19 10:42:54.991+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
410	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-09-19 10:43:43.619+08	2019-09-19 10:43:43.619+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
411	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000			t	2019-09-19 10:45:33.922+08	2019-09-19 10:45:33.922+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
412	E	弹模系数	Variable	\N	\N	\N	8	99999999	-99999999			t	2019-09-19 10:46:27.401+08	2019-09-19 10:46:27.401+08	04d11a24-68c7-4a80-bfc1-ffb924f24296	2	f
413	G	直线系数	Variable	\N	\N	0.018151	8	9999999999999	-999999999999	mm		t	2019-09-20 15:48:22.002+08	2019-09-20 15:48:22.002+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
414	K	温度系数	Variable	\N	\N	0.015882	8	999999999	-9999999999			t	2019-09-20 15:50:03.555+08	2019-09-20 15:50:03.555+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
416	R0	R0初值	Variable	\N	\N	0	4	999999999999	-999999999999			t	2019-09-20 15:59:05.613+08	2019-09-20 15:59:05.613+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
415	T0	T0初值	Variable	\N		0	4	9999999999	-9999999999			t	2019-09-20 15:53:04.739+08	2019-09-20 15:59:14.224+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
417	A	系数A	Variable	\N	\N	0.0014051	8	100000	-100000	\N		t	2019-09-23 14:42:28.266+08	2019-09-23 14:42:28.266+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
418	B	系数B	Variable	\N	\N	0.0002369	8	100000	-100000			t	2019-09-23 14:46:05.603+08	2019-09-23 14:46:05.603+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
419	C	系数C	Variable	\N	\N	0.0002369	12	100000	-100000			t	2019-09-23 14:47:00.414+08	2019-09-23 14:47:00.414+08	86dd2c3f-ab82-4e7a-8766-5f8af99c2de9	2	f
422	K1	系数K1	Variable	\N	\N	0	2	100000000000000000000	-100000000000000000000			t	2019-09-25 15:30:46.595+08	2019-09-25 15:30:46.595+08	dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52	2	f
421	X0	X0初值	Variable	\N		0	2	100000000000000000000	-100000000000000000000			t	2019-09-25 15:28:41.287+08	2019-09-25 15:29:41.475+08	dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52	2	f
420	K	系数K	Variable	\N		1	2	100000000000000	-100000000000000	\N		t	2019-09-25 15:27:48.622+08	2019-09-25 15:29:47.999+08	dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52	2	f
423	Y0	初值Y0	Variable	\N	\N	0	2	1000000000000000	-1000000000000000			t	2019-09-25 15:31:49.435+08	2019-09-25 15:31:49.435+08	dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52	2	f
424	K	系数K	Variable	\N	\N	1	2	10000000000000000000	-10000000000000000000	\N		t	2019-09-25 15:40:22.982+08	2019-09-25 15:40:22.982+08	5773316d-3a54-4974-86d6-eff99007cf04	2	f
425	K	系数K	Variable	\N	\N	1	2	1000000000	-10000000000	\N		t	2019-09-25 15:44:06.952+08	2019-09-25 15:44:06.952+08	f4e36088-8943-4147-b898-324dafb20220	2	f
374	Fo	Fo初值	Variable	\N		0	2	9999999	-9999999			t	2019-08-28 10:27:43.21+08	2021-01-15 13:09:30.049+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
391	C	系数C	Variable	\N		0.0000001019	12	100000	-100000			t	2019-08-28 16:15:51.792+08	2021-01-15 11:48:22.763+08	5daeb319-4f65-4e98-b0d6-06dd3eb2575d	2	f
372	G	系数G	Variable	\N		0	8	999999999	-999999999			t	2019-08-28 10:24:25.218+08	2021-01-15 13:12:22.398+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
373	E	系数E	Variable	\N		0	8	99999999	-999999999			t	2019-08-28 10:25:53.731+08	2021-01-15 13:12:08.662+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
379	Fo	Fo初值	Variable	\N		0	2	999999999999	-999999999999			t	2019-08-28 10:32:38.91+08	2021-01-15 13:13:56.168+08	abc52bef-269a-4be1-82f0-5d3626a3ca44	2	f
427	K1	系数K1	Variable	\N	\N	0	2	100000000000	-1000000000000			t	2019-09-25 15:45:27.401+08	2019-09-25 15:45:27.401+08	f4e36088-8943-4147-b898-324dafb20220	2	f
426	X0	初值X0	Variable	\N		0	2	1000000000000	-1000000000000			t	2019-09-25 15:44:36.807+08	2019-09-25 15:45:36.545+08	f4e36088-8943-4147-b898-324dafb20220	2	f
428	Y0	初值Y0	Variable	\N	\N	0	2	10000000000	-100000000000			t	2019-09-25 15:46:23.361+08	2019-09-25 15:46:23.361+08	f4e36088-8943-4147-b898-324dafb20220	2	f
429	Ktm	Ktm采集仪补偿系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999	\N		t	2019-09-26 15:27:46.755+08	2019-09-26 15:27:46.755+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
430	Des	是否判断采集(Des;1:是，0:否)	Variable	\N	\N	0	\N	1	0			t	2019-09-26 15:28:45.959+08	2019-09-26 15:28:45.959+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	1	f
431	reg	reg理论电阻值(Ω)	Variable	\N	\N	0	3	10000	-10000	Ω		t	2019-09-26 15:30:02.511+08	2019-09-26 15:30:02.511+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
432	Tc0	Tc0采集仪温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-09-26 15:30:42.832+08	2019-09-26 15:30:42.832+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
433	Deg	是否消磁(Deg;1:消磁，0:不消磁)	Variable	\N	\N	1	\N	1	0			t	2019-09-26 15:31:45.278+08	2019-09-26 15:31:45.278+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	1	f
434	vol	vol激励电压(V)	Variable	\N	\N	0	6	10000	-10000	V		t	2019-09-26 15:32:36.22+08	2019-09-26 15:32:36.22+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
435	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2019-09-26 15:34:41.941+08	2019-09-26 15:34:41.941+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
436	T0	T0温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-09-26 15:35:26.002+08	2019-09-26 15:35:26.002+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
437	C0	C0线性拟合常数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2019-09-26 15:37:24.182+08	2019-09-26 15:37:24.182+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
438	C2	C2二次项拟合系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2019-09-26 15:38:02.459+08	2019-09-26 15:38:02.459+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
439	C1	C1线性拟合系数	Variable	\N	\N	0	16	99999999999999999999999999999999	-99999999999999999999999999999999			t	2019-09-26 15:38:45.472+08	2019-09-26 15:38:45.472+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
440	F0	F0零点受力值	Variable	\N	\N	0	3	1000000000	-1000000000	KN		t	2019-09-26 15:40:01.502+08	2019-09-26 15:40:01.502+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
441	V0	V0零点积分电压值	Variable	\N	\N	0	3	100000	-100000	V		t	2019-09-26 15:41:10.91+08	2019-09-26 15:41:10.91+08	eb23e709-ad84-4257-a0a7-e7bc44e81f29	2	f
442	Kt	Kt温补系数	Variable	\N	\N	0	16	1000000000000	-1000000000000	\N		t	2019-09-29 16:58:25.682+08	2019-09-29 16:58:25.682+08	5b391db9-96c6-4ebe-88f0-75aea18bd5df	2	f
443	Po	Po初值	Variable	\N	\N	0	5	100000000	-100000000			t	2019-09-29 16:59:15.111+08	2019-09-29 16:59:15.111+08	5b391db9-96c6-4ebe-88f0-75aea18bd5df	2	f
444	Fo	Fo基准读数	Variable	\N	\N	0	3	1000000	-100000			t	2019-09-29 17:12:21.344+08	2019-09-29 17:12:21.344+08	5b391db9-96c6-4ebe-88f0-75aea18bd5df	2	f
445	K1	K1一次项系数	Variable	\N	\N	1	16	1000000000000	-100000000000			t	2019-09-29 17:14:11.437+08	2019-09-29 17:14:11.437+08	5b391db9-96c6-4ebe-88f0-75aea18bd5df	2	f
446	To	To温度初值	Variable	\N	\N	\N	3	100	-100			t	2019-09-29 17:15:20.807+08	2019-09-29 17:15:20.807+08	5b391db9-96c6-4ebe-88f0-75aea18bd5df	2	f
447	K	模数系数	Variable	\N	\N	1	2	999999999999999	-999999999999999	\N		t	2019-10-14 09:37:51.718+08	2019-10-14 09:37:51.718+08	51618f61-48a1-4680-9485-1b5f353ee3f7	2	f
448	F0	初值	Variable	\N	\N		2	99999999999999	-99999999999999			t	2019-10-14 09:39:35.905+08	2019-10-14 09:39:35.905+08	51618f61-48a1-4680-9485-1b5f353ee3f7	2	f
449	Kt	温补系数	Variable	\N	\N	\N	2	99999999999	-99999999999			t	2019-10-14 09:40:30.135+08	2019-10-14 09:40:30.135+08	51618f61-48a1-4680-9485-1b5f353ee3f7	2	f
450	T0	初值	Variable	\N	\N	\N	2	999999999999	-999999999999			t	2019-10-14 09:41:02.835+08	2019-10-14 09:41:02.835+08	51618f61-48a1-4680-9485-1b5f353ee3f7	2	f
451	To	To温度初值	Variable	\N	\N	0	3	100	-100	℃		t	2019-11-11 14:55:16.299+08	2019-11-11 14:55:16.299+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
452	K1	K1一次项系数	Variable	\N		0	16	99999999999999999	-99999999999999999			t	2019-11-11 14:56:23.637+08	2019-11-11 14:56:35.448+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
453	Kt	Kt温补系数	Variable	\N	\N	0	16	99999999999999999	-99999999999999999			t	2019-11-11 14:57:33.45+08	2019-11-11 14:57:33.45+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
454	K2	K2二次项系数	Variable	\N	\N	0	16	999999999999999999	-999999999999999999			t	2019-11-11 14:59:05.501+08	2019-11-11 14:59:05.501+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
455	Fo	Fo基准读数	Variable	\N	\N	0	3	100000	-100000			t	2019-11-11 14:59:55.354+08	2019-11-11 14:59:55.354+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
456	K3	K3三次项系数	Variable	\N	\N	0	16	99999999999999999	-9999999999999999			t	2019-11-11 15:00:45.338+08	2019-11-11 15:00:45.338+08	e217b93e-d22e-40ec-a8ca-5fccb0db6819	2	f
457	K	系数	Variable	\N	\N	0	2	10000000000000	-1000000000000	\N		t	2019-11-15 13:24:22.617+08	2019-11-15 13:24:22.617+08	9091e551-9ef7-4867-9cad-ea5e8c25f39b	2	f
458	F0	频率初值	Variable	\N	\N	0	2	10000000000000000000000	-10000000000000000000000			t	2019-11-15 13:25:32.029+08	2019-11-15 13:25:32.029+08	9091e551-9ef7-4867-9cad-ea5e8c25f39b	2	f
459	Kt	温补系数	Variable	\N	\N	0	2	100000000000000	-100000000000000			t	2019-11-15 13:26:07.662+08	2019-11-15 13:26:07.662+08	9091e551-9ef7-4867-9cad-ea5e8c25f39b	2	f
460	T0	温度初值	Variable	\N		0	2	100000000000000000	-1000000000000000000			t	2019-11-15 13:26:47.088+08	2019-11-15 15:55:11.758+08	9091e551-9ef7-4867-9cad-ea5e8c25f39b	2	f
461	A	模量系数	Variable	\N	\N	1	16	99999999999999	-99999999999999	\N		t	2019-11-20 09:51:37.225+08	2019-11-20 09:51:37.225+08	9784b5cb-8a88-4c6a-86c8-51afd961b78d	2	f
463	Fo	初始频率	Variable	\N	\N	0	8	99999999999999	-99999999999999	Hz		t	2019-11-20 09:55:33.628+08	2019-11-20 09:55:33.628+08	9784b5cb-8a88-4c6a-86c8-51afd961b78d	2	f
462	B	模量系数	Variable	\N		1	16	99999999999999	-99999999999999			t	2019-11-20 09:54:24.137+08	2019-11-20 09:56:06.277+08	9784b5cb-8a88-4c6a-86c8-51afd961b78d	2	f
464	T0	温度初值	Variable	\N		0	2	1000000000000000000000000	-1000000000000000000000000	\N		t	2019-11-21 13:05:24.056+08	2019-11-21 13:05:37.886+08	5997f9c1-c604-4035-ade3-6ed5b18559bb	2	f
465	Kt	温补系数	Variable	\N	\N	0	2	1000000000000000000000	-1000000000000000000000			t	2019-11-21 13:06:21.794+08	2019-11-21 13:06:21.794+08	5997f9c1-c604-4035-ade3-6ed5b18559bb	2	f
466	F0	频率初值	Variable	\N	\N	0	2	100000000000000000000000	-100000000000000000000000			t	2019-11-21 13:06:56.987+08	2019-11-21 13:06:56.987+08	5997f9c1-c604-4035-ade3-6ed5b18559bb	2	f
563	v2_x	初值1	Variable	\N		0	6	9999	-9999	°		t	2020-11-11 15:40:20.216+08	2020-11-17 11:01:07.75+08	c5378a9c-9406-4583-9ae8-5fddb5a5d65e	2	f
564	v2_y	初值2	Variable	\N		0	6	9999	-9999	°		t	2020-11-11 15:40:48.969+08	2020-11-17 11:01:15.733+08	c5378a9c-9406-4583-9ae8-5fddb5a5d65e	2	f
562	cx_thresholdx	位移阈值	Variable	\N		0	6	9999	-9999	mm		t	2020-11-11 15:39:10.412+08	2020-11-17 11:31:14.787+08	bdb43886-e71d-4135-ad42-6e296635b02e	2	f
467	K	系数	Variable	\N	\N	0	2	9999999999999999999999999999	-9999999999999999999999999999			t	2019-11-21 13:07:40.41+08	2019-11-21 13:07:40.41+08	5997f9c1-c604-4035-ade3-6ed5b18559bb	2	f
468	K	系数	Variable	\N	\N	0	6	1000000000000	-1000000000000	\N		t	2020-01-10 17:00:30.812+08	2020-01-10 17:00:30.812+08	93c9ce42-f58d-4b35-83f5-df5f1c06411b	2	f
469	X0	初值X0	Variable	\N	\N	\N	6	1000000000000	-1000000000000			t	2020-01-10 17:02:15.034+08	2020-01-10 17:02:15.034+08	93c9ce42-f58d-4b35-83f5-df5f1c06411b	2	f
470	K	系数K	Variable	\N	\N	1	2	1000000000000	-100000000000	\N		t	2020-01-13 10:33:57.477+08	2020-01-13 10:33:57.477+08	a999457c-b28e-4168-9d60-0db37c72ad23	2	f
471	X0	X0初值	Variable	\N	\N	0	2	100000000000	-100000000000			t	2020-01-13 10:36:32.504+08	2020-01-13 10:36:32.504+08	a999457c-b28e-4168-9d60-0db37c72ad23	2	f
472	K	系数K	Variable	\N	\N	1	2	1000000000000	-1000000000000	\N		t	2020-01-13 10:42:29.981+08	2020-01-13 10:42:29.981+08	c7cc1565-33ee-46fb-ac94-a93f093ddd73	2	f
473	X0	X0初值	Variable	\N	\N	0	2	100000000000	-100000000000			t	2020-01-13 10:43:39.733+08	2020-01-13 10:43:39.733+08	c7cc1565-33ee-46fb-ac94-a93f093ddd73	2	f
474	K	系数K	Variable	\N	\N	1	2	1000000000	-10000000000	\N		t	2020-01-13 10:50:08.166+08	2020-01-13 10:50:08.166+08	0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6	2	f
475	K1	系数K1	Variable	\N	\N	0	2	100000000000	-1000000000000			t	2020-01-13 10:51:21.24+08	2020-01-13 10:51:21.24+08	0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6	2	f
476	X0	初值X0	Variable	\N	\N	0	2	1000000000000	-1000000000000			t	2020-01-13 10:52:20.236+08	2020-01-13 10:52:20.236+08	0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6	2	f
477	Y0	初值Y0	Variable	\N	\N	0	2	10000000000	-100000000000			t	2020-01-13 10:53:02.914+08	2020-01-13 10:53:02.914+08	0e9dfb4b-a83b-4970-91c3-57d3b0ce9ef6	2	f
479	X	温度	Variable	\N	\N	\N	2	99999999	-99999999	\N		t	2020-01-14 15:22:31.462+08	2020-01-14 15:22:31.462+08	5b473f0a-e785-42b1-bbeb-5e3530c41422	2	f
510	dataArea	数据样本区间	Variable	\N		0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9	0				注意格式保持一致	t	2020-01-14 16:35:45.322+08	2020-01-15 10:53:19.374+08	3207c7a3-db9b-40cf-ab1b-6949a3122239	5	f
511	K	系数K	Variable	\N		1	2	1000000000	-1000000000	\N		t	2020-01-15 16:50:34.138+08	2020-01-15 16:50:47.669+08	611dc5c5-fa03-458b-bd65-3e24c593855d	2	f
512	Kt	温补系数Kt	Variable	\N		0	16	1000000	-1000000	\N		t	2020-04-08 16:14:35.174+08	2020-04-08 16:14:46.35+08	9024228a-4e22-47cd-b2b7-2c579649330a	2	f
513	Fo	初始频率Fo	Variable	\N	\N	0	5	100000	-100000	HZ		t	2020-04-08 16:15:40.464+08	2020-04-08 16:15:40.464+08	9024228a-4e22-47cd-b2b7-2c579649330a	2	f
514	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000			t	2020-04-08 16:16:24.283+08	2020-04-08 16:16:24.283+08	9024228a-4e22-47cd-b2b7-2c579649330a	2	f
515	To	初始温度To	Variable	\N	\N	0	3	100	-100	℃		t	2020-04-08 16:17:14.037+08	2020-04-08 16:17:14.037+08	9024228a-4e22-47cd-b2b7-2c579649330a	2	f
516	Kt	温补系数Kt	Variable	\N	\N	0	16	1000000000000	-1000000000000	\N		t	2020-04-08 16:20:05.391+08	2020-04-08 16:20:05.391+08	1af7b597-73ac-4002-b7f9-885ba65dc41d	2	f
517	Fo	初始频率Fo	Variable	\N	\N	0	5	100000	-100000	HZ		t	2020-04-08 16:20:53.302+08	2020-04-08 16:20:53.302+08	1af7b597-73ac-4002-b7f9-885ba65dc41d	2	f
518	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000			t	2020-04-08 16:21:31.08+08	2020-04-08 16:21:31.08+08	1af7b597-73ac-4002-b7f9-885ba65dc41d	2	f
519	To	初始温度To	Variable	\N	\N	0	3	100	-100	℃		t	2020-04-08 16:22:10.181+08	2020-04-08 16:22:10.181+08	1af7b597-73ac-4002-b7f9-885ba65dc41d	2	f
520	Kt	温补系数Kt	Variable	\N	\N	0	16	1000000	-1000000	\N		t	2020-04-08 16:26:03.209+08	2020-04-08 16:26:03.209+08	63e815fd-ec3a-490b-8734-eb91e37ba781	2	f
521	Fo	初始频率Fo	Variable	\N	\N	0	5	100000	-100000	HZ		t	2020-04-08 16:26:50.965+08	2020-04-08 16:26:50.965+08	63e815fd-ec3a-490b-8734-eb91e37ba781	2	f
522	K	模量系数K	Variable	\N	\N	1	16	1000000000	-1000000000			t	2020-04-08 16:27:37.82+08	2020-04-08 16:27:37.82+08	63e815fd-ec3a-490b-8734-eb91e37ba781	2	f
523	To	初始温度To	Variable	\N	\N	0	5	100	-100	℃		t	2020-04-08 16:28:13.577+08	2020-04-08 16:28:13.577+08	63e815fd-ec3a-490b-8734-eb91e37ba781	2	f
524	G	系数	Variable	\N		1	16	999999999999999999	-999999999999999999	\N		t	2020-05-13 11:39:19.538+08	2020-05-13 11:39:40.613+08	8102b4e7-9f04-43f0-a644-5b89c281f52f	2	f
525	R0	初值	Variable	\N	\N	0	2	9999999999999999999999	-9999999999999999999999			t	2020-05-13 11:40:57.195+08	2020-05-13 11:40:57.195+08	8102b4e7-9f04-43f0-a644-5b89c281f52f	2	f
543	B	系数B	Variable	\N	\N	1	16	9999999999999999999999	-999999999999999999999			t	2020-06-18 16:26:35.676+08	2020-06-18 16:26:35.676+08	0f44be27-ca09-4e9c-bd86-10d82e752723	2	f
552	K	模量系数K	Variable	\N	\N	1	19	9999999999999999	-99999999999999			t	2020-08-03 10:09:20.047+08	2020-08-03 10:09:20.047+08	9525b166-34e1-4182-95a9-644a8f98a2d8	2	f
527	K	系数K	Variable	\N		1	16	999999999999999999999	-999999999999999999999			t	2020-06-08 11:10:49.368+08	2020-06-23 11:00:22.324+08	9f84b4f7-7860-47a6-9dc9-f066fb873dff	2	f
553	B	位移计计算修正值	Variable	\N	\N	0	16	9999999999999999999	-99999999999999999999999	mm		t	2020-09-14 10:48:09.15+08	2020-09-14 10:48:09.15+08	9babcc5f-fa86-4544-b1e1-ef6fe80c1a38	2	f
532	K	系数	Variable	\N	\N	1	2	99999999999999999	-999999999999999999	\N		t	2020-06-12 09:48:01.394+08	2020-06-12 09:48:01.394+08	1cb1bdc4-03eb-47f6-bde4-992f0c899269	2	f
533	F0	频率初值	Variable	\N	\N	0	2	9999999999999999999	-999999999999999999999	HZ		t	2020-06-12 09:48:54.121+08	2020-06-12 09:48:54.121+08	1cb1bdc4-03eb-47f6-bde4-992f0c899269	2	f
534	Aj	单根钢筋截面面积	Variable	\N	\N	1	2	99999999999999999	-9999999999999999999	mm²		t	2020-06-15 10:07:52.018+08	2020-06-15 10:07:52.018+08	1cb1bdc4-03eb-47f6-bde4-992f0c899269	2	f
535	Kt	温度补偿系数	Variable	\N	\N	0	16	1000000000000	-1000000000000	\N		t	2020-06-16 13:52:09.927+08	2020-06-16 13:52:09.927+08	c92fb572-f818-488a-a012-e615d38abbf2	2	f
536	K	模量系数	Variable	\N	\N	1	16	10000000000	-10000000000			t	2020-06-16 13:53:22.763+08	2020-06-16 13:53:22.763+08	c92fb572-f818-488a-a012-e615d38abbf2	2	f
537	Fo	初始频率	Variable	\N	\N	0	5	1000000	-1000000	HZ		t	2020-06-16 13:54:00.178+08	2020-06-16 13:54:00.178+08	c92fb572-f818-488a-a012-e615d38abbf2	2	f
538	To	初始温度	Variable	\N	\N	0	3	100	-100			t	2020-06-16 13:54:29.289+08	2020-06-16 13:54:29.289+08	c92fb572-f818-488a-a012-e615d38abbf2	2	f
554	B	位移计算修正值	Variable	\N	\N	0	12	999999999999999	-999999999999999	mm		t	2020-09-15 09:24:51.657+08	2020-09-15 09:24:51.657+08	e74b9abf-dce9-435c-b500-e9060e048fb9	2	f
542	A	常数项A	Variable	\N		0	16	9999999999999999999	-999999999999999999999	\N		t	2020-06-18 16:25:27.481+08	2020-06-18 16:25:48.399+08	0f44be27-ca09-4e9c-bd86-10d82e752723	2	f
526	Fo	频率初值Fo	Variable	\N		0	5	999999999999999999	-999999999999999999	HZ		t	2020-06-08 11:10:11.36+08	2020-06-23 11:00:33.562+08	9f84b4f7-7860-47a6-9dc9-f066fb873dff	2	f
545	F0	频率初值F0	Variable	\N		0	2	9999999999999999	-9999999999999999999	HZ		t	2020-06-29 09:53:29.827+08	2020-06-30 10:46:55.104+08	490563df-dd29-4c58-9546-7a8716222d00	2	f
544	T0	温度初值T0	Variable	\N		0	3	99999999999999	-9999999999999999999	℃		t	2020-06-29 09:51:01.339+08	2020-06-30 10:47:19.031+08	490563df-dd29-4c58-9546-7a8716222d00	2	f
546	K	模量系数K	Variable	\N		1	16	999999999999999999999	-99999999999999999999999			t	2020-06-29 09:54:06.074+08	2020-06-30 10:47:35.582+08	490563df-dd29-4c58-9546-7a8716222d00	2	f
547	Kt	温补系数Kt	Variable	\N		0	16	9999999999999999999	-999999999999999999999			t	2020-06-29 09:54:59.942+08	2020-06-30 10:47:47.895+08	490563df-dd29-4c58-9546-7a8716222d00	2	f
548	Aj	钢筋截面积Aj	Variable	\N	\N	1	2	99999999999999999999999	-9999999999999999999999999	mm²		t	2020-07-01 09:05:43.656+08	2020-07-01 09:05:43.656+08	9f84b4f7-7860-47a6-9dc9-f066fb873dff	2	f
549	Fo	初始频率Fo	Variable	\N	\N	0	3	100000000	-100000000	\N		t	2020-08-03 09:58:16.53+08	2020-08-03 09:58:16.53+08	9525b166-34e1-4182-95a9-644a8f98a2d8	2	f
550	To	初始温度To	Variable	\N	\N	0	3	9999999999999	-99999999999999			t	2020-08-03 10:07:43.042+08	2020-08-03 10:07:43.042+08	9525b166-34e1-4182-95a9-644a8f98a2d8	2	f
551	Kt	温补系数Kt	Variable	\N	\N	1	16	9999999999999999999	-999999999999999999			t	2020-08-03 10:08:24.183+08	2020-08-03 10:08:24.183+08	9525b166-34e1-4182-95a9-644a8f98a2d8	2	f
555	B	位移计算修正值	Variable	\N	\N	0	12	9999999999999999	-99999999999999999	mm		t	2020-09-15 09:26:17+08	2020-09-15 09:26:17+08	bd266924-534e-4f2b-84a9-5e7b7c8f61de	2	f
556	A	系数A	Variable	\N	\N	1	16	9999999999999999999999999	-99999999999999999999999	\N		t	2020-10-13 16:57:59.169+08	2020-10-13 16:57:59.169+08	55b9e150-f78d-4cbd-a353-f99c4df93cb6	2	f
557	Fo	初始频率Fo	Variable	\N	\N	0	3	999999999999999999	-999999999999999999	HZ		t	2020-10-13 16:59:34.425+08	2020-10-13 16:59:34.425+08	55b9e150-f78d-4cbd-a353-f99c4df93cb6	2	f
558	B	系数B	Variable	\N	\N	1	16	999999999999999999999	-999999999999999999999			t	2020-10-13 17:00:22.088+08	2020-10-13 17:00:22.088+08	55b9e150-f78d-4cbd-a353-f99c4df93cb6	2	f
559	cx_v1	x方向角度初值	Variable	\N		0	6	9999	-9999	°		t	2020-11-11 15:35:01.543+08	2020-11-17 11:15:53.256+08	bdb43886-e71d-4135-ad42-6e296635b02e	2	f
561	cx_l	测斜杆间距离长	Variable	\N		0	6	9999	-9999	mm		t	2020-11-11 15:37:02.924+08	2020-11-17 11:15:58.627+08	bdb43886-e71d-4135-ad42-6e296635b02e	2	f
568	f0_wl	初始频率	Variable	\N		0	6	9999	-9999	Hz		t	2020-11-11 15:44:14.907+08	2020-11-17 10:56:12.091+08	d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	2	f
569	h_wl	初始水位值	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:44:34.877+08	2020-11-17 10:56:19.486+08	d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	2	f
593	Fo	初始频率Fo	Variable	\N	\N	0	16	999999999999999999999999999	-99999999999999999999999999999	HZ		t	2020-11-24 11:55:45.039+08	2020-11-24 11:55:45.039+08	057d8b2b-fafc-4937-897d-deff727f1032	2	f
594	K	模量系数K	Variable	\N	\N	1	16	99999999999999999999999999999999	-9999999999999999999999999999999			t	2020-11-24 11:56:43.003+08	2020-11-24 11:56:43.003+08	057d8b2b-fafc-4937-897d-deff727f1032	2	f
595	K	模量系数K	Variable	\N	\N	1	16	9999999999999999999999	-99999999999999999999	\N		t	2020-12-11 16:09:13.154+08	2020-12-11 16:09:13.154+08	41d90649-a6bb-4671-b100-c37a75836437	2	f
565	v2_x_thresholdx	X轴倾斜阈值	Variable	\N		0	6	9999	-9999			t	2020-11-11 15:41:37.707+08	2020-11-17 11:01:33.982+08	c5378a9c-9406-4583-9ae8-5fddb5a5d65e	2	f
560	cx_v2	y方向角度初值	Variable	\N		0	6	9999	-9999	°		t	2020-11-11 15:35:39.126+08	2020-11-17 11:05:55.924+08	bdb43886-e71d-4135-ad42-6e296635b02e	2	f
576	phy_thresholdx	物理量阈值	Variable	\N		0	6	9999	-9999			t	2020-11-16 14:04:32.915+08	2020-11-17 11:32:33.329+08	927f1c11-f9a3-4c84-a565-57ee9245e41f	2	f
566	v2_y_thresholdy	Y轴倾斜阈值	Variable	\N		0	6	9999	-9999			t	2020-11-11 15:42:12.538+08	2020-11-17 16:32:59.216+08	c5378a9c-9406-4583-9ae8-5fddb5a5d65e	2	f
597	Kt	温补系数Kt	Variable	\N	\N	1	16	99999999999999999999999	-99999999999999999999999999			t	2020-12-11 16:10:38.893+08	2020-12-11 16:10:38.893+08	41d90649-a6bb-4671-b100-c37a75836437	2	f
581	v1_x	初值	Variable	\N		0	6	9999	-9999			t	2020-11-16 16:21:00.679+08	2020-11-17 10:45:45.587+08	898c3c4f-ecab-4aa9-9a95-accd00e26193	2	f
582	v1_x_thresholdx	阈值	Variable	\N		0	6	9999	-9999			t	2020-11-16 16:21:34.87+08	2020-11-17 10:45:57.277+08	898c3c4f-ecab-4aa9-9a95-accd00e26193	2	f
577	k	模量系数	Variable	\N		0	6	99999	-99999			t	2020-11-16 14:06:41.158+08	2020-11-17 10:46:16.99+08	927f1c11-f9a3-4c84-a565-57ee9245e41f	2	f
578	f0	频率初值	Variable	\N		0	6	9999	-9999	Hz		t	2020-11-16 14:07:04.754+08	2020-11-17 10:46:26.18+08	927f1c11-f9a3-4c84-a565-57ee9245e41f	2	f
579	kt	温度系数	Variable	\N		0	6	9999	-9999			t	2020-11-16 14:07:40.98+08	2020-11-17 10:46:37.342+08	927f1c11-f9a3-4c84-a565-57ee9245e41f	2	f
580	t0	温度初值	Variable	\N		0	6	9999	-9999	℃		t	2020-11-16 14:08:02.173+08	2020-11-17 10:46:45.812+08	927f1c11-f9a3-4c84-a565-57ee9245e41f	2	f
573	len0	初始长度	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:48:12.497+08	2020-11-17 10:49:30.699+08	68180c88-8643-47ba-815c-90668639e80f	2	f
574	H	初始高	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:48:27.908+08	2020-11-17 10:49:59.398+08	68180c88-8643-47ba-815c-90668639e80f	2	f
575	h_thresholdx	高度阈值	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:48:48.996+08	2020-11-17 10:50:37.138+08	68180c88-8643-47ba-815c-90668639e80f	2	f
571	C0	初值	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:46:45.406+08	2020-11-17 10:51:00.816+08	14c1729f-4851-411d-9828-84fb5b11f593	2	f
604	Fo	频率初值Fo	Variable	\N	\N	0	2	9999999999999999999999999	-9999999999999999999999	HZ		t	2020-12-16 17:17:13.189+08	2020-12-16 17:17:13.189+08	21d229f6-5f74-405a-a06e-1f7dc84dbcb3	2	f
572	c_thresholdx	位移阈值	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:47:08.956+08	2020-11-17 10:51:21.708+08	14c1729f-4851-411d-9828-84fb5b11f593	2	f
567	k_wl	水位模量系数	Variable	\N		0	6	9999	-9999			t	2020-11-11 15:43:51.9+08	2020-11-17 10:54:31.952+08	d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	2	f
570	wl_thresholdx	水位阈值	Variable	\N		0	6	9999	-9999	m		t	2020-11-11 15:45:15.976+08	2020-11-17 10:54:39.517+08	d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a	2	f
596	Fo	频率初值Fo	Variable	\N		0	2	999999999999999999999	-9999999999999999999999	HZ		t	2020-12-11 16:09:53.797+08	2020-12-11 16:11:03.786+08	41d90649-a6bb-4671-b100-c37a75836437	2	f
598	To	温度初值To	Variable	\N	\N	0	2	9999999999999999999	-99999999999999999999	℃		t	2020-12-11 16:13:10.706+08	2020-12-11 16:13:10.706+08	41d90649-a6bb-4671-b100-c37a75836437	2	f
599	K	模量系数K	Variable	\N	\N	1	16	9999999999999999	-9999999999999999	\N		t	2020-12-16 15:55:43.522+08	2020-12-16 15:55:43.522+08	61c4b4b9-028e-4788-8af4-c97e1084d1c8	2	f
600	Fo	频率初值Fo	Variable	\N	\N	0	2	999999999999999999999	-999999999999999999	HZ		t	2020-12-16 15:56:22.245+08	2020-12-16 15:56:22.245+08	61c4b4b9-028e-4788-8af4-c97e1084d1c8	2	f
585	n_thresholdz	阈值3	Variable	\N	\N	0	3	99999	-99999	\N		f	2020-11-20 11:11:49.808+08	2020-11-20 11:11:49.808+08	b545defc-450b-4986-83ef-445423df6f98	2	f
584	n_thresholdy	阈值2	Variable	\N		0	3	9999	-9999			f	2020-11-20 10:29:47.221+08	2020-11-20 11:11:58.853+08	b545defc-450b-4986-83ef-445423df6f98	2	f
583	n_thresholdx	阈值1	Variable	\N		0	3	9999	-9999			f	2020-11-20 10:28:44.006+08	2020-11-20 11:12:09.393+08	b545defc-450b-4986-83ef-445423df6f98	2	f
586	wsd_thresholdx	温度阈值	Variable	\N	\N	0	3	9999	-9999	℃		t	2020-11-20 11:15:10.555+08	2020-11-20 11:15:10.555+08	fae5e233-4034-4ebe-8e7b-0bf35a648ec9	2	f
587	wsd_thresholdy	湿度阈值	Variable	\N	\N	0	6	9999	-9999	%RH		t	2020-11-20 11:15:37.537+08	2020-11-20 11:15:37.537+08	fae5e233-4034-4ebe-8e7b-0bf35a648ec9	2	f
588	B	系数B	Variable	\N	\N	1	16	99999999999999999999999999	-99999999999999999999999	\N		t	2020-11-24 11:50:20.876+08	2020-11-24 11:50:20.876+08	cb006abf-3e22-4ead-830c-5a0a427c4024	2	f
589	Fo	初始频率Fo	Variable	\N	\N	0	3	99999999999999999999999	-9999999999999999999999999	HZ		t	2020-11-24 11:51:30.719+08	2020-11-24 11:51:30.719+08	cb006abf-3e22-4ead-830c-5a0a427c4024	2	f
590	A	系数A	Variable	\N	\N	1	16	9999999999999999999999999999	-999999999999999999999999999			t	2020-11-24 11:52:05.354+08	2020-11-24 11:52:05.354+08	cb006abf-3e22-4ead-830c-5a0a427c4024	2	f
591	Kt	温补系数Kt	Variable	\N	\N	1	16	9999999999999999999999999	-9999999999999999999999999	\N		t	2020-11-24 11:53:35.382+08	2020-11-24 11:53:35.382+08	057d8b2b-fafc-4937-897d-deff727f1032	2	f
592	To	初始温度To	Variable	\N	\N	0	3	9999999999999999999999999999	-99999999999999999999999999999999	℃		t	2020-11-24 11:54:41.665+08	2020-11-24 11:54:41.665+08	057d8b2b-fafc-4937-897d-deff727f1032	2	f
602	To	温度初值To	Variable	\N	\N	0	2	999999999999999999999	-99999999999999999999			t	2020-12-16 16:10:39.625+08	2020-12-16 16:10:39.625+08	61c4b4b9-028e-4788-8af4-c97e1084d1c8	2	f
603	K	模量系数	Variable	\N	\N	1	16	999999999999999999999	-99999999999999999999	\N		t	2020-12-16 17:15:35.958+08	2020-12-16 17:15:35.958+08	21d229f6-5f74-405a-a06e-1f7dc84dbcb3	2	f
606	To	温度初值To	Variable	\N	\N	0	2	999999999999999999999	-99999999999999999999	℃		t	2020-12-16 17:18:39.334+08	2020-12-16 17:18:39.334+08	21d229f6-5f74-405a-a06e-1f7dc84dbcb3	2	f
605	Kt	温补系数Kt	Variable	\N		0	16	999999999999999999999999	-99999999999999999999			t	2020-12-16 17:17:56.369+08	2020-12-17 08:45:03.216+08	21d229f6-5f74-405a-a06e-1f7dc84dbcb3	2	f
601	Kt	温补系数Kt	Variable	\N		0	2	999999999999999999999	-9999999999999999999			t	2020-12-16 15:58:11.602+08	2020-12-17 08:45:18.083+08	61c4b4b9-028e-4788-8af4-c97e1084d1c8	2	f
607	K	系数K	Variable	\N	\N	1	2	999999999999999999	-99999999999999999999	\N		t	2021-01-15 13:11:54.131+08	2021-01-15 13:11:54.131+08	d3c03d95-0625-44e5-a097-d371daa46150	2	f
608	n_thresholdx	阈值	Variable	\N		0	6	9999	-9999	\N		t	2021-01-18 09:56:29.359+08	2021-01-18 09:58:19.682+08	ed141cf4-ca2c-49a1-9704-afee24dc9c71	2	f
\.


--
-- Name: FormulaProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."FormulaProperty_id_seq"', 608, true);


--
-- Data for Name: InterfaceMeta; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."InterfaceMeta" (id, name, "createBy", "belongTo", investor, public, image, "desc", "createdAt", "updatedAt", "interfaceTypeId") FROM stdin;
54d9b5fc-1253-41af-80d2-b6bef8f04add	jabez	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	2f7acedd-a1ed-4f90-9cf5-fef0898cff9b	f	\N	测试使用	2017-10-07 20:46:59.918+08	2017-10-07 20:46:59.918+08	1
85384f06-e14c-4c28-a9e4-9ad955eb1eae	123	0bfe3624-2257-4e6b-821c-4065675cdd6e	0bfe3624-2257-4e6b-821c-4065675cdd6e	0bfe3624-2257-4e6b-821c-4065675cdd6e	f	\N	23123	2017-10-26 23:10:34.147+08	2017-10-26 23:10:34.147+08	2
e4049f35-3902-4610-ac6e-45c01236a230	ST_DT	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	\N		2018-09-07 09:14:23.379+08	2018-09-07 09:14:23.379+08	0
10ee8413-1dfd-465b-9dfe-fc1a496a7fa5	JK_NJSY	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	f	\N		2018-09-13 16:59:13.676+08	2018-09-13 16:59:13.676+08	0
b2d60094-05d4-473d-a62d-e1cd0ebd557b	213	e803485f-247f-4792-8d98-37b9a2a70d2e	e803485f-247f-4792-8d98-37b9a2a70d2e	e803485f-247f-4792-8d98-37b9a2a70d2e	f	\N		2018-01-25 16:18:55.058+08	2018-01-25 16:18:55.058+08	2
6c047530-0656-4cb4-a416-f4ac00b015f9	channel_Interface	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f	\N	模块-通道-节点	2018-10-10 11:20:39.654+08	2018-10-10 11:23:15.442+08	0
39356c21-ccbc-496f-b760-0eab61591c6a	串口-接口1	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	f	\N		2018-02-13 16:51:59.753+08	2018-02-13 16:51:59.753+08	1
23b5d4f7-5be8-4e28-99a6-e797eaedb08a	zdyMC	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	f	\N		2018-11-01 07:25:16.943+08	2018-11-01 07:25:16.943+08	0
7273694e-484e-4f59-b7d6-03032fb343bb	HTTP	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	f	\N		2018-11-12 16:43:01.771+08	2018-11-12 16:43:01.771+08	5
2b9a7428-49ab-4479-9487-539b6cf56fe0	FS-TCP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-12-15 11:40:13.892+08	2018-12-15 11:40:13.892+08	10
2b457429-02d8-4034-bf6b-a771ff578d64	千寻	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2017-12-14 14:42:58.774+08	2017-12-14 14:42:58.774+08	5
a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7	MQTT	6aecaca4-ae30-42e7-9963-28713a74a311	6aecaca4-ae30-42e7-9963-28713a74a311	6aecaca4-ae30-42e7-9963-28713a74a311	f	\N		2017-12-20 15:31:35.405+08	2017-12-20 15:32:04.473+08	6
39d0ef2f-4785-4747-92ef-7a261b609e9e	213	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	f	\N		2018-01-02 15:10:57.307+08	2018-01-02 15:10:57.307+08	1
9c90124d-0230-4da1-be95-61ec1f25cd7a	getCurrentConnNum	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	\N	获取tomcat当前连接数	2018-01-09 10:02:15.006+08	2018-01-09 10:02:15.006+08	5
06b0f2ee-1759-4e35-9c6f-724c06a28838	12	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	f	\N		2018-01-12 14:10:12.229+08	2018-01-12 14:10:12.229+08	1
d48b4ddb-8b95-492c-abaf-339f6696c099	2323324	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	f	\N		2018-01-16 10:54:07.132+08	2018-01-16 10:54:07.132+08	2
80284583-ddc4-4364-8399-b49e3289bbf3	的大神多	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	f	http://images.theiota.cn/upload/meta_interfaces/eb5a59f3-6098-4024-a27a-0b795cf9834f/66e5d290-b631-46cb-83c5-eb824834a732/interface.png		2018-01-22 10:04:54.939+08	2018-01-22 10:04:54.939+08	1
aa2a4177-ec0f-4375-aa7b-755461cfb402	我的接口	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	f	\N	串口协议	2017-08-31 14:58:07.949+08	2017-08-31 14:58:07.949+08	1
5ef40d3b-0094-45fb-9663-892c5c4e270d	httpGet	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	f	\N	get	2018-06-13 16:54:09.21+08	2018-06-13 16:54:09.21+08	5
1490fd95-7804-4e0f-9afa-bdbe7bb7880f	ZigBee	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2018-03-07 14:48:51.796+08	2018-03-07 14:48:51.796+08	8
bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	BNC	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-03-07 17:44:47.674+08	2018-03-07 17:44:47.674+08	0
118383e6-1b61-4e15-8dee-a1a2a61b531e	MP_ZX	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	微功耗振弦	2018-07-17 16:27:01.296+08	2018-07-17 16:27:01.296+08	8
816805e0-09d0-45d0-866f-b305bcb16111	DSC_SoIP	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	\N		2018-03-19 17:05:41.286+08	2018-03-19 17:05:41.286+08	4
3dfadb0e-7608-49e1-aa43-24f7442b424a	SoIP	-1	-1	-1	t	\N	DTU, Serial Over IP.	2017-08-12 17:25:44.531+08	2017-09-27 15:44:51.416+08	4
9a1540b6-fea8-4bc0-8090-296b05f87c4a	RS485	-1	-1	-1	t	\N	远端串口 RS485, RS232, RS422 等.  通常用作采集仪到传感器链接.	2017-08-12 17:24:45.49+08	2017-09-27 15:44:16.88+08	1
ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5	CLAA_MSP	-1	-1	-1	t	\N	CLAA联盟 MSP协议	2017-08-28 19:11:53.519+08	2017-08-28 19:11:53.519+08	3
ad4f23f8-9213-4194-97ce-209a34596649	Extract	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	\N	提取方式接入	2018-03-23 14:58:59.394+08	2018-03-23 14:58:59.394+08	0
cb26d851-bb8b-4390-9d70-75c74bef520a	CV_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	云振动使用	2018-04-08 23:15:31.236+08	2018-04-08 23:16:28.131+08	4
d357249e-6ccf-4d1b-8546-c57c18fa121c	温湿度传感器	cb3f6958-fdbf-441d-8009-1fb1ecc61589	cb3f6958-fdbf-441d-8009-1fb1ecc61589	cb3f6958-fdbf-441d-8009-1fb1ecc61589	f	\N		2018-04-24 15:22:29.333+08	2018-04-24 15:22:29.333+08	0
2c95c010-e14a-4284-89d5-a69fc7f2ed37	yToC	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	\N	云盒to采集仪	2018-08-09 16:12:18.153+08	2018-08-09 16:12:18.153+08	0
d0ad76ed-4f11-4355-b876-7f1b04037ae1	ST_zigbee	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	\N	数泰lora网关专用	2018-08-01 16:04:02.014+08	2018-08-01 16:11:23.936+08	2
4b408fb8-a08f-429b-bbc4-003881a2a4e7	大大大	93ffff70-11c1-46a9-8810-612bd42172e2	93ffff70-11c1-46a9-8810-612bd42172e2	93ffff70-11c1-46a9-8810-612bd42172e2	f	\N	嗯嗯	2018-08-30 14:15:27.964+08	2018-08-30 14:15:42.197+08	5
63ebea66-1c0a-4206-a0b2-f86cb623f3ae	wer	9469e349-5aa8-47fb-9d89-104f812285f5	9469e349-5aa8-47fb-9d89-104f812285f5	f51431a2-91b0-40d9-97a3-0d622b0203c8	f	\N	rere	2017-10-23 09:42:53.518+08	2017-10-23 09:42:53.518+08	3
8280ccac-494e-4784-bd0c-5ffe97746993	kafka	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-08-17 11:34:51.601+08	2018-09-21 18:23:51.713+08	7
439492bf-c1cd-4269-8f04-4ee1f3abd6dc	1	1566c2b1-7bc6-4163-8bfa-b245bf0fbc19	1566c2b1-7bc6-4163-8bfa-b245bf0fbc19	1566c2b1-7bc6-4163-8bfa-b245bf0fbc19	f	\N	1	2017-11-03 13:18:14.298+08	2017-11-03 13:18:14.298+08	4
c3feea31-4449-46fb-a1dc-2214d73c3935	Kafka	fc6bae74-2409-47c4-8374-d3673978188a	fc6bae74-2409-47c4-8374-d3673978188a	fc6bae74-2409-47c4-8374-d3673978188a	f	\N		2017-11-30 14:59:42.166+08	2017-11-30 14:59:42.166+08	7
63617b14-934a-4d23-8a95-6a76229fbb74	tesp	b4b66b83-22ea-46ef-848b-967e90043cd0	b4b66b83-22ea-46ef-848b-967e90043cd0	b4b66b83-22ea-46ef-848b-967e90043cd0	f	http://images.theiota.cn/upload/meta_interfaces/upload_ba315e764af518d2c5c185415a507c97.png	test	2017-10-16 09:35:09.115+08	2017-10-16 09:35:09.115+08	2
3ee5b7e3-e7ba-49ff-86eb-2d6498f67116	fire	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	f	\N		2018-01-03 22:54:44.797+08	2018-01-03 22:55:42.931+08	5
1ee846c7-db72-4961-b363-20c629cd5d22	interface	00445c3c-5766-4cb1-af8a-9aa4310d83ca	00445c3c-5766-4cb1-af8a-9aa4310d83ca	00445c3c-5766-4cb1-af8a-9aa4310d83ca	f	\N		2017-09-05 16:33:11.317+08	2017-09-05 16:33:11.317+08	3
c96530d8-c5e2-4acd-a7fa-450e15e27ddb	123	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f	\N	113	2017-09-06 10:36:39.305+08	2017-09-06 10:36:39.305+08	1
74e413a0-dd33-474d-bd1f-b7f71885dff3	getTotalConnNum	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	\N	获取tomcat总连接数	2018-01-09 10:37:11.288+08	2018-01-09 10:37:11.288+08	5
15d1322a-50a2-47ac-8926-33717df4c695	333	87067dc2-128a-48be-8257-a93c40c00140	87067dc2-128a-48be-8257-a93c40c00140	87067dc2-128a-48be-8257-a93c40c00140	f	\N		2018-01-13 14:07:19.792+08	2018-01-13 14:07:19.792+08	3
0af1af55-38cd-43c1-abe3-b71570342d40	node_interface	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f	\N	模块-通道-节点	2018-10-10 11:22:51.149+08	2018-10-10 11:23:10.401+08	0
93f2d601-f46f-4361-ae92-431401bd869d	13	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	f	\N		2018-01-16 11:14:26.759+08	2018-01-16 11:14:26.759+08	2
2d974b4e-c841-430c-8cbf-c92f7d6a890d	97	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	f	\N	97协议	2018-01-24 14:19:28.757+08	2018-01-24 14:19:28.757+08	1
5cc45782-5d73-4354-b2c1-4904e284c95b	FS_toilet_Interface	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-10-26 16:33:28.045+08	2018-10-26 16:33:28.045+08	0
8835d3fd-b82b-4de9-bd9f-a67f40a210fc	http--server	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-11-13 13:35:18.438+08	2018-11-13 13:35:18.438+08	11
8774b4f0-60c1-4c7d-940b-f3a847c2847a	LORA_485	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-11-22 15:31:34.121+08	2018-11-22 17:32:40.598+08	1
9f5c85e4-df62-4b17-bab9-92e5e1a419dc	12	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	f	\N	4	2018-01-30 10:31:59.617+08	2018-01-30 10:31:59.617+08	4
cdfe913f-9ff0-4801-b162-a5c3434e9630	2324	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	7a616e3e-fa02-4954-983f-947f27c4ffd5	f	\N		2018-02-27 11:11:48.694+08	2018-02-27 11:11:48.694+08	5
12cbda5e-cdad-4e5e-91b8-4489f816f00d	SZYK485	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	f	\N	三智盈科485采集仪接口	2018-12-20 14:54:02.049+08	2018-12-20 14:57:02.154+08	0
f5115163-46ca-4e11-ac6e-d1be363871d1	111	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f	\N	2	2018-03-28 15:38:46.02+08	2018-03-28 15:38:46.02+08	1
dfe5a4c0-1a35-48a4-9b20-e8c348a51f12	zigbee	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-03-07 14:55:17.477+08	2018-03-07 14:55:17.477+08	2
0e98e5cb-6e50-4d85-940b-b538ce71dc14	test	2d6cc626-0499-4724-8803-602deb42bcb4	2d6cc626-0499-4724-8803-602deb42bcb4	2d6cc626-0499-4724-8803-602deb42bcb4	f	\N		2018-04-27 16:04:31.651+08	2018-04-27 16:04:31.651+08	5
0a80b74d-7acc-45c9-a06f-380d7d613626	DSC_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	云采集链接	2018-03-08 18:11:49.887+08	2018-03-08 18:25:24.733+08	4
d4f271b6-567a-4880-beb0-161b33ac2094	Node_RS485	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N	节点485接口	2018-03-15 11:39:21.652+08	2018-03-15 11:39:21.652+08	1
6619c155-5a30-4c92-b738-816302f0c4ed	tcp	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-06-15 17:06:35.817+08	2018-06-15 17:06:35.817+08	10
936f5813-db0d-4a2a-a7bc-8d323024140b	MP_ZD	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2019-03-15 15:38:31.034+08	2019-03-15 15:38:31.034+08	0
ca45c7c2-42df-48cc-849c-c4cd01067e5d	http	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	\N		2018-06-19 09:46:21.958+08	2018-06-19 09:46:21.958+08	5
4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	MP_ZD	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	微功耗振动	2018-07-17 16:30:52.475+08	2018-07-17 16:30:52.475+08	0
71458c57-c197-4b3c-9171-2cdc5658201e	HTTP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-07-26 16:30:09.798+08	2018-07-28 17:22:31.073+08	5
c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1	ST_Node_ZX	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	\N	振弦	2018-08-01 16:18:08.699+08	2018-08-06 10:37:18.651+08	8
6f8504db-8b86-4b33-a0c6-721249b63f46	cToS	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	\N	采集仪to传感器	2018-08-09 16:15:32.341+08	2018-08-09 16:15:32.341+08	0
8396ee22-73b6-4375-a8be-854a047aecbf	BA_EXTRACT	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	f	\N		2018-08-16 10:18:38.567+08	2018-08-16 10:18:38.567+08	0
9aece67a-050e-41a4-9b7d-7d890212f385	BA_GDGS	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	f	\N		2018-08-16 10:57:12.787+08	2018-08-16 10:57:12.787+08	0
96b665c2-5314-4144-83d3-7db169ef9416	MQTT	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-08-17 11:20:48.296+08	2018-08-17 11:20:48.296+08	6
66537b16-1e7d-4823-b03e-676459f5891d	HTTP_SERVER	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	t	\N		2018-10-29 16:03:01.632+08	2018-10-29 16:03:01.632+08	11
1aa841f1-d3fb-4523-9b54-e601d350c745	LORA_ZX	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-11-22 17:39:33.526+08	2018-11-22 17:39:33.526+08	1
c00008f7-06d9-4907-b2e7-619374116b36	FS-Extract	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-12-21 16:53:27.318+08	2018-12-21 16:53:27.318+08	0
a8f77633-9fe3-4228-b557-34a9108b3d50	JD_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-12-26 11:45:10.035+08	2018-12-26 11:45:10.035+08	4
c6167a22-bb4f-4353-8ea1-5653c69e926b	abc-SoIP	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2017-09-25 09:41:13.862+08	2017-10-31 17:57:57.319+08	4
68ec42c1-c421-4294-8dc4-107dc7905cee	abc-Serial	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2017-09-25 09:41:57.62+08	2017-10-31 18:15:07.701+08	1
0f0c11cf-71ae-4bba-b9ba-95442f1fb714	Invented_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-12-27 15:23:24.821+08	2018-12-27 15:23:34.84+08	4
cf3cc1ef-8614-4d32-ba45-2ac5d387379b	我的接口	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	\N	也一样	2018-01-05 17:10:01.279+08	2018-01-05 17:10:01.279+08	5
c7a17601-0a46-4901-889f-ce98a95731be	123	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	f	\N	asdasd	2018-01-19 17:05:47.161+08	2018-01-19 17:05:47.161+08	2
be9d7f9a-cbe9-4033-b6b8-8920bd29fdbd	http_czjtm	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	f	\N		2019-03-15 11:43:17.738+08	2019-03-15 11:43:17.738+08	5
d9e8186c-3346-431a-8577-b7b7ea1d0798	myInterface	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	f	\N	我的接口	2018-03-01 11:59:16.527+08	2018-03-01 11:59:16.527+08	3
8cc1433a-4b40-4671-ba91-e0ddd2e7c13c	AnalogSignal	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	t	\N	非RS485/RS232/RS422 传输信号，用作采集仪到传感器链接.	2018-03-06 15:43:29.713+08	2018-03-06 15:43:29.713+08	0
7697235e-a619-4da5-ac6e-9a76a6e59a78	zigbee	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-03-08 18:15:49.999+08	2018-03-08 18:15:49.999+08	2
d0e8f529-c1bf-4146-beef-cd3056ea9787	Node_ZX	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-03-08 18:35:08.398+08	2018-03-08 18:35:08.398+08	8
d07a1774-312c-4497-adbb-6e3da9410cb6	zigbee	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N	zigbee	2018-03-15 11:44:17.783+08	2018-03-15 11:44:17.783+08	2
c8eeed37-ec79-49a9-b3d8-68b7343e0334	sd	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	f	\N		2018-04-05 19:54:14.328+08	2018-05-28 17:33:12.841+08	1
452e3349-a87b-4b5b-97f9-7dc730f910fa	RAW_TCP_CLIENT	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2018-06-15 17:08:09.972+08	2018-06-15 17:08:09.972+08	10
73c3b65f-2eb1-4465-9ead-47e699326a86	测试	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	f	\N	测试	2017-09-19 16:19:02.933+08	2017-09-19 16:19:02.933+08	1
2d8a5feb-5c4a-49f1-b5cd-3770f2b8e090	Matt	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	da122b7a-a86b-4e04-8e43-4a5b4978c8a4	f	\N		2019-03-07 11:34:21.712+08	2019-03-07 11:34:21.712+08	0
15b373b0-30f8-471e-8900-cb62e28d0e50	MP_485_YC	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	微功耗扬尘485	2019-01-21 11:43:37.872+08	2019-03-14 09:39:50.619+08	1
b425fff8-940f-467d-81f7-b456d8ad0b22	anxin_485_CX	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	\N		2019-03-19 15:14:16.566+08	2019-03-19 15:15:58.809+08	1
592592f9-ffc9-4ba5-b330-8dd7597524e1	lyzhu	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N	test	2019-03-21 18:19:56.877+08	2019-03-21 18:19:56.877+08	2
639a37c9-637b-46e7-97ac-7b5991155e02	MQTT	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	\N		2018-06-25 16:37:11.215+08	2018-06-25 16:37:11.215+08	6
c3c19462-3221-4cca-8288-13f960d7ea5b	zx_channel_Interface	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f	\N		2019-03-25 11:13:15.32+08	2019-03-25 11:13:15.32+08	0
68238334-fea4-4bc0-b1cd-98456c41faab	PLC_485	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	f	\N		2019-03-27 10:01:32.066+08	2019-03-27 10:01:32.066+08	0
7c5f8c54-870d-46fb-97fd-ffdf565e7e7e	http	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	\N		2018-07-23 15:15:47.478+08	2018-07-23 15:15:47.478+08	5
7fd05290-f814-4049-812f-b8c7865ec221	http	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2018-07-27 17:05:12.19+08	2018-07-27 17:05:12.19+08	5
876d87b1-cccb-4847-80ea-dabfc20a2175	ST_Node_485	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	\N		2018-08-03 07:25:48.249+08	2018-08-03 07:25:48.249+08	0
3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5	zigbee	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	f	\N		2018-08-14 16:17:09.853+08	2018-08-14 16:17:09.853+08	2
dce5b87f-bf0a-4a14-adcc-4573035bdad9	ipjk	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	\N		2018-08-22 10:04:16.751+08	2018-08-22 10:04:16.751+08	4
b3cb9990-288c-4f0d-a91a-547254d1d9c6	LK_node	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	f	\N		2019-04-08 10:58:08.39+08	2019-04-08 10:58:08.39+08	0
7bc18b0f-46d5-403a-893a-029eed333a46	SDGS_WJ	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	f	\N	json格式文件解析	2019-04-23 14:58:50.836+08	2019-04-23 15:03:55.417+08	0
89b76f5e-c6dd-46db-a92f-a3335aeafa86	测试接口	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2019-04-26 12:50:20.116+08	2019-04-26 12:50:20.116+08	4
66a06e5d-a436-4d37-806b-919d8fd1c564	MP_RS485	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2019-03-15 15:52:20.885+08	2020-09-29 10:13:20.022+08	1
c60b6244-e9f6-467c-93f9-48bcc4c54f56	test-接口	32fed51e-ebe8-4cbe-978d-9e018288d245	32fed51e-ebe8-4cbe-978d-9e018288d245	32fed51e-ebe8-4cbe-978d-9e018288d245	f	\N	test	2018-11-23 14:41:37.244+08	2018-11-23 14:41:37.244+08	5
43f97047-356c-41ba-aa38-ded0990a78cd	测试一	8a1e474f-1a95-4805-9c0c-7cf89f71cd43	8a1e474f-1a95-4805-9c0c-7cf89f71cd43	8a1e474f-1a95-4805-9c0c-7cf89f71cd43	f	\N		2017-10-31 16:09:37.715+08	2017-10-31 16:09:37.715+08	2
31f274cf-4345-4b4e-adbc-e7b05abf7453	HttpPost	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f	\N	千寻	2017-12-13 13:53:29.263+08	2017-12-13 13:53:29.263+08	5
fcfced24-ec69-4898-b965-a6fcc3fda47c	snmp	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	\N	snmp数据采集	2018-01-08 09:36:33.312+08	2018-01-08 09:36:33.312+08	6
0656e39e-ad05-4573-8a05-3c6f5dd01785	tt	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	\N		2018-01-08 11:56:14.206+08	2018-01-08 11:56:14.206+08	1
c6ca8894-3a00-4e68-9a8b-c55673bafd0b	我的接口A	00cf911c-3531-4665-a358-3d31d36f0bdd	00cf911c-3531-4665-a358-3d31d36f0bdd	00cf911c-3531-4665-a358-3d31d36f0bdd	f	\N		2018-01-09 21:39:41.647+08	2018-01-09 21:39:41.647+08	5
6c0898f5-e8da-495b-8718-6efba367e3f1	Node_485_KQ	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	自研空气	2018-12-28 10:03:38.306+08	2018-12-28 10:03:38.306+08	1
6f9486b4-6b22-4fbd-a73a-9334e711badb	MP_SoIP	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2019-03-15 15:08:46.736+08	2019-03-15 15:08:46.736+08	4
3d88a29a-ca10-482f-8643-4fd39d4b50e2	新建接口01	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f	\N	A设备接口01	2018-01-22 10:14:49.231+08	2018-01-26 17:37:16.439+08	5
34ab0b66-1ce3-4462-ad0c-520d349ca04c	HttpGet	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	GNSS	2018-03-05 11:57:23.531+08	2018-03-05 11:57:40.215+08	5
250ec8dc-2cd2-4056-88f4-863278485bba	我	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f	\N		2018-03-07 11:51:57.332+08	2018-03-07 11:51:57.332+08	0
7667c2d9-3c04-4818-bfeb-42f43b60af77	Node_RS485	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	节点485接口	2018-03-08 18:24:07.559+08	2018-03-08 18:25:41.741+08	1
d5f2066b-b4d8-4e26-8991-0c068495e2c9	Node_ZX	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N	振弦	2018-03-15 11:50:29.306+08	2018-03-15 11:50:29.306+08	8
ca2e74c9-b28e-4826-b922-074f4f657e51	爱的色放	7584d654-5057-429f-bb89-a73446d572ee	7584d654-5057-429f-bb89-a73446d572ee	7584d654-5057-429f-bb89-a73446d572ee	f	http://images.theiota.cn/upload/meta_interfaces/7584d654-5057-429f-bb89-a73446d572ee/03cdc461-a919-44a8-b2cf-2c88a321fa26/interface.png	安师大发水电费	2018-04-06 12:23:30.464+08	2018-04-06 12:23:30.464+08	1
ac94d09e-3893-4f3d-b42b-0825be96e0c7	anxinlin	82999c5b-1550-42e6-82fb-054c97191ff7	82999c5b-1550-42e6-82fb-054c97191ff7	82999c5b-1550-42e6-82fb-054c97191ff7	f	\N		2019-03-19 16:42:30.258+08	2019-03-19 16:42:30.258+08	1
0d963823-0c01-40c1-acc4-74d4eaaea996	zx_node_interface	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f	\N		2019-03-25 11:14:17.031+08	2019-03-25 11:14:17.031+08	0
7b7c851b-8c01-4489-a3c7-fd2229f719a8	tcp	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	\N		2018-07-23 15:22:03.062+08	2018-07-23 15:22:03.062+08	10
4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	MP_RS485	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	微功耗485	2018-07-17 16:26:08.547+08	2018-07-23 16:20:17.457+08	1
6eeb1913-71e2-40b2-ae39-c8750cbdefd7	MP_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-07-31 16:38:16.98+08	2018-07-31 16:38:16.98+08	4
c5aa9f80-57da-45d4-972d-a9dee4854ab6	p	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f	\N		2018-08-09 08:29:44.442+08	2018-08-09 08:29:44.442+08	1
9359f4a8-67a2-4354-b5e6-e7473d0a5268	http	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	\N		2018-08-17 11:15:21.718+08	2018-08-17 11:15:21.718+08	5
30e6dca7-ede5-48be-9952-9fb056b2e9d1	ZigBee_sx	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2018-08-28 17:41:58.157+08	2018-08-28 17:41:58.157+08	2
115dada1-714c-496e-b060-455f1ab2510c	test	59f58657-7323-439f-b89d-f725bac557c6	59f58657-7323-439f-b89d-f725bac557c6	59f58657-7323-439f-b89d-f725bac557c6	f	\N		2019-04-29 11:24:33.365+08	2019-04-29 11:24:33.365+08	10
da330369-58e7-4bce-8bc1-3c0a062dd1a0	EdgeMQTT	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	f	\N		2019-08-09 13:13:09.809+08	2019-08-09 13:13:09.809+08	12
971ef4ab-bbb7-41e2-a5a1-0111b3a9de99	SOIL_DT	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	\N		2019-04-29 15:00:42.315+08	2019-04-29 16:02:53.566+08	0
3f912f2c-18f1-4563-9043-dc271141fc55	HTTP_C	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2019-05-07 09:15:09.372+08	2019-05-07 09:15:09.372+08	5
78fdd0b8-8d18-43a4-bd10-58ceee295bcc	ZigMqtt	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	\N		2019-05-15 20:54:22.73+08	2019-05-15 20:54:22.73+08	6
c41d198c-435b-4551-ae66-b74be2c022d6	Zigbee Up	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2019-07-06 16:46:25.424+08	2019-07-06 16:46:25.424+08	2
f3eee31e-d2c2-481e-9d6a-93cd469e4c63	Zigbee Down	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2019-07-06 16:46:39.475+08	2019-07-06 16:46:39.475+08	2
27a58884-75a3-4f5d-94f6-37cc15d419fb	iOTA MQTT	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2019-07-06 16:47:26.269+08	2019-07-06 16:47:26.269+08	12
f03c622c-30e7-47a4-a0de-cd681dc2fe61	TST_EXTRACT	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	f	\N		2019-08-05 17:44:12.651+08	2019-08-05 17:44:12.651+08	0
efc73d5c-867e-4feb-82f6-2c5afb8c432f	EdgeZigbee	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	e199a753-2b5e-4d34-bd12-d76c9afe47d3	f	\N		2019-08-09 13:13:44.079+08	2019-08-09 13:13:44.079+08	2
6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	BNCy	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2019-08-22 10:56:35.714+08	2019-08-22 10:56:35.714+08	0
5afb303e-0963-4e23-91f7-2b41f543aaf6	MP_ZX	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2019-08-22 11:13:19.246+08	2019-08-22 11:25:08.736+08	8
e498b9c2-546f-4bba-9ab6-0c575a49d452	HTTPGET	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	\N	访问电信nb平台	2019-09-12 16:29:41.76+08	2019-09-12 16:29:41.76+08	5
0919de6f-bf9e-4ef6-85b4-108fee899605	qqqq	269c619d-0aad-4523-a770-9b2f752ed30e	269c619d-0aad-4523-a770-9b2f752ed30e	269c619d-0aad-4523-a770-9b2f752ed30e	f	\N		2019-09-24 11:32:56.592+08	2019-09-24 11:33:04.659+08	0
4714efc4-d103-4619-9895-28e67d9100e2	BNC	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2019-10-24 11:15:20.43+08	2019-10-24 11:15:20.43+08	0
5eab665d-75fe-4658-b16d-34afdf4ee62e	DCS-MQTT	82f7ebbe-0138-4ac5-85ae-d607f60b7236	82f7ebbe-0138-4ac5-85ae-d607f60b7236	82f7ebbe-0138-4ac5-85ae-d607f60b7236	f	\N		2020-03-20 10:50:47.722+08	2020-03-20 10:50:47.722+08	6
6361ba5f-8588-4685-a107-b692e3592f17	FS_LDJK	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	路灯接口	2019-10-09 14:28:05.477+08	2019-10-28 14:26:13.585+08	0
c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	http_test	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	\N	测试http协议	2019-10-29 09:30:10.251+08	2019-10-29 09:30:10.251+08	5
04248d51-0631-4712-8245-b937e6be8f49	temp_stress	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	\N		2019-10-30 15:31:08.732+08	2019-10-30 15:31:08.732+08	4
5b75847d-a266-40ea-99f3-23cb45d9e576	mcu_test	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	\N		2019-11-01 11:29:43.769+08	2019-11-01 11:29:43.769+08	0
8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	MP_ZD	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2019-11-08 16:53:36.575+08	2019-11-08 16:53:36.575+08	0
0be63da7-6ab6-4d1f-830d-dd32add170c6	MP_SoIP	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2019-11-08 17:09:08.856+08	2019-11-08 17:09:08.856+08	4
451db320-593b-4777-9848-9d778427dea5	Node_ZX	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2020-04-08 14:07:36.631+08	2020-04-08 14:07:36.631+08	8
0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61	LORA_ZX	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2020-04-08 15:28:30.907+08	2020-04-08 15:28:30.907+08	1
25642488-1945-4865-81e7-e9593c12d208	MP_ZXy	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N	复制的工训	2019-11-08 16:22:31.161+08	2019-11-15 14:26:50.459+08	8
919c20e0-674f-4a48-802d-9e63d6551a9a	FS-LFXX-Z	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2019-12-05 15:43:36.894+08	2019-12-05 15:43:36.894+08	4
e88f4b90-93c9-4a17-b425-b118ce4f4695	MQTT	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2019-12-20 09:49:45.674+08	2019-12-20 09:49:45.674+08	6
c1b7ebc4-5a06-40c2-a231-f3fa95094a26	RTU_485	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2019-12-24 14:34:31.859+08	2019-12-24 14:34:31.859+08	1
6e48d81c-5e9a-4e94-95b8-5e03d0823466	MP_ZXy	7883c07e-5754-4740-b90b-836def9cb38e	7883c07e-5754-4740-b90b-836def9cb38e	7883c07e-5754-4740-b90b-836def9cb38e	f	\N	复制的江西一芯的	2020-01-06 10:48:36.589+08	2020-01-06 10:48:36.589+08	8
3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	MQTT	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	\N		2020-03-18 11:21:45.292+08	2020-03-18 11:21:45.292+08	6
e4809d13-f016-47b0-8f2d-129502794def	MQTT对接	d41427b1-5907-4063-88c6-422f4f478d1f	d41427b1-5907-4063-88c6-422f4f478d1f	d41427b1-5907-4063-88c6-422f4f478d1f	f	\N		2020-03-20 10:57:55.191+08	2020-03-20 10:57:55.191+08	6
640f3d57-3789-4fc9-a69b-6175b4d3e384	MP_485_RZ370	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	\N		2020-03-27 16:45:06.712+08	2020-03-27 16:45:06.712+08	1
80b06599-206f-411a-8965-2b4ccb6a3d59	http	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2020-04-02 15:19:09.284+08	2020-04-02 15:19:09.284+08	5
2dd0e24e-8f6a-4171-8657-493de66868bd	LORA_485	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2020-04-03 17:05:26.38+08	2020-04-03 17:05:26.38+08	1
e65d6dc4-b239-4755-b83e-af11fa23fb70	Node_RS485	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N	节点485接口	2020-04-03 17:14:23.095+08	2020-04-03 17:14:23.095+08	1
836f48be-3271-48ce-9df0-d8c9f35d9d35	MP_SoIP	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N		2020-04-09 14:50:04.933+08	2020-04-09 14:50:04.933+08	4
922031d2-ebc0-4fb4-a21a-0bbd78a09b80	MP_ZD	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N		2020-04-09 14:57:30.856+08	2020-04-09 14:57:30.856+08	0
74596cc6-9b6c-4386-8915-dd275e4dd101	MP_RS485	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N		2020-04-09 15:21:22.016+08	2020-04-09 15:21:22.016+08	1
ad167c7a-80b6-4a2b-960a-532352df8a3c	MP_ZXy	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N		2020-04-09 15:37:03.635+08	2020-04-09 15:37:03.635+08	8
c34d10ca-5037-406b-bedb-1c9e93c0502c	Node_RS485	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N	节点485接口	2020-04-10 14:59:58.832+08	2020-04-10 14:59:58.832+08	1
82e26215-779c-407d-8dcf-7aa293ac2f50	LORA_485	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	\N		2020-04-10 15:36:10.207+08	2020-04-10 15:36:10.207+08	1
de1d3ee0-008d-4b6c-be9e-a94740944e36	Gray	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:17:50.018+08	2020-04-22 19:17:50.018+08	0
a53ae7a4-4432-4696-9af3-bbc514ecee6e	ADC	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:17:11.73+08	2020-04-22 19:22:15.548+08	0
139e622c-b7ec-45e4-9d31-862953487b92	DI	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:22:43.223+08	2020-04-22 19:22:43.223+08	0
296ce231-ea55-48e7-90a3-4aea8879b66f	DO	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:23:18.822+08	2020-04-22 19:23:18.822+08	0
f6b4041e-0a8c-46cf-a8df-21621b01f953	RS232	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:24:45.532+08	2020-04-22 19:24:45.532+08	1
2686f932-1a7d-4a02-a326-e06e0d92f30a	onvif	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	\N		2020-04-22 19:26:40.177+08	2020-04-22 19:26:40.177+08	0
b5a45e40-baae-424a-997b-ad5bdd7932b2	恋战天下	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	f	\N		2020-06-05 17:56:02.326+08	2020-06-05 17:56:02.326+08	5
789cc633-6120-4c95-95a7-c7f15063488f	WY_GDGS	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f	\N		2020-06-24 15:14:07.798+08	2020-06-24 15:14:07.798+08	0
030bf3ed-bc8b-4460-8031-99370c393db6	WY_EXTRACT	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f	\N		2020-06-24 15:15:48.306+08	2020-06-24 15:15:48.306+08	0
1c21f4ae-9f87-49b7-96f4-64f39a145e97	http	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	f	\N		2020-07-03 11:57:03.907+08	2020-07-03 11:57:03.907+08	5
b0b670ee-6fd7-4178-b684-08677b47ba30	HttpGet	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	f	\N	GNSS	2020-07-20 09:47:10.725+08	2020-07-20 09:47:10.725+08	5
fd7433b9-9a8b-43c3-86e9-dab7d653da20	CDAJ_DT	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	\N		2020-07-31 11:01:11.289+08	2020-07-31 11:01:11.289+08	0
ed710604-9677-4ca7-9f7d-376135ae5cbf	ICM	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	倾角仪接口	2020-12-28 16:51:48.555+08	2020-12-28 16:51:48.555+08	0
dff00e7d-1fb2-443e-be6a-615214932ee6	YX_RS485	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	\N		2019-11-08 16:43:41.312+08	2020-08-05 14:14:17.015+08	1
e8fa0f36-2606-4bc7-b594-ae3c3289ed63	NB_SoIP	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N		2020-08-18 10:24:23.61+08	2020-08-18 10:24:23.61+08	4
0d79aad8-d5e4-4ae1-8062-4bbf602713cf	BST_GDGS	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	f	\N		2020-08-26 11:58:42.55+08	2020-08-26 11:58:42.55+08	0
0237523c-9c1a-4c16-9fc8-7b8f9a369383	MQTT	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	\N		2020-08-27 15:48:34.076+08	2020-08-27 15:48:34.076+08	6
ceec3d38-6fcc-4e58-a430-c43b5e2291ff	mqtt_rtu	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	\N		2020-08-27 16:07:56.095+08	2020-09-02 17:48:29.759+08	1
cd04713a-2775-4af9-94b3-89ddeca68f9a	MQTT	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	\N		2020-09-07 16:06:49.179+08	2020-09-07 16:06:49.179+08	6
099c1ce3-267d-41ed-a3ed-be979a58222e	http	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	f	\N		2020-09-11 10:17:01.838+08	2020-09-11 10:17:01.838+08	5
2bef85fc-4b8c-4b06-aea3-c4309283871b	DC_AS	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	f	\N		2020-09-11 13:47:23.719+08	2020-09-11 13:47:23.719+08	0
629e35b1-4ffb-46b6-a53d-b8fb31425fe8	http	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	f	\N		2020-12-31 13:34:13.169+08	2020-12-31 13:34:13.169+08	5
76039ea0-1ef9-4965-a90a-50e97497174a	ZHTK_AS	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	f	\N		2020-09-25 08:56:46.246+08	2020-09-25 08:56:46.246+08	0
b705d87a-1c3b-4f73-b55f-6c184587c246	工讯	bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b	bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b	bdbbb9fa-82e8-4cc9-bf0d-3bc99c4fe65b	f	\N	工讯液位计	2020-11-13 13:48:30.495+08	2020-11-13 13:48:30.495+08	10
6ef0562f-3378-453f-935e-8057c95048ae	RYDW	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	\N	人员定位设备接口	2020-12-09 13:53:20.979+08	2020-12-09 13:53:20.979+08	0
415b61a8-f54e-4e4b-a599-bf878220deab	TD_ZD	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	f	\N		2020-12-31 14:15:47.08+08	2020-12-31 14:15:47.08+08	0
193f76a4-e706-4709-a54a-f6f08be3495c	hd_node	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	f	\N		2021-01-07 08:48:13.873+08	2021-01-07 08:48:13.873+08	0
\.


--
-- Data for Name: InterfaceProperty; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."InterfaceProperty" (id, name, "showName", category, enum, "defaultValue", "precision", max, min, unit, "desc", "createdAt", "updatedAt", "propertyTypeId", "interfaceMetaId", required, "isOtherParameter") FROM stdin;
35	fadsf	fds	Variable	\N	afdsf	\N	\N	\N			2017-10-23 09:42:53.53+08	2017-10-23 09:42:53.536+08	5	63ebea66-1c0a-4206-a0b2-f86cb623f3ae	t	f
36	123	123	Variable	\N	3434	\N	\N	\N	x		2017-10-26 23:10:34.448+08	2017-10-26 23:10:34.733+08	5	85384f06-e14c-4c28-a9e4-9ad955eb1eae	t	f
2	id	ID	Variable		12345678	0				SNO, ID等	2017-08-12 17:25:44.539+08	2017-09-27 15:39:27.537+08	5	3dfadb0e-7608-49e1-aa43-24f7442b424a	t	f
3	port	端口	Variable		9000	0	65535	1025		服务侧监听端口	2017-08-12 17:25:44.566+08	2017-09-27 15:39:39.408+08	1	3dfadb0e-7608-49e1-aa43-24f7442b424a	t	f
38	aa	gffdsg	Variable	\N	12	1	60	10			2017-10-31 16:09:37.726+08	2017-10-31 16:09:37.731+08	2	43f97047-356c-41ba-aa38-ded0990a78cd	t	f
12	foo	FOO	Variable	\N	true	\N	\N	\N			2017-08-31 14:58:07.963+08	2017-08-31 14:58:07.969+08	3	aa2a4177-ec0f-4375-aa7b-755461cfb402	t	f
13	bar	BAR	Constant	\N	BAR+	\N	\N	\N			2017-08-31 14:58:07.975+08	2017-08-31 14:58:07.979+08	5	aa2a4177-ec0f-4375-aa7b-755461cfb402	t	f
14	var	VAR	Variable	风,决定,要,走,z	决定	\N	\N	\N			2017-08-31 14:58:07.984+08	2017-08-31 14:58:07.99+08	4	aa2a4177-ec0f-4375-aa7b-755461cfb402	t	f
15	fuck	法克	Constant	\N	999	\N	\N	\N	摄氏度		2017-08-31 14:58:07.993+08	2017-08-31 14:58:07.997+08	1	aa2a4177-ec0f-4375-aa7b-755461cfb402	t	f
18	t	ts	Variable	\N	ts	\N	\N	\N			2017-09-05 16:33:11.323+08	2017-09-05 16:33:11.329+08	5	1ee846c7-db72-4961-b363-20c629cd5d22	t	f
19	111	111	Variable	\N	1	\N	\N	\N	2	2	2017-09-06 10:36:39.328+08	2017-09-06 10:36:39.337+08	5	c96530d8-c5e2-4acd-a7fa-450e15e27ddb	t	f
39	1	2	Variable	\N	3	\N	\N	\N	4	5	2017-11-03 13:18:14.672+08	2017-11-03 13:18:14.678+08	5	439492bf-c1cd-4269-8f04-4ee1f3abd6dc	t	f
22	demo1	demo1	Variable	\N	demo1	\N	\N	\N			2017-09-19 16:19:02.951+08	2017-09-19 16:19:02.957+08	5	73c3b65f-2eb1-4465-9ead-47e699326a86	t	f
23	demo2	demo2	Constant	\N	demo2	\N	\N	\N		demo2	2017-09-19 16:19:02.964+08	2017-09-19 16:19:02.967+08	5	73c3b65f-2eb1-4465-9ead-47e699326a86	t	f
24	demo3	demo3	Variable	\N	1	\N	100	1		demo3	2017-09-19 16:19:02.97+08	2017-09-19 16:19:02.973+08	1	73c3b65f-2eb1-4465-9ead-47e699326a86	t	f
25	ip		Variable	\N	12341234	\N	\N	\N			2017-09-25 09:41:13.879+08	2017-09-25 09:41:13.886+08	5	c6167a22-bb4f-4353-8ea1-5653c69e926b	t	f
26	port		Variable		2222	0					2017-09-25 09:41:13.894+08	2017-11-03 16:31:38.783+08	5	c6167a22-bb4f-4353-8ea1-5653c69e926b	t	f
32	model	型号	Variable		 	0				不同型号标识	2017-09-27 15:39:04.759+08	2017-09-27 15:40:46.373+08	5	3dfadb0e-7608-49e1-aa43-24f7442b424a	t	f
33	软件	111	Variable	\N	1212	\N	22222	111	1212	1212	2017-10-07 20:46:59.933+08	2017-10-07 20:46:59.94+08	1	54d9b5fc-1253-41af-80d2-b6bef8f04add	t	f
34	add	增加	Variable	\N	test	\N	\N	\N			2017-10-16 09:35:09.13+08	2017-10-16 09:35:09.136+08	5	63617b14-934a-4d23-8a95-6a76229fbb74	t	f
40	Output	\N	Variable	\N		\N	\N	\N	\N		2017-11-30 15:00:07.098+08	2017-11-30 15:00:07.098+08	5	c3feea31-4449-46fb-a1dc-2214d73c3935	t	f
41	sik	sik值	Variable	\N	1	\N	\N	\N	\N		2017-12-13 13:53:29.273+08	2017-12-13 13:53:29.279+08	5	31f274cf-4345-4b4e-adbc-e7b05abf7453	t	f
42	appsecret	密码	Variable	\N	1	\N	\N	\N			2017-12-13 13:53:29.285+08	2017-12-13 13:53:29.289+08	5	31f274cf-4345-4b4e-adbc-e7b05abf7453	t	f
43	sik	\N	Variable	\N		\N	\N	\N	\N		2017-12-14 14:42:59.138+08	2017-12-14 14:42:59.142+08	5	2b457429-02d8-4034-bf6b-a771ff578d64	t	f
44	appsecret		Variable	\N		\N	\N	\N			2017-12-14 14:42:59.146+08	2017-12-14 14:42:59.148+08	5	2b457429-02d8-4034-bf6b-a771ff578d64	t	f
45	temp	温度	Variable	\N	0	2	100	-30	℃		2017-12-20 15:31:35.696+08	2017-12-20 15:31:35.703+08	2	a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7	t	f
46	humi	湿度	Variable	\N	\N	2	100	0	%		2017-12-20 15:31:35.711+08	2017-12-20 15:31:35.715+08	2	a9e6ee3e-327c-49ad-a6b8-0f073bfdccd7	t	f
47	123	\N	Variable	\N	\N	2	1	0	\N		2018-01-02 15:10:57.88+08	2018-01-02 15:10:57.888+08	2	39d0ef2f-4785-4747-92ef-7a261b609e9e	t	f
48	name	name	Variable	\N		\N	\N	\N			2018-01-03 22:54:44.812+08	2018-01-03 22:54:44.818+08	5	3ee5b7e3-e7ba-49ff-86eb-2d6498f67116	t	f
49	type		Variable	\N		\N	\N	\N			2018-01-03 22:54:44.825+08	2018-01-03 22:54:44.829+08	5	3ee5b7e3-e7ba-49ff-86eb-2d6498f67116	t	f
50	属性1	属性1	Variable	\N	哈哈	\N	\N	\N	秒	哈哈	2018-01-05 17:10:01.284+08	2018-01-05 17:10:01.288+08	5	cf3cc1ef-8614-4d32-ba45-2ac5d387379b	t	f
51	端口	端口	Constant	\N	161	\N	\N	\N	\N		2018-01-08 09:36:33.322+08	2018-01-08 09:36:33.328+08	1	fcfced24-ec69-4898-b965-a6fcc3fda47c	t	f
52	ip	ip	Variable	\N		\N	\N	\N			2018-01-08 09:36:33.334+08	2018-01-08 09:36:33.338+08	5	fcfced24-ec69-4898-b965-a6fcc3fda47c	t	f
53	ip	\N	Tag	\N	\N	\N	\N	\N	\N		2018-01-08 11:56:14.215+08	2018-01-08 11:56:14.22+08	5	0656e39e-ad05-4573-8a05-3c6f5dd01785	t	f
54	port		Constant	\N	13	\N	\N	\N			2018-01-08 11:56:14.225+08	2018-01-08 11:56:14.228+08	1	0656e39e-ad05-4573-8a05-3c6f5dd01785	t	f
55	ip	ip地址	Variable	\N	172.16.10.152	\N	\N	\N	\N	Tomcat的ip地址	2018-01-09 10:02:15.012+08	2018-01-09 10:02:15.015+08	5	9c90124d-0230-4da1-be95-61ec1f25cd7a	t	f
56	port	端口号	Variable	\N	8080	\N	10000	2000		tomcat的http端口号	2018-01-09 10:02:15.018+08	2018-01-09 10:02:15.02+08	1	9c90124d-0230-4da1-be95-61ec1f25cd7a	t	f
57	userName	用户名	Variable	\N	admin	\N	\N	\N		用户名	2018-01-09 10:02:15.021+08	2018-01-09 10:02:15.024+08	5	9c90124d-0230-4da1-be95-61ec1f25cd7a	t	f
58	password	密码	Variable	\N		\N	\N	\N		密码	2018-01-09 10:02:15.027+08	2018-01-09 10:02:15.031+08	6	9c90124d-0230-4da1-be95-61ec1f25cd7a	t	f
59	ip	ip地址	Variable	\N	172.16.10.152	\N	\N	\N	\N	tomcat的IP地址	2018-01-09 10:37:11.3+08	2018-01-09 10:37:11.307+08	5	74e413a0-dd33-474d-bd1f-b7f71885dff3	t	f
60	port	端口号	Variable	\N	8080	\N	10000	2000		tomcat的端口地址	2018-01-09 10:37:11.314+08	2018-01-09 10:37:11.317+08	1	74e413a0-dd33-474d-bd1f-b7f71885dff3	t	f
8	appkey	APP Key	Variable		 	0				CLAA 授权应用Key	2017-08-28 19:11:53.525+08	2017-09-27 15:46:27.191+08	5	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5	t	f
1	module	模块号	Variable		1026	0	65535	1025		模块号, Modbus 地址	2017-08-12 17:24:45.51+08	2017-09-27 15:41:16.965+08	5	9a1540b6-fea8-4bc0-8090-296b05f87c4a	t	f
9	appeui	APP EUI	Variable		 	0				应用ID	2017-08-28 19:11:53.536+08	2017-09-27 15:46:58.056+08	5	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5	t	f
31	vendor	供应商	Variable	才茂,四信,宏电,众山,RTU	才茂	0				供应商, 会影响控制帧处理	2017-09-27 15:38:32.849+08	2017-09-27 15:44:59.346+08	4	3dfadb0e-7608-49e1-aa43-24f7442b424a	t	f
10	msp	MSP服务器	Variable		msp01.claaiot.com:30002	0				MSP服务器地址	2017-08-28 19:11:53.543+08	2017-09-27 15:47:23.327+08	5	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5	t	f
11	deveui	设备EUI	Variable		 	0				设备ID	2017-08-28 19:11:53.549+08	2017-09-27 15:47:17.713+08	5	ebfe6186-b73c-43ce-8414-e1ee2f3a5ae5	t	f
90	destid4	destid呀	Variable	\N	\N	7	777	7			2018-03-07 14:55:17.487+08	2018-03-07 14:55:17.49+08	2	dfe5a4c0-1a35-48a4-9b20-e8c348a51f12	t	f
64	名称	GE1/0/1	Variable	\N		\N	\N	\N	\N		2018-01-09 21:39:41.658+08	2018-01-09 21:39:41.664+08	5	c6ca8894-3a00-4e68-9a8b-c55673bafd0b	t	f
65	描述	描述	Variable	\N		\N	\N	\N			2018-01-09 21:39:41.67+08	2018-01-09 21:39:41.673+08	5	c6ca8894-3a00-4e68-9a8b-c55673bafd0b	t	f
66	管理状态	管理状态	Constant	0,1	\N	\N	\N	\N			2018-01-09 21:39:41.675+08	2018-01-09 21:39:41.678+08	4	c6ca8894-3a00-4e68-9a8b-c55673bafd0b	t	f
104	vendor	监听类型	Variable	才茂,四信,宏电	才茂	0					2018-03-08 18:11:49.909+08	2018-03-21 16:47:05.851+08	4	0a80b74d-7acc-45c9-a06f-380d7d613626	t	f
67	12	\N	Variable	\N		\N	\N	\N	\N		2018-01-12 14:10:12.233+08	2018-01-12 14:10:12.238+08	5	06b0f2ee-1759-4e35-9c6f-724c06a28838	t	f
107	subnet	子网	Variable		25	0	9999	1			2018-03-08 18:15:50.012+08	2018-08-31 09:50:27.918+08	1	7697235e-a619-4da5-ac6e-9a76a6e59a78	t	f
70	34	343	Variable	\N	3	2	5	2	\N		2018-01-16 11:14:26.765+08	2018-01-16 11:14:26.77+08	2	93f2d601-f46f-4361-ae92-431401bd869d	t	f
71	353	5	Variable	35	\N	\N	\N	\N			2018-01-16 11:14:26.773+08	2018-01-16 11:14:26.777+08	4	93f2d601-f46f-4361-ae92-431401bd869d	t	f
72	6	3	Variable	\N	4	\N	\N	\N			2018-01-16 11:14:26.78+08	2018-01-16 11:14:26.783+08	5	93f2d601-f46f-4361-ae92-431401bd869d	t	f
73	1dasd	asd	Variable	\N	1	\N	56564	1	a	a	2018-01-19 17:05:47.165+08	2018-01-19 17:05:47.169+08	1	c7a17601-0a46-4901-889f-ce98a95731be	t	f
75	asad	asdasd	Variable	\N	asdasd	\N	\N	\N	asdas	asdas	2018-01-22 17:22:06.979+08	2018-01-22 17:22:06.979+08	5	3d88a29a-ca10-482f-8643-4fd39d4b50e2	t	f
76	电压	电压	Variable	\N	0	2	100	0	V	电压	2018-01-24 14:19:28.762+08	2018-01-24 14:19:28.765+08	2	2d974b4e-c841-430c-8cbf-c92f7d6a890d	t	f
79	erwe	rew	Variable	\N	\N	\N	267	23	\N		2018-01-25 16:18:55.062+08	2018-01-25 16:18:55.066+08	1	b2d60094-05d4-473d-a62d-e1cd0ebd557b	t	f
100	tj	关联	Variable		false	0					2018-03-07 17:50:36.396+08	2018-03-29 14:21:34.146+08	3	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
92	channel	通道	Variable	1,2,3,4,5,6,7,8	1	0					2018-03-07 17:46:21.352+08	2018-03-30 10:54:53.809+08	4	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
74	name	名称	Variable	122323,dfgdfg	122323	0			111	11	2018-01-22 10:15:47.491+08	2018-02-05 16:29:14.956+08	4	3d88a29a-ca10-482f-8643-4fd39d4b50e2	t	f
80	测量值1	测量值温度	Variable	\N	\N	5	100	-100	。c		2018-02-13 16:52:00.052+08	2018-02-13 16:52:00.068+08	2	39356c21-ccbc-496f-b760-0eab61591c6a	t	f
81	属性1	常量1	Constant	\N	100	\N	\N	\N	单位	属性描述	2018-03-01 11:59:16.807+08	2018-03-01 11:59:16.817+08	1	d9e8186c-3346-431a-8577-b7b7ea1d0798	t	f
83	id	设备id	Variable	\N		\N	\N	\N	\N		2018-03-07 11:51:57.336+08	2018-03-07 11:51:57.339+08	5	250ec8dc-2cd2-4056-88f4-863278485bba	t	f
84	data	数据	Variable	\N		\N	\N	\N			2018-03-07 11:51:57.341+08	2018-03-07 11:51:57.344+08	5	250ec8dc-2cd2-4056-88f4-863278485bba	t	f
85	worktype	工作模式	Variable	terminal,relay,host,terminal+relay	terminal	\N	\N	\N	\N		2018-03-07 14:48:51.8+08	2018-03-07 14:48:51.803+08	4	1490fd95-7804-4e0f-9afa-bdbe7bb7880f	t	f
86	subnet	子网	Variable	\N	23	\N	127	1			2018-03-07 14:48:51.805+08	2018-03-07 14:48:51.807+08	1	1490fd95-7804-4e0f-9afa-bdbe7bb7880f	t	f
87	netid	本机地址	Variable	\N	\N	\N	4096	1			2018-03-07 14:48:51.808+08	2018-03-07 14:48:51.813+08	1	1490fd95-7804-4e0f-9afa-bdbe7bb7880f	t	f
88	destid	目标主机	Variable	\N	\N	\N	4096	1			2018-03-07 14:48:51.815+08	2018-03-07 14:48:51.816+08	1	1490fd95-7804-4e0f-9afa-bdbe7bb7880f	t	f
89	destid	\N	Variable	\N	4	\N	4	3	\N		2018-03-07 14:55:17.481+08	2018-03-07 14:55:17.484+08	1	dfe5a4c0-1a35-48a4-9b20-e8c348a51f12	t	f
99	das	去直流	Variable	\N	true	\N	\N	\N			2018-03-07 17:50:18.577+08	2018-03-07 17:50:18.577+08	3	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
101	enable	启用	Variable	\N	true	\N	\N	\N			2018-03-07 17:50:56.525+08	2018-03-07 17:50:56.525+08	3	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
93	filterfreq	滤波频率	Variable		128	0	2048	64	Hz		2018-03-07 17:47:09.414+08	2018-03-30 11:06:19.995+08	1	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
102	port	端口	Variable	\N	40002	\N	65535	1025	\N		2018-03-08 18:11:49.894+08	2018-03-08 18:11:49.899+08	1	0a80b74d-7acc-45c9-a06f-380d7d613626	t	f
103	id	DTU编号	Variable			0					2018-03-08 18:11:49.902+08	2018-03-13 13:28:02.211+08	5	0a80b74d-7acc-45c9-a06f-380d7d613626	t	f
105	protocol	工作方式	Variable	normal,idau	idau	\N	\N	\N			2018-03-08 18:11:49.915+08	2018-03-08 18:11:49.918+08	4	0a80b74d-7acc-45c9-a06f-380d7d613626	t	f
106	worktype	工作模式	Variable	terminal,relay,host,terminal+relay	terminal	\N	\N	\N	\N		2018-03-08 18:15:50.004+08	2018-03-08 18:15:50.009+08	4	7697235e-a619-4da5-ac6e-9a76a6e59a78	t	f
109	destid	目标主机地址	Variable		\N	0	9999	1			2018-03-08 18:15:50.024+08	2018-03-13 10:33:08.543+08	1	7697235e-a619-4da5-ac6e-9a76a6e59a78	t	f
96	triggermode	触发方式	Variable	绝对值,上升沿,下降沿,峰值	绝对值	0					2018-03-07 17:48:49.684+08	2018-03-30 11:10:05.707+08	4	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
110	module	模块号	Variable			0			\N		2018-03-08 18:24:07.564+08	2018-07-17 15:07:22.912+08	5	7667c2d9-3c04-4818-bfeb-42f43b60af77	f	f
113	schannel	二级通道	Variable	\N	0	\N	32	0			2018-03-08 18:24:07.583+08	2018-03-08 18:24:07.586+08	1	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
114	enabled	是否启用	Variable	\N	true	\N	\N	\N			2018-03-08 18:24:07.588+08	2018-03-08 18:24:07.591+08	3	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
108	netid	本机地址	Variable		\N	0	9999	1			2018-03-08 18:15:50.019+08	2018-03-13 10:33:00.999+08	1	7697235e-a619-4da5-ac6e-9a76a6e59a78	t	f
98	duration	时长	Variable		2	0	30	1	s		2018-03-07 17:49:55.069+08	2018-03-30 11:13:51.058+08	1	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
97	lagpoint	滞后点数	Variable		0	0	2048	0			2018-03-07 17:49:22.158+08	2018-03-30 11:14:44.296+08	1	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
112	sensorid	传感器ID	Variable		1234	0	2147483647	1			2018-03-08 18:24:07.577+08	2018-07-17 10:51:35.293+08	1	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
140	subnet	子网	Variable		25	0	9999	1	\N		2018-03-15 11:44:17.786+08	2018-08-14 10:21:20.514+08	1	d07a1774-312c-4497-adbb-6e3da9410cb6	t	f
145	channel	通道	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	0					2018-03-15 11:50:29.316+08	2018-10-26 17:29:23.467+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
117	sensorid	传感器ID	Variable		1234	0	2147483647	1	\N		2018-03-08 18:35:08.404+08	2018-07-17 14:45:54.78+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
119	enable	是否启用	Variable	\N	true	\N	\N	\N			2018-03-08 18:35:08.417+08	2018-03-08 18:35:08.42+08	3	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
120	predelay	执行前延迟	Variable	\N	1	\N	6000	0	百毫秒		2018-03-08 18:35:08.422+08	2018-03-08 18:35:08.425+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
121	postdelay	读取前延时	Variable	\N	1	\N	6000	1	百毫秒		2018-03-08 18:35:08.427+08	2018-03-08 18:35:08.43+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
122	fid	公式ID	Constant	\N	17	\N	\N	\N			2018-03-08 18:35:08.432+08	2018-03-08 18:35:08.435+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
123	k	模量系数	Variable	\N	1	16	999999	-999999			2018-03-08 18:35:08.437+08	2018-03-08 18:35:08.44+08	2	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
124	f0	频率初值	Variable	\N	0	4	99999	-9999	Hz		2018-03-08 18:35:08.442+08	2018-03-08 18:35:08.444+08	2	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
125	kt	温度补偿系数	Variable	\N	0	4	9999	-9999			2018-03-08 18:35:08.446+08	2018-03-08 18:35:08.449+08	2	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
126	t0	温度初值	Variable	\N	20	3	999	-999			2018-03-08 18:35:08.451+08	2018-03-08 18:35:08.453+08	2	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
141	worktype	工作模式	Variable	terminal,relay,host,terminal+relay	terminal	\N	\N	\N			2018-03-15 11:44:17.793+08	2018-03-15 11:44:17.797+08	4	d07a1774-312c-4497-adbb-6e3da9410cb6	t	f
130	2	\N	Variable	\N	3.333	4	33	3	\N		2018-03-12 17:08:28.814+08	2018-03-12 17:08:28.814+08	2	c6167a22-bb4f-4353-8ea1-5653c69e926b	t	f
131	channel	通道	Variable	\N	1	\N	128	1	\N		2018-03-15 09:45:54.328+08	2018-03-15 09:45:54.328+08	1	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c	t	f
91	samplefreq	采样频率	Variable		1024	0	2048	32	Hz		2018-03-07 17:45:29.328+08	2019-10-24 09:58:17.375+08	1	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
94	triglevel	触发电平	Variable		30	2	300	5	mV		2018-03-07 17:47:49.699+08	2020-12-01 15:38:23.633+08	2	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
82	url	接口地址	Variable		http://10.8.25.254:7005/gnss/	0					2018-03-06 11:15:39.594+08	2020-08-10 09:05:59.379+08	5	34ab0b66-1ce3-4462-ad0c-520d349ca04c	t	f
95	amplification	放大倍数	Variable	1,10,100,1000	1	0					2018-03-07 17:48:19.77+08	2020-12-28 16:28:05.08+08	4	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
142	destid	目标主机地址	Variable	\N	\N	\N	9999	1			2018-03-15 11:44:17.8+08	2018-03-15 11:44:17.804+08	1	d07a1774-312c-4497-adbb-6e3da9410cb6	t	f
159	module	模块号	Variable	\N		\N	\N	\N	\N		2018-03-23 14:58:59.671+08	2018-03-23 14:58:59.686+08	5	ad4f23f8-9213-4194-97ce-209a34596649	t	f
132	module	模块号	Variable			0			\N		2018-03-15 09:46:22.474+08	2018-03-15 10:10:50.805+08	5	8cc1433a-4b40-4671-ba91-e0ddd2e7c13c	f	f
133	module	模块号	Variable			0			\N		2018-03-15 11:39:21.655+08	2018-04-11 17:12:56.556+08	5	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
118	channel	通道	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	0					2018-03-08 18:35:08.411+08	2018-08-29 11:57:58.244+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
143	netid	本机地址	Variable	\N	\N	\N	9999	1			2018-03-15 11:44:17.805+08	2018-03-15 11:44:17.807+08	1	d07a1774-312c-4497-adbb-6e3da9410cb6	t	f
136	schannel	二级通道	Variable	\N	0	\N	32	0			2018-03-15 11:39:21.686+08	2018-03-15 11:39:21.689+08	1	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
137	enabled	是否启用	Variable	\N	true	\N	\N	\N			2018-03-15 11:39:21.692+08	2018-03-15 11:39:21.695+08	3	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
139	postdelay	读取记录前延迟	Variable		35	0	600	0			2018-03-15 11:39:21.711+08	2018-07-31 15:41:37.156+08	1	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
135	sensorid	传感器ID	Variable			0	2147483647	1			2018-03-15 11:39:21.68+08	2018-03-15 11:39:47.175+08	1	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
144	sensorid	传感器ID	Variable	\N	\N	\N	2147483647	1	\N		2018-03-15 11:50:29.31+08	2018-03-15 11:50:29.314+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
134	channel	通道号	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	0					2018-03-15 11:39:21.672+08	2018-10-26 16:48:58.721+08	4	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
146	enable	是否启用	Variable	\N	true	\N	\N	\N			2018-03-15 11:50:29.324+08	2018-03-15 11:50:29.326+08	3	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
147	predelay	执行前延迟	Variable	\N	1	\N	6000	0	百毫秒		2018-03-15 11:50:29.328+08	2018-03-15 11:50:29.33+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
155	id	DTU编号	Variable	\N		\N	\N	\N			2018-03-19 17:05:41.298+08	2018-03-19 17:05:41.308+08	5	816805e0-09d0-45d0-866f-b305bcb16111	t	f
149	fid	公式ID	Constant	\N	17	\N	\N	\N			2018-03-15 11:50:29.337+08	2018-03-15 11:50:29.339+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
150	k	模量系数	Variable	\N	1	16	999999	-999999			2018-03-15 11:50:29.341+08	2018-03-15 11:50:29.344+08	2	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
151	f0	频率初值	Variable	\N	0	4	99999	-9999	Hz		2018-03-15 11:50:29.345+08	2018-03-15 11:50:29.348+08	2	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
152	kt	温度补偿系数	Variable	\N	0	4	9999	-9999			2018-03-15 11:50:29.35+08	2018-03-15 11:50:29.355+08	2	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
153	t0	温度初值	Variable	\N	20	3	999	-999			2018-03-15 11:50:29.359+08	2018-03-15 11:50:29.362+08	2	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
148	postdelay	读取前延时	Variable		1	0	6000	1	百毫秒		2018-03-15 11:50:29.333+08	2018-03-15 11:51:41.349+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
154	port	\N	Variable	\N	40002	\N	40005	40000	\N		2018-03-19 17:05:41.291+08	2018-03-19 17:05:41.295+08	1	816805e0-09d0-45d0-866f-b305bcb16111	t	f
160	channel	通道	Variable	\N	1	\N	128	1			2018-03-23 14:58:59.689+08	2018-03-23 14:58:59.693+08	1	ad4f23f8-9213-4194-97ce-209a34596649	t	f
156	protocol	工作方式	Variable	modbus,idau	idau	0					2018-03-19 17:05:41.31+08	2018-03-19 17:10:39.458+08	4	816805e0-09d0-45d0-866f-b305bcb16111	t	f
157	vendor	供应商	Variable	才茂,四信,宏电	才茂	0					2018-03-19 17:05:41.314+08	2018-03-20 10:36:16.015+08	4	816805e0-09d0-45d0-866f-b305bcb16111	t	f
158	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N	\N	应用协议	\N	\N	4	3dfadb0e-7608-49e1-aa43-24f7442b424a	f	f
162	1111111	1	Variable	\N	125	1	133	122	\N		2018-03-28 15:38:46.027+08	2018-03-28 15:38:46.033+08	2	f5115163-46ca-4e11-ac6e-d1be363871d1	t	f
163	adsfasdfas	adfasdf	Tag	\N	\N	\N	\N	\N	13		2018-04-06 12:23:30.473+08	2018-04-06 12:23:30.482+08	1	ca2e74c9-b28e-4826-b922-074f4f657e51	t	f
164	eqwrqw	\N	Variable	\N	\N	\N	31	1	\N		2018-04-06 12:23:47.485+08	2018-04-06 12:23:47.485+08	1	ca2e74c9-b28e-4826-b922-074f4f657e51	t	f
138	predelay	执行前延迟	Variable		25	0	600	0			2018-03-15 11:39:21.707+08	2018-07-31 15:41:30.92+08	1	d4f271b6-567a-4880-beb0-161b33ac2094	t	f
166	port	端口	Variable	\N	\N	\N	65535	1025			2018-04-08 23:15:31.258+08	2018-04-08 23:15:31.272+08	1	cb26d851-bb8b-4390-9d70-75c74bef520a	t	f
167	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N			2018-04-08 23:15:31.276+08	2018-04-08 23:15:31.282+08	4	cb26d851-bb8b-4390-9d70-75c74bef520a	t	f
165	id	DTUID	Variable			0			\N		2018-04-08 23:15:31.245+08	2018-04-08 23:15:56.557+08	5	cb26d851-bb8b-4390-9d70-75c74bef520a	t	f
168	escape	转义	Variable	\N	true	\N	\N	\N			2018-04-08 23:15:31.285+08	2018-04-08 23:15:31.288+08	3	cb26d851-bb8b-4390-9d70-75c74bef520a	t	f
169	protocol	协议	Variable	Modbus,iDAU	iDAU	\N	\N	\N			2018-04-08 23:15:31.576+08	2018-04-08 23:15:31.589+08	4	cb26d851-bb8b-4390-9d70-75c74bef520a	t	f
170	温湿度传感器	\N	Variable	\N	\N	2	35.00	1.00	\N		2018-04-24 15:22:29.619+08	2018-04-24 15:22:29.632+08	2	d357249e-6ccf-4d1b-8546-c57c18fa121c	t	f
171	test	sss	Variable	\N	\N	\N	2222	1	\N		2018-04-27 16:04:31.657+08	2018-04-27 16:04:31.661+08	1	0e98e5cb-6e50-4d85-940b-b538ce71dc14	t	f
172	123456	hj	Variable	\N	12	\N	12	12	】、	】、	2018-05-28 17:33:01.153+08	2018-05-28 17:33:01.153+08	1	c8eeed37-ec79-49a9-b3d8-68b7343e0334	t	f
174	url	接口地址	Variable	\N		\N	\N	\N	\N		2018-06-13 16:54:48.662+08	2018-06-13 16:54:48.662+08	5	5ef40d3b-0094-45fb-9663-892c5c4e270d	t	f
203	k	模量系数	Variable	\N	1	16	999999	-999999			2018-07-17 16:59:01.18+08	2018-07-17 16:59:01.18+08	2	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
178	URL	主机地址	Variable	\N		\N	\N	\N	\N		2018-06-25 16:37:11.5+08	2018-06-25 16:37:11.505+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	t	f
180	ClientID	客户端ID	Variable	\N		\N	\N	\N			2018-06-25 16:37:11.526+08	2018-06-25 16:37:11.529+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
183	Persistent	长连接	Variable	\N	true	\N	\N	\N			2018-06-25 16:37:11.542+08	2018-06-25 16:37:11.545+08	3	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
184	Username	用户	Variable	\N		\N	\N	\N			2018-06-25 16:37:11.547+08	2018-06-25 16:37:11.549+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
185	Password	密码	Variable	\N		\N	\N	\N			2018-06-25 16:37:11.551+08	2018-06-25 16:37:11.554+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
176	port	port	Variable		\N	0	65525	1025	\N		2018-06-15 17:08:09.978+08	2018-07-03 14:35:32.78+08	1	452e3349-a87b-4b5b-97f9-7dc730f910fa	t	f
205	kt	温度补偿系数	Variable	\N	0	4	999	-999			2018-07-17 17:08:01.278+08	2018-07-17 17:08:01.278+08	2	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
188	channel	通道号	Variable	\N	1	\N	128	1			2018-07-17 16:30:52.771+08	2018-07-17 16:30:52.775+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
179	SubscribeTopic	订阅主题	Variable			0					2018-06-25 16:37:11.509+08	2019-12-06 17:23:40.552+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	t	f
204	f0	频率初值	Variable		0	4	99999	0	Hz		2018-07-17 16:59:57.457+08	2019-09-19 14:45:21.781+08	2	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
181	PublishTopic	发布主题	Variable			0					2018-06-25 16:37:11.532+08	2019-12-06 17:29:56.459+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
161	escape	转义	Variable		true	\N	\N	\N	\N	是否转义	\N	\N	3	3dfadb0e-7608-49e1-aa43-24f7442b424a	f	f
190	channel	通道号	Variable	\N	1	\N	64	1			2018-07-17 16:37:48.5+08	2018-07-17 16:37:48.5+08	1	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
189	module	模块号	Variable			0			\N		2018-07-17 16:37:06.298+08	2018-07-17 16:45:53.372+08	5	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
198	predelay	执行前延迟	Variable		25	0	6000	0	\N		2018-07-17 16:55:05.799+08	2018-07-23 16:55:49.954+08	1	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
197	schannel	子通道号	Variable		1	0	32	0			2018-07-17 16:52:51.827+08	2018-07-17 16:53:15.036+08	1	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
201	channel	通道号	Variable	\N	1	\N	64	1			2018-07-17 16:57:31.166+08	2018-07-17 16:57:31.166+08	1	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
206	t0	温度初值	Variable	\N	20	3	999	-999	℃		2018-07-17 17:08:40.31+08	2018-07-17 17:08:40.31+08	2	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
207	triggerjion	定时采样间隔	Variable	\N	0	\N	6000	0	s		2018-07-17 17:17:35.22+08	2018-07-17 17:17:35.22+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
208	triggersample	定时采样时长	Variable	\N	0	\N	6000	0	s		2018-07-17 17:18:29.572+08	2018-07-17 17:18:29.572+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
209	sampleduration	加速度触发采样时长	Variable	\N	0	\N	6000	0	s		2018-07-17 17:19:10.425+08	2018-07-17 17:19:10.425+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
211	filterfreq	滤波频率	Variable	\N	1	4	99999	-9999	Hz		2018-07-17 17:21:08.2+08	2018-07-17 17:21:08.2+08	2	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
210	samplefreq	采样频率	Variable		1	4	99999	-9999	Hz		2018-07-17 17:20:12.132+08	2018-07-17 17:21:15.109+08	2	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
214	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-999	g		2018-07-17 17:27:17.071+08	2018-07-17 17:27:17.071+08	2	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
199	postdelay	读取前延时	Variable		35	0	6000	0			2018-07-17 16:55:30.851+08	2018-07-23 16:55:56.014+08	1	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
212	lagpionts	滞后点数	Variable		1	3	1024	0			2018-07-17 17:22:45.138+08	2018-07-23 17:28:00.179+08	2	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
225	switchinterval	485切换时间	Variable	\N	5	\N	3600	0	\N	ms	2018-07-24 10:33:32.313+08	2018-07-24 10:33:32.313+08	1	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
216	postdelay	读取前延时	Variable		35	0	6000	1	百毫秒		2018-07-17 17:28:52.478+08	2018-07-26 09:53:21.588+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
175	port	\N	Variable		\N	0	51245	51230	\N		2018-06-15 17:06:35.826+08	2018-07-30 14:20:33.402+08	1	6619c155-5a30-4c92-b738-816302f0c4ed	t	f
223	frequencyid	频谱ID	Variable	\N	1	\N	\N	\N			2018-07-24 10:29:19.935+08	2018-07-24 10:29:19.935+08	5	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
224	collectoption	采集选项	Variable	1,2,3	3	\N	\N	\N		1，只采集温度，2，只采集频率，3，采集频率与温度	2018-07-24 10:32:02.292+08	2018-07-24 10:32:02.292+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
215	predelay	执行前延迟	Variable		25	0	6000	0	百毫秒		2018-07-17 17:28:19.937+08	2018-07-26 09:52:50.016+08	1	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
226	module	模块号	Variable	\N		\N	\N	\N	\N		2018-07-26 09:54:46.297+08	2018-07-26 09:54:46.297+08	5	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
227	username	用户名	Variable	\N		\N	\N	\N	\N		2018-07-26 16:30:09.805+08	2018-07-26 16:30:09.813+08	5	71458c57-c197-4b3c-9171-2cdc5658201e	t	f
228	password	密码	Variable	\N		\N	\N	\N			2018-07-26 16:30:09.818+08	2018-07-26 16:30:09.823+08	5	71458c57-c197-4b3c-9171-2cdc5658201e	t	f
266	worktype	工作模式	Variable	terminal,relay,host,terminal+relay	terminal	\N	\N	\N			2018-08-28 17:41:58.176+08	2018-08-28 17:41:58.178+08	4	30e6dca7-ede5-48be-9952-9fb056b2e9d1	t	f
230	module	模块号	Variable	\N		\N	\N	\N	\N		2018-07-27 11:53:34.926+08	2018-07-27 11:53:34.926+08	5	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
231	url	\N	Variable	\N	1	\N	\N	\N	\N		2018-07-27 17:05:12.193+08	2018-07-27 17:05:12.196+08	5	7fd05290-f814-4049-812f-b8c7865ec221	t	f
232	moduleid	模块号	Variable		1000	0			\N		2018-07-31 16:38:16.983+08	2018-09-08 11:29:51.632+08	5	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	f	f
233	port	端口	Variable	\N	40001	\N	65535	1025	\N	服务侧监听端口	2018-07-31 16:41:27.159+08	2018-07-31 16:41:27.159+08	1	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
234	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		供应商, 会影响控制帧	2018-07-31 16:42:07.888+08	2018-07-31 16:42:07.888+08	4	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
235	escape	是否转义	Variable	\N	true	\N	\N	\N			2018-07-31 16:42:32.196+08	2018-07-31 16:42:32.196+08	3	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
236	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N			2018-07-31 16:43:04.056+08	2018-07-31 16:43:04.056+08	4	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
237	id	ID	Variable		12345678	0			\N		2018-08-01 10:13:44.62+08	2018-08-01 10:16:45.402+08	5	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
240	ot	DTU等待上线时间	Variable	\N	60	\N	60000	0			2018-08-01 16:23:00.496+08	2018-08-01 16:23:00.496+08	1	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
241	acq	等待应答时间	Variable	\N	11	\N	60000	0			2018-08-01 16:23:39.258+08	2018-08-01 16:23:39.258+08	1	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
242	delay	休眠延时	Variable	\N	5	\N	6000	0			2018-08-01 16:24:10.718+08	2018-08-01 16:24:10.718+08	1	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
200	fid	公式ID	Variable		1	0					2018-07-17 16:56:57.402+08	2019-05-27 09:20:29.536+08	5	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
191	predelay	前延时	Variable		25	0	600	0	百毫秒		2018-07-17 16:38:48.251+08	2019-06-05 11:03:26.296+08	1	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
192	postdelay	后延时	Variable		35	0	600	0	百毫秒		2018-07-17 16:39:21.201+08	2019-06-05 11:03:35.472+08	1	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
253	url	\N	Variable	\N		\N	\N	\N	\N		2018-08-17 11:15:21.723+08	2018-08-17 11:15:21.73+08	5	9359f4a8-67a2-4354-b5e6-e7473d0a5268	t	f
254	Persistent	登录用户	Variable	\N		\N	\N	\N	\N		2018-08-17 11:21:51.744+08	2018-08-17 11:21:51.744+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
243	node_id	节点号	Variable	\N		\N	\N	\N	\N		2018-08-01 17:42:56.963+08	2018-08-01 17:42:56.963+08	5	d0ad76ed-4f11-4355-b876-7f1b04037ae1	t	f
244	node_channelId	节点通道	Variable		1	0	32	0	\N		2018-08-03 07:26:29.247+08	2018-08-03 07:26:51.934+08	1	876d87b1-cccb-4847-80ea-dabfc20a2175	t	f
238	node_channelId	节点通道号	Variable		1	0	32	0	\N		2018-08-01 16:18:08.703+08	2018-08-03 07:27:05.984+08	1	c43e054f-dbeb-43c0-9702-4bc9bf7fdcd1	t	f
255	Password	登录密码	Variable			0					2018-08-17 11:22:45.791+08	2018-08-17 11:22:55.653+08	5	96b665c2-5314-4144-83d3-7db169ef9416	f	f
246	channel	通道号	Variable	1,2,3,4,5,6,7,8	1	\N	\N	\N	\N		2018-08-09 16:15:32.344+08	2018-08-09 16:15:32.347+08	4	6f8504db-8b86-4b33-a0c6-721249b63f46	t	f
256	UserName	登录用户	Variable	\N	username	\N	\N	\N			2018-08-17 11:23:26.958+08	2018-08-17 11:23:26.958+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
245	module	设备Id	Variable		1	0			\N		2018-08-09 16:12:18.159+08	2018-08-09 16:29:18.739+08	5	2c95c010-e14a-4284-89d5-a69fc7f2ed37	t	f
247	module	节点号	Variable	\N	1	\N	9999	1	\N		2018-08-14 16:17:09.862+08	2018-08-14 16:17:09.87+08	1	3d51e3f3-9e3c-4b50-973a-fa7f80af4ba5	t	f
258	PublishTopic	发布主题	Variable			0					2018-08-17 11:24:11.933+08	2018-08-17 11:24:17.509+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
257	PublishQos	发布Qos	Variable	0,1,2	2	0					2018-08-17 11:23:54.826+08	2018-08-17 11:24:21.903+08	4	96b665c2-5314-4144-83d3-7db169ef9416	t	f
259	SubscribeTopic	订阅主题	Variable	\N		\N	\N	\N			2018-08-17 11:24:41.956+08	2018-08-17 11:24:41.956+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
260	clientId	ClientID	Variable	\N	IOTA_CLIENT	\N	\N	\N		客户端ID(可选	2018-08-17 11:25:17.007+08	2018-08-17 11:25:17.007+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
261	url		Variable	\N	tcp://localhost:1883	\N	\N	\N		Mqtt Broker地址	2018-08-17 11:25:39.901+08	2018-08-17 11:25:39.901+08	5	96b665c2-5314-4144-83d3-7db169ef9416	t	f
262	topic	主题	Variable	\N	zhou	\N	\N	\N	\N		2018-08-17 11:34:51.605+08	2018-08-17 11:34:51.608+08	5	8280ccac-494e-4784-bd0c-5ffe97746993	t	f
263	brokers	Brokers	Variable	\N		\N	\N	\N		以英文逗号（,）分隔的Kafka Broker列表	2018-08-17 11:34:51.611+08	2018-08-17 11:34:51.613+08	5	8280ccac-494e-4784-bd0c-5ffe97746993	t	f
264	escapegw	网关转义	Variable	\N	false	\N	\N	\N	\N	\N	\N	\N	3	3dfadb0e-7608-49e1-aa43-24f7442b424a	f	f
265	subnet	子网	Variable	\N	25	\N	9999	1	\N		2018-08-28 17:41:58.164+08	2018-08-28 17:41:58.168+08	1	30e6dca7-ede5-48be-9952-9fb056b2e9d1	t	f
267	destid	目标主机地址	Variable	\N	\N	\N	9999	1			2018-08-28 17:41:58.183+08	2018-08-28 17:41:58.189+08	1	30e6dca7-ede5-48be-9952-9fb056b2e9d1	t	f
268	netid	本机地址	Variable	\N	\N	\N	9999	1			2018-08-28 17:41:58.191+08	2018-08-28 17:41:58.194+08	1	30e6dca7-ede5-48be-9952-9fb056b2e9d1	t	f
269	mode	采集模式	Variable	0,1	0	\N	\N	\N			2018-08-28 17:41:58.202+08	2018-08-28 17:41:58.204+08	4	30e6dca7-ede5-48be-9952-9fb056b2e9d1	t	f
270	大大大	啊	Variable	\N	啊	\N	\N	\N	12	大大	2018-08-30 14:15:27.967+08	2018-08-30 14:15:27.974+08	5	4b408fb8-a08f-429b-bbc4-003881a2a4e7	t	f
271	channel	关联通道	Variable	\N	1	\N	\N	\N	\N	a,b,c	2018-09-07 09:14:23.401+08	2018-09-07 09:14:23.41+08	5	e4049f35-3902-4610-ac6e-45c01236a230	t	f
273	accerange	加速度范围	Variable	\N	0	\N	\N	\N	\N		2018-09-08 14:35:03.303+08	2018-09-08 14:35:03.303+08	5	4cbee03c-ad84-4c7a-a379-ed4bbbfaef22	t	f
274	dcdriftadj	直流漂移调整系数	Variable	\N	0	2	6255	0	\N		2018-09-27 10:00:23.599+08	2018-09-27 10:00:23.599+08	2	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
275	amplitudeadj	幅值修正参数	Variable		0	2	51241	0			2018-09-27 10:01:21.326+08	2018-09-27 10:01:32.343+08	2	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	f	f
277	channel	通道	Variable	\N	1	\N	8	1	\N		2018-10-10 11:20:39.661+08	2018-10-10 11:20:39.666+08	1	6c047530-0656-4cb4-a416-f4ac00b015f9	t	f
278	node	设备节点号	Variable		1	0	32	1	\N		2018-10-10 11:22:51.154+08	2018-10-16 14:10:13.967+08	1	0af1af55-38cd-43c1-abe3-b71570342d40	t	f
279	pmtpf	阈值上限	Variable		\N	2	9999	-1999	\N		2018-10-25 15:26:12.317+08	2018-10-25 15:26:21.242+08	2	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	f	f
311	method		Variable	POST,GET,DELETE	\N	\N	\N	\N			2018-11-13 13:35:18.457+08	2018-11-13 13:35:18.459+08	4	8835d3fd-b82b-4de9-bd9f-a67f40a210fc	t	f
300	module	模块号	Variable	\N	1	\N	62553	1	\N		2018-10-26 17:39:25.361+08	2018-10-26 17:39:25.361+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
301	id	id	Variable	\N		\N	\N	\N	\N		2018-10-29 16:03:35.064+08	2018-10-29 16:03:35.064+08	5	66537b16-1e7d-4823-b03e-676459f5891d	t	f
302	port	port	Variable			0	60009	60000			2018-10-29 16:03:51.407+08	2018-10-29 16:04:41.422+08	1	66537b16-1e7d-4823-b03e-676459f5891d	t	f
304	url	url	Variable	\N		\N	\N	\N			2018-10-29 16:05:30.411+08	2018-10-29 16:05:30.411+08	5	66537b16-1e7d-4823-b03e-676459f5891d	t	f
303	method	method	Variable	POST,GET,DELETE	\N	0			\N		2018-10-29 16:05:12.627+08	2018-10-29 16:07:05.071+08	4	66537b16-1e7d-4823-b03e-676459f5891d	t	f
305	module	模块号	Variable	\N	1	\N	\N	\N	\N		2018-11-01 07:27:18.624+08	2018-11-01 07:27:18.624+08	5	23b5d4f7-5be8-4e28-99a6-e797eaedb08a	t	f
306	channelNo	通道号	Variable	\N	1	\N	255	1			2018-11-01 07:27:48.397+08	2018-11-01 07:27:48.397+08	1	23b5d4f7-5be8-4e28-99a6-e797eaedb08a	t	f
314	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2018-11-22 17:39:33.529+08	2018-11-22 17:39:33.533+08	2	1aa841f1-d3fb-4523-9b54-e601d350c745	t	f
308	url	\N	Variable	\N		\N	\N	\N	\N		2018-11-13 13:35:18.442+08	2018-11-13 13:35:18.445+08	5	8835d3fd-b82b-4de9-bd9f-a67f40a210fc	t	f
309	id		Variable	\N	\N	\N	60009	60000			2018-11-13 13:35:18.448+08	2018-11-13 13:35:18.451+08	1	8835d3fd-b82b-4de9-bd9f-a67f40a210fc	t	f
310	port		Variable	\N		\N	\N	\N			2018-11-13 13:35:18.453+08	2018-11-13 13:35:18.455+08	5	8835d3fd-b82b-4de9-bd9f-a67f40a210fc	t	f
315	f0	频率初值	Variable	\N	0	4	99999	-99999	Hz		2018-11-22 17:39:33.535+08	2018-11-22 17:39:33.538+08	2	1aa841f1-d3fb-4523-9b54-e601d350c745	t	f
316	kt	温度补偿系数	Variable	\N	0	4	9999	-9999			2018-11-22 17:39:33.54+08	2018-11-22 17:39:33.542+08	2	1aa841f1-d3fb-4523-9b54-e601d350c745	t	f
317	t0	温度初值	Variable	\N	20	3	999	-999			2018-11-22 17:39:33.544+08	2018-11-22 17:39:33.546+08	2	1aa841f1-d3fb-4523-9b54-e601d350c745	t	f
318	温度	温度-show	Variable	\N	0.2	2	100	0	摄氏度	温度	2018-11-23 14:41:37.248+08	2018-11-23 14:41:37.252+08	2	c60b6244-e9f6-467c-93f9-48bcc4c54f56	t	f
299	pitid	编号	Variable		pit_1	0			\N		2018-10-26 16:33:28.053+08	2018-12-06 09:49:17.038+08	5	5cc45782-5d73-4354-b2c1-4904e284c95b	t	f
319	szyksensorid	传感器编号	Variable			0			\N		2018-12-20 14:54:02.335+08	2018-12-20 15:46:27.117+08	5	12cbda5e-cdad-4e5e-91b8-4489f816f00d	t	f
327	dis	采集粒度	Variable	\N	5	\N	600	0			2018-12-26 11:45:10.077+08	2018-12-26 11:45:10.08+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
252	channelid	通道	Variable		1	0	32	1	_		2018-08-16 10:57:12.79+08	2019-05-23 17:28:11.259+08	1	9aece67a-050e-41a4-9b7d-7d890212f385	t	f
312	nodeid	通道下节点	Variable		1	0	32	1	_	通道下的节点	2018-11-22 13:50:47.72+08	2019-05-23 17:29:04.07+08	1	9aece67a-050e-41a4-9b7d-7d890212f385	t	f
324	escape	是否转义	Constant		false	0					2018-12-26 11:45:10.06+08	2019-06-04 19:40:28.972+08	3	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
280	pmten	阈值下限	Variable		\N	2	1999	-9999			2018-10-25 15:26:49.666+08	2019-12-12 13:53:53.808+08	2	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	f	f
276	triggerjoin	参与触发方式	Variable	不参与,参与	参与	0					2018-09-27 10:04:07.998+08	2020-12-28 17:33:28.178+08	4	bb7d8ca9-1d07-48df-8d0f-b1439c0b990e	t	f
332	escape	转义	Variable		false	0				是否转义	2018-12-27 15:23:24.87+08	2018-12-27 15:41:37.312+08	3	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
323	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		供应商, 会影响控制帧	2018-12-26 11:45:10.054+08	2018-12-26 11:45:10.058+08	4	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
321	module	模块号	Variable		1102	0	9999	0			2018-12-21 16:53:27.331+08	2018-12-27 14:43:04.044+08	1	c00008f7-06d9-4907-b2e7-619374116b36	t	f
320	channel	通道	Variable		1	0	36	1	\N		2018-12-21 16:53:27.323+08	2018-12-27 14:43:08.6+08	1	c00008f7-06d9-4907-b2e7-619374116b36	t	f
328	id	ID	Variable	\N	12345678	\N	\N	\N	\N	SNO, ID等	2018-12-27 15:23:24.836+08	2018-12-27 15:23:24.848+08	5	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
329	port		Variable	\N	40005	\N	65535	1025			2018-12-27 15:23:24.855+08	2018-12-27 15:23:24.858+08	1	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
330	model	型号	Variable	\N		\N	\N	\N		不同型号标识	2018-12-27 15:23:24.86+08	2018-12-27 15:23:24.863+08	5	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
331	vendor	供应商	Variable	 才茂,四信,宏电,众山,RTU	 才茂	\N	\N	\N		供应商, 会影响控制帧处理	2018-12-27 15:23:24.864+08	2018-12-27 15:23:24.867+08	4	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
337	enabled	是否启用	Variable	\N	true	\N	\N	\N			2018-12-28 10:03:38.328+08	2018-12-28 10:03:38.33+08	3	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
333	protocol	协议	Variable	Modbus,iDAU	iDAU	\N	\N	\N		应用协议	2018-12-27 15:23:24.874+08	2018-12-27 15:23:24.876+08	4	0f0c11cf-71ae-4bba-b9ba-95442f1fb714	t	f
334	channel	通道	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	\N	\N	\N	\N		2018-12-28 10:03:38.311+08	2018-12-28 10:03:38.316+08	4	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
335	module	模块号	Variable	\N		\N	\N	\N			2018-12-28 10:03:38.319+08	2018-12-28 10:03:38.322+08	5	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
336	schannel	二级通道	Variable	\N	0	\N	32	0			2018-12-28 10:03:38.324+08	2018-12-28 10:03:38.326+08	1	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
326	id	ID	Variable		12345678	0					2018-12-26 11:45:10.071+08	2019-01-29 10:13:37.427+08	5	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
386	escape	是否转义	Variable	\N	true	\N	\N	\N			2019-03-15 15:08:47.046+08	2019-03-15 15:08:47.049+08	3	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
387	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N			2019-03-15 15:08:47.051+08	2019-03-15 15:08:47.054+08	4	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
388	id	ID	Variable	\N	12345678	\N	\N	\N			2019-03-15 15:08:47.057+08	2019-03-15 15:08:47.06+08	5	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
356	schannel	子通道号	Variable	\N	1	\N	32	0	\N		2019-01-21 11:43:37.879+08	2019-01-21 11:43:37.887+08	1	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
358	channel	通道号	Variable	\N	1	\N	64	1			2019-01-21 11:43:37.901+08	2019-01-21 11:43:37.904+08	1	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
359	module	模块号	Variable	\N		\N	\N	\N			2019-01-21 11:43:37.907+08	2019-01-21 11:43:37.91+08	5	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
365	switchinterval	485切换时间	Variable	\N	5	\N	3600	0	ms		2019-01-21 11:43:37.937+08	2019-01-21 11:43:37.939+08	1	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
366	pmtpf	PM2.5联动阈值	Variable	\N	\N	2	9999	-1999			2019-01-21 11:43:37.941+08	2019-01-21 11:43:37.944+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
367	pmten	PM10联动阈值	Variable	\N	\N	2	1999	-9999			2019-01-21 11:43:37.946+08	2019-01-21 11:43:37.949+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
374	noiseb	噪音参数B	Variable		0	6	9999	-1999	\N		2019-01-21 17:44:31.335+08	2019-01-21 17:44:38.834+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
369	pm25b	PM2.5参数B	Variable	\N	0	6	9999	-1999			2019-01-21 11:43:37.957+08	2019-01-21 11:43:37.96+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
368	pm25a	PM2.5参数A	Variable		1	6	9999	-1999			2019-01-21 11:43:37.951+08	2019-01-21 11:43:51.295+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
370	pm10a	PM10参数A	Variable	\N	1	6	9999	-1999	\N		2019-01-21 11:44:49.786+08	2019-01-21 11:44:49.786+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
371	pm10b	PM10参数B	Variable	\N	0	6	9999	-1999			2019-01-21 11:45:17.887+08	2019-01-21 11:45:17.887+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
372	noisea	噪音参数A	Variable	\N	1	6	9999	-1999			2019-01-21 11:46:49.306+08	2019-01-21 11:46:49.306+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
375	tempa	温度参数A	Variable	\N	1	6	9999	-1999			2019-01-21 17:45:09.368+08	2019-01-21 17:45:09.368+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
376	tempb	温度参数B	Variable	\N	0	6	9999	-1999			2019-01-21 17:45:37.924+08	2019-01-21 17:45:37.924+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
377	humia	湿度参数A	Variable	\N	1	6	9999	-1999			2019-01-21 17:46:00.049+08	2019-01-21 17:46:00.049+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
378	humib	湿度参数B	Variable	\N	0	6	9999	-1999			2019-01-21 17:46:25.787+08	2019-01-21 17:46:25.787+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
379	speeda	风速参数A	Variable		1	6	9999	-1999			2019-01-21 17:46:49.055+08	2019-01-21 17:47:48.275+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
380	speedb	风速参数B	Variable		0	6	9999	-1999			2019-01-21 17:47:06.865+08	2019-01-21 17:47:54.298+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
382	directionb	风向参数B	Variable	\N	0	6	9999	-1999			2019-01-21 17:48:22.206+08	2019-01-21 17:48:22.206+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
381	directiona	风向参数A	Variable		1	6	9999	-1999			2019-01-21 17:47:39.879+08	2019-02-26 09:49:41.71+08	2	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
340	cd	冷起延迟	Variable		80	0	3600	0	s		2018-12-31 13:48:28.295+08	2019-04-08 13:57:23.25+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	t
361	predelay	前延时	Variable		25	0	600	0	百毫秒		2019-01-21 11:43:37.918+08	2019-06-05 11:02:29.228+08	1	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
342	dm	数据上传模式	Variable	文件,MOP	MOP	0					2018-12-31 13:50:21.006+08	2019-04-08 13:57:13.283+08	4	a8f77633-9fe3-4228-b557-34a9108b3d50	t	t
341	wd	热起延迟	Variable		60	0	3600	0	s		2018-12-31 13:48:50.984+08	2019-04-08 13:57:29.591+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	t
339	predelay	前延时	Variable		25	0	600	0	百毫秒		2018-12-28 10:03:38.334+08	2019-06-05 11:01:57.146+08	1	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
343	diag	诊断	Variable		true	0					2019-01-02 17:59:19.503+08	2019-05-22 14:30:40.985+08	3	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
362	postdelay	后延时	Variable		35	0	600	0	百毫秒		2019-01-21 11:43:37.923+08	2019-06-05 11:02:50.551+08	1	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
389	dis	采集粒度	Variable		5	0	9999	0			2019-03-15 15:08:47.062+08	2019-09-04 17:16:26.257+08	1	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
357	stopbits	停止位	Variable	1位,1.5位,2位	1位	0				停止位：0=1位，1=1.5位，2=2位	2019-01-21 11:43:37.894+08	2019-12-24 11:48:27.922+08	4	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
360	databits	数据位	Variable	7位,8位,9位	8位	0				0= 7位，1=8位，2=9位(STM32只支持8位和9位)	2019-01-21 11:43:37.912+08	2019-12-24 11:49:09.159+08	4	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
383	moduleid	模块号	Variable	\N	1000	\N	\N	\N	\N		2019-03-15 15:08:46.74+08	2019-03-15 15:08:47.032+08	5	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
384	port	端口	Variable	\N	40001	\N	65535	1025		服务侧监听端口	2019-03-15 15:08:47.035+08	2019-03-15 15:08:47.038+08	1	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
385	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		供应商, 会影响控制帧	2019-03-15 15:08:47.04+08	2019-03-15 15:08:47.043+08	4	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
390	ot	DTU等待上线时间	Variable	\N	60	\N	60000	0			2019-03-15 15:08:47.068+08	2019-03-15 15:08:47.071+08	1	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
391	acq	等待应答时间	Variable	\N	11	\N	60000	0			2019-03-15 15:08:47.073+08	2019-03-15 15:08:47.076+08	1	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
392	delay	休眠延时	Variable	\N	5	\N	6000	0	\N		2019-03-15 15:09:16.459+08	2019-03-15 15:09:16.459+08	1	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
393	channel	通道号	Variable	\N	1	\N	128	1	\N		2019-03-15 15:38:31.04+08	2019-03-15 15:38:31.043+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
394	triggerjion	定时采样间隔	Variable	\N	0	\N	6000	0	s		2019-03-15 15:38:31.047+08	2019-03-15 15:38:31.05+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
395	triggersample	定时采样时长	Variable	\N	0	\N	6000	0	s		2019-03-15 15:38:31.052+08	2019-03-15 15:38:31.054+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
396	sampleduration	加速度触发采样时长	Variable	\N	0	\N	6000	0	s		2019-03-15 15:38:31.056+08	2019-03-15 15:38:31.059+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
397	filterfreq	滤波频率	Variable	\N	1	4	99999	-99999	Hz		2019-03-15 15:38:31.061+08	2019-03-15 15:38:31.064+08	2	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
398	samplefreq	采样频率	Variable	\N	1	4	99999	-99999	Hz		2019-03-15 15:38:31.066+08	2019-03-15 15:38:31.068+08	2	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
400	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-9999	g		2019-03-15 15:38:31.074+08	2019-03-15 15:38:31.077+08	2	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
401	lagpionts	滞后点数	Variable	\N	1	3	1024	0			2019-03-15 15:38:31.357+08	2019-03-15 15:38:31.36+08	2	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
402	postdelay	读取前延时	Variable	\N	35	\N	6000	1	百毫秒		2019-03-15 15:38:31.362+08	2019-03-15 15:38:31.365+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
403	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2019-03-15 15:38:31.367+08	2019-03-15 15:38:31.369+08	1	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
404	module	模块号	Variable	\N		\N	\N	\N			2019-03-15 15:38:31.371+08	2019-03-15 15:38:31.374+08	5	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
405	accerange	加速度范围	Variable	\N	0	\N	\N	\N			2019-03-15 15:38:31.375+08	2019-03-15 15:38:31.379+08	5	936f5813-db0d-4a2a-a7bc-8d323024140b	t	f
407	channel	通道号	Variable	\N	1	\N	64	1			2019-03-15 15:52:20.898+08	2019-03-15 15:52:20.902+08	1	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
408	module	模块号	Variable	\N		\N	\N	\N			2019-03-15 15:52:20.904+08	2019-03-15 15:52:20.907+08	5	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
409	schannel	子通道号	Variable	\N	1	\N	32	0			2019-03-15 15:52:20.909+08	2019-03-15 15:52:20.912+08	1	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
411	predelay	执行前延迟	Variable	\N	25	\N	600	0	百毫秒		2019-03-15 15:52:20.918+08	2019-03-15 15:52:20.921+08	1	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
412	postdelay	读取记录前延迟	Variable	\N	35	\N	600	0	百毫秒		2019-03-15 15:52:20.923+08	2019-03-15 15:52:20.925+08	1	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
415	switchinterval	485切换时间	Variable	\N	5	\N	3600	0	ms		2019-03-15 15:52:20.935+08	2019-03-15 15:52:20.937+08	1	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
427	plcaddress	PLC地址	Variable		40001	0	49999	40001	\N		2019-03-27 10:01:32.07+08	2019-03-27 10:15:18.786+08	1	68238334-fea4-4bc0-b1cd-98456c41faab	t	f
422	mudule	模块号	Variable		1	0	256	1	\N		2019-03-19 15:14:16.571+08	2019-03-19 15:15:50.986+08	2	b425fff8-940f-467d-81f7-b456d8ad0b22	t	f
423	friyu	\N	Variable	\N	true	\N	\N	\N	\N		2019-03-19 16:42:30.265+08	2019-03-19 16:42:30.274+08	3	ac94d09e-3893-4f3d-b42b-0825be96e0c7	t	f
424	lyzhu	gest	Variable	\N	\N	2	10	0	\N		2019-03-21 18:19:57.154+08	2019-03-21 18:19:57.158+08	2	592592f9-ffc9-4ba5-b330-8dd7597524e1	t	f
322	port	端口	Variable		40004	0	65535	1025	\N	服务侧监听端口	2018-12-26 11:45:10.045+08	2019-04-03 11:37:36.353+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
325	protocol	协议	Variable	Modbus,iDAU	iDAU	0					2018-12-26 11:45:10.066+08	2019-04-03 14:28:48.971+08	4	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
428	node_id	Point_ID	Variable		1	0			\N		2019-04-08 10:58:08.397+08	2019-04-08 11:47:34.846+08	5	b3cb9990-288c-4f0d-a91a-547254d1d9c6	t	f
414	baudrate	波特率	Variable	2400,9600,19200,115200	9600	0				波特率：0=2400，1=9600，2=19200， 3=115200	2019-03-15 15:52:20.931+08	2019-09-06 11:48:22.745+08	4	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
338	postdelay	后延时	Variable		35	0	600	0	百毫秒		2018-12-28 10:03:38.331+08	2019-06-05 11:02:09.585+08	1	6c0898f5-e8da-495b-8718-6efba367e3f1	t	f
426	node	设备节点号	Variable		1	0	31	0	\N		2019-03-25 11:14:17.035+08	2019-04-09 10:10:21.224+08	1	0d963823-0c01-40c1-acc4-74d4eaaea996	t	f
425	channel	通道	Variable		1	0	31	0	\N		2019-03-25 11:13:15.331+08	2019-04-09 10:10:31.041+08	1	c3c19462-3221-4cca-8288-13f960d7ea5b	t	f
430	node_id	节点号	Variable	\N	1	\N	512	1	\N		2019-04-23 14:58:50.846+08	2019-04-23 14:58:50.857+08	1	7bc18b0f-46d5-403a-893a-029eed333a46	t	f
111	channel	通道	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	0					2018-03-08 18:24:07.572+08	2019-04-23 17:21:20.805+08	4	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
413	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	0				校验位：0=无校验，1=奇校验，2=偶校验	2019-03-15 15:52:20.927+08	2019-09-06 11:48:43.414+08	4	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
433	1	\N	Variable	\N	\N	3	300	0	\N		2019-04-29 11:24:33.643+08	2019-04-29 11:24:33.648+08	2	115dada1-714c-496e-b060-455f1ab2510c	t	f
410	databits	数据位	Variable	7位,8位,9位	8位	0				数据位：0= 7位，1=8位，2=9位(STM32只支持8位和9位)	2019-03-15 15:52:20.914+08	2019-09-06 11:49:03.43+08	4	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
416	pmtpf	阈值上限	Variable		\N	2	9999	-1999			2019-03-15 15:52:20.939+08	2020-04-05 10:58:07.435+08	2	66a06e5d-a436-4d37-806b-919d8fd1c564	f	f
417	pmten	阈值下限	Variable		\N	2	1999	-9999			2019-03-15 15:52:20.943+08	2020-04-05 10:58:11.557+08	2	66a06e5d-a436-4d37-806b-919d8fd1c564	f	f
434	channel	关联通道	Variable		1	0			\N	a,b,c	2019-04-29 15:00:42.319+08	2019-04-29 15:01:16.061+08	5	971ef4ab-bbb7-41e2-a5a1-0111b3a9de99	t	f
471	Stopbit	停止位	Variable	0.5位,1位,1.5位,2位	1位	\N	\N	\N			2019-07-02 10:01:12.311+08	2019-07-02 10:01:12.311+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
229	uri	接口地址	Variable			0					2018-07-26 16:30:09.827+08	2019-05-06 14:54:39.762+08	5	71458c57-c197-4b3c-9171-2cdc5658201e	t	f
441	URL	URL	Variable	\N	tcp://10.8.25.21	\N	\N	\N	\N		2019-05-15 20:58:47.812+08	2019-05-15 20:58:47.812+08	5	78fdd0b8-8d18-43a4-bd10-58ceee295bcc	t	f
442	SubscribeTopic	Topic	Variable	\N		\N	\N	\N			2019-05-15 20:59:54.275+08	2019-05-15 20:59:54.275+08	5	78fdd0b8-8d18-43a4-bd10-58ceee295bcc	t	f
443	PublishTopic	\N	Variable	\N		\N	\N	\N	\N		2019-05-15 21:21:58.714+08	2019-05-15 21:21:58.714+08	5	78fdd0b8-8d18-43a4-bd10-58ceee295bcc	t	f
444	persistent	Persistent	Variable	\N	true	\N	\N	\N			2019-05-15 21:24:58.47+08	2019-05-15 21:24:58.47+08	3	78fdd0b8-8d18-43a4-bd10-58ceee295bcc	t	f
473	password	\N	Variable	\N		\N	\N	\N	\N		2019-07-18 12:04:05.655+08	2019-07-18 12:04:05.655+08	6	27a58884-75a3-4f5d-94f6-37cc15d419fb	t	f
445	escapegw	网关转义	Constant		false	0					2019-06-04 18:45:45.942+08	2019-06-04 20:38:02.505+08	3	a8f77633-9fe3-4228-b557-34a9108b3d50	t	f
116	postdelay	后延时	Variable		35	0	600	0	百毫秒		2018-03-08 18:24:07.879+08	2019-06-05 11:12:34.253+08	1	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
115	predelay	前延时	Variable		25	0	600	0	百毫秒		2018-03-08 18:24:07.593+08	2019-06-05 11:12:54.604+08	1	7667c2d9-3c04-4818-bfeb-42f43b60af77	t	f
446	CheckOption	检测传感器状态	Variable	\N	true	\N	\N	\N	\N		2019-06-26 17:24:33.851+08	2019-06-26 17:24:33.851+08	3	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
447	VibratSamplFreq	振弦采样频率	Variable	8K,16K,32K	16K	\N	\N	\N			2019-06-26 17:25:28.827+08	2019-06-26 17:25:28.827+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
448	AmplifierGain	放大器增益倍数	Variable	100倍,500倍	100倍	\N	\N	\N			2019-06-26 17:26:11.055+08	2019-06-26 17:26:11.055+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
449	Incentive	发送激励信号	Variable	\N	true	\N	\N	\N			2019-06-26 17:26:37.51+08	2019-06-26 17:26:37.51+08	3	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
451	VibratSpectrum	上传振弦频谱	Variable	\N	false	\N	\N	\N			2019-06-26 17:27:59.226+08	2019-06-26 17:27:59.226+08	3	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
487	triggermode	触发方式	Variable	绝对值,上升沿,下降沿,峰值	绝对值	\N	\N	\N			2019-08-22 11:10:43.442+08	2019-08-22 11:10:43.442+08	4	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
452	Spectrumway	频谱历史位置	Variable		1	0	5	0			2019-06-26 17:28:58.566+08	2019-06-26 17:35:11.677+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	t
454	Baudrate	波特率	Variable	9600,19200,115200	9600	\N	\N	\N			2019-06-26 17:37:20.03+08	2019-06-26 17:37:20.03+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
455	Databit	数据位	Variable	7,8,9	8	\N	\N	\N			2019-06-26 17:37:43.488+08	2019-06-26 17:37:43.488+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
456	Proofbit	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N			2019-06-26 17:38:28.535+08	2019-06-26 17:38:28.535+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
457	Stopbit	停止位	Variable	0.5位,1位,1.5位,2位	1位	\N	\N	\N			2019-06-26 17:39:12.206+08	2019-06-26 17:39:12.206+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
458	SwitchDelay	切换延迟时间	Variable	0ms,5ms,10ms,20ms	5ms	\N	\N	\N			2019-06-26 17:40:05.689+08	2019-06-26 17:40:05.689+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
461	CheckOption	检测传感器状态	Variable	\N	true	\N	\N	\N	\N		2019-07-02 09:56:19.679+08	2019-07-02 09:56:19.679+08	3	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
460	VibratSamplFreq	振弦采样频率	Variable	8K,16K,32K	16K	0					2019-07-02 09:44:38.918+08	2019-07-02 09:56:51.531+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	t
462	AmplifierGain	放大器增益倍数	Variable	100倍,500倍	100倍	\N	\N	\N			2019-07-02 09:57:33.615+08	2019-07-02 09:57:33.615+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
463	Incentive	发送激励信号	Variable	\N	true	\N	\N	\N			2019-07-02 09:57:53.699+08	2019-07-02 09:57:53.699+08	3	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
464	IncentiveMethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	单脉冲激励	\N	\N	\N			2019-07-02 09:58:20.529+08	2019-07-02 09:58:20.529+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
465	VibratSpectrum	上传振弦频谱	Variable	\N	false	\N	\N	\N			2019-07-02 09:58:46.882+08	2019-07-02 09:58:46.882+08	3	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
466	Spectrumway	频谱历史位置	Variable	\N	1	\N	5	0			2019-07-02 09:58:59.285+08	2019-07-02 09:58:59.285+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
467	SensorValue	频谱初值	Variable	\N	1500	\N	3800	380	Hz		2019-07-02 09:59:23.686+08	2019-07-02 09:59:23.686+08	1	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
468	Baudrate	波特率	Variable	9600,19200,115200	9600	\N	\N	\N			2019-07-02 09:59:45.104+08	2019-07-02 09:59:45.104+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
469	Databit	数据位	Variable	7,8,9	8	\N	\N	\N			2019-07-02 10:00:11.244+08	2019-07-02 10:00:11.244+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
470	Proofbit	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N			2019-07-02 10:00:45.546+08	2019-07-02 10:00:45.546+08	4	d5f2066b-b4d8-4e26-8991-0c068495e2c9	t	f
480	password	\N	Variable	\N		\N	\N	\N	\N		2019-08-09 13:13:10.088+08	2019-08-09 13:13:10.092+08	5	da330369-58e7-4bce-8bc1-3c0a062dd1a0	t	f
488	duration	时长	Variable	\N	2	\N	30	1	s		2019-08-22 11:12:26.146+08	2019-08-22 11:12:26.146+08	1	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
489	lagpoint	滞后点数	Variable	\N	0	\N	2048	0			2019-08-22 11:13:54.756+08	2019-08-22 11:13:54.756+08	1	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
490	triglevel	触发电平	Variable	\N	30	2	300	10	mV		2019-08-22 11:15:01.683+08	2019-08-22 11:15:01.683+08	2	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
491	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2019-08-22 11:15:17.756+08	2019-08-22 11:15:17.756+08	2	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
481	tj	关联	Variable	\N	false	\N	\N	\N	\N		2019-08-22 10:57:05.739+08	2019-08-22 10:57:05.739+08	3	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
482	channel	通道	Variable	 1,2,3,4,5,6,7,8	 1	\N	\N	\N			2019-08-22 10:57:59.496+08	2019-08-22 10:57:59.496+08	4	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
483	das	去直流	Variable	\N	true	\N	\N	\N			2019-08-22 10:58:27.367+08	2019-08-22 10:58:27.367+08	3	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
484	enable	启用	Variable	\N	true	\N	\N	\N			2019-08-22 10:59:05.843+08	2019-08-22 10:59:05.843+08	3	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
485	filterfreq	滤波频率	Variable	\N	128	\N	2048	64	Hz		2019-08-22 11:00:01.093+08	2019-08-22 11:00:01.093+08	1	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
486	amplification	放大倍数	Variable	1,10,100,1000	1	\N	\N	\N			2019-08-22 11:01:17.577+08	2019-08-22 11:01:17.577+08	4	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
492	f0	频率初值	Variable	\N	0	4	9999	-9999	Hz		2019-08-22 11:15:53.108+08	2019-08-22 11:15:53.108+08	2	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
493	kt	温度补偿系数	Variable	\N	0	4	999	-999			2019-08-22 11:16:18.861+08	2019-08-22 11:16:18.861+08	2	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
494	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2019-08-22 11:17:10.098+08	2019-08-22 11:17:10.098+08	1	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
495	postdelay	读取前延时	Variable	\N	35	\N	6000	0	百毫秒		2019-08-22 11:17:34.942+08	2019-08-22 11:17:34.942+08	1	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
496	channel	通道号	Variable	\N	1	\N	64	1			2019-08-22 11:17:58.349+08	2019-08-22 11:17:58.349+08	1	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
497	samplefreq	采样频率	Variable	\N	1024	\N	2048	256	Hz		2019-08-22 11:18:15.783+08	2019-08-22 11:18:15.783+08	1	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
498	t0	温度初值	Variable	\N	20	4	999	-999	℃		2019-08-22 11:18:21.831+08	2019-08-22 11:18:21.831+08	2	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
502	module	模块号	Variable	\N		\N	\N	\N			2019-08-22 11:20:13.555+08	2019-08-22 11:20:13.555+08	5	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
504	dcdriftadj	直流漂移调整系数	Variable	\N	0	2	6255	0			2019-08-22 11:21:33.312+08	2019-08-22 11:21:33.312+08	2	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
507	amplitudeadj	幅值修正参数	Variable	\N	0	2	51241	0			2019-08-22 11:22:33.405+08	2019-08-22 11:22:33.405+08	2	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
508	frequencyid	频谱ID	Variable	\N	1	\N	\N	\N			2019-08-22 11:23:07.881+08	2019-08-22 11:23:07.881+08	5	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
509	triggerjoin	参与触发方式	Variable	不参与,参与	参与	\N	\N	\N			2019-08-22 11:23:46.257+08	2019-08-22 11:23:46.257+08	4	6d52db04-1cd6-4b5b-b6fb-5f6e4de3d500	t	f
510	collectoption	采集选项	Variable	1,2,3	3	\N	\N	\N		1，只采集温度，2，只采集频率，3，采集频率与温度	2019-08-22 11:23:51.211+08	2019-08-22 11:23:51.211+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
511	fid	公式ID	Variable	\N	1	\N	\N	\N			2019-08-22 11:24:36.285+08	2019-08-22 11:24:36.285+08	5	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
499	vibratsamplfreq	采样频率	Variable	8K,16K,32K	16K	0				0=8K，1 =16K，2=32K	2019-08-22 11:18:56.688+08	2019-09-06 11:51:14.632+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
500	checkoption	是否检测线状态	Variable	是,否	是	0				0=是，1=否(默认为0)	2019-08-22 11:19:24.116+08	2019-09-06 11:52:37.165+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
501	vibratspectrum	是否上传振弦频谱	Variable	 是,否	否	0				0 =是，1 =否(默认为1)	2019-08-22 11:19:53.88+08	2019-09-06 11:52:52.706+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
503	colgain	放大增益倍数	Variable	100倍,500倍	100倍	0				0=100倍，1=500倍（默认0）	2019-08-22 11:20:39.361+08	2019-09-06 11:53:08.537+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
505	incentivemethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	0				0=单脉冲激励，1=多脉冲激励，2=共振激励(默认为1)	2019-08-22 11:21:36.235+08	2019-09-06 11:53:26.716+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
506	incentive	是否发激励信号	Variable	是,否	是	0				0=是，1=否(默认为0)	2019-08-22 11:22:04.498+08	2019-09-06 11:53:37.68+08	4	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
220	vibratspectrum	是否上传振弦频谱	Variable	是,否	否	0				0 =是，1 =否(默认为1)	2018-07-24 09:46:52.296+08	2019-09-04 16:52:21.477+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
217	colgain	放大增益倍数	Variable	100倍,500倍	100倍	0				0=100倍，1=500倍（默认0）	2018-07-24 09:44:05.284+08	2019-09-04 16:55:41.406+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
536	channel	通道	Variable	1,2,3,4,5,6,7,8	1	\N	\N	\N			2019-10-24 11:15:20.442+08	2019-10-24 11:15:20.445+08	4	4714efc4-d103-4619-9895-28e67d9100e2	t	f
218	incentive	是否发激励信号	Variable	是,否	是	0				0=是，1=否(默认为0)	2018-07-24 09:45:04.674+08	2019-09-04 16:56:24.228+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
219	checkoption	是否检测线状态	Variable	是,否	是	0				0=是，1=否(默认为0)	2018-07-24 09:45:57.549+08	2019-09-04 16:56:45.117+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
196	stopbits	停止位	Variable	1位,1.5位,2位	1位	0				停止位：0=1位，1=1.5位，2=2位	2018-07-17 16:52:22.51+08	2019-09-04 16:57:52.288+08	4	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
194	databits	数据位	Variable	7位,8位,9位	8位	0				数据位：0= 7位，1=8位，2=9位(STM32只支持8位和9位)	2018-07-17 16:47:34.647+08	2019-09-04 16:58:16.812+08	4	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
195	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	0				校验位：0=无校验，1=奇校验，2=偶校验	2018-07-17 16:51:09.972+08	2019-09-04 16:58:32.626+08	4	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
193	baudrate	波特率	Variable	2400,9600,19200,115200	9600	0				波特率：0=2400，1=9600，2=19200， 3=115200	2018-07-17 16:45:43.188+08	2019-09-04 16:58:52.427+08	4	4ad52552-2c20-4330-b6e4-b33cc5cc7ef1	t	f
222	incentivemethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	0				0=单脉冲激励，1=多脉冲激励，2=共振激励(默认为0)	2018-07-24 09:48:50.461+08	2019-09-04 17:00:15.146+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
239	dis	采集粒度	Variable		5	0	9999	0			2018-08-01 16:21:08.225+08	2019-09-04 17:18:15.547+08	1	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
527	etime	指定时间	Variable	\N	00:00:00	\N	\N	\N	\N		2019-09-04 17:20:26.781+08	2019-09-04 17:20:26.781+08	5	6eeb1913-71e2-40b2-ae39-c8750cbdefd7	t	f
528	etime	指定时间	Variable	\N	00:00:00	\N	\N	\N	\N		2019-09-04 17:21:23.81+08	2019-09-04 17:21:23.81+08	5	6f9486b4-6b22-4fbd-a73a-9334e711badb	t	f
406	stopbits	停止位	Variable	1位,1.5位,2位	1位	0				停止位：0=1位，1=1.5位，2=2位	2019-03-15 15:52:20.89+08	2019-09-06 11:50:00.953+08	4	66a06e5d-a436-4d37-806b-919d8fd1c564	t	f
530	moduleid	模块号	Constant	\N	1000	\N	\N	\N	\N		2019-09-16 14:39:50.687+08	2019-09-16 14:39:50.687+08	1	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
221	vibratsamplfreq	采样频率	Variable	8K,16K,32K	16K	0				0=8K，1 =16K，2=32K(默认为1)	2018-07-24 09:48:10.218+08	2019-09-19 11:28:30.152+08	4	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
531	frequency	配置频率	Variable	\N	0	\N	99999	0	Hz		2019-09-19 14:44:12.396+08	2019-09-19 14:44:12.396+08	1	118383e6-1b61-4e15-8dee-a1a2a61b531e	t	f
532	aaa	\N	Variable	\N		\N	\N	\N	\N		2019-09-24 11:32:56.596+08	2019-09-24 11:32:56.599+08	5	0919de6f-bf9e-4ef6-85b4-108fee899605	t	f
533	qosofdatatopic	\N	Variable	0,1,2	0	\N	\N	\N	\N		2019-09-25 16:03:11.256+08	2019-09-25 16:03:11.256+08	4	27a58884-75a3-4f5d-94f6-37cc15d419fb	t	f
537	das	去直流	Variable	\N	true	\N	\N	\N			2019-10-24 11:15:20.447+08	2019-10-24 11:15:20.449+08	3	4714efc4-d103-4619-9895-28e67d9100e2	t	f
538	enable	启用	Variable	\N	true	\N	\N	\N			2019-10-24 11:15:20.451+08	2019-10-24 11:15:20.454+08	3	4714efc4-d103-4619-9895-28e67d9100e2	t	f
556	dataurl	dataUrl	Variable	\N	https://api.yespowering.cn/dev/data/	\N	\N	\N	\N		2019-10-29 15:35:05.355+08	2019-10-29 15:35:05.355+08	5	c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	t	f
535	tj	关联	Variable	\N	false	\N	\N	\N	\N		2019-10-24 11:15:20.434+08	2019-10-24 11:15:20.439+08	3	4714efc4-d103-4619-9895-28e67d9100e2	t	f
539	filterfreq	滤波频率	Variable	\N	128	\N	2048	64	Hz		2019-10-24 11:15:20.456+08	2019-10-24 11:15:20.458+08	1	4714efc4-d103-4619-9895-28e67d9100e2	t	f
540	amplification	放大倍数	Variable	1,10,100,1000	1	\N	\N	\N			2019-10-24 11:15:20.459+08	2019-10-24 11:15:20.461+08	4	4714efc4-d103-4619-9895-28e67d9100e2	t	f
541	triggermode	触发方式	Variable	绝对值,上升沿,下降沿,峰值	绝对值	\N	\N	\N			2019-10-24 11:15:20.463+08	2019-10-24 11:15:20.465+08	4	4714efc4-d103-4619-9895-28e67d9100e2	t	f
542	duration	时长	Variable	\N	2	\N	30	1	s		2019-10-24 11:15:20.467+08	2019-10-24 11:15:20.469+08	1	4714efc4-d103-4619-9895-28e67d9100e2	t	f
543	lagpoint	滞后点数	Variable	\N	0	\N	2048	0			2019-10-24 11:15:20.47+08	2019-10-24 11:15:20.472+08	1	4714efc4-d103-4619-9895-28e67d9100e2	t	f
544	triglevel	触发电平	Variable	\N	30	2	300	10	mV		2019-10-24 11:15:20.474+08	2019-10-24 11:15:20.476+08	2	4714efc4-d103-4619-9895-28e67d9100e2	t	f
545	samplefreq	采样频率	Variable	\N	1024	\N	2048	32	Hz		2019-10-24 11:15:20.477+08	2019-10-24 11:15:20.479+08	1	4714efc4-d103-4619-9895-28e67d9100e2	t	f
546	module	模块号	Variable	\N		\N	\N	\N			2019-10-24 11:15:20.48+08	2019-10-24 11:15:20.482+08	5	4714efc4-d103-4619-9895-28e67d9100e2	t	f
547	dcdriftadj	直流漂移调整系数	Variable	\N	0	2	6255	0			2019-10-24 11:15:20.484+08	2019-10-24 11:15:20.485+08	2	4714efc4-d103-4619-9895-28e67d9100e2	t	f
548	amplitudeadj	幅值修正参数	Variable	\N	0	2	51241	0			2019-10-24 11:15:20.487+08	2019-10-24 11:15:20.488+08	2	4714efc4-d103-4619-9895-28e67d9100e2	f	f
549	triggerjoin	参与触发方式	Variable	不参与,参与	参与	\N	\N	\N			2019-10-24 11:15:20.49+08	2019-10-24 11:15:20.491+08	4	4714efc4-d103-4619-9895-28e67d9100e2	t	f
557	frequency	配置频率	Variable	\N	0	6	99999	0	Hz		2019-10-31 16:58:40.417+08	2019-10-31 16:58:40.417+08	2	5afb303e-0963-4e23-91f7-2b41f543aaf6	t	f
554	pw	密码	Constant	\N	 88888888	\N	\N	\N			2019-10-29 10:39:29.521+08	2019-10-29 10:39:29.521+08	5	c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	t	f
555	account	账号	Constant	\N	18673077286	\N	\N	\N			2019-10-29 10:39:54.394+08	2019-10-29 10:39:54.394+08	5	c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	t	f
558	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2019-11-08 16:23:57.798+08	2019-11-08 16:23:57.798+08	2	25642488-1945-4865-81e7-e9593c12d208	t	f
553	boxid	云盒编号	Constant		35E81PV032	0					2019-10-29 10:39:00.875+08	2019-10-29 15:09:29.529+08	5	c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	t	f
552	tokenurl	获取tokenUrl	Constant		https://api.yespowering.cn/login/	0					2019-10-29 10:38:13.199+08	2019-10-29 15:33:53.42+08	5	c5cc09bc-6e3b-44f6-a8c4-ec174ae18707	t	f
559	f0	频率初值	Variable	\N	0	4	9999	-9999	Hz		2019-11-08 16:27:43.686+08	2019-11-08 16:27:43.686+08	2	25642488-1945-4865-81e7-e9593c12d208	t	f
560	kt	温度补偿系数	Variable	\N	0	4	999	-999			2019-11-08 16:28:25.358+08	2019-11-08 16:28:25.358+08	2	25642488-1945-4865-81e7-e9593c12d208	t	f
561	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2019-11-08 16:29:14.483+08	2019-11-08 16:29:14.483+08	1	25642488-1945-4865-81e7-e9593c12d208	t	f
562	postdelay	读取前延时	Variable	\N	35	\N	6000	0	百毫秒		2019-11-08 16:29:58.803+08	2019-11-08 16:29:58.803+08	1	25642488-1945-4865-81e7-e9593c12d208	t	f
563	channel	通道号	Variable	\N	1	\N	64	1			2019-11-08 16:30:41.723+08	2019-11-08 16:30:41.723+08	1	25642488-1945-4865-81e7-e9593c12d208	t	f
564	t0	温度初值	Variable	\N	20	4	999	-999	℃		2019-11-08 16:31:32.848+08	2019-11-08 16:31:32.848+08	2	25642488-1945-4865-81e7-e9593c12d208	t	f
565	frequencyid	频谱ID	Variable	\N	1	\N	\N	\N			2019-11-08 16:32:22.652+08	2019-11-08 16:32:22.652+08	5	25642488-1945-4865-81e7-e9593c12d208	t	f
566	collectoption	采集选项	Variable	1,2,3	3	\N	\N	\N		1，只采集温度，2，只采集频率，3，采集频率与温度	2019-11-08 16:33:21.527+08	2019-11-08 16:33:21.527+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
567	fid	公式ID	Variable	\N	1	\N	\N	\N			2019-11-08 16:34:06.944+08	2019-11-08 16:34:06.944+08	5	25642488-1945-4865-81e7-e9593c12d208	t	f
568	vibratsamplfreq	采样频率	Variable	8K,16K,32K	16K	\N	\N	\N		0=8K，1 =16K，2=32K	2019-11-08 16:34:55.432+08	2019-11-08 16:34:55.432+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
569	checkoption	是否检测线状态	Variable	是,否	是	\N	\N	\N		0=是，1=否(默认为0)	2019-11-08 16:35:52.141+08	2019-11-08 16:35:52.141+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
570	vibratspectrum	是否上传振弦频谱	Variable	是,否	否	\N	\N	\N		0 =是，1 =否(默认为1)	2019-11-08 16:36:49.299+08	2019-11-08 16:36:49.299+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
571	colgain	放大增益倍数	Variable	100倍,500倍	100倍	\N	\N	\N		0=100倍，1=500倍（默认0）	2019-11-08 16:38:43.24+08	2019-11-08 16:38:43.24+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
572	incentivemethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	\N	\N	\N		0=单脉冲激励，1=多脉冲激励，2=共振激励(默认为1)	2019-11-08 16:39:40.932+08	2019-11-08 16:39:40.932+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
573	incentive	是否发激励信号	Variable	是,否	是	\N	\N	\N		0=是，1=否(默认为0)	2019-11-08 16:40:38.109+08	2019-11-08 16:40:38.109+08	4	25642488-1945-4865-81e7-e9593c12d208	t	f
574	frequency	配置频率	Variable	\N	0	6	99999	0	Hz		2019-11-08 16:41:19.664+08	2019-11-08 16:41:19.664+08	2	25642488-1945-4865-81e7-e9593c12d208	t	f
575	channel	通道号	Variable	\N	1	\N	64	1	\N		2019-11-08 16:44:19.06+08	2019-11-08 16:44:19.06+08	1	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
576	module	模块号	Variable	\N		\N	\N	\N			2019-11-08 16:44:38.642+08	2019-11-08 16:44:38.642+08	5	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
577	schannel	子通道号	Variable	\N	1	\N	32	0			2019-11-08 16:45:09.704+08	2019-11-08 16:45:09.704+08	1	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
578	predelay	执行前延迟	Variable	\N	25	\N	600	0	百毫秒		2019-11-08 16:45:48.199+08	2019-11-08 16:45:48.199+08	1	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
579	postdelay	读取记录前延迟	Variable	\N	35	\N	600	0	百毫秒		2019-11-08 16:47:07.966+08	2019-11-08 16:47:07.966+08	1	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
580	switchinterval	485切换时间	Variable	\N	5	\N	3600	0	ms		2019-11-08 16:47:47.646+08	2019-11-08 16:47:47.646+08	1	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
581	pmtpf	阈值上限	Variable	\N	\N	2	9999	-1999			2019-11-08 16:48:21.636+08	2019-11-08 16:48:21.636+08	2	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
582	pmten	阈值下限	Variable	\N	\N	2	1999	-9999			2019-11-08 16:48:58.549+08	2019-11-08 16:48:58.549+08	2	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
583	baudrate	波特率	Variable	2400,9600,19200,115200	9600	\N	\N	\N		波特率：0=2400，1=9600，2=19200， 3=115200	2019-11-08 16:49:39.106+08	2019-11-08 16:49:39.106+08	4	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
584	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N	校验位：0=无校验，1=奇校验，2=偶校		2019-11-08 16:50:20.685+08	2019-11-08 16:50:20.685+08	4	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
706	Baudrate	波特率	Variable	9600,19200,115200	9600	\N	\N	\N			2020-04-08 14:07:37.019+08	2020-04-08 14:07:37.022+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
585	databits	数据位	Variable	7位,8位,9位	8位	\N	\N	\N		数据位：0= 7位，1=8位，2=9位(STM32只支持8位和9位)	2019-11-08 16:51:04.226+08	2019-11-08 16:51:04.226+08	4	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
586	stopbits	停止位	Variable	 1位,1.5位,2位	 1位	\N	\N	\N		停止位：0=1位，1=1.5位，2=2位	2019-11-08 16:51:46.47+08	2019-11-08 16:51:46.47+08	4	dff00e7d-1fb2-443e-be6a-615214932ee6	t	f
587	channel	通道	Variable	\N	1	\N	128	1	\N		2019-11-08 16:54:20.431+08	2019-11-08 16:54:20.431+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
588	triggerjion	定时采样间隔	Variable	\N	0	\N	6000	0	s		2019-11-08 16:54:54.276+08	2019-11-08 16:54:54.276+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
589	triggersample	定时采样时长	Variable	\N	0	\N	6000	0	s		2019-11-08 16:55:32.095+08	2019-11-08 16:55:32.095+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
590	sampleduration	加速度触发采样时长	Variable	\N	0	\N	6000	0	s		2019-11-08 16:56:09.112+08	2019-11-08 16:56:09.112+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
591	filterfreq	滤波频率	Variable	\N	1	4	99999	-99999	Hz		2019-11-08 16:56:50.851+08	2019-11-08 16:56:50.851+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
592	samplefreq	采样频率	Variable	\N	1	4	99999	-99999	Hz		2019-11-08 16:57:51.353+08	2019-11-08 16:57:51.353+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
593	accelerationrange	加速度范围	Variable	\N	1	4	1024	0			2019-11-08 16:58:42.269+08	2019-11-08 16:58:42.269+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
596	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-9999	g		2019-11-08 17:03:05.401+08	2019-11-08 17:03:05.401+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
597	lagpionts	滞后点数	Variable	\N	1	3	1024	0			2019-11-08 17:03:47.37+08	2019-11-08 17:03:47.37+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
598	postdelay	读取前延时	Variable	\N	35	\N	6000	1	百毫秒		2019-11-08 17:04:27.126+08	2019-11-08 17:04:27.126+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
599	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2019-11-08 17:05:09.686+08	2019-11-08 17:05:09.686+08	1	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
600	module	模块号	Variable	\N		\N	\N	\N			2019-11-08 17:06:02.075+08	2019-11-08 17:06:02.075+08	5	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
601	accerange	加速度范围	Variable	\N	0	\N	\N	\N			2019-11-08 17:06:29.129+08	2019-11-08 17:06:29.129+08	5	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
602	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-9999	g		2019-11-08 17:07:20.226+08	2019-11-08 17:07:20.226+08	2	8751bbb1-2603-44bd-aa33-a7ad5e31a3ba	t	f
603	escape	是否转义	Variable	\N	true	\N	\N	\N	\N		2019-11-08 17:09:43.804+08	2019-11-08 17:09:43.804+08	3	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
604	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N			2019-11-08 17:10:12.186+08	2019-11-08 17:10:12.186+08	4	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
605	id	ID	Variable	\N	12345678	\N	\N	\N			2019-11-08 17:10:39.289+08	2019-11-08 17:10:39.289+08	5	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
606	dis	采集粒度	Variable	\N	5	\N	9999	0			2019-11-08 17:11:12.201+08	2019-11-08 17:11:12.201+08	1	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
607	moduleid	模块号	Variable	\N	1000	\N	\N	\N			2019-11-08 17:11:30.739+08	2019-11-08 17:11:30.739+08	5	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
608	port	端口	Variable	\N	40001	\N	65535	1025		服务侧监听端口	2019-11-08 17:12:21.228+08	2019-11-08 17:12:21.228+08	1	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
609	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		供应商, 会影响控制帧	2019-11-08 17:13:01.979+08	2019-11-08 17:13:01.979+08	4	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
610	ot	DTU等待上线时间	Variable	\N	60	\N	60000	0			2019-11-08 17:13:44.581+08	2019-11-08 17:13:44.581+08	1	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
611	acq	等待应答时间	Variable	\N	11	\N	60000	0			2019-11-08 17:14:12.882+08	2019-11-08 17:14:12.882+08	1	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
612	delay	休眠延时	Variable	\N	5	\N	6000	0			2019-11-08 17:14:43.176+08	2019-11-08 17:14:43.176+08	1	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
613	etime	指定时间	Variable	\N	00:00:00	\N	\N	\N			2019-11-08 17:15:08.097+08	2019-11-08 17:15:08.097+08	5	0be63da7-6ab6-4d1f-830d-dd32add170c6	t	f
614	interval	发送时延(ms)	Variable	\N	1000	0	5000	200	\N	发送时延,毫秒	2019-11-27 09:27:06+08	2019-11-27 09:27:09+08	1	3dfadb0e-7608-49e1-aa43-24f7442b424a	f	f
615	packageSize	单包大小(Byte)	Variable	\N	512	0	2048	128	\N	单包大小,字节	2019-11-27 09:28:48+08	2019-11-27 09:28:51+08	1	3dfadb0e-7608-49e1-aa43-24f7442b424a	f	f
182	Qos	发布Qos	Variable		2	0					2018-06-25 16:37:11.537+08	2019-12-06 17:33:27.355+08	5	639a37c9-637b-46e7-97ac-7b5991155e02	f	f
616	sensortype	传感器类型	Constant	\N	streetlight	\N	\N	\N	°	无	2019-12-09 15:34:49.939+08	2019-12-09 15:34:49.939+08	5	6361ba5f-8588-4685-a107-b692e3592f17	t	f
450	IncentiveMethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	0					2019-06-26 17:27:38.307+08	2019-12-17 13:44:10.147+08	4	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	f
453	SensorValue	共振频率	Variable		1500	0	3800	380	Hz		2019-06-26 17:30:15.488+08	2019-12-17 14:49:34.896+08	1	d0e8f529-c1bf-4146-beef-cd3056ea9787	t	t
620	URL	主机地址	Variable	\N		\N	\N	\N	\N		2019-12-20 09:49:46.244+08	2019-12-20 09:49:46.307+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	t	f
702	AmplifierGain	放大器增益倍数	Variable	100倍,500倍	100倍	\N	\N	\N			2020-04-08 14:07:36.718+08	2020-04-08 14:07:37+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
703	Incentive	发送激励信号	Variable	\N	true	\N	\N	\N			2020-04-08 14:07:37.003+08	2020-04-08 14:07:37.006+08	3	451db320-593b-4777-9848-9d778427dea5	t	f
704	VibratSpectrum	上传振弦频谱	Variable	\N	false	\N	\N	\N			2020-04-08 14:07:37.009+08	2020-04-08 14:07:37.011+08	3	451db320-593b-4777-9848-9d778427dea5	t	f
705	Spectrumway	频谱历史位置	Variable	\N	1	\N	5	0			2020-04-08 14:07:37.014+08	2020-04-08 14:07:37.016+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
621	ClientID	客户端ID	Variable			0					2019-12-20 09:49:46.314+08	2019-12-20 10:00:22.744+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
622	Persistent	长连接	Variable		true	0					2019-12-20 09:49:46.322+08	2019-12-20 10:00:27.991+08	3	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
623	Username	用户	Variable			0					2019-12-20 09:49:46.329+08	2019-12-20 10:00:32.287+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
624	Password	密码	Variable			0					2019-12-20 09:49:46.336+08	2019-12-20 10:00:35.752+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
625	SubscribeTopic	订阅主题	Variable			0					2019-12-20 09:49:46.342+08	2019-12-20 10:00:45.27+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	t	f
626	PublishTopic	发布主题	Variable			0					2019-12-20 09:49:46.351+08	2019-12-20 10:00:48.934+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
627	Qos	发布Qos	Variable		2	0					2019-12-20 09:49:46.358+08	2019-12-20 10:00:51.811+08	5	e88f4b90-93c9-4a17-b425-b118ce4f4695	f	f
363	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	0				校验位：0=无校验，1=奇校验，2=偶校验	2019-01-21 11:43:37.927+08	2019-12-24 11:49:44.889+08	4	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
364	baudrate	波特率	Variable	2400,9600,19200,115200	9600	0				0=2400，1=9600，2=19200， 3=115200	2019-01-21 11:43:37.932+08	2019-12-24 11:50:15.77+08	4	15b373b0-30f8-471e-8900-cb62e28d0e50	t	f
628	module	模块号	Variable	\N		\N	\N	\N	\N		2019-12-24 14:34:32.419+08	2019-12-24 14:34:32.432+08	5	c1b7ebc4-5a06-40c2-a231-f3fa95094a26	t	f
629	channel	通道号	Variable	\N	1	\N	99	1			2019-12-24 14:34:32.436+08	2019-12-24 14:34:32.44+08	1	c1b7ebc4-5a06-40c2-a231-f3fa95094a26	t	f
633	upload	上报粒度	Variable		1	0	99999	1	min		2019-12-24 15:08:23.095+08	2019-12-24 15:08:57.047+08	1	c1b7ebc4-5a06-40c2-a231-f3fa95094a26	f	f
634	plus	加报粒度	Variable		1	0	99999	1	min		2019-12-24 15:08:52.7+08	2019-12-24 15:09:06.755+08	1	c1b7ebc4-5a06-40c2-a231-f3fa95094a26	f	f
707	Databit	数据位	Variable	7,8,9	8	\N	\N	\N			2020-04-08 14:07:37.024+08	2020-04-08 14:07:37.027+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
708	Proofbit	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N			2020-04-08 14:07:37.029+08	2020-04-08 14:07:37.032+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
709	Stopbit	停止位	Variable	0.5位,1位,1.5位,2位	1位	\N	\N	\N			2020-04-08 14:07:37.035+08	2020-04-08 14:07:37.038+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
710	SwitchDelay	切换延迟时间	Variable	0ms,5ms,10ms,20ms	5ms	\N	\N	\N			2020-04-08 14:07:37.04+08	2020-04-08 14:07:37.043+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
711	IncentiveMethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	\N	\N	\N			2020-04-08 14:07:37.045+08	2020-04-08 14:07:37.048+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
712	SensorValue	共振频率	Variable	\N	1500	\N	3800	380	Hz		2020-04-08 14:07:37.05+08	2020-04-08 14:07:37.052+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
765	checkoption	是否检测线状态	Variable	 是,否	 是	\N	\N	\N			2020-04-09 15:37:03.758+08	2020-04-09 15:37:03.763+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
766	vibratspectrum	是否上传振弦频谱	Variable	是,否	是	\N	\N	\N			2020-04-09 15:37:03.766+08	2020-04-09 15:37:03.769+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
767	colgain	放大增益倍数	Variable	100倍,500倍	100倍	0					2020-04-09 15:37:03.773+08	2020-04-09 15:37:18.372+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
641	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2020-01-06 10:48:36.884+08	2020-01-06 10:48:36.887+08	2	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
642	f0	频率初值	Variable	\N	0	4	9999	-9999	HZ		2020-01-06 10:48:36.889+08	2020-01-06 10:48:36.892+08	2	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
643	kt	温度补偿系数	Variable	\N	0	4	999	-999			2020-01-06 10:48:36.893+08	2020-01-06 10:48:36.895+08	2	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
644	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2020-01-06 10:48:36.897+08	2020-01-06 10:48:36.899+08	1	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
645	postdelay	读取前延时	Variable	\N	35	\N	6000	0	百毫秒		2020-01-06 10:48:36.901+08	2020-01-06 10:48:36.903+08	1	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
646	channel	通道号	Variable	\N	1	\N	64	1			2020-01-06 10:48:36.904+08	2020-01-06 10:48:36.906+08	1	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
647	t0	温度初值	Variable	\N	20	4	999	-999	℃		2020-01-06 10:48:36.908+08	2020-01-06 10:48:36.91+08	2	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
648	frequencyid	频谱ID	Variable	\N	1	\N	\N	\N			2020-01-06 10:48:36.912+08	2020-01-06 10:48:36.915+08	5	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
649	collectoption	采集选项	Variable	1,2,3	3	\N	\N	\N		1，只采集温度，2，只采集频率，3，采集频率与温度	2020-01-06 10:48:36.916+08	2020-01-06 10:48:36.918+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
650	fid	公式ID	Variable	\N	1	\N	\N	\N			2020-01-06 10:48:36.92+08	2020-01-06 10:48:36.922+08	5	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
651	vibratsamplfreq	采样频率	Variable	8K,16K,32K	16K	\N	\N	\N		0=8K，1 =16K，2=32K	2020-01-06 10:48:36.923+08	2020-01-06 10:48:36.925+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
652	checkoption	是否检测线状态	Variable	是,否	是	\N	\N	\N		0=是，1=否(默认为0)	2020-01-06 10:48:36.926+08	2020-01-06 10:48:36.928+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
653	vibratspectrum	是否上传振弦频谱	Variable	是,否	否	\N	\N	\N		0 =是，1 =否(默认为1)	2020-01-06 10:48:36.929+08	2020-01-06 10:48:36.931+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
654	colgain	放大增益倍数	Variable	100倍,500倍	100倍	\N	\N	\N		0=100倍，1=500倍（默认0）	2020-01-06 10:48:36.932+08	2020-01-06 10:48:36.934+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
655	incentivemethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	\N	\N	\N		0=单脉冲激励，1=多脉冲激励，2=共振激励(默认为1)	2020-01-06 10:48:36.937+08	2020-01-06 10:48:36.939+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
656	incentive	是否发激励信号	Variable	是,否	是	\N	\N	\N		0=是，1=否(默认为0)	2020-01-06 10:48:36.941+08	2020-01-06 10:48:36.942+08	4	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
657	frequency	配置频率	Variable	\N	0	6	99999	-99999	HZ		2020-01-06 10:48:36.944+08	2020-01-06 10:48:36.947+08	2	6e48d81c-5e9a-4e94-95b8-5e03d0823466	t	f
618	sendinterval	发送延迟(ms)	Variable		1000	0	5000	200			2019-12-10 22:24:46.332+08	2020-03-10 16:14:47.22+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	t
677	pmtpf	阈值上限	Variable		\N	2	9999	-1999			2020-03-27 16:57:33.552+08	2020-04-05 10:58:26.684+08	2	640f3d57-3789-4fc9-a69b-6175b4d3e384	f	f
678	pmten	阈值下限	Variable		\N	2	1999	-9999			2020-03-27 16:58:09.074+08	2020-04-05 10:58:33.742+08	2	640f3d57-3789-4fc9-a69b-6175b4d3e384	f	f
690	sensorid	传感器ID	Variable	\N	1234	\N	2147483647	1	\N		2020-04-08 14:07:36.635+08	2020-04-08 14:07:36.639+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
617	packageSize	单包大小(Byte)	Variable		1000	0	2048	128			2019-12-10 22:24:08.558+08	2020-03-10 16:34:47.476+08	1	a8f77633-9fe3-4228-b557-34a9108b3d50	t	t
691	enable	是否启用	Variable	\N	true	\N	\N	\N			2020-04-08 14:07:36.642+08	2020-04-08 14:07:36.645+08	3	451db320-593b-4777-9848-9d778427dea5	t	f
662	ClientID	客户端ID	Variable	\N		\N	\N	\N			2020-03-18 11:21:45.329+08	2020-03-18 11:21:45.333+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
663	Persistent	长连接	Variable	\N	true	\N	\N	\N			2020-03-18 11:21:45.336+08	2020-03-18 11:21:45.339+08	3	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
664	Username	用户	Variable	\N		\N	\N	\N			2020-03-18 11:21:45.342+08	2020-03-18 11:21:45.345+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
665	Password	密码	Variable	\N		\N	\N	\N			2020-03-18 11:21:45.348+08	2020-03-18 11:21:45.351+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
666	SubscribeTopic	订阅主题	Variable	\N		\N	\N	\N			2020-03-18 11:21:45.353+08	2020-03-18 11:21:45.356+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	t	f
667	PublishTopic	发布主题	Variable	\N		\N	\N	\N			2020-03-18 11:21:45.359+08	2020-03-18 11:21:45.362+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
668	Qos	发布Qos	Variable	\N	2	\N	\N	\N			2020-03-18 11:21:45.366+08	2020-03-18 11:21:45.369+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	f	f
669	URL	URL	Variable	\N		\N	\N	\N	\N		2020-03-20 11:11:59.124+08	2020-03-20 11:11:59.124+08	5	e4809d13-f016-47b0-8f2d-129502794def	t	f
670	SubscribeTopic	SubscribeTopic	Variable	\N		\N	\N	\N			2020-03-20 11:12:18.822+08	2020-03-20 11:12:18.822+08	5	e4809d13-f016-47b0-8f2d-129502794def	t	f
671	channel	通道号	Variable	\N	1	\N	64	1	\N		2020-03-27 16:45:58.013+08	2020-03-27 16:45:58.013+08	1	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
672	module	模块号	Variable	\N		\N	\N	\N			2020-03-27 16:46:15.168+08	2020-03-27 16:46:15.168+08	5	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
673	schannel	子通道号	Variable	\N	1	\N	32	1			2020-03-27 16:46:37.461+08	2020-03-27 16:46:37.461+08	1	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
674	predelay	执行前延迟	Variable	\N	50	\N	600	0	百毫秒		2020-03-27 16:48:45.247+08	2020-03-27 16:48:45.247+08	1	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
675	postdelay	读取记录前延迟	Variable	\N	2	\N	600	0	百毫秒		2020-03-27 16:49:45.233+08	2020-03-27 16:49:45.233+08	1	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
676	switchinterva	485切换时间	Variable	\N	5	\N	3600	0	ms		2020-03-27 16:56:38.855+08	2020-03-27 16:56:38.855+08	1	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
679	baudrate	波特率	Variable	2400,9600,19200,115200	9600	\N	\N	\N		波特率：0=2400，1=9600，2=19200， 3=115200	2020-03-27 16:59:02.966+08	2020-03-27 16:59:02.966+08	4	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
680	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N		校验位：0=无校验，1=奇校验，2=偶校验	2020-03-27 16:59:58.899+08	2020-03-27 16:59:58.899+08	4	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
681	databits	数据位	Variable	7位,8位,9位	8位	\N	\N	\N		数据位：0= 7位，1=8位，2=9位(STM32只支持8位和9位)	2020-03-27 17:00:43.554+08	2020-03-27 17:00:43.554+08	4	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
682	stopbits	停止位	Variable	1位,1.5位,2位	1位	\N	\N	\N		停止位：0=1位，1=1.5位，2=2位	2020-03-27 17:01:15.819+08	2020-03-27 17:01:15.819+08	4	640f3d57-3789-4fc9-a69b-6175b4d3e384	t	f
683	module	模块号	Variable	\N		\N	\N	\N	\N		2020-04-03 17:14:23.098+08	2020-04-03 17:14:23.102+08	5	e65d6dc4-b239-4755-b83e-af11fa23fb70	f	f
684	schannel	二级通道	Variable	\N	0	\N	32	0			2020-04-03 17:14:23.106+08	2020-04-03 17:14:23.11+08	1	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
685	enabled	是否启用	Variable	\N	true	\N	\N	\N			2020-04-03 17:14:23.113+08	2020-04-03 17:14:23.204+08	3	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
686	sensorid	传感器ID	Variable	\N	1234	\N	2147483647	1			2020-04-03 17:14:23.207+08	2020-04-03 17:14:23.209+08	1	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
687	channel	通道	Variable	1,2,3,4,5,6,7,,8,9,10,11,12,13,14,15,16	1	\N	\N	\N			2020-04-03 17:14:23.211+08	2020-04-03 17:14:23.214+08	4	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
688	postdelay	后延时	Variable	\N	35	\N	600	0	百毫秒		2020-04-03 17:14:23.218+08	2020-04-03 17:14:23.22+08	1	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
689	predelay	前延时	Variable	\N	25	\N	600	0	百毫秒		2020-04-03 17:14:23.221+08	2020-04-03 17:14:23.223+08	1	e65d6dc4-b239-4755-b83e-af11fa23fb70	t	f
692	predelay	执行前延迟	Variable	\N	1	\N	6000	0	百毫秒		2020-04-08 14:07:36.648+08	2020-04-08 14:07:36.651+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
693	postdelay	读取前延时	Variable	\N	1	\N	6000	1	百毫秒		2020-04-08 14:07:36.655+08	2020-04-08 14:07:36.657+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
694	fid	公式ID	Constant	\N	17	\N	\N	\N			2020-04-08 14:07:36.662+08	2020-04-08 14:07:36.668+08	1	451db320-593b-4777-9848-9d778427dea5	t	f
695	k	模量系数	Variable	\N	1	16	999999	-999999			2020-04-08 14:07:36.671+08	2020-04-08 14:07:36.673+08	2	451db320-593b-4777-9848-9d778427dea5	t	f
696	f0	频率初值	Variable	\N	0	4	99999	-99999	HZ		2020-04-08 14:07:36.676+08	2020-04-08 14:07:36.678+08	2	451db320-593b-4777-9848-9d778427dea5	t	f
697	kt	温度补偿系数	Variable	\N	0	4	9999	-9999			2020-04-08 14:07:36.68+08	2020-04-08 14:07:36.685+08	2	451db320-593b-4777-9848-9d778427dea5	t	f
698	t0	温度初值	Variable	\N	20	3	999	-999			2020-04-08 14:07:36.686+08	2020-04-08 14:07:36.692+08	2	451db320-593b-4777-9848-9d778427dea5	t	f
699	channel	通道	Variable	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16	1	\N	\N	\N			2020-04-08 14:07:36.694+08	2020-04-08 14:07:36.703+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
700	CheckOption	检测传感器状态	Variable	\N	true	\N	\N	\N			2020-04-08 14:07:36.71+08	2020-04-08 14:07:36.712+08	3	451db320-593b-4777-9848-9d778427dea5	t	f
701	VibratSamplFreq	振弦采样频率	Variable	8K,16K,32K	16K	\N	\N	\N			2020-04-08 14:07:36.715+08	2020-04-08 14:07:36.717+08	4	451db320-593b-4777-9848-9d778427dea5	t	f
713	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2020-04-08 15:28:30.927+08	2020-04-08 15:28:30.949+08	2	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61	t	f
714	f0	频率初值	Variable	\N	0	4	99999	-99999	Hz		2020-04-08 15:28:30.976+08	2020-04-08 15:28:30.988+08	2	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61	t	f
715	kt	温度补偿系数	Variable	\N	0	4	9999	-9999			2020-04-08 15:28:31.005+08	2020-04-08 15:28:31.027+08	2	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61	t	f
716	t0	温度初值	Variable	\N	20	3	999	-999			2020-04-08 15:28:31.035+08	2020-04-08 15:28:31.055+08	2	0236d6b7-7ed8-4c8b-89cf-c4b352d8ed61	t	f
717	escape	是否转义	Variable	\N	true	\N	\N	\N	\N		2020-04-09 14:50:37.684+08	2020-04-09 14:50:37.684+08	3	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
718	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N			2020-04-09 14:51:12.688+08	2020-04-09 14:51:12.688+08	4	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
719	id	ID	Variable	\N	12345678	\N	\N	\N			2020-04-09 14:51:42.57+08	2020-04-09 14:51:42.57+08	5	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
720	dis	采集粒度	Variable	\N	5	\N	9999	0			2020-04-09 14:52:21.982+08	2020-04-09 14:52:21.982+08	1	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
721	moduleid	模块号	Variable	\N	1000	\N	\N	\N			2020-04-09 14:52:52.487+08	2020-04-09 14:52:52.487+08	5	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
722	port	端口	Variable	\N	40001	\N	65535	1025		服务侧监听端口	2020-04-09 14:53:29.691+08	2020-04-09 14:53:29.691+08	1	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
723	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		 供应商, 会影响控制帧	2020-04-09 14:54:05.14+08	2020-04-09 14:54:05.14+08	4	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
724	ot	DTU等待上线时间	Variable	\N	60	\N	60000	0			2020-04-09 14:54:45.894+08	2020-04-09 14:54:45.894+08	1	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
725	acq	等待应答时间	Variable	\N	11	\N	60000	0			2020-04-09 14:55:14.337+08	2020-04-09 14:55:14.337+08	1	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
726	delay	休眠延时	Variable	\N	5	\N	6000	0			2020-04-09 14:55:57.939+08	2020-04-09 14:55:57.939+08	1	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
727	etime	指定时间	Variable	\N	00:00:00	\N	\N	\N			2020-04-09 14:56:21.876+08	2020-04-09 14:56:21.876+08	5	836f48be-3271-48ce-9df0-d8c9f35d9d35	t	f
728	channel	通道	Variable	\N	1	\N	128	1	\N		2020-04-09 14:57:55.391+08	2020-04-09 14:57:55.391+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
729	triggerjion	定时采样间隔	Variable	\N	0	\N	6000	0	s		2020-04-09 14:58:25.697+08	2020-04-09 14:58:25.697+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
730	triggersample	定时采样时长	Variable	\N	0	\N	6000	0	s		2020-04-09 14:58:59.285+08	2020-04-09 14:58:59.285+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
731	sampleduration	加速度触发采样时长	Variable	\N	0	\N	6000	0	s		2020-04-09 15:00:06.182+08	2020-04-09 15:00:06.182+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
732	filterfreq	滤波频率	Variable	\N	1	4	99999	-99999	HZ		2020-04-09 15:00:45.295+08	2020-04-09 15:00:45.295+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
733	samplefreq	采样频率	Variable	\N	1	4	99999	-99999	HZ		2020-04-09 15:01:22.888+08	2020-04-09 15:01:22.888+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
734	accelerationrange	加速度范围	Variable	\N	1	4	1024	0			2020-04-09 15:02:00.975+08	2020-04-09 15:02:00.975+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
735	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-9999	g		2020-04-09 15:03:33.07+08	2020-04-09 15:03:33.07+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
736	lagpionts	滞后点数	Variable	\N	1	3	1024	0			2020-04-09 15:04:02.241+08	2020-04-09 15:04:02.241+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
737	postdelay	读取前延时	Variable	\N	35	\N	6000	1	百毫秒		2020-04-09 15:04:42.004+08	2020-04-09 15:04:42.004+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
738	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2020-04-09 15:05:17.572+08	2020-04-09 15:05:17.572+08	1	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
739	module	模块号	Variable	\N		\N	\N	\N			2020-04-09 15:05:41.497+08	2020-04-09 15:05:41.497+08	5	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
740	accerange	加速度范围	Variable	\N	0	\N	\N	\N			2020-04-09 15:06:05.232+08	2020-04-09 15:06:05.232+08	5	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
741	triggerlevel	触发加速度	Variable	\N	1.1	4	9999	-9999	g		2020-04-09 15:06:42.24+08	2020-04-09 15:06:42.24+08	2	922031d2-ebc0-4fb4-a21a-0bbd78a09b80	t	f
742	channel	通道号	Variable	\N	1	\N	64	1	\N		2020-04-09 15:21:22.02+08	2020-04-09 15:21:22.025+08	1	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
743	module	模块号	Variable	\N		\N	\N	\N			2020-04-09 15:21:22.028+08	2020-04-09 15:21:22.032+08	5	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
744	schannel	子通道号	Variable	\N	1	\N	32	0			2020-04-09 15:21:22.035+08	2020-04-09 15:21:22.038+08	1	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
745	predelay	执行前延迟	Variable	\N	25	\N	600	0	百毫秒		2020-04-09 15:21:22.04+08	2020-04-09 15:21:22.043+08	1	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
746	postdelay	读取记录前延迟	Variable	\N	35	\N	600	0	百毫秒		2020-04-09 15:21:22.045+08	2020-04-09 15:21:22.048+08	1	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
747	switchinterval	485切换时间	Variable	\N	5	\N	3600	0	ms		2020-04-09 15:21:22.05+08	2020-04-09 15:21:22.053+08	1	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
748	pmtpf	阈值上限	Variable	\N	\N	2	9999	-9999			2020-04-09 15:21:22.055+08	2020-04-09 15:21:22.058+08	2	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
749	pmten	阈值下限	Variable	\N	\N	2	1999	-9999			2020-04-09 15:21:22.06+08	2020-04-09 15:21:22.063+08	2	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
750	baudrate	波特率	Variable	2400,9600,19200,115200	9600	\N	\N	\N		波特率：0=2400，1=9600，2=19200， 3=115200	2020-04-09 15:21:22.065+08	2020-04-09 15:21:22.068+08	4	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
751	parity	校验位	Variable	无校验,奇校验,偶校验	无校验	\N	\N	\N			2020-04-09 15:21:22.071+08	2020-04-09 15:21:22.073+08	4	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
752	databits	数据位	Variable	7位,8位,9位	8位	\N	\N	\N			2020-04-09 15:21:22.076+08	2020-04-09 15:21:22.079+08	4	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
753	stopbits	停止位	Variable	1位,1.5位,2位	1位	\N	\N	\N			2020-04-09 15:21:22.081+08	2020-04-09 15:21:22.084+08	4	74596cc6-9b6c-4386-8915-dd275e4dd101	t	f
754	k	模量系数	Variable	\N	1	16	999999	-999999	\N		2020-04-09 15:37:03.643+08	2020-04-09 15:37:03.649+08	2	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
755	f0	频率初值	Variable	\N	\N	4	9999	-9999	HZ		2020-04-09 15:37:03.652+08	2020-04-09 15:37:03.669+08	2	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
756	kt	温度补偿系数	Variable	\N	0	4	999	-999			2020-04-09 15:37:03.689+08	2020-04-09 15:37:03.693+08	2	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
757	predelay	执行前延迟	Variable	\N	25	\N	6000	0	百毫秒		2020-04-09 15:37:03.697+08	2020-04-09 15:37:03.701+08	1	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
758	postdelay	读取前延时	Variable	\N	35	\N	6000	0	百毫秒		2020-04-09 15:37:03.707+08	2020-04-09 15:37:03.711+08	1	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
759	channel	通道号	Variable	\N	1	\N	64	1			2020-04-09 15:37:03.714+08	2020-04-09 15:37:03.717+08	1	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
760	t0	温度初值	Variable	\N	20	4	999	-999	℃		2020-04-09 15:37:03.719+08	2020-04-09 15:37:03.724+08	2	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
761	frequencyid	频谱ID	Variable	\N	1	\N	\N	\N			2020-04-09 15:37:03.727+08	2020-04-09 15:37:03.73+08	5	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
762	collectoption	采集选项	Variable	1,2,3	3	\N	\N	\N			2020-04-09 15:37:03.732+08	2020-04-09 15:37:03.735+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
763	fid	公式ID	Variable	\N	1	\N	\N	\N			2020-04-09 15:37:03.737+08	2020-04-09 15:37:03.74+08	5	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
764	vibratsamplfreq	采样频率	Variable	8K,16K,32K	16K	\N	\N	\N			2020-04-09 15:37:03.75+08	2020-04-09 15:37:03.755+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
768	incentivemethod	激励方式	Variable	单脉冲激励,多脉冲激励,共振激励	多脉冲激励	\N	\N	\N	\N		2020-04-09 15:38:14.222+08	2020-04-09 15:38:14.222+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
769	incentive	是否发激励信号	Variable	 是,否	 是	\N	\N	\N			2020-04-09 15:38:37.075+08	2020-04-09 15:38:37.075+08	4	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
770	frequency	配置频率	Variable	\N	0	6	99999	0	Hz		2020-04-09 15:39:08.073+08	2020-04-09 15:39:08.073+08	2	ad167c7a-80b6-4a2b-960a-532352df8a3c	t	f
771	module	模块号	Variable	\N		\N	\N	\N	\N		2020-04-10 14:59:58.835+08	2020-04-10 14:59:58.838+08	5	c34d10ca-5037-406b-bedb-1c9e93c0502c	f	f
772	schannel	二级通道	Variable	\N	0	\N	32	0			2020-04-10 14:59:58.84+08	2020-04-10 14:59:58.843+08	1	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
778	channel	\N	Variable	1,2,3	\N	\N	\N	\N	\N		2020-04-22 19:17:12.014+08	2020-04-22 19:17:12.31+08	4	a53ae7a4-4432-4696-9af3-bbc514ecee6e	t	f
773	enabled	是否启用	Variable	\N	true	\N	\N	\N			2020-04-10 14:59:58.845+08	2020-04-10 14:59:58.847+08	3	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
774	sensorid	传感器ID	Variable	\N	1234	\N	2147483647	1			2020-04-10 14:59:58.848+08	2020-04-10 14:59:58.85+08	1	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
775	channel	通道	Variable	1,2,3,4,5,6,7,,8,9,10,11,12,13,14,15,16	1	\N	\N	\N			2020-04-10 14:59:58.852+08	2020-04-10 14:59:58.853+08	4	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
776	postdelay	后延时	Variable	\N	35	\N	600	0	百毫秒		2020-04-10 14:59:58.855+08	2020-04-10 14:59:58.857+08	1	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
777	predelay	前延时	Variable	\N	25	\N	600	0	百毫秒		2020-04-10 14:59:58.859+08	2020-04-10 14:59:58.86+08	1	c34d10ca-5037-406b-bedb-1c9e93c0502c	t	f
661	URL	主机地址	Constant		10.8.25.231:1883	0			“	无	2020-03-18 11:21:45.319+08	2020-04-10 15:51:58.991+08	5	3d1a9d6a-ff6b-4b29-bb30-1c39079c1362	t	f
779	type		Variable	Voltage,Current	\N	\N	\N	\N			2020-04-22 19:17:12.317+08	2020-04-22 19:17:12.321+08	4	a53ae7a4-4432-4696-9af3-bbc514ecee6e	t	f
780	bits	\N	Variable	13,14,15,16	\N	\N	\N	\N	\N		2020-04-22 19:17:50.022+08	2020-04-22 19:17:50.027+08	4	de1d3ee0-008d-4b6c-be9e-a94740944e36	t	f
781	channel	\N	Variable	1/2/3	\N	\N	\N	\N	\N		2020-04-22 19:22:43.227+08	2020-04-22 19:22:43.235+08	4	139e622c-b7ec-45e4-9d31-862953487b92	t	f
782	channel	\N	Variable	1/2/3	\N	\N	\N	\N	\N		2020-04-22 19:23:18.828+08	2020-04-22 19:23:18.832+08	4	296ce231-ea55-48e7-90a3-4aea8879b66f	t	f
783	baudrate	\N	Variable	4800,9600,115200	\N	\N	\N	\N	\N		2020-04-22 19:24:45.538+08	2020-04-22 19:24:45.55+08	4	f6b4041e-0a8c-46cf-a8df-21621b01f953	t	f
784	ip	\N	Variable	\N		\N	\N	\N	\N		2020-04-22 19:26:40.977+08	2020-04-22 19:26:40.995+08	5	2686f932-1a7d-4a02-a326-e06e0d92f30a	t	f
787	channelid	通道	Variable	\N	1	\N	32	1	\N		2020-06-24 15:14:07.803+08	2020-06-24 15:14:08.092+08	1	789cc633-6120-4c95-95a7-c7f15063488f	t	f
788	nodeid	通道下节点	Variable	\N	1	\N	32	1	\N	通道下的节点	2020-06-24 15:15:09.621+08	2020-06-24 15:15:09.621+08	1	789cc633-6120-4c95-95a7-c7f15063488f	t	f
789	module	模块号	Variable	\N		\N	\N	\N	\N		2020-07-03 17:55:23.771+08	2020-07-03 17:55:23.771+08	5	1c21f4ae-9f87-49b7-96f4-64f39a145e97	t	f
792	channel	关联通道	Variable	\N	1	\N	\N	\N	\N	a,b,c	2020-07-31 11:01:11.293+08	2020-07-31 11:01:11.298+08	5	fd7433b9-9a8b-43c3-86e9-dab7d653da20	t	f
793	url	接口地址	Variable	\N	http://10.8.25.254:7005/gnss/	\N	\N	\N	\N		2020-08-10 15:20:00.779+08	2020-08-10 15:20:00.779+08	5	b0b670ee-6fd7-4178-b684-08677b47ba30	t	f
815	module	模块号	Variable	\N		\N	\N	\N	\N		2020-08-27 16:07:56.374+08	2020-08-27 16:07:56.405+08	5	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
796	vendor	供应商	Variable	才茂,四信,宏电	才茂	\N	\N	\N		供应商, 会影响控制帧	2020-08-18 10:24:23.911+08	2020-08-18 10:24:23.913+08	4	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
816	channel	通道号	Variable	\N	1	\N	99	1			2020-08-27 16:07:56.411+08	2020-08-27 16:07:56.414+08	1	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
798	protocol	协议	Variable	Modbus,iDAU	Modbus	\N	\N	\N			2020-08-18 10:24:23.919+08	2020-08-18 10:24:23.922+08	4	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
799	id	ID	Variable	\N	12345678	\N	\N	\N			2020-08-18 10:24:23.924+08	2020-08-18 10:24:23.931+08	5	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
800	ot	DTU等待上线时间	Variable	\N	60	\N	60000	0			2020-08-18 10:24:23.935+08	2020-08-18 10:24:23.938+08	1	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
794	moduleid	模块号	Variable		1000	0					2020-08-18 10:24:23.896+08	2020-08-18 10:50:22.042+08	5	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	f	f
795	port	端口	Variable		40001	0	65535	1025		服务侧监听端口	2020-08-18 10:24:23.906+08	2020-08-18 10:50:40.28+08	1	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
801	acq	等待应答时间	Variable	\N	11	\N	60000	0	\N		2020-08-18 10:51:35.626+08	2020-08-18 10:51:35.626+08	1	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
802	delay	休眠延时	Variable	\N	5	\N	60000	0			2020-08-18 10:52:05.137+08	2020-08-18 10:52:05.137+08	1	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
803	dis	采集粒度	Variable	\N	5	\N	999	0			2020-08-18 10:52:36.664+08	2020-08-18 10:52:36.664+08	1	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
804	etime	指定时间	Variable	\N	00:00:00	\N	\N	\N			2020-08-18 10:53:03.702+08	2020-08-18 10:53:03.702+08	5	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
797	escape	是否转义	Variable		false	0					2020-08-18 10:24:23.915+08	2020-08-18 10:53:17.363+08	3	e8fa0f36-2606-4bc7-b594-ae3c3289ed63	t	f
805	channelid	通道	Variable	\N	1	\N	32	1	\N		2020-08-26 11:58:42.827+08	2020-08-26 11:58:42.835+08	1	0d79aad8-d5e4-4ae1-8062-4bbf602713cf	t	f
806	nodeid	通道下分区	Variable	\N	1	\N	10000000000	1			2020-08-26 11:58:42.839+08	2020-08-26 11:58:42.843+08	1	0d79aad8-d5e4-4ae1-8062-4bbf602713cf	t	f
812	SubscribeTopic	订阅主题	Variable	\N		\N	\N	\N			2020-08-27 15:51:38.018+08	2020-08-27 15:51:38.018+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	t	f
817	sample	采集粒度	Variable	\N	1	\N	99999	1	min		2020-08-27 16:07:56.416+08	2020-08-27 16:07:56.418+08	1	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
818	upload	上报粒度	Variable	\N	1	\N	99999	1	min		2020-08-27 16:07:56.419+08	2020-08-27 16:07:56.421+08	1	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	f	f
819	plus	加报粒度	Variable	\N	1	\N	99999	1	min		2020-08-27 16:07:56.423+08	2020-08-27 16:07:56.425+08	1	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	f	f
820	cp1	参数1	Variable	\N	0	6	99999	-99999			2020-08-27 16:07:56.427+08	2020-08-27 16:07:56.429+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
821	cp2	参数2	Variable	\N	0	6	99999	-99999			2020-08-27 16:07:56.431+08	2020-08-27 16:07:56.433+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
822	cp3	参数3	Variable	\N	0	6	99999	-99999			2020-08-27 16:07:56.435+08	2020-08-27 16:07:56.437+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
823	cp4	参数4	Variable	\N	0	6	99999	-99999			2020-08-27 16:07:56.438+08	2020-08-27 16:07:56.441+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
824	upperlimit	上限值	Variable	\N	\N	6	999999	0			2020-08-27 16:07:56.442+08	2020-08-27 16:07:56.446+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
808	ClientID	客户端ID	Variable			0					2020-08-27 15:50:04.996+08	2020-08-27 17:29:32.823+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
809	Persistent	长连接	Variable		true	0					2020-08-27 15:50:34.104+08	2020-08-27 17:29:42.84+08	3	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
810	Username	用户	Variable			0					2020-08-27 15:50:55.166+08	2020-08-27 17:29:52.502+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
811	Password	密码	Variable			0					2020-08-27 15:51:13.65+08	2020-08-27 17:30:02.143+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
813	PublishTopic	发布主题	Variable			0					2020-08-27 15:52:11.977+08	2020-08-27 17:30:21.663+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
814	Qos	发布Qos	Variable		2	0					2020-08-27 15:52:49.134+08	2020-08-27 17:30:28.866+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	f	f
876	accelerationrange	加速度量程	Variable	2,4,8	2	\N	\N	\N	g		2020-12-28 16:51:48.922+08	2020-12-28 16:51:48.931+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
878	lagpoint	滞后点数	Variable	\N	0	\N	2048	0			2020-12-28 16:51:48.936+08	2020-12-28 16:51:48.94+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
825	type	设备类型	Variable	地表裂缝计,墙裂缝计,加速度计,泥位计,预警喇叭,雨量计,土壤含水率,裂缝计,GNSS结果数据,GNSS,倾角计,水压力,次声,土压力计,振弦式应力计,地表位移,深部位移,倾斜仪,地下水水位,多点位移,渗压计,流速仪,气温,TDR变形计,泉水流量,沉降仪,钻孔测斜仪,土壤温湿度计	地表裂缝计	\N	\N	\N			2020-08-27 16:07:56.448+08	2020-08-27 16:07:56.45+08	4	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
826	lowerlimit	下限值	Variable	\N	0	6	99999	-99999			2020-08-27 16:07:56.46+08	2020-08-27 16:07:56.462+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
827	thresholdy	Y阈值	Variable	\N	\N	6	99999	0			2020-08-27 16:07:56.464+08	2020-08-27 16:07:56.466+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
828	thresholdx	X阈值	Variable	\N	\N	6	99999	0			2020-08-27 16:07:56.468+08	2020-08-27 16:07:56.47+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
829	thresholdz	Z阈值	Variable	\N	\N	6	99999	0			2020-08-27 16:07:56.471+08	2020-08-27 16:07:56.473+08	2	ceec3d38-6fcc-4e58-a430-c43b5e2291ff	t	f
830	URL	主机地址	Variable	\N	10.8.25.231:1883	\N	\N	\N	\N		2020-09-04 09:55:05.292+08	2020-09-04 09:55:05.292+08	5	0237523c-9c1a-4c16-9fc8-7b8f9a369383	t	f
831	URL	主机地址	Variable	\N		\N	\N	\N	\N		2020-09-07 16:06:49.183+08	2020-09-07 16:06:49.187+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	t	f
872	triggermode	触发方式	Variable	绝对值,上升沿,下降沿,峰值	绝对值	\N	\N	\N			2020-12-28 16:51:48.908+08	2020-12-28 16:51:48.911+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
833	Persistent	长连接	Variable	\N	true	\N	\N	\N			2020-09-07 16:06:49.195+08	2020-09-07 16:06:49.197+08	3	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
834	Username	用户	Variable	\N		\N	\N	\N			2020-09-07 16:06:49.199+08	2020-09-07 16:06:49.202+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
835	Password	密码	Variable	\N		\N	\N	\N			2020-09-07 16:06:49.205+08	2020-09-07 16:06:49.207+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
836	SubscribeTopic	订阅主题	Variable	\N		\N	\N	\N			2020-09-07 16:06:49.209+08	2020-09-07 16:06:49.212+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	t	f
837	PublishTopic	发布主题	Variable	\N		\N	\N	\N			2020-09-07 16:06:49.214+08	2020-09-07 16:06:49.215+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
838	Qos	发布Qos	Variable	\N	2	\N	\N	\N			2020-09-07 16:06:49.217+08	2020-09-07 16:06:49.219+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
832	ClientID	客户端ID	Variable			0					2020-09-07 16:06:49.19+08	2020-09-07 16:07:00.109+08	5	cd04713a-2775-4af9-94b3-89ddeca68f9a	f	f
839	module	模块号	Variable	\N		\N	\N	\N	\N		2020-09-11 13:47:23.723+08	2020-09-11 13:47:23.728+08	5	2bef85fc-4b8c-4b06-aea3-c4309283871b	t	f
840	channel	通道号	Variable	\N		\N	\N	\N	\N		2020-09-11 13:48:52.437+08	2020-09-11 13:48:52.437+08	5	2bef85fc-4b8c-4b06-aea3-c4309283871b	t	f
864	duration	定时采集粒度	Variable		5	0	999999	0	min		2020-12-28 16:51:48.87+08	2020-12-28 16:52:20.954+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
859	card_id	标签卡的ID	Variable	\N		\N	\N	\N	\N		2020-12-09 13:53:21.144+08	2020-12-09 13:53:22.739+08	5	6ef0562f-3378-453f-935e-8057c95048ae	t	f
860	channel	通道	Variable	1,2,3,4,5,6,7,8	1	\N	\N	\N	\N		2020-12-28 16:51:48.759+08	2020-12-28 16:51:48.846+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
853	modulenum	设备地址	Variable	\N		\N	\N	\N	\N		2020-09-25 08:56:46.249+08	2020-09-25 08:56:46.252+08	5	76039ea0-1ef9-4965-a90a-50e97497174a	f	f
854	boxid	包序号	Variable	\N		\N	\N	\N			2020-09-25 08:56:46.254+08	2020-09-25 08:56:46.257+08	5	76039ea0-1ef9-4965-a90a-50e97497174a	t	f
855	nodeid	节点号	Variable	\N		\N	\N	\N			2020-09-25 08:56:46.258+08	2020-09-25 08:56:46.26+08	5	76039ea0-1ef9-4965-a90a-50e97497174a	t	f
880	sduration	定时采集时长	Variable	\N	5	\N	99999	0	s		2020-12-28 16:53:32.855+08	2020-12-28 16:53:32.855+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
862	mode	模块模式	Variable	角度模式,加速度模式	角度模式	\N	\N	\N			2020-12-28 16:51:48.859+08	2020-12-28 16:51:48.865+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
882	das	去直流	Variable	\N	true	\N	\N	\N			2020-12-28 16:55:17.508+08	2020-12-28 16:55:17.508+08	3	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
891	node_id	Point_ID	Variable	\N	1	\N	\N	\N	\N		2021-01-07 08:48:14.156+08	2021-01-07 08:48:14.16+08	5	193f76a4-e706-4709-a54a-f6f08be3495c	t	f
870	amplification	放大倍数	Variable	1,10,100,1000	1	\N	\N	\N			2020-12-28 16:51:48.9+08	2020-12-28 16:51:48.904+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
883	amplitudeadj	幅值修正参数	Variable		0	2	51241	0	\N		2020-12-28 17:24:24.16+08	2020-12-28 17:25:40.278+08	2	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
874	tduration	加速度触发采集时长	Variable	\N	5	\N	999999	0	s		2020-12-28 16:51:48.914+08	2020-12-28 16:51:48.918+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
884	triglevel	触发电平	Variable		30	2	300	5	mv		2020-12-28 17:25:23.686+08	2020-12-28 17:25:50.634+08	2	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
885	triggerjoin	参与触发方式	Variable	不参与,参与	参与	\N	\N	\N			2020-12-28 17:33:28.186+08	2020-12-28 17:33:28.186+08	4	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
866	samplefreq	采样频率	Variable		1024	0	2048	32	Hz		2020-12-28 16:51:48.88+08	2020-12-28 17:59:28.227+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
868	filterfreq	过滤频率	Variable		128	0	2048	64	Hz		2020-12-28 16:51:48.888+08	2020-12-28 17:59:49.006+08	1	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
881	dcdriftadj	直流漂移校准参数	Variable		0	2	6255	0			2020-12-28 16:54:41.668+08	2020-12-29 16:27:26.167+08	2	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
886	module	模块号	Variable	\N		\N	\N	\N	\N		2020-12-31 14:15:47.086+08	2020-12-31 14:15:47.091+08	5	415b61a8-f54e-4e4b-a599-bf878220deab	t	f
887	channel	通道号	Variable	\N		\N	\N	\N	\N		2020-12-31 14:16:14.074+08	2020-12-31 14:16:14.074+08	5	415b61a8-f54e-4e4b-a599-bf878220deab	t	f
888	sensortype	类型	Variable	\N		\N	\N	\N			2020-12-31 14:23:30.045+08	2020-12-31 14:23:30.045+08	5	415b61a8-f54e-4e4b-a599-bf878220deab	t	f
889	module	模块号	Variable	\N		\N	\N	\N	\N		2021-01-04 15:45:03.763+08	2021-01-04 15:45:03.763+08	5	ed710604-9677-4ca7-9f7d-376135ae5cbf	t	f
890	serialnum	序列号	Variable	\N		\N	\N	\N	\N		2021-01-06 11:14:57.713+08	2021-01-06 11:14:57.713+08	5	415b61a8-f54e-4e4b-a599-bf878220deab	t	f
\.


--
-- Name: InterfaceProperty_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."InterfaceProperty_id_seq"', 891, true);


--
-- Data for Name: InterfaceType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."InterfaceType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
1	Serial	serial	串口	2017-08-12 17:07:00.461+08	2017-08-12 17:07:00.461+08
2	ZigBee	zigbee	ZigBee	2017-08-12 17:07:00.464+08	2017-08-12 17:07:00.464+08
4	SoIP	soip	串口 Over IP	2017-08-12 17:07:00.471+08	2017-08-12 17:07:00.471+08
3	CLAA_MSP	claa_msp	CLAA MSP Lora接入协议	2017-08-12 17:07:00.467+08	2017-08-12 17:07:00.467+08
5	HTTP	http	HTTP	\N	\N
6	MQTT	mqtt	MQTT	\N	\N
7	Kafka	kafka	Kafka	\N	\N
0	自定义	user	用户自定义	\N	\N
8	振弦	vm	振弦	\N	\N
9	VNC	vnc	VNC	\N	\N
10	RAW_TCP_CLIENT	raw_tcp_client	TCP客户端(无协议)	\N	\N
11	HTTP_SERVER	http_server	http服务	\N	\N
12	IOTA_MQTT	IOTA_MQTT	平台标准MQTT	\N	\N
\.


--
-- Name: InterfaceType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."InterfaceType_id_seq"', 4, true);


--
-- Data for Name: Layout; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Layout" (id, "desc", settings, "createdAt", "updatedAt", "thingId") FROM stdin;
\.


--
-- Data for Name: LayoutLink; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."LayoutLink" (id, "layoutInfo", "createdAt", "updatedAt", "fromLayoutNodeId", "toLayoutNodeId", "fromDeviceInterfaceId", "toDeviceInterfaceId", "parentLinkId") FROM stdin;
\.


--
-- Data for Name: LayoutNode; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."LayoutNode" (id, "layoutInfo", "extLocInfo", "createdAt", "updatedAt", "layoutId", "deviceId") FROM stdin;
\.


--
-- Data for Name: Migrations; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Migrations" (name) FROM stdin;
0_0_12.js
0_0_14.js
0_0_15.js
0_0_16.js
0_0_18.js
0_0_19.js
0_0_20.js
0_0_22.js
0_0_23.js
0_0_26.js
0_0_28.js
0_0_32.js
0_0_34.js
\.


--
-- Data for Name: Notice; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Notice" (id, receiver, sender, title, content, "expireDate", "createdAt", "updatedAt", type) FROM stdin;
\.


--
-- Data for Name: NoticeType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."NoticeType" (id, name, "desc", "createdAt", "updatedAt") FROM stdin;
WorkOrder	工单通知	工单类型通知	2017-08-12 17:07:00.41+08	2017-08-12 17:07:00.41+08
System	系统通知	系统类型通知	2017-08-12 17:07:00.415+08	2017-08-12 17:07:00.415+08
Certification	认证通知	认证类型通知	2017-08-12 17:07:00.418+08	2017-08-12 17:07:00.418+08
Invitation	用户组通知	用户组类型通知	2017-08-12 17:07:00.421+08	2017-08-12 17:07:00.421+08
\.


--
-- Data for Name: OperationRecord; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."OperationRecord" (id, record, "operatorId", type, "createdAt", "updatedAt", "workOrderId") FROM stdin;
\.


--
-- Data for Name: Order; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Order" (id, out_trade_no, service_name, fee, "oldBalance", "newBalance", time_start, time_end, "payChannel", "paymentState", transaction_id, bank_type, openid, standard, product_id, "createdAt", "updatedAt", "accountId", "servicePackageId", "beginTime", "endTime") FROM stdin;
\.


--
-- Data for Name: Permission; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Permission" (id, "createdAt", "updatedAt", "roleId", "resourceTypeKey", "operationTypeKey") FROM stdin;
\.


--
-- Data for Name: PersonCertification; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."PersonCertification" (id, name, "cardId", "frontImg", "reverseImg", status, reason, "createdAt", "updatedAt", "userId") FROM stdin;
\.


--
-- Data for Name: PropertyType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."PropertyType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
1	整型	integer	Integer	2017-08-12 17:07:00.441+08	2017-08-12 17:07:00.441+08
2	浮点型	float	Float	2017-08-12 17:07:00.446+08	2017-08-12 17:07:00.446+08
3	布尔型	boolean	Boolean	2017-08-12 17:07:00.449+08	2017-08-12 17:07:00.449+08
4	枚举	enum	Enumerate	2017-08-12 17:07:00.452+08	2017-08-12 17:07:00.452+08
5	字符串	string	String	2017-08-12 17:07:00.455+08	2017-08-12 17:07:00.455+08
6	密码	password	password	\N	\N
\.


--
-- Name: PropertyType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."PropertyType_id_seq"', 5, true);


--
-- Data for Name: ProtocolCertification; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ProtocolCertification" (id, status, reason, "createdAt", "updatedAt", "userId", "protocolMetaId") FROM stdin;
\.


--
-- Data for Name: ProtocolMeta; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ProtocolMeta" (id, name, image, "desc", version, "belongTo", investor, public, "createBy", impl, resource, "resType", "createdAt", "updatedAt", "enableTime", "vendorId") FROM stdin;
feaee3b1-a825-46b2-af38-888c53423eba	test154	\N		154	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	--AA028CFEA6FF\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=", "thk_inclinometer_1548.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local X_axis =iota.hexToShort(hex,1,'B')/1000.0\n        local Y_axis =iota.hexToShort(hex,3,'B')/1000.0\n     \n        out.data = {                --需要测试\n        xDegree = X_axis,\n        yDegree = Y_axis\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-11-09 11:04:11.518+08	2018-02-28 19:01:46.659+08	2017-11-09	\N
1dfd10ac-171c-407b-a931-97f89d8f31c4	xmxd_5500	\N		1.0	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	Lua	\n--//201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\\集中器-平台通讯数据格式.xls\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tctx:asend("010203")\nend\n--moduleId=  通道1  通道2  通道3  通道4\n--\n--前3组0 \n--第4组\n--"frequency": \n--"temperature": \nonData=function (hex)\n\t--主动上传式\n\tlog.debug("xmxd_5500 Received<==%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal sData=HextoStr(hex)\n        log.debug("xmxd_5500 hexToStr=%s",sData)\n\t\tlocal moduleNo = tonumber(string.sub(sData,4,8))\n        log.debug("xmxd_5500 moduleNo=%s",moduleNo)\n        local sensorCount=tonumber(string.sub(sData,14,16))\n\n\t\t\n        for i=1,sensorCount,1 do\n             local index=16+23*(i-1)\n\t\t\t local Length = string.sub(sData,index+4,index+8)/100;\n             local Temperature=string.sub(sData,index+9,index+11);\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=tonumber(string.sub(sData,index+1,index+3))\n             log.debug("xmxd_5500 模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("xmxd_5500 子设备原形childDevice=%s",json.encode(childDevice))\n                local data1={\n                    data={\n                        length=Length,\n                        temperature=Temperature\n                        },\n            device=deviceId,\n                    type=1 ,\n        }\n        table.insert(out.data,data1)\t\t\n             else\n                log.debug("xmxd_5500  子设备:m=%s,c=%s deviceId为nil",moduleNo,channelNo)\n            end\n\t\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("xmxd_5500 查询Id moduleId="..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) then\n                 log.debug("xmxd_5500 匹配到DeviceInfo=%s",json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("xmxd_5500 subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('xmxd_5500 开始校验数据')\n    if data == nil or string.len(data)/2 <= 40 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('xmxd_5500 Data is nil or invalid length')\n        return false\n    end\n\n\tif string.sub(data,1,6)~="545548" then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('xmxd_5500 Hex CMD False ~=%s',"545548")\n        return false\n    end\t\n    log.debug('xmxd_5500 校验通过')\n\treturn true\n\t\nend\n--字符串ascii->字符\nHextoStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n	INLINE	2018-09-10 17:10:47.884+08	2018-10-12 18:52:41.304+08	2018-09-10	\N
36bc4a09-8734-498e-9d50-58bf5991dd1a	TestMicro	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('fs_microPower_t2 : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        log.debug('fs_microPower_t2 : devices data =%s', data)\n        ParseData(data)\n    else\n        log.error('fs_microPower_t2 : recvd content is nil')\n    end\nend\n\nfunction ParseData(data)\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    if string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n        --log.debug('fs_microPower_t2 : 振动数据 data =%s', data)\n        local package = iota.hexToShort(data, 8, 'L')\n        local packagecount = iota.hexToShort(data, 10, 'L')\n        local datpackage = string.sub(data, 41, -9)\n        local moduleid = iota.hexToShort(data, 16, 'L')\n\n        local req1 = ''\n        local req2 = ''\n        local req = ''\n        req1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议   4-7  协议版本\n        req1 = iota.appendHexByte(req1, 0x02, 'L')\n        req1 = iota.appendHexWord(req1, 0x0007, 'L')\n        req1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n        req2 = iota.appendHexWord(req2, package, 'L')\n        req2 = iota.appendHexWord(req2, packagecount, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        req2 = iota.appendHexWord(req2, moduleid, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        local checkdat = req1 .. req2\n        local checksum = HeadCheckSum(checkdat)\n        req = req1\n        req = iota.appendHexWord(req, checksum, 'L')\n        req = req .. req2\n        req = iota.appendHexWord(req, package, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = req .. '00000000'\n        req = iota.appendHexCrc(req, 'L', 0) --校验\n        local crc16 = string.sub(req, -4, -1)\n        req = string.sub(req, 1, -13)\n        req = req .. crc16\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0xfa, 'L')\n        log.debug('fs_microPower_t2: datfileback: %s', req)\n        ctx:asend(req, 20000)\n\n        if package == packagecount then\n            local r1, ok = redis.get(device.id .. '_mpzd')\n            log.debug('fs_microPower_t2: 解析dat:r1= %s', r1)\n            ParseFileDat(r1)\n        else\n            if package == 1 then\n                local firstpackage = string.sub(datpackage, -80, -1)\n                redis.set(device.id .. '_mpzd', firstpackage)\n                log.debug('fs_microPower_t2: 接收dat:datpackage= %s', firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1, ok = redis.get(device.id .. '_mpzd')\n                --log.debug('fs_microPower_t2: 接收dat:r1= %s package=%s', r1, package)\n                local data = r1 .. datpackage\n                redis.set(device.id .. '_mpzd', data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n        end\n    else -- 非振动数据\n        if string.sub(data, 13, 16) == '8a00' then\n            local rtumodule = iota.hexToShort(data, 3, 'B')\n            local power = iota.hexToByte(data, 13, 'B')\n            log.debug('fs_microPower_t2: 剩余电量: %s', power)\n            local strdevice = toHexStr(json.encode(device))\n            strdevice = iota.appendHexCrc(strdevice, 'B', 0)\n            local crc = string.sub(strdevice, -4, -1)\n            --log.debug('fs_microPower_t2 : devices crc =%s', crc)\n            local r1, ok = redis.get(device.id .. '_mpset')\n            if ok and r1 ~= nil then\n                if crc == r1 then\n                    --log.debug('fs_microPower_t2 : 配置无修改')\n                    local req = ''\n                    req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                    req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                    req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                    req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                    req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                    req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                    req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                    req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                    req = iota.appendHexByte(req, os.date('%m'), 'B')\n                    req = iota.appendHexByte(req, os.date('%d'), 'B')\n                    req = iota.appendHexByte(req, os.date('%H'), 'B')\n                    req = iota.appendHexByte(req, os.date('%M'), 'B')\n                    req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                    req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req = iota.appendHexByte(req, 0, 'B') -- 是否下发\n                    --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req = iota.appendHexWord(req, 0, 'B') --当前版本\n                    req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                    req = iota.appendHexCrc(req, 'B', 0) --校验\n                    req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                    --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    --log.debug('fs_microPower_t2 : 配置有修改')\n                    local req = ''\n                    req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                    req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                    req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                    req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                    req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                    req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                    req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                    req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                    req = iota.appendHexByte(req, os.date('%m'), 'B')\n                    req = iota.appendHexByte(req, os.date('%d'), 'B')\n                    req = iota.appendHexByte(req, os.date('%H'), 'B')\n                    req = iota.appendHexByte(req, os.date('%M'), 'B')\n                    req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                    req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n                    --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req = iota.appendHexWord(req, 0, 'B') --当前版本\n                    req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                    req = iota.appendHexCrc(req, 'B', 0) --校验\n                    req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                    --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id .. '_mpset', tostring(crc))\n                    ctx:sleep(2)\n                    Deploy() --配置\n                end\n            else\n                --log.debug('fs_microPower_t2 : 配置初次配置')\n                local req = ''\n                req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                req = iota.appendHexByte(req, os.date('%m'), 'B')\n                req = iota.appendHexByte(req, os.date('%d'), 'B')\n                req = iota.appendHexByte(req, os.date('%H'), 'B')\n                req = iota.appendHexByte(req, os.date('%M'), 'B')\n                req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n                --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                req = iota.appendHexWord(req, 0, 'B') --当前版本\n                req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                req = iota.appendHexCrc(req, 'B', 0) --校验\n                req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                --log.debug('fs_microPower_t2: 苏醒帧返回: %s', req)\n                ctx:asend(req, 20000)\n                redis.set(device.id .. '_mpset', tostring(crc))\n                ctx:sleep(2)\n                Deploy() --配置\n            end\n        end\n\n        if string.sub(data, 13, 16) == '8a02' then\n            --log.debug('fs_microPower_t2 : 设备休眠')\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n\n        local rtumodule = iota.hexToShort(data, 3, 'B')\n        if string.sub(data, 13, 16) == '8601' then\n            local time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n            local sensorCount = iota.hexToByte(data, 26, 'B')\n\n            local isover = iota.hexToByte(data, 25, 'B') --尾包\n            local datalength = 0\n            local firststart = 27\n            for i = 1, sensorCount, 1 do\n                firststart = firststart + datalength\n                local sensorType = iota.hexToByte(data, firststart, 'B')\n                local module = iota.hexToShort(data, firststart + 3, 'B')\n                local channel = iota.hexToByte(data, firststart + 2, 'B')\n                datalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n                if sensorType == 0 then --振弦\n                    local childDevice = getZxDeviceInfo(module, channel)\n                    local rst = {\n                        data = {\n                            frequency = iota.hexToFloat(data, firststart + 12, 'B'),\n                            am = iota.hexToFloat(data, firststart + 16, 'B'),\n                            temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                        },\n                        device = childDevice.id,\n                        type = 1,\n                        time = time\n                    }\n                    table.insert(out.data, rst)\n                end\n                if sensorType == 1 then --485\n                    local childDevice = getDeviceInfo(module, channel)\n                    local protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n                    --log.debug('fs_microPower_t2: protocalCode: %s', protocalCode)\n                    if protocalCode == 1503 or protocalCode == 1502 then --测斜\n                        local rst = {\n                            data = {\n                                anglex = iota.hexToFloat(data, firststart + 12, 'B'),\n                                angley = iota.hexToFloat(data, firststart + 16, 'B'),\n                                temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 9102 then --裂缝\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                length = iota.hexToFloat(data, firststart + 12, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 1102 then --温湿度\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                temperature = iota.hexToFloat(data, firststart + 12, 'B'),\n                                humidity = iota.hexToFloat(data, firststart + 16, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 9002 then --压差\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                physicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n                                frequency = iota.hexToFloat(data, firststart + 16, 'B'),\n                                temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n                    if protocalCode == 2045 then --扬尘\n                        local datacnt = iota.hexToByte(data, firststart + 11, 'B')\n                        --log.debug('fs_microPower_t2: 2405')\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                pm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n                                pm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n                                noise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n                                temp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n                                humidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n                                windspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n                                winddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n\n                        rst.result={}\n                        if rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n                                rst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n                            else\n                               -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n                                rst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n                            end\n                            rst.data.pm25 = nil\n                        end\n                        if rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n                                rst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n                            else\n                               -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n                                rst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n                            end\n                            rst.data.pm10 = nil\n                        end\n                        if rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n                           -- out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                                rst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n                            else\n                               -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                                rst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                            end\n                            rst.data.windspeed = nil\n                        end\n                        if rst.data.winddir < 0 or rst.data.winddir > 360 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                                rst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n                            else\n                                --out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                                rst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                            end\n                            rst.data.winddir = nil\n                        end\n                        if rst.data.temp < -40 or rst.data.temp > 60 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                                rst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                            else\n                               -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                                rst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                            end\n                            rst.data.temp = nil\n                        end\n                        if rst.data.humidity <= 0 or rst.data.humidity > 100 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                                rst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                            else\n                                --out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                                rst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n                            end\n                            rst.data.humidity = nil\n                        end\n                        if rst.data.noise < 0 or rst.data.noise > 200 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                                rst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                            else\n                                --out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                                rst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                            end\n                            rst.data.noise = nil\n                        end\n                        log.debug('fs_microPower_t2: insert')\n                        table.insert(out.data, rst)\n                    end\n                end\n            end\n            log.debug('fs_microPower_t2: dataresult: %s', json.encode(out))\n            local req = ''\n            req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n            req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n            req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n            req = iota.appendHexByte(req, 0x01, 'B') --命令源\n            req = iota.appendHexWord(req, 0x0601, 'B') --指令\n            req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n            req = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n            req = iota.appendHexCrc(req, 'B', 0) --校验\n            req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n            log.debug('fs_microPower_t2: databack: %s', req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out))\n        end\n    end\nend\n\nfunction Deploy()\n    local total = totalSensors()\n    --log.debug('fs_microPower_t2 : totalSensors =%s', total)\n    local over = 0\n    local onepag = 0\n    local totallength = 3\n    local buff = ''\n\n    for i, dnlink in pairs(device.dnlinks) do\n        for j, subdevice in pairs(dnlink.devices) do\n            over = over + 1\n            onepag = onepag + 1\n            if subdevice.props.sensortype == 'zx' then\n                totallength = totallength + 18\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n                local settingvib = tonumber(subdevice.uplink.props.colgain) + tonumber(subdevice.uplink.props.incentive) * math.pow(2, 1) + tonumber(subdevice.uplink.props.checkoption) * math.pow(2, 2) + tonumber(subdevice.uplink.props.vibratspectrum) * math.pow(2, 3) + tonumber(subdevice.uplink.props.vibratsamplfreq) * math.pow(2, 4) + tonumber(subdevice.uplink.props.incentivemethod) * math.pow(2, 6)\n                --log.debug('fs_microPower_t2 : settingvib =%s', settingvib)\n                buff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n                buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x05, 'B') --长度\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n                buff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n                buff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n            end\n            if subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n                totallength = totallength + 18\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n                local setting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n                --log.debug('fs_microPower_t2 : setting =%s', setting)\n                buff = iota.appendHexByte(buff, setting, 'B') --选项1\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x5C, 'B') --长度\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --0\n\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25a, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25b, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10a, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10b, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.noisea, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.noiseb, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.tempa, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.tempb, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.humia, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.humib, 'B') --参数\t\t\n\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speeda, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.speedb, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.directiona, 'B') --参数\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.directionb, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --参数\t\t\t\t\t\t\n            end\n            if subdevice.props.sensortype == 'zd' then\n                totallength = totallength + 31\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n                buff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n                buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x12, 'B') --长度\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff = iota.appendHexWord(buff, 0x42c8, 'B')\n                buff = iota.appendHexWord(buff, 0x0000, 'B')\n                buff = iota.appendHexWord(buff, 0x4248, 'B')\n                buff = iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n                buff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n            end\n            if over == 8 or onepag == total then\n                local buffhead = ''\n                buffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n                buffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号：0x0c，多通道数据采集系统\n                buffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n                buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n                buffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n                buffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n                buffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n                if onepag == total then\n                    buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n                else\n                    buffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n                end\n                buffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n                buffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n                buff = buffhead .. buff\n                buff = iota.appendHexCrc(buff, endian, 0) --校验\n                buff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n                local ok, ack = ctx:ssend(buff, 20000)\n                --log.debug('fs_microPower_t2 : deploy back =%s', ack)\n                buff = ''\n                if over == 8 then\n                    over = 0\n                end\n                totallength = 3\n                if onepag == total then\n                    --log.debug('fs_microPower_t2 配置下发完成')\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end\n        end\n    end\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i, dnlink in pairs(device.dnlinks) do\n            for j, subdevice in pairs(dnlink.devices) do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        --log.debug('fs_microPower_t2 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug('fs_microPower_t2 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i, dnlink in pairs(device.dnlinks) do\n            for j, subdevice in pairs(dnlink.devices) do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        --log.debug('fs_microPower_t2 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug('fs_microPower_t2 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug('fs_microPower_t2 : dat content  =%s', dathex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex, offset, 'B') + 2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex, offset, 'B')\n        offset = offset + 4\n        --log.debug('fs_microPower_t2 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n        local floatcount = (string.len(dathex) / 2 - 40) / 4\n        --log.debug('fs_microPower_t2 begin parse')\n        local vols = {}\n        for i = 1, floatcount do\n            offset = 40 + (i - 1) * 4\n            vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n        end\n        --log.debug('fs_microPower_t2 finish parse')\n\n        local rst = {\n            data = {\n                _data_type = 'vib',\n                physicalvalue = vols,\n                sampleFreq = samplefreq,\n                filterFreq = filterfreq,\n                gainAmplifier = gainamplifier,\n                triggerType = triggertype,\n                version = version\n            },\n            device = subdevice.id,\n            type = 1,\n            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n        }\n        table.insert(out.data, rst)\n        --log.debug('fs_microPower_t2 cloudvibrate=%s', json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug('fs_microPower_t2 not found device module=%s channel=%s', deviceId, channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt = 0\n  \tif device.dnlinks ~= nil then\n      for i, dnlink in pairs(device.dnlinks) do\n          sensorcnt = #(dnlink.devices) + sensorcnt\n      end\n    end\n    return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\nfunction HeadCheckSum(data)\n    local sum = 0\n    local len = string.len(data)\n    --log.debug('fs_microPower_t2: len: %s', len)\n    for i = 1, len, 4 do\n        local te = tonumber(string.sub(data, i, i + 3), 16)\n        log.debug('fs_microPower_t2: te: %s', te)\n        sum = sum + tonumber(te)\n    end\n    --log.debug('fs_microPower_t2: sum: %s', sum)\n    return 0xffff - sum\nend	INLINE	2019-03-04 15:39:53.466+08	2019-05-17 11:19:22.874+08	2019-03-04	\N
3b1d673f-6e08-442d-8ff3-0306f82ff257	fs_gprs8	\N	工迅数据上报双平台--深圳平台	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\n--字符串ascii->字符\nstart = function()\n    log.debug('fs_gprs8   device=%s', json.encode(device))\n    ok,resp=ctx:asend('010203')\n  \n  --测试用 之前 监听的不展示数据\n  -- ok,resp=ctx:ssend('01020304',15000)\n -- if ok then\n   --     result = onData_test(resp)\n -- ctx:done(result)\n  -- end\nend\n\n--$MAS$;DTYPE:MAS-Node8-GPRS;DSN:ZX20221039;START;GLNG:113.952217;GLAT:22.488283;DBAT:8;CSQ:9;KD:20200615151056;ZXT:1_A;DT1:1277.40_27.8;DT2:1277.56_27.8;DT3:0.00_203.0;DT4:0.00_204.0;DT5:0.00_205.0;DT6:0.00_206.0;DT7:0.00_207.0;DQT:C_5;DQ1:MSW20221039005_-22.000000;MD:20200615163400;END;\n--244D4153243B44545950453A4D41532D4E6F6465382D475052533B44534E3A5A5832303232313033393B53544152543B474C4E473A3131332E3935323231373B474C41543A32322E3438383238333B444241543A383B4353513A393B4B443A32303230303631353135313035363B5A58543A315F413B4454313A313237372E34305F32372E383B4454323A313237372E35365F32372E383B4454333A302E30305F3230332E303B4454343A302E30305F3230342E303B4454353A302E30305F3230352E303B4454363A302E30305F3230362E303B4454373A302E30305F3230372E303B4451543A435F353B4451313A4D535732303232313033393030355F2D32322E3030303030303B4D443A32303230303631353136333430303B454E443B\nonData = function(hex)\n    log.debug('fs_gprs8 Data=%s', hex)\n    --全局\n      out = {\n        data = {},\n        result = {},\n        type=2\n    }\n\n    local sData = toStrHex(hex)\n    log.debug('fs_gprs8 sData=%s', sData)\n    local spliteData = Split(sData, ';')\n\n    for key, value in pairs(spliteData) do\n        if value ~= '' then\n            Allot(value)\n        end\n    end\n    local resultData = json.encode(out)\n    log.debug('fs_gprs8  resultData=%s',resultData)\n  \t--return resultData\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n    local dataInfo = Split(datastr, ':')\n    local singleData\n    --振弦读数\n    local isDT = string.find(dataInfo[1], 'DT')\n    --数字量读数\n    local isDQ = string.find(dataInfo[1], 'DQ')\n    local subData = {\n        data = {},\n        type = 1\n    }\n    if isDT and dataInfo[1] ~= 'DTYPE' then --频率_温度\n        local dataModule = 'DT'\n        local dataChannel = string.gsub(dataInfo[1], 'DT', '')\n        local singleData_DT = Split(dataInfo[2], '_')\n\n        local freq = tonumber(singleData_DT[1])\n        local temp = tonumber(singleData_DT[2])\n        log.debug('fs_gprs8  m=%s,c=%s,frequency=%s,temperature=%s', dataModule, dataChannel, frequency, temperature)\n        local de = getDeviceInfo(dataModule, dataChannel)\n        if de ~= nil then\n            subData.device = de.id\n            subData.data.frequency = freq\n            subData.data.temperature = temp\n            --subData.data.physicalvalue = 0\n            --subData.data.am = 0\n            if de.uplink.capabilities[1].formula.metaid == "c92fb572-f818-488a-a012-e615d38abbf2" then --振弦公式\n                local k = de.uplink.capabilities[1].formula.props.K\n\t\t\t\tlocal kt = de.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal f0 = de.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal t0 = de.uplink.capabilities[1].formula.props.To\n                log.debug("fs_gprs8 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",dataModule,dataChannel,de.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n                    subData.data.physicalvalue =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n            end\n            table.insert(out.data, subData)\n        end\n    elseif isDQ and dataInfo[1] ~= 'DQT' then --传感器编号_测斜读数_压强读数_温度       [无数据或个别字段无数据则用星号]\n        --out.data.totalPhosphorus = totalPhosphorus\n        local dataModule = 'DQ'\n        local dataChannel = string.gsub(dataInfo[1], 'DQ', '')\n        local singleData_DQ = Split(dataInfo[2], '_')\n        local sensorNum = singleData_DQ[1]\n        local physicalvalue = tonumber(singleData_DQ[2])/1000 --  水位计  默认单位 m  原始数据mm\n        log.debug('fs_gprs8  m=%s,c=%s,physicalValue=%s', dataModule, dataChannel, physicalValue)\n        local de = getDeviceInfo(dataModule, dataChannel)\n        if de ~= nil then\n            subData.device = de.id\n            subData.data.physicalvalue = physicalvalue\n            table.insert(out.data, subData)\n        end\n    else\n    end\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("fs_gprs8 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('fs_gprs8查询m=%s c=%s子设备 是否匹配设备child=%s',tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            local channelStrCheck = child.uplink.props.channel\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('fs_gprs8  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fs_gprs8  subdevices是nil')\n        return nil\n    end\nend	INLINE	2020-06-15 17:11:45.37+08	2020-06-18 10:07:17.297+08	2020-06-15	\N
ce984e5a-5697-4b5f-bc51-fef9a07f2d1e	Pressure_ZGZL_9027	\N		1.0	619160fc-a159-4566-9781-9e2c2f217324	619160fc-a159-4566-9781-9e2c2f217324	f	619160fc-a159-4566-9781-9e2c2f217324	Lua	--[[\n协议号: 9027;\n协议名: 静力水准仪.\n]]--lucas\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "Pressure_ZGZL_9027.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序   aa 75 10 00 0e 00 28 67 61 4a 08 00 00 5a 17 09 16 13 33 27 f8\n\t--    模块号2867614A0800005A\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xaa, BE);\n\tbuff=iota.appendHexByte(buff, 0x75, BE);--0xaa75固定开头\n\tbuff=iota.appendHexByte(buff, 0x10, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0e, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tfor i = 1, string.len(device.props.moduleId),2 do\n       buff= buff..string.sub(device.props.moduleId,i,i+1)\n    end \n    local shorttime=getTimeStamp(os.time())\t\n\tbuff=buff..shorttime;--加入日期\n\tlocal xor = CheckXor(0,buff)\n    buff=iota.appendHexByte(buff, xor, BE)\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  557a100035002867614a0800005a170612141804010a028a00ce57335725206d6d2010ffffffffffffffffffffffffffffffff4a4354323031312003 \n--temp=26.6 strain=65  offset=20.6    moduleId=2867614A0800005A\n--原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\t--local windSpeed = Bytes2Float(data, 3);\n\t\t--local windDirection= Bytes2Float(data,7);\t\n\n\t\tlocal temp = iota.hexToShort(data, 20,'B')*0.1;\t\n        local strain = iota.hexToShort(data, 22,'B')*0.1;\n        local offset = iota.hexToShort(data, 24,'B')*0.1;\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=temp,\n\t\tstrain=strain,\n\t\toffset=offset\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=60 or iota.hexToByte(data, 0,'B')~=0x55 or iota.hexToByte(data, 1,'B')~=0x7A then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n\nfunction Bytes2Float(data,index)\n    index=index*2\n\tdataStr1=string.sub(data,index+1,index+2);\n\tdataStr2=string.sub(data,index+3,index+4)\n\tdataStr3=string.sub(data,index+5,index+6)\n\tdataStr4=string.sub(data,index+7,index+8)\n\tdataStr=dataStr3..dataStr4\n\tdataStr=dataStr..dataStr1\n\tdataStr=dataStr..dataStr2\n    --log.debug(string.format('转换后的字节: %s', dataStr));\n    data1=iota.hexToFloat(dataStr, 0,'B');\n   -- log.debug(string.format('转换的数: %s', data1));\n\treturn data1;\nend\n\n--将时间戳转化为短时间：如170916110337\nfunction getTimeStamp(t)\n    return os.date("%y%m%d%H%M%S",t)\nend\n\n\nCheckXor=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end     \n    return lcr\nend 	INLINE	2017-09-16 14:09:30.902+08	2018-02-28 18:32:12.187+08	2017-09-14	\N
cea589dc-d05f-4f0d-839b-70599d8fbd1f	gzsck_01	\N		1.0	4f529033-1917-4df3-80db-81efffdf28bf	4f529033-1917-4df3-80db-81efffdf28bf	f	4f529033-1917-4df3-80db-81efffdf28bf	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("gzsck_01: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\tlocal time1 = os.time()   --当前时间\n\tlog.debug('gzsck_01  全局时间time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\tlocal time2=string.format('%08x',time1)\n\tlocal time21=string.sub(time2,1,2)\n\tlocal time22=string.sub(time2,3,4)\n\tlocal time23=string.sub(time2,5,6)\n\tlocal time24=string.sub(time2,7,8)\n  \tlocal cmd=''\n    local moduleNostr= string.sub(hex,17,24)\n\tlocal frame=string.sub(hex,33,36)\n    if frame=='6100' then            --判断是否是数据码流的命令\n\t\n\t\tcmd='23232323' .. moduleNostr .. 'FFFFFFFF038006006100' .. time24 .. time23 .. time22 .. time21\n\t\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\t\tctx:asend(cmd)\n\telse\n\t\tlocal moduleNo = device.uplink.props.module\n\n\t\tlocal channelNo=tonumber(string.sub(hex,51,52),16)\n    log.debug('gzsck_01  channelNo=%s',channelNo)\n\t \n\t\tlocal dateTimeStr=iota.hexToUInt(string.sub(hex,41,48),0,'L')\n\t\tlocal timenow = os.date('%Y-%m-%dT%H:%M:%S+08:00', dateTimeStr)\n\t\tlocal type_sensor=string.sub(hex,37,38)        --传感器类型标识\n\t\tlog.debug('gzsck_01  type_sensor=%s',type_sensor)  \n\t\n\t\tlocal hexStr=string.sub(hex,63,-5)      --数据包部分\n\t\tlog.debug('gzsck_01  数据包hexStr=%s,time1=%s',hexStr,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))  \n\t\tlocal temp=iota.hexToFloat(hex,26,'L')\n\t\tlog.debug('gzsck_01  temp=%s',temp)  \n\t\n\t\tif type_sensor=='01'  then                     --测斜\n\t\t    log.debug('gzsck_01 进入测斜') \n      \tlocal outCount=string.sub(hex,61,62)   --输出物理量个数\n\t\tlog.debug('gzsck_01  outCount=%s',outCount)  \n\t\t\tif outCount=='01' then\n\t\t\t\tlocal angle=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\t\tif\tchildDevice~=nil  then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tangle=tonumber(string.format('%0.1f',angle)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',angle))\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1    ,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01  测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\telseif outCount=='02' then\n\t\t\t\t--log.debug('gzsck_01 进入02,time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))  \n\t\t\t\tlocal anglex=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\t--log.debug('gzsck_01  anglex=%s',anglex) \n        log.debug('gzsck_01  anglex=%s,time1=%s',anglex,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\t\t\t\tlocal angley=iota.hexToFloat(hexStr,4,'L')\n\t\t\t\tlog.debug('gzsck_01  angley=%s,time1=%s',angley,os.date('%Y-%m-%dT%H:%M:%S+08:00', time1)) \n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\t\tif\tchildDevice~=nil  then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t          \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\t\tangley=tonumber(string.format('%0.3f',angley))\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\ttype=1    ,\n\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01  测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\telseif outCount=='03' then\n\t\t\t\tlocal anglex=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\tlocal angley=iota.hexToFloat(hexStr,4,'L')\n\t\t\t\tlocal anglez=iota.hexToFloat(hexStr,8,'L')\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\t\t\t\tlog.debug('gzsck_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\t\tif\tchildDevice~=nil  then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t          \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\t\tangley=tonumber(string.format('%0.3f',angley)),\n\t\t\t\t\t\t\tanglez=tonumber(string.format('%0.3f',anglez))\n\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\ttype=1    ,\n\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("gzsck_01:(测斜) out=%s",json.encode(out))\n\t\t\t\telse\n\t\t\t\tlog.debug('gzsck_01  测斜子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\telseif type_sensor=='02' then                  --振弦\n\t\t\tlog.debug('gzsck_01 进入振弦') \n\t\n\t\t\tlocal frequency=getAllDatas(hexStr)\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n            log.debug('gzsck_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temp-T0)\n\t\t\t\tend            \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=tonumber(string.format('%0.1f',frequency)),\n\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp)),\n\t\t\t\t\t\tphysicalvalue=tonumber(string.format('%0.2f',Phy))\n\t\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttype=1   ,\n                   time=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("c:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('gzsck_01  振弦子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\tend\n\n\t\telseif  type_sensor=='03' then       --水位\nlog.debug('gzsck_01  解析水位time1=%s',os.date('%Y-%m-%dT%H:%M:%S+08:00', time1))\n\t\t\tlocal length=iota.hexToFloat(hexStr,0,'L')\n\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n            log.debug('gzsck_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t         \n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength=tonumber(string.format('%0.3f',length)),\n\t\t\t\t\t\ttemperature=tonumber(string.format('%0.1f',temp))\n\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttype=1   ,\n                    time=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("gzsck_01:(水位) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('gzsck_01  水位子设备 m=%s,c=%s deviceId为nil',moduleNo, channelNo)\n\t\t\t\t\t\n\t\t\tend\n\t    end \n\t\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("gzsck_01: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal acqinteral=string.format('%08x',tonumber(device.props.acqinteral))\n\t\n\tlocal acqinteral1=string.sub(acqinteral,1,2)\n\tlocal acqinteral2=string.sub(acqinteral,3,4)\n\tlocal acqinteral3=string.sub(acqinteral,5,6)\n\tlocal acqinteral4=string.sub(acqinteral,7,8)\n\t\n\t\n\tlocal uploadinteral=string.format('%08x',tonumber(device.props.uploadinteral))\n\tlog.debug("gzsck_01: uploadinteral=%s",uploadinteral)\n\tlocal uploadinteral1=string.sub(uploadinteral,1,2)\n\tlocal uploadinteral2=string.sub(uploadinteral,3,4)\n\tlocal uploadinteral3=string.sub(uploadinteral,5,6)\n\tlocal uploadinteral4=string.sub(uploadinteral,7,8)\n\t\n\n\tcmd='23232323' .. moduleNostr .. 'FFFFFFFF038014007900' .. type_sensor ..'000E005600' .. uploadinteral4 .. uploadinteral3 .. uploadinteral2 .. uploadinteral1 .. acqinteral4 .. acqinteral3 .. acqinteral2 .. acqinteral1 .. time24 .. time23 .. time22 .. time21\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0)  \n\t--log.debug("gzsck_01: cmd=%s",cmd)\n\tctx:asend(cmd)\n\tend\nend\n\ngetAllDatas = function(hexStr)\n    local total = 0\n    local dataCount = string.len(hexStr) / 8\n\n    for i = 1, dataCount do\n        local subDataa = string.sub(hexStr, (i - 1) * 8 + 1, (i - 1) * 8 + 8) \n        local subData= iota.hexToFloat(subDataa, 0, 'L')\n\t\ttotal = total + subData\n    \n    end\n\t\n\tlocal fre=total/dataCount\n    return fre\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("gzsck_01:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2020-06-28 11:30:26.043+08	2020-07-29 15:18:05.513+08	2020-06-28	\N
c3bb4463-d16f-4c26-94c3-6fa66c5766b1	fs-newYCxieyi	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n ok=ctx:asend("010203")\nend\n\nonData=function(hex)\n    log.debug('fs_8801  hex=%s', hex)\n    local out = {\n        data = {},\n        result = {}\n    }\n    local str = HextoStr(hex)\n    local jsonTable = json.decode(str)\n    log.debug('fs_8801  jsonTable=%s[type(jsonTable)=%s]', json.encode(jsonTable), type(jsonTable))\n    local pm25 = tonumber(string.format('%0.0f', tonumber(jsonTable.pm25)))\n    local pm10 = tonumber(string.format('%0.0f', tonumber(jsonTable.pm10)))\n    local noise = tonumber(string.format('%0.1f', tonumber(jsonTable.noise)))\n    local temperature = tonumber(string.format('%0.1f', tonumber(jsonTable.temperature)))\n    local humidity = tonumber(string.format('%0.1f', tonumber(jsonTable.humidity)))\n    local windSpeed = tonumber(string.format('%0.1f', tonumber(jsonTable.windSpeed)))\n    local windDirection = tonumber(string.format('%0.1f', tonumber(jsonTable.windDirection)))\n    local windForce = tonumber(string.format('%0.1f', tonumber(jsonTable.windForce)))\n\n    if temperature < -40 or temperature > 60 then\n        temperature = nil\n        out.result = {code = 5001, msg = '温度超阈值[-40,60]'}\n    end\n    if humidity <= 0 or humidity > 100 then\n        humidity = nil\n        out.result = {code = 5001, msg = '湿度超阈值[0,100]'}\n    end\n    if pm25 <= 0 or pm25 > 700 then\n        pm25 = nil\n        out.result = {code = 5001, msg = 'pm2.5超阈值[0,700]'}\n    end\n    if pm10 <= 0 or pm10 > 700 then\n        pm10 = nil\n        out.result = {code = 5001, msg = 'pm10超阈值[0,700]'}\n    end\n    if windSpeed < 0 or windSpeed > 24.5 then\n        windSpeed = nil\n        out.result = {code = 5001, msg = '风速超阈值[0,24.5]'}\n    end\n    if windDirection < 0 or windDirection > 360 then\n        windDirection = nil\n        out.result = {code = 5001, msg = '风向超阈值[0,360]'}\n    end\n    if windForce < 0 or windForce > 10.8 then\n        windForce = nil\n        out.result = {code = 5001, msg = '风力超阈值[0,10.8]'}\n    end\n    if noise < 0 or noise > 200 then\n        noise = nil\n        out.result = {code = 5001, msg = '噪音超阈值[0,200]'}\n    end\n    out.data = {\n        pm25 = pm25,\n        pm10 = pm10,\n        noise = noise,\n        temperature = temperature,\n        humidity = humidity,\n        windSpeed = windSpeed,\n        windDirection = windDirection,\n        windForce = windForce\n    }\n    local resultData = json.encode(out)\n    log.debug('fs_8801  resultData=%s', resultData)\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend	INLINE	2018-11-10 11:08:53.554+08	2019-01-04 17:30:12.618+08	2018-11-10	\N
9dbee489-45fe-4387-8e66-e1b7a6c9608e	hj_inclination_1542	\N	北京华鉴倾角仪协议	1.0	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	f	4cb97284-0871-46d4-baf9-17d494f6db64	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n\nstart=function()\n    log.debug("start %s, ctx=", "hj_inclination_1542.lua",json.encode(device.moduleId))\n    local endian = 'B'\n    local buff=''         \n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.uplink.props.module) > 255  or tonumber(device.uplink.props.module) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.uplink.props.module, endian)          --1:module \n        buff=iota.appendHexByte(buff, 0x02, endian)                     --1:CMD \n        buff=iota.appendHexByte(buff, 0x01, endian)                     --1:datelength\n        local sum = checkSum(buff,0,3)\n        buff=iota.appendHexByte(buff, sum, endian)                     --1:CRC\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        --  print(string.format("out=%s,data=%s",resp, result))\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n\t--15028765\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local xDegrees = ''\n        local yDegrees = ''\n        local temperatures = ''\n        local xdegree =  0\n        local ydegree = 0\n    --01820C0012124501035512002859E4   --moduleId=1\n    --"temp": 26.097594039948262,\n\t--"xDegree": 12.1245,\n\t--"yDegree": -3.5512\n        if string.len(hex)/2 == 15 then\n            if iota.hexToByte(hex,3,'B') == 0x00 then\n                xDegrees = ''\n            elseif iota.hexToByte(hex,3,'B') == 0x01 then\n                xDegrees = '-'\n            end\n\t\t\tlocal xvalue = string.sub(hex,9,10)..'.'..string.sub(hex,11,14)\n            xDegrees = xDegrees..xvalue\n      \t\t\n            if iota.hexToByte(hex,7,'B') == 0x00 then\n                yDegrees = ''\n            elseif iota.hexToByte(hex,7,'B') == 0x01 then\n                yDegrees = '-'\n            end\n\t\t\tlocal yvalue = string.sub(hex,17,18)..'.'..string.sub(hex,19,22)\n            yDegrees = yDegrees..yvalue\n            temperatures = string.sub(hex,23,28)\n\t\t\tlog.debug(temperatures)\n        end\n        if string.len(hex)/2 == 11 then\n            if iota.hexToByte(hex,3,'B') == 0x00 then\n                xDegrees = ''\n            elseif iota.hexToByte(hex,3,'B') == 0x01 then\n                xDegrees = '-'\n            end\n\t\t\tlocal xvalue = string.sub(hex,9,10)..'.'..string.sub(hex,11,14)\n            xDegrees = xDegrees..xvalue\n            temperatures = string.sub(hex,15,20)\n        end\n\t\t\n        xdegree =  tonumber(xDegrees)\n        if yDegrees ~= '' then\n            ydegree = tonumber(yDegrees)\n        end\n        local tempd = tonumber(temperatures)\n\n        local temperature = 1 / (1.4185 * 10 ^ -3 + (2.2842 * 10 ^ -4) * math.log(tempd) + 1.5079 * 10 ^ -6 * math.log(tempd) ^ 2 + 1.8526 * 10 ^ -8 * math.log(tempd) ^ 3)\n        temperature = temperature - 273.2\n\n        out.data = {                --需要测试\n            xDegree = tonumber(string.format("%0.2f",xdegree)),\n            yDegree =  tonumber(string.format("%0.2f",ydegree)),\n            temp = tonumber(string.format("%0.2f",temperature))\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if string.len(data)/2 == 15 then\n        local check = iota.hexToByte(data,14,'B')\n    \tlog.debug("check =%d",check)\n    \tlog.debug("checksum=%d",checkSum(data,0,14))\n        if checkSum(data,0,14) ~= check then\n            errormsg = 'Invalid CRC'\n            errcode = 1003\n            return false\n        end\n    \n    elseif string.len(data)/2 == 11 then\n        local check = iota.hexToByte(data,10,'B')\n        if checkSum(data,0,10) ~= check then\n            errormsg = 'Invalid CRC '\n            errcode = 1003\n            return false\n        end\n    else \n        errormsg = 'Invalid Data '\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x82 then\n  \t\terrcode = 1001\n        errormsg = 'Invalid CMD  ' \n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= tonumber(device.uplink.props.module) then\n  \t\terrcode = 1004\n        errormsg = 'Invalid moduleId  ' \n        return false\n    end\n    return true\n--crc\nend\n\n\n\ncheckSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + iota.hexToByte(data,i,'B'))\n        end\n    end \n    sum = bit:_and(sum , 0xff)\n    return sum\nend 	INLINE	2017-09-06 20:04:55.535+08	2018-06-14 13:42:26.33+08	2018-03-08	\N
790ba3f8-119c-47b6-bdff-ae905ec84c60	SJZ-WD	\N		1.0	6b927c2a-ce23-4bf8-9f83-7307d2856c61	6b927c2a-ce23-4bf8-9f83-7307d2856c61	f	6b927c2a-ce23-4bf8-9f83-7307d2856c61	Lua	\nstart=function()\n\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t--全局\n  out={\n        data ={},\n        result = {},\n    \ttype = 2\n    }\t\t\n\tpoint = 0\n\t\tlocal moduleNo\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\t\tlocal num = 1\n\t\tlocal subdevices=device.dnlinks[1].devices --获取采集仪下子设备列表\n \t\tif subdevices ~= nil then\n    \t  num=0\n          for index,child in pairs(subdevices) do \n              num = num+1\n          end\n    \tend\n\t\t--log.debug("SJZ-WS 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)      \n\t\tbuff=iota.appendHexByte(buff, 0x01, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, num, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n    \t\tlog.debug("SJZ-WS SSend ok!")\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("SJZ-WS SSend error!")\n        end\t\t\n  \t\tlog.debug("SJZ-WS result:%s",result)\n        ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\t\n\t\tif subdevices ~=nil then\n\t\t\tfor index,child in pairs(subdevices) do \t\t\t\t\t\t\t\t\n\t\t\t\tlocal subData={\n\t\t\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\t\t\tdevice=child.id,\n\t\t\t\t\t\t\t\ttype=1  \n\t\t\t\t\t\t\t}\n\t\t\t\tlocal moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t\t\tlocal temperature = iota.hexToShort(hex,3+2*(moduleNo-1),'B')\t\n        \t\tlog.debug("SJZ-WS 设备模块通道 temp=%s  ",temperature)\n\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\ttemp=temperature/100.0\n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,subData)\n\t\t\tend\n\t\tend \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\n \n\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('SJZ-WS 开始校验数据=%s',data)\n\n    log.debug('SJZ-WS 数据校验通过')\n    return true\nend\n\nChValid=function(data,moduleStrCheck)\n\nend\n\n\t\n   \n	INLINE	2018-11-09 11:40:40.418+08	2018-11-09 17:44:19.579+08	2018-11-09	\N
d2c3c812-6cc6-45e0-ac8a-2feb29374205	34534	\N		4646466	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	f	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	Lua	363634636	INLINE	2018-01-16 11:48:22.137+08	2018-01-17 15:09:21.5+08	2018-01-16	\N
5244cf99-a9db-4e29-9126-f4b6c786dba6	crec_vibWire_1404	\N	武汉大桥局振弦采集仪act4238协议	1.0	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "crec_1404", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n    if json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n\tif subdevices ~=nil then\n       \n        log.debug("crec_1404:LUA:根设备devices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("crec_1404:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n        \t\n\t\t   -- local channelNo=tonumber(child.props.channelId)  \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t--log.debug("crec_1404 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   --log.debug("crec_1404 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n            log.debug("crec_1404:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)              -- 1: 指令: 0x03 = 采集\n\t\t\tbuff=iota.appendHexWord(buff, channelNo-1, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0x02, endian)\n            buff=iota.appendHexCrc(buff, 'L' ,0)\n            log.debug("crec_1404:模块%s通道%s的数据send_ok,开始解析s%",moduleNo,channelNo,buff)    \n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n\t\t\t\tlog.debug("crec_1404:模块%s通道%s的数据接收成功,发送数据%s开始解析%s",moduleNo,channelNo,buff,resp)    \n\t\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\t\tlog.debug("crec_1404:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("crec_1404:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('crec_1404:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("crec_1404:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\nend\n\n\n        --moduleId 1，CMD 1 , channelId 1,length 1,vibwire 3, temp 2,crc 2\n        --010301050139E100C9F6DC \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId\n\t--local subChannelId=subDevice.props.channelId\n\tlog.debug("crec_1404:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n         \n\t\tlocal freq = bit:_or(bit:_or(bit:_lshift(iota.hexToByte(hex,4,'B'),16) , bit:_lshift(iota.hexToByte(hex,5,'B'),8) ) , iota.hexToByte(hex,6,'B')) / 100.0\n    \tfreq = tonumber(string.format("%3.32f",freq))\n        --local temp = iota.hexToShort(hex,7,'B') / 10.0\n    \tlocal rawTemp=iota.hexToUShort(hex,7,'B')\n        log.debug("rawTemp=%s",rawTemp)\n        local index=0\n        if rawTemp>0x10000 then\n          index=-1\n        end\n        local temp = (rawTemp % 0x1000 * (-1)^index) / 10.0 \n    \t\n\t\tlog.debug("crec_1404:模块%s通道%s的原始值是：freq=%s,temp=%s",subModuleId,subChannelId,freq,temp)\n        log.debug("crec_1404:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula.props))\n        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n                log.debug("crec_1404:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,k,kt,f0,t0,freq,temp,am)\n\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t        log.debug("crec_1404:模块%s通道%s的phy是：%s",subModuleId,subChannelId,Phy)\n\t\t--end\n        \n       \n       \n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("crec_1404:".."查询子设备原形child=%s",json.encode(child))\n        \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) then\n                 log.debug("crec_1404:".."DeviceInfo是："..tostring(child.id))\n          \t\t log.debug("crec_1404:".."子设备原形child=%s",json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("crec_1404:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('crec_1404:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 11 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('crec_1404:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length',moduleId,channelId)\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('crec_1404:模块%s通道%s 数据校验失败：cmd错误')\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif  tostring(moduleId)~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('crec_1404:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\t--local channelStr=tostring(iota.hexToByte(data,2,'B'))\n\t--if  channelId~= channelStr then\t\n        --errormsg = 'Invalid acq channelId'\n        --errcode = 1004\n\t\t--log.debug('crec_1404:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n        --return false\n    --end\n    --log.debug('crec_1404:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend\n\n\n\n\n	INLINE	2017-09-02 10:46:20.379+08	2018-12-08 14:07:41.569+08	2018-03-08	\N
c06bf37c-adf9-4a49-9f66-0f6e7646453f	fs_pressure_9001	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--	INLINE	2018-03-26 11:03:26.4+08	2018-03-26 11:03:26.4+08	2018-03-26	\N
399b9436-81fa-4410-914b-1a860910858c	analyzeCurrConnNum	\N	解析报文数据：tomcat的当前连接数	1.0.0	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	e1821687-1231-4e5c-a374-46d31857056d	Lua	{}	INLINE	2018-01-09 10:05:55.939+08	2018-01-09 10:05:55.939+08	2018-01-09	\N
074d1656-b4d0-4b38-8cf0-6314c7236c2d	testGZMxieyi	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--//\n\n start=function() \n    ok,resp=ctx:ssend("01020304",5000)\n end\n\nonData=function(hex)\n    log.debug("fs_gzm_2018 收到数据=%s", hex)\n\t--log.debug("fs_gzm_2018 device =%s", json.encode(device))\n    --log.debug("fs_gzm_2018subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n   \n\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=HextoStr(hex)\n        log.debug("fs_gzm_2018:sData是 %s",sData)\n        --获取子字符串表\n        local dataTable=json.decode(sData)\n        \n        \n\n        --分析单类数据\n        for k,sensorValue in ipairs(dataTable.allNodeDatas) do\n            \n            if k>=1 then\n                local factorId=tonumber(sensorValue.factorid)\n\t\t\t\tlocal factorName=getFactorName(factorId)\n                local moduleNo=tonumber(sensorValue.moduleId)\n\t\t\t\tlocal channelNo=tonumber(sensorValue.channel)\n                --解析单条数据\n                for kdata,vdata in ipairs(singleData.data) do\n\t\t\t\t\t\tlog.debug("fs_gzm_2018:遍历解析单条数据 键="..tostring(kdata).." 值="..tostring(vdata))\n                                         \n                           \n\t\t\t\t\t\t\n                            local anglex=tonumber(vdata.value[0])\n\t\t\t\t\t\t\tlocal angley=tonumber(vdata.value[1])\n\t\t\t\t\t\t\tlocal force  --轴力\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal length_cj  --模板沉降\n\t\t\t\t\t\t\tlocal length_sp  --水平位移\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif factorid=="0" then  --模板沉降\n\t\t\t\t\t\t\t\tlength_cj=tonumber(vdata.value[2])\n\t\t\t\t\t\t\telseif factorid=="1" then  --水平位移\n\t\t\t\t\t\t\t\tlength_sp=tonumber(vdata.value[2])\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\telseif factorid=="2" then --轴力\t\t\t\t\t\t\t    \n\t\t\t\t\t\t\t\tforce=tonumber(vdata.value[2])\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal timeStamp=tonumber(vdata.time) --时间戳\n                            local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timeStamp)\n                                                     \n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s",factorName,moduleNo,channelNo)\n\t\t\t\t\t\t\tend\n  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\t\tangley=angley,\n\t\t\t\t\t\t\t\t\tforce=force,\n\t\t\t\t\t\t\t\t\tlength_cj=length_cj,\n\t\t\t\t\t\t\t\t\tlength_sp=length_sp\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttime=recordTime,  \n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\n            \n\n                    \n\t\t\t\tend\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("fs_gzm_2018resultData=%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tonumber(channelStrCheck)== tonumber(channelNoId) then\n                \n          \t\t log.debug("fs_gzm_2018:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("fs_gzm_2018:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("fs_gzm_2018  校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n\t\tlog.debug("fs_gzm_2018: 校验失败 Data is nil")\n        return false\n    end\n\n    if string.sub(alldata,1,8)~='7b22616c' and string.sub(alldata,-2,-1)~='7d' then\n\t    errormsg = 'CMD is wrong'\n        errcode = 1002\n\t\tlog.debug("fs_gzm_2018: 校验失败 CMD is wrong")\n        return false\n\tend\n\n    log.debug("fs_gzm_2018: 校验通过")\n    return true\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetFactorName=function(num)\n   local NO=tonumber(num+1)\n\tlocal FactorNames={"沉降","水平","轴力","倾斜"}\n\tlocal FactorName=FactorNames[NO]\n\treturn FactorName\nend\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n	INLINE	2018-08-08 09:49:41.8+08	2018-08-08 09:49:41.8+08	2018-08-08	\N
412d7ece-a7a5-4a1a-a9b7-4fb9d163a37c	analyzeCpuRate	\N	解析报文中的cpu使用率数据	1.0..0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	f	65f478f1-f37a-4b2d-9652-45e1a06ae0f0	Lua	{}	INLINE	2018-01-09 16:56:35.343+08	2018-01-12 14:11:26.172+08	2018-01-09	\N
9f3d7c20-ffe2-4e03-88d4-798fa7c8dcd8	test	\N		12	e803485f-247f-4792-8d98-37b9a2a70d2e	e803485f-247f-4792-8d98-37b9a2a70d2e	f	e803485f-247f-4792-8d98-37b9a2a70d2e	Lua	342423	INLINE	2018-02-02 15:49:40.023+08	2018-02-02 15:49:40.023+08	2018-02-02	\N
1d20568b-1259-4aac-8a65-4afd295e2e1a	jdrk_transfer_1	\N	建大仁科	1.0	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	f	4a675a7d-e35c-478e-b8f1-ae01437c8281	Lua	\nstart=function()\n    log.debug("start jdrk_transfer_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local moduleNo=tonumber(device.props.moduleId) \n    if device.uplink.props ~='null' then \n        moduleNo=tonumber(device.uplink.props.module) \n    end\n    buff=iota.appendHexByte(buff, moduleNo, endian)   \n    buff=iota.appendHexByte(buff, 0x03, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)              \n    buff=iota.appendHexByte(buff, 0x00, endian)      \n    buff=iota.appendHexByte(buff, 0x00, endian)              \n    buff=iota.appendHexByte(buff, 0x02, endian)         \n    buff=iota.appendHexCrc(buff, 'L' ,0)   \n\n    log.debug(" jdrk_transfer_1 ssend %s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "jdrk_transfer_1.lua",hex)\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        \n        --010304012c01f43a11\n        --\n        local current1 = iota.hexToShort(hex,3,'B');\n        local current2 = iota.hexToShort(hex,5,'B');\n\n        local moduleNo = iota.hexToByte(hex,0,'B')\n        local array = {current1, current2}\n\n        for i=1,2,1 do\n            --获取通道设备device.id\n            local childDevice=getDeviceInfo(moduleNo,i)\n            local deviceid\n            if childDevice~=nil then\n                deviceid=childDevice.id\n                log.debug("jdrk_transfer_1:子设备原形childDevice=%s",json.encode(childDevice))\n                log.debug("jdrk_transfer_1:子设备device.id: "..tostring(device.id))\n                --if childDevice.device.props.formula=="y=ax+b" then\n\n                    local a = childDevice.uplink.capabilities[1].formula.props.a\n                    local b = childDevice.uplink.capabilities[1].formula.props.b\n                    local Phy\n                    log.debug("jdrk_transfer_1:压力：公式参数=%s,%s",a,b)\n                    if a ==nil or b ==nil  then\n                        Phy=nil \n                    else\n                         Phy = a*array[i]+b\n                        log.debug("当前的Phy是:%s",Phy)\n                        local data1 = {\n                            data={\n                            pressure=Phy,\n                            },\n                            device=deviceid,\n                            type=1                       \n                        };\n                        log.debug("Phy结果=%s",Phy)\n                        table.insert(out.data,data1)\n                    end     \n                --end\n            end\n        end\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "jdrk_transfer_1.lua",json.encode(out))\n    return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n                 log.debug("jdrk_transfer_1:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("jdrk_transfer_1:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("jdrk_transfer_1:".."subdevices是nil")\n    \treturn nil\n    end\nend	INLINE	2018-01-16 16:53:01.616+08	2018-03-27 10:32:25.094+08	2018-01-16	\N
cf4c0e24-9798-4c40-af39-b680721eb626	tdx_weight_9801	\N	北京替帝西交通科技称重协议	1.0	9782b3cb-2975-4a3a-ab17-630d68c144dc	9782b3cb-2975-4a3a-ab17-630d68c144dc	f	9782b3cb-2975-4a3a-ab17-630d68c144dc	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n \nstart=function()\n    log.debug("start %s, ctx=", "tdx_weight_9801.lua",json.encode(device.props.moduleId))\nend\n--825502000B01150B3A2C06021001000000005D18000041E800000000000002003000BE0416040000000000000000000000000000FE01A601303030334C000000000000000000000070000000D4080000000000070F000059595959590000E807BC0000000000BE02EA0160020C020000000000000000B1090000F8070000D708000000000000000000000000C0B6D3E5484730333535323032312D30312D31312031313A35383A343200DC3B\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local  IDX_Start = 0  -- 起始指令\n    local  IDX_AxisCount = 2; -- 轴数\n    local  IDX_TotalBase = 5; --总轴距\n    local  IDX_SerialNum = 18; -- 序列号\n    local  IDX_CarModle = 22; -- 车类型\n    local  IDX_RoadNo = 30; -- 车类型\n    local  IDX_CarSpeed = 32; -- 车速\n    local  IDX_AxieWeight1 = 34; -- 轴一重量\n    local  IDX_AxieWeight2 = 36; -- 轴二重量\n    local  IDX_AxieWeight3 = 38; -- 轴三重量\n    local  IDX_AxieWeight4 = 40; -- 轴四重量\n    local  IDX_AxieWeight5 = 42; -- 轴五重量\n    local  IDX_AxieWeight6 = 44; -- 轴六重量\n    local  IDX_AxieWeight7 = 46; -- 轴七重量\n    local  IDX_AxieWeight8 = 48; -- 轴八重量\n    local  IDX_AxieWeight9 = 50; -- 轴九重量\n    local  IDX_AxieWeight10 = 52;-- 轴十重量\n    local  IDX_Carlength = 54; -- 车长\n    local  IDX_MachineType = 56; -- 机器型号\n    local  IDX_CrossRoad = 60; -- 跨道\n    local  IDX_CarTemp = 72; -- 温度\n    local  IDX_GrossWeight = 76; -- 总重\n    local  IDX_Cardirection = 82; -- 方向\n    local  IDX_licence = 140; -- 车牌\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local axisnums = string.sub(hex,2*IDX_AxisCount+1,2*(IDX_AxisCount+1))\n        local axisnum = tonumber(axisnums,16)--轴数\n        local weigh = string.sub(hex,2*(IDX_GrossWeight+3)+1,2*(IDX_GrossWeight+4))..string.sub(hex,2*(IDX_GrossWeight+2)+1,2*(IDX_GrossWeight+3))..string.sub(hex,2*(IDX_GrossWeight+1)+1,2*(IDX_GrossWeight+2))..string.sub(hex,2*(IDX_GrossWeight)+1,2*(IDX_GrossWeight+1))\n        local grossweight = tonumber(weigh,16)\n        local moudleno = toStrHex(string.sub(hex,2*(IDX_MachineType)+1,2*(IDX_MachineType+5)))--模块号\n        local Speeddata = string.sub(hex,2*(IDX_CarSpeed+1)+1,2*(IDX_CarSpeed+2))..string.sub(hex,2*(IDX_CarSpeed)+1,2*(IDX_CarSpeed+1))\n        local speed = tonumber(Speeddata,16)--车速\n        local totalbase = nil --总轴距\n        local carmodel = string.sub(hex,2*(IDX_CarModle)+1,2*(IDX_CarModle+1)) --车型号\n        local cartype = 0\n        if carmodel == "65" then \n            cartype = 1\n        elseif carmodel == "66" then\n            cartype = 2\n        elseif carmodel == "67" then\n            cartype = 3\n        elseif carmodel == "68" then\n            cartype = 4\n        elseif carmodel == "69" then\n            cartype = 5\n        elseif carmodel == "70" then\n            cartype = 6\n        elseif carmodel == "71" then\n            cartype = 7\n        elseif carmodel == "72" then\n            cartype = 8\n        elseif carmodel == "73" then\n            cartype = 9\n        end\n        local directiondata =  string.sub(hex,2*(IDX_Cardirection)+1,2*(IDX_Cardirection+1))\n        local direction = bit:_and(tonumber(directiondata) , 0x01)\n    \tlocal over = bit:_and(tonumber(directiondata) , 0x02)\n        local axieWeight1data = string.sub(hex,2*(IDX_AxieWeight1+1)+1,2*(IDX_AxieWeight1+2))..string.sub(hex,2*(IDX_AxieWeight1)+1,2*(IDX_AxieWeight1+1))\n        local axieWeight1 = tonumber(axieWeight1data,16)\n        local axieWeight2data = string.sub(hex,2*(IDX_AxieWeight2+1)+1,2*(IDX_AxieWeight2+2))..string.sub(hex,2*(IDX_AxieWeight2)+1,2*(IDX_AxieWeight2+1))\n        local axieWeight2 = tonumber(axieWeight2data,16)\n        local axieWeight3data = string.sub(hex,2*(IDX_AxieWeight3+1)+1,2*(IDX_AxieWeight3+2))..string.sub(hex,2*(IDX_AxieWeight3)+1,2*(IDX_AxieWeight3+1))\n        local axieWeight3 = tonumber(axieWeight3data,16)\n        local axieWeight4data = string.sub(hex,2*(IDX_AxieWeight4+1)+1,2*(IDX_AxieWeight4+2))..string.sub(hex,2*(IDX_AxieWeight4)+1,2*(IDX_AxieWeight4+1))\n        local axieWeight4 = tonumber(axieWeight4data,16)\n        local axieWeight5data = string.sub(hex,2*(IDX_AxieWeight5+1)+1,2*(IDX_AxieWeight5+2))..string.sub(hex,2*(IDX_AxieWeight5)+1,2*(IDX_AxieWeight5+1))\n        local axieWeight5 = tonumber(axieWeight5data,16)\n        local axieWeight6data = string.sub(hex,2*(IDX_AxieWeight6+1)+1,2*(IDX_AxieWeight6+2))..string.sub(hex,2*(IDX_AxieWeight6)+1,2*(IDX_AxieWeight6+1))\n        local axieWeight6 = tonumber(axieWeight6data,16)\n        local axieWeight7data = string.sub(hex,2*(IDX_AxieWeight7+1)+1,2*(IDX_AxieWeight7+2))..string.sub(hex,2*(IDX_AxieWeight7)+1,2*(IDX_AxieWeight7+1))\n        local axieWeight7 = tonumber(axieWeight7data,16)\n        local axieWeight8data = string.sub(hex,2*(IDX_AxieWeight8+1)+1,2*(IDX_AxieWeight8+2))..string.sub(hex,2*(IDX_AxieWeight8)+1,2*(IDX_AxieWeight8+1))\n        local axieWeight8 = tonumber(axieWeight8data,16)\n        local axieWeight9data = string.sub(hex,2*(IDX_AxieWeight9+1)+1,2*(IDX_AxieWeight9+2))..string.sub(hex,2*(IDX_AxieWeight9)+1,2*(IDX_AxieWeight9+1))\n        local axieWeight9 = tonumber(axieWeight9data,16)\n        local axieWeight10data = string.sub(hex,2*(IDX_AxieWeight10+1)+1,2*(IDX_AxieWeight10+2))..string.sub(hex,2*(IDX_AxieWeight10)+1,2*(IDX_AxieWeight10+1))\n        local axieWeight10 = tonumber(axieWeight10data,16)\n        local cmslengthdata = string.sub(hex,2*(IDX_Carlength+1)+1,2*(IDX_Carlength+2))..string.sub(hex,2*(IDX_Carlength)+1,2*(IDX_Carlength+1))\n        local cmslength = tonumber(cmslengthdata,16)\n        local licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n        local tempdata = string.sub(hex,2*(IDX_CarTemp+1)+1,2*(IDX_CarTemp+2))..string.sub(hex,2*(IDX_CarTemp)+1,2*(IDX_CarTemp+1))\n        local temp = tonumber(tempdata,16)\n        local ctemp = temp - 100\n        local width = nil\n        local height =nil\n        local crossroaddata = string.sub(hex,2*(IDX_CrossRoad+1)+1,2*(IDX_CrossRoad+2))..string.sub(hex,2*(IDX_CrossRoad)+1,2*(IDX_CrossRoad+1))\n        local crossroads = tonumber(crossroaddata,16)\n        local roadnodata = string.sub(hex,2*(IDX_RoadNo+1)+1,2*(IDX_RoadNo+2))..string.sub(hex,2*(IDX_RoadNo)+1,2*(IDX_RoadNo+1))\n        local roadno = tonumber(roadnodata,16)\n        local serialnumdata = string.sub(hex,2*(IDX_SerialNum+3)+1,2*(IDX_SerialNum+4))..string.sub(hex,2*(IDX_SerialNum+2)+1,2*(IDX_SerialNum+3))..string.sub(hex,2*(IDX_SerialNum+1)+1,2*(IDX_SerialNum+2))..string.sub(hex,2*(IDX_SerialNum)+1,2*(IDX_SerialNum+1))\n        local serialnum = tonumber(serialnumdata,16)\n        local limttotalweight = nil\n        local LimitWeight = nil\n\n     \n        out.data = {                --需要测试\n            grossWeight = grossweight,\n            speed = speed,\n            axisnum = axisnum,\n            totalBase = totalbase,\n            carType = cartype,\n            direction = direction,\n            cmsLength = cmslength,\n            licence = licence,\n            axieWeight = json.encode({axieWeight1,\n            axieWeight2,\n            axieWeight3,\n            axieWeight4,\n            axieWeight5,\n            axieWeight6,\n            axieWeight7,\n            axieWeight8,\n            axieWeight9,\n            axieWeight10}),\n            temp = ctemp,\n            width = width,\n            height = height,\n            crossRoad = crossroad,\n            serialNum = serialnum,\n            limitWeight =LimitWeight,\n            limtTotalWeight = limttotalweight,\n      \t\toverload = over,\n      \t\tlane = roadno\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n  log.debug("length = %d",string.len(data)/2)\n    if data == nil or string.len(data)/2 ~= 172 then\n        errormsg = 'Data is nil or length is not enough'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x82 then\n        errormsg = 'TDX weight buffer startbuffer error'\n        errcode = 1001\n        return false\n    end\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n                  ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n                  ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n                  ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n                  ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n        if v == string.format("%X",tonumber(src,16)) then\n            return k\n        end\n    end\n    return " "\nend	INLINE	2017-09-25 19:25:35.348+08	2021-02-02 15:38:44.343+08	2017-09-25	\N
c72e540a-8318-44ec-98ba-85e71214bd9b	fs_pressure_9002	\N	麦克	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n--2a31372b332e3531363933420d    moduleId=17   channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d     moduleId=17    channelId=1\n--temp": 12.24\n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "fs_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_pressure_9002 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_pressure_9002 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n\tif  tonumber(moduleNo) > 99 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n  --全局out\n      out={\n        data ={},\n        result = {}\n    }\n\t\n    local endian = 'B'\n    local buff=''\n    local sendstr = ''\n\t\n\t\n\t\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RP'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..tostring(p1)..tostring(p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result_pressure = unmarshall(resp,moduleNo)\n    end\n  if out.data.pressure~=nil then\n    log.debug('fs_pressure_9002:'..'压强解析正常'..tostring(out.data.pressure))\n    --压强正常  继续解析\n    sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RT'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..tostring(p1)..tostring(p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    log.debug('fs_pressure_9002:'..'开始温度采集cmd:'..buff)\n    ok,resp=ctx:ssend(buff,15000)  \n    if ok then\n       log.debug('fs_pressure_9002:'..'温度采集成功 开始解析温度:'..resp)\n        result_temp =tempunmarshall(resp,moduleNo) \n      else\n      log.debug('fs_pressure_9002:'..'温度采集失败')\n    end\n  end\n    result=json.encode(out)\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNo_p)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n  log.debug('fs_pressure_9002:'..'pre =%s',toStrHex(hex))\n    local ErrorCode = IsValid(hex,moduleNo_p)\n    if ErrorCode then\n        -- 010404800101488222\n        local pdata = string.sub(toStrHex(hex),5,-4)\n        pre = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            pre = tonumber(pdata) * -1\n        else \n            pre = tonumber(pdata) \n        end\n        out.data.pressure = pre\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n    --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNo_t)\n  log.debug('fs_pressure_9002:'..'receivedtemp =%s',toStrHex(hex))\n    local ErrorCode = IsValidtemp(hex,moduleNo_t)\n    if ErrorCode then\n        -- 010404800101488222\n        local tdata = string.sub(toStrHex(hex),5,-4)\n        local temperature = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            temperature = tonumber(tdata) * -1\n        else \n            temperature = tonumber(tdata) \n        end\n        out.data.temperature = temperature\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_p_check)\n    if data == nil or string.len(data)/2 ~= 13  then\n        errormsg = 'pressure Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,12,'B') ~= 0x0D  then\n        errormsg = 'CMD is not right,0x24 0x0D'\n        errcode = 1001\n        return false\n    end\n  log.debug('d =%s',toStrHex(data))\n    if PadLeft(2,0,moduleNo_p_check) ~= string.sub(toStrHex(data),2,3) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \nIsValidtemp=function(data,moduleNo_t_check)\n    if data == nil or string.len(data)/2 ~= 12  then\n        errormsg = 'temp Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,11,'B') ~= 0x0D  then\n        errormsg = 'CMD is not right,0x24 0x0D'\n        errcode = 1001\n        return false\n    end\n      \tlog.debug('s =%s', toStrHex(data))\n    if PadLeft(2,0,moduleNo_t_check) ~= string.sub(toStrHex(data),2,3) then\n\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nCheck=function(str)\n    local len = string.len(str);\n    local pp = 0\n    for i =1,len do\n        local bi = string.byte(str, i);\n        pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n    end\n    local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n    local p1 = bit:_and(pp,0x0f)\n    return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2018-02-02 15:10:31.073+08	2018-06-28 17:36:46.32+08	2018-02-02	\N
318b2494-9869-496b-b179-399d8330f96c	ryzh_humi_1161	\N		1.0	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	f	e3655afc-a2a8-4bc3-801a-9c3019705a27	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "ryzh_temphuni_1161.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module \n\tlog.debug("ryzh_temphuni_1161 设备模块通道 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x05, endian)                      \n\tbuff=iota.appendHexCrc(buff, 'L' ,0)       \n    log.debug("ryzh_temphuni_1161,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,18000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {},\n\t\t\ttype=2\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("ryzh_temphuni_1161  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--FF040A0064006400640064006409FA\n\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("ryzh_temphuni_1161 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n\t    local dataModuleHex=string.sub(hex,1,2)\n        local dataModule=tonumber(dataModuleHex,16)\n       local dataLength=string.len(hex)/2\n\t   for i=3,dataLength-2,2 do\n\t       local humidity =iota.hexToUShort(hex,i,'B')/10\n       \t\tlocal channel=(i-1)/2\n\t\t   local childDevice=getDeviceInfo(dataModule,channel)\n\t\t   if childDevice~=nil then\n\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\thumidity=tonumber(string.format("%0.2f",humidity))\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\tlog.debug("ryzh_temphuni_1161 m=%s,c=%s,结果=%s",dataModule,channel,json.encode(data1))\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\tend\n\t   end\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("ryzh_temphuni_1161 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 15 then\n        errormsg = string.format('数据长度无效[%s]≠14',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    if string.sub(data, 1, 2) ~= 'ff' or  string.sub(data, 5,6) ~= '0a' then\n        errormsg = string.format('无效的数据指令=%s', data)\n        errcode = 1003\n        return false\n    end\n\t\n\tlocal dataCheckModule=string.sub(data,1,2)\n\tif tonumber(dataCheckModule,16) ~=tonumber(moduleCheck)  then\n        errormsg = string.format('无效的模块号=0x%s[%s]', dataCheckModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("ryzh_temphuni_1161 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("ryzh_temphuni_1161:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("ryzh_temphuni_1161 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("ryzh_temphuni_1161 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("ryzh_temphuni_1161:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("ryzh_temphuni_1161:  subdevices是nil")\n    \treturn nil\n    end\nend	INLINE	2018-01-08 19:19:36.706+08	2018-12-15 09:26:34.609+08	2018-01-06	\N
476e231d-d7b8-49da-bc07-0b0dd084b5d3	br_waterLevel_1905	\N	西安北瑞三元电子水尺协议	1.0	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	f	467605c5-28cc-4c6b-ab24-05578bcf5197	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "br_waterLevel_1905.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need rewrite'}\n        ctx:done(json.encode(errout))\n    else\n\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x04, endian)              \n        buff=iota.appendHexByte(buff, 0x40, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x02, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- 010404447a00000000   moduleId=1\n    --"waterLevel": 1000\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local level = iota.hexToFloat(hex,3,'B')\n        out.data = {\n            waterLevel = level\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n    \treturn false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 11:26:41.221+08	2018-02-28 18:32:12.188+08	2017-09-14	\N
30362f9f-8691-4ba1-8338-583ea6d80c08	bw_Inclination_1	\N	北微电子罗盘协议	1.0	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	f	684052b5-3f7b-4e98-a4bd-2982f7d94203	Lua	--//01 协议文档/5月第1周/无锡北微传感科技有限公司/BWS2000超高精度全温补数字双轴倾角传感器-无锡北微传感科技有限公司.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n--770D008410001701796302266522 \n--moduleId=0\n--"anglex": -0.17,\n--"angley": 179.63,\n--"anglez": 226.65,\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "bw_Inclination_1.lua", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''         \n    local errout={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    if tonumber(device.uplink.props.module) > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,module > 255'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, 0x77, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)\n        buff=iota.appendHexByte(buff, device.uplink.props.module, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)\n        local plussum = string.format("%X",checkPlusSum(buff,1,4))\n        buff = buff..PadLeft(2,0,plussum)\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n            print(string.format("out=%s,data=%s",resp, result))\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n     \n--公式  \n        local xFirst=string.sub(hex,9,9)\n        local xSign\n        if xFirst=='0'then\n            xSign=1\n        else\n            xSign=-1\n        end\n        local x=tonumber(string.sub(hex,10,14))/100*xSign\n\n        local ySign\n        local yFirst=string.sub(hex,15,15)\n        local ySign\n        if yFirst=='0'then\n            ySign=1\n        else\n            ySign=-1\n        end\n        local y=tonumber(string.sub(hex,16,20))/100*ySign\n\n        local zSign\n        local zFirst=string.sub(hex,21,21)\n        local zSign\n        if zFirst=='0'then\n            zSign=1\n        else\n            zSign=-1\n        end\n        local z=tonumber(string.sub(hex,22,26))/100*zSign\n       \n        out.data = {                --需要测试\n            anglex = x,\n            angley = y,\n            anglez=z\n        }\n    else\n        out.result = {code = errcode, msg = message}\n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if string.len(data)/2 ~= 14 or iota.hexToByte(data,0,'B') ~= 0x77 then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,2,'B') ~= tonumber(device.uplink.props.module) then\n        errcode = 1004\n        errormsg = 'Invalid moduleId  ' \n        return false\n    end\n    return true\n--crc\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)))) % 0xffff\n        end\n    end \n\n    sum = bit:_and(sum ,0xff)\n    return sum\nend \n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend	INLINE	2018-04-03 11:03:13.008+08	2018-04-04 10:20:56.969+08	2018-04-03	\N
5cbb0e55-7ff3-43d3-bfce-e2e1d8ea2186	DAM3055_1202	\N	模拟量采集仪协议	1.0	406df859-191e-4c39-9faf-18b70e060d97	406df859-191e-4c39-9faf-18b70e060d97	f	406df859-191e-4c39-9faf-18b70e060d97	Lua	--////04 项目资料/2017-07/阿尔泰-DAM-3055通讯说明.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("load script %s, moduleId=%s", "DAM3055.lua", device.props.moduleId or "[nil]")   \nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("DAM3055:LUA:根设备devices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n            log.debug("DAM3055:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n            local moduleNo=tonumber(child.props.moduleId) \n\t\t    local channelNo=tonumber(child.props.channelId)\n            if child.uplink.props ~='null' then \n        \t    moduleNo=tonumber(child.uplink.props.module) \n                channelNo=tonumber(child.uplink.props.channel)\n            end\n            log.debug("DAM3055:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t     \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)\n            buff=iota.appendHexByte(buff, 0x04, endian)  \n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)  \t\t\t\n\n\t\t\tbuff=iota.appendHexByte(buff, 2*channelNo-2, endian)        \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, endian)\t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L',0) \n\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("DAM3055:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("DAM3055:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("DAM3055:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('DAM3055:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("DAM3055:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n\n\n--  0104028000D8F0  Phy=50  rawvalue=32768\nunmarshall=function(hex,subDevice)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId\n    --local subChannelId=subDevice.props.channelId\n    local subModuleId=subDevice.props.moduleId\n\tlocal subChannelId=subDevice.props.channelId\n    if subDevice.uplink.props ~='null' then \n        moduleNo=subDevice.uplink.props.module\n        channelNo=subDevice.uplink.props.channel\n    end\n\tlog.debug("DAM3055:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n \n        \n\t\tlocal rawvalue = iota.hexToUShort(hex,3,'B');\n\t\tlog.debug("DAM3055:模块%s通道%s的原始值是：rawvalue=%s",subModuleId,subChannelId,rawvalue)\n        log.debug("DAM3055:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].props))\n        \n\t\tlocal Phy=0\n\t\tlocal value=0\n        if subDevice.uplink.capabilities[1].formula.metaid == "155ebc9a-097d-4567-baf4-6271f43c2669" then --模拟量线性转换数字量公式   \n\t\t\tlocal aL = subDevice.uplink.capabilities[1].formula.props.aL\n\t\t\tlocal aH = subDevice.uplink.capabilities[1].formula.props.aH\n\t\t\tlocal dL = subDevice.uplink.capabilities[1].formula.props.dL\n\t\t\tlocal dH = subDevice.uplink.capabilities[1].formula.props.dH\n\t\t\tif aL~=nil and aH~=nil and dL~=nil and dH~=nil then\n\t\t\t\taL = tonumber(aL)\n\t\t\t\taH = tonumber(aH)\n\t\t\t\tdL = tonumber(dL)\n\t\t\t\tdH = tonumber(dH)\t\t\t\t\t\t\n\t\t\t\tif aL==0 and aH==20 then\n\t\t\t\t\t   value = (20.0/65536)*rawvalue;\n\t\t\t\t\t   Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tif aL==0 and aH==10 then\n\t\t\t\t\t   value = (10.0/65536)*rawvalue;\n\t\t\t\t\t   Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tif aL==4 and aH==20 then\n\t\t\t\t\t   value = (16.0/65536)*rawvalue+4;\n\t\t\t\t\t   Phy = (dH - dL)/(aH - aL)*(value - aL) + dL\n\t\t\t\tend\t\t\t\n\t\t\t\tlog.debug("DAM3055:模块%s通道%s的aL=%s,aH=%s,dL=%s,dH=%s,value=%s,phy=%s",subModuleId,subChannelId,aL,aH,dL,dH,value,Phy)\t\n\t\t\tend\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == "df6a9e9a-ecfa-46b2-9244-698035b23dfa" then --基泰 角度公式   \n\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].props.K1\n\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].props.K2\n\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].props.Fo\n\t\t\t\tlog.debug("DAM3055:公式48参数K1=%s,K2=%s,K3=%s,Fo=%s",K1,K2,K3,Fo)\n\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\telse\n\t\t\t\t\tvalue = (rawvalue - 32767) / 32767.0 * 5000.0;--获得模拟量  阿尔泰 厂家提供 （mv）\n\t\t\t\t\tlocal Fi=value         \n\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\t\t\tlog.debug("DAM3055:电流模块当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\t\n\t\tend\n        \n       \n       \n\t\tsubData.data={\n\t\t            analog=value,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('DAM3055:开始校验数据')\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 or iota.hexToByte(data,2,'B') ~= 0x02 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    \n--crc\n  \t--判断数据有效性\t\t\t\n  local crcH = iota.hexToByte(data,5,'B');\t \n  local crcL = iota.hexToByte(data, 6,'B');\t\n\n  log.debug("DAM3055:crcH等于:%s",crcH)\n  log.debug("DAM3055:crcL等于:%s",crcL)\n  --判断CRC16正确性\n  local checkCrc16=string.sub(data,-4,-1)\n --log.debug("checkCrc16等于:%s",checkCrc16)\n  local dataCopy=string.sub(data,1,-5)\n  dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n  --log.debug("DAM3055:dataCopy+CRC等于:%s",dataCopy)\n  local dataCopycrcH = iota.hexToByte(dataCopy,5,'B');\t \n  local dataCopycrcL = iota.hexToByte(dataCopy, 6,'B');\t\n\n  --log.debug("DAM3055:dataCopycrcH等于:%s",dataCopycrcH)\n  --log.debug("DAM3055:dataCopycrcL等于:%s",dataCopycrcL)\n  local isCheckCrcOK=(crcH==dataCopycrcL and crcL==dataCopycrcH)\n  if isCheckCrcOK ~=true then \n  \tlog.debug("DAM3055:isCheckCrcOK等于:%s",isCheckCrcOK)\n    errormsg = 'Hex crc16 False'\n    errcode = 1004\n    return false\n  end\n  log.debug('DAM3055:数据校验通过')\n    return true\nend\n	INLINE	2018-01-09 09:47:11.459+08	2018-04-08 16:27:28.03+08	2018-01-07	\N
0548ebe4-a105-461a-80e5-ade045ca89f6	Led_Server	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug("Led_server:device=%s",json.encode(device))\n--根据经纬度获取天气\n\tlocal location = device.props.location\n    local url = "http://api.map.baidu.com/telematics/v3/weather?location=".. location .. "&output=json&ak=wEiighBCdHAkOrXRHDsqlgW5";\n\n\t--Sleep(1)\n\t --请求数据\n\tlocal datareq = {\n\t\t\t\ttype= "http",\n\t\t\t\turl=url,  \n\t\t\t\tmethod="get",\n\t\t\t\theader={}\n\t\t\t}\n\t --get发送\n\tlocal dataok,dataack=ctx:ssend(datareq,4000)\n\tlocal wd = nil\n\tif not dataok or dataack==nil then\t\t\n\t\twd = DisplayWeather(dataack)\n\telse\n\t\tlog.debug("recived data is nil,cant reverse to weather!!")\n\tend\t\n\t\t\t\n--根据结构物和监测因素获取数据\n\tlocal data = GetEnvData()\n-- 组合数据\n\tlocal ack = combineParams(wd,data)\n\t--local str = toStrHex(ack)\n\n--数据推送\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("Led_server:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n\n\nfunction DisplayWeather(data)\n\tlog.debug("Led_server DisplayWeather: %s",json.encode(data.body))\n\tif data.code==200 and data.body == ""  then\n\t\talldataTable=json.decode(data.body)  -- 有数据\n\t\tlocal rt_data=data.data.rt_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t--遍历节点数据\n\t\tfor k,v in ipairs(rt_data) do\n\t\t\tlog.debug("Led_server k=%s, value=%s",k,json.encode(v))\t\n\t\t\tlocal json = v.results.Last.Last\n\t\t\tlocal todata = json.First.First\n\t\t\tlocal sd = {\n\t\t\t\tdate = tostring(todata.date),\n\t\t\t\tweather = tostring(todata.weather),\n\t\t\t\twind = tostring(todata.wind),\n\t\t\t\ttemperature = tostring(todata.temperature)\n\t\t\t}\n\t\t\treturn sd\n\t\tend\n\t\t\n\tend\nend\n\n\nfunction GetEnvData()\n\tlog.debug("Led_server GetData")\n\tlocal data = capability.param\n\tlocal _endatas = json.encode(data.body)\n \tlog.debug("Led_server GetData：%s",_endatas)\n\tlocal str = ""\n\tfor key ,value in pairs(_endatas.screens.contents.content) do\n\tif #(_endatas.screens.contents.content) > 1 then\n\t\tstr = str..value[key]\n\telse \n\t\tstr = str..value[key].."\\r\\n"\n\tend\t\n\treturn str\nend\n\nfunction combineParams(wd,data)\n\tlog.debug("Led_server combineParams")\n\tlocal jwd = json.encode(wd)\n\t--数据转换\n\tlocal weather = jwd.weather\n\tlocal strdata =tostring(data)\n\tstrdata = string.gsub(strdata, "weather", tostring(weather))\n\tlocal buff = GetCommandByContent(strdata)\n\tlocal ok, ack = ctx:ssend(buff, 20000)\n\treturn ack\nend\n\nfunction GetCommandByContent(data)\n\tlog.debug("Led_server GetCommandByContent")\n\tlocal dispmode = 10 \n\tif device.props.dispmode ~=nil then\n\t\tdispmode = tonumber(device.props.dispmode)\n\tend\t\n\tlocal speed = 1 \n\tif device.props.speed ~=nil then\n\t\tspeed = tonumber(device.props.speed)\n\tend\n\tlocal stay = 5 \n\tif device.props.stay ~=nil then\n\t\tstay = tonumber(device.props.stay)\n\tend\n\tlocal size = 16 \n\tif device.props.size ~=nil then\n\t\tsize = tonumber(device.props.size)\n\tend\t\n\tlocal color = 0 \n\tif device.props.color ~=nil then\n\t\tcolor = tonumber(device.props.color)\n\tend\t\n\tlocal screenarea = 64 \n\tif device.props.screenarea ~=nil then\n\t\tscreenarea = tonumber(device.props.screenarea)\n\tend\n\tlocal ch = tonumber(device.props.channel)\n\n\tlocal strData = string.format("T;E%02d;P%02d;D%02d;F%02d;C%02d;S%s",dispmode,speed,stay,size,color,tostring(data))\n\tlog.debug("Led_server strData:%s",strData)\n  \tlocal datastr = StrtoHex(strData)\t\n\tlocal nDataLen = string.len(datastr)/2\n\tlocal szCommand = "qtdata "..tostring(ch).." "..tostring(nDataLen) --channel\n  \tlog.debug("Led_server szCommand:%s ",szCommand)\n\tlocal szData = StrtoHex(szCommand)\n\tlocal nCmdLen = string.len(szCommand)\n\tlocal cmd1 = string.format("%02X",bit.rshift(tonumber(nCmdLen),16))  \t\n\tlocal cmd2 = string.format("%02X",bit.rshift(tonumber(nCmdLen),8))\n\tlocal cmd3 = string.format("%02X",tonumber(nCmdLen))\n\tlocal data1 = string.format("%02X",bit.rshift(tonumber(nDataLen),16))\n\tlocal data2 = string.format("%02X",bit.rshift(tonumber(nDataLen),8))\n\tlocal data3 = string.format("%02X",tonumber(nDataLen))\n\tlocal str= "AA01BB00"..cmd1..cmd2..cmd3..szData.."AA01BB10"..data1..data2..data3..datastr\n\tlog.debug("Led_server str:%s",str)\n\treturn str\nend\n\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tret=ret..str\n\tend\n\treturn ret\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend	INLINE	2019-01-04 18:17:17.426+08	2019-01-06 14:24:45.756+08	2019-01-04	\N
040b16d3-afbd-46d8-bd00-71364dbbcf02	br_mop	\N		1.0	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	f	467605c5-28cc-4c6b-ab24-05578bcf5197	Lua	\nstart = function()\n\tlocal cmd = capability.param\n\tlog.debug("MOP:linkcnt=%s",cmd)\n\tupdate_mop(cmd)\n    ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n    log.debug("MOP: update_mop command=%s",command)\n\n\n\tlocal tosend = StrtoHex(command)\n\tlocal ok, ack = ctx:ssend(tosend, 4000)\n\tlog.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = HextoStr(ack)\n        }\n    }\n\tlog.debug("MOP : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend\n\n	INLINE	2019-07-11 16:53:40.064+08	2019-07-11 16:53:40.064+08	2019-07-11	\N
fa427e87-1cdc-4ef4-95d5-4cf112506b12	gmkj7502test	\N		1.0	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	Lua	--20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议（V2.0）.doc\n\nstart =\n    function()\n    log.debug('start %s, ctx=%s', 'gmkj__7500.lua', json.encode(device))\n\n    local endian = 'B'\n    local buff = ''\n\n    moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = iota.appendHexByte(buff, 0x14, endian)\n    buff = iota.appendHexByte(buff, 0x03, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexByte(buff, 0x02, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexCrc(buff, 'L', 0)\n\n    log.debug('gmkj__7500,m=%s, send=%s', moduleNo, buff)\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n        ctx:done(result)\n    else\n        --\n        local errout = {\n            data = {},\n            result = {}\n        }\n        errout.result = {code = 1001, msg = '采集超时'}\n        ctx:done(errout)\n    end\nend\n\n--0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n\nunmarshall =\n    function(hex, moduleNoStr)\n    log.debug('gmkj__7500 收到数据=%s', hex)\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local data = hex\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        log.debug('gmkj__7501 数据有效')\n\n        local alldata = {}\n\n        --分析单类数据\n        for i = 1, 32 * 8, 1 do\n            local wavelength = iota.hexToFloat(hex, i * 4, 'B')\n            alldata[i] = tonumber(string.format('%0.4f', wavelength))\n        end\n        log.debug('gmkj__7501  通道1数据1=%s,通道8数据32=%s', alldata[1], alldata[256])\n        --遍历设备 匹配数据\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n        if subdevices ~= nil then\n            local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n            for index_channel, channelDevice in pairs(subdevices) do\n                local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n                for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n                    local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --通道\n                    --log.debug("gmkj__7501 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n                    local keyIndex = (channelNo_sub - 1) * 32 + nodeNo_sub\n                    local WaveLength = alldata[keyIndex]\n                    local temperature\n                    if nodeDevice.uplink.capabilities[1].formula.metaid == 'c4f1e8d6-82f3-4436-b65e-4d1a8474612e' then --温度公式\n                        local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n                        local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n                        local To = nodeDevice.uplink.capabilities[1].formula.props.To\n                        if WTo == nil or Kwt == nil or To == nil then\n                            temperature = nil\n                        else\n                            temperature = (WaveLength - WTo) * 1000 * Kwt + To\n                        end\n                        local data_temp = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                physicalvalue = tonumber(string.format('%0.2f', temperature))\n                            },\n                            device = nodeDevice.id,\n                            type = 1\n                        }\n\n                        table.insert(out.data, data_temp)\n                    elseif nodeDevice.uplink.capabilities[1].formula.metaid == '83c9a688-5f70-472f-abce-c1c127ce189b' then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n                        local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n                        local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n                        local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n                        local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n                        local Kwt  --温度的温度系数Kt\n                        local WTo  --T0温度波长值WTo\n\n                        if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n                            local linkInformation = Split(cn, ',')\n                            local link_tempDevice_channel = linkInformation[1]\n                            local link_tempDevice_node = linkInformation[2]\n                            local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n                            if w_device ~= nil then\n                                Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n                                WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n\t\t\t\t\t\t\t\tlocal keyIndex_linkTempDevice = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n                    \t\t\tlocal WaveLength_linkTempDevice = alldata[keyIndex_linkTempDevice]\n\t\t\t\t\t\t\t\tlocal physicalvalue=((WaveLength-Wo)-(WaveLength_linkTempDevice-WTo)*Kwt/Kt)*1000/K\n\n                                local data_strain = {\n                                    data = {\n                                        wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                        physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n                                    },\n                                    device = nodeDevice.id,\n                                    type = 1\n                                }\n\n                                table.insert(out.data, data_strain)\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    return resultData\nend\n\nIsValid = function(data, moduleStr)\n    local checkLen = string.len(data) / 2\n    if data == nil or checkLen ~= 1030 then\n        errormsg = string.format('无效的数据长度=%s≠1030', checkLen)\n        errcode = 1001\n        log.debug('gmkj__7501 数据校验失败 %s ', errormsg)\n        return false\n    end\n\n    local checkModule = iota.hexToByte(data, 0, 'B')\n    if tostring(moduleStr) ~= tostring(checkModule) then\n        errormsg = string.format('无效的模块号=%s≠%s', checkModule, moduleStr)\n        errcode = 1004\n        log.debug('gmkj__7501 数据校验失败 %s ', errormsg)\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr,nodeStr)\n\t--log.debug("gmkj__7501:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("gmkj__7501:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\tlocal sensorchannel=subdevice.uplink.props.channel\n\t\t\t\t\t--log.debug("gmkj__7501:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("gmkj__7501:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensornode=sub_subdevice.uplink.props.node\n\t\t\t\t\t\t\n\t\t\t\t\t\tif tostring(sensorchannel) == channelStr and tostring(sensornode)==nodeStr then\n\t\t\t\t\t\t\tlog.debug("gmkj__7501:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gmkj__7501:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("gmkj__7501:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("gmkj__7501:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("gmkj__7501 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("gmkj__7501 has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("gmkj__7501 has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-01-29 10:54:12.085+08	2019-01-29 15:10:23.867+08	2019-01-29	\N
1fb03ffc-fd93-4ea6-bf06-11311a655212	bw_inclination_1522	\N	无锡北微双轴倾角仪协议	1.0	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	f	684052b5-3f7b-4e98-a4bd-2982f7d94203	Lua	--//01 协议文档/5月第1周/无锡北微传感科技有限公司/BWS2000超高精度全温补数字双轴倾角传感器-无锡北微传感科技有限公司.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n--7710008400020103100051320000000012\n--moduleId=0\n--"xDegree": 2.0103,\n--"yDegree": -0.5132\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "bw_Inclination_1522.lua", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''         \n    local errout={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("bw_Inclination_1522 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("bw_Inclination_1522 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n    if tonumber(moduleNo) > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId > 255'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, 0x77, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)\n        buff=iota.appendHexByte(buff, moduleNo, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)\n        local plussum = string.format("%X",checkPlusSum(buff,1,4))\n        buff = buff..PadLeft(2,0,plussum)\n    \tlog.debug("bw_Inclination_1522  ssend buff=%s",buff)\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n            print(string.format("out=%s,data=%s",resp, result))\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex,moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n     \n--公式  \n\n        local xFirst =bit:_rshift(bit:_and(iota.hexToByte(hex,4,'B') , 0xF0) , 4)\n        local xSecondNum = 100 * bit:_and (iota.hexToByte(hex,4,'B') , 0x0F)\n        local xThirdNum = 10 * bit:_rshift(bit:_and (iota.hexToByte(hex,5,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,5,'B') , 0x0F)\n        local xForthNum = 0.1 * bit:_rshift(bit:_and (iota.hexToByte(hex,6,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,6,'B') , 0x0F) * 0.01\n        local xFifthNum = 0.001 * bit:_rshift(bit:_and (iota.hexToByte(hex,7,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,7,'B') , 0x0F) * 0.0001\n    \n        local yFirst = bit:_rshift(bit:_and (iota.hexToByte(hex,8,'B') , 0xF0) , 4)\n        local ySecondNum = 100 * bit:_and (iota.hexToByte(hex,8,'B') , 0x0F)\n        local yThirdNum = 10 * bit:_rshift(bit:_and (iota.hexToByte(hex,9,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,9,'B') , 0x0F)\n        local yForthNum = 0.1 * bit:_rshift(bit:_and (iota.hexToByte(hex,10,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,10,'B') , 0x0F) * 0.01\n        local yFifthNum = 0.001 * bit:_rshift(bit:_and (iota.hexToByte(hex,11,'B') , 0xF0) , 4) + bit:_and (iota.hexToByte(hex,11,'B') , 0x0F) * 0.0001\n        log.debug("F=%d",yForthNum)\n        local angleX = xSecondNum + xThirdNum + xForthNum + xFifthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum + yFifthNum\n        if xFirst == 0x01 then \n            angleX = -angleX\n        end\n        if yFirst == 0x01 then \n            angleY = -angleY\n        end        \n        out.data = {               \n            xDegree = tonumber(string.format("%0.3f",angleX)),\n            yDegree = tonumber(string.format("%0.3f",angleY))\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('bw_Inclination_1522 %s', json.encode(out))\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n    if string.len(data)/2 ~= 17 or iota.hexToByte(data,0,'B') ~= 0x77 then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,2,'B') ~= tonumber(moduleNoStrCheck) then\n        errcode = 1004\n        errormsg = 'Invalid moduleId  ' \n        return false\n    end\n    log.debug("bw_Inclination_1522  校验通过 hex=%s",data)\n    return true\n--crc\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n\n    sum = bit:_and(sum ,0xff)\n    return sum\nend \n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend	INLINE	2017-09-02 14:34:36.909+08	2020-05-21 18:03:00.408+08	2017-08-31	\N
04cd9536-5e39-46e9-a263-370fb4a6acd3	test_Xieyi	\N		1.0	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	f	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	Lua	--//04 项目资料/2017-07/北京星移/CYW11通用型投入式液位变送器.pdf\nstart=function()\n\tlog.debug("test999:load script %s, moduleId=%s", "xy_LiquidLevel_1931", device.props.moduleId or "[nil]")\n\tlog.debug("test999: device=%s,", json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--01030202acb959\n--moduleId=1\n--"liquidLevel": 1710,\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local LiquidLevel = iota.hexToShort(hex,3,'B')*5/2.0;\n        \n        out.data = {\n            liquidLevel = LiquidLevel,          \n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2018-03-01 14:27:34.721+08	2018-03-01 14:41:08.695+08	2018-03-01	\N
fa94f295-26f0-4685-852a-f9bee4be9845	fs_peopleCounAJS_986	\N	安吉升RS485	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	 start = function()\n\nend\n\nonData = function(hex)\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    local result = protocol_decode(hex, moduleNo)\n    --判断是否快到0点 清空计数\n    mayClear(moduleNo)\n    log.debug('fs_peopleCounter_986  result=%s', result)\n    ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n    local hourNow = tonumber(os.date('%H'))\n    local minuteNow = tonumber(os.date('%M'))\n    if hourNow >= 23 or minuteNow > 30 then --23点30后清空数据\n        local clearBuff = protocol_encode(moduleNo)\n        ctx:asend(clearBuff)\n       log.debug('fs_peopleCounter_986  清空指令=%s', clearBuff)\n    end\nend\n\nfunction protocol_encode(moduleNoStr)\n    local BE = 'B'\n    local buff = '63'\n    buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n    buff = iota.appendHexByte(buff, 0x02, BE) --\n    buff = iota.appendHexByte(buff, 0x07, BE)\n    buff = iota.appendHexByte(buff, 0x00, BE)--00 全部清空  \n    buff = buff .. CS8(1, buff)\n    buff = iota.appendHexByte(buff, 0x0d, BE)\n    return buff\n   --63 00 02 07 00 f7 0d\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复   630011288200000010000000140000007a000000010d\n--原始数据   --"inCount": 130,\n-- "outCount": 16\nfunction protocol_decode(hex, moduleNoCheck)\n    local data = hex\n    --存储结果\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    log.debug(data)\n    --判断数据有效性\n    local ErrorCode = IsValid(hex, moduleNoCheck)\n    if ErrorCode then\n       -- local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n      --  local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n      --  log.debug('fs_peopleCounter_986  inBytesStr=%s', inBytesStr)\n        local inCount = iota.hexToUInt(hex,4,'L')   --getCount(inBytesStr) --  :进人数\n        local outCount = iota.hexToUInt(hex,8,'L') --  :出人数\n        --local inCount2 = iota.hexToUInt(hex,12,'B')   --getCount(inBytesStr) --  :进人数\n        --local outCount2 = = iota.hexToUInt(hex,16,'B') --  :出人数\n\n\n        out.data = {\n            inCount = inCount,\n            outCount = outCount,\n            stayCount = inCount - outCount\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    log.debug('fs_peopleCounter_986   开始校验 data=%s', data)\n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen ~= 22 then\n        errormsg = string.format('数据长度无效=%s≠22', dataLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data, 3, 'B') ~= 0x28 then\n        errormsg = 'CMD is not right'\n        errcode = 1003\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 1, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n    local lcr = 0\n    for i = start, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    local value =256- bit.band(lcr, 0x7f)\n    return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n    local bytes_len = string.len(bytes_8) / 2\n    local count = 0\n    for i = 0, bytes_len - 1, 1 do\n        local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n        count = count + num * math.pow(10, i)\n    end\n    return count\nend	INLINE	2021-02-03 13:59:20.985+08	2021-02-22 11:12:09.816+08	2021-02-03	\N
d33fb432-a9e5-4bc3-9758-ff853f405c10	bjsmt_level	\N		1.0	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	f	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	Lua	--‪D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "bjsmt_level.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("bjsmt_level,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("bjsmt_level  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n    log.debug("bjsmt_level m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n        out.data = {           \n            pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("bjsmt_level m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n        errcode = 1001\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2020-10-26 13:21:08.508+08	2020-10-29 13:07:38.221+08	2020-10-26	\N
7dd1d023-4e38-4172-b2b4-6009de43f1a7	httpserverTest	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	onData=function(data)\n{\n  --local data = json.encode(data)\n    log.debug("http  %s",data)\n}\n  	INLINE	2018-10-29 18:04:06.779+08	2018-10-29 18:04:06.779+08	2018-10-29	\N
8118946d-d7e5-46b3-87ea-0d441ec77a2f	ax_zx	\N	安信振弦 标准协议 主动上报	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	\nonData = function(resp)\n    log.debug('ax_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('ax_zx device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n   \n\n    local moduleNo=device.uplink.props.module\n  \n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n\t    local timeStr = string.sub(resp,21,48)\n\t    log.debug("ax_zx timeStr=%s",timeStr)\n       \n        log.debug('ax_zx 数据有效=%s', resp)\n        local  allSubData = getAllDatas(resp)\n\t\tlog.debug('ax_zx  allSubData=%s',json.encode(allSubData))\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('ax_zx child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('ax_zx    解析通道%s数据', channelNo)\n               \t \tresult = ParseResult(child, allSubData, channelNo, moduleNo,timeStr) ---插入数据\n                \ttable.insert(out.data, result)\n            \t--end\n            end\n        end\n    else\n        log.debug('ax_zx 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n  \n\n    local resultData = json.encode(out)\n    log.debug('ax_zx  resultData=%s', resultData)\n    ctx:notify(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 49, -5)\n    local dataCount = string.len(subDataArea) / 14\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)\n       \n        DataList[subChannel]= {iota.hexToShort(singleChannelDataHex,1,'B'),iota.hexToShort(singleChannelDataHex,3,'B')/10000,iota.hexToShort(singleChannelDataHex,5,'B')}\n    \tlog.debug('ax_zx  getAllDatas  DataList[%s]=%s',subChannel,json.encode(DataList[subChannel]))\n    end\n    return DataList\nend\n\nParseResult = function(childDevice, datatable, subChannelId, moduleNoStr,timeStr)\n    log.debug('ax_zx datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n\tlocal dateTimeStr = toStrHex(timeStr)\n\tlog.debug("ax_zx dateTimeStr=%s",dateTimeStr)\n    local timenow = unixtimestamp(dateTimeStr)\n\n    local freq = datatable[subChannelId][1]+datatable[subChannelId][2]\n    local temp = datatable[subChannelId][3]\n    --if childDevice ~= nil then\n        --if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n            --local k = childDevice.uplink.capabilities[1].formula.props.K\n\n            --local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To\n\n            --log.debug('ax_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            --if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                --Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            --end\n        --end\n        --log.debug('ax_zx freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                frequency = tonumber(string.format('%0.2f',freq))\n                --physicalvalue = tonumber(string.format('%0.2f',Phy))\n            },\n            device = childDevice.id,\n            type = 1,\n\t\t\ttime=timenow,\n        }\n    --end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('ax_zx has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('ax_zx has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('ax_zx 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xFF then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('ax_zx HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend\nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2019-12-25 10:52:36.203+08	2019-12-25 11:35:50.388+08	2019-12-25	\N
b3a939d8-6a64-4588-afe5-6a949ce71644	fs_trash_http	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n\nend\nasend_HttpResponse = function(bodyString)\n\tlog.debug('fs_trash_http asend_HttpResponse=%s', bodyString)\n\tlocal sender ={ pkg = bodyString }\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n\n\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --数据域 内的索引号\n\tsData = httpbody.Body\n    log.debug('fs_trash_http httpbody=%s', json.encode(httpbody))\n\tlocal url =  httpbody.URL\n\t--if string.find(url,'/fl/ws') then\n\t\tParseTrash(httpbody)\n\t--elseif string.find(url,'/fl/record') then\n\t\t--ParseRecord(httpbody)\n\t--end\n\n    local resultData = json.encode(out)\n    log.debug('fs_trash_http resultData=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\nParseTrash = function(httpbody)\n\tlocal ErrorCode = IsValid(sData)\n    if ErrorCode then\t\t\n\t\tlocal moduleNo = device.uplink.props.id --模块\n        sData = httpbody.Body\t\t\n\t\tlocal raw = Split(sData,':')\n\t\tlog.debug('fs_trash_http raw=%s', raw[2])\n\t\tlocal buff = string.sub(raw[2],2,-3)\n\t\tlog.debug('fs_trash_http buff=%s', buff)\n        --获取子字符串表\n\t\tlocal longitude = iota.hexToFloat(buff,26,'B')* 1000000\n\t\tlog.debug('fs_trash_http longitude=%s', longitude)\n\t\tlocal latitude = iota.hexToFloat(buff,30,'B')* 1000000\n\t\tlog.debug('fs_trash_http latitude=%s', latitude)\n\t\tlocal electric = iota.hexToShort(buff,40,'L')\n\t\tlog.debug('fs_trash_http electric=%s', electric)\n\t\tlocal totalbarrel = iota.hexToByte(buff,50,'L')\n\t\tlocal alarm\n\t\tlocal state\n\t\tlocal temp\n\t\tlocal trash\n\t\tlocal weight\n\t\tlog.debug('fs_trash_http totalbarrel =%s',tostring(totalbarrel))\n\t\t\n\t\tfor i = 1,totalbarrel,1 do\n\t\t\tlocal fault = iota.hexToByte(buff,51 + 6*(i-1),'L')\n\t\t\tlog.debug('fs_trash_http join for')\n\t\t\tif fault == 0x01 then\n\t\t\t\talarm = "温度传感器断开"\n\t\t\telseif fault == 0x02 then\n\t\t\t\talarm = "容量传感器断开"\n\t\t\telseif fault == 0x04 then\n\t\t\t\talarm = "称重系统故障"\n\t\t\telseif fault == 0x10 then\n\t\t\t\talarm = "电机断开"\n\t\t\telseif fault == 0x020 then \n\t\t\t\talarm = "电机短路"\n\t\t\telseif fault == 0x40 then\n\t\t\t\talarm = "上限位故障"\n\t\t\telseif fault == 0x80 then\n\t\t\t\talarm = "下限位故障"\n\t\t\telseif fault == 0x00 then\n\t\t\t\talarm = "正常"\n\t\t\tend\n\t\t\tlocal statecode =  iota.hexToByte(buff,52 + 6*(i-1),'L')\n\t\t\tif statecode == 0x01 then\n\t\t\t\tstate = "温度超限"\n\t\t\telseif statecode == 0x02 then\n\t\t\t\tstate = "容量已满"\n\t\t\telseif statecode == 0x04 then\n\t\t\t\tstate = "称重超限"\n\t\t\telseif statecode == 0x08 then\n\t\t\t\tstate = "垃圾被清理"\n\t\t\telseif statecode == 0x010 then \n\t\t\t\tstate = "投口未关闭"\n\t\t\telseif statecode == 0x20 then\n\t\t\t\tstate = "缺水"\n\t\t\telseif statecode == 0x00 then\n\t\t\t\tstate = "正常"\n\t\t\tend\n\t\t\ttemp = iota.hexToByte(buff,53 + 6*(i-1),'L')\n\t\t\ttrash = iota.hexToByte(buff,54 + 6*(i-1),'L')\n\t\t\tweight =  iota.hexToShort(buff,55 + 6*(i-1),'L')\n\t\t\tlog.debug('fs_trash_http weight %s',weight)\n\t\t\tlocal  childDevice = getDeviceInfo(i,i)\n\t\t\tlocal outdata = {\n\t\t\t\tdata = {\n\t\t\t\t\tlongitude = longitude,\n\t\t\t\t\tlatitude = latitude,\n\t\t\t\t\tsignal = SG,\n\t\t\t\t\tusedelectric = usedelectric,\n\t\t\t\t\ttemprature = temp,\n\t\t\t\t\ttrash = trash\n\t\t\t\t},\n\t\t\t\tdevice = childDevice.id,\n\t\t\t\ttype = 1,\n\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00")\n\n\t\t\t}\n\t\t\tif fault ~= 0x00 then\n\t\t\t\toutdata.result = {code=fault,msg=alarm}\n\t\t\t\toutdata.data ={}\n\t\t\tend\t\t\n\t\t\ttable.insert(out.data,outdata)\n\t\tend\n\t\tlog.debug('fs_trash_http out=%s',json.encode(out))\n\telse\n\t\tout.result = {code = 3004, msg = "数据协议解析错误"}\n    end\n\tlog.debug('fs_trash_http ParseTrash')\n\tResponde()\nend\n\nResponde = function()\n\tlocal number = #(device.dnlinks[1].devices) --桶数量\n\tlocal num = #(device.dnlinks)\n\tlog.debug('fs_trash_http Responde %s, %s',tostring(number),tostring(num))\n\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)\n\tlocal length = 43+4*number + 2\n\tlog.debug('fs_trash_http length %s',tostring(length))\n\tbuff=iota.appendHexWord(buff, length, 'L') \n\tlog.debug('fs_trash_http buff %s',buff)\n\tlocal year=os.date("%Y") \n\tlocal y = string.sub(tostring(year),-2,-1)\n\n\tbuff=buff..string.format("%02X",tonumber(y))\n\tlocal month=os.date("%m")\n\tbuff=buff..string.format("%02X",tonumber(month))\n\tlocal day=os.date("%d")\n\tbuff=buff..string.format("%02X",tonumber(day))\n\tlocal hour=os.date("%H")\n\tbuff=buff..string.format("%02X",tonumber(hour))\n\tlocal minute=os.date("%M")\n\tbuff=buff..string.format("%02X",tonumber(minute))\n\tlocal sec=os.date("%S")\n\n\tbuff=buff..string.format("%02X",tonumber(sec))\n\tbuff=buff.."0000"\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)..string.format("%02X",65).."00" --机构编码\n\tbuff=buff..string.format("%02X",66)..string.format("%02X",65)..string.format("%02X",65).."00" --单位编码\n\tbuff=buff.."0007".."00"..string.format("%02X",22).."00"..string.format("%02X",18).."00"..string.format("%02X",6)\n\tbuff=buff.."00"..string.format("%02X",18).."00"..string.format("%02X",6).."0007000900070009"\n\tbuff=buff..string.format("%02X",10).."01"--消毒\n\tbuff=buff..string.format("%02X",30)--=握手周期\n\n\tlocal subdevices = device.dnlinks[1].devices\n    \t\n\tfor i,subdevice in pairs(subdevices)  do\n\t\tlocal ttype = subdevice.props.type\n\t\tlocal ctype = 6\n\t\tif ttype == '厨余' then\n\t\t\tctype = 0\n\t\telseif ttype == '纸张' then\n\t\t\tctype = 1\n\t\telseif ttype == '金属' then\n\t\t\tctype = 2\n\t\telseif ttype == '塑料' then\n\t\t\tctype = 3\n\t\telseif ttype == '玻璃' then\n\t\t\tctype = 4\n\t\telseif ttype == '其他' then\n\t\t\tctype = 5\t\t\t\n\t\telseif ttype == '回收' then\n\t\t\tctype = 6\n\t\telseif ttype == '有害' then\n\t\t\tctype = 7\n\t\telseif ttype == '织物' then\n\t\t\tctype = 8\n\t\telseif ttype == '感染' then\n\t\t\tctype = 9\n\t\telseif ttype == '损伤' then\t\n\t\t\tctype = 10\n\t\telseif ttype == '化学' then\n\t\t\tctype = 11\n\t\telseif ttype == '病理' then\n\t\t\tctype = 12\n\t\telseif ttype == '大件' then\n\t\t\tctype = 13\n\t\telseif ttype == '建筑' then\n\t\t\tctype = 14\n\t\telseif ttype == '书报' then\n\t\t\tctype = 15\n\t\telseif ttype == '塑料瓶' then\t\n\t\t\tctype = 16\n\t\telseif ttype == '电子垃圾' then\n\t\t\tctype = 17\n\t\telseif ttype == '干垃圾' then\n\t\t\tctype = 18\n\t\telseif ttype == '湿垃圾' then\n\t\t\tctype = 19\n\t\telseif ttype == '易腐垃圾' then\n\t\t\tctype = 20\n\t\tend\n\t\tbuff=buff..string.format("%02X",ctype)--=桶类型\n\t\tbuff=buff..string.format("%02X",95)\n\t\tbuff=iota.appendHexWord(buff, 5, BE) \n\tend\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)\n\tlog.debug('fs_trash_http response buff %s',buff) \n\n\tlocal response_GpsData_bodyStr = HextoStr(buff)\n\tlog.debug('fs_trash_http response_GpsData_bodyStr %s',response_GpsData_bodyStr) \n    asend_HttpResponse(response_GpsData_bodyStr)\n\nend\n\nParseRecord = function(httpbody)\n--投放\n\tlocal ErrorCode = IsValid(sData)\n    if ErrorCode then\n\t\t--local moduleNo = device.uplink.props.id --模块\n        sData = httpbody.Body\n\t\tlog.debug('fs_trash_http Record sData %s',sData)\n        --获取子字符串表\n\t\tlocal raw = Split(sData,',')\n\t\tlocal step = #(raw)\n\t\tfor i = 1,step,1 do\n\t\t\tif tonumber(raw[i]) < 0 then\n\t\t\t\traw[i] = tostring(256 + tonumber(raw[i]))\n\t\t\tend\n\t\tend\t\t\t\t\n\t\tlocal trashtype = tonumber(raw[18])\n\t\tlocal weighthex =  string.format("%02X",tonumber(raw[21]))..string.format("%02X",tonumber(raw[22]))\n\n\t\tlocal weight = iota.hexToShort(weighthex,0,'L')\n\t\tlog.debug('fs_trash_http weight %s',tostring(weight))\n\t\t\n\t\tlocal year = tonumber(raw[23]) + 2000\n\t\tlocal month = tonumber(raw[24])\n\t\tlocal day = tonumber(raw[25])\n\t\tlocal hour = tonumber(raw[26])\n\t\tlocal minute = tonumber(raw[27])\n\t\tlocal second = tonumber(raw[28])\n\t\t\n\t\tlocal user = string.format("%02X",tonumber(raw[29]))..string.format("%02X",tonumber(raw[30]))..string.format("%02X",tonumber(raw[31]))..string.format("%02X",tonumber(raw[32]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[33]))..string.format("%02X",tonumber(raw[34]))..string.format("%02X",tonumber(raw[35]))..string.format("%02X",tonumber(raw[36]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[37]))..string.format("%02X",tonumber(raw[38]))..string.format("%02X",tonumber(raw[39]))..string.format("%02X",tonumber(raw[40]))\n\t\t\t\t\t..string.format("%02X",tonumber(raw[41]))..string.format("%02X",tonumber(raw[42]))..string.format("%02X",tonumber(raw[43]))..string.format("%02X",tonumber(raw[44]))\n\t\tlocal timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\t\tlocal  childDevice = getDeviceInfo(1,1)\n\t\tlocal outdata = {\n\t\t\tdata = {\n\t\t\t\tuser = user,\n\t\t\t\ttrashtype = trashtype,\n\t\t\t\tweight = weight\n\t\t\t},\n\t\t\tdevice = childDevice.id,\n\t\t\ttype = 1,\n\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00", timenum)\n\n\t\t}\n\t\ttable.insert(out.data,outdata)\n\t\tlog.debug('fs_trash_http out %s',json.encode(out))\t\t\n\tend\n\tResponde()\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        log.debug("fs_trash_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug("fs_trash_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then                \n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug('fs_trash_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else                \n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n\t\t\t\tlog.debug('fs_trash_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    log.debug('fs_trash_http:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fs_trash_http: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata) --握手校验\n    log.debug('fs_trash_http  校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        log.debug('fs_trash_http: 校验失败 Data is nil')\n        return false\n    end\n\n    log.debug('fs_trash_http: 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = string.sub(hex, 2 * i - 1, 2 * i)\n        local ascii = string.char(tonumber(bi, 16))\n        str = str .. ascii\n    end\n    return str\nend\n\n  -- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n\tlog.debug('fs_trash_http  Split')\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-10-16 14:53:59.501+08	2020-04-02 15:08:35.897+08	2019-10-16	\N
2c523c86-9933-490e-9101-55c1156606ab	shjy_DAS_BK-ZC08	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('BK-ZC08 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('BK-ZC08 device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('BK-ZC08设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('BK-ZC08设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    buff = buff .. 'F7601269'\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '4010000102030405060708090A0B0C0D0E0F'\n    --1:指令:采集\n    local wCRCin = 0x0000\n    local wCPoly = 0x1021\n    local wChar = 0\n    local usDataLen = string.len(buff) / 2\n    log.debug('BK-ZC08 usDataLen = %s', usDataLen)\n    local var = 0\n    while usDataLen > 0 do\n        var = var + 1\n        wChar = string.sub(buff, var, var + 1)\n        var = var + 1\n        wChar = tonumber(wChar, 16)\n        wChar = bit.lshift(wChar, 8) --左移\n        wCRCin = bit.bxor(wCRCin, wChar)\n        for i = 0, 7 do\n            local value = bit.band(wCRCin, 0x8000)\n            if value > 0 then\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            else\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            end\n        end\n        --log.debug("BK-ZC08 END wCRCin = %X",wCRCin)\n        usDataLen = usDataLen - 1\n    end\n    buff = buff .. string.format('%04X', wCRCin)\n    log.debug('BK-ZC08 END buff = %s', buff)\n    ctx:asend(buff)\n    ctx:sleep(10)\n\tctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('BK-ZC08 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('BK-ZC08    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \tend\n            end\n        end\n    else\n        log.debug('BK-ZC08 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('BK-ZC08 ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('BK-ZC08  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 15, -5)\n    local dataCount = string.len(subDataArea) / 10\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)+1\n        local subData = string.sub(singleChannelDataHex, 3, -1)\n        DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n    \tlog.debug('BK-ZC08  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n       local freq = datatable[subChannelId]\n    --childDevice = getDeviceInfo(subChannelId, moduleNoStr)\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == 'ac0133f4-cdfd-424a-aae0-598e71b861a6' then --振弦公式\n            local k = childDevice.uplink.capabilities[1].formula.props.K\n\n            local f0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\n            log.debug('BK-ZC08 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)\n            end\n        end\n        log.debug('BK-ZC08 freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n                rawValue = freq,\n                physicalvalue = Phy\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('BK-ZC08 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('BK-ZC08 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('BK-ZC08 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xF7 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('BK-ZC08 HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2019-04-29 15:46:18.983+08	2019-05-31 17:56:30.305+08	2019-04-29	\N
0d0ea7fb-6462-43e0-a70c-559a0a3cec40	analyzeTotalConnNum	\N	解析tomcat总连接数	1.0.0	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	e1821687-1231-4e5c-a374-46d31857056d	Lua	{}	INLINE	2018-01-09 10:38:08.758+08	2018-01-09 10:38:08.758+08	2018-01-09	\N
ce8ccb17-58ab-4f9d-a15e-ea4a14fb3b36	szwygc_DCH1	\N		1.0	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	f	38913139-1273-4b5a-9155-e4aff0fc89ee	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("szwygc_DCH1: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    --log.debug("szwygc_DCH1: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\n    local sData= HextoStr(hex)\n    log.debug("szwygc_DCH1: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],';END')\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\t \n\n\t \n\tlog.debug("szwygc_DCH1: spliteData3=%s",json.encode(spliteData3))\n\t--local type_sensorL=Split(spliteData3[1],':')\n\t \n\t--local type_sensor=type_sensorL[2]\n\tlocal allDataL=Split(spliteData3[2],':')\n   \n\n\tlocal dateTimeStrl=Split(spliteData3[3],':')\n\tlocal dateTimeStr=dateTimeStrl[2]\n\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n\tlocal asd=string.find(allDataL[2],',')\n\tif asd==nil then\n\t    local allDatas=Split(allDataL[2],'_')\n\t    local childDevice = getDeviceInfos(moduleNo,1)\t\n        log.debug('szwygc_DCH1  childDevice=%s',json.encode(childDevice))\n\t\tif\tchildDevice~=nil  then\n\t\t\tdeviceId=childDevice.id\n\t\t\t        \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength\t=allDatas[2],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCH1:(振弦) out=%s",json.encode(out))\n\t\telse\n\t\t\t\t--log.debug('szwygc_DCH1  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\tend\n\telse\n\t    local allData=Split(allDataL[2],',')\n\t\tfor k, v in pairs(allData) do\n\t\tlog.debug("szwygc_DCH1: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allDatas=Split(v,'_')\n\t\t\n\t\tlocal arrlength=table.getn(allDatas)\t\n\t\t--if arrlength==2 then\n\t\tlocal childDevice = getDeviceInfos(moduleNo,k)\t\n        log.debug('szwygc_DCH1  childDevice=%s',json.encode(childDevice))  \n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t        \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tlength\t=allDatas[2],\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=timenow\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCH1:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('szwygc_DCH1  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\t--end\n\t\t \n\t\tend \n\tend\n\t\n\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("szwygc_DCH1: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\t\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("szwygc_DCH1:  subdevices是nil")\n    return nil\n    end\nend\n\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("szwygc_DCH1 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,4)\n    log.debug("szwygc_DCH1 year_a是:%s",year_a)\n\tlocal month_a=string.sub(dateTimeStr,5,6)\n\t\n\tlocal day_a=string.sub(dateTimeStr,7,8)\n\n\tlocal hour_a=string.sub(dateTimeStr,9,10)\n\n\tlocal minute_a=string.sub(dateTimeStr,11,12)\n\t\n\tlocal second_a=string.sub(dateTimeStr,13,14)\n\n    \n\n    local year = tonumber(year_a)\n\tlog.debug("szwygc_DCH1 year是:%s",year)\n\tlocal month = tonumber(month_a)\n\tlog.debug("szwygc_DCH1 month是:%s",month)\n    local day = tonumber(day_a)\n\tlog.debug("szwygc_DCH1 day是:%s",day)\n    local hour = tonumber(hour_a)\n\tlog.debug("szwygc_DCH1 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a)\n\tlog.debug("szwygc_DCH1 minute是:%s",minute)\n    local second = tonumber(second_a)\n\tlog.debug("szwygc_DCH1 second是:%s",second)\n    \n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("szwygc_DCH1 recordTime是:%s",recordTime)\n\treturn recordTime\nend	INLINE	2020-06-12 13:40:15.96+08	2020-06-15 13:50:02.529+08	2020-06-12	\N
f617f353-687a-436b-a571-5a4af04eb61a	Test双轴倾角传感器	\N		1.0	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	f	0da40e17-7ca2-4ea8-88b5-5d4d4c5f0273	Lua	--//20200901  双轴倾角传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 功能码\n    buff=iota.appendHexWord(buff, 4 ,endian)               -- 2: 数据地址\n    buff=iota.appendHexWord(buff, 6 ,endian)                --2：数据长度\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("fs_trwsd_1166  out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"X": 13.5,\n--"Y": 23.9\n\n--01 03 0C 00 00 60 40 33 33 A3 C1 9A 99 B2 42 CE 2B\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \tlocal Xtemp= iota.hexToFloat(hex,3,'L')\n        local Ytemp = iota.hexToFloat(hex,7,'L')\n            \n        out.data = {\n            X = Xtemp,\n            Y = Ytemp\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n    if data == nil or string.len(data)/2~=17 then\n        errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_trwsd_1166  数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend\n	INLINE	2020-09-01 14:23:25.297+08	2020-09-02 16:19:54.329+08	2020-09-01	\N
9280880b-8a43-4904-8993-ed0176d23888	nawei_temp_1	\N	温度协议	1.0	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	f	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	Lua	start=function()\n\tlog.debug("load script %s, moduleId=%s", "nawei_temp_1", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t--01 04 00 01 00 02 f1 c9\n\tlocal moduleNo=device.uplink.props.module \t\t\n\tlog.debug("nawei_temp_1 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n    buff=iota.appendHexByte(buff, 0x04, endian)            \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x01, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n    buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n    buff=iota.appendHexCrc(buff, 'L' ,0) \n    log.debug("nawei_temp_1 send data: %s  ",buff)           \n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n        result = unmarshall(resp)\n    else\n        log.debug("nawei_temp_1 SSend error!")\n    end\n    ctx:done(result)\nend\n\n--01 04 04 41 C8 00 00 7D EA\n--moduleId=1   \n--"temperature": 25\n\nunmarshall=function(hex)\n    log.debug("nawei_temp_1 recieve data: %s  ",hex) \n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n        local temperature = iota.hexToFloat(hex,3,'B')        \n        out.data = {\n            temperature=temperature\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('nawei_temp_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'nawei_temp_1 Hex CMD False ' \n        return false\n    end\n    if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    local crcData=string.sub(data,1,-5)\n    crcData=iota.appendHexCrc(crcData, 'L' ,0)\n    --if icrcData ~= data then\n        --errcode = 1001\n        --errormsg = 'nawei_temp_1 crc False' \n        --return false\n    --end\n    log.debug('nawei_temp_1 数据校验通过')\n    return true\nend\n\n\n\t\n   \n\n	INLINE	2018-07-02 10:14:04.852+08	2018-07-02 14:30:55.524+08	2018-07-02	\N
df33dca6-7c97-4dd6-a1e1-09b2a98ba5f8	rion_inclination_1	\N	SCA126V 	1.0	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	f	85ba98a3-b552-4bcf-a736-30b525492481	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=%s", "rion_inclination_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x68, endian)\n    buff=iota.appendHexByte(buff, 4, endian)  \n\n    local moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rion_inclination_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rion_inclination_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n    log.debug("rion_inclination_1  m=%s  ssend=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo) \n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n    --680D0084002010100525000000FB    moduleId=0\n    --"angleX": 2.01,\n\t--"angleY": 11,\n\n\n    log.debug("rion_inclination_1 m=%s received=%s",moduleStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==28) then  \n\n        local IDX_XDATA = 4    \n        local IDX_YDATA = 7        \n        local IDX_Temp = 10  \n\n        local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n        local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n        local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n        local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n        local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n        local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n        local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n        local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n        local angleX = xSecondNum + xThirdNum + xForthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum\n\n        if (xFirst == 0x01) then    \n            angleX = -angleX\n        end\n\n        if (yFirst == 0x01) then\n            angleY = -angleY\n        end\n\n        if (tFirst == 0x01) then\n            temp = -temp\n        end\n       \n        out.data = {\n           anglex=angleX*10,\n           angley=angleY*10\n        }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "rion_inclination_1.lua",json.encode(out))\n    return json.encode(out)\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n \n\n\n \n\n	INLINE	2018-01-18 15:10:52.202+08	2018-03-29 11:02:13.937+08	2018-01-18	\N
1b43757a-ca0b-4ac4-9f69-c44fe9d59bc8	te	\N		1	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	Lua	1	INLINE	2018-08-09 08:29:30.1+08	2019-12-06 18:00:55.542+08	2018-08-09	\N
93c70807-ebbf-4b88-b0b9-0232cca98b69	dl_weight_9802	\N	江西飞尚科技大连称重协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n \n\nstart=function()\n    log.debug("start %s", "fs_weight_9803.lua")\n\tok=ctx:asend("01020304")\nend\n\n\nonData=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\tlog.debug("dl_weight_9802 收到数据 hex=%s  ",hex)\n    local  IDX_Start = 0  -- 起始指令\n    local  IDX_CMD = 1; -- 命令字 \n    local  IDX_DataLen = 2; -- 数据长度\n    local  IDX_MoudleID = 10; -- 模块号\n    local  IDX_RoadNo = 34; -- 模块号\n    local  IDX_licence = 35; -- 车牌号\n    local  IDX_axeisCount = 45; -- 轴数\n    local  IDX_GrWeight =46; -- 总重\n    local  IDX_LimitWeight = 55; -- 总重限重\n    local  IDX_UpWeight = 57; -- 超重\n    local  IDX_AxieWeight1 = 59; -- 轴一重量\n    local  IDX_AxieWeight2 = 61; -- 轴二重量\n    local  IDX_AxieWeight3 = 63; -- 轴三重量\n    local  IDX_AxieWeight4 = 65; -- 轴四重量\n    local  IDX_AxieWeight5 = 67; -- 轴五重量\n    local  IDX_AxieWeight6 = 69; -- 轴六重量\n    local  IDX_AxieWeight7 = 71; -- 轴七重量\n    local  IDX_AxieWeight8 = 73; -- 轴八重量\n    local  IDX_Speed = 75;--车速\n    local  IDX_TotalBase = 97; -- 总轴距\n    local  IDX_Cardirection = 107; -- 方向\n    local  IDX_CarModle = 108; -- 车类型\n    local  IDX_Carlength = 99; -- 车长\n    local  IDX_CarRoadTemp = 111; -- 路面温度\n    local  IDX_CarPrefTemp = 150; -- 温度标志\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local axisnums = string.sub(hex,2*IDX_axeisCount+1,2*(IDX_axeisCount+1))\n        local axisnum = tonumber(axisnums,16)--轴数\n\t\t--log.debug("dl_weight_9802  axisnum=%s  ",axisnum)\n        local grossweight=iota.hexToShort(hex,IDX_GrWeight,'B')\n        local speed = iota.hexToByte(hex,IDX_Speed,'B')--车速\n        local totalbase = iota.hexToShort(hex,IDX_TotalBase,'B')--总轴距\n        local carmodel = iota.hexToShort(hex,IDX_CarModle,'B') --车型号\n\t\t--log.debug("dl_weight_9802  speed=%s  totalbase=%s,carmodel=%s",speed,totalbase,carmodel)\n        if carmodel == 2 then \n            carmodel = 3\n        elseif carmodel == 3 then\n            carmodel = 2\n        end\n\n        local direction = iota.hexToByte(hex,IDX_Cardirection,'B')--行驶方向\n        local axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'B')\n        local axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'B')\n        local axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'B')\n        local axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'B')\n        local axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'B')\n        local axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'B')\n        local axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'B')\n        local axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'B')\n  \n        local axieWeight9 = 0\n  \n        local axieWeight10 = 0\n\n        local cmslength = iota.hexToShort(hex,IDX_Carlength,'B')--车长\n        local licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n\n        local temperature = iota.hexToByte(hex,IDX_CarRoadTemp,'B')\n        local temppref = iota.hexToByte(hex,IDX_CarPrefTemp,'B')\n        local temp = 0\n        if temppref > 0 then \n            if temperature ~= 0 then \n                temp = temperature * -1\n            else\n                temp = 0\n            end\n        else\n            temp = temperature\n        end\n        \n        local width = nil\n        local height =nil\n        local crossroad = nil\n        local serialnum = nil\n\n        local limttotalweight = iota.hexToShort(hex,IDX_LimitWeight,'B')\n        local LimitWeight = iota.hexToShort(hex,IDX_UpWeight,'B')\n\t\tlog.debug("dl_weight_9802 grossweight=%s,LimitWeight=%s,",grossweight,LimitWeight)\n        local over = nil\n        if grossweight > LimitWeight then \n            over = "1"\n        else \n            over = "0"\n        end\n        local moduleno = toStrHex(string.sub(hex,7,38)) \n        local channel = iota.hexToByte(hex,IDX_RoadNo,'B') --车道号\n        moduleno = moduleno + tostring(channel)\n\t\tlog.debug("dl_weight_9802 moduleno=%s,channel=%s" ,moduleno,channel)\n        out.data = {                --需要测试\n            grossWeight = tostring(grossweight),\n            speed = tostring(speed),\n            axisnum = tostring(axisnum),\n            totalBase = tostring(totalbase),\n            carType = tostring(carmodel),\n            direction = tostring(direction),\n            cmsLength = tostring(cmslength),\n            licence = tostring(licence),\n            axieWeight = json.encode({axieWeight1,\n            axieWeight2,\n            axieWeight3,\n            axieWeight4,\n            axieWeight5,\n            axieWeight6,\n            axieWeight7,\n            axieWeight8,\n            axieWeight9,\n            axieWeight10}),\n            temp = tostring(temp),\n            width = tostring(width),\n            height = tostring(height),\n            crossRoad = tostring(crossroad),\n            serialNum = tostring(serialnum),\n            limitWeight =tostring(LimitWeight),\n            limtTotalWeight = tostring(limttotalweight),\n            overload = tostring(over),\n      \t\tlane = channel\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\tlog.debug("dl_weight_9802 校验数据%s",data)\n    if iota.hexToByte(data,2,'B') ~= 0x99 then\n        errormsg = 'weight buffer length is not enough.'\n        errcode = 1001\n        return false\n    end\n\tlog.debug("dl_weight_9802 数据校验通过")\n    return true\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n                  ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n                  ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n                  ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n                  ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n        if v == string.format("%X",tonumber(src,16)) then\n            return k\n        end\n    end\n    return " "\nend\n	INLINE	2017-09-25 20:27:59.78+08	2018-07-05 17:08:00.498+08	2017-09-25	\N
cfb93ff0-1f09-49fb-98a7-71bcc7116084	br_waterLevel_1902	\N	西安北瑞三元雷达式水位协议	1.0	467605c5-28cc-4c6b-ab24-05578bcf5197	467605c5-28cc-4c6b-ab24-05578bcf5197	f	467605c5-28cc-4c6b-ab24-05578bcf5197	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "br_waterLevel_1902.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need rewrite'}\n        ctx:done(json.encode(errout))\n    else\n\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x02, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- 01030400000b6f3DD4   moduleId=1\n    --"waterLevel": 29.27\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local level = iota.hexToShort(hex,5,'B') / 100.0\n        out.data = {\n            waterLevel = level\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 11:59:55.863+08	2018-02-28 18:32:12.19+08	2017-09-14	\N
ed3bd325-ddc9-45f1-becc-616d8d57d528	bw_Inclination_1546	\N	无锡北微双轴倾角仪Inclination_BWK226_1546	1.0	684052b5-3f7b-4e98-a4bd-2982f7d94203	684052b5-3f7b-4e98-a4bd-2982f7d94203	f	684052b5-3f7b-4e98-a4bd-2982f7d94203	Lua	--//04 项目资料/2017-06/无锡北微传感器资料/BWK226技术手册.pdf\n--[[\n协议号: 1546;\n协议名: modbus 数据采集仪.\n]]\n--位操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\n--或\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n--与\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\n--右移\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\n--左移\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n--\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "bw_Inclination_1546.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\n\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 7704000408\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x77, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 2:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tlocal chenckSum=SumCR(string.sub(buff,3,-1));  --checkSum\n    log.debug("chenckSum等于:%s",chenckSum);--测试用\n    buff=buff..chenckSum;\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  770D008410268000336503137166  \n--原始数据   x=-26.8  x=33.65  moduleId=0\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\t\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tout.result = {code=errcode,msg=errmessage}\n\t\tout.data = {}\n\telse\n\t\tlocal IDX_XDATA = 4;\n\t\tlocal IDX_YDATA = 7;\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算XDATA原始值\n\t\tlocal xFirstNum = iota.hexToByte(data,IDX_XDATA,'B');\n\t\tlocal sx=bit:_rshift(xFirstNum,4);--标志位+  or  -\n\t\tlocal  xSecondNum = bit:_and(iota.hexToByte(data,IDX_XDATA,'B'),15);-- 0xF0==240  0x0F==15\n\t\tlocal  X100=xSecondNum*100;\n\t\t\n\t\tlocal  X10=bit:_rshift(iota.hexToByte(data,IDX_XDATA+1,'B'),4)*10\n\t\tlocal  X1=bit:_and(iota.hexToByte(data,IDX_XDATA+1,'B'),15);\n\t\t\n\t\tlocal  X01=bit:_rshift(iota.hexToByte(data,IDX_XDATA+2,'B'),4)*0.1\n\t\tlocal  X001=bit:_and(iota.hexToByte(data,IDX_XDATA+2,'B'),15)*0.01;\n\t\tlocal  angleX = X100 + X10+X1+ X01+X001;\n\t\tif sx==1 then\n\t\t\tangleX=-angleX;\n\t\tend\n\t\t\n\t\t--计算YDATA原始值\n\t\tlocal yFirstNum = iota.hexToByte(data,IDX_YDATA,'B');\n\t\tlocal sy=bit:_rshift(yFirstNum,4);--标志位+  or  -\n\t\tlocal  ySecondNum = bit:_and(iota.hexToByte(data,IDX_YDATA,'B'),15);-- 0xF0==240  0x0F==15\n\t\tlocal  Y100=ySecondNum*100;\n\t\t\n\t\tlocal  Y10=bit:_rshift(iota.hexToByte(data,IDX_YDATA+1,'B'),4)*10\n\t\tlocal  Y1=bit:_and(iota.hexToByte(data,IDX_YDATA+1,'B'),15);\n\t\t\n\t\tlocal  Y01=bit:_rshift(iota.hexToByte(data,IDX_YDATA+2,'B'),4)*0.1\n\t\tlocal  Y001=bit:_and(iota.hexToByte(data,IDX_YDATA+2,'B'),15)*0.01;\n\t\tlocal  angleY = Y100 + Y10+Y1+ Y01+Y001;\n\t\tif sy==1 then\n\t\t\tangleY=-angleY;\n\t\tend\n\t\t\n\t\tout.data = {\n\t\tangleX=angleX,\n\t\tangleY=angleY\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=14 then\n\t\terrmessage = 'Invalid Msg, len='\n\t\treturn true\n\telse\n\t\tlocal startbyte_0 = iota.hexToByte(data, 0,'B');\n\t\tlocal startbyte_3 = iota.hexToByte(data, 3,'B');\n\t\t\n\t\tif startbyte_0 ~= 0x77 or startbyte_3 ~= 0x84  then\n\t\t\tlog.debug("帧头或命令错误")\n\t\t\terrmessage = 'Invalid Msg'\n            errcode=1001\n\t\t\treturn true\n\t\tend\n\tend\n   \n     if iota.hexToByte(data,2,'B') ~= tonumber(device.props.moduleId) then\n        errmessage = 'Invalid moduleId' \n        errcode=1004\n        return true\n      end\n  \n  \tlog.debug("数据正确")\n\treturn false\n\t\nend\n\n\nSumCR=function(buff)\n    local scr = 0\n    for i = 0, string.len(buff)/2-1 do\n        scr = scr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n        log.debug(string.format('scr=: %s', scr));\n    end     \n    local value= string.format("%02x",scr)\n    return value\nend 	INLINE	2017-09-07 20:21:46.74+08	2018-02-28 18:32:12.192+08	2017-09-03	\N
80768b00-fc5e-4846-bcc6-6cdd0e2ec227	fullkon_flow_1	\N		1.0	8877092c-862c-4569-a8b7-b125dea3214f	8877092c-862c-4569-a8b7-b125dea3214f	f	8877092c-862c-4569-a8b7-b125dea3214f	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fullkon_flow_1", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t--01 04 10 10 00 16 74 C1\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fullkon_flow_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n        buff=iota.appendHexByte(buff, 0x10, endian)  \n        buff=iota.appendHexByte(buff, 0x10, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x16, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("fullkon_flow_1 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01 03 04 BE 40 E6 12 15 A2\n--moduleId=1   \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local flowrate = iota.hexToFloat(hex,3,'B')\n        local flowsvelocity = iota.hexToFloat(hex,7,'B')\n        local positiveflow = iota.hexToInt(hex,19,'B')+iota.hexToFloat(hex,23,'B')\n        local reverseflow = iota.hexToInt(hex,27,'B')+iota.hexToFloat(hex,31,'B')\n\n       \n        out.data = {\n            flowrate=flowrate,\n            flowsvelocity=flowsvelocity,\n            positiveflow=positiveflow,\n            reverseflow=reverseflow\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('fullkon_flow_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 49 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fullkon_flow_1 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-06-28 15:34:50.53+08	2018-06-28 16:59:24.689+08	2018-06-28	\N
9371fe71-c7ed-4957-b430-606c12203969	laser_carspeed	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        函数:\n        ssend: 同步发送数据到设备\n        asend: 异步发送数据到设备\n        notify: 通知平台解析完成的数据\n        done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n    log.debug("laser_carspeed:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex)\n   log.debug("laser_carspeed:onData %s",data)\n   \tlocal out={\n\t\tdata ={\n\t\t},\n\t\tresult = {}\n\t  }\n    local len=string.len(data)\n\tif len ~= 10 then \n\t\tout.result = {\n\t\t\tcode=1001,\n\t\t\tmsg = "data length is not right"\n\t\t}\n\t\t\n\telse\n\t\tlocal direction =  ""\n\t\tif string.sub(data,3,3)==1 then\n\t\t\tdirection = "上行"\n\t\telse \n\t\t\tdirection = "下行"\n\t\tend\n\n\t\tlocal roadno = tonumber(string.sub(data,4,4))+1\n\t\tlocal speed = iota.hexToByte(data,2,'B')\n\t\tout.data = {\n\t\t\t\tdirection = direction,\n\t\t\t\troadno = roadno,\n\t\t\t\tspeed = speed\n\t\t}\n\tend\n    log.debug("laser_carspeed:Parsed:%s",msg)\n    ctx:notify(msg)\nend	INLINE	2018-12-15 10:41:35.745+08	2018-12-15 10:41:35.745+08	2018-12-15	\N
485f00b2-c992-4eb3-8d4a-0c8d2dd07a30	Asmik_Phn_4600	\N		1.0	db720076-c60b-454c-9066-38f2b9c84634	db720076-c60b-454c-9066-38f2b9c84634	f	db720076-c60b-454c-9066-38f2b9c84634	Lua	--//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart =\n    function()\n    log.debug('load script %s, moduleId=%s', 'Asmik_Phn_4600', device.props.moduleId or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local errout = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n        errout.result = {code = 1004, msg = '模块号无效,模块号 >= 255 or < 1'}\n    else\n        buff = iota.appendHexByte(buff, moduleNo, endian)\n        buff = iota.appendHexByte(buff, 0x04, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 120, endian)\n        buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC16\n        local ok, resp = ctx:ssend(buff, 18000)\n        local result = '{}'\n        if ok then\n            result = unmarshall(resp, moduleNo)\n            ctx:done(result)\n        else\n            errout.result = {code = 1004, msg = '采集超时'}\n            ctx:done(json.encode(errout))\n        end\n    end\nend\n--01041203979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall =\n    function(hex, moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    local pressures = {}\n    if ErrorCode then\n        for i = 1, 60 do\n            local sub_hex = string.sub(hex, 7 + (i-1) * 8, 14 + (i-1) * 8)\n            sub_hex_BE = string.sub(sub_hex, -4, -1) .. string.sub(sub_hex, 1, 4)\n            local pressure = iota.hexToFloat(sub_hex_BE, 0, 'B')\n            pressures[i] = pressure\n          -- log.debug("Asmik_Phn_4600 i=%s,pressures[%s]=%s,sub_hex_BE=%s",i,i,pressures[i],sub_hex_BE)\n        end\n\n        --遍历设备\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if device.dnlinks[1].devices ~= nil then\n            --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n            for index, child in pairs(device.dnlinks[1].devices) do\n                log.debug('Asmik_Phn_4600 [%s] child=%s', moduleNoStr, json.encode(child))\n                local deviceId = child.id\n                local subChannel = tonumber(child.uplink.props.channel)\n                --判断设备类型\n\n                pressure = pressures[subChannel]\n\t\t\t\tlog.debug('Asmik_Phn_4600 deviceId=%s ,subChannel=%s[type=%s] ,pressure=%s',deviceId,subChannel,type(subChannel),pressure)\n                local subData = {\n                    data = {\n                        pressure = pressure\n                    },\n                    device = deviceId,\n                    type = 1\n                }\n                table.insert(out.data, subData)\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data,moduleNoStrCheck)\n    if data == nil or string.len(data) / 2 ~= 5 + 4 * 60 then\n        errormsg = '数据长度错误'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data, 1, 'B') ~= 0x04 then\n        errormsg = '返回命令码≠0x04'\n        errcode = 1002\n        return false\n    end\n    if moduleNoStrCheck ~= tostring(iota.hexToByte(data, 0, 'B')) then\n        errormsg = '模块号错误'\n        errcode = 1003\n        return false\n    end\n    return true\nend	INLINE	2018-11-20 15:37:40.841+08	2018-11-20 15:37:40.841+08	2018-11-20	\N
a83e3f95-d82b-4cc6-9d57-704bc5e09ad1	Mictest_9029	\N		1.0	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	f	ddbc4ad1-b448-4bed-82b8-f33fb5264f35	Lua	--	INLINE	2018-04-04 16:47:45.27+08	2018-04-04 16:49:04.018+08	2018-04-04	\N
3121ae46-41f3-451f-9995-208f16460648	ES10	\N	气体监测，智慧应用	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: ES10\n]]--liankang\nstart=function ()\n    log.debug("ES10 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ES10 encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ES10 decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x05, BE);                        -- 读取寄存器数量 5\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果,  直线位移\n-- 正确回复  01031A 0900 0014 0012 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000  CC CC\n-- 01031A0900001400120011001100000000000000000000000000000000CCCC\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n        }\n        \n    -- 判断数据有效性\n    if inValid(da) then\n        local message = 'Invalid Msg,'\n        out.result = {code=5001,msg=message}\n        out.data = {}\n    else\n        log.debug("数据有效")\n        \n        local data = string.sub( da, 7, -5);\n        log.debug("ES10 data ==>"..data)\n        log.debug("ES10 dataLength ==>"..json.encode(string.len(data)))\n\n        -- 获取告警后的所有数值\n        local valueTab = {}\n        for i = 0, 8, 2 do\n            -- log.debug("ES10 value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n            table.insert(valueTab, iota.hexToUShort(data, i, 'B'))\n        end\n        log.debug("ES10 valueTab"..json.encode(valueTab))\n        log.debug("ES10 valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n        local unitNameTab = {\n            "ppm",\n            "LEL",\n            "VOL",\n            "mg/m3",\n        }\n        local firstRegister = valueTab[1]\n     --   local unitNameIndex = bit:_rshift(bit:_and(firstRegister, 0XE000), 13) + 1\n     --   local unitName = unitNameTab[unitNameIndex]\n\n        local decimalNum = bit:_rshift(bit:_and(firstRegister, 0X1C00), 10)\n        log.debug("ES10 decimalNum ==>"..json.encode(decimalNum))\n        \n     --   local alarmRangeTab = {\n      --      "正常无报警",\n      --      "一级报警",\n     --       "二级报警",\n    --        "故障",\n    --    }\n      --  local alarmRangeIndex = bit:_rshift(bit:_and(firstRegister, 0X0180), 8) + 1\n      --  local alarmRange = alarmRangeTab[alarmRangeIndex]\n\n\n        local gasConcentration = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0040), 10), valueTab[2]) / math.pow(10, decimalNum)\n       -- local primaryAlarmLimit = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0010), 12), valueTab[3]) / math.pow(10, decimalNum)\n       -- local secondaryAlarmLimit = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0004), 14), valueTab[4]) / math.pow(10, decimalNum)\n       -- local fullRange = bit:_or(bit:_lshift(bit:_and(firstRegister, 0X0001), 16), valueTab[5]) / math.pow(10, decimalNum)\n\n\n        out.data = {\n       --     unitName = unitName,\n       --     alarmRange = alarmRange,\n            gasConcentration = gasConcentration,\n       --     primaryAlarmLimit = primaryAlarmLimit,\n       --     secondaryAlarmLimit = secondaryAlarmLimit,\n       --     fullRange = fullRange,\n        };\n    end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 15 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于15   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n\n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0    \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift 	INLINE	2020-01-08 15:24:43.999+08	2020-01-14 15:54:35.651+08	2020-01-08	\N
f99629fd-ce63-49a7-ba9b-f554f569bb4b	fire-obd	\N		v1.2	c1741e71-3a53-4591-9d4e-e0d626ccd022	c1741e71-3a53-4591-9d4e-e0d626ccd022	f	c1741e71-3a53-4591-9d4e-e0d626ccd022	Lua	function ChangePos(sockRawData )\n    local operation = CParse( sockRawData, "i:operation" )\n    if operation == 1 then --删除物品\n        local deleteItemID = CParse( sockRawData, "i:itemid" )\n        ... delete item \n    elseif operation == 2 then --交换位置\n        local firstItemID, secondItemID = CParse( sockRawData, "i:first|i:second" )\n        ... change firstItemID and secondItemID\n    else ...\n        ...\n    end\n\nend	INLINE	2018-01-03 23:03:43.697+08	2018-01-03 23:03:43.697+08	2018-01-03	\N
15f78bc6-396c-4b7b-ba7c-2fcc9e9a924f	supmea_pressure_1	\N	杭州美仪自动化有限公司	1.0	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	f	7e6cf67e-f12a-4d9f-addf-b551148dc2b4	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "supmea_pressure_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \n  \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("supmea_pressure_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("supmea_pressure_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n  \n    buff=iota.appendHexByte(buff, moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    --：01 03 00 04 00 01 C5 CB\n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "supmea_pressure_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        \n        --0103021388B512 \n        --"pressure": 5000\n        local pressure =iota.hexToShort(hex,3,'B');\n    \n        out.data = {\n           \n            pressure=pressure,\n         \n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-03 16:13:25.117+08	2018-03-30 08:26:37.578+08	2018-01-03	\N
c75655a3-b2e2-4443-9657-8738420913c4	111	\N	3	21321123123	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	Lua	123	INLINE	2018-03-28 15:39:00.559+08	2018-05-30 15:49:56.87+08	2018-03-28	\N
021c1f95-5dfd-46a3-bb49-680e667cde1c	协议A	\N		1	00cf911c-3531-4665-a358-3d31d36f0bdd	00cf911c-3531-4665-a358-3d31d36f0bdd	f	00cf911c-3531-4665-a358-3d31d36f0bdd	Lua	A	INLINE	2018-01-09 22:26:37.518+08	2018-01-09 22:26:37.518+08	2018-01-09	\N
09903e18-4a03-454d-a5fe-c91275a5400f	mas_inclino_1502	\N	盒式测斜	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_1502", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)             -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1502 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n        ctx:done(result)\n    else\n\n    end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local scale=1000000.00;\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        out.data = {\n            temperature=Temp,\n            anglex = tonumber(string.format("%5.2f",xa)),\n            angley = tonumber(string.format("%5.2f",ya))\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1502 开始校验数据%s',data)\n    if data == nil or string.len(data)/2 ~= 23 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1502 数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2018-06-25 11:14:04.725+08	2018-06-25 11:26:56.739+08	2018-06-25	\N
637e7e3d-43b9-49a5-be9b-bef0bda0ccbb	httpJCLQ_2021	\N		1.0	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	Lua	\nstart=function()\n    log.debug("JCLQ2021 start moudleid=%s", device.props.pointId or "nil")\n\tlocal req = {\n        type= "http",\n        url='',  --https://api.yespowering.cn/login/\n    \tmethod="post",\n        header={}\n    }\n\n     req.url=device.props.tokenUrl\n    log.debug("JCLQ2021:  url=%s",req.url)\n    log.debug("设备原型="..json.encode(device))\n    req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n    req.ContentType='application/json'\n        \n    local param={\n      account= device.props.account,\n      pw=device.props.pw\n    }\n\treq.body = json.encode(param)\n    log.debug("JCLQ2021:param="..json.encode(param))\n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("JCLQ2021:  ok=%s",ok)\n    else\n        log.debug("JCLQ2021:  ok=%s,token=%s",ok,ack.body)\n    end\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n           local dataTable=json.decode(ack.body)\n          \tlocal token=dataTable.data.userinfo.token\n           log.debug("JCLQ2021:  token=%s " ,token)\n            log.debug("JCLQ2021 ack=%s",ack.body)\n            \n            \n\t\t\tSleep(1)\n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='',  --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005  \n\t\t\t\t\t\tmethod="get",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\t\t\tlocal boxId=device.props.boxId\n\t\t\tdatareq.url=device.props.dataUrl.."?box_id="..boxId\n\t\t\tlog.debug("JCLQ2021:  data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\tdatareq.header["agent"] = '0'\n\t\t\tdatareq.header["language"] = 'zh'\n\t\t\tdatareq.header["brandid"] = '38'\n\t\t\tdatareq.header["token"] = token\n\t\t\tdatareq.ContentType='application/json'\n\t\t\t\t\n\t\t     --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body)  -- 有数据\n\t\t\t\t\tlocal rt_data=alldataTable.data.rt_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t--遍历节点数据\n\t\t\t\t\tfor k,v in ipairs(rt_data) do\t\t\t\t     \n\t\t\t\t\t    log.debug("JCLQ2021 k=%s, value=%s",k,json.encode(v))\t\n\t\t\t\t\t\tlocal moduleId=v.order_id\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal timess=v.datetime\n\t\t\t\t\t\tlocal timenow=unixtimestamp(timess)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal r1,r1ok = redis.get(device.id..moduleId.."_endTime")  --获取上次记录时间\n\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\t\tlocal beginTime\n\t\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\t\tredis.set(device.id..moduleId.."_endTime", tostring(beginTime))\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tlocal endTime=timenum  --全局\n\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\tlog.debug("JCLQ2021  m=%s 数据未刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("JCLQ2021  m=%s 数据刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\tend\n\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\tfor i=1,8,1 do\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,i) \n\t\t\t\t\t\t\tlocal dataName="data"..tostring(i)\n\t\t\t\t\t\t\tlocal tempName="temp"..tostring(i)\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal physicalvalue=tonumber(v[dataName])--alldataTable.data.rt_data[k].distance)\n\t\t\t\t\t\t\t\t\t\tlocal temperature=tonumber(v[tempName])\n\t\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2021  m=%s  c=%s 数据=%s",moduleId,i,physicalvalue)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=physicalvalue,\n\t\t\t\t\t\t\t\t\t\t\t\ttemperature=temperature\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timenow,  \n\t\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t};                       \n\t\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t   \n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t--更新endTime\n\t\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\t\tif redis.set(device.id..moduleId.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2021 redis更新 set lasttime ok  key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("JCLQ2021 redis不更新 ")\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t    \n\t\t\t\telse\n\t\t\t\t\tlog.debug("JCLQ2018:  request data error:%s body:%s",ack.code,ack.body)            \n\t\t\t\tend\n\t\t\tend\t\n            \n        else\n            log.debug("JCLQ2021:  request data error:%s body:%s",ack.code,ack.body)            \n        end\n    end\n\tctx:done(json.encode(out))\nend\n \nSleep=function(n)\n   local t0 = os.clock()\n   while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid,channel)\n  \t--log.debug("JCLQ2021: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices \n       --log.debug("JCLQ2021: 查询 节点层 设备device=%s",json.encode(subdevices))\n\n\t\tfor i,link in pairs(device.dnlinks) do\n            --log.debug("JCLQ2021: link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("JCLQ2021:node=%s",json.encode(node))\n\t\t\t\t--log.debug("JCLQ2021  模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n\t\t\t\tlocal moduleNo=node.uplink.props.module\n\t\t\t\tif moduleNo==tostring(moduleid) then\n\t\t\t\t\tfor k,sublink in pairs(node.dnlinks) do\n\t\t\t\t\t\t--log.debug("JCLQ2021:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("JCLQ2021:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif tonumber(subdevice.uplink.props.channel)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2021:  m=%s,c=%s 匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        end      \n        \n        --log.debug("JCLQ2021 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("JCLQ2021 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp=function(datestr)\n    -- 2018-4-28 16:10:12\n\tlog.debug("JCLQ2021 datestr=%s",datestr)\n    local datelist = Split(datestr, " ");\n    local datebegin = Split(datelist[1], "-");\n    local dateend = Split(datelist[2], ":");\n    local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n    local hour = tonumber(dateend[1]);\n    local minute = tonumber(dateend[2]);\n    local second = tonumber(dateend[3]);\n    log.debug("JCLQ2021 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("JCLQ2021 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("JCLQ2021 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-08-09 16:02:16.874+08	2018-08-10 09:07:24.116+08	2018-08-09	\N
cae79ff3-2cf7-4fb8-a067-adc856d93412	测试协议	\N		1.0	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	f	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not \n\nstart=function()\n  local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  local buff='F760045B0240020002'\n  crc16H,crc16L=crc16_CCITT(buff,0,8)\n  log.debug("sci_1409:模块%s通道%s的 校验前buff=%s,crc16L=%s,crc16H=%s",moduleNo,channelNo,buff,crc16L,crc16H)  \n\n  local resultData =json.encode(out)\n    log.debug("sci_1409:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\n end\n\n\n\n\ncrc16_CCITT=function(buffer,index_start,index_end)--CRC校验 CRC-16 CCITT X2\n    local crc = 0;\n    local da=0;\n    local yu ={\n               0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n                0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef\n              };\n    for i = index_start,index_end-1,1  do\n        \n         da = (crc / 256) / 16\n         da=getIntPart(da)\n         crc =crc*16%65536\n        \n        local buff_i=tonumber(string.sub(buffer,2*i+1,2*i+2),16)\n        local index=bit:_xor(da,buff_i / 16) \n         crc = bit:_xor(crc,yu[index+1])\n        \n\n         da = (crc / 256) / 16;\n         da=getIntPart(da)\n         crc =crc*16%65536\n\n         local index_2=bit:_xor(da,buff_i %16)        \n         crc = bit:_xor(crc,yu[index_2+1])               \n    end\n       local  crcHi_CCITT = crc %256;\n       local  crcLo_CCITT = getIntPart(crc/256)\n       return string.format("%02x",crcHi_CCITT),string.format("%02x",crcLo_CCITT)\nend	INLINE	2019-04-30 11:47:12.413+08	2019-04-30 11:47:12.413+08	2019-04-30	\N
cda82375-e0ae-4f55-97b2-47d867221b9b	gzcranes_crane_4300	\N	起重机	1.0	33ff4c6f-7e37-416c-b813-7c2ec986afdf	33ff4c6f-7e37-416c-b813-7c2ec986afdf	f	33ff4c6f-7e37-416c-b813-7c2ec986afdf	Lua	start=function()\n    log.debug("start %s, ctx=", "gzcranes_crane_4300.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 3, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 0x14, endian) \n    buff=iota.appendHexWord(buff, 0x1b, endian)             -- 3: 类型=1\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 4: CRC\n    local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n    buff=string.sub(buff,1,12)\n    buff=buff..crcH\n    buff=buff..crcL\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp)\n        --print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n --moduleId=1\n --010315022b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089f\n --"deputyPosition": 0,\n--"deputyWeight": 0,\n--"lCarCurrt": 0,\n--"lCarGVoltage": 0,\n--"lCarPosition": 0,\n--"lCarSpeed": 0,\n--"lCarTorque": 0,\n--"lCarVoltage": 0,\n--"mainCurrt": 0,\n--"mainGVoltage": 0,\n--"mainPosition": 0,\n--"mainSpeed": 555,\n--"mainTorque": 0,\n--"mainVoltage": 0,\n--"mainWeight": 0,\n--"sCarCurrt": 0,\n--"sCarGVoltage": 0,\n--"sCarPosition": 0,\n--"sCarSpeed": 0,\n--"sCarTorque": 0,\n--"sCarVoltage": 0\n    if (string.len(hex)/2==59) then\n        --   模块  功能       数据长度           温度             CRC\n        --   1   1   1     2     2\n        --print("parsing data", hex)\n        local IDX_Main_Speed = 3;  --主起变频输出 转速\n        local IDX_Main_Current = 5;    --主起变频输出 电流\n        local IDX_Main_torque = 7;    --主起变频输出 转矩\n        local IDX_Main_Voltage = 9;  --主起变频输出 电压\n        local IDX_Main_GVoltage = 11;    --主起变频母线电压\n\n        local IDX_SCar_Speed = 13;  --小车变频输出 转速\n        local IDX_SCar_Current = 15;    --小车变频输出 电流\n        local IDX_SCar_torque = 17;    --小车变频输出 转矩\n        local IDX_SCar_Voltage = 19;  --小车变频输出 电压\n        local IDX_SCar_GVoltage = 21;    --小车变频母线电压\n\n        local IDX_LCar_Speed = 23;  --大车变频输出 转速\n        local IDX_LCar_Current = 25;    --大车变频输出 电流\n        local IDX_LCar_torque = 27;    --大车变频输出 转矩\n        local IDX_LCar_Voltage = 29;  --大车变频输出 电压\n        local IDX_LCar_GVoltage = 31;    --大车变频母线电压\n\n        local IDX_Main_Position = 33; --主起位置\n        local IDX_SCar_Position = 37;  --小车位置\n        local IDX_LCar_Position = 41;  --大车位置\n\n        local IDX_Deputy_Position = 45; --副起位置\n        local IDX_Main_Weight = 49;  --主起重量\n        local IDX_Deputy_Weight = 53;  --大车位置\n\n        local mainSpeed = iota.hexToShort(hex, IDX_Main_Speed,'B');\n        local mainCurrt = iota.hexToShort(hex, IDX_Main_Current,'B');\n        local mainTorque = iota.hexToShort(hex, IDX_Main_torque,'B');\n        local mainVoltage = iota.hexToShort(hex, IDX_Main_Voltage,'B');\n        local mainGVoltage = iota.hexToShort(hex, IDX_Main_GVoltage,'B');\n        local mainPosition = iota.hexToShort(hex, IDX_Main_Position,'B');\n        local mainWeight = iota.hexToShort(hex, IDX_Main_Weight,'B');\n        local deputyPosition = iota.hexToShort(hex, IDX_Deputy_Position,'B');\n        local deputyWeight = iota.hexToShort(hex, IDX_Deputy_Weight,'B');\n\n        local sCarSpeed = iota.hexToShort(hex, IDX_SCar_Speed,'B');\n        local sCarCurrt = iota.hexToShort(hex, IDX_SCar_Current,'B');\n        local sCarTorque = iota.hexToShort(hex, IDX_SCar_torque,'B');\n        local sCarVoltage = iota.hexToShort(hex, IDX_SCar_Voltage,'B');\n        local sCarGVoltage = iota.hexToShort(hex, IDX_SCar_GVoltage,'B');\n        local sCarPosition = iota.hexToShort(hex, IDX_SCar_Position,'B');\n\n        local lCarSpeed = iota.hexToShort(hex, IDX_LCar_Speed,'B');\n        local lCarCurrt = iota.hexToShort(hex, IDX_LCar_Current,'B');\n        local lCarTorque = iota.hexToShort(hex, IDX_LCar_torque,'B');\n        local lCarVoltage = iota.hexToShort(hex, IDX_LCar_Voltage,'B');\n        local lCarGVoltage = iota.hexToShort(hex, IDX_LCar_GVoltage,'B');\n        local lCarPosition = iota.hexToShort(hex, IDX_LCar_Position,'B');\n        \n        out.data = {\n        mainSpeed=mainSpeed,\n        mainCurrt=mainCurrt,\n        mainTorque=mainTorque,\n        mainVoltage=mainVoltage,\n        mainGVoltage=mainGVoltage,\n        mainPosition=mainPosition,\n        mainWeight=mainWeight,\n        deputyPosition=deputyPosition,\n        deputyWeight=deputyWeight,\n        sCarSpeed=sCarSpeed,\n        sCarCurrt=sCarCurrt,\n        sCarTorque=sCarTorque,\n        sCarVoltage=sCarVoltage,\n        sCarGVoltage=sCarGVoltage,\n        sCarPosition=sCarPosition,\n        lCarSpeed=lCarSpeed,\n        lCarCurrt=lCarCurrt,\n        lCarTorque=lCarTorque,\n        lCarVoltage=lCarVoltage,\n        lCarGVoltage=lCarGVoltage,\n        lCarPosition=lCarPosition\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-12 19:52:27.457+08	2018-02-28 18:32:12.195+08	2017-09-12	\N
cfd7e9ee-ae25-4147-9f4b-9799a02d5075	jt_inclination_1544	\N	南京基泰单双轴倾斜仪协议  未使用	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=", "jt_inclination_1544.lua",json.encode(device.props.moduleId))\n    local endian = 'B'\n    local buff=''         \n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 99  or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 99'}\n        ctx:done(json.encode(errout))\n    else\n        if device.props.sensorType == 'doubleInclination' then --需要sensorType \n            buff=iota.appendHexByte(buff, 0xF9, endian)\n            buff=iota.appendHexByte(buff, 0xF9, endian)\n        else \n            buff=iota.appendHexByte(buff, 0xF5, endian)\n            buff=iota.appendHexByte(buff, 0xF5, endian)\n        end\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,500)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        --  print(string.format("out=%s,data=%s",resp, result))\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n\t--15028765\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local xDegrees = ''\n        local yDegrees = ''\n        local xDegree =  0\n        local yDegree = 0\n        if device.props.sensorType == 'doubleInclination' then\n            if string.sub(hex,3,3) == '8' then\n                xDegrees = '-'\n            end\n\t\t\tlocal xvalue = string.sub(hex,4,8)\n            xDegrees = xDegrees..xvalue\n            if string.sub(hex,9,9) == '8' then\n                yDegrees = '-'\n            end\n            local yvalue = string.sub(hex,10,14)\n            yDegrees = yDegrees..yvalue\n        else \n            if string.sub(hex,3,3) == '8' then\n                xDegrees = '-'\n            end\n            local xvalue = string.sub(hex,4,8)\n            xDegrees = xDegrees..xvalue\n        end\n\n        xDegree =  tonumber(xDegrees)\n        if yDegrees ~= '' then\n            yDegree = tonumber(yDegrees)\n        end\n\n--公式\n        local valuex = 0\n        local valuey = 0\n        if device.props.formula == "Δθ=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)" then --大小写不区分或者默认处理为该公式\n            local k1x = device.props.K1x\n            local k2x = device.props.K2x\n            local k3x = device.props.K3x\n            local k1y = device.props.K1y\n            local k2y = device.props.K2y\n            local k3y = device.props.K3y\n            local fox = device.props.Fox\n            local foy = device.props.Foy\n            valuex = k1x * xDegree + k2x * xDegree^2 + k3x * xDegree^3 - (k1x * fox + k2x * fox^2 + k3x * fox^3)\n            valuey = k1y * yDegree + k2y * yDegree^2 + k3y * yDegree^3 - (k1y * foy + k2y * foy^2 + k3y * foy^3)\n        end\n        out.data = {                --需要测试\n            xDegree = valuex,\n            yDegree = valuey\n        }\n    else\n        message = 'Invalid Msg, len='..string.len(hex)\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if string.len(data)/2 ~= 4 and string.len(data)/2 ~= 7 then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n\n    if iota.hexToByte(data,0,'B') ~= tonumber(device.props.moduleId) then\n  \t\terrcode = 1004\n        errormsg = 'Invalid moduleId  ' \n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2017-09-02 13:45:28.689+08	2018-03-28 14:41:59.216+08	2017-09-02	\N
6b5d1a2e-2aff-4663-bec3-ea25fbafe236	czbt_0404	\N		1.0	cb9f2b84-b356-4721-b75e-da2a575068f4	cb9f2b84-b356-4721-b75e-da2a575068f4	f	cb9f2b84-b356-4721-b75e-da2a575068f4	Lua	--//04 项目资料/2018-04\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n--start=function ()\n\t--log.debug("start %s, ctx=%s", "czbt_0404.lua",json.encode(device.props.moduleId))\n\t--ok,resp=ctx:ssend("010203",15000)\n--end\n--AA0043160608202359000503010301011023000043540204010003760000036700261000030100070010BB\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("czbt_0404:Received=>%s",hex)\n\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n        --log.debug("czbt_0404:hexToStr=%s",sData)\n\t\tlocal moduleNo = tonumber(string.sub(hex,9*2+1,9*2+4))\n\t\tlog.debug("czbt_0404:moduleNo=%s",moduleNo)\n\t\t\n\t\tlocal timess=string.sub(hex,7,9+12)\n\t\tlocal timenow=unixtimestamp(timess)\n\t\t\n\t\t--\n\t\tlocal IDX_DATA=13   --设备编号索引 \n\t\tlocal dataStruct={}\n\t\tdataStruct[1]={dtatNum=1,intNum=2,dotNum=4}  --裂缝\n\t\tdataStruct[2]={dtatNum=1,intNum=2,dotNum=4}  --单轴倾角\n\t\tdataStruct[3]={dtatNum=2,intNum=2,dotNum=4}\t--双轴倾角\n\t\tdataStruct[4]={dtatNum=3,intNum=2,dotNum=4} --双轴倾角带温度\n\t\tdataStruct[5]={dtatNum=3,intNum=6,dotNum=0}  --3通道应变\n\t\tdataStruct[6]={dtatNum=2,intNum=2,dotNum=4}   --温湿度\n\t\tdataStruct[7]={dtatNum=1,intNum=2,dotNum=4}\t--沉降\n\t\tdataStruct[8]={dtatNum=1,intNum=4,dotNum=2}\t--索力\n\t\tdataStruct[9]={dtatNum=2,intNum=2,dotNum=4}\t--加速度\n\t\t\n\t\tlocal sensorNum=tonumber(string.sub(hex,11*2+1,12*2))\n\t\tlog.debug("czbt_0404  sensorNum=%s",sensorNum)\n\t\tfor i=1,sensorNum,1 do\n\t\t\t\n\t\t\tlocal dataType=tonumber(string.sub(hex,IDX_DATA*2+1,IDX_DATA*2+2))\n\t\t\tlocal channelNo=tonumber(string.sub(hex,(IDX_DATA-1)*2+1,(IDX_DATA-1)*2+2))\n\t\t\tlocal subDataNum=dataStruct[dataType].dtatNum\n\t\t\tlocal subIntNum=dataStruct[dataType].intNum\n\t\t\tlocal subDotNum=dataStruct[dataType].dotNum\n\t\t\tlog.debug("czbt_0404  i=%s, dataType=%s,channelNo=%s,subDataNum=%s,subIntNum=%s,subDotNum=%s",i,dataType,channelNo,subDataNum,subIntNum,subDotNum)\n\t\t\t--解析单个传感器数据\n\t\t\tlocal phy={}\n\t\t\tfor j=1,subDataNum,1 do\n\t\t\t\n\t\t\t\n\t\t\t\t local sign=string.sub(hex,(IDX_DATA+2+(j-1)*4)*2-1,(IDX_DATA+2+(j-1)*4)*2)\n\t\t\t     local int_str=string.sub(hex,(IDX_DATA+2+(j-1)*4)*2+1,(IDX_DATA+2+(j-1)*4)*2+subIntNum)\n\t\t\t\t local dot_str="0."..string.sub(hex,(IDX_DATA+2+(j-1)*4)*2+subIntNum+1,(IDX_DATA+2+(j-1)*4)*2+subIntNum+subDotNum)\n\t\t\t\t local physicalvalue=tonumber(int_str)+tonumber(dot_str)\n         \t\t phy[j]=physicalvalue*(-1)^(tonumber(sign))\n\t\t\t\t log.debug("czbt_0404  i=%s,j=%s, int_str=%s ,dot_str=%s physicalvalue=%s",i,j,int_str,dot_str,physicalvalue)\n\t\t\t\t --判断输出能力类型\t\t \n\t\t\tend\t\t\n\t\t\t IDX_DATA=IDX_DATA+4*subDataNum+2 \n\t\t\t --设备能力输出\n\t\t\tlocal length\n\t\t\tlocal anglex\n\t\t\tlocal angley\n\t\t\tlocal temperature\n\t\t\tlocal humidity\n\t\t\tlocal strain1\n\t\t\tlocal strain2\n\t\t\tlocal strain3\n\t\t\tlocal force\n\t\t\tlocal acceleration\n\n\n\t\t\t\n\t\t\t\tif dataType==1 then\n\t\t\t\t   length=phy[1]\n\t\t\t\telseif dataType==2 then\n\t\t\t\t    anglex=phy[1]\n\t\t\t\telseif dataType==3 then\n\t\t\t\t    anglex=phy[1]\n\t\t\t\t\tangley=phy[2]\n\t\t\t\telseif dataType==4 then\n\t\t\t\t    anglex=phy[1]\n\t\t\t\t\tangley=phy[2]\n\t\t\t\t\ttemperature=phy[3]\n\t\t\t\telseif dataType==5 then\n\t\t\t\t    strain1=phy[1]\n\t\t\t\t\tstrain2=phy[2]\n\t\t\t\t\tstrain3=phy[3]\n\t\t\t\telseif dataType==6 then\n\t\t\t\t\ttemperature=phy[1]\n\t\t\t\t\thumidity=phy[2]\n\t\t\t\telseif dataType==7 then\n\t\t\t\t\tlength=phy[1]\n\t\t\t\telseif dataType==8 then\n\t\t\t\t\tforce=phy[1]\n\t\t\t\telseif dataType==9 then\n\t\t\t\t\tacceleration=phy[1]\n\t\t\t\telse\n\t\t\t\t    log.debug("czbt_0404 m=%s,c=%s,dataType=%s 无匹配",moduleNo,channelNo,dataType)\n\t\t\t\tend\n\t\t\t\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t\t--\n\t\t\t\t local deviceId\n\t\t\t\t if childDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\tlog.debug("czbt_0404:m=%s,c=%s 子设备原形childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\t\t\t\t    \n\t\t\t\t else\n\t\t\t\t\tlog.debug("czbt_0404:子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t end\n\t\t\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength=length,\n\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\tangley=angley,\n\t\t\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\t\t\thumidity=humidity,\n\t\t\t\t\t\t\t\tstrain1=strain1,\n\t\t\t\t\t\t\t\tstrain2=strain2,\n\t\t\t\t\t\t\t\tstrain3=strain3,\n\t\t\t\t\t\t\t\tforce=force,\n\t\t\t\t\t\t\t\tacceleration=acceleration\t\t\t\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\ttime=timenow,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\t\n\t\t\t\n\t\tend\n\t\t\t \t\t\t\t\t\t\n            \t \n\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg}\n\t\t\t\n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    log.debug("czbt_0404 m=%s,c=%s 查询deviceId",moduleNoId,channelNoId)\n\tlog.debug("czbt_0404 m=%s,c=%s 查询device=%s",moduleNoId,channelNoId,json.encode(device))\n    if device.dnlinks[1].devices ~=nil then\n         log.debug("czbt_0404 m=%s,c=%s 遍历子设备",moduleNoId,channelNoId)\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("czbt_0404:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("czbt_0404 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("czbt_0404 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tonumber(channelStrCheck)== tonumber(channelNoId) then\n                \n          \t\t log.debug("czbt_0404:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("czbt_0404:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('czbt_0404:开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 <= 18 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug("czbt_0404 Data is nil or invalid length")\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xaa or string.lower(string.sub(data,-2,-1))~="bb" then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug("czbt_0404 Hex CMD False")\n        return false\n    end\t\n    log.debug('czbt_0404:校验通过')\n\treturn true\n\t\nend\n\nunixtimestamp=function(datestr)\n    --180727135159\n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n    local year = tonumber(string.sub(datestr,1,2))+2000;\n\tlocal month = tonumber(string.sub(datestr,3,4));\n\tlocal day = tonumber(string.sub(datestr,5,6));\n    local hour = tonumber(string.sub(datestr,7,8));\n    local minute = tonumber(string.sub(datestr,9,10));\n    local second = tonumber(string.sub(datestr,11,12));\n    log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-04-08 11:19:38.077+08	2019-11-01 14:44:15.565+08	2018-04-08	\N
a75c683e-f6e3-4198-9520-4d03309584ad	sz_angle_1600	\N		1.0	abe57a42-14ab-448b-b96f-14875e86ca40	abe57a42-14ab-448b-b96f-14875e86ca40	f	abe57a42-14ab-448b-b96f-14875e86ca40	Lua	--// PMO/02 产品协议/SavoirCloud/01 201805项目\\2 贵州顺康路桥边坡项目--宏丞\\长沙三智数据通信协议2013.doc\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sz_angle_1600", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("sz_angle_1600 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("sz_angle_1600 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\tbuff=iota.appendHexByte(buff, 0xAA, endian)    \n\t\tbuff=iota.appendHexByte(buff, 0x75, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x10, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x0e, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\t\t\t\t\n        buff=buff..moduleNo -- 模块号\n\t\tlocal dateStr=os.date("%y%m%d%H%M%S")\n\t\tlocal y_str=string.format("%02x",string.sub(dateStr,1,2))\n\t\tlocal m_str=string.format("%02x",string.sub(dateStr,3,4))\n\t\tlocal d_str=string.format("%02x",string.sub(dateStr,5,6))\n\t\tlocal H_str=string.format("%02x",string.sub(dateStr,7,8))\n\t\tlocal M_str=string.format("%02x",string.sub(dateStr,9,10))\n\t\tlocal S_str=string.format("%02x",string.sub(dateStr,11,12))\n        buff=buff..y_str..m_str..d_str..H_str..M_str..S_str          \n        \t\n        buff=buff..CheckXor(buff)              \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("sz_angle_1600 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--AA7501000E00284100850000000405092708223900\n--moduleId=2841008500000004  \n--"length":\n--557A1000350028410085000000041204020F24380145FDEFC09D206D6D2020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535A323031382020A7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        local temperature=tonumber(string.sub(hex,20*2+1,22*2))/10.0\n        local anglex = iota.hexToUShort(hex,22,'B')/10.0\n\t\tlocal angley = iota.hexToUShort(hex,24,'B')/10.0\n       \n       \n        out.data = {\n      anglex=anglex,\n      angley=angley,\n\t\t\ttemperature=temperature\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('sz_angle_1600 开始校验数据=%s',data)\n    --if data == nil or string.len(data)/2 ~= 9 then\n    --    errormsg = 'Data is nil or invalid'\n     --   errcode = 1001\n     --   return false\n   -- end\n    if iota.hexToByte(data,0,'B') ~= 0x55 or iota.hexToByte(data,1,'B') ~= 0x7a or iota.hexToByte(data,2,'B') ~= 0x10 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if string.lower(tostring(moduleStrCheck))~= string.lower(string.sub(data,6*2+1,6*2+8*2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n       log.debug('sz_angle_1600 Invalid moduleId=%s[%s]',string.sub(data,6*2+1,6*2+8*2),moduleStrCheck)\n        return false\n    end\n    log.debug('sz_angle_1600 数据校验通过')\n    return true\n--crc\nend\n\n\n--异或校验\nCheckXor=function(hex)  \n    local len = string.len(hex)/2\n    local pp = 0\n    for i =0,len-1 do\n        local bi = iota.hexToByte(hex,i,'B')\n        pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n    \t--log.debug("PP是=%s",string.format("%02x",pp))\n    end\n    return string.format("%02x",pp)\nend \n\n\n\t\n   \n	INLINE	2018-05-30 17:48:22.324+08	2018-06-21 16:54:42.267+08	2018-05-30	\N
f0dfe60c-b6d2-4c5d-a2de-92993726687b	text	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	--// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "textrt ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t--HUASI,GET,DATA,281263\n\n\n     --48 55 41 53 49 2c 47 45 54 2c 44 41 54 41 2c 32 38 31 32 36 33 \n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("textrt 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("textrt  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\t\n\t\t--$HUASI,GET,DATA,281263*20\n\t\t\n\t\t--buff="$HUASI,GET,DATA,281263*"\n\t\t--local xmm="48554153492c4745542c444154412c323831323633"\n\t\t--48 55 41 53 49 2c 47 45 54 2c 44 41 54 41 2c 32 38 31 32 36 33 \n\t\tbuff=iota.appendHexByte(buff, 0x48, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x55, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x53, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x49, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x47, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x45, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x54, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x44, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x54, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x41, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x2c, endian)\n\t\t\n\t--\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n\t\tlog.debug("textrt 下发码流没有校验 buff=%s",buff)\n\t\tlocal moduless=StrtoHex(moduleNo)\n\t\tlog.debug('textrt %s moduless将asc转成16进制',moduless)\n\t\tlocal hza=toStrHex(buff)\n\t\tlog.debug('textrt %s hza将16进转成a',hza)\n\t\tlocal  app=CssS(buff)\n\t\tlog.debug('textrt  %s  校验值',app)\n\t\t\n        buff=hza..app\n\t\t\n\t\tlog.debug('textrt %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("textrt  SSend error!")\n        end\n        ctx:done(result)\nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n    --log.debug('textrt:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1  --按位取反再加1\n\t--log.debug('textrt:lcrvalue累加结果1%s', value)\t\n    return lcr\nend \n--FF0300000002D1D5\n--FF030416760DFF44BE \n--加总异或\nCssS=function(buff)\n    local lcr = 0\n\tlocal a=bit.xor (15, 1)\n\tlog.debug('textrt: a这个内容%s', a)\t\n    for i = 0, string.len(buff)/2-1 do\n\t\n\t\n\t\n\t--local aa=bit.xor (string.sub(buff,2*i-1,2*i), string.sub(buff,2*i-1,2*i))\n        lcr = (lcr + bit.band(bit.bnot(lcr),0xff)+1)\n    end\n    --log.debug('textrt:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1  --按位取反再加1\n\t--log.debug('textrt:lcrvalue累加结果1%s', value)\t\n    return lcr\nend \n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local humidy = iota.hexToShort(hex,5,'B')/100\n\t\tlog.debug('textrt  %s 湿度',humidy)\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/100-40\n\t\tlog.debug('textrt  %s  温度',Temp)\n\t\t\n\t\t\n       \n       \n        out.data = {\n\t\t\thumidy=humidy,\n\t\t\tTemp=Temp,\t\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('textrt %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('textrt 数据校验通过')\n    return true\n\nend\n--将16转换成字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend\n\n\t\n   \n	INLINE	2019-12-12 16:52:27.252+08	2019-12-16 10:41:23.239+08	2019-12-12	\N
52a3aa4d-95fb-4b15-a1ee-82ca7ffc7642	test	\N		1.0	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	Lua	--[[\n协议号: 1.0;\n协议名: FS-ZWY-XX\n]]--liankang\nstart=function ()\n    log.debug("FS-ZWY-XX start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-ZWY-XX encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-ZWY-XX decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果,  直线位移\n-- 正确回复  01030600332BFF0162548C  直线位移 length : 51.172mm  temperature : 22.125℃\n--   01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlog.debug("hexLenStr = %s ", hexLenStr)\n\t\tlocal lenInteger = iota.hexToUShort(hexLenStr, 0, 'B') \t-- 十进制整数位\n\t\tlog.debug("lenInteger = %d ", lenInteger)\n\t\tlocal lenDecimal = iota.hexToUShort(hexLenStr, 2, 'B') /  65536  -- 十进制小数位\n\t\tlog.debug("lenDecimal = %f ", lenDecimal)\n\t\tlocal len = lenInteger + lenDecimal\n\t\t\n\t\n\t\tout.data = {\n\t\t\tlength = getPreciseDecimal(len, 3),        -- 控制浮点数进度为3位小数，四舍五入\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n    if type(nNum) ~= "number" then\n        return nNum;\n    end\n    n = n or 0;\n    n = math.floor(n)\n    if n < 0 then\n        n = 0;   \n    local nDecimal = 10 ^ n\n    local nTemp = math.floor(nNum * nDecimal + 0.5);\n    local nRet = nTemp / nDecimal;\n    return nRet;\nend	INLINE	2019-12-26 16:16:44.668+08	2019-12-26 16:17:39.778+08	2019-12-26	\N
c4a9f5a0-5436-4b62-854f-332cfde5559f	BGK_4000D	\N	无公式	1.0	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	f	224e0fc3-9311-4c4a-839d-d0363ece2ab4	Lua	--//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("load script %s", "BGK_4000D")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("BGK_4000D:LUA:subdevices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n\t\t\n\t\t\t\n\t\t    if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("BGK_4000D 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("BGK_4000D 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\n        \t\n            log.debug("BGK_4000D:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t--log.debug("BGK_4000D:子通道设备原型child=%s",json.encode(child))\n\t\t\tlocal cmdstr=string.format("%02d",tonumber(moduleNo)).."21"..string.format("%02d",tonumber(channelNo))\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的cmdstr是：%s",moduleNo,channelNo,cmdstr)\n\t\t\tlocal lcr_str=LCR(cmdstr)\n      \t\tlcr_str=string.upper(lcr_str)--转大写字符\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的lcr_str是：%s",moduleNo,channelNo,lcr_str)\n\t\t\tlocal request_asciiStr=":"..cmdstr..lcr_str\n\t\t\tlog.debug("BGK_4000D:模块%s通道%s的request_asciiStr是：%s",moduleNo,channelNo,request_asciiStr)\n\t\t\tlocal buff=toHexStr(request_asciiStr)\n          \tbuff=iota.appendHexByte(buff, 0x0d, endian)\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0x0a, endian)\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n                log.debug("BGK_4000D:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\t\tlog.debug("BGK_4000D:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n       log.debug("BGK_4000D:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('BGK_4000D:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("BGK_4000D:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\nend\n\n--3a3037323130312b32332e323030302b32372e3130303030330d0a  40n的回复\n\n   \nunmarshall=function(hex,childDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=childDevice.id,\n        type=1  \n    }\n\t\n\tlog.debug("BGK_4000D:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,json.encode(childDevice))\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n \n        --码流转string\n\t\tlocal responseStr=toStrHex(hex)\n\t\tlog.debug("BGK_4000D:模块%s通道%s的解析字符串是：%s",subModuleId,subChannelId,responseStr)\n\t\tlocal freStr=string.sub(responseStr,8,15)\n\t\tlocal freq=tonumber(freStr)\n\t\tlocal data1=tonumber(string.format("%5.3f",freq))\n\t\tlocal resistanceStr=string.sub(responseStr,16,23)\n\t\tlocal dResistance=tonumber(resistanceStr)\n\t\tlog.debug("BGK_4000D:模块%s通道%s的原始值是：freStr=%s,resistanceStr=%s",subModuleId,subChannelId,freStr,resistanceStr)\n     \n\t\tsubData.data={\n\t\t\t\t\tdata1=data1,\n\t\t\t\t\tdata2=dResistance,\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\nLCR=function(buff)\n\tlog.debug("BGK_4000D:lcr buff=%s",buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end  \n\tlog.debug("BGK_4000D:lcr累加结果%s",tonumber(lcr))\n    lcr=lcr%255\n  \tlocal value =0xff-lcr+1\n\tlocal lcrResult_str=string.sub(string.format("%#x",value),3,-1)--去除0x\n\tlog.debug("BGK_4000D:lcr校验结果%s",lcrResult_str)\n    return lcrResult_str\nend \n\nIsValid=function(data,moduleId,channelId)\n    log.debug('BGK_4000D:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 27 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('BGK_4000D:模块%s通道%s  数据校验失败：Data is nil or invalid length',moduleId,channelId)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,25,'B') ~= 0x0d or iota.hexToByte(data,26,'B') ~= 0x0a  then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败：Data is nil or invalid length',moduleId,channelId)\n        return false\n    end\n\t\n\t--码流转string\n\tlocal checkStr=toStrHex(data)\n\tlog.debug('BGK_4000D:模块%s通道%s 数据校验：checkStr=%s',moduleId,channelId,checkStr)\n\tlocal moduleStr=string.sub(checkStr,2,3)\n\tlocal channelStr=string.sub(checkStr,6,7)\n\tif tonumber(moduleStr) ~=tonumber(moduleId) then\t\n        errormsg = 'Invalid acq moduleId'\n\t\terrcode = 1004\n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n\t\treturn false\n\tend\n\t\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('BGK_4000D:模块%s通道%s 数据校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('BGK_4000D:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\n	INLINE	2018-03-09 16:28:37.161+08	2018-03-28 09:22:09.569+08	2018-03-09	\N
68855ea0-10d0-4ff5-bbed-98a4ae220997	iOTA Edge	\N		1.0.0	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start= function()\n  log.debug("mqtt edge protocol start")\nend\n\nonData=function(data) \n  -- log.debug("mqtt edge protocol on data: %s", json.encode(data))\n  local edgeMetaId = device.deviceMetaId\n  local edgeId = device.id\n  local topic = data.topic\n  if data.payload == nil then\n    return\n  end\n  local payload = json.decode(data.payload)\n  -- 设备配置请求\n  if topic == string.format("/conf/edge/%s/%s/request", edgeMetaId, edgeId) then\n    onConfigRequest(payload)\n  -- 设备数据上报\n  elseif topic == string.format("/data/devices/%s/%s/report", edgeMetaId, edgeId) then\n    onDeviceDataReport(payload)\n  -- Edge数据上报\n  elseif topic == string.format("/data/edge/%s/%s/report", edgeMetaId, edgeId) then\n    onEdgeDataReport(payload)\n  end\nend\n\nonDeviceDataReport=function(data)\n  local strData = json.encode(data)\n  -- log.debug("edge's data report: %s", strData)\n  ctx:notify(strData)\nend\n\nonEdgeDataReport=function(data)\n  -- 快速实现，只有一个能力的情况下\n  data.capId = "2ed8847a-14d6-4fbc-a6f8-e7c3e7ee8c13"\n  local strData = json.encode(data)\n  -- log.debug("edge device's data report: %s", strData)\n  ctx:notify(strData)\nend\n\n--[[\n  设备配置请求\n]]--\nonConfigRequest=function(request)\n  log.debug("edge config request")\n  local edgeMetaId = device.deviceMetaId\n  local edgeId = device.id\n  local responseTopic = string.format("/conf/edge/%s/%s/response", edgeMetaId, edgeId)\n  local response = {\n    id = request.id,\n    payload = {\n      -- edge config\n      edge = {},\n      -- devices config\n      devices = {}\n    }\n  }\n  -- edge interface and capabilities\n  response.payload.edge = createDevice(device)\n  -- 仅两层结构？\n  if device.dnlinks ~= nil then\n    for i, dl in ipairs(device.dnlinks) do\n      if dl.devices ~= nil then\n        for j, d in ipairs(dl.devices) do\n          local dv = createDevice(d)\n          if dv ~= nil then\n            table.insert(response.payload.devices, dv)\n          end\n        end\n      end\n    end\n  end\n  local iOTAMQTTMessage = {\n    type = "iota_mqtt",\n    topic = responseTopic,\n    payload = json.encode(response)\n  }\n  ctx:asend(iOTAMQTTMessage)\nend\n\n--[[\n  设备转换\n]]--\ncreateDevice=function(dev)\n  if dev == nil then\n    return nil\n  end\n  local device = {\n    id = dev.id,\n    deviceMetaId = dev.deviceMetaId,\n    name = dev.name,\n    props = dev.props,\n    -- other ...\n    interfaces = {}\n  }\n  if dev.uplink ~= nil then\n    local interface = createInterface(dev.uplink)\n    if interface ~= nil then\n      table.insert(device.interfaces, interface)\n    end\n  end\n  return device\nend\n\n--[[\n  接口转换\n]]--\ncreateInterface=function(inf)\n  if inf == nil then\n    return nil\n  end\n  local interface = {\n    id = inf.id,\n    name = inf.name,\n    props = inf.props,\n    capabilities = {}\n  }\n  if inf.capabilities ~= nil then\n    for i, cap in ipairs(inf.capabilities) do\n      local capability = createCapability(cap)\n      if capability ~= nil then\n        table.insert(interface.capabilities, capability)\n      end\n    end\n  end\n  return interface\nend\n\n--[[\n  能力转换\n]]--\ncreateCapability=function(cap)\n  if cap == nil then\n    return nil\n  end\n  local capability = {\n    id = cap.id,\n    capabilityMetaId = cap.capabilityMetaId,\n    name = cap.name,\n    props = cap.props,\n  }\n  return capability\nend	INLINE	2019-07-06 16:48:55.709+08	2019-08-30 12:13:21.588+08	2019-07-06	\N
110f04da-4488-49b0-abc8-c14a6fe5d658	HX-WL-AcqUnit	\N	恒星物联	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	1	INLINE	2020-01-15 16:39:35.593+08	2020-01-15 16:39:35.593+08	2020-01-15	\N
8267e518-0c87-4bf5-8d35-364229aa6076	abc-1503	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	-- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function()\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n  \tlog.debug("json:%s", json.encode(capability))\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)                --2: 0015 协议类型=21\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                -- 1: 01   指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,3000)\n    local result = unmarshall(ok,resp)\n    log.debug("result=%s",result)\n    ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (ok and string.len(hex) >=23 ) then\n        --   2   2   1      4     4       2\n        -- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n    \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        if (temp>45) then\n          -- invalid data\n          out.data={\n          }\n          out.result={\n            code=1002,\n            msg="over range"\n          }\n        else\n          out.data = {\n            x=xa,\n            y = ya,\n      \t\ttemp = temp,\n          }\n        end\n    else\n    \tlocal msg\n        if ok then\n           msg= 'Invalid Msg, len='..string.len(hex)\n        else \n           msg="Timeout" \n        end\n        out.result = {code=1001,msg=msg}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-10-26 18:00:28.916+08	2018-12-11 10:10:37.999+08	2017-10-26	\N
7bd91ff4-9649-4345-abc5-69e305a0738a	TempHumi_CYKJ_1142	\N		1.0	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	f	5f62fd39-0b72-492e-99be-308c935c1b64	Lua	--[[\n//01 协议文档/7月第1周/北京长英科技/1269848304703_f_0001.pdf\n协议号: 1142;\n]]--lucas\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not \n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "TempHumi_CYKJ_1142.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x3a, BE);--':'冒号 起始符\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);--读命令\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x80, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x03, BE);-- 3:  \t读取寄存器数量\n    local check=LCR(string.sub(buff,3,-1))\n    buff=buff..check              -- 5: LRC\n\tbuff=iota.appendHexByte(buff, 0x0d, BE);-- 4:  \t结束符0x0d\n\tbuff=iota.appendHexByte(buff, 0x0a, BE);-- 4:  \t结束符0x0a\n  --转ASCII\n    local str_ascii=""\n    for i=3,string.len(buff)-4,1 do  \n    --print(string.byte(string.sub(buff,i,i)))\n    local aa=string.format("%#x",string.byte(string.sub(buff,i,i)))\n    local aa_hex=string.sub(aa,-2,-1)\n    --print(aa_hex)\n    str_ascii=str_ascii..aa_hex\nend\nlocal request=string.sub(buff,1,2)..str_ascii..string.sub(buff,-4,-1)\n  \n\treturn request\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  3a0204060102219f02c1990d0a    moduleId=2\n--原始数据 温度25.9735，湿度70.56 \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal TH=string.sub(data,13,14);\n\t\tlocal TL=string.sub(data,15,16);\n\t\tlocal Temp = (bit:_and(tonumber(TH,16),0x07)*256+tonumber(TL,16))*0.0625; --温度\n    log.debug("temp等于:%s",temp)--测试用\n\t\tlocal flag=bit:_and(tonumber(TL,16),0x08);\n\t\tif(floag==0x08) then --判断正负号\n\t\t Temp=-1*Temp; \n\t\tend\n\t\t\n\t\tlocal HH=string.sub(data,17,18);\n\t\tlocal HL=string.sub(data,19,20);\n\t\tlocal Hum = (tonumber(HH,16)*256+tonumber(HL,16))/10.0; --湿度\t\t\t\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thum=Hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=13 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n\n\nfunction LCR(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end     \n    local value= string.format("%02x",bit:_not(lcr) + 1)\n    local byte = string.sub(value,string.len(value)-1,string.len(value))\n    return byte\nend 	INLINE	2017-09-18 21:04:31.629+08	2018-02-28 18:32:12.196+08	2017-09-18	\N
2eae02f9-d98b-4ac9-b5a0-67f355eb62f4	yx_vibrateWire_1401	\N		1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n    log.debug("zxc123 root device = %s", json.encode(device))\n\tlog.debug("start load  yx_1401 moudle = %s ",device.uplink.props.module)\n    --log.debug("yx_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("yx_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("yx_1401 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("yx_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("yx_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("yx_1401:".."subdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("yx_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('yx_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        log.debug("yx_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n        if subDevice.uplink.capabilities[1].formula.metaid == "73db0431-7f3c-451d-9852-38c75cdf1b79" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K \n\t\t\t\tlog.debug('yx_1401  [%s] K1111111111111(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.K',k )\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt \n\t\t\t\tlog.debug('yx_1401  [%s] kt2222222222222(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.Kt',kt )\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo \n\t\t\t\tlog.debug('yx_1401  [%s] f033333333333333(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.Fo',f0 )\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug('yx_1401  [%s] t044444444444444(振弦)子设备:subDevice.uplink.capabilities[1].formula.props.To',t0 )\n                log.debug("yx_1401 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\tlog.debug('yx_1401  [%s] Phy8989898989898989Phy',Phy )\n\t\t\t\tend\n\t\tend\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('yx_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('yx_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('yx_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('yx_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2019-02-25 16:48:23.97+08	2020-05-08 17:27:45.804+08	2019-02-25	\N
01baa98e-542d-4c05-99d1-8f46f984e13c	yx_waterLevel_9024	\N	北京岩信静力水准仪协议	1.0	ff67841c-7b79-4928-90b3-6782e69c14e9	ff67841c-7b79-4928-90b3-6782e69c14e9	f	ff67841c-7b79-4928-90b3-6782e69c14e9	Lua	\n--//01 协议文档/9月第5周/华北--北京岩信科技-静力水准仪 485协议/通讯数据说明--北京岩信.docx\nstart = function()\n    log.debug('start %s, ctx=', 'yx_waterLevel_9024.lua', device.uplink.props.module)\n    ok = ctx:asend('0123')\nend\n--2330384f5742452030303e4352433a303120303232432030464634203031393220324346460d0a\n--moduleId=8\n--channelId=2\n--"height": 255.25,\n--"temp": 25.125,\n--"voltage": 2.75\n\nonData =function(hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('yx_waterLevel_9024 hex=%s', hex)\n    local deviceModule=device.uplink.props.module\n    local ErrorCode = IsValid(hex,deviceModule)\n    if ErrorCode then\n        local sData = HexToStr(hex)\n        log.debug('yx_waterLevel_9024 sData=%s', sData)\n        local dataModule = tonumber(string.sub(sData, 2, 3))\n        local dataChannel = tonumber(string.sub(sData, 16, 17))\n        local childDevice = getDeviceInfo(dataModule, dataChannel)\n\n        local deviceId\n        if childDevice ~= nil then\n            deviceId = childDevice.id\n            local subHexData = string.sub(sData, string.len(sData)-19+1, string.len(sData)-19+12)\n            subHexData = string.gsub(subHexData, ' ', '')\n            log.debug('yx_waterLevel_9024 subHexData=%s', subHexData)\n            local volt = iota.hexToByte(subHexData, 0, 'B') / 16.0\n            local heigh = iota.hexToShort(subHexData, 1, 'B')\n            if heigh > 32768 then\n                heigh = (32768 - 65536) / 5.0\n            else\n                heigh = iota.hexToShort(subHexData, 1, 'B') / 16.0\n            end\n            local temperature = iota.hexToShort(subHexData, 3, 'B')\n            if temperature > 32768 then\n                temperature = (32768 - 65536) / 5.0\n            else\n                temperature = iota.hexToShort(subHexData, 3, 'B') / 16.0\n            end\n            local subdata = {\n                data = {\n                    height = heigh,\n                    temperature = temperature,\n                    voltage = volt\n                },\n                device = deviceId,\n                type = 1\n            }\n            log.debug('yx_waterLevel_9024  m=%s,c=%s subdata=%s', tostring(moduleNo), tostring(channelNo), json.encode(subdata))\n            table.insert(out.data, subdata)\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid = function(data,devicemoduleStr)\n    if string.len(data) / 2 ~= 39 or iota.hexToByte(data, 1, 'B') ~= 0x30 then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n\n    --判断模块号通道号 是否正确\n    local hexData = HexToStr(data)\n    local dataModuleNo = tonumber(string.sub(hexData, 2, 3), 16)\n    local isAddressOK = tonumber(devicemoduleStr)==dataModuleNo\n\n    if isAddressOK == false then\n        errormsg = '模块号无效'\n        errcode = 1004\n        log.debug('yx_waterLevel_9024 模块地址校验：错误')\n        return false\n    else\n        log.debug('yx_waterLevel_9024 模块地址校验：正确')\n    end\n    return true\n    --crc\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("yx_waterLevel_9024 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug('yx_waterLevel_9024 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck = child.uplink.props.channel\n            log.debug('yx_waterLevel_9024 子设备模块通道  m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('yx_waterLevel_9024  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('yx_waterLevel_9024  subdevices是nil')\n        return nil\n    end\nend	INLINE	2017-09-02 14:28:26.66+08	2018-11-17 15:58:48.487+08	2017-09-02	\N
98bc146d-21ca-4382-bfa0-e362c953a2ab	shangheng_pressure_1	\N		1.0	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	f	eb23c67c-17aa-4909-8bba-8119130ed7f8	Lua	--04 项目资料/2018-01/河北路凯铁路实验项目监测/通讯协议说明/绳索张力传感器.pdf      （说明文档命名错误，其实是模拟量采集仪 协议）\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\n\nstart=function()\n    log.debug("start %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x02, endian) \n    buff=iota.appendHexByte(buff, 0x52, endian) \n    buff=iota.appendHexByte(buff, 0x44, endian) \n    buff=iota.appendHexByte(buff, 0x53, endian) \n    buff=iota.appendHexByte(buff, tonumber(device.props.moduleId)+64, endian)  \n    buff=iota.appendHexByte(buff, checkPlusSum(buff,1,4), endian)  \n    buff=iota.appendHexByte(buff, 0x0D, endian)                    \n\t\n    log.debug("send %s, ctx=%s", "shangheng_pressure_1.lua",buff)\n    local ok=false\n  \tfor i=1,3,1 do\n      if ok==false then\n          ok,resp=ctx:ssend(buff,15000)\n          local result="{}"\n          if ok then\n              result = unmarshall(resp)\n\t\t\t  ctx:done(result)\n          end\n      end\n    end\n    \nend\n--1803040000000072f2  模块号24   数据0\nunmarshall=function(hex)\n    log.debug("收到数据：recv %s, ctx=%s", "shangheng_pressure_1.lua",hex)\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==22) then\n        \n\t\t\n\n\t\t--024244383030303038360d 实际回复\n\n\n        --print("parsing data", hex)\n        log.debug("shangheng_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n       local sData=string.reverse(string.sub(hex,8,8)..string.sub(hex,10,10)..string.sub(hex,12,12)..string.sub(hex,14,14)..string.sub(hex,16,16))\n        local str_index=string.sub(hex,18,18)\n\t\tlocal num_index=tonumber(str_index,16)\n\t\tlocal pressure\n\t\tif (num_index %8)==4 then\n\t\t\tpressure= tonumber(sData,16)*-1\n\t\t\telse\n\t\t\tpressure= tonumber(sData,16)\n\t\tend\n\n\t\t-- local pressure= pressure1*2^16+pressure2   --32位有符号整数\n\t\tlog.debug("shangheng_pressure_1 模块%s的 当前的pressure是:%s",device.props.moduleId,pressure)\n            --获取通道设备deviceId\n            local childDevice=getDeviceInfo(1)\n            local deviceId\n            if childDevice~=nil then\n                deviceId=childDevice.id\n                log.debug("shangheng_pressure_1:子设备原形childDevice=%s",json.encode(childDevice))\n                log.debug("shangheng_pressure_1:子设备deviceId: "..tostring(deviceId))\n                   \n                \n                local data1 = {\n                    data={\n                    pressure=  pressure,\n                    },\n                    device=deviceId,\n                    type=1                       \n                };\n                \n                table.insert(out.data,data1)\n\n            end\n\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("return %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(out))\n    return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug(" channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \t--if child.props.moduleId==tostring(moduleNoId) then\n\t\t  \tif child.props.channelId == tostring(channelNoId) then\n                log.debug("shangheng_pressure_1:".."DeviceInfo是："..tostring(child.id))\n          \t\tlog.debug("shangheng_pressure_1:".."子设备原形child=%s",json.encode(child))\n            \t --return child.device.id\n                return child\n            end\n       \t \t--end\n\t\tend\n    else\n       log.debug("shangheng_pressure_1:".."device.dnlinks[1].devices是nil")\n    \treturn nil\n    end\nend\n \ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n    sum = bit:_and(sum ,0xff)\n    return sum%128\nend \n\n \n\n	INLINE	2018-03-09 14:49:54.747+08	2018-03-13 11:36:07.98+08	2018-03-09	\N
29c24e0f-e684-4875-9e8a-2d0650310192	anfang_inclin_1	\N	测斜，主动上传	1.0	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	f	0be11993-6e55-415e-b770-792f29f98f9f	Lua	start=function()\n    log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("anfang_inclinometer_1.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local xData = iota.hexToShort(hex,34,'B')/1000.000;\n        local yData = iota.hexToShort(hex,36,'B')/1000.000;\n        --local zData = iota.hexToShort(hex,38,'B')/1000.000;\n        --local temp = iota.hexToShort(hex,40,'B')/100.000;\n     \n        out.data = {                \n            anglex=xData,\n            angley=yData,\n            --anglez=zData,\n            --temperature=temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("anfang_inclinometer_1: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'anfang_inclinometer_1:Data is nil'\n        errcode = 1001\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anfang_inclinometer_1:Data length is wrong'\n        errcode = 1001\n        return false\n    end\n  \n   local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=2) then\n        errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n        errcode = 1001\n        return false\n    end\n    local moduleId= iota.hexToShort(data,26,'B')\n    if (device.uplink.props.module~=tostring(moduleId)) then\n        errormsg = 'anfang_inclinometer_1:module is wrong'\n        errcode = 1001\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n        errcode = 1001\n        return false\n    end\n    \n    return true\n  \nend\n \n	INLINE	2018-05-29 14:49:18.069+08	2019-05-05 13:59:41.805+08	2018-05-29	\N
40879c58-2d96-4474-88b4-fcbda49d1ab2	jm_lvdt_1554	\N	倾角式静力水准仪协议	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	start =\n    function()\n    log.debug('start %s, moduleId=%s', 'jm_lvdt_1554.lua', device.props.moduleId or 'nil')\n\n    local endian = 'B'\n    local buff = ''\n    buff = iota.appendHexByte(buff, 0x23, endian)\n    buff = iota.appendHexByte(buff, 0x2b, endian)\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    if string.len(moduleNo) < 6 then\n        local strlen = 6 - string.len(moduleNo)\n        for i = 1, strlen do\n            moduleNo = '0' .. moduleNo\n        end\n    end\n    buff = buff .. toHexStr(string.sub(moduleNo, 1, 1))\n    buff = buff .. toHexStr(string.sub(moduleNo, 2, 2))\n    buff = buff .. toHexStr(string.sub(moduleNo, 3, 3))\n    buff = buff .. toHexStr(string.sub(moduleNo, 4, 4))\n    buff = buff .. toHexStr(string.sub(moduleNo, 5, 5))\n    buff = buff .. toHexStr(string.sub(moduleNo, 6, 6))\n    log.debug('jm_lvdt_1554 moduleId=%s send: %s', moduleNo or 'nil', buff)\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n       local errorout={\n                    data ={},\n                    result = {}\n                }\n    \t errorout.result = {code=1003,msg="采集超时"}\n         result=json.encode(errorout)\n    end\n    ctx:done(result)\nend\n\nunmarshall =\n    function(hex, moduleNoStr)\n    --24596148594963486349634850   module=1\n    --"level":1095.05,\n    --"temp": 10644.7\n    log.debug('jm_lvdt_1554 收到数据=' .. hex)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        local level\n        local level0\n        local temp\n        log.debug('jm_lvdt_1554 解析数据hex=%s', hex)\n        local data1 = ((tonumber(string.sub(hex, 3, 4), 16) - 48) * 16 + (tonumber(string.sub(hex, 5, 6), 16) - 48) + (tonumber(string.sub(hex, 7, 8), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 9, 10), 16) - 48) * 16 * 16) -- / 100\n        local data2 = ((tonumber(string.sub(hex, 11, 12), 16) - 48) * 16 + (tonumber(string.sub(hex, 13, 14), 16) - 48) + (tonumber(string.sub(hex, 15, 16), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 17, 18), 16) - 48) * 16 * 16) -- / 100\n       -- temp = ((tonumber(string.sub(hex, 19, 20), 16) - 48) * 16 + (tonumber(string.sub(hex, 21, 22), 16) - 48) + (tonumber(string.sub(hex, 23, 24), 16) - 48) * 16 * 16 * 16 + (tonumber(string.sub(hex, 25, 26), 16) - 48) * 16 * 16 - 500) --/ 10\n        local x1=(data2/10000-2.5)/4\n        local y1=(data1/10000-2.5)/4\n        local anglex=  math.deg(math.asin(x1))\n        local angley=  math.deg(math.asin(y1))\n        local angle=(anglex-angley)/2\n    \tlog.debug('jm_lvdt_1554 结果 anglex=%s,angley=%s,temp=%s', anglex, angley, temp)\n        local A = device.props.A\n        local B = device.props.B\n        local C = device.props.C\n        log.debug('jm_lvdt_1554 公式参数A=%s,B=%s,C=%s', A, B, C)\n        if A ~= nil and B ~= nil and C ~= nil and isValidParameter(A, B, C) then --and isValidParameter(A,B,C)\n            level = A * angle ^ 2 + B * angle + C\n            --level0 = A * angley ^ 2 + B * angley + C\n        else\n            out.result = {code = 1002, msg = '公式参数错误，请检查'}\n        end\n        out.data = {\n            length = string.format('%0.3f',level) --,\n           -- level0 = string.format('%0.3f',level0) --,\n           -- temp = temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n    log.debug('jm_lvdt_1554 开始校验数据=%s', data)\n    local checkLength = string.len(data) / 2\n    if data == nil or checkLength ~= 9 then\n        errormsg = 'Data is nil or invalid length=' .. checkLength\n        errcode = 1001\n        log.debug('jm_lvdt_1554 [%s]  长度校验失败 data=%s', moduleCheck, data)\n        return false\n    end\n    --log.debug('jm_lvdt_1554  CMD=%s',iota.hexToByte(data,0,'B'))\n\n    log.debug('jm_lvdt_1554 [%s] 数据校验通过', moduleCheck)\n    return true\n    --crc\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\nisValidParameter = function(...)\n    local paras = {...}\n    for k, v in pairs(paras) do\n        -- log.debug('k=%s,v=%s',k,v)\n        local isNum = IsNumberic(v)\n        --log.debug('isNum=%s',isNum)\n        if isNum == false then\n            return false\n        end\n    end\n    return true\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2018-11-16 17:26:35.81+08	2018-11-20 16:36:57.342+08	2018-11-16	\N
9471a5e1-b72a-4a1f-ab9e-2e5c6e42b4e7	dihui_weather_2403	\N		1.0	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f	24ba1243-7e9a-4449-891c-e85657f257b5	Lua	\n--//协议文档/期望先接入硬件/北京迪辉科技/迪辉科技DTU-C1W1Z使用手册-修改0615.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n--\n\nstart=function()\n    -- log.debug("load script %s, moduleId=%s", "dihui_2403.lua", device.props.moduleId or "[nil]")\n    -- log.debug("dihui_2403:".."LUA: ctx is =%s", json.encode(device))\n    -- ok,resp=ctx:ssend("0102030405060708",15000)\n    -- log.debug("dihui_2403:".."测试下发正常")\nend\n\n--实时数据   步骤1\n--EB90010E10050D0B0A00D204390402016D01624B\n\n\n--协议下发请求设备信息\n--474554444556494e464f\n\n--设备信息   步骤2\n--EB90041731353132313130303033303030303031D2040301163103342B\n\n--m=1 c=22  phy1=1459.6 \n\n\n\n\nonData=function(hex)\n    log.debug("dihui_2403:LUA: onData: data is =%s", hex)\n\tlog.debug("dihui_2403:LUA:device : data is =%s", json.encode(device))\n    --log.debug("dihui_2403:LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\t     \n\t    local buffer=hex\n\t\tlocal id=iota.hexToUShort(buffer,10,'L')\n\t\tlog.debug("dihui_2403:id=%s",id)\n\t\tlocal ok,deviceTable=GetDevice()  --获取设备信息\n        if ok then\n\t\t\tfor k,node in ipairs(deviceTable) do\n\t\t\t\tlog.debug("dihui_2403:k=%s,node=%s",k,json.encode(node))\n\t\t\t    local offset=12\n\t\t\t\tlocal raw={}\n\t\t\t\tlocal count=node.nodeSubDataCount--传感器 数据项数\n\t\t\t\tlog.debug("")\n\t\t\t\tfor j=1,count,1 do\n\t\t\t\t    local num_r=iota.hexToUShort(buffer,offset,'B')\n\t\t\t\t\traw[j]=GetFloat(node.nodeType,j,num_r)--node列表的顺序需与数据的顺序一致\t\t\t\t\t\n\t\t\t\t\toffset=offset+2\n\t\t\t\tend\n\t\t\t\tlocal channelNo=node.nodeAddr\n\n\t\t\t\tlocal moduleNo=1  --device.uplink.capabilities[1].props.moduleId  该设备没有模块号 默认是1\n\t\t\t\tlog.debug("dihui_2403:")\n          \t\tlog.debug("dihui_2403:查询m=%s,c=%s的设备deviceId",moduleNo,channelNo)\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t\t\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备device=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\tdeviceId=childDevice.id\t\t\t\t\t\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tphy1=raw[1],\n\t\t\t\t\t\t\t\t\t\tphy2=raw[2],\n\t\t\t\t\t\t\t\t\t\tphy3=raw[3],\n\t\t\t\t\t\t\t\t\t\tphy4=raw[4],--为nil不显示\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备data=%s",moduleNo,channelNo,json.encode(data1))\n\t\t\t\telse\n\t\t\t\t\tlog.debug("dihui_2403:m=%s,c=%s的设备device=nil",moduleNo,channelNo)\n\t\t\t\tend          \n\t\t\tend\n\t\tend                   \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("dihui_2403:LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n\n\nGetFloat=function(nodeType,index,num)\n\t  \n\tif nodeType==0x1a then\n\t\tnum=num/100.0\n\t\treturn num\n\tend\n\t\n\tif nodeType==0x26 then\n\t\treturn num\n\tend\n\t\n\tif nodeType==0x24 then\n\t\tif index==1 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\tif nodeType==0x33 then\n\t\tif index==2 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\tif nodeType==0x41 then\n\t\tif index==2 or index==3 then\n\t\t\treturn num\n\t\tend\n\tend\n\t\n\t--default\n\tnum=num/10.0 \n\treturn num\nend\n\n--获取设备下面  每个传感器信息（重点：顺序）\nGetDevice=function()\n    log.debug("dihui_2403:开始发送GETDEVINFO  获取设备信息")\n    local deviceInfo={}\n    local cmd_hex=StrToHex("GETDEVINFO")\n    ok,resp=ctx:ssend(cmd_hex,15000)\n    if ok then\n\t    local dtuid_hex=string.sub(resp,2*4+1,2*20)\n\t    local dtuid=HexToStr(dtuid_hex)\n\t\tlocal deviceId=iota.hexToUShort(resp,20,'L')\n\t\tlocal deviceType=iota.hexToByte(resp,22,'L')        \n\t\tlocal nodeCount=iota.hexToByte(resp,23,'L')--节点数量\n\t\tlog.debug("dihui_2403:dtuid=%s,deviceId=%s,deviceType=%s,nodeCount=%s",dtuid,deviceId,deviceType,nodeCount)\n\t\tfor i=1,nodeCount,1 do\n\t\t\tlocal nodeAddr=iota.hexToByte(resp,24+3*(i-1),'L')\n\t\t\tlocal nodeType=iota.hexToByte(resp,24+3*(i-1)+1,'L')\n\t\t\tlocal nodeSubDataCount=iota.hexToByte(resp,24+3*(i-1)+2,'L')\n\t\t\tdeviceInfo[i]={\n\t\t\t\t\t\t\tnodeAddr=nodeAddr,\n\t\t\t\t\t\t\tnodeType=nodeType,\n\t\t\t\t\t\t\tnodeSubDataCount=nodeSubDataCount\n\t\t\t\t\t\t\t}\n\t\tend\n\t\t\n\t else\n\t   log.debug("dihui_2403:获取传感器信息失败")\n\tend\n\t log.debug("dihui_2403:设备信息  ok=%s,deviceInfo=%s",ok,json.encode(deviceInfo))\n     return ok,deviceInfo\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("dihui_2403:".."查询子设备原形child=%s",json.encode(child))\n        \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) then\n                 log.debug("dihui_2403: m=%s,c=%s的deviceId=%s",moduleNoId,channelNoId,tostring(child.id))\n          \t\t log.debug("dihui_2403:子设备原形child=%s",json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("dihui_2403:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(checkData)\n    log.debug('dihui_2403:开始校验数据%s',checkData)\n    if checkData == nil or string.len(checkData)/2 < 3 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('dihui_2403:模块%s数据 长度校验失败：Data is nil or invalid length',moduleId)\n        return false\n    end\n    if iota.hexToByte(checkData,0,'B') ~= 0xEB or iota.hexToByte(checkData,1,'B') ~= 0x90 or iota.hexToByte(checkData,2,'B')==3 or iota.hexToByte(checkData,2,'B')>4 then\n        errcode = 1003\n        errormsg = 'CMD Error Code ' \n\t\tlog.debug('dihui_2403:数据校验CMD 失败')\n        return false\n    end\n\n    -- local data=string.sub(checkData,1,length*2)\n    -- log.debug("data:"..data)\n    -- local plu16={}\n    -- plu16[0]=string.sub(data,-8,-7)\n    -- plu16[1]=string.sub(data,-6,-5)\n    -- local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n    -- log.debug("dihui_2403:".."plu16[0]是："..plu16[0])\n    -- log.debug("dihui_2403:".."plu16[1]是："..plu16[1])\n    -- log.debug("dihui_2403:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("dihui_2403:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    -- if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n       -- errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    log.debug("dihui_2403:校验通过")\n    return true\nend\n\n\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHexToStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend	INLINE	2018-03-16 09:55:23.493+08	2018-03-19 15:31:17.754+08	2018-03-16	\N
3bf53c5f-a9a9-4cb9-940e-9f98dc62d3b2	hrck_pressure_1	\N	8003\\8006	1.0	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	f	df6e436e-e4a6-4b25-b1c7-175209753c0f	Lua	start=function()\n    log.debug("start hrck_pressure_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tlocal moduleNo=device.uplink.props.module \n    buff=iota.appendHexByte(buff, moduleNo, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 1, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)  \n\n    log.debug(" hrck_pressure_1 ssend %s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug(" hrck_pressure_1 recieve %s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local moduleStr=iota.hexToByte(hex,0,'B')\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local pressure = iota.hexToInt(hex,3,'B')/1.000\n       \n        out.data = {\n            pressure=pressure,\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('hrck_pressure_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('hrck_pressure_1 数据校验通过')\n    return true\n--crc\nend\n	INLINE	2018-08-07 15:29:52.034+08	2018-08-10 16:29:34.604+08	2018-08-07	\N
0b96499d-fce5-4592-aa19-a1df21da56c7	bjhk_wind	\N	北京华控兴业科技	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("bjhk_wind: start module %s, ctx=", json.encode(device.uplink.props.module))\n\tlocal moduleid = device.uplink.props.module\n\tlocal cmd = string.format(moduleid,16)\n\tcmd=iota.appendHexByte(cmd,3,'L')\n\tcmd=iota.appendHexWord(cmd,0x2A,'L')\n\tcmd=iota.appendHexWord(cmd,0x02,'L')\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\tok,resp=ctx:ssend(cmd,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,modulestr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local speed = iota.hexToShort(hex,6,'B')\n        local direction = iota.hexToShort(hex,8,'B')\n\n        \n        out.data = {\n            windSpeed=speed,\n            windDirection = direction\n        };\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\n\n\nIsValid=function(alldata)\n    log.debug("bjhk_wind:  校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n        return false\n    end\n    return true\nend\n\n	INLINE	2018-12-14 15:18:25.124+08	2018-12-15 10:58:52.304+08	2018-12-14	\N
73ea7fd7-c191-4b58-8bb3-ea0177dc8e95	hd_httpMQTT	\N		1.0	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	f	fff3496c-71e7-4ca5-abe5-9de748ac5a63	Lua	\nstart = function()\n    log.debug('hd_httpMQTT   device=%s', json.encode(device))\n\tlog.debug('hd_httpMQTT   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hd_httpMQTT', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hd_httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n    local timeStamps=bodypkg['t']\n\tlog.debug('hd_httpMQTT [%s] 时间戳', tonumber(timeStamps))\n    local allData=bodypkg['d']\n\tlog.debug('hd_httpMQTT 得到所有数据%s ', json.encode(allData))\n\n\tfor k,v in pairs(allData)  do\n\t    local n=v.n\n\t    local anglex=v.x\n\t\tlocal angley=v.y\n\t\n\t\t\n\t\tlocal childDevice = getDeviceInfos(moduleNo,n)\n\t\t\t\tlog.debug('hd_httpMQTT 查询到子设备%s ', json.encode(childDevice))\t\t\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n                        data = {\n                            xphysicalvalue = anglex,\n\t\t\t\t\t\t\typhysicalvalue = angley\n\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n                        },\n                        device = childDevice.id,\n                        time=timeStamps,\n                        type = 1\n                    }\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\telse\n\t\t\t\t\tlog.debug('hd_httpMQTT  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\tend \n        log.debug('hd_httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\ngetDeviceInfos=function(moduleNo,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("hd_httpMQTT 查询m=%s c=%s 子设备deviceId",tostring(moduleNo),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("hd_httpMQTT:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNo),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("hd_httpMQTT 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t  log.debug("hd_httpMQTT 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n        if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('hd_httpMQTT:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n           \t\n\t\tend\n    else\n    log.debug("hd_httpMQTT:  subdevices是nil")\n    return nil\n    end\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2019-11-01 15:00:48.634+08	2019-11-08 10:59:58.979+08	2019-11-01	\N
83750550-f9bd-49a2-9ed1-b9c144146435	test	\N		1.0	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f	a971c084-cc83-4e41-80f6-c8de9df9b9d6	Lua	start=function()\n    --log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil") \n\tlocal req = {\n        type= "http",\n        --url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n    \turl="https://api.yespowering.cn/login/",   \n    \tmethod="post",\n    \tcontent="application/x-www-form-urlencoded",\n        header={}\n    }\n    --req.body["box_id"] = '35E81PV005'\n    req.header["agent"]=0\n\treq.header["language"]="zh"\n\treq.header["brandid"]=38\n\treq.header["token"]='BFED45F6A959DF3ACAFFC8F122BCFC6C'\n\t\t\n    local param={\n    account= 18673077286,\n\tpw=88888888\n\t\n  }\n  req.body = json.encode(param)\n  --req.url=string.format(req.url, url.escape(json.encode(param)))\n\tlog.debug("yyll ok=%s,ack=%s",ok,ack)\n    local ok,ack=ctx:ssend(req,4000)\n    log.debug("yyll ok=%s,ack=%s",ok,ack)\n  \n  local out={\n      type = 1\n  }  \n  \n   if not ok or ack==nil then\n       out.result={\n        code=1002,\n        msg="timeout",\n      }\n  else --OK\n\t  if ack.code==200 and ack.body ~="" then -- http应答: 200\n\t\t  token=json.decode(ack.body) -- 有数据\n\t   -- print("qx=", json.encode(qx))\n\t\t --log.debug("qx.code=%d", qx.code)\n\t\t \n\t\t\t\t  out.data={\n\t\t\t\t\t  -- 解析数据.\n\t\t\t\t\t  token=token\n\t\t\t\t\t  \n\t\t\t\t  }\n\t\t\t\t\n\t\t  else -- 调用失败 - 错误.\n\t\t\tout.result={\n\t\t\t  code  = 1003,\n\t\t\t  msg = ack.status,\n\t\t\t  detail = "detailerror"\n\t\t\t}\n\t\t  end\n\t\t\n    end\nend	INLINE	2018-05-31 07:36:52.581+08	2018-05-31 08:00:39.917+08	2018-05-31	\N
85991f31-8b74-4529-98ea-bac8bef43938	JM_1547	\N	新型总线采集仪	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//04 项目资料/2017-06/郑州铁路局科研所/新总线型采集模块指令.pdf\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tlog.debug("load script %s, moduleId=%s", "jm_1547", device.moduleId or "[nil]")\n    local endian = 'B'\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlog.debug("jm_1547:LUA:根设备devices : data is =%s", json.encode(device)) \n    local buff_str='#'                    \n\tlocal moduleNo=device.props.moduleId\n\t\n    if string.len(moduleNo)<8 then  --采集箱编号8位\n        local strlen=8-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n\t log.debug("jm_1547:LUA:采集仪 : moduleId =%s", moduleNo) \n     buff_str= buff_str..moduleNo..'N!'  --下发指令：获取传感器编号\n\t buff=StrToHex(buff_str)\n     ok1,resp1=ctx:ssend(buff,15000)\n\t if ok1 then\t\n     log.debug("jm_1547:模块%s的采集仪与通道信息接收成功,开始解析 编号与通道关系",moduleNo)    \n\t  dictionary = getSensorChannel(resp1)--获取传感器编号与传感器通道对照表      返回"C"  传感器型号 编号\n\t  log.debug("jm_1547:dictionary=%s",json.encode(dictionary))   \n\t   --下发全部测量指令\n\t   buff_str='#+'..moduleNo..'A!'   --"#" \n\t\tbuff=StrToHex(buff_str)\n\t\tok2,resp2=ctx:ssend(buff,15000)\n\t\tif ok2 then\n\t\tlog.debug("jm_1547:模块%s的采集仪所有传感器采集数据接收成功,开始解析 ",moduleNo)   \n         result = ParseResult(resp2)\n         table.insert(out.data,result)\t\n        end\n\t else\n\t log.debug("jm_1547:模块%s的采集仪的接收传感器与通道信息失败",moduleNo)    \n\t end\n\t \n     log.debug('jm_1547:out序列化')\n     local resultData =json.encode(out)\n     log.debug("jm_1547:out序列化结果 : out is =%s", json.encode(out))\n     ctx:done(resultData)\t\nend\n\n--5431373037313331353139833735ec30303731333032328f32303634378332373531328130b021\nParseResult=function (hex)\n\t--  二次解析\n\tlog.debug("jm_1547:接收传感器数据 Received=>%s",hex)\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\n\t\tlocal adress=''\n\t\tlocal channelTable={}\n\t\tlocal dataType=iota.hexToByte(hex,0,'B') ---与协议说明iota.hexToByte(data,1,'B')稍有出入，目前以之前的C#协议为准\n\t\tif dataType==0x54 then\t--返回"T"  传感器型号 编号\n\t\t  local datalength=string.len(hex)/2\n\t\t  for i=0,datalength-1,1 do\n\t\t\t if iota.hexToByte(hex,i,'B')==0x54 then  --'T'\n\t\t\t\t adress=adress..tostring(i)..','\n\t\t\t end\n\t\t  end\n\t\t  \n\t\t  local sArray=Split(adress,',')\n\t\t  for k,v in ipairs(sArray) do\n\t\t\t\tif v~='' or v~=nil then\n\t\t\t\t\t\n\t\t\t\t\t--table.remove(sArray,k)\n\t\t\t\t\t--log.debug("jm_1547:".."表内的“”和nil 移除元素为 "..tostring(sArray[k]))\n\t\t\t\t\tlocal Type=string.sub(hex,2*(v+12)+1,2*(v+12)+4)\n\t\t\t\t\tlocal strType=HextoStr(Type)\n\t\t\t\t\tif strType=='70' then\n\t\t\t\t\t\tlocal offset=0\n\t\t\t\t\t\tlocal Len=GetCodelen(v,hex);\n\t\t\t\t\t\tlocal hex_sensorid=string.sub(hex,2*(v+17)+1,2*(v+17)+12)\n\t\t\t\t\t\tlocal sensorid=HextoStr(hex_sensorid)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_height=string.sub(hex,2*(v+24)+1,2*(v+24)+2*Len)\n\t\t\t\t\t\tlocal height=HextoStr(hex_height)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal leno=GetCodelen(v+Len+1,hex)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_heights=string.sub(hex,2*(v+24+Len+1)+1,2*(v+24+Len+1+leno))\n\t\t\t\t\t\tlocal heights=HextoStr(hex_heights)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal moduleNo=device.props.moduleId\n\t\t\t\t\t\tlocal channelNo =dictionary[sensorid] ;                   \n\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t deviceId=childDevice.id\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tdisplacement=height,\n\t\t\t\t\t\t\t\t\t\tr_displacement=heights\t\n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 ,\n                                    }\n                                    \n\t\t\t\t\t\treturn data1\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\t--\n\t\t\t\t\tif strType=='75' then--//测斜\n\t\t\t\t\t\tlocal offset_inclination=0\n\t\t\t\t\t\tlocal Len=GetCodelen(v,hex);\n\t\t\t\t\t\tlocal hex_sensorid=string.sub(hex,2*(v+17)+1,2*(v+17)+12)\n\t\t\t\t\t\tlocal sensorid=HextoStr(hex_sensorid)\n\t\t\t\t\t\tlog.debug('jm_1547:测斜传感器 sensorId=%s',sensorid)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_X_degree=string.sub(hex,2*(v+24)+1,2*(v+24)+2*Len)\n\t\t\t\t\t\tlocal str_X_degree=HextoStr(hex_X_degree)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal leno=GetCodelen(v+Len+1,hex)\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal hex_Y_degree=string.sub(hex,2*(v+24+leno+1)+1,2*(v+24+Len+1+leno))\n\t\t\t\t\t\tlocal str_Y_degree=HextoStr(hex_Y_degree)\n                        \n                        local X_degree=math.asin((tonumber(str_X_degree)-25000)/40000.0)/0.017453292\n                        local Y_degree=math.asin((tonumber(str_Y_degree)-25000)/40000.0)/0.017453292\n\n\t\t\t\t\t\tlocal moduleNo=device.props.moduleId\n\t\t\t\t\t\tlocal channelNo =dictionary[sensorid] ;                   \n\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n            \t\t\tlocal deviceId\n            \t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\tdeviceId=childDevice.id\n              \t\t\t\tlog.debug('jm_1547：模块号=%s,通道号=%s,的deviceId=%s',moduleNo,channelNo,deviceId)\n              \t\t\telse\n              \t\t\t\tlog.debug('jm_1547：模块号=%s,通道号=%s,的deviceId=nil',moduleNo,channelNo)\n              \t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tX_degree=X_degree,\n\t\t\t\t\t\t\t\t\t\tY_degree=Y_degree\t\n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1 ,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data1\n\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\tend        \n\t\t   end  \n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t    log.debug('jm_1547：数据校验失败')\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\nGetCodelen=function(num_str,buff_response)\n    local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num-24,1 do\n\t    local Y_str=string.sub(buff_response,2*(num+24+j)+1,2*(num+24+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t    length=j\n\t\t\tbreak\n\t\tend\n\t  \n\tend\n    return length\nend\n\ngetSensorChannel=function(channelBuff)\n\t\n\tlocal adress=''\n\tlocal channelTable={}\n   local dataType=iota.hexToByte(channelBuff,1,'B')\n   if dataType==0x43 then\t--返回"C"  传感器型号 编号\n      local datalength=string.len(channelBuff)/2\n      for i=0,datalength-1,1 do\n\t     if iota.hexToByte(channelBuff,i,'B')==0x43 then  --'C'\n\t\t     adress=adress..tostring(i)..','\n\t\t end\n\t  end\n\t  \n\t  local sArray=Split(adress,',')\n\t  for k,v in ipairs(sArray) do\n            if v=='' or v==nil then\n            table.remove(sArray,k)\n            log.debug("jm_1547:表内的“”和nil 移除元素为%s",sArray[k])\n            break\n            end\n            local V=tonumber(v)\n\t\t\thexChannelStr=string.sub(channelBuff,2*(V+1)+1,2*(V+1)+4)\n\t\t\tlocal channelId=HextoStr(hexChannelStr)\n            local hexSensorId=string.sub(channelBuff,2*(V+7)+1,2*(V+7)+12)\n            local sensorId=HextoStr(hexSensorId)\n\t\t\tchannelTable[sensorId]=tonumber(channelId)           \n       end  \n   end\n\n    return channelTable\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("jm_1547:moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.props.channelId == tostring(channelNoId) then\n                 log.debug("jm_1547:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("jm_1547:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("jm_1547:subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(data)\n\tlog.debug('jm_1547:开始校验数据')\n    if data == nil or string.len(data)/2 < 3 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,0,'B') ~= 0x54 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif iota.hexToByte(data,dataLength-1,'B') ~= 0x21 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n    log.debug('jm_1547:校验通过')\n\treturn true\n\t\nend\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n	INLINE	2018-01-05 17:27:48.16+08	2018-03-07 11:32:32.999+08	2018-01-01	\N
184cde4a-7a28-4ab9-882a-b2eb1b8ec8a2	111111	\N	13123123123123123123	1	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	f	a6791a14-ab8e-477e-aee9-4f340e7cf7bb	Lua	12312312321333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333	INLINE	2017-09-30 11:15:58.498+08	2017-09-30 11:15:58.498+08	2017-09-30	\N
de43551c-d8a4-47f7-b153-d826d52e3749	d	\N		d	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	f	33cfce70-2dc8-4d0a-9ed1-8cd6e737117a	Lua	ret54wtwetwttwewt	INLINE	2018-01-17 14:38:19.796+08	2018-01-17 14:38:19.796+08	2018-01-17	\N
a288632d-ffc9-4246-9d60-063f43955e03	ronoele_pressure_1	\N	河北荣欧电子科技有限公司	1.0	eb23c67c-17aa-4909-8bba-8119130ed7f8	eb23c67c-17aa-4909-8bba-8119130ed7f8	f	eb23c67c-17aa-4909-8bba-8119130ed7f8	Lua	--04 项目资料/2018-01/河北路凯铁路实验项目监测/通讯协议说明/绳索张力传感器.pdf      （说明文档命名错误，其实是模拟量采集仪 协议）\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n\tlog.debug("start load  ronoele_pressure_1 moudle = %s ",device.uplink.props.module)\n    --log.debug("ronoele_pressure_1 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do     \n            --log.debug("ronoele_pressure_1  child=%s",json.encode(child))\t\t\n\t\t    local channelNo=tostring(child.uplink.props.channel)\t\t\t           \n\t\t\tlocal moduleNo = tostring(child.uplink.props.module)\n\t\t\tlog.debug("ronoele_pressure_1   子设备moduleNo = %s  channelNo=%s",moduleNo, channelNo)\n\t\t\tlocal buff=''    \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)             -- 2: 模块号\n      \t\tbuff=iota.appendHexByte(buff, 3, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 2, endian)  \n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0)  \n      \t\tlog.debug("ronoele_pressure_1 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\telse\n\t\t\t    log.debug("ronoele_pressure_1 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("ronoele_pressure_1:subdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend\n\nunmarshall=function(hex,subDevice,subModuleNo,subChannelNo)\n    log.debug("recv %s, ctx=%s", "ronoele_pressure_1.lua",hex)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n    local ErrorCode = IsValid(hex,subModuleNo,subChannelNo)\n    if ErrorCode then    \n        log.debug("ronoele_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n        local current1 = iota.hexToUShort(hex,3,'B');\n        local current2 = iota.hexToShort(hex,5,'B');\n\n        local moduleNo = iota.hexToByte(hex,0,'B')\n        local array = current2*2^16+current1   --32位有符号整数\n\t\tlog.debug("ronoele_pressure_1  当前的Phy是:%s",array)\n            if subDevice~=nil then\n                log.debug("ronoele_pressure_1:子设备原形subDevice=%s",json.encode(subDevice))\n                log.debug("ronoele_pressure_1:子设备deviceId: "..tostring(subDevice.id))\n                   \n                \n                subData.data={\n                    pressure=  array/100.0,                                     \n                };\n            end\n\n    else\n        subData.result = {code=errcode,msg=errormsg}\n        subData.data = {}\n    end\n    return subData\nend\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('ronoele_pressure_1 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('ronoele_pressure_1 : Modbus Error CMD = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,1,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif  tostring(moduleId)~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('ronoele_pressure_1 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\t\n    return true\nend\n\n\n \n\n	INLINE	2018-01-23 10:14:29.587+08	2018-05-21 15:40:20.937+08	2018-01-23	\N
914cafcd-4123-47c7-9dc7-392c91427b17	测试协议	\N	测试协议	1	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	f	c5fbd9dd-297a-43f9-8d5d-343ec75239dc	Lua	print("Hello World")	INLINE	2017-09-19 16:22:13.308+08	2017-09-19 16:22:13.308+08	2017-09-19	\N
b31c1a66-c65d-437f-b635-6f7aa32cf0e4	sf_waterLevel_1913	\N	上海萨法尔磁致伸缩液位协议	1.0	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	f	e4e8b9b9-ebc0-4555-a2d7-493f14ea8b07	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "sf_waterLevel_1913.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x02, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x07, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--01030E12E62E00009C4999021E01ACFE6F6255  moduleId=1\n--"location1": 156.28749523155565,\n--"location2": 4838.1796902418555,\n--"temp1": 33.875,\n--"temp2": 26.75,\n--"temp3": -25.0625\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local location_1 = iota.hexToUShort(hex,7,'B') + iota.hexToUShort(hex,9,'B') / 65535.0\n        local location_2 = iota.hexToUShort(hex,3,'B') + iota.hexToUShort(hex,5,'B') / 65535.0\n        local temprature1 = iota.hexToShort(hex,11,'B') / 16.0\n        local temprature2 = iota.hexToShort(hex,13,'B') / 16.0\n        local temprature3 = iota.hexToShort(hex,15,'B') / 16.0\n        out.data = {\n            location1 = location_1,\n            location2 = location_2,\n            temp1 = temprature1,\n            temp2 = temprature2,\n            temp3 = temprature3\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 19  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x0E then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 17:12:36.243+08	2018-02-28 18:32:12.19+08	2017-09-14	\N
55c1f524-d49e-4b21-b960-381f35589cb6	asdas	\N	dasdasd	v1	eb5a59f3-6098-4024-a27a-0b795cf9834f	eb5a59f3-6098-4024-a27a-0b795cf9834f	f	eb5a59f3-6098-4024-a27a-0b795cf9834f	Lua	a=2	INLINE	2018-01-19 17:07:17.131+08	2018-01-22 14:20:32.352+08	2018-01-19	\N
77719fc9-148a-4a5d-8a9b-4006035b7ad0	mas_water_9004	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--[[\n协议号: 9004;\n协议名: 液位计 -- （恒通）\n]]--\n\nstart=function()\n  -- 字节 \n\tlocal BE='B'\n\tlocal buff='';\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("mas_water_9004 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("mas_water_9004 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\n\tbuff=iota.appendHexByte(buff, moduleNo,BE);      -- 1: 从机地址\n\tbuff=iota.appendHexByte(buff, 0x03,BE);             -- 1: 功能码\n\tbuff=iota.appendHexByte(buff, 0x00,BE);             -- 2: 输入寄存器起始地址\n\tbuff=iota.appendHexByte(buff, 0x00,BE);\n\tbuff=iota.appendHexByte(buff, 0x00,BE);             -- 2: 输入寄存器数量\n\tbuff=iota.appendHexByte(buff, 0x05,BE);\n\tbuff=iota.appendHexCrc(buff, BE ,0);             -- 2: 16位CRC校验\n\n\tlocal buff1 = string.sub(buff, 1, 12);\n\n\tlocal data1=iota.hexToByte(buff, 6);              -- CRC16的高低字节需要对调\n\tlocal data2=iota.hexToByte(buff, 7);\n\n\tbuff1=iota.appendHexByte(buff1, data2); \n\tbuff1=iota.appendHexByte(buff1, data1); \n\n\tok,resp=ctx:ssend(buff1,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n-- decode\n-- returns: 结果, 原始值, 量程判定值, 实际物理值\nunmarshall=function(hex,moduleStr)\n\tlocal out={\n        data ={},\n        result = {}\n    }\n\tif string.len(hex) < 18 then\n\t\terrormsg = 'Data is nil or invalid'\n\t\terrcode = 1001\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\n\tlocal rawdata = ''\n\tlocal hex = string.sub(hex, 3);\n\n\tlocal start = string.find(hex,'030A');  --测试出现数据帧前面多了一个字节00\n  \n\tif start >= 2 then\n\t\trawdata = string.sub(hex, start - 2, start + 29);\n\t\n\telse\n\t\terrormsg = 'Data is nil or invalid'\n\t\terrcode = 1001\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n  \n\tlocal opt1 = iota.hexToByte(rawdata, 1); \n\tlocal opt2 = iota.hexToByte(rawdata, 2); \n\t--log.debug(string.format('%d',opt1));\n  \n\tif opt1 ~= 0x03 then            --返回功能码\n\t\terrcode = 1001\n\t\terrormsg = 'Hex CMD False ' \n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n  \n\tif opt2 ~= 0x0A then            --数据区长度\n\t\terrcode = 1001\n\t\terrormsg = 'Hex Length False ' \n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n  \n  --传感器返回解析\n  local Symbol = 1;\n  local col_date;\n  local opt3 = iota.hexToByte(rawdata, 7); \n  local opt4 = iota.hexToByte(rawdata, 8); \n  \n\n  if opt3 & 0x80 == 0x80 then            -- 数据正负号\n    Symbol = -1;\n    opt3 = opt3 - 128;\n    col_date = opt3 * 256 + opt4;   \n  \n  else\n    col_date = iota.hexToShort(rawdata, 7, 'B');   \n  end\n\n  local Decimal_part = iota.hexToShort(rawdata, 9, 'B');   -- 小数点位置\n\n  local displacement;\n  \n  displacement = col_date / math.pow(10, Decimal_part);\n  \n  if Symbol == 1 then\n    displacement = displacement;\n  else\n    displacement = displacement * (-1);\n  end\n  \t\tout.data={\n\t\t\t\t\tdisplacement=displacement\n\t\t}\n  return json.encode(out)\nend	INLINE	2018-12-06 15:46:37.284+08	2018-12-06 15:52:13.677+08	2018-12-06	\N
ab7c69d0-e2b6-4199-aa59-314784533b4b	fs_node_weather	\N	空气质量节点协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	function start() \nlog.debug("fs_node LUA:start %s", "idau_node_oxy.lua")\nend\n\nonData=function(msg)\n\tif (msg == nil or msg.type == nil) then\n\t\tlog.error("onData(nil)!!!")\n\telseif (msg.type == "upload") then -- 文件上传进度\n\t\ton_file_upload(msg)\n\telseif (msg.type == "idau/file") then -- 收到数据文件\n\t\ton_data_file(msg)\n\telseif (msg.type == "idau/mop") then -- MOP 消息, wakeup等.\n\t\tlocal mop = json.decode(msg.payload)\n\t\tlog.error("fs_node:msgid=%s,file_mop=%s",msg.id,json.encode(mop))\n\t\tif (mop == nil) then\n\t\t\tlog.error("onData: mop is nil!")\n\t\tend\n\t\tif (mop.M == "c_wakeup") then\n\t\t\t\n\t\t\tlocal updatecfg = true --初次配置\n\t\t\tlocal r1,ok = redis.get(device.id.."_fdset")\n\t\t\t--判断是否配置，否就是初次配置\n\t\t\tlocal strdevice= toHexStr(json.encode(device))\n\t\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\t\tlocal crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("fs_node : crc1= %s ,r1 = %s",crc,r1)\n\t\t\tif ok and r1~=nil then\n\t\t\t\tif crc == r1 then --配置无变动，无需下发\n\t\t\t\t\tupdatecfg = true\t\t\t\n\t\t\t\tend\n\t\t\tend\t\t\t\n\t\t\tlocal updatefw,okey = redis.get(device.id.."_fwset") -- 判断是否需要更新固件，还未处理\n\t\t\tif okey and updatefw == nil then\n\t\t\t\tupdatefw = false\n\t\t\tend\n\t\t\tlocal diag = false\n\t\t\tif device.uplink.props.diag then\n\t\t\t\tdiag = true\n\t\t\tend\n\t\t\tdeal_mop_wakeup(msg,updatecfg, updatefw,diag) --处理wakeup\n\t\t\tif (diag) then \n\t\t\t\tupdate_diag()\n\t\t\tend\n\t\t\tif (updatecfg) then -- 需要更新配置\n\t\t\t\tupdate_config()\n\t\t\tend\n      \t\tlog.debug("fs_node updatefw %s id %s",updatefw,device.uplink.props.diag)\n\t\t\tif (tostring(updatefw) == "true") then -- 需要更新固件\n\t\t\t\tupdate_fw(msg)\n\t\t\tend\n\t\telseif (mop.M == "c_sensor") then -- 配置上传应答\n\t\t\tlog.debug("fs_node c_sensor ack")\n\t\telseif (mop.M == "c_data") then --MOP 指令数据解析\n\t\t\tparse_Data(msg,true)\t\n\t\tend\n\tend\nend\n\n--文件上传进度\nfunction on_file_upload(msg)\nlog.debug("fs_node： on_file_upload: file: progress=%3.2f, status=%d", p.progress, p.status)\n-- 发送完毕.\nif (p.status == 0 and p.progress == 1.00) then\n\t-- 此处可以 ctx:notify 一个能力数据出去\n\tlog.debug("fs_node： file uploaded in %d seconds.", p.duration)\n\t-- 发送开始更新指令.\n\tlocal mop = {\n\t\tM = "c_pgupdate",\n\t\tO = "UP",\n\t\tP = {\n\t\t\tV = p.fi.ext.ver, -- ver.\n\t\t\tF = p.fi.name, -- file\n\t\t\tR = true -- reboot\n\t\t}\n\t}\n\tlocal req = {\n\t\ttype = "idau",\n\t\tpayload = json.encode(mop)\n\t}\n\tlog.debug("fs_node：Notify device to update fw...")\n\tlocal ok, ack = ctx:ssend(req, 3000)\n\tif (ok) then\n\t\t-- Done\n\t\tredis.set(device.id.."_fwset",tostring(false))\n\tend\nend\nend\n\n--需要配置更新 上传固件逻辑\nfunction update_fw(msg)\n\tlog.debug("fs_node update fw for device: %s", device.id)\n\t-- TODO 固件更新信息, 应该通过其他的能力调用, 写入到Redis后, 在这里取出来, 譬如: redis.hget(device.id,"fwinfo")\n\tlocal fwinfo_get = json.encode(redis.get(device.id,"fwinfo"))\n\tif fwinfo_get == nil then\n\t\tlocal fwinfo = {\n\t\t\turl = "http://localhost:9070/fw/test.jpg",\n\t\t\tname = "test.jpg",\n\t\t\tsize = 22824,\n\t\t\tdate = "2018-11-14 20:01:02",\n\t\t\tmd5 = "3768a0dd6faabd7a1c4419dac71db6ca",\n\t\t\tnotify = 1, -- 0=极少通知(开始,结束,错误), 1=每包\n\t\t\text = {\n\t\t\t\tver = 1234,\n\t\t\t\tcompress = 0, --0=none, 1=msg compress, 2=file compress.\n\t\t\t\tpkg = 1024 -- 分包\n\t\t\t}\n\t\t}\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\tlog.debug("fs_node ctx:upload =>%s %s", fwinfo.name, ok, err)\n\telse \n\t\tlocal fwinfo = fwinfo_get\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\tlog.debug("fs_node ctx:upload =>%s %s", fwinfo.name, ok, err)\n\tend\nend\n\n--收到数据文件\non_data_file=function(data)\n    --local jdata=json.encode(data)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  log.debug("fs_node:payload=%s", toStrHex(data.payload))\n                  parseData(toStrHex(data.payload))\n            elseif  data.ext==".m" then\n                  log.debug("fs_node.m:payload=%s", toStrHex(data.payload))\n          \t\t  parseDiag(toStrHex(data.payload))\n          \telse \n          \t\tlog.error("fs_node:type is not.d/.m %s", data.name)\n            end\n        else\n            log.error("fs_node:not a d file .d", data.ext)\n        end\n    else\n        log.error("fs_node:data is nil")\n    end\nend\n\nfunction parse_Data(js,bmop)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\n\tlocal msgid = js.id\n\n\tlocal mop = json.decode(js.payload)\n\tlog.debug("fs_node:mop=%s",json.encode(mop))\n    for k,v in ipairs(mop.P) do\n        if v~='' and v~=nil then\n            local dj=mop.P[k]\n            log.debug("fs_node:dj=%s",v)\n            --log.debug("fs_node:sen=%s",dj.S)\n            -- if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then -- 临时去除结果判定。\n      \t\tif dj~=nil and dj ~= '' then\n                local childDevice=getDeviceInfo(dj.S)\n                log.debug("fs_node:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    log.debug("fs_node:dj.PV1=%s",dj.PV[1])\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1] or 0,\n                                    temperature=dj.RV[2] or 0,\n                                    am=dj.RV[3] or 0\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="am2305" then --AM2305模组\n                        log.debug("fs_node:AM2305模组")\n                        local data5={\n                            data={\n                                    temp=dj.PV[1] or 0,\n                                    hum=dj.PV[2] or 0\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data5=%s",json.encode(data5))\n                            table.insert(out.data,data5)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="pm100" then --PM100模组\n                        log.debug("fs_node:PM100模组")\n                        local data6={\n                            data={\n                                    pm100=dj.PV[1] or 0\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data6=%s",json.encode(data6))\n                            table.insert(out.data,data6)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="pm10" then --PM2.5,PM10模组\n                        log.debug("fs_node:PM2.5,PM10模组")\n                        local data7={\n                            data={\n                                    pm25=dj.PV[1] or 0,\n                                    pm10=dj.PV[2] or 0\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data7=%s",json.encode(data7))\n                            table.insert(out.data,data7)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="gps" then --GPS模组\n                        log.debug("fs_node:GPS模组")\n                        local data8={\n                            data={\n                                    lang=dj.PV[1] or 0,\n                                    long=dj.PV[2] or 0,\n\t\t\t\t\t\t\t\t\ttime_bj=nil\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data8=%s",json.encode(data8))\n                            table.insert(out.data,data8)\n                    end\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=="aqi" then --AQI模组\n                        log.debug("fs_node:AQI模组")\n                        local data9={\n                            data={\n                                    CO=dj.PV[1] or 0,\n                                    O3=dj.PV[2] or 0,\n\t\t\t\t\t\t\t\t\tNO2=dj.PV[3] or 0,\n                                    SO2=dj.PV[4] or 0,\n\t\t\t\t\t\t\t\t\tVOC=dj.PV[5] or 0                                                                       \n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data9=%s",json.encode(data9))\n                            table.insert(out.data,data9)\n                    end\t\t\t\t\t\t\t\n                end\n            else\n                log.debug("fs_node:dj=nil")\n            end\n        else\n            log.debug("fs_node:v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    log.debug("fs_node:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\t\t-- 发送应答.\n\tif bmop == true then\n\t\tlocal mopack = {\n\t\t\tM = "c_data",\n\t\t\tR = 0\n\t\t}\n\t\tlocal msgack = {\n\t\t\ttype = "idau",\n\t\t\tid = msgid, -- 消息ID, 重要!!!\n\t\t\tack = true, -- ack.(本消息是个应答)\n\t\t\tpayload = json.encode(mopack) -- 消息荷载: MOP\n\t\t}\n\t\t-- very important! 节点会等待这个消息, 用于判定通讯状态.\n\t\tlog.debug("fs_node data ack sent: %s", json.encode(msgack))\n\t\tctx:asend(msgack)\n\tend\nend\n\nfunction parseData(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local djs=Split(js,'\\n')\n    log.debug("fs_node:jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            log.debug("fs_node:dj=%s",json.encode(v))\n            --log.debug("fs_node:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then\n                log.debug("fs_node:ceshiyixia1")\n                local childDevice=getDeviceInfo(dj.S)\n                log.debug("fs_node:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    log.debug("fs_node:ceshiyixia2")\n                    log.debug("fs_node:dj.PV1=%s",dj.PV[1])\n\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="am2305" then --AM2305模组\n                        log.debug("fs_node:AM2305模组")\n                        local data5={\n                            data={\n                                    temp=dj.PV[1],\n                                    hum=dj.PV[2]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data5=%s",json.encode(data5))\n                            table.insert(out.data,data5)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="pm100" then --PM100模组\n                        log.debug("fs_node:PM100模组")\n                        local data6={\n                            data={\n                                    pm100=dj.PV[1]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data6=%s",json.encode(data6))\n                            table.insert(out.data,data6)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="pm10" then --PM2.5,PM10模组\n                        log.debug("fs_node:PM2.5,PM10模组")\n                        local data7={\n                            data={\n                                    pm25=dj.PV[1],\n                                    pm10=dj.PV[2]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data7=%s",json.encode(data7))\n                            table.insert(out.data,data7)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="gps" then --GPS模组\n                        log.debug("fs_node:GPS模组")\n                        local data8={\n                            data={\n                                    lang=dj.PV[1],\n                                    long=dj.PV[2],\n\t\t\t\t\t\t\t\t\ttime_bj=dj.PV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data8=%s",json.encode(data8))\n                            table.insert(out.data,data8)\n                    end\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=="aqi" then --AQI模组\n                        log.debug("fs_node:AQI模组")\n                        local data9={\n                            data={\n                                    CO=dj.PV[1],\n                                    O3=dj.PV[2],\n\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n                                    SO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\tVOC=dj.PV[5]                                                                       \n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n                            log.debug("fs_node:out data9=%s",json.encode(data9))\n                            table.insert(out.data,data9)\n                    end\t\t\t\t\t\t\t\n                end\n            else\n                log.debug("fs_node:dj=nil")\n            end\n        else\n            log.debug("fs_node:v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    log.debug("fs_node:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\nend\n\nfunction parseDiag(js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {},\n        type=2\n    }\n    \n    local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n    log.debug("parsing diag file = %s",json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n\n\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(sensorId)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n        \t\tlog.debug("fs_node subdevice.id:",tostring(subdevice.id))\n                if tostring(subdevice.id) == tostring(sensorId)then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_node has no device sensorid=%s ",sensorId)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_node has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n--需要诊断\nupdate_diag = function()\n  \tlog.debug("fs_node_mop:diag=%s,id = %s",device.uplink.props.diag,device.uplink.props.id)\n      local req_diag={\n        type = "idau",\n        payload = ""\n    }\n\tlocal mop_diag = {\n        M = "c_diag",\n        O = "DIAG",\n        P = {\n            D = "root",\n            SYNC = true\n        } -- 荷载\n    }\n\n\treq_diag.payload= json.encode(mop_diag)\n\tlog.debug("fs_node_mop:request=%s", json.encode(req_diag))\n\tlocal ok, ack = ctx:ssend(req_diag, 30000)\n\tresult = {\n\t\tresult = nil,\n\t\ttype = 1,\n\t\tdata = {\n\t\t\tack = json.encode(ack)\n\t\t}\n\t}\n\tlog.debug("parsing diag mop = %s",json.encode(ack))\n\tctx:notify(json.encode(result))\nend\n\n--需要配置更新\nupdate_config = function()\n    log.debug("fs_node_mop: update_config device=%s",json.encode(device))\n\tlocal str= toHexStr(json.encode(device))\n\tstr=iota.appendHexCrc(str, 'B' ,0)\n\tlocal crc = string.sub(str,-4,-1)\n\tlog.debug("fs_node : crc2= %s",crc)\n\tredis.set(device.id.."_fdset", tostring(crc))\n    log.debug("fs_node_mop: update_config subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    log.debug("fs_node_mop:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local req_sensor={\n        type = "idau",\n        payload = ""\n    }\n    local mop_sensor = {\n        M = "c_sensor",\n        O = "S",\n        P = {\n\t\t\tnetwork ={},\n\t\t\tsensors = {}\n\t\t} -- 荷载\n    } \n    local req_diag={\n        type = "idau",\n        payload = ""\n    }\n\n\n\tlocal dmodel = 0 \n\tif tostring(device.uplink.props.dm) == 'MOP' then\n\t\tdmodel = 1\n\tend\n\tlog.debug("fs_node_mop:network")\n\t--采集间隔下移到传感器\n\tlocal networks={\n\t\tDI = tonumber(device.uplink.props.dis) or 5, -- 设备属性: 采集间隔. 默认30分钟\n\t\tCD = tonumber(device.uplink.props.cd) or 30,--冷起延迟(秒)\n\t\tWD = tonumber(device.uplink.props.wd) or 60,--热起延迟(秒)\n\t\tDM = dmodel --数据上传模式(0=文件,1=mop)\n\t}\n  \tlog.debug("fs_node_mop:network2")\n  \tmop_sensor.P.network= networks\n  \tlog.debug("fs_node_mop:network3")\n\t--配置Json构建\n    for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n        local link = device.dnlinks[i]\n        local sensorcnt = #(link.devices)\n        log.debug("fs_node_mop:sensorcnt=%s",sensorcnt)\n        if sensorcnt > 0 then\n            for j = 1, sensorcnt, 1 do\t\t\t\t\n\t\t\t\tlocal sen = device.dnlinks[i].devices[j]\t\t\t\t\n\t\t\t\tlocal sensor = {\n\t\t\t\t\tID = tostring(sen.id),--传感器ID\n\t\t\t\n\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\tSC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t}, \n\t\t\t\t\tN = sen.name, --传感器说明\n\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\tPN = tonumber(sen.props.protocolcode) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\tEN = tonumber(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\tED = tonumber(sen.uplink.props.postdelay) or 0, --执行前延迟(485作用)\n\t\t\t\t\tRD = tonumber(sen.uplink.props.predelay) or 0,--读取前延迟\n\t\t\t\t\tCF =  "",--公式编码, 485平台计算为空\n\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\ttonumber(sen.props.p1) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p2) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p3) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p4) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p5) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p6) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p7) or 0,\n\t\t\t\t\t\t\ttonumber(sen.props.p8) or 0\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n            end\n        end\n\t\tlog.debug("fs_node_mop: bulid OK=%s",sensorcnt)\n    end\n\n\treq_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("fs_node:requestsensor=%s", json.encode(req_sensor))\n\tlocal ok, ack = ctx:ssend(req_sensor, 4000)\n\tif ok == true then\n\t\tlocal str= toHexStr(json.encode(device))\n\t\tstr=iota.appendHexCrc(str, 'B' ,0)\n\t\tlocal crc = string.sub(str,-4,-1)\n\t\tlog.debug("fs_node : crc2= %s",crc)\n\t\tredis.set(device.id.."_fdset", tostring(crc))\n\tend\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("fs_node : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n\n--处理wakeup\nfunction deal_mop_wakeup(msg,cfg,vercfg,diag)\n    local wakeup_req = {\n        type = "idau",\n    \tack =true,\n    \tid =msg.id,\n        payload = ""\n    }\n    local mop_wakeup = {\n        M = "c_wakeup",\n        P = {\n            updatecfg = cfg,\n            updatefw = vercfg,\n\t\t\tupdatediag = diag\n        } -- 荷载\n    }\n\twakeup_req.payload = json.encode(mop_wakeup)\n  \tlog.debug("fs_node:deal_mop_wakeup=%s", json.encode(wakeup_req))\n\tlocal ok,ack=ctx:ssend(wakeup_req,3000)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend	INLINE	2018-12-11 10:05:23.175+08	2019-03-08 16:10:16.91+08	2018-12-11	\N
704e425c-1cba-4a1a-bae9-890acc58f5be	sadf	\N		sadf	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	f	06ca49bb-db4a-4d41-8b3d-ae74c93d9425	Lua	sadfsadfsd	INLINE	2018-03-12 17:56:17.191+08	2018-03-12 17:56:17.191+08	2018-03-12	\N
45e683e6-d49b-4b16-af85-607be4509fe5	rion_incl_1510	\N	北京瑞芬星通科技有限公司	1.0	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	f	85ba98a3-b552-4bcf-a736-30b525492481	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "rion_inclination_1510.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x68, endian)\n    buff=iota.appendHexByte(buff, 4, endian)      \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rion_inclination_1510 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rion_inclination_1510 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo) \n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n    --680D0084002010000000050500CB    moduleId=0\n    --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n    log.debug("recv %s, ctx=%s", "rion_inclination_1510.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==28) then  \n\n        local IDX_XDATA = 4    \n        local IDX_YDATA = 7        \n        local IDX_Temp = 10  \n\n        local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n        local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n        local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n        local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n        local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n        local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n        local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n        local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n        local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n        local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n        local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n        local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n        local angleX = xSecondNum + xThirdNum + xForthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum\n        local temp = tSecondNum + tThirdNum + tForthNum\n\n        if (xFirst == 0x01) then    \n            angleX = -angleX\n        end\n\n        if (yFirst == 0x01) then\n            angleY = -angleY\n        end\n\n        if (tFirst == 0x01) then\n            temp = -temp\n        end\n       \n        out.data = {\n           anglex=angleX,\n           angley=angleY,\n           temperature=temp\n        }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "rion_inclination_1510.lua",json.encode(out))\n    return json.encode(out)\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n \n\n\n \n\n	INLINE	2017-09-19 20:14:15.163+08	2018-03-29 10:01:18.164+08	2017-09-17	\N
8f441554-81bd-4922-8de8-a0a215d418aa	设备协议	\N	我的设备协议。	1	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	f	fbdcaf6b-c584-4b3b-8441-a8e1df52bc0f	Lua	import	INLINE	2017-08-31 14:59:11.943+08	2017-08-31 14:59:11.943+08	2017-08-31	\N
4e9edf2e-6c74-4979-91dd-65c1c69ed8f2	我的协议1	\N	我的协议1	1.0	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	e1821687-1231-4e5c-a374-46d31857056d	Lua	{}	INLINE	2018-01-05 17:13:09.757+08	2018-01-05 17:13:09.757+08	2018-01-05	\N
2a81d2b4-3151-429b-b68d-dfbe48b9c6a0	飞尚振弦协议	\N		0.1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	function start()\n  \nend\n	INLINE	2017-10-23 10:42:39.175+08	2018-01-15 10:32:13.618+08	2017-10-23	\N
5379ca6c-1ae1-4730-a1b3-913ac968ef88	jdhs_gas_2512	\N	聚到合盛单个传感器	1.0	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	f	ff0414b7-505b-4d85-bb09-f99bac5262a1	Lua	-- 3e6968606061656135\n \nstart=function()\n    log.debug("load script %s, moduleId=%s", "jdhs_gas_2512.lua", device.props.moduleId or "[nil]")\n  \tlog.debug("jdhs_gas_2512 ctx: %s",json.encode(ctx))\nend\n\nonData=function(hex)\n    log.debug("onData(%s), dev=%s", hex, json.encode(device) )\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode  and string.len(hex)==18 then\n\n        local moduleNo=iota.hexToByte((string.sub(hex, 4,4)..string.sub(hex, 6,6)),0,'B')\n        if tonumber(device.props.moduleId)==moduleNo then\n            local value\n            if (tonumber(string.sub(hex, 16,16))==1) then\n            value=iota.hexToShort((string.sub(hex, 8,8)..string.sub(hex, 10,10)..string.sub(hex, 12,12)..string.sub(hex, 14,14)),0,'B')\n            else\n            value=iota.hexToShort((string.sub(hex, 8,8)..string.sub(hex, 10,10)..string.sub(hex, 12,12)..string.sub(hex, 14,14)),0,'B')*10\n            end\n            out.data = {                --需要测试\n            value = value,\n            }\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("data os %s", resultData)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-11-20 16:10:25.672+08	2018-02-28 18:32:12.19+08	2017-11-20	\N
c1fb3383-b4c2-40e5-a73b-d27267e2384c	lywh__8002	\N	多通道温度采集仪	1.0	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	Lua	 \n --AA55360018072713515930000a0032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF99d8\n --通道1  0.5mm  temperature=1.1℃\n  --通道2  0.06mm  temperature=0.9℃\n   --通道3  38.74mm  temperature=-1.1℃\n    --通道4  655.17mm  temperature=-1.1℃\n    onData=function(hex)\n        log.debug("lywh__8002 收到数据=%s", hex)\n        --log.debug("lywh__8002 device =%s", json.encode(device))\n        local out={\n            data ={},\n            result = {},\n            type=2\n        }\n        local data=hex\n        if string.upper(data)=="3E74696D656375720D0A" then\n           --请求同步服务器时间\n           local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n           local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n           ok=ctx:asend(timeResponse)\n        else\n        \n            local ErrorCode = IsValid(data)\n            if ErrorCode then\n                log.debug('lywh__8002 数据有效=%s',data)\n            \n                local length={}\n                local temp={}\n                local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n                local channelCounts=tonumber(channelCounts_hex,16)\n      \t\t\tlog.debug('lywh__8002 channelCounts=%s',channelCounts)\n                for i=1,channelCounts,1 do\n                   length[i]=iota.hexToShort(data,14+(i-1)*4,'L')\t\n                   temp[i]=iota.hexToShort(data,14+(i-1)*4+2,'L')\n        \t\t\tlog.debug('lywh__8002 i=%s length[i]=%s,temp[i]=%s',i,length[i],temp[i])\n                end\n    \n                local moduleId=device.uplink.props.module\n                --分析单类数据\n                for k,v in ipairs(temp) do\n                    log.debug('lywh__8002 分析单类数据 k=%s,v=%s',k,v)\n                        \n                        local channelId=k\n                        local childDevice=getDeviceInfo(moduleId,channelId) \n                        \n                        if childDevice~=nil then\n                            log.debug('lywh__8002 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n                            local data1 = {\n                                            data={\t\t\t\t\t\t\t\t\t\t\t\n                                                    temperature=temp[k]/10.0,\n                                                    length=length[k]/100.0\n                                                },\n                                            device=childDevice.id,\n                                            type=1                       \n                                            }\n    \n                            table.insert(out.data,data1)\n                        end\t\n                end\n                \n                \n                \n                \n                \n            else\n                out.result = {code = errorcode, msg = errormsg}\n            end\n            local resultData =json.encode(out)\n            ctx:notify(resultData)\n        end\n    end\n    \n    IsValid=function(data)\n        local checkdatalength=string.len(data)/2\n\n        if checkdatalength<14 then\n            errormsg = 'data length is wrong'\n            errorcode = 1001\n            ok=ctx:asend("4552")\n            return false\n        end\n\n\n        local datalength=tonumber(string.sub(data,5,6),16)+tonumber(string.sub(data,7,8),16)*256\n        if datalength+2~=checkdatalength then\n            errormsg = 'data length is wrong'\n            errorcode = 1001\n            ok=ctx:asend("4552")\n            return false\n        end\t\n    \n        if string.upper(string.sub(data,1,4)) ~= 'AA55' then  \n                errormsg = 'Data is Invalid'\n                errorcode = 1001\n            ok=ctx:asend("4552")\n            return false\n        end\n       --累加和校验\n        local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n        local checksum16_Hex=string.format("%04x",checksum16)\n        local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n        log.debug("lywh__8002 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n        if checksum16_Hex~=sum16_Hex then\n            log.debug("lywh__8002 累加和校验失败%s[%s]",sum16_Hex,checksum16_Hex)\n            ok=ctx:asend("4552")  --错误数据返回\n            errormsg = 'Data is Invalid'\n             errorcode = 1001\n            return false\n        end\n        --ok=ctx:asend("4f4b")  --正确数据返回\n        log.debug("lywh__8002 校验通过")\n        return true\n    end\n    --累加和校验\n    function CheckPlusSum(str, startIndex, endIndex)\n        local sum = 0\n        for i = startIndex, endIndex,4 do\n            sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n        end        \n        local result = sum \n        return result\n    end\n    \n    --获取采集仪下面的通道信息\n    getDeviceInfo=function(moduleNoId,channelNoId)\n        if device.dnlinks[1].devices ~=nil then\n            --log.debug("lywh__8002 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n            for index,child in pairs(device.dnlinks[1].devices) do\n                -- log.debug("lywh__8002:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n                 local moduleStrCheck\n                 local channelStrCheck\n                 \n                moduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck=child.uplink.props.channel\n                log.debug("lywh__8002 子设备模块通道 接口获取 m=%s[%s],c=%s[%s] ",moduleStrCheck,moduleNoId,channelStrCheck,channelNoId)\n                \n                 \n                if tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n                   \n                    if tonumber(channelStrCheck)==tonumber(channelNoId) then\n                        log.debug("lywh__8002:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                        return child\n                    end\n    \n                    end\n            end\n        else\n           log.debug("lywh__8002:  subdevices是nil")\n            return nil\n        end\n    end\nStrToHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend \n	INLINE	2018-09-11 11:25:49.222+08	2018-09-26 10:44:34.389+08	2018-09-11	\N
618252ec-97d7-432a-ade1-4dac9223934c	tst_file_transfer	\N		1.0	6c3cbbd8-b774-4955-897d-3333586385c6	6c3cbbd8-b774-4955-897d-3333586385c6	f	6c3cbbd8-b774-4955-897d-3333586385c6	Lua	start = function()\n    log.debug('tst_file_transfer : devices network =%s', json.encode(device))\n    log.debug('tst_file_transfer   get Start ')\nend\n\nonData = function(data)\n    log.debug('tst_file_transfer   解析data ')\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('tst_file_transfer : recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("tst_file_transfer : unsupported file type: %s", data.ext)\n            end\n            if data.ext == '.dat' then\n                --log.debug("tst_file_transfer : recvd content = %s",data.payload)\n                ParseFileDat(data.payload)\n            --else\n            --log.error("tst_file_transfer : unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('tst_file_transfer : content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('tst_file_transfer : recvd content is nil')\n    end\nend\n\nfunction ParseFileDat(dathex)\n    log.debug('tst_file_transfer : dat content  =%s', dathex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex, offset, 'B') + 2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex, offset, 'B')\n        offset = offset + 4\n        log.debug('tst_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n        local floatcount = (string.len(dathex) / 2 - 40) / 4\n        log.debug('tst_file_transfer begin parse')\n        local vols = {}\n        for i = 1, floatcount do\n            offset = 40 + (i - 1) * 4\n            vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n        end\n        log.debug('tst_file_transfer finish parse')\n\n        local rst = {\n            data = {\n                _data_type = 'vib',\n                physicalvalue = vols,\n                sampleFreq = samplefreq,\n                filterFreq = filterfreq,\n                gainAmplifier = gainamplifier,\n                triggerType = triggertype,\n                version = version\n            },\n            device = subdevice.id,\n            type = 1,\n            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n        }\n        table.insert(out.data, rst)\n        log.debug('tst_file_transfer deviceid = %s, cloudvibrate=%s', deviceId, json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug('tst_file_transfer not found device module=%s channel=%s', deviceId, channel)\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('tst_file_transfer : content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M, jsondata.C)\n                if childDevice ~= nil then\n                    --log.debug("tst_file_transfer  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n                    if childDevice.props.sensortype == 'gnss' then\n                        local rst = {\n                            data = {\n                                x = jsondata.RV[1] or 0,\n                                y = jsondata.RV[2] or 0,\n                                z = jsondata.RV[3] or 0\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'zd' then\n                        local rst = {\n                            data = {\n                                ppv = jsondata.RV[1] or 0,\n                                pv = jsondata.RV[2] or 0,\n                                rms = jsondata.RV[3] or 0\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n\n                    if childDevice.props.sensortype == 'gdgs' then\n                        local rst = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n                                physicalvalue = tonumber(string.format('%0.3f', jsondata.PV[1]))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype== 'lf' then\n                        local rst = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n                                length = tonumber(string.format('%0.3f', jsondata.PV[1]))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file_transfer:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'gdgszx' then\n                        local rst = {\n                            data = {\n                                physicalvalue = jsondata.PV[1],\n                                temperature = jsondata.PV[2]\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file_transfer  gdgszx data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'standard485' then\n                        log.debug('tst_file_transfer  standard485=%s', json.encode(childDevice))\n                        local rst = {\n                            data = {\n                                physicalvalue = (jsondata.RV[2])\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file_transfer standard485 data=%s,time=%s', json.encode(rst), rst.time)\n                        table.insert(out.data, rst)\n                    end\n                else\n                    log.debug('tst_file_transfer line=%s childDevice is nil', k)\n                end\n            end\n        end\n    end\n    --log.debug('tst_file_transfer   dataresult=%s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n    log.debug('tst_file_transfer:查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            --判断是否是3层采集仪结构\n            if json.encode(subdevice.dnlinks) ~= '{}' then\n                log.debug("tst_file_transfer  三层结构   二层设备=%s",submodule,json.encode(subdevice))\n                for k, sublink in pairs(subdevice.dnlinks) do\n                    log.debug("tst_file_transfer  sublink=%s",json.encode(sublink))\n                    for u, sub_subdevice in pairs(sublink.devices) do\n                        log.debug("tst_file_transfer  sensor=%s",json.encode(sub_subdevice))\n                        local sensornodeId = sub_subdevice.uplink.props.module\n                        local sensorchannel = sub_subdevice.uplink.props.channel\n                        if tostring(sensornodeId) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n                            log.debug('tst_file_transfer  三层查询 m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n                            return sub_subdevice\n                        else\n                            log.debug("tst_file_transfer  三层查询 m=%s[%s],c=%s[%s]  未匹配",moduleid,sensornodeId,channel,sensorchannel)\n                        end\n                    end\n                end\n            else\n                local submodule = subdevice.uplink.props.module\n                --log.debug('tst_file_transfer 两层查询 m=%s[%s]', moduleid, submodule)\n\n                if tostring(submodule) == tostring(moduleid) then\n                    log.debug('tst_file_transfer  两层查询 m=%s, 匹配到设备=%s', moduleid, json.encode(subdevice))\n\n                    return subdevice\n                else\n                    --log.debug('tst_file_transfer    两层查询 has no device module=%s ,[submodule=%s]', moduleid,  submodule)\n                end\n            end\n        end\n        log.debug('tst_file_transfer  has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('tst_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-08-05 18:13:09.518+08	2019-09-03 15:20:54.445+08	2019-08-05	\N
6b6e7e0d-f078-4725-87c1-11a5a07f2565	jitai_1889	\N		1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1889", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1889 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1889 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1889 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf5, endian)            \n        buff=iota.appendHexByte(buff, 0xf5, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n        --buff=buff..string.format("%02d",moduleNo)\n\t\tlog.debug("jitai_1889 发送采集命令=%s",buff)\n        ok,resp=ctx:ssend(buff,15000)\n\t\t\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,tostring(moduleNo))\n        else\n            log.debug("jitai_1889 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765   \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1889 收到数据=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal phy\n\t\n    local ErrorCode = IsValid(hex,module_str)\n    if ErrorCode then     \n        local index_x=string.sub(hex,3,3)\n        local str_num_x = string.sub(hex,4,8)\n        local num_x=tonumber(str_num_x)\n    \tif index_x=="8" then\n      \t\tnum_x=-1 * num_x\n      \tend\n        \n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1889 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1889 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x  --经过厂家确认  公式带入的是模数\n\t\t\tphy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\tphy=tonumber(string.format("%0.2f",phy))\n\t\tend            \t\t\t\t\n        out.data = {\n\t\t\tlength=phy\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n    log.debug('jitai_1889:开始校验数据%s',data)\n    if data == nil or (string.len(data)/2 ~=4) then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug("jitai_1889 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n        return false\n    end\n    log.debug('jitai_1889:数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-05-31 14:06:55.133+08	2018-11-07 10:44:43.285+08	2018-05-31	\N
9830e7d2-be5b-4676-92da-cd5814982205	HK_Alarm	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	local recordTime\nlocal rkey\nlocal rTokenkey\nstart = function()\n    local req = {\n        type = 'http', --注意 这里不管https还是http都写 http\n        url = '',\n        method = 'post'\n        -- header = {}\n    }\n  \tlog.debug('yinshiyun  iota测试日志')\n    log.debug('yinshiyun  os.time()=%s', os.time())\n    rkey = device.id .. '_endTime'\n    rTokenkey = device.id .. '_token'\n    local rvalue = tonumber(getRedisValue(rkey))\n    local rTokenAndTimeStr=getRedisValue(rTokenkey)\n    log.debug('yinshiyun    rTokenAndTimeStr type=[%s][%s]%s',type(rTokenAndTimeStr),rTokenAndTimeStr==nil,rTokenAndTimeStr)\n    local tokenStr\n    if rTokenAndTimeStr~= nil then\n        local rtt=Split(rTokenAndTimeStr,'===')\n        local tokenExpireTime=tonumber(rtt[2])\n        if tokenExpireTime/1000>(os.time()-3600*24) then --token未过期\n             tokenStr=rtt[1]\n             log.debug('yinshiyun    redis获取[tokenExpireTime=%s]token=%s',tokenExpireTime,tokenStr)\n        else\n            log.debug('yinshiyun    开始获取新token')\n            tokenStr=getNewToken()\n\n        end\n    else\n        tokenStr=getNewToken()\n        log.debug('yinshiyun    rTokenAndTimeStr=%s',rTokenAndTimeStr)\n    end\n\n    if rToken ~= nil then\n        recordTime = tonumber(rvalue)\n    else\n        recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n    end\n\n \n    if rvalue ~= nil then\n        recordTime = tonumber(rvalue)\n    else\n        recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n    end\n    local param = {\n        accessToken = tokenStr,--'at.a6diemkr7z1uw3ax1ok8da21czi5iudv-35zqn4u8a4-0h04249-wrhgenopd',\n        deviceSerial = device.props.deviceSerial,\n        pageSize = 1, -- 只获取一个最新告警\n        pageStart = 0,\n        startTime = tonumber(string.sub(tostring(recordTime),1,-2)),\n         -- 萤石云接口故障，开始时间不能精确到毫秒，不然没有customerInfo\n        endTime = os.time() * 1000,\n        status = 2, -- 告警消息状态：2-所有，1-已读，0-未读，默认为0（未读状态）\n        alarmType = -1 -- 告警类型，默认为-1（全部）\n    }\n    req.url = string.format('https://open.ys7.com/api/lapp/alarm/device/list?accessToken=%s&deviceSerial=%s&pageSize=%s&pageStart=0&startTime=%s&endTime=%s&status=2&alarmType=-1', param.accessToken, param.deviceSerial, param.pageSize, param.startTime, param.endTime)\n\n    log.debug('yinshiyun req=%s', json.encode(req))\n    log.debug('yinshiyun url=%s', req.url)\n    --log.debug('yinshiyun 设备原型=%s', json.encode(device))\n\n    --req.ContentType = 'application/x-www-form-urlencoded'--'application/json'  --'application/x-www-form-urlencoded'\n\n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('yinshiyun    ack==nil')\n    else\n        log.debug('yinshiyun    ok=%s,ack=%s', ok, ack.body)\n    end\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    if not ok or ack == nil then\n        log.debug('yinshiyun    not ok,ack=%s', json.encode(ack))\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            log.debug('yinshiyun ack=%s', ack.body)\n            out.data, dtime = parseAckStr(ack.body)\n            out.time = dtime\n            local alarmmsg = getAlarmMessage(out.data.alarmType)\n            out.result = {\n                code = out.data.alarmType,\n                msg = string.format('产生：%s，查看监控截图：%s', alarmmsg, out.data.alarmPicUrl)\n            }\n        else\n            log.debug('yinshiyun    request data error code=%s body=%s', ack.code, ack.body)\n        end\n    end\n    log.debug('yinshiyun   out=%s', json.encode(out))\n    ctx:done(json.encode(out))\nend\n\nparseAckStr = function(ackDataStr)\n    local resultTable = {}\n    local dataTime\n    local dataTable = json.decode(ackDataStr)\n    local total = dataTable.page.total\n\n    --Sleep(1)\n\n    local rt_data = dataTable.data\n\n    for k, v in ipairs(rt_data) do\n        --log.debug('yinshiyun k=%s, value=%s', k, json.encode(v))\n\n        local alarmDeviceName = v.alarmName\n        local alarmType = v.alarmType\n        local alarmTime = v.alarmTime\n        dataTime = unixtimestampToTime(alarmTime / 1000)\n\n        local isChecked = v.isChecked --是否已读：0-未读，1-已读\n\n        local moduleId = v.deviceSerial --设备序列号\n\n        local alarmPicUrl = v.alarmPicUrl --告警图片地址\n        local customerType = v.customerType --透传设备参数类型  可以看作告警类型，温度报警 or 火点报警    "hightemperature"\n        local customerInfo = v.customerInfo --  "type=1006|preid=0|ruleid=0|temp=23.96C"\n\n        log.debug('yinshiyun  m=%s   告警信息=%s', moduleId, customerInfo)\n\n        local temperature\n\n        if customerType == 'hightemperature' then\n            --温度阈值告警,解析温度\n            local tempindex = string.find(customerInfo, 'temp=') + 5\n            local tempStr = string.sub(customerInfo, tempindex, -2)\n            temperature = tonumber(tempStr)\n        end\n\n        resultTable = {\n            alarmDeviceName = alarmDeviceName,\n            alarmType = alarmType,\n            isChecked = isChecked,\n            alarmPicUrl = alarmPicUrl,\n            customerType = customerType,\n            temperature = temperature,\n            customerInfo = customerInfo\n            --recordTime=recordTime,\n            --endTime=os.time()*1000\n        }\n\n        --time = timenow\n\n        --更新endTime\n        if alarmTime > recordTime then\n            setRedisValue(rkey, alarmTime)\n        else\n            log.debug('yinshiyun redis不更新 ')\n        end\n    end\n    log.debug('yinshiyun   resultTable=%s', json.encode(resultTable))\n    return resultTable, dataTime\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid, channel)\n    --log.debug("yinshiyun   查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        --log.debug("yinshiyun   查询 节点层 设备device=%s",json.encode(subdevices))\n\n        for i, link in pairs(device.dnlinks) do\n            --log.debug("yinshiyun   link=%s",json.encode(link))\n            for j, node in pairs(link.devices) do\n                --log.debug("yinshiyun  node=%s",json.encode(node))\n                --log.debug("yinshiyun  模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n                local moduleNo = node.uplink.props.module\n                if moduleNo == tostring(moduleid) then\n                    for k, sublink in pairs(node.dnlinks) do\n                        --log.debug("yinshiyun  sublink=%s",json.encode(sublink))\n                        for u, subdevice in pairs(sublink.devices) do\n                            --log.debug("yinshiyun  sensor=%s",json.encode(subdevice))\n\n                            if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                                log.debug('yinshiyun    m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n\n                                return subdevice\n                            end\n                        end\n                    end\n                end\n            end\n        end\n\n        --log.debug("yinshiyun has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("yinshiyun has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\nunixtimestampToTime = function(timenum)\n    --log.debug('yinshiyun timenum=%s', timenum)\n    local unixtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('yinshiyun recordTime=%s', recordTime)\n    return unixtime\nend\n\ngetRedisValue = function(redisKey)\n    local redisValue\n\n    local r1, r1ok = redis.get(redisKey) --获取上次记录时间\n    log.debug('yinshiyun r1=%s,r1ok=%s', r1, r1ok)\n    if r1ok and r1 ~= nil then\n        redisValue = r1\n       log.debug('yinshiyun r1=%s,r1ok=%s, get redisValue[%s]=%s', r1, r1ok, redisKey,redisValue)\n    end\n    return redisValue\nend\n\nsetRedisValue = function(redisKey, redisValue)\n    local r1, r1ok = redis.set(redisKey, tostring(redisValue))\n    log.debug('yinshiyun   r1=%s,r1ok=%s, set redisValue=%s', r1, r1ok, redisValue)\nend\n\ngetAlarmMessage = function(code)\n    local msg = {\n        [10037] = '温度过高告警',\n        [10038] = '温度过低告警',\n        [10039] = '温度过高告警',\n        [10040] = '温度过低告警'\n    }\n\n    return msg[code]\nend\n\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ngetNewToken=function()\n    local newToken\n    local req_token = {\n        type = 'http', \n        url = '',\n        method = 'post'\n        -- header = {}\n    }\n    local param_token = {\n        appKey = '5d16a667e1c2423d9d0d634f781810b4',\n        appSecret = '0cc4e1ec4e6a53ea3dabeb09cd5f468b'\n       \n    }\n    req_token.url = string.format('https://open.ys7.com/api/lapp/token/get?appKey=%s&appSecret=%s', param_token.appKey, param_token.appSecret)\n\n    log.debug('yinshiyun url=%s', req_token.url)\n    local ok, ack = ctx:ssend(req_token, 4000)\n\n    if ack.code == 200 and ack.body ~= '' then -- http应答\n        log.debug('yinshiyun  ackBody_token=%s', ack.body)\n        local dataTable = json.decode(ack.body)\n        newToken = dataTable.data.accessToken\n        local newTokenAndExpireTime=string.format("%s===%s",newToken,dataTable.data.expireTime)\n        setRedisValue(rTokenkey, newTokenAndExpireTime)--记录新的newToken===ExpireTime\n\n    else\n        log.debug('yinshiyun    request token error code=%s body=%s', ack.code, ack.body)\n    end\n\n\n    log.debug('yinshiyun    newToken=%s', newToken)\n    return newToken\nend	INLINE	2020-04-01 09:56:11.094+08	2020-04-15 13:43:29.647+08	2020-04-01	\N
0a4cfb69-6284-4d4c-946f-994b662579b0	shutaisuoying	\N	这个协议是根据索引这个对照关系写的	1.0	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	Lua	start = function()\n    --ctx:asend('010203')\n    log.debug('shutaisuoying  device=%s', json.encode(device))\nend\n\nonData = function(hex,index)\n    log.debug('shutaisuoying  hex=%s[%s] type(index)=[%s]', hex, index, type(index))\n    if index == 2 then\n        ok = ctx:asend('670d0a') --"g/n/r"  DT运行当前工作计划\n        ctx:sleep(1)\n        ok = ctx:asend('2f682f6e2f632f752f442f542f4e0d0a') --"/H/n/r"  DT 按照指定格式 上报数据\n        ctx:sleep(1)\n        ok = ctx:asend('7032323d34340d0a')\n  \t\tctx:sleep(1)\n        ok = ctx:asend('5031313d35303020200d0a')\n   \t\tctx:sleep(1)\n        ok = ctx:asend('5031353d330d0a')\n \t\tctx:sleep(1)\n        ok = ctx:asend('5031373d350d0a')\n  \n    end\n   log.debug("shutaisuoying  device =%s", json.encode(device))\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --log.debug('shutaisuoying  device=%s', json.encode(device))\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local sData = HextoStr(hex) --将16码流转化成转化成字符串\n        log.debug('shutaisuoying  111111sData= %s', sData)\n    \n        local sArray = Split(sData, ',') --以空格分割后得到的table表\n        log.debug('shutaisuoying  sArray=%s', json.encode(sArray))\n        local datastr  = sArray[2] --取出带Date 的数据\n        local timestr = sArray[4] --取出time\n\t\tlocal timenowstr=datastr .. timestr\n\t\tlog.debug('shutaisuoying  timenowstr=%s', timenowstr)\n\t\tlocal timenow = unixtimestamp(timenowstr)\n\n        \n\n        --[[local devicesdata = device.dnlinks[1].devices\n        log.debug('shutaisuoying  devicesdata=%s', json.encode(devicesdata))\n        local devicesdatas = device\n        log.debug('shutaisuoying  devicesdatas=%s', json.encode(devicesdatas))]]--\n\n        for index, childDevice in pairs(device.dnlinks[1].devices) do\n            --log.debug('shutaisuoying  遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n            --土壤水分传感器   --0:144.8|3:279.7|6:365.9|9:531.5|12:663.2|15:874.9     DTC-SD\n            if childDevice.deviceMetaId == '005826c9-dd60-4013-99bc-da28bc0d9c93' then\n                local channelStrCheck = childDevice.uplink.props.channel\n\n                local bb = type(channelStrCheck)\n\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --电压值的通道\n\n                    local suydata = tonumber(sArray[tonumber(suy) + 4]) --电压值\n                    local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n\n                    if formulaId == '3207c7a3-db9b-40cf-ab1b-6949a3122239' then\n                        local dataAreaSample = childDevice.uplink.capabilities[1].formula.props.dataArea\n                        local physicalvalue = getCalcuData(dataAreaSample,suydata)\n                        local data1 = {\n                            data = {\n                                voltage_ratio = tonumber(string.format("%0.3f",suydata)),\n                                physicalvalue = tonumber(string.format("%0.3f",physicalvalue))\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        table.insert(out.data, data1)\n                    end\n                end\n            end\n\n            --水稳应变计   ---   公式  K*(X-X0)+K1*(Y-Y0)      DTC-YB-C\n            if childDevice.deviceMetaId == 'f29e4bb2-0e42-4016-b27e-f2377c115ff1' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压比的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local KK = type(K)\n                    log.debug('shutaisuoying  KK=%s', KK)\n                    log.debug('shutaisuoying  K=%s', K)\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local K1K1 = type(K1)\n                    log.debug('shutaisuoying  K1K1=%s', K1K1)\n                    log.debug('shutaisuoying  K1=%s', K1)\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local X0X0 = type(X0)\n                    log.debug('shutaisuoying  X0X0=%s', X0X0)\n                    log.debug('shutaisuoying  X0=%s', X0)\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n                    local Y0Y0 = type(Y0)\n                    log.debug('shutaisuoying  Y0Y0=%s', Y0Y0)\n                    log.debug('shutaisuoying  Y0=%s', Y0)\n                    local Temperature = 0\n                    local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n                    log.debug('shutaisuoying  最后物理量Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = Temperature,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local suy = relatedChannel[1] --这个是电压比的通道值\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    local suyn = relatedChannel[2] --这个是温度值的通道值\n                    log.debug('shutaisuoying  suyn=%s', suyn)\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n                    log.debug('shutaisuoying  suydatatem=%s', suydatatem)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n                    local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = suydatatem,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --竖向应变计   ---   公式  K*(X-X0)+K1*(Y-Y0)     DTC-YB-AV\n            if childDevice.deviceMetaId == 'f535897b-dc69-4835-b0d7-b4a6062db938' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压比的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local KK = type(K)\n                    log.debug('shutaisuoying  KK=%s', KK)\n                    log.debug('shutaisuoying  K=%s', K)\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local K1K1 = type(K1)\n                    log.debug('shutaisuoying  K1K1=%s', K1K1)\n                    log.debug('shutaisuoying  K1=%s', K1)\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local X0X0 = type(X0)\n                    log.debug('shutaisuoying  X0X0=%s', X0X0)\n                    log.debug('shutaisuoying  X0=%s', X0)\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n                    local Y0Y0 = type(Y0)\n                    log.debug('shutaisuoying  Y0Y0=%s', Y0Y0)\n                    log.debug('shutaisuoying  Y0=%s', Y0)\n                    local Temperature = 0\n                    local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n                    log.debug('shutaisuoying  最后物理量Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = Temperature,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local suy = relatedChannel[1] --这个是电压比的通道值\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    local suyn = relatedChannel[2] --这个是温度值的通道值\n                    log.debug('shutaisuoying  suyn=%s', suyn)\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n                    log.debug('shutaisuoying  suydatatem=%s', suydatatem)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n                    local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = suydatatem,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --沥青应变计   ---   公式  K*(X-X0)+K1*(Y-Y0)     DTC-YB-A\n            if childDevice.deviceMetaId == '5102e0bc-4778-43b6-80d3-fd71e4032088' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压比的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local KK = type(K)\n                    log.debug('shutaisuoying  KK=%s', KK)\n                    log.debug('shutaisuoying  K=%s', K)\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local K1K1 = type(K1)\n                    log.debug('shutaisuoying  K1K1=%s', K1K1)\n                    log.debug('shutaisuoying  K1=%s', K1)\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local X0X0 = type(X0)\n                    log.debug('shutaisuoying  X0X0=%s', X0X0)\n                    log.debug('shutaisuoying  X0=%s', X0)\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n                    local Y0Y0 = type(Y0)\n                    log.debug('shutaisuoying  Y0Y0=%s', Y0Y0)\n                    log.debug('shutaisuoying  Y0=%s', Y0)\n                    local Temperature = 0\n                    local Phy = K * (suydata - X0) + K1 * (Temperature - Y0) --最后的物理量\n                    log.debug('shutaisuoying  最后物理量Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = Temperature,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local suy = relatedChannel[1] --这个是电压比的通道值\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    local suyn = relatedChannel[2] --这个是温度值的通道值\n                    log.debug('shutaisuoying  suyn=%s', suyn)\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压比\n                    local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n                    log.debug('shutaisuoying  suydatatem=%s', suydatatem)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n                    local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            temperature = suydatatem,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --温度计   --没有公式      DTC-WD\n            if childDevice.deviceMetaId == '50fc0df9-2b02-445b-b04e-17209e8c69ee' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是温度值的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local physicalvalue = sArray[tonumber(suy) + 4] --这个是温度值\n                    log.debug('shutaisuoying  physicalvalue=%s', physicalvalue)\n\n                    local data1 = {\n                        data = {\n                            physicalvalue = physicalvalue\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n\n            ---分割线\n            end\n\n            --多点沉降计   --K*(X-X0)     DTC-SYL\n            if childDevice.deviceMetaId == '8392cdb0-52c7-4fee-8ace-a64e5cf86240' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压比的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压比初值\n                    local Phy = K * (suydata - X0) --最后的物理量\n\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n\n            ---分割线\n            end\n\n            --裂缝计   --K*(X^2-X0^2)/1000     DTC-LF\n            if childDevice.deviceMetaId == 'd756ead6-3c0a-4d1e-be3f-dde6e031a048' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是频率的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是频率值\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n                    local Phy = K * (suydata ^ 2 - X0 ^ 2) / 1000\n                    --最后的物理量\n                    local data1 = {\n                        data = {\n                            frequency = suydata,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --倾角计   --K*(X-X0)/1000     DTC-QJ\n            if childDevice.deviceMetaId == 'fe3a614d-329c-4b70-99ff-f95ccb28ab79' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压比的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 电压初值\n                    local Phy = K * (suydata - X0) / 1000\n                    --最后的物理量\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --土压力计   --K*(X-4)     DTC-TYL-I\n            if childDevice.deviceMetaId == 'f7374ca5-78cb-4578-bfe3-df32eb350d05' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电流的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电流值\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    log.debug('shutaisuoying  K=%s', K)\n                    local Phy = K * (suy - 4)\n                    log.debug('shutaisuoying  Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n            --土压力计   ---   公式  K*((X^2)/1000-X0)+K1*(Y-Y0)      DTC-TYL-FW\n            if childDevice.deviceMetaId == '37bc2c29-264c-4366-8fe1-9c2984702b94' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是频率的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是频率值\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n\n                    log.debug('shutaisuoying  K=%s', K)\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\n                    log.debug('shutaisuoying  K1=%s', K1)\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n\n                    log.debug('shutaisuoying  X0=%s', X0)\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n                    log.debug('shutaisuoying  Y0=%s', Y0)\n                    ---   公式  K*((X^2)/1000-X0)+K1*(Y-Y0)\n                    local Temperature = 0\n                    local Phy = K * (suydata ^ 2 / 1000 - X0) + K1 * (Temperature - Y0) --最后的物理量\n                    log.debug('shutaisuoying  最后物理量Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            frequency = suydata,\n                            temperature = Temperature,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local suy = relatedChannel[1] --这个是频率的通道值\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    local suyn = relatedChannel[2] --这个是温度值的通道值\n                    log.debug('shutaisuoying  suyn=%s', suyn)\n                    local suydata = sArray[tonumber(suy) + 4] --这个是频率\n                    local suydatatem = sArray[tonumber(suyn) + 4] --这个是温度值\n                    log.debug('shutaisuoying  suydatatem=%s', suydatatem)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0 -- 频率初值\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0 -- 温度初值\n\n                    local Phy = K * (suydata - X0) + K1 * (suydatatem - Y0) --最后的物理量\n\n                    local data1 = {\n                        data = {\n                            frequency = suydata,\n                            temperature = suydatatem,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n            -------\n\t\t\t\n\t\t\t--DT湿度传感器   --Kx     DT-WSD\n            if childDevice.deviceMetaId == '97078fa2-e944-487b-8913-e3c2c33c6ff0' then\n                local channelStrCheck = childDevice.uplink.props.channel\n                log.debug('shutaisuoying  子设备模块通道 接口获取 c=%s ', channelStrCheck)\n                local bb = type(channelStrCheck)\n                log.debug('shutaisuoying  得到通道数据的类型 bb=%s ', bb)\n                local relatedChannel = Split(channelStrCheck, ',') --这个是多个所有组成的字符串\n                log.debug('shutaisuoying  relatedChannel=%s', json.encode(relatedChannel))\n\n                local tableleg = table_leng(relatedChannel) --获取table的长度\n                log.debug('shutaisuoying  tableleg=%s', tableleg)\n                if tableleg == 1 then --这是对方通道只写一个值时走的方法\n                    local suy = relatedChannel[1] --这个是电压的通道\n                    log.debug('shutaisuoying  suy=%s', suy)\n                    log.debug('shutaisuoying  这个是数据表sArray=%s', json.encode(sArray))\n                    local suydata = sArray[tonumber(suy) + 4] --这个是电压值\n                    log.debug('shutaisuoying  suydata=%s', suydata)\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    log.debug('shutaisuoying  K=%s', K)\n                    local Phy = K*suydata\n                    log.debug('shutaisuoying  Phy=%s', Phy)\n                    local data1 = {\n                        data = {\n                            voltage_ratio = suydata,\n                            physicalvalue = Phy\n                        },\n                        device = childDevice.id,\n                        time = timenow,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n\n           \n        end\n    --else\n        --ok = ctx:asend('2f682f6e2f632f752f442f542f4e0a7032323d34340a5031313d35303020200a5031353d330a5031373d350a') --"/H/n/r"  DT 按照指定格式 上报数据\n        --out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('shutaisuoying  resultData=%s,hex=%s', json.encode(out), hex)\n    ctx:notify(resultData)\nend\n\ngetCalcuData = function(dataAreaSample,suydata)\n    local dots = getDataAreasSamle(dataAreaSample)\n    local Phy\n    for index, value in ipairs(dots) do\n        local humi = value.humidity\n        local volt = value.voltage\n        local next_humi\n        local next_volt\n        local nextIsValid = false\n        if index < #dots then\n            nextIsValid = true\n            next_humi = dots[index + 1].humidity\n            next_volt = dots[index + 1].voltage\n        end\n\n        if suydata < volt then\n            Phy = humi\n            break\n        elseif nextIsValid and volt < suydata and suydata < next_volt then\n            local k = (next_humi - humi) / (next_volt - volt)\n            Phy = k * (suydata - volt) + humi\n            break\n        elseif not nextIsValid then\n            Phy = humi\n            break\n        end\n    end\n    return Phy\nend\n\ngetDataAreasSamle = function(strFormulaParas)\n    local dataArea_paras = {}\n    local formula_paras = Split(strFormulaParas, '|')\n    for i = 1, #formula_paras, 1 do\n        local str_point_coordinates = formula_paras[i]\n        local dt_point_coordinates = Split(str_point_coordinates, ':')\n        local dataArea_para = {}\n        dataArea_para['humidity'] = tonumber(dt_point_coordinates[1])\n        dataArea_para['voltage'] = tonumber(dt_point_coordinates[2])\n        dataArea_paras[i] = dataArea_para\n    end\n    return dataArea_paras\nend\n\nIsValid = function(alldata)\n    log.debug('shutaisuoying  校验开始')\n    if string.len(alldata) < 10 then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n        return false\n    end\n\n    if string.sub(alldata, 1, 8) ~= '44617465' then\n        errormsg = 'allData header is invalid'\n        errcode = 1001\n        return false\n    end\n\n    log.debug('shutaisuoying  校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nunixtimestamp = function(datestr)\n  \n    local year = tonumber(string.sub(datestr,7,10))\n    local month = tonumber(string.sub(datestr,4,5))\n    local day = tonumber(string.sub(datestr,1,2))\n    local hour = tonumber(string.sub(datestr,11,12))\n    local minute = tonumber(string.sub(datestr,14,15))\n    local second = tonumber(string.sub(datestr,17,18))\n    --log.debug("shutaisuoying year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("shutaisuoying timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("shutaisuoying recordTime=%s",recordTime)\n    return recordTime\nend\n	INLINE	2020-01-06 09:19:19.445+08	2021-01-28 13:42:33.549+08	2020-01-06	\N
34770cf0-cf46-4ba9-870d-5c2e73ffe8ac	lrk622	\N		1.0	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	f	bfe504c8-b84a-43ec-831a-5ce698db9950	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("lrk622: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    --log.debug("lrk622: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\n    local sData= HextoStr(hex)\n    log.debug("lrk622: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],';END')\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t --log.debug("lrk622: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\t--log.debug("lrk622: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("lrk622: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1))   \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n         log.debug('lrk622  childDevice=%s',json.encode(childDevice))  \n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temperature-T0)\n\t\t\t\tend            \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("lrk622:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('lrk622  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif  type_sensor=='CX' then\n\t\t\t--log.debug('lrk622  Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t        local cexieData=Split(cexie[2],',')\n\t\t\t--log.debug('lrk622   cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\t--log.debug('lrk622   模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+4)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\t--log.debug('lrk622   测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\t--log.debug('lrk622:子设备原形childDevice=%s', json.encode(childDevice))\n\n           \n                    local data1 = {\n                        data = {\n                           physicalvalue=physicalvalue\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n               \n               \n\t\t\t\telse\n\t\t\t\t\tlog.debug('lrk622  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t    end \n\tend \n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("lrk622: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal returnTime=device.props.returnTime\n\tlocal unitType=device.props.unitType\n\tlocal ceMoudle=device.props.ceMoudle\n  \tlocal cmd ='$LRKKJ$;ZX_HC:' .. returnTime .. ';CX_LX:' .. unitType .. ';CX_SN:' .. ceMoudle .. ';END'\n\t--log.debug("lrk622: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("lrk622:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2019-11-21 10:20:42.833+08	2020-06-12 12:54:15.923+08	2019-11-21	\N
2993963e-1c39-4e49-b5a2-b8349d634fc2	httpserverl	\N		1.0	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	f	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	Lua	\nstart = function()\n    log.debug('httpserverl   device=%s', json.encode(device))\n\tlog.debug('httpserverl   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpserverl [%s] 1111111111111moduleNo', tonumber(moduleNo))\n    log.debug('httpser222222', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n    --local id = httpbody.ID\n    --log.debug('httpserverl  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    --bodydataStr=string.gsub(bodydataStr,',{}',"")\n    log.debug('httpserverl [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tlog.debug('httpserverl [%s] 打印bodypkg1111=%s', json.encode(bodypkg))\n\t--这里1\n\t--if next(bodypkg) == nil then \n\t--ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t--ctx:asend(ack)\t\n\t--return\n\t--end \n\t--这里1\n\tlog.debug('httpserverl  count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpserverl [%s] count 11111111长度', count)\n     count = count + 1\n\t end\n\t log.debug('httpserverl [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal timeStamps=bodypkg['timeStamp']\n\tlog.debug('httpserverl [%s] 时间戳5555555imeStamps', tonumber(timeStamps))\n    local monitorIds = bodypkg['monitorId'] --监测点ID 监测位置点       int\n\tlog.debug('httpserverl [%s] 监测点ID 监测位置点666666666monitorIds', bodypkg['monitorId'])\n    local trainXOffsets = bodypkg['trainXOffset']--轨道X方向偏移值   float    \n\tlog.debug('httpserverl [%s] 轨道X方向偏移值7777777trainXOffsets', bodypkg['trainXOffset'])\t\n\tlocal trainYOffsets = bodypkg['trainYOffset']--//轨道Y方向偏移值   float \n\tlog.debug('httpserverl [%s] 轨道Y方向偏移值88888888trainYOffsets', trainYOffsets)\n\tlocal trainZOffsets= bodypkg['trainZOffset']  --轨道Z方向偏移值     float \n\tlog.debug('httpserverl [%s] 轨道Z方向偏移值99999999trainZOffsets', trainZOffsets)\n\t--local roadbedOffsets = bodypkg['roadbedOffset']  --/路基沉降值       float\n\t--log.debug('httpserverl [%s] 路基沉降值101010101010roadbedOffsets', roadbedOffsets)\n\t\n\tlog.debug('httpserverl [%s] timeStamps', bodypkg['timeStamp'])\n\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do\n                local deviceId = child.id\n                local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                local devceChannelNo = tonumber(child.uplink.props.channel)\n\n                local data1 = {\n                    data = {},\n                    device = deviceId,\n                    type = 1\n                }\n                if tonumber(monitorIds)==devceChannelNo then\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlocal app=tonumber(trainXOffsets)\n\t\t\t\t\t\t\t\t\t\tlog.debug('httpserverl [%s] app', roadbedOffsets)\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t       data1.data.trainXOffsets=tonumber(trainXOffsets) --轨道X方向偏移值\n\t\t\t\t\t   data1.data.trainYOffsets=tonumber(trainYOffsets)\t--轨道Y方向偏移值\n\t\t\t\t\t   data1.data.trainZOffsets=tonumber(trainZOffsets)\t--轨道Z方向偏移值 \n\t\t\t\t\t   --data1.data.roadbedOffsets=tonumber(roadbedOffsets)  --路基沉降值\n\t\t\t\t\t   end\n\t\t\t\t\t   \n\t\t\t\ttable.insert(out.data, data1)\n \n            end\n        end\n\n        \n\n        log.debug('httpserverl [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend\n\n	INLINE	2019-08-07 09:14:15.685+08	2020-01-16 16:49:16.858+08	2019-08-07	\N
ee31c052-3056-4021-aaa5-3f0caa4d73ee	nengh_weather_2401	\N	农田气象站	1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "nengh_weather_2401.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 0, endian) \n    buff=iota.appendHexWord(buff, 0x0e, endian) \n    buff=iota.appendHexCrc(buff, endian ,0)\n  \n    local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n    buff=string.sub(buff,1,12)\n    buff=buff..crcH\n    buff=buff..crcL \n   \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    --08042804b9032a0bd6ffdf00240106001300690321211200230019002500460000\n    -- moduleId=8\n    --"azimuthofWind": 105,\n\t--"evaporation": 7,\n\t--"humi": 3.6,\n\t--"illumination": 35,\n\t--"pressure": 26.200000000000003,\n\t--"radiation": 8466,\n\t--"rainFall": 80.10000000000001,\n\t--"soilHum": 0.37,\n\t--"soilTemp": 0.25,\n\t--"speedofWind": 1.9000000000000001,\n\t--"temp": -3.3000000000000003\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==66) then\n        \n        local IDX_SPEED_WIND = 15  --风速\n        local IDX_AZIMUTH = 17   --风向\n        local IDX_Humidity = 11;    --湿度\n        local IDX_Temp = 9        --温度\n        local IDX_Pressure = 13    --气压\n        local IDX_RainFall = 19   --雨量\n        local IDX_Radiation = 21 --总辐射\n        local IDX_Illumination = 23 --照度\n        local IDX_SoilTemp = 25    --土壤温度\n        local IDX_SoilHumidity = 27 --土壤湿度\n        local IDX_Evaporation = 29  --蒸发\n\n\n        local humi = bit:_or(bit:_lshift(iota.hexToByte(hex,IDX_Humidity,'B'), 8) , (iota.hexToByte(hex,IDX_Humidity+1,'B'))) * 0.1\n        local sign = 1\n        local temp\n        local byTemp0 = iota.hexToByte(hex,IDX_Temp,'B')\n        local byTemp1 = iota.hexToByte(hex,IDX_Temp+1,'B')\n        if (byTemp0 >= 0x80)then\n            sign = -1\n            temp = (0xffff - bit:_or(bit:_lshift(bit:_and(byTemp0 , 0xffff) , 8) , byTemp1) + 1) * sign * 0.1       \n        else\n            temp = bit:_or(bit:_lshift(byTemp0 , 8) , byTemp1) * 0.1\n        end \n        local pressure = iota.hexToShort(hex, IDX_Pressure,'B') * 0.1\n        local speedofWind = iota.hexToShort(hex, IDX_SPEED_WIND,'B') * 0.1\n        local azimuthofWind = iota.hexToShort(hex, IDX_AZIMUTH,'B')\n        local rainFall = iota.hexToShort(hex, IDX_RainFall,'B') * 0.1\n        local radiation = iota.hexToShort(hex, IDX_Radiation,'B')\n        local illumination =iota.hexToShort(hex, IDX_Illumination,'B')\n        local soilTemp\n        local bysoilTemp0 = iota.hexToByte(hex,IDX_SoilTemp,'B')\n        local bysoilTemp1 = iota.hexToByte(hex,IDX_SoilTemp+1,'B')\n        if (bysoilTemp0 >= 0x80) then\n            sign = -1\n            soilTemp = (0xffff - bit:_or(bit:_lshift(bit:_and(bysoilTemp0, 0xffff), 8) ,bysoilTemp1) + 1) * sign * 0.01\n        else\n            soilTemp = bit:_or(bit:_lshift(bysoilTemp0 , 8) , bysoilTemp1) * 0.01\n        end\n        local soilHum = iota.hexToShort(hex, IDX_SoilHumidity,'B') * 0.01\n        local evaporation = iota.hexToShort(hex, IDX_Evaporation,'B') * 0.1 \n\n        out.data = {\n           temp=temp,\n           humi=humi,\n           pressure=pressure,\n           speedofWind=speedofWind,\n           azimuthofWind=azimuthofWind,\n           rainFall=rainFall,\n           radiation=radiation,\n           illumination=illumination,\n           soilTemp=soilTemp,\n           soilHum=soilHum,\n           evaporation=evaporation\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\n \n\n\n \n\n	INLINE	2017-09-16 16:02:21.189+08	2018-02-28 18:32:12.191+08	2017-09-16	\N
fe8171d5-8793-470f-a5b3-83825b6fa00f	snmp协议	\N	snmp采集数据	1.0.1	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	e1821687-1231-4e5c-a374-46d31857056d	Lua	walk()	INLINE	2018-01-08 09:39:53.578+08	2018-01-08 09:39:53.578+08	2018-01-08	\N
da0e74fc-336f-44bf-96a7-085b2e279d7a	abc1101	\N		1101	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "fs_1101.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,500)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 2 设备类型，温湿度=1\n\tbuff=iota.appendHexWord(buff, device.props.moduleId, BE);  -- 2: 3/4 模块号\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 7 指令\n\tfor i = 8,30 do                                 -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n  \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc          -- 1: 31 CRC8  加总异或，2-30\n  log.debug('CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF);             -- 1: 32 结尾\n\tlog.debug("start %s, ctx=%s ", "fs_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC0000000000000000000000000000000000005EDF  \n--temp=25.5 Hum=0.85\nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local startbyte = iota.hexToByte(data, 0,'B');\n  local devicetype = iota.hexToByte(data, 1,'B');\n  local endbyte = iota.hexToByte(data, 31,'B');\t\n\tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte  ~= 0xDF or string.len(data)/2 ~=32 then\n\t\t\n    log.debug("数据无效")\n    local message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\t\t\t\t\n\telse\n    log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t--data = string.sub(data, DAC_HEAD_STR_LEN + 1);\n\t\t\t\t\n\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n        log.debug("humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n    log.debug("humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n    log.debug("temp等于:%s",temp)\n\t\t--return 0,{temp,hum,},{},{};\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum,\n\t\t};\n\tend\n\t return json.encode(out)\nend\n\n\nfunction checkCRC8(val,start)\n    local CRC8Table ={\n            0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n            157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n            35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n            190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n            70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n            219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n            101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n            248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n            140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n            17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n            175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n            50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n            202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n            87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n            233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n            116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n        }\n    local c = 0\n    for  i = start, string.len(val)/2 do\n        local b = iota.hexToByte(val,i-1,'B')\n        local index = bit:_xor(c,b)\n        c = CRC8Table[index+1];\n    end\n    local crc8 = string.format("%X",c)\n    return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n\n	INLINE	2017-11-09 11:04:48.037+08	2018-02-28 18:32:12.201+08	2017-11-08	\N
343ae175-f499-4292-8877-7f574c552f67	nawei_liquid_1	\N	静力水准仪带温度	1.0	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	f	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	Lua	start=function()\n\tlog.debug("load script %s, moduleId=%s", "nawei_liquid_1", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t--01 04 00 00 00 04 F1 C9\n\tlocal moduleNo=device.uplink.props.module \t\t\n\tlog.debug("nawei_liquid_1 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n    buff=iota.appendHexByte(buff, 0x04, endian)            \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n    buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n    buff=iota.appendHexCrc(buff, 'L' ,0) \n    log.debug("nawei_liquid_1 send data: %s  ",buff)           \n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n        result = unmarshall(resp)\n    else\n        log.debug("nawei_liquid_1 SSend error!")\n    end\n    ctx:done(result)\nend\n\n--01 04 08 42 C8 00 00 41 C8 00 00 7D EA\n--moduleId=1   \n--"length"=100\n--"temperature": 25\n\nunmarshall=function(hex)\n    log.debug("nawei_liquid_1 recieve data: %s  ",hex) \n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n        local length = iota.hexToFloat(hex,3,'B')  \n        local temperature = iota.hexToFloat(hex,7,'B')      \n        out.data = {\n            length=length,\n            --temperature=temperature\n\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('nawei_liquid_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'nawei_liquid_1 Hex CMD False ' \n        return false\n    end\n    if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'nawei_liquid_1 Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    local crcData=string.sub(data,1,-5)\n    crcData=iota.appendHexCrc(crcData, 'L' ,0)\n    --if icrcData ~= data then\n        --errcode = 1001\n        --errormsg = 'nawei_liquid_1 crc False' \n        --return false\n    --end\n    log.debug('nawei_liquid_1 数据校验通过')\n    return true\nend\n\n\n\t\n   \n\n\n	INLINE	2018-07-02 14:27:46.078+08	2018-07-03 11:05:32.754+08	2018-07-02	\N
13cc59b8-9b01-4cef-88c9-40d4d9b3d798	fshs_pressure_19000	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "fshs_pressure_19000.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x06, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fshs_pressure_19000,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("fshs_pressure_19000  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fshs_pressure_19000 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,11,'B')\n    \n        out.data = {           \n            pressure=pressure,\n\t\t\ttemperature\t=temperature\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fshs_pressure_19000 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-08-10 14:51:00.255+08	2018-08-10 14:51:00.255+08	2018-08-10	\N
89d5e195-c719-48a0-8e7b-9807f8815e03	BGK_4000	\N		1.0	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	f	224e0fc3-9311-4c4a-839d-d0363ece2ab4	Lua	--//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    if subdevices ~= nil then\n        log.debug('BGK_4000:LUA:subdevices : data is =%s', json.encode(subdevices))\n        for index, child in pairs(subdevices) do\n            if json.encode(device.uplink.props) ~= 'null' then\n                moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                channelNo = tonumber(child.uplink.props.channel)\n                log.debug('BGK_4000 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n            else\n                moduleNo = child.props.moduleId\n                channelNo = child.props.channelId\n                log.debug('BGK_4000 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n            end\n\n            log.debug('BGK_4000:模块%s通道%s的deviceId是%s：', moduleNo, channelNo, tostring(child.id))\n            --log.debug("BGK_4000:子通道设备原型child=%s",json.encode(child))\n            local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n            log.debug('BGK_4000:模块%s通道%s的cmdstr是：%s', moduleNo, channelNo, cmdstr)\n            local lcr_str = LCR(cmdstr)\n            lcr_str = string.upper(lcr_str)\n             --转大写字符\n            log.debug('BGK_4000:模块%s通道%s的lcr_str是：%s', moduleNo, channelNo, lcr_str)\n            local request_asciiStr = ':' .. cmdstr .. lcr_str\n            log.debug('BGK_4000:模块%s通道%s的request_asciiStr是：%s', moduleNo, channelNo, request_asciiStr)\n            local buff = toHexStr(request_asciiStr)\n            buff = iota.appendHexByte(buff, 0x0d, endian)\n            buff = iota.appendHexByte(buff, 0x0a, endian)\n            ok, resp = ctx:ssend(buff, 15000)\n            local result = '{}'\n            if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n                log.debug('BGK_4000:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n                result = unmarshall(resp, child, moduleNo, channelNo)\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('BGK_4000:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n            end\n        end\n    else\n        log.debug('BGK_4000 subdevices是nil')\n        return nil\n    end\n\n    log.debug('BGK_4000 out序列化')\n    local resultData = json.encode(out)\n    log.debug('BGK_4000 out序列化结果 : out is =%s', json.encode(out))\n    ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1，channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = childDevice.id,\n        type = 1\n    }\n\n    log.debug('BGK_4000:模块%s通道%s的deviceId是：%s', subModuleId, subChannelId, json.encode(childDevice))\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    if ErrorCode then\n        --码流转string\n        local responseStr = toStrHex(hex)\n        log.debug('BGK_4000:模块%s通道%s的解析字符串是：%s', subModuleId, subChannelId, responseStr)\n        local freStr = string.sub(responseStr, 8, 15)\n        local freq = tonumber(freStr)\n        local data1 = tonumber(string.format('%5.3f', freq))\n        local resistanceStr = string.sub(responseStr, 16, 23)\n        local dResistance = tonumber(resistanceStr)\n        log.debug('BGK_4000:模块%s通道%s的原始值是：freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n        --阻值转温度计算公式常数A,B,C\n        local A = 1.4051\n        local B = 2.369\n        local C = 1.019\n        local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n        temp = tonumber(string.format('%3.2f', temp))\n        local Phy\n        if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n            local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n            local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n            local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n            local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n            if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0)  metaid\n            local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n            local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n            local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n            local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n            if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n                anglex = data1\n                changedx = G * L * (data1 - Rx0)\n                angley = dResistance\n                changedy = G * L * (dResistance - Ry0)\n                log.debug('BGK_4000:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n            local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n            local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n            local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n            local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n            if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n                Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n        if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式   P=K2*(R1-R0)^2+K1*(R1-R0)+C\n            local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n            local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n            local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n            local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n            local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n            if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n                R1 = freq ^ P\n                Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n                Phy = tonumber(string.format('%6.3f', Phy))\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        subData.data = {\n            frequency = freq,\n            modulus = data1, --模拟量\n            temperature = temp,\n            physicalvalue = Phy, --物理量\n            anglex = anglex,\n            angley = angley,\n            changedx = changedx,\n            changedy = changedy\n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\nLCR = function(buff)\n    log.debug('BGK_4000:lcr buff=%s', buff)\n    local lcr = 0\n    for i = 0, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    log.debug('BGK_4000:lcr累加结果%s', tonumber(lcr))\n    lcr = lcr % 255\n    local value = 0xff - lcr + 1\n    local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n     --去除0x\n    log.debug('BGK_4000:lcr校验结果%s', lcrResult_str)\n    return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n    log.debug('BGK_4000:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n    --[[if data == nil or string.len(data) / 2 ~= 27 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('BGK_4000:模块%s通道%s  数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end]]--\n    if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n        errcode = 1001\n        errormsg = 'Hex CMD False '\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n\n    --码流转string\n    local checkStr = toStrHex(data)\n    log.debug('BGK_4000:模块%s通道%s 数据校验：checkStr=%s', moduleId, channelId, checkStr)\n    local moduleStr = string.sub(checkStr, 2, 3)\n    local channelStr = string.sub(checkStr, 6, 7)\n    local error_index=string.sub(checkStr, 8, 8)\n    if tonumber(moduleStr) ~= tonumber(moduleId) then\n        errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n        return false\n    end\n\n    if tonumber(channelStr) ~= tonumber(channelId) then\n        errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Invalid acq channelId=%s', moduleId, channelId, channelStr)\n        return false\n    end\n\n    if error_index == 'E' then\n        errormsg = string.format('error data=%s[%s]',data,checkStr)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s  数据校验失败 %s', moduleId, channelId, errormsg)\n        return false\n    end\n\n    log.debug('BGK_4000:模块%s通道%s校验数据通过！！！', moduleId, channelId)\n    return true\nend\n\ngetIndex = function(data) --用于IsValid\n    local len = string.len(data) / 2\n    for n = 1, len do\n        local value = string.sub(data, 2 * n - 1, 2 * n)\n        if value == '0a' then\n            return n\n        end\n    end\n    return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2018-01-05 15:28:37.531+08	2019-11-06 15:19:52.19+08	2018-01-03	\N
cf1d888a-fc06-4874-9bd6-246953fa248b	anfang_settlement_1	\N	位移	1.0	0be11993-6e55-415e-b770-792f29f98f9f	0be11993-6e55-415e-b770-792f29f98f9f	f	0be11993-6e55-415e-b770-792f29f98f9f	Lua	start=function()\n    log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local length = iota.hexToInt(hex,34,'B')/10000.0000\n     \n        out.data = {                \n            length=length\n        }\n        local resultData =json.encode(out)\n        log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anfang_settlement_1:Data is nil'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anfang_settlement_1:Data length is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataModule= iota.hexToShort(data,26,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=5) then\n        errormsg = 'anfang_settlement_1:sensorType is wrong'\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = 'anfang_settlement_1:crc is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \n	INLINE	2018-06-21 15:30:54.878+08	2019-05-05 11:42:42.955+08	2018-06-21	\N
a5f3b3b0-2db7-446a-8642-c844f6560d52	xy	\N		1.2	e1821687-1231-4e5c-a374-46d31857056d	e1821687-1231-4e5c-a374-46d31857056d	f	e1821687-1231-4e5c-a374-46d31857056d	Lua	t	INLINE	2018-01-08 11:56:51.916+08	2018-01-08 11:56:51.916+08	2018-01-08	\N
ef1d82db-d7d3-4d0e-894c-63cf0bd389ae	Inclin_WitLink_1508	\N		1.0	72b27c58-7a56-421c-ab86-abc0a0842cc7	72b27c58-7a56-421c-ab86-abc0a0842cc7	f	72b27c58-7a56-421c-ab86-abc0a0842cc7	Lua	--//PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/无锡慧联信息科技有限公司/VG100 1精度动态倾角传感器（含通讯协议）无锡慧联信息.pdf\n--[[\n协议号: 1508;\n协议名: Inclin_WitLink_1508.\n]]\n--位操作\nbit={data32={}}\nfor i=1,32 do\n\tbit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n\tlocal   tr={}\n\tfor i=1,32 do\n\t\tif arg >= self.data32[i] then\n\t\t\ttr[i]=1\n\t\t\targ=arg-self.data32[i]\n\t\telse\n\t\t\ttr[i]=0\n\t\tend\n\tend\n\treturn   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n\tlocal   nr=0\n\tfor i=1,32 do\n\t\tif arg[i] ==1 then\n\t\t\tnr=nr+2^(32-i)\n\t\tend\n\tend\n\treturn  nr\nend   --bit:b2d\n\n--或\nfunction    bit:_or(a,b)\n\tlocal   op1=self:d2b(a)\n\tlocal   op2=self:d2b(b)\n\tlocal   r={}\n\t\n\tfor i=1,32 do\n\t\tif  op1[i]==1 or   op2[i]==1   then\n\t\t\tr[i]=1\n\t\telse\n\t\t\tr[i]=0\n\t\tend\n\tend\n\treturn  self:b2d(r)\nend\n--与\nfunction    bit:_and(a,b)\n\tlocal   op1=self:d2b(a)\n\tlocal   op2=self:d2b(b)\n\tlocal   r={}\n\t\n\tfor i=1,32 do\n\t\tif op1[i]==1 and op2[i]==1  then\n\t\t\tr[i]=1\n\t\telse\n\t\t\tr[i]=0\n\t\tend\n\tend\n\treturn  self:b2d(r)\n\t\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\n--右移\nfunction    bit:_rshift(a,n)\n\tlocal   op1=self:d2b(a)\n\tlocal   r=self:d2b(0)\n\t\n\tif n < 32 and n > 0 then\n\t\tfor i=1,n do\n\t\t\tfor i=31,1,-1 do\n\t\t\t\top1[i+1]=op1[i]\n\t\t\tend\n\t\t\top1[1]=0\n\t\tend\n\t\tr=op1\n\tend\n\treturn  self:b2d(r)\nend --bit:_rshift\n\n--左移\nfunction    bit:_lshift(a,n)\n\tlocal   op1=self:d2b(a)\n\tlocal   r=self:d2b(0)\n\t\n\tif n < 32 and n > 0 then\n\t\tfor i=1,n   do\n\t\t\tfor i=1,31 do\n\t\t\t\top1[i]=op1[i+1]\n\t\t\tend\n\t\t\top1[32]=0\n\t\tend\n\t\tr=op1\n\tend\n\treturn  self:b2d(r)\nend --bit:_lshift\n\n--\nstart=function ()\n    log.debug("load script %s, moduleId=%s", "Inclin_WitLink_1508.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t-- 7704000408\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x77, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 2:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tlocal chenckSum=SumCR(string.sub(buff,3,-1));  --checkSum\n    log.debug("chenckSum等于:%s",chenckSum);--测试用\n    buff=buff..chenckSum;\n\treturn buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复 770D128410268000336503137178    moduleId=18\n--原始数据   x=-26.8  x=33.65 \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\t\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tout.result = {code=errcode,msg=errormsg} \n\telse\t\t\n\t\tlocal IDX_XDATA = 4;\n\t\tlocal IDX_YDATA = 7;\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算XDATA原始值\n\t\tlocal xFirstNum = iota.hexToByte(data,IDX_XDATA,'B');\n\t\tlocal sx=bit:_rshift(xFirstNum,4);--标志位+  or  -\n\t\tlocal  xSecondNum = bit:_and(iota.hexToByte(data,IDX_XDATA,'B'),15);-- 0xF0==240  0x0F==15\n\t\tlocal  X100=xSecondNum*100;\n\t\t\n\t\tlocal  X10=bit:_rshift(iota.hexToByte(data,IDX_XDATA+1,'B'),4)*10\n\t\tlocal  X1=bit:_and(iota.hexToByte(data,IDX_XDATA+1,'B'),15);\n\t\t\n\t\tlocal  X01=bit:_rshift(iota.hexToByte(data,IDX_XDATA+2,'B'),4)*0.1\n\t\tlocal  X001=bit:_and(iota.hexToByte(data,IDX_XDATA+2,'B'),15)*0.01;\n\t\tlocal  AngleX = X100 + X10+X1+ X01+X001;\n\t\tif sx==1 then\n\t\t\tAngleX=-AngleX;\n\t\tend\n\t\t\n\t\t--计算YDATA原始值\n\t\tlocal yFirstNum = iota.hexToByte(data,IDX_YDATA,'B');\n\t\tlocal sy=bit:_rshift(yFirstNum,4);--标志位+  or  -\n\t\tlocal  ySecondNum = bit:_and(iota.hexToByte(data,IDX_YDATA,'B'),15);-- 0xF0==240  0x0F==15\n\t\tlocal  Y100=ySecondNum*100;\n\t\t\n\t\tlocal  Y10=bit:_rshift(iota.hexToByte(data,IDX_YDATA+1,'B'),4)*10\n\t\tlocal  Y1=bit:_and(iota.hexToByte(data,IDX_YDATA+1,'B'),15);\n\t\t\n\t\tlocal  Y01=bit:_rshift(iota.hexToByte(data,IDX_YDATA+2,'B'),4)*0.1\n\t\tlocal  Y001=bit:_and(iota.hexToByte(data,IDX_YDATA+2,'B'),15)*0.01;\n\t\tlocal  AngleY = Y100 + Y10+Y1+ Y01+Y001;\n\t\tif sy==1 then\n\t\t\tAngleY=-AngleY;\n\t\tend\n\t\t\n\t\tout.data = {\n\t\tangleX=AngleX,\n\t\tangleY=AngleY\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=14 then\n\t\tlocal message = 'Data is nil or invalid Length'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n  \tlocal startbyte_0 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 3,'B');\n  \tif startbyte_0 ~= 0x77 or startbyte_3 ~= 0x84  then\n\t\tlog.debug("帧头或命令错误")\n\t\tlocal message = 'Hex CMD False'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\tif device.props.moduleId ~= tostring(iota.hexToByte(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return true\n    end\n    log.debug('数据校验通过')\n\treturn false\n\t\nend\n\n\nSumCR=function(buff)\n    local scr = 0\n    for i = 0, string.len(buff)/2-1 do\n        scr = scr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n        log.debug(string.format('scr=: %s', scr));\n    end     \n    local value= string.format("%02x",scr)\n    return value\nend 	INLINE	2017-09-19 20:37:39.73+08	2018-02-28 18:32:12.202+08	2017-09-17	\N
92c3319d-6177-4d99-a743-3391c9e1f4bf	fs_airclear_mop_0901	\N	飞尚自研空气净化器mop协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    --清除redis使用\n    --local ab = {}\n    -- local clearValue = json.encode(ab)\n    -- local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n    --log.debug('home_airclear_mop_0901  测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n    --log.debug('home_airclear_mop_0901    device=%s', json.encode(device))\n    local deviceId = device.uplink.props.clientid\n    --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n    local paramStr = capability.param\n    log.debug('home_airclear_mop_0901   [%s] capability=%s', deviceId, paramStr)\n    local paramData = json.decode(paramStr)\n\n    if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n        local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n        if paramData.cmd ~= 267 then --查询功能 只查服务器缓存 不下发指令到 设备\n            sendMsgToDeviceTopic(app_cmd)\n        end\n    else\n        log.debug('home_airclear_mop_0901   [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n    end\n    local result = json.encode(out)\n    ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n    --将指令发送到  设备的topic\n    local dev_topic = msg.ID .. '_device_rece'\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n    log.debug(\n        'home_airclear_mop_0901   [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s',\n        msg.ID,\n        dev_topic,\n        msgStr,\n        ok,\n        ack\n    )\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n    local cmd = {}\n    cmd.from = 'server'\n    cmd.ID = id\n    cmd.type = 513\n    cmd.code = code\n    cmd.cmd = cmdType\n    if cmdType == 267 then --app查询功能\n        if code == 4 then --定时任务查询\n            local redis_key = cmd.ID .. '_air_taskconfig'\n            local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n            --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n            local array_taskConfigs = {}\n            for _, v in pairs(redis_taskConfigs) do\n                table.insert(array_taskConfigs, v)\n            end\n            out.data.params = array_taskConfigs\n            log.debug('home_airclear_mop_0901   out.data.params=%s', json.encode(array_taskConfigs))\n        elseif code == 15 then --报警阈查询   设备只有PM2.5\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n            out.data.params = redis_alarmConfigs\n        end\n    elseif cmdType == 523 then\n        if code == 1 then --初始化 id  即修改id\n            cmd.id = newconfig\n        elseif code == 2 then --修改电源开关\n            cmd.params = newconfig\n        elseif code == 3 then --风速挡位设置\n            cmd.params = newconfig\n        elseif code == 4 then --定时任务设置--添加 or 修改\n            --taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串  '10',  平台需要转换成16\n            cmd.params = newconfig\n        elseif code == 5 then --定时使能设置\n            cmd.params = newconfig\n        elseif code == 6 then --定时删除设置\n            -- taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            cmd.params = newconfig\n        elseif code == 7 then --杀菌灯开关控制\n            cmd.params = newconfig\n        elseif code == 8 then --负离子开关控制\n            cmd.params = newconfig\n        elseif code == 9 then --加湿器开关控制\n            cmd.params = newconfig\n        elseif code == 10 then --加湿器挡位设置\n            cmd.params = newconfig\n        elseif code == 11 then --设备模式控制\n            cmd.params = newconfig\n        elseif code == 12 then --童锁开关控制\n            cmd.params = newconfig\n        elseif code == 13 then --远程升级 app发起 然后  平台redis存储升级包 ，平台与设备交互，上报升级状态\n            binCache.params = getPackageList(newconfig.binBuff)\n            binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n            --将升级包存储 redis\n            local redis_key_bin = cmd.ID .. '_air_bin'\n            local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n            if isSetOK == 'true' then\n                local dataObject = {}\n                dataObject.from = 'server'\n                dataObject.type = 513 -- 513加湿器  257  净化器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                sendMsgToTopic(dataObject, 'device')\n            end\n        elseif code == 15 then --报警阈值设置   设备只有PM2.5\n            cmd.params = newconfig\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            --同时平台留存一份 后续app or设备 同步所有定时任务用\n            setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n            log.debug('home_airclear_mop_0901   [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n        end\n    end\n\n    return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug(\n        'home_airclear_0901   [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n        msg.ID,\n        msg.code,\n        binCache.updateTime,\n        topic,\n        msgStr,\n        ok,\n        ack\n    )\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug(\n        'home_airclear_mop_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s',\n        cmd_obj.ID,\n        tsakId,\n        redis_taskConfigs,\n        json.encode(redis_taskConfigs),\n        type(redis_taskConfigs)\n    )\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 then --添加或修改\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_airclear_mop_0901   非首次插入')\n        else\n            log.debug('home_airclear_mop_0901   首次插入')\n            table.insert(redis_taskConfigs, tsakId, taskConfig)\n        end\n\n        log.debug(\n            'home_airclear_mop_0901   [%s][code=%s] redis_taskConfigs=%s',\n            cmd_obj.ID,\n            cmd_obj.code,\n            json.encode(redis_taskConfigs)\n        )\n    elseif cmd_code == 6 then --删除任务\n        redis_taskConfigs[tsakId] = nil\n        log.debug('home_airclear_mop_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug(\n        'home_airclear_mop_0901   [%s][code=%s]  r1=%s[%s],r1ok=%s  key=%s',\n        logObject.ID,\n        logObject.code,\n        r1,\n        type(r1),\n        r1ok,\n        key\n    )\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug(\n            'home_airclear_mop_0901   [%s][code=%s]    taskConfig读取失败  r1=%s,r1ok=%s',\n            logObject.ID,\n            logObject.code,\n            r1,\n            r1ok\n        )\n    end\n    return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug(\n        'home_airclear_mop_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s,key=%s,setValue=%s',\n        logObject.ID,\n        logObject.code,\n        r1,\n        r1ok,\n        key,\n        setValue\n    )\n    return r1ok\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 2048\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend	INLINE	2020-09-02 16:23:54.243+08	2020-09-20 16:56:15.525+08	2020-09-02	\N
3fc1f94e-7054-43a4-a42d-21b63c00442c	A设备协议	\N		v1.1.1	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	Lua	a:a	INLINE	2018-01-22 10:17:37.67+08	2018-02-02 15:57:56.287+08	2018-01-22	\N
60e55f2a-aea2-4c30-9553-ccf7e9f53892	http_get_Test	\N		0.1	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n\tlog.debug("start http_get_Test device :%s",json.encode(device))\n\tlocal out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n\tlocal req = {\n\t\ttype= "http",\n\t\turl= device.uplink.props.uri,   --"http://data.linfeng-tech.com/restful/v1/business/runData",  \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n  \n  \tlocal authOk,authAck=ctx:ssend(req,4000)\n  \tlog.debug("http_get_Test isok= %s ,url =%s",authOk,req.url)\n  \tlog.debug("http_get_Test headers= %s",json.encode(authAck.header))\n\tlog.debug("http_get_Test Authenticate= %s",json.encode(authAck.header["Www-Authenticate"]))\n\t\n  \nend  	INLINE	2018-07-30 09:26:43.717+08	2018-07-30 11:02:39.323+08	2018-07-30	\N
2e56410c-4018-47e4-8223-4ec7a4aed43f	geot_1407	\N	基泰单通道振弦采集   主动上传	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//04 项目资料/2017-05/南京基泰/基泰单通道 单点协议示例.doc\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function ()  \n\t-- log.debug("start %s, ctx=%s", "geot_1407.lua",json.encode(device.moduleId))\n  -- ok,resp=ctx:ssend("0102030405060708",15000)\n    -- log.debug("geot_1407:测试下发正常")\n-- end\n--moduleId=98 通道1  \n--ff6000620027100144595bd8cc024456de1600036494187c40116444e59d5d126444e59d5df053\n\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1407:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("geot_1407:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n             local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + 1* 6,'L');\n\t\t\t --插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=1\n             log.debug("geot_1407:模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("geot_1407:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n              \tlog.debug("geot_1407:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n           \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n           \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("geot_1407:(振弦)子设备:m=%s,c=%s：公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n                    if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n                        Phy=nil\n                   \t\tlog.debug("geot_1407:模块号=%s,通道号=%s  参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                    else\n                  \t\tlog.debug("geot_1407:模块号=%s,通道号=%s  参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                        local Fi=Frequency\n         \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n                        log.debug("geot_1407:当前的Phy是:%s",Phy)\n                    end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1407:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n               -- end\n             else\n                log.debug("geot_1407:(振弦)子设备:m=%s,c=%s deviceId为nil"..tostring(moduleNo),tostring(channelNo))\n            end\n\t\t\tlocal data1={\n\t\t\t            data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.2f",Temp)),\n                  \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n        \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("geot_1407 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("geot_1407:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1407 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("geot_1407 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("geot_1407:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("geot_1407:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1407:开始校验数据')\n    if data == nil or string.len(data)/2 ~= 39 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n    log.debug('geot_1407:校验通过')\n\treturn true\n\t\nend\n	INLINE	2018-03-06 15:32:32.975+08	2018-05-10 18:00:01.561+08	2018-03-06	\N
cc379fab-18f6-4524-874c-3cf8c71188cf	myweiyun_GDGS_8400	\N		1.0	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f	650f75b2-4e3f-4393-8edb-0308c73e15b6	Lua	 start=function()\n    ok=ctx:ssend("01020304")\n end\n\n\nonData =function(hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local moduleNo = 48 --device.uplink.props.module\n    log.debug('MYWEIYUN_GDGS m=%s, recv =%s', moduleNo, hex)\n    local channelCounts = 8 --device.props.channelCount\n    local allDataLen = 6 + channelCounts * (4 * 30 + 2)\n    local singleChannelDataLen = 4 * 30 + 2\n    log.debug('MYWEIYUN_GDGS 设备模块通道 接口获取 m=%s ', moduleNo)\n    local ErrorCode = IsValid(hex, moduleNo, allDataLen)\n    local dataHex = string.sub(hex, 13, -1) --数据域\n    if ErrorCode then\n        local T1 = string.sub(dataHex, -4, -3)\n        local T2 = string.sub(dataHex, -2, -1)\n        for i = 1, channelCounts, 1 do\n            local singleChannelHex = string.sub(dataHex, 1 + (i - 1) * singleChannelDataLen * 2, i * singleChannelDataLen * 2)\n            --温度部分\n\n            local x = tonumber(T1, 16) * 256 + tonumber(T2, 16)\n\n            local temperature = -0.000000004456 * x ^ 3 + 0.000030204287 * x ^ 2 - 0.091145876319 * x + 123.066087843246\n\n            for j = 1, 30, 1 do\n                local X1 = string.sub(singleChannelHex, (j - 1) * 8 + 1 + 2, (j - 1) * 8 + 2 + 2)\n                local X2 = string.sub(singleChannelHex, (j - 1) * 8 + 3 + 2, (j - 1) * 8 + 4 + 2)\n                local X3 = string.sub(singleChannelHex, (j - 1) * 8 + 5 + 2, (j - 1) * 8 + 6 + 2)\n\n                local frequency = (tonumber(X1, 16) * 65526 + tonumber(X2, 16) * 256 + tonumber(X3, 16)) / 10\n\n                if frequency ~= 0 then\n                    local waveLength = 299792458 / frequency\n                    --获取通道设备deviceId\n                    local childDevice = getDeviceInfo(i, j)\n                    if childDevice ~= nil then\n                        local data1 = {\n                            data = {\n                                frequency = tonumber(string.format('%0.3f',frequency)),\n                                waveLength = tonumber(string.format('%0.3f',waveLength)),\n                                temperature = tonumber(string.format('%0.3f',temperature))\n                            },\n                            device = childDevice.id,\n                            type = 1\n                        }\n                        log.debug('MYWEIYUN_GDGS  m=%s,c=%s Phy结果=%s', tostring(i), tostring(j), json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('MYWEIYUN_GDGS m=%s,data=%s', moduleNo, json.encode(out))\n    local result = json.encode(out)\n    ctx:notify(result)\nend\n\nIsValid = function(data, moduleCheck, dataLenCheck)\n    local length = string.len(data) / 2\n    if data == nil or length ~= dataLenCheck then\n        errormsg = string.format('数据长度无效[%s]≠%s', length / 2, dataLenCheck)\n        errcode = 1002\n        return false\n    end\n\n    local dataModule = string.sub(data, 1, 2)\n    if tonumber(dataModule, 16) ~= tonumber(moduleCheck) then\n        errormsg = string.format('无效的模块号=%s[%s]', data, dataModule)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("MYWEIYUN_GDGS 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("MYWEIYUN_GDGS 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\n            local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            local channelStrCheck = child.uplink.props.channel\n            --log.debug("MYWEIYUN_GDGS 子设备模块通道 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('MYWEIYUN_GDGS  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('MYWEIYUN_GDGS  subdevices是nil')\n        return nil\n    end\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend	INLINE	2018-12-13 15:25:10.014+08	2018-12-13 17:21:06.19+08	2018-12-13	\N
64dc7d39-4bc6-48b1-b0b3-4f7faa6dfb2f	fshs_DAS_ HS-IOT102	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	start = function()\n  log.debug('fshs_cjy_8000 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n    --主动上传式\n    log.debug('fshs_cjy_8000 Received=>%s', hex)\n \tlog.debug('fshs_cjy_8000 device=>%s', json.encode(device))\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\n    local index_temp = 10\n    local index_mv = 12\n    local index_ma1 = 16\n    local index_ma2 = 20\n    local index_powerlevel = 24\n    local index_signal = 26\n    local index_ballstate = 28\n    local index_alarmcode = 30\n    local index_3Dangles = 32\n    local index_angletemp = 38\n    local index_numof485 = 40\n    local index_485_1 = 44\n\n    local moduleNoStr = device.uplink.props.module \n\n    local channelDatas = {}\n    local ErrorCode = IsValid(hex, moduleNoStr)\n\tlocal moduleidsub = string.sub(hex, 3, 10)\n\tlog.debug('fshs_cjy_8000  moduleidsub=%s', moduleidsub)\n\tlocal xm=string.sub(hex,11,12)\n\t--log.debug('fshs_cjy_8000  xm=%s', xm)\n\t\n    if ErrorCode then\n        local temperature = iota.hexToUShort(hex, index_temp, 'L') / 10\n        channelDatas[1] = temperature\n        local mv = iota.hexToFloat(hex, index_mv, 'L')\n        channelDatas[2] = mv\n        local ma1 = iota.hexToFloat(hex, index_ma1, 'L')\n        channelDatas[3] = ma1\n        local ma2 = iota.hexToFloat(hex, index_ma2, 'L')\n        channelDatas[4] = ma2\n        local powerlevel = iota.hexToUShort(hex, index_powerlevel, 'L')\n        channelDatas[5] = powerlevel\n        local signal = iota.hexToUShort(hex, index_signal, 'L')\n        channelDatas[6] = signal\n        local ballstate = iota.hexToUShort(hex, index_ballstate, 'L')\n        channelDatas[7] = ballstate\n        local alarmcode = iota.hexToUShort(hex, index_alarmcode, 'L')\n        channelDatas[8] = alarmcode\n        --local _3Dangles = {iota.hexToShort(hex, index_3Dangles, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 2, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 4, 'L')/32768*180}\n\t\t\n\t\tlocal _3Dangles = {string.sub(tostring(iota.hexToShort(hex, index_3Dangles, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+2, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+4, 'L')/32768*180), 1, 6)}\n        channelDatas[9] = _3Dangles\n        local angletemp = iota.hexToUShort(hex, index_angletemp, 'L')\n        channelDatas[10] = angletemp\n        local numof485 = iota.hexToUShort(hex, index_numof485, 'L')\n        for i = 1, numof485, 1 do\n            local data485 = iota.hexToFloat(hex, index_485_1 + (i - 1) * 4, 'L')\n            channelDatas[10 + i] = data485\n        end\n\n        for k, v in pairs(channelDatas) do\n            log.debug('fshs_cjy_8000   模块号=%s,通道号=%s', moduleNoStr, k)\n            local childDevice = getDeviceInfo(moduleNoStr, k)\n            physicalvalue = channelDatas[k]\n\t\t\tlog.debug('fshs_cjy_8000   physicalvalue=%s,通道号=%s', physicalvalue, k)\n            local deviceId\n            if childDevice ~= nil then\n                deviceId = childDevice.id\n                log.debug('fshs_cjy_8000:子设备原形childDevice=%s', json.encode(childDevice))\n\n                if k == 9 then --3向角度计\n                    local data1 = {\n                        data = {\n                            anglex = channelDatas[k][1],\n                            angley = channelDatas[k][2],\n                            anglez = channelDatas[k][3]\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local data1 = {\n                        data = {\n                            physicalvalue = channelDatas[k]\n\t\n\t\t\t\t\t\t\t\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            else\n                log.debug('fshs_cjy_8000  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('fshs_cjy_8000 resultData=%s', resultData)\n    ctx:notify(resultData)\n\tlocal zt="FF"\n\tlocal zw="FE"\n\t\n\tif (xm=='01') then \n\t\tlocal xmo="810000"\n\t\tlocal  xmm=moduleidsub..xmo     --xmm=2155cc04810000\n\t\t --log.debug('fshs_cjy_8000 xmm=%s', xmm)\n\t\tlocal  app=CS(xmm)\n\t\tlocal  bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 app=%s', app)\n\t\t \n\t\t local  bpp=string.format("%#x",app)\n\t\t   --log.debug('fshs_cjy_8000 bpp=%s', bpp)\n\t\t local  cpp=string.sub(bpp, -2, -1)\n\t\t-- log.debug('fshs_cjy_8000 cpp=%s', cpp)\n\t\tlocal asends=zt..xmm..cpp..zw\n\t\t--log.debug('fshs_cjy_8000 asends=%s', asends)\n\t\tctx:asend(asends)\n\telseif(xm=='09') then\n\t\tlocal xmo="890000"\n\t\tlocal  xmm=moduleidsub..xmo     \n\t\t --log.debug('fshs_cjy_8000 xmm=%s', xmm)\n\t\tlocal  app=CS(xmm)\n\t\tlocal  bpp=string.format("%#x",app)\n\t\t --log.debug('fshs_cjy_8000 app=%s', app)\n\t\t \n\t\t local  bpp=string.format("%#x",app)\n\t\t   --log.debug('fshs_cjy_8000 bpp=%s', bpp)\n\t\t local  cpp=string.sub(bpp, -2, -1)\n\t\tlocal asends=zt..xmm..cpp..zw\n\t\t--log.debug('fshs_cjy_8000 asends=%s', asends)\n\t\tctx:asend(asends)\n\t   end\n\t   \nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n    --log.debug('fshs_cjy_8000:lcr累加结果%s', lcr)\t\n\t--local value=bit.band(bit.bnot(lcr),0xff)+1  --按位取反再加1\n\t--log.debug('fshs_cjy_8000:lcrvalue累加结果1%s', value)\t\n    return lcr\nend \n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("fshs_cjy_8000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('fshs_cjy_8000:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n               -- log.debug('fshs_cjy_8000 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('fshs_cjy_8000 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('fshs_cjy_8000:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fshs_cjy_8000:  subdevices是nil')\n        return nil\n    end\nend\n\nIsValid = function(data, module_device)\n    local datalen = string.len(data)\n\t--or datalen < 46\n    if data == nil  then\n        errormsg = string.format('数据长度无效=%s', datalen)\n        errcode = 1002\n        return false\n    end\n\n    if string.sub(data, 1, 2) ~= 'ff' or string.sub(data, -2, -1) ~= 'fe' then\n       errcode = 1003\n       errormsg = string.format('数据帧头帧尾无效')\n       return false\n   end\n\n    local module_data = tostring(iota.hexToUInt(data, 1, 'L'))\n    if module_data ~= module_device then\n        errormsg = string.format('模块号无效=%s≠%s', module_data, module_device)\n        errcode = 1004\n        return false\n    end\n    log.debug('fshs_cjy_8000:校验通过')\n    return true\nend	INLINE	2019-07-04 10:09:13.698+08	2019-12-09 14:10:25.723+08	2019-07-04	\N
603b098f-f66e-4730-99b8-38fd8474636d	shzr_temp_RN-630	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shzr_temp_RN-630", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shzr_temp_RN-630 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shzr_temp_RN-630 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local anglex = iota.hexToFloat(hex,3,'B')\n\t\tlocal angley = iota.hexToFloat(hex,7,'B')\n        \n       \n        out.data = {\n\t\t\tanglex=anglex,\n\t\t\tangley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shzr_temp_RN-630 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_temp_RN-630 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-06-28 14:42:59.74+08	2019-06-28 14:43:30.752+08	2019-06-28	\N
dc6bc749-5263-4a53-8fcd-76e7b4f7032d	soilDT5678	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞   --修改部分模块输出名称，添加通用性\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    ok = ctx:asend('0102')\n    log.debug('soilDT5678 device =%s', json.encode(device))\nend\n\nonData =\n    function(hex, index)\n    log.debug('soilDT5678 7777888888=%s[%s] type(index)=[%s]', hex, index, type(index))\n    if index == 2 then\n        ok = ctx:asend('670d0a') --"g/n/r"  DT运行当前工作计划\n        ctx:sleep(1)\n        ok = ctx:asend('2f480d0a') --"/H/n/r"  DT 按照指定格式 上报数据\n    end\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = HextoStr(hex)\n        log.debug('soilDT5678:sData是 %s', sData)\n        --获取子字符串表\n        local allResponse = Split(sData, ';')\n        local allResponseCount = table_leng(allResponse)\n        --移除表内的“”和nil\n        for i = allResponseCount, 1, -1 do\n            v = allResponse[i]\n            if v == '' or v == nil or string.len(v) < 10 then\n                table.remove(allResponse, i)\n                log.debug('soilDT5678 表内的“”和nil 移除元素k=%s v=%s', i, v)\n            end\n        end\n\n        --分析单类数据\n        local resplength = table_leng(allResponse)\n        local phys = {} --存储所有通道物理量\n        local moduleNo  --模块号\n        local dateTimeStr\n        local timenow\n        for k, v in ipairs(allResponse) do\n            dataIndex = string.sub(v, 1, 1)\n             --单条数据首字母   D为设备信息 ，A为数据\n\n            if dataIndex == 'D' then\n                local otherData = Split(v, ',')\n                moduleNo = otherData[2]\n                local dateStr = otherData[4]\n                local timeStr = otherData[5]\n                dateTimeStr = string.format('%s %s', dateStr, timeStr)\n                timenow = unixtimestamp(dateTimeStr)\n            elseif dataIndex == 'A' then\n                local singleData = Split(v, ',')\n                for sensorKey, sensorValue in ipairs(singleData) do\n                    if sensorKey > 2 then\n                        phys[sensorKey - 2] = singleData[sensorKey]\n                    end\n                end\n            end\n        end\n\n        --匹配数据部分\n\n        -- local childDevice={}--测试用\n        -- childDevice.id=123  --测试用\n\n        for index, childDevice in pairs(device.dnlinks[1].devices) do\n            log.debug('soilDT5678 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n            local channelStrCheck = childDevice.uplink.props.channel\n            log.debug('soilDT5678 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n            local relatedChannel = Split(channelStrCheck, ',')\n            local valueNum = table_leng(relatedChannel)\n\n            if childDevice.props.sensortype == 'zx' then\n                local Frequency_index = tonumber(relatedChannel[1])\n                local Temperature_index = tonumber(relatedChannel[2])\n                local Frequency = tonumber(phys[Frequency_index])\n                local Temperature = tonumber(phys[Temperature_index])\n        \t\tlog.debug("soilDT5678  振弦通道[%s]",channelStrCheck)\n                if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("soilDT5678  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K == nil or Kt == nil or Fo == nil or To == nil then\n                        log.debug("soilDT5678  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                        Phy = nil\n                    else\n                        log.debug("soilDT5678  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n                        log.debug("soilDT5678 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                            data = {\n                                frequency = tonumber(string.format('%0.3f', Frequency)),\n                                temperature = tonumber(string.format('%0.2f', Temperature)),\n                                physicalvalue = tonumber(string.format('%0.3f', Phy))\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soilDT5678: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            elseif childDevice.props.sensortype == 'dy' then\n                local Vx_index = tonumber(relatedChannel[1])\n                local Vx = phys[Vx_index]\n                local Vy\n                local Temperature\n                if valueNum == 2 then\n                    local Temperature_index = tonumber(relatedChannel[2])\n                    Temperature = tonumber(phys[Temperature_index])\n                elseif valueNum == 3 then\n                    local Vy_index = tonumber(relatedChannel[2])\n                    local Temperature_index = tonumber(relatedChannel[3])\n                    Vy = phys[Vy_index]\n                    Temperature = tonumber(phys[Temperature_index])\n                    Temperature = tonumber(string.format('%0.3f', Temperature))\n                end\n\n                if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n                    local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n                    local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n                    local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n                    --  log.debug("soilDT5678 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n                    if Kx == nil or Ky == nil or Vo == nil then\n                        --      log.debug("soilDT5678  电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n                        Phy = nil\n                    else\n                        --   log.debug("soilDT5678  电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n                        local value1 = Kx * (Vx - Vo)\n                        value1 = tonumber(string.format('%0.3f', value1))\n\n                        local value2\n                        if valueNum == 3 then\n                            value2 = Ky * (Vy - Vo)\n                            value2 = tonumber(string.format('%0.3f', value2))\n                        end\n                        -- log.debug("soilDT5678 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n                        local data1 = {\n                            data = {\n                                voltage=Vx,\n                                physicalvalue = value1,\n                                physicalvalue2 = value2,\n                                temperature = Temperature\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soilDT5678: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            elseif childDevice.props.sensortype == 'standard' then\n                local value1_index = tonumber(relatedChannel[1])\n                local Value1 = tonumber(phys[value1_index])\n                Value1 = tonumber(string.format('%0.2f', Value1))\n                local Value2\n                local Temperature\n                if valueNum == 2 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n                    log.debug('soilDT5678 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                elseif valueNum == 3 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n\n                    local value3_index = tonumber(relatedChannel[3])\n                    value3 = tonumber(phys[value3_index])\n                    value3 = tonumber(string.format('%0.2f', value3))\n                    Temperature = value3\n                    log.debug('soilDT5678 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                end\n                local data1 = {\n                    data = {\n                        physicalvalue = Value1,\n                        physicalvalue2 = Value2,\n                        temperature = Temperature\n                    },\n                    device = childDevice.id,\n                    time = timenow,\n                    type = 1\n                }\n                log.debug('soilDT5678: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n                table.insert(out.data, data1)\n            end\n        end\n    else\n        ok = ctx:asend('2f480d0a') --"/H/n/r"  DT 按照指定格式 上报数据\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('soilDT5678 resultData=%s,hex=%s', json.encode(out), hex)\n    ctx:notify(resultData)\nend\n\nIsValid = function(alldata)\n    log.debug('soilDT5678 校验开始')\n    if string.len(alldata) < 10 then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n        return false\n    end\n\n    if string.sub(alldata, 1, 4) ~= '442c' then\n        errormsg = 'allData header is invalid'\n        errcode = 1001\n        return false\n    end\n\n    log.debug('soilDT5678 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nunixtimestamp = function(datestr)\n    -- 2018/4/28 16:10:12\n    log.debug('soilDT5678 datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '/')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    --log.debug("soilDT5678 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT5678 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT5678 recordTime=%s",recordTime)\n    return recordTime\nend	INLINE	2019-10-21 16:47:24.341+08	2019-10-21 16:47:24.341+08	2019-10-21	\N
70b1f69b-2605-42ef-a7c2-6746c1289f7c	mas-idau_mop	\N	下发指令	1	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start = function()\n    --log.debug("mas_idau_mop:device=%s",json.encode(device))\n    --log.debug("mas_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    --log.debug("mas_idau_mop:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_network",\n        O = "S",\n        P = {} -- 荷载\n    }\n    local req_sensor={\n        type = "idau",\n        payload = ""\n    }\n    local mop_sensor = {\n        M = "c_sensor",\n        O = "S",\n        P = {} -- 荷载\n    } \n    for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n        local link = device.dnlinks[i]\n        local nodecnt = #(link.devices)\n        --log.debug("mas_idau_mop:nodecnt=%s",nodecnt)\n        local subnet = {\n            SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号.      link.interface.props.subnet\n            NS = {} -- 子网节点\n        }\n        table.insert(mop.P, subnet)\n        if nodecnt > 0 then\n            for j = 1, nodecnt, 1 do\n                local dev = link.devices[j]\n                local dev_inf = link.devices[j].uplink\n                --log.debug("mas_idau_mop:dev=%s", json.encode(dev))\n                local node = {\n                    NID = tonumber(dev_inf.props.netid), -- 网络号\n                    C = 2, -- 通道\n                    DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n                    DIU = 0, --分钟(采集间隔单位)\n                    WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n                    T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n                }\n                table.insert(subnet.NS, node)\n\t\t\t\t\n                if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\t--log.debug("mas_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\t--log.debug("mas_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\t--log.debug("mas_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n\t\t\t\t\t\t\t\tlocal CheckOption = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.CheckOption == false then\n\t\t\t\t\t\t\t\t\tCheckOption = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal VibratSamplFreq = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "8K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "32K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 2\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal AmplifierGain = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.AmplifierGain == "500倍" then\n\t\t\t\t\t\t\t\t\tAmplifierGain = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal Incentive = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Incentive == false then\n\t\t\t\t\t\t\t\t\tIncentive = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal IncentiveMethod = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "共振激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal VibratSpectrum = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSpectrum == false then\n\t\t\t\t\t\t\t\t\tVibratSpectrum = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Baudrate = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "19200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "115200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Databit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "7位" then\n\t\t\t\t\t\t\t\t\tDatabit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "9位" then\n\t\t\t\t\t\t\t\t\tDatabit = 2\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Proofbit = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "奇校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "偶校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Stopbit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "0.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "1.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "2位" then\n\t\t\t\t\t\t\t\t\tStopbit = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal SwitchDelay = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "0ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "10ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "20ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBC = CheckOption,\n\t\t\t\t\t\t\t\t\tFS = VibratSamplFreq,\n\t\t\t\t\t\t\t\t\tGA = AmplifierGain,\n\t\t\t\t\t\t\t\t\tBS = Incentive,\n\t\t\t\t\t\t\t\t\tMO = IncentiveMethod,\n\t\t\t\t\t\t\t\t\tUPS = VibratSpectrum,\n\t\t\t\t\t\t\t\t\tHN = tonumber(sen.uplink.props.Spectrumway) or 1,\n\t\t\t\t\t\t\t\t\tINV = tonumber(sen.uplink.props.SensorValue) or 1500,\n\t\t\t\t\t\t\t\t\tBR = Baudrate,\n\t\t\t\t\t\t\t\t\tDB = Databit,\n\t\t\t\t\t\t\t\t\tCB = Proofbit,\n\t\t\t\t\t\t\t\t\tSB = Stopbit,\n\t\t\t\t\t\t\t\t\tSWD = SwitchDelay\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n                    end\n                end\n            end\n        end\n    end\n    req.payload = json.encode(mop)\n    --log.debug("mas_idau_mop:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n\tlocal result= {\n\t\tresult= nil,\n\t\ttype=1,\n\t\tdata={}\n\t}\n\t--log.debug("mas_idau_mop:ack=%s", json.encode(ack))\n    if ok then\n        req_sensor.payload= json.encode(mop_sensor)\n        --log.debug("mas_idau_mop:requestsensor=%s", json.encode(req_sensor))\n        local senok, senack = ctx:ssend(req_sensor, 120000)\n\t\tif senok then\n\t\t\tresult.data.ack =  json.encode(senack)\n\t\telse\n\t\t\tresult.data.ack =  json.encode(ack)\n\t\tend\n\t\t--log.debug("mas_idau_mop: sensor ack=%s", json.encode(result))\n\telse\n\t\tresult.data.ack =  'set error'\n    end\n\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n	INLINE	2018-03-15 13:38:36.008+08	2019-12-13 14:10:48.658+08	2018-03-15	\N
ef26cc99-f1f8-4c3c-9d5a-090131dc310b	SMARTIT	\N	水质监测传感器协议	1.0	750185f8-2901-4e59-a173-708c3f84f270	750185f8-2901-4e59-a173-708c3f84f270	f	750185f8-2901-4e59-a173-708c3f84f270	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("SMARTIT: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\tlog.debug("SMARTIT: hex=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\t    --数据域 内的索引号\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\n\t\tlocal time = iota.hexToUInt(hex,7,'B') --时间戳\n\t\tlocal times = 946656000+ time\n\t\tlocal ph = iota.hexToShort(hex,30,'B')/100--PH\n\t\tlocal conductivity = iota.hexToShort(hex,33,'B')--电导\n    \tlocal oxyhex = string.sub(hex, 75, 76)..string.sub(hex, 73, 74)..string.sub(hex, 79, 80)..string.sub(hex, 77, 78)\n\t\tlocal oxygen = iota.hexToFloat(oxyhex,0,'L') --溶解氧\n    \tlocal turhex = string.sub(hex, 85, 86)..string.sub(hex, 83, 84)..string.sub(hex, 89, 90)..string.sub(hex,87, 88)\n\t\tlocal turbidity = iota.hexToFloat(turhex,0,'L') --浊度\n    \tlocal temphex = string.sub(hex, 95, 96)..string.sub(hex, 93, 94)..string.sub(hex,99, 100)..string.sub(hex,97, 98)\n\t\tlocal temperature = iota.hexToFloat(temphex,0,'L') --温度\n\t\t\n\t\tout.data={\n\t\t\tph = ph,\n\t\t\tconductivity = conductivity,\n\t\t\toxygen = oxygen,\n\t\t\tturbidity = turbidity,\n\t\t\ttemperature = temperature\n\t\t}\n\telse\n\t\tout.result = {code = errcode, msg = errormsg}\n\tend\n\n    local resultData =json.encode(out)\n    log.debug("SMARTIT: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n\n\n\nIsValid=function(alldata)\n    log.debug("SMARTIT  校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n        return false\n    end\n    return true\nend\n\n	INLINE	2018-10-31 10:50:52.109+08	2018-11-05 10:15:52.084+08	2018-10-31	\N
9849a791-5487-439b-a063-f7691ed40bfc	hy_rainFall_1600	\N	温州华云雨量采集协议	1.0	680b589c-4603-4011-a8df-f37373ad8930	680b589c-4603-4011-a8df-f37373ad8930	f	680b589c-4603-4011-a8df-f37373ad8930	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n--AA0D000A0C01080001FFFF00A9      moduleId=1  --"rainFall": 0.01\nstart=function()\n    log.debug("start %s, moduleId= %s", "hy_rainFall_1600.lua",json.encode(device.props.moduleId))\n    local endian = 'B'\n    local buff=''       \n    local buff1=''\n    \n    buff1=iota.appendHexByte(buff1, 0x55, endian)\n    buff1=iota.appendHexByte(buff1, 0x0A, endian)\n    buff1=iota.appendHexByte(buff1, 0x00, endian)--采集雨量\n    local year =tonumber(os.date("%y"))\n    buff1=iota.appendHexByte(buff1, year, endian)\n    local month = tonumber(os.date("%m"))\n    buff1=iota.appendHexByte(buff1, month, endian)\n    local day = tonumber(os.date("%d"))\n    buff1=iota.appendHexByte(buff1, day, endian)\n    local hour = tonumber(os.date("%H"))\n    buff1=iota.appendHexByte(buff1, hour, endian)\n    buff1=iota.appendHexByte(buff1, 0x01, endian)\n    buff1=iota.appendHexByte(buff1, 0x00, endian)\n    xor = CheckXor(buff1)\n    buff1=iota.appendHexByte(buff1, xor, endian)\n    local ok1,resp1=ctx:ssend(buff1,10000)\n\n    if ok1 then\n        result = decode(resp1)\n      --  print(string.format("out=%s,data=%s",resp, result))\n\t\tbuff=iota.appendHexByte(buff, 0x55, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x0A, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x10, endian)--同步时间\n\t\tlocal year =tonumber(os.date("%y"))\n\t\tbuff=iota.appendHexByte(buff, year, endian)\n\t\tlocal month = tonumber(os.date("%m"))\n\t\tbuff=iota.appendHexByte(buff, month, endian)\n\t\tlocal day = tonumber(os.date("%d"))\n\t\tbuff=iota.appendHexByte(buff, day, endian)\n\t\tlocal hour = tonumber(os.date("%H"))\n\t\tbuff=iota.appendHexByte(buff, hour, endian)\n\t\tlocal min = tonumber(os.date("%M"))\n\t\tbuff=iota.appendHexByte(buff, min, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tlocal xor = CheckXor(buff)\n\t\tbuff=iota.appendHexByte(buff, xor, endian)\n\n\t\tok,resp=ctx:ssend(buff,10000)\n\t\tlocal result='{}'\n\t\tif ok then\n\t\t\tresult = unmarshall(resp)\n\t\t  --  print(string.format("out=%s,data=%s",resp, result))\n\t\telse\n\t\t\tlocal outError2={\n\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\tresult = {code = 1002, msg = '同步时间超时'}\n\t\t\t\t\t\t}\n\t\t\tresult=json.encode(outError2)\n\t\tend\n    else\n        local outError1={\n\t\t\t\t\t\tdata ={},\n\t\t\t\t\t\tresult = {code = 1001, msg = '超时'}\n\t\t\t\t\t\t}\n\t    result=json.encode(outError1)\n\t\n    end\n\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, sync=%s", "hy_rainFall_1600.lua",hex)\n\t--15028765\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        if iota.hexToByte(hex,2,'B') == 0x10 then\n            sync = true\n            log.debug("hy_rainFall_1600  sync is true")\n        else \n            sync = false\n            log.debug("hy_rainFall_1600  sync is false")\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\n\n\ndecode=function(hex)\n    log.debug("recv %s, data=%s", "hy_rainFall_1600.lua",hex)\n\t--15028765\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n  log.debug("1")\n    if ErrorCode then\n    log.debug("%d",iota.hexToShort(hex,7,'L'))\n        local rain = iota.hexToShort(hex,7,'L') * 0.01\n        out.data = {\n\t\t\trainfall=rain\n\t\t};\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug("recv %s, ctx=%s", "hy_rainFall_1600.lua",json.encode(out))\n    return json.encode(out)\nend\n\n\nIsValid=function(data)\n    if data == nil or iota.hexToByte(data,1,'B') ~= string.len(data)/2 then\n        errormsg = 'Data is nil or length is not right'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0xAA then\n        errormsg = 'Data Flag is Invalid'\n        errcode = 1001\n        return false\n    end\n  log.debug("%d",iota.hexToByte(data,2,'B'))\n    if iota.hexToByte(data,2,'B') ~= 0x10 and iota.hexToByte(data,2,'B') ~= 0x00 then\n        errormsg = 'Data CMD is Invalid'\n        errcode = 1001\n        return false\n    end\n    local xor = iota.hexToByte(data,(string.len(data)/2)-1,'B')\n    if CheckXor(string.sub(data,1,-3)) ~= xor then\n  \t\terrcode = 1003\n        errormsg = 'CRC ERROR' \n        return false\n    end\n    return true\n--crc\nend\n\nCheckXor=function(hex)  --异或校验\n    local len = string.len(hex)/2\n    local pp = 0\n    for i =0,len-1 do\n        local bi = iota.hexToByte(hex,i,'B')\n        pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n    end\n    return pp\nend 	INLINE	2017-09-12 16:06:31.037+08	2019-12-13 16:03:17.069+08	2017-09-12	\N
ea9ac263-3f91-4260-b341-02cc1811e8b3	fs-TOILET	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    local moduleNoid = device.uplink.props.id or device.uplink.props.module\n    log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\nend\n\nonData = function(req)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local moduleNoid = device.uplink.props.id or device.uplink.props.module --模块 通道 优先接口获取\n    log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\n    local bodyStr = HextoStr(req)\n    log.debug('http_test [%s] hex.Body=%s ', moduleNoid, bodyStr)\n    local body = json.decode(bodyStr)\n    if body ~= '' and body ~= nil then\n        local vistorData = {} --人流量数据\n        --测试用\n        local sn = body.sn\n        local time = body.time\n        --log.debug("http_test 原始male=%s type=%s",json.encode(body.male),type(body.male))\n        local male_T = {}\n        local male_weather = {}\n        local male_extension = {}\n        local ismaleWeather = false\n        male_T = body.male\n        if male_T ~= nil then\n            --log.debug("http_test male=%s type=%s",json.encode(male),type(male))\n            vistorData['male_in'] = male_T['in']\n            --log.debug("http_test male_in=%s [%s]",male_in,type(male_in))\n            vistorData['male_out'] = male_T['out']\n            vistorData['male_stay'] = male_T['stay']\n            --log.debug("http_test male_in=%s male_out=%s male_stay=%s",male_in,male_out,male_stay)\n            male_extension = male_T['extension']\n\n            if male_extension ~= nil and male_extension['temperature'] ~= nil then\n                 log.debug('http_test [%s] 男厕环境 =%s', moduleNoid, json.encode(male_extension))\n                male_weather['temperature'] = tonumber(male_extension['temperature'])\n        \t\t--if sn=='3031904220001' then --八月银湖特殊处理\n                --    male_weather['temperature']=26+math.random(1,30)*0.1\n               -- end\n                male_weather['humidity'] = tonumber(male_extension['humidity'])\n                male_weather['NH3'] = tonumber(male_extension['NH3'])--22\n        \t\tif sn=='3031904100001' then --象湖超一类公厕 特殊处理\n                    male_weather['NH3']=22\n                end\n        \t\tif sn=='2001812170057' then --江西澄碧湖超一类公厕（男） 特殊处理\n                    male_weather['NH3']=22\n                end\n                if male_weather['NH3'] ~= nil then\n                    ismaleWeather = true\n                end\n            else\n                -- log.debug('http_test [%s] 男厕环境 无环境数据', moduleNoid)\n            end\n        end\n\n        --log.debug("http_test 原始female=%s type=%s",json.encode(body.female),type(body.female))\n        local female_T = {}\n        local female_weather = {}\n        local female_extension = {}\n        local isfemaleWeather = false\n        female_T = body.female\n        if female_T ~= nil then\n            vistorData['female_in'] = female_T['in']\n\n            vistorData['female_out'] = female_T['out']\n            vistorData['female_stay'] = female_T['stay']\n            --log.debug('http_test [%s] vistorData=%s', moduleNoid, json.encode(vistorData))\n            -- log.debug("http_test female_in=%s female_out=%s female_stay=%s",female_in,female_out,female_stay)\n            female_extension = female_T['extension']\n            --log.debug('http_test [%s] female_extension=%s type=%s', moduleNoid, json.encode(female_extension), type(female_extension))\n\n            if female_extension ~= nil and female_extension['temperature'] ~= nil then\n                 log.debug('http_test [%s][sn=%s] 女厕环境female_T =%s', moduleNoid, sn,json.encode(female_extension))\n                female_weather['temperature'] = tonumber(female_extension['temperature'])\n        \t\t--if sn=='3031904220001' then  --八月银湖特殊处理\n                 --   female_weather['temperature']=26+math.random(1,30)*0.1\n               -- end\n                female_weather['humidity'] = tonumber(female_extension['humidity'])\n                female_weather['NH3'] = tonumber(female_extension['NH3'])--12\n        \t\tif sn=='3031904100001' then --象湖超一类公厕 特殊处理\n                    female_weather['NH3']=12\n                end\n        \t\tif sn=='2001812290021' then --江西澄碧湖超一类公厕（女） 特殊处理\n                    female_weather['NH3']=12\n                end\n                if female_weather['NH3'] ~= nil then\n                    isfemaleWeather = true\n                end\n            else\n                --log.debug('http_test [%s] 女厕环境 无环境数据 female_extension=%s', moduleNoid, json.encode(female_extension))\n            end\n        end\n\n        local recordtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(time)))\n        --遍历设备 获取数据\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if device.dnlinks[1].devices ~= nil then\n            --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n            for index, child in pairs(device.dnlinks[1].devices) do\n                --log.debug("http_test [%s] child=%s",moduleNoid,json.encode(child))\n                local deviceId = child.id\n                --判断设备类型\n                local pitIDstr\n                local senseoType = child.props.sensortype --获取设备类型\n                local sensorPostion = child.props.postion\n                --log.debug('http_test [%s] senseoType=%s sensorPostion=%s', moduleNoid, senseoType, sensorPostion)\n                --男厕坑位状态\n                if senseoType == 'pit' and sensorPostion == 'male' then\n                    --女厕坑位状态\n                    pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n                    --log.debug('http_test [%s]  男厕坑 male_extension=%s[%s]', moduleNoid, json.encode(male_extension), json.encode(male_extension) ~= '{}')\n                    -- local pitstate_m=male_extension[pitIDstr]\n\n                    if json.encode(male_extension) ~= '{}' and male_extension[pitIDstr] ~= nil then\n                        local data1 = {\n                            data = {\n                                pitstate = male_extension[pitIDstr]\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        -- log.debug("http_test 男厕坑pitIDstr[%s]=%s",pitIDstr,pitstate_m)\n                        table.insert(out.data, data1)\n                    end\n                elseif senseoType == 'pit' and sensorPostion == 'female' then\n                    pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n                    --log.debug('http_test [%s]  女厕坑 female_extension=%s[%s]', moduleNoid, json.encode(female_extension), json.encode(female_extension) ~= '{}')\n                    -- local pitstate_w=female_extension[pitIDstr]\n                    if json.encode(female_extension) ~= '{}' and female_extension[pitIDstr] ~= nil then\n                        local data1 = {\n                            data = {\n                                pitstate = female_extension[pitIDstr]\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 女厕坑pitIDstr[%s]=%s data1=%s', moduleNoid, pitIDstr, pitstate_w, json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                elseif senseoType == 'vistors' then --人流量\n                    -- statements\n                    pitIDstr = child.uplink.props.pitid --人流量\n                    --log.debug('http_test [%s] 人流量模块通道vistorData[male_in]~=nil=%s', moduleNoid, vistorData['male_in'] ~= nil)\n                    if vistorData['male_in'] ~= nil and sensorPostion == 'male' then\n                        local data2 = {\n                            data = {\n                                male_in = vistorData['male_in'],\n                                male_out = vistorData['male_out'],\n                                male_stay = vistorData['male_stay'],\n                                female_in = 0,\n                                female_out = 0,\n                                female_stay = 0\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 人流量模块通道male_data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    elseif vistorData['female_in'] ~= nil and sensorPostion == 'female' then\n                        local data2 = {\n                            data = {\n                                female_in = vistorData['female_in'],\n                                female_out = vistorData['female_out'],\n                                female_stay = vistorData['female_stay'],\n                                male_in = 0,\n                                male_out = 0,\n                                male_stay = 0\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 人流量模块通道female_data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    elseif vistorData['female_in'] ~= nil and vistorData['male_in'] ~= nil then\n                        local data2 = {\n                            data = vistorData,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    end\n                elseif senseoType == 'weather' then --厕所环境\n                    --log.debug('http_test [%s] 环境模块通道 ismaleWeather=%s,isfemaleWeather=%s,sensorPostion=%s', moduleNoid, ismaleWeather, isfemaleWeather, sensorPostion)\n                    local weatherData = {}\n                    if ismaleWeather and (sensorPostion == 'male' or sensorPostion == 'public') then\n                        --weatherData=male_weather\n                        local data1 = {\n                            data = male_weather,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n                        table.insert(out.data, data1)\n                    elseif isfemaleWeather and (sensorPostion == 'female' or sensorPostion == 'public') then\n                        --weatherData=female_weather\n                        local data1 = {\n                            data = female_weather,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        --log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n                        table.insert(out.data, data1)\n                    else\n                        -- log.debug('http_test [%s] 环境模块通道 无匹配环境数据,sensorPostion=%s', moduleNoid,sensorPostion)\n                    end\n                end\n            end\n        else\n            --log.debug('http_test [%s]  subdevices是nil', moduleNoid)\n        end\n    else\n        -- statements\n        out.result = {code = 3009, msg = '上报数据为空'}\n    end -- statements\n\n    ackHttp = {type = 'http', code = 200}\n    ctx:asend(ackHttp)\n\n    log.debug('http_test [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n	INLINE	2018-10-26 14:54:18.585+08	2020-09-14 14:08:16.078+08	2018-10-26	\N
b9e32a9e-36d5-4b15-baca-567f42a0f45b	新协议	\N		1.0	f58d1dc4-346b-44b0-8151-837508852c77	f58d1dc4-346b-44b0-8151-837508852c77	f	f58d1dc4-346b-44b0-8151-837508852c77	Lua	function start(a)  \n    local m = a[1];  \n    local mIndex = 1;  \n    for i,v in ipairs(a) do  \n        if v>m then  \n            m = v;  \n            mIndex = i;  \n        end  \n    end  \n  \n    return "01,01,01" \nend 	INLINE	2018-03-07 11:44:21.734+08	2018-05-22 16:31:10.331+08	2018-03-07	\N
4c09e571-5bca-4caa-9ee5-379594a29059	hc_1403	\N	基泰集成箱贴牌华测（华鉴）	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n        log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n        log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n      \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n        \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t           \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n            log.debug("hc_1403 模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian)      \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian)      \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析=%s",moduleNo,channelNo,resp)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("hc_1403 subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlocal resultData =json.encode(out)\n    log.debug("hc_1403  out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n    if ErrorCode then     \n \n        \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n        local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是：freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n        log.debug("hc_1403:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块：公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency*Frequency/1000.0  --经过厂家确认  公式带入的是模数\n\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\t--end\n        \n       \n       \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n                  \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 25 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length',moduleId,channelId)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败：Hex CMD False：错误码=1003',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('hc_1403:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend	INLINE	2018-03-13 17:28:25.833+08	2018-10-19 15:46:04.458+08	2018-03-13	\N
c90b9b4d-c5d8-4946-8f3d-8f3928c07f73	CLAA噪声	\N		2.33	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	-- 测试数据:\n-- 80018402000600290207e1081c130100010000001d00001e500001150000008608004294c5a842629be4427e04c000d28c3a76\nstart=function()\n    log.debug("LUA:start ")\nend\n\n-- 收到数据\nonData=function(data)\n    --print("LUA:onData",data) \n    local len=string.len(data)\n    local r=nil\n    if len == 102 then\n        r=parseNoise(data)\n    elseif len==50 then\n        r=parseWakeup(data)\n    else\n        r={node = string.sub(data,1,4)}\n    end\n    result={}\n    result.data = r\n    result.type=1\n    local msg = json.encode(result)\n    log.debug("result:%s",msg)\n    ctx:notify(msg)\nend\n\nparseNoise=function(data)\n    -- 51长度: 头 25, 数据24, 尾2\n    local node = string.sub(data,1,4)\n    local Lmax = iota.hexToFloat(data,25+9,'B');\n    local Lmin = iota.hexToFloat(data,25+13,'B');\n    local Laeq = iota.hexToFloat(data,25+17,'B');\n    return {node=node, lmax=Lmax,lmin=Lmin,laeq=Laeq}\nend\n\nparseWakeup=function(data)\n    local node = string.sub(data,1,4)\n    local power = iota.hexToByte(data,10,'B');\n    local join  = iota.hexToShort(data,17,'B');\n    return {node=node,power=power,join=join}\nend\n\n\n	INLINE	2017-08-28 16:25:26.952+08	2017-09-05 11:46:54.933+08	2017-08-19	\N
6ea8f5c8-9394-4626-a6cf-1816ec45201d	KRK_CO_2504	\N		1.0	26239c31-9c6a-4328-a8e8-625102c55e2d	26239c31-9c6a-4328-a8e8-625102c55e2d	f	26239c31-9c6a-4328-a8e8-625102c55e2d	Lua	--[[\n协议号: 2504;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "KRK_CO_2504.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n  -- 2204000000027698   moduleId=34\n  --"Concentration": 138\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x02, BE);\t\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  220404008A0000C8AC  浓度138   moduleId=34\n--原始数据  \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n  if string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\t\t\t\t\n    log.debug("KRK_CO_2504 数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n        local Concentration = iota.hexToShort(data, 3,'B');\n        log.debug("KRK_CO_2504 浓度等于:%s",Concentration)\n\t\tlog.debug("KRK_CO_2504 设备原型等于:%s",json.encode(device))\n\t\tout.data = {\n\t\tconcentration=Concentration\n\t\t};\n    end\n\t return json.encode(out)\nend\n	INLINE	2017-09-04 19:44:14.653+08	2018-07-03 19:42:21.109+08	2017-09-02	\N
e3ca2ca2-1556-415d-9001-4d7d88f2f3d1	jz_Inclination_1526	\N		1.0	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	f	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	Lua	--//01 协议文档/6月第3周/西安精准测控有限责任公司/倾角传感器/PM-TSII-D(MODBUS).pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jz_Inclination_1526", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x06, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--01030c4145704ac2631eb841C3A5E3C53A\n--moduleId=1\n--"angleX": 12.339914,\n--"angleY": -56.779999,\n--"temp": 24.455999\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local angleX = iota.hexToFloat(hex,3,'B');\n        local angleY=iota.hexToFloat(hex,7,'B');\n        local temp=iota.hexToFloat(hex,11,'B');\n        out.data = {\n            angleX = angleX, \n\t\t\tangleY = angleY,\n            temp = temp\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 17  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-12-07 11:36:05.367+08	2018-02-28 18:32:12.191+08	2017-12-07	\N
f57a3855-220e-4403-961c-ffe49145a71c	hrck_pressure_8066	\N	8066	1.0	df6e436e-e4a6-4b25-b1c7-175209753c0f	df6e436e-e4a6-4b25-b1c7-175209753c0f	f	df6e436e-e4a6-4b25-b1c7-175209753c0f	Lua	start=function()\n    log.debug("start hrck_pressure_2.lua , ctx= %s",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tlocal moduleNo=device.uplink.props.module \n    buff=iota.appendHexByte(buff, moduleNo, endian)         \n    buff=iota.appendHexByte(buff, 4, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)  \n\n    log.debug(" hrck_pressure_2 ssend %s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug(" hrck_pressure_2 recieve %s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local moduleStr=iota.hexToByte(hex,0,'B')\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local pressure = iota.hexToFloat(hex,3,'B')\n        local temperature=iota.hexToFloat(hex,7,'B')\n       \n        out.data = {\n            pressure=pressure,\n            temperature=temperature\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('hrck_pressure_2 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('hrck_pressure_2 数据校验通过')\n    return true\n--crc\nend\n	INLINE	2018-08-07 15:30:08.063+08	2018-08-10 17:10:08.984+08	2018-08-07	\N
fda4d6b7-a716-42c7-bf9f-61a02a025878	shjy_acqunit_1700	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('shjy_acqunit_1700   device=%s', json.encode(device))\n    local buff = ''\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '0300000006'\n    buff = iota.appendHexCrc(buff, 'L', 0)\n\n    local result = '{}'\n    --第一次发送\n    ok1, resp1 = ctx:ssend(buff, 5000)\n\n    if ok1 then\n        local ErrorCode1 = IsValid(resp1, moduleNo)\n        if ErrorCode1 then\n            result = unmarshall(resp, moduleNo)\n        else\n            -- statements\n            --第二次下发\n            ctx:sleep(5)\n            ok2, resp2 = ctx:ssend(buff, 15000)\n\n            if ok2 then\n                result = unmarshall(resp2, moduleNo)\n            else\n                --\n                local errout = {\n                    data = {},\n                    result = {},\n                    type = 2\n                }\n                errout.result = {code = 1001, msg = '超时'}\n                result = json.encode(errout)\n            end\n        end\n    end\n\n    log.debug('shjy_acqunit_1700 m=%s,result=%s', moduleNo, result)\n    ctx:done(result)\nend\n--140300000006c70d\n--14030c851d45185864451879b745168a4a\n\nunmarshall = function(hex, moduleNoStr)\n    log.debug('shjy_acqunit_1700 m=%s, recv =%s', moduleNoStr, hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        for i = 1, 3, 1 do\n            --local subDataHex_ = string.sub(hex, 7 + (i-1) * 8, 7 + (i-1) * 8+7)\n            local subDataHex_H = string.sub(hex, 7 + (i - 1) * 8, 7 + (i - 1) * 8 + 3)\n            local subDataHex_L = string.sub(hex, 7 + (i - 1) * 8 + 4, 7 + (i - 1) * 8 + 7)\n            subDataHex = subDataHex_L .. subDataHex_H\n            local freq = iota.hexToFloat(subDataHex, 0, 'B')\n\t\t\t if  freq>500 then\n            local childDevice = getDeviceInfo(moduleNoStr, i)\n            --\n            local deviceId\n            if childDevice ~= nil then\n                deviceId = childDevice.id\n\n                if childDevice.uplink.capabilities[1].formula.metaid == 'aa5798ad-a0d5-4e40-93b6-af8ae2dfe86c' then --振弦公式 不带温度 metaid\n                    local k = childDevice.uplink.capabilities[1].formula.props.K\n                    local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\n                    log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s：公式参数=%s,%s', moduleNoStr, i, K, Fo)\n                    if k == nil or f0 == nil then\n                        Phy = nil\n                        log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s：公式参数无效=%s,%s', moduleNoStr, i, K, Fo)\n                    else\n                        Phy = k * (freq ^ 2 - f0 ^ 2)\n                        log.debug('shjy_acqunit_1700模块号=%s,通道号=%s Phy=%s,freq=%s', moduleNoStr, i, Phy, freq)\n                    end\n                end\n\n                local data1 = {\n                    data = {\n                        rawValue = tonumber(string.format('%5.3f', freq)),\n                        physicalvalue = tonumber(string.format('%5.3f', Phy))\n                    },\n                    device = deviceId,\n                    type = 1\n                }\n\t\t\n\t\t\t\t\n\t\t\t\t\n                table.insert(out.data, data1)\n            else\n                log.debug('shjy_acqunit_1700(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n            end\n\t\t end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    if data == nil or string.len(data) / 2 ~= 17 then\n        errormsg = string.format('无效的数据长度=%s≠17', string.len(data) / 2)\n        errcode = 1002\n        return false\n    end\n\n    local cmd = string.sub(data, 3, 4)\n    if cmd ~= '03' then\n        errormsg = string.format('无效的数据类型=%s≠03', cmd)\n        errcode = 1003\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 0, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("shjy_acqunit_1700 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n            local channelStrCheck = child.uplink.props.channel\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n                log.debug('shjy_acqunit_1700  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('shjy_acqunit_1700  m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\n	INLINE	2019-05-22 10:35:56.688+08	2019-08-26 10:23:06.046+08	2019-05-22	\N
0472653c-720b-4ca7-ae8e-a16b9ed01087	GZMXY	\N		1.0	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	f	36b70d6d-c974-4742-9257-b555027d36cd	Lua	onData=function (hex)\n\t--主动上传式\n    ok=ctx:asend("010203")\n\tlog.debug("GZM2018  Received=>%s",hex)\n    log.debug("GZM2018  数据接收长度=%s",string.len(hex))\nend	INLINE	2018-07-31 09:17:22.659+08	2018-07-31 09:29:44.319+08	2018-07-31	\N
b14dd836-5544-48c0-89f0-9fd127a71905	FS-GC-Test	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\nend\n\nonData =\n    function(hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local moduleNoid = device.uplink.props.id --模块 通道 优先接口获取\n    log.debug('http_test [%s] device =%s', moduleNoid, json.encode(device))\n    --log.debug('http_test [%s] hex.Body=%s ', moduleNoid, hex.Body)\n\n    local body = json.decode(hex.Body)\n    if body ~= '' and body ~= nil then\n        local vistorData = {} --人流量数据\n        --测试用\n        local sn = body.sn\n        local time = body.time\n        --log.debug("http_test 原始male=%s type=%s",json.encode(body.male),type(body.male))\n        local male_T = {}\n        local male_weather = {}\n        local male_extension = {}\n        local ismaleWeather = false\n        male_T = body.male\n        if male_T ~= nil then\n            --log.debug("http_test male=%s type=%s",json.encode(male),type(male))\n            vistorData['male_in'] = male_T['in']\n            --log.debug("http_test male_in=%s [%s]",male_in,type(male_in))\n            vistorData['male_out'] = male_T['out']\n            vistorData['male_stay'] = male_T['stay']\n            --log.debug("http_test male_in=%s male_out=%s male_stay=%s",male_in,male_out,male_stay)\n            male_extension = male_T['extension']\n\n            if male_extension ~= nil and male_extension['temperature'] ~= nil then\n                male_weather['temperature'] = tonumber(male_extension['temperature'])\n                male_weather['humidity'] = tonumber(male_extension['humidity'])\n                male_weather['NH3'] = tonumber(male_extension['NH3'])\n                if male_weather['NH3'] ~= nil then\n                    ismaleWeather = true\n                end\n\n                log.debug('http_test [%s] 男厕环境 =%s', moduleNoid, json.encode(male_weather))\n            else\n                log.debug('http_test [%s] 男厕环境 无环境数据', moduleNoid)\n            end\n        end\n\n        --log.debug("http_test 原始female=%s type=%s",json.encode(body.female),type(body.female))\n        local female_T = {}\n        local female_weather = {}\n        local female_extension = {}\n        local isfemaleWeather = false\n        female_T = body.female\n        if female_T ~= nil then\n            vistorData['female_in'] = female_T['in']\n\n            vistorData['female_out'] = female_T['out']\n            vistorData['female_stay'] = female_T['stay']\n            log.debug('http_test [%s] vistorData=%s', moduleNoid, json.encode(vistorData))\n            -- log.debug("http_test female_in=%s female_out=%s female_stay=%s",female_in,female_out,female_stay)\n            female_extension = female_T['extension']\n            log.debug('http_test [%s] female_extension=%s type=%s', moduleNoid, json.encode(female_extension), type(female_extension))\n\n            if female_extension ~= nil and female_extension['temperature'] ~= nil then\n                female_weather['temperature'] = tonumber(female_extension['temperature'])\n                female_weather['humidity'] = tonumber(female_extension['humidity'])\n                female_weather['NH3'] = tonumber(female_extension['NH3'])\n                if female_weather['NH3'] ~= nil then\n                    isfemaleWeather = true\n                end\n\n                log.debug('http_test [%s] 女厕环境 =%s', moduleNoid, json.encode(female_weather))\n            else\n                log.debug('http_test [%s] 女厕环境 无环境数据 female_extension=%s', moduleNoid, json.encode(female_extension))\n            end\n        end\n\n        local recordtime = os.date('%Y-%m-%dT%H:%M:%S+8:00', (tonumber(time)))\n        --遍历设备 获取数据\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if device.dnlinks[1].devices ~= nil then\n            --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n            for index, child in pairs(device.dnlinks[1].devices) do\n                --log.debug("http_test [%s] child=%s",moduleNoid,json.encode(child))\n                local deviceId = child.id\n                --判断设备类型\n                local pitIDstr\n                local senseoType = child.props.sensortype --获取设备类型\n                local sensorPostion = child.props.postion\n                log.debug('http_test [%s] senseoType=%s sensorPostion=%s', moduleNoid, senseoType, sensorPostion)\n                --男厕坑位状态\n                if senseoType == 'pit' and sensorPostion == 'male' then\n                    --女厕坑位状态\n                    pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n                    log.debug('http_test [%s]  男厕坑 male_extension=%s[%s]', moduleNoid, json.encode(male_extension), json.encode(male_extension) ~= '{}')\n                    -- local pitstate_m=male_extension[pitIDstr]\n\n                    if json.encode(male_extension) ~= '{}' and male_extension[pitIDstr] ~= nil then\n                        local data1 = {\n                            data = {\n                                pitstate = male_extension[pitIDstr]\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        -- log.debug("http_test 男厕坑pitIDstr[%s]=%s",pitIDstr,pitstate_m)\n                        table.insert(out.data, data1)\n                    end\n                elseif senseoType == 'pit' and sensorPostion == 'female' then\n                    pitIDstr = child.uplink.props.pitid --坑位号 通道 优先接口获取\n\n                    log.debug('http_test [%s]  女厕坑 female_extension=%s[%s]', moduleNoid, json.encode(female_extension), json.encode(female_extension) ~= '{}')\n                    -- local pitstate_w=female_extension[pitIDstr]\n                    if json.encode(female_extension) ~= '{}' and female_extension[pitIDstr] ~= nil then\n                        local data1 = {\n                            data = {\n                                pitstate = female_extension[pitIDstr]\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 女厕坑pitIDstr[%s]=%s data1=%s', moduleNoid, pitIDstr, pitstate_w, json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                elseif senseoType == 'vistors' then --人流量\n                    -- statements\n                    pitIDstr = child.uplink.props.pitid --人流量\n                    log.debug('http_test [%s] 人流量模块通道vistorData[male_in]~=nil=%s', moduleNoid, vistorData['male_in'] ~= nil)\n                    if vistorData['male_in'] ~= nil and sensorPostion == 'male' then\n                        local data2 = {\n                            data = {\n                                male_in = vistorData['male_in'],\n                                male_out = vistorData['male_out'],\n                                male_stay = vistorData['male_stay']\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    elseif vistorData['female_in'] ~= nil and sensorPostion == 'female' then\n                        local data2 = {\n                            data = {\n                                female_in = vistorData['female_in'],\n                                female_out = vistorData['female_out'],\n                                female_stay = vistorData['female_stay']\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    else\n                        local data2 = {\n                            data = vistorData,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 人流量模块通道data2=%s', moduleNoid, json.encode(data2))\n                        table.insert(out.data, data2)\n                    end\n                elseif senseoType == 'weather' then --厕所环境\n                    log.debug('http_test [%s] 环境模块通道 ismaleWeather=%s,isfemaleWeather=%s,sensorPostion=%s', moduleNoid, ismaleWeather, isfemaleWeather, sensorPostion)\n                    local weatherData = {}\n                    if ismaleWeather and (sensorPostion == 'male' or sensorPostion == 'public') then\n                        --weatherData=male_weather\n                        local data1 = {\n                            data = male_weather,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n                        table.insert(out.data, data1)\n                    elseif isfemaleWeather and (sensorPostion == 'female' or sensorPostion == 'public') then\n                        --weatherData=female_weather\n                        local data1 = {\n                            data = female_weather,\n                            device = deviceId,\n                            type = 1,\n                            time = recordtime\n                        }\n                        log.debug('http_test [%s] 环境模块通道data1=%s', moduleNoid, json.encode(data1))\n                        table.insert(out.data, data1)\n                    else\n                        log.debug('http_test [%s] 环境模块通道 无匹配环境数据', moduleNoid)\n                    end\n                end\n            end\n        else\n            log.debug('http_test [%s]  subdevices是nil', moduleNoid)\n        end\n    else\n        -- statements\n        out.result = {code = 3009, msg = '上报数据为空'}\n    end -- statements\n\n    log.debug('http_test [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n    ctx:notify(json.encode(out))\nend	INLINE	2019-02-21 10:09:01.782+08	2019-05-17 14:08:43.943+08	2019-02-21	\N
2a75ac49-75b5-4476-9120-9aaacf395308	dahuaMeter	\N		1.0	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	Lua	get	INLINE	2019-11-11 15:20:44.513+08	2019-11-11 15:20:44.513+08	2019-11-11	\N
81f86e48-a3c7-4867-8e7f-cd9b620bf7af	fs_weight_9804	\N	北京欧乐科技有限公司	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart = function()\n    log.debug('start %s', 'fs_weight_9804.lua')\n  \n   -- local tt='FF90001B570007D001010000000001BD000202010038010038BD0038000038';\n    --local xor=string.format('%02x',iota.hexCheckXor(tt,4,31))\n   --log.debug('应答1 respStr=%s',xor)\n  --ctx:asend('03040506',15000)\nend\n\ngetAckTimeResponse=function()\n  local dataTime=os.date("%Y%m%d%H%M%S", os.time())--getDateTimeHexStr()\n   local ackResp='ff92000800'..dataTime\n  --log.debug('应答ackResp=%s',ackResp)\n  --local sampleStr=string.lower('FF90001B580007D00101000000000118000202010007010004180007180004')\n  local respStr=ackResp..string.format('%02X',iota.hexCheckXorSum(ackResp,4,string.len(ackResp)/2))\n  --log.debug('fs_weight_9804  应答1 respStr=%s',respStr)\n  return respStr\n end\n\n--FF90001B570007D001010000000001BD000202010038010038BD003800003881\nonData = function(hex)\n    local out = {\n        data = {},\n        result = {}\n    }\n\t\n\tlocal isValidData=true\n\t\n    local IDX_Start = 0 -- 起始指令\n    local IDX_CMD = 1 -- 命令字\n    local IDX_DataLen = 2 -- 数据长度\n\n    local IDX_year = 6\n    local IDX_month = 8\n    local IDX_day = 9\n    local IDX_hour = 10\n    local IDX_minute = 11\n    local IDX_second = 12\n\n    local IDX_UpWeight = 13 -- 总重超重\n\n    local IDX_MoudleID = 14 -- 模块号(车道号)\n    local IDX_Speed = 15 -- 速度\n    -- local  IDX_Acceleration = 16; -- 加速度\n\n    local IDX_axeisCount = 17 -- 轴数\n    local IDX_axeisGroupCount = 18 -- 轴组数\n    -- local  IDX_GrWeight = 46; -- 总重\n    -- local  IDX_LimitWeight = 55; -- 总重超重\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local crossroad = iota.hexToByte(hex, IDX_MoudleID, 'B') -- 模块号(车道号)\n        log.debug('fs_weight_9804 crossroad=%s', crossroad)\n\n        local carspeed = iota.hexToByte(hex, IDX_Speed, 'B') -- 速度\n\n        local axisNum = iota.hexToByte(hex, IDX_axeisCount, 'B') -- 轴数\n        local axisGroupnum = iota.hexToByte(hex, IDX_axeisGroupCount, 'B') -- 轴组数\n\n        local IDX_AxieWeight1 = 18 + 3 * axisGroupnum + 1 -- 轴一重量\n        local axisSpeed = {}\n        local axisWeight = {}\n        local grossWeight = 0\n        --log.debug("fs_weight_9804  轴数=%s",axisNum)\n        for i = 1, axisNum, 1 do\n            axisSpeed[i] = iota.hexToByte(hex, IDX_AxieWeight1, 'B')\n                 --log.debug("fs_weight_9804  轴速[%s]=%s",i,axisSpeed[i])\n            axisWeight[i] = 0.1*iota.hexToShort(hex, IDX_AxieWeight1 + 1, 'B')  --单位T\n      \t\taxisWeight[i]=tonumber(string.format("%0.3f",axisWeight[i]))\n            grossWeight = grossWeight + axisWeight[i]\n           -- log.debug("fs_weight_9804  轴重[%s]=%s",i,axisWeight[i])\n            IDX_AxieWeight1=IDX_AxieWeight1+3\n        end\n        grossWeight=tonumber(string.format("%0.3f",grossWeight))\n\n        local year = iota.hexToUShort(hex, IDX_year, 'B')\n        local month = iota.hexToByte(hex, IDX_month, 'B')\n        local day = iota.hexToByte(hex, IDX_day, 'B')\n        local hour = iota.hexToByte(hex, IDX_hour, 'B')\n        local minute = iota.hexToByte(hex, IDX_minute, 'B')\n        local second = iota.hexToByte(hex, IDX_second, 'B')\n        --log.debug('fs_weight_9804 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n        local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n        --log.debug('fs_weight_9804 timenum=%s', timenum)\n        local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n        log.debug('fs_weight_9804 recordTime=%s', recordTime)\n\n        local over = iota.hexToByte(hex, IDX_UpWeight, 'B')  --总重超重\n\n        --log.debug('fs_weight_9804 axieWeight=%s', json.encode(axisWeight))\n\n        ----\n\t\t\n\t\tlocal directionHans=device.props.direction\n\t\tlocal direction\n\t\tif(directionHans=="上桥") then\n\t\t  direction=0\n\t\t else\n\t\t direction=1\n\t\tend\n\t\t\n\t\t\n\t\t\n        out.data = {\n            crossRoad = tostring(crossroad),-- 模块号(车道号)\n            speed = tostring(carspeed),-- 速度\n            axisNum = tostring(axisNum), --轴数\n            grossWeight = tostring(grossWeight),--总重(轴重) T\n            overload = tostring(over),--总重超重\n            direction= tostring(direction),\n            axieWeight = json.encode(axisWeight),--轴重     T\n            axisSpeed= json.encode(axisSpeed)--轴速\n        }\n\n\t\t\n\t\t\n\t\t--判断数据是否在上下限之内。\n\t\t\n\t\tlocal WeightLimitUp=tonumber(device.props.WeightLimitUp)*0.001\n\t\tlocal WeightLimitDown=tonumber(device.props.WeightLimitDown)*0.001\n\t\tlocal SpeedLimitUp=tonumber(device.props.SpeedLimitUp)\n\t\tlocal SpeedLimitDown=tonumber(device.props.SpeedLimitDown)\n\t\t\n\t\t\n\t\tlog.debug("fs_weight_9804 开始校验[方向=%s] 车速%s范围[%s,%s]与车重%s范围[%s,%s]",direction,carspeed,SpeedLimitDown,SpeedLimitUp,grossWeight,WeightLimitDown,WeightLimitUp)\n\t\tif carspeed>SpeedLimitUp or carspeed<SpeedLimitDown  then\n\t\t    isValidData=false\n\t\t    out.data = {}\n            log.debug("fs_weight_9804 开始校验  车速=%s超限制[%s--%s]",carspeed,SpeedLimitDown,SpeedLimitUp)\n\t\t\t--out.result = {code = 1004, msg = string.format('车速=%s超限制[%s--%s]',carspeed,SpeedLimitDown,SpeedLimitUp)}\n\t\telseif grossWeight>WeightLimitUp or grossWeight<WeightLimitDown  then\n\t\t    isValidData=false\n\t\t    out.data = {}\n      \t log.debug("fs_weight_9804 开始校验  车重=%s超限制[%s--%s]",grossWeight,WeightLimitDown,WeightLimitUp)\n\t\t\t--out.result = {code = 1004, msg = string.format('车重=%s超限制[%s--%s]',grossWeight,WeightLimitDown,WeightLimitUp)}\n\t\tend\n       log.debug("fs_weight_9804  数据不超限=%s",json.encode(out))\n        --out.time = recordTime\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    --log.debug("fs_weight_9804 resultData=%s",resultData)\n    local buff=getAckTimeResponse()\n    ctx:asend(buff,15000)\n\tif isValidData==true then\n         --log.debug("fs_weight_9804   resultData数据发送")\n\t\tctx:notify(resultData)\n\tend\nend\n\nIsValid = function(data)\n    log.debug('fs_weight_9804 校验数据=%s', data)\n    if string.len(data) / 2 < 20 then\n        errormsg = string.format('返回数据报文 长度不满足要求[%s]',data)\n        errcode = 1002\n        return false\n    end\n    if string.lower(string.sub(data, 1, 4)) ~= 'ff90' then\n        errormsg = '数据报文 头 不是ff90'\n        errcode = 1003\n        return false\n    end\n    log.debug('fs_weight_9804 数据校验通过')\n    return true\n    --crc\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\nfunction unicode2gb2312(src)\n    local map_tb = {\n        ['冀'] = 'BCBD',\n        ['豫'] = 'D4A5',\n        ['云'] = 'D4C6',\n        ['辽'] = 'C1C9',\n        ['黑'] = 'BADA',\n        ['湘'] = 'CFE6',\n        ['皖'] = 'CDEE',\n        ['鲁'] = 'C2B3',\n        ['新'] = 'D0C2',\n        ['苏'] = 'CBD5',\n        ['浙'] = 'D5E3',\n        ['赣'] = 'B8D3',\n        ['鄂'] = 'B6F5',\n        ['桂'] = 'B9F0',\n        ['甘'] = 'B8CA',\n        ['晋'] = 'BDFA',\n        ['蒙'] = 'C3C9',\n        ['陕'] = 'C9C2',\n        ['吉'] = 'BCAA',\n        ['闽'] = 'C3F6',\n        ['贵'] = 'B9F3',\n        ['粤'] = 'D4C1',\n        ['青'] = 'C7E0',\n        ['藏'] = 'B2D8',\n        ['川'] = 'B4A8',\n        ['宁'] = 'C4FE',\n        ['琼'] = 'C7ED',\n        ['渝'] = 'D3E5',\n        ['京'] = 'BEA9',\n        ['津'] = 'BDF2',\n        ['沪'] = 'BBA6',\n        ['深'] = 'C9EE',\n        ['学'] = 'D1A7'\n    }\n    for k, v in pairs(map_tb) do\n        if v == string.format('%X', tonumber(src, 16)) then\n            return k\n        end\n    end\n    return ' '\nend	INLINE	2019-11-27 14:10:47.166+08	2020-04-16 09:56:11.032+08	2019-11-27	\N
e7ef3612-fa92-4001-848c-57da35f5af77	bdxk_displacement_87	\N		1.0	3bc407e4-dd38-4be8-9659-2f9aac78956a	3bc407e4-dd38-4be8-9659-2f9aac78956a	f	3bc407e4-dd38-4be8-9659-2f9aac78956a	Lua	--//D:\\SVN\\201902项目\\湖南北斗星空设备接入\\北斗星空自动化数据通信协议.pdf\nstart =\n    function()\n    log.debug('bdxk_displacement_8701  device=%s', json.encode(device))\n\n    local endian = 'B'\n    local buff = ''\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    log.debug('bdxk_displacement_8701 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n    buff = 'aa7510000e00'\n  \tbuff=buff..string.lower(moduleNo)\n    --buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. getDateTimeBCDStr()\n    local per_Len = string.len(buff) / 2\n    local checksum=iota.hexCheckXorSum(buff, 0, per_Len)\n  \n    buff = buff .. string.format('%02x',checksum)\n\n    log.debug('bdxk_displacement_8701,m=%s, send=%s', moduleNo, buff)\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n        ctx:done(result)\n    else\n        local errout = {\n            data = {},\n            result = {}\n        }\n        errout.result = {code = 1001, msg = '采集超时'}\n        ctx:done(errout)\n    end\nend\n--module=\t2868DA40010000D4\n--cmd=\t\tAA7510000E002868DA40010000D408011611015392\n--response= 557A100035002868DA40010000D4080116110153fff0130900001A151A15A6CCA6C51FD3A6B1E4B8D6BDEEBCC62D3232333036594833363031412027\n\n--"displacement": 48.74,\n--"length": 487.3,,\n--"temperature": -1.6\nunmarshall =\n    function(hex, moduleNoStr)\n    log.debug('bdxk_displacement_8701 m=%s, recv =%s', moduleNoStr, hex)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        local index = 14\n        local timeStr = string.sub(hex, index * 2 + 1, index * 2 + 12)\n        index = index + 6\n        local temperature_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n        local temperature = 0.1 * iota.hexToShort(hex, index, 'B') --getTemperature(temperature_hex, 0.1)\n\n        index = index + 2\n        local length_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)--测量值\n        index = index + 2\n\n        local displacement_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)--偏离值\n        index = index + 2\n        local frequency_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n        index = index + 2\n        local comp_frequency_hex = string.sub(hex, index * 2 + 1, index * 2 + 4)\n        index = index + 2\n        local unit_hex = string.sub(hex, index * 2 + 1, index * 2 + 8)\n        index = index + 4\n        local sensorType_hex = string.sub(hex, index * 2 + 1, index * 2 + 2)\n\n        --local unit\n        log.debug('timeStr=%s,temperature=%s,length=%s,displacement=%s,frequency=%s,comp_frequency=%s,unit_hex=%s,sensorType_hex=%s', timeStr, temperature_hex, length_hex, displacement_hex, frequency_hex, comp_frequency_hex, unit_hex,sensorType_hex)\n\n        --计算\n        local length = getData(length_hex, sensorType_hex)\n        local displacement = getData(displacement_hex, sensorType_hex)\n        out.data = {\n            length = tonumber(string.format('%0.3f', length)),\n            displacement = tonumber(string.format('%0.3f', displacement)),\n            temperature = tonumber(string.format('%0.3f',temperature))\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('bdxk_displacement_8701 m=%s,data=%s', moduleNoStr, json.encode(out))\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen ~= 60 then\n        errormsg = string.format('无效的数据长度=%s≠60', dataLen)\n        errcode = 1002\n        return false\n    end\n\n    local dataModule = string.sub(data, 13, 13 + 15)\n    if string.lower(deviceModule) ~= string.lower(dataModule) then\n        errormsg = string.format('无效的传感器编号=%s≠%s', dataModule, deviceModule)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\ngetDateTimeBCDStr = function()\n    --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n    local BCDdateStr = os.date('%y%m%d%H%M%S', os.time())\n    --print(string.format('BCDdateStr=%s',BCDdateStr))\n    local hexdateStr = ''\n    for i = 1, string.len(BCDdateStr), 2 do\n        local newHex = string.sub(BCDdateStr, i, i + 1)\n\n        hexdateStr = hexdateStr .. newHex\n        --print(string.format('i=%s,newHex=%s,hexdateStr=%s',i,newHex,hexdateStr))\n    end\n    return hexdateStr\nend\n\n--字符串ascii->字符\nhexToStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ngetTemperature = function(hexStr, k)\n    local checkIndex = string.sub(hexStr, 1, 1)\n    local result\n    if checkIndex == 'f' then\n        result = 0x10000 - tonumber(hexStr, 16)\n    else\n        result = tonumber(hexStr, 16)\n    end\n    return result * k\nend\n\ngetData = function(hexStr, sType)\n    local dotIndex = tonumber(string.sub(sType, 1, 1))\n    local result = tonumber(hexStr, 16) * math.pow(0.1, dotIndex)\n    return result\nend	INLINE	2019-02-19 16:33:44.174+08	2019-03-11 17:14:10.96+08	2019-02-19	\N
ccc136ea-7d44-4529-9bf0-7dfae8e1f59d	hd_httpMQTT1	\N	报警设备	1.0	fff3496c-71e7-4ca5-abe5-9de748ac5a63	fff3496c-71e7-4ca5-abe5-9de748ac5a63	f	fff3496c-71e7-4ca5-abe5-9de748ac5a63	Lua	\nstart = function()\n    log.debug('hd_httpMQTT1   device=%s', json.encode(device))\n\tlog.debug('hd_httpMQTT1   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n  \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hd_httpMQTT1', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hd_httpMQTT1 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\t\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t\tctx:asend(ack)\t\n\t\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['t']\n\tlog.debug('hd_httpMQTT1 [%s] 时间戳', tonumber(timeStamps))\n    local msg=bodypkg['a']\n\tlog.debug('hd_httpMQTT1 报警提示是%s ', msg)\n\t\n\t\n\t\n\n\t\tout.result={code = 70050001,msg=msg,time=timeStamps}\n        log.debug('hd_httpMQTT1 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\n   \nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend\n	INLINE	2019-11-07 10:40:07.656+08	2019-11-11 10:35:02.994+08	2019-11-07	\N
30a84127-5cf1-4023-822c-b9716b7ac0a9	mk_acqUnit_4001	\N	上海牧坤采集仪产品	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=", "mk_acqUint_4001.lua",json.encode(ctx.device))\nend\n\nonData=function(data)\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_acqUint_4001.lua",data)\n    local mouduleListlst ={}\n    --local i = 0\n    --for i = 0, string.len(data)/2-1 do --不明白为啥for循环\n        --while true do\n            --if iota.hexToByte(data,i,'B') == 0xAA then --Head\n               -- if string.len(data)/2 - i < 3 then break end\n                local length = iota.hexToByte(data,2,'B') + 5\n                --if length > string.len(data)/2 - i then break end\n                --local ErrorCode = IsValid(data)\n                --if ErrorCode ~= true then break end\n                local valCmd = iota.hexToByte(data,3,'B')\n                local moduleNo = iota.hexToByte(data,1,'B')\n                local modulenumber= tonumber(device.props.moduleId)\n                if moduleNo==modulenumber then\n                    if valCmd == 0x01 then --WindSpeed m/s\n                        --AA01030103EB34EA\n                        --"windSpeed": 10.03\n                        if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then --LenWindSpeed 8, data length 3\n                            local windspeed = iota.hexToShort(data,4,'B') /100.0\n                            \n                            out.data = {               \n                                windSpeed = windspeed\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x07  then --温湿度\n                        --AA01040703EB305E8B\n                        --"humi": 48,\n                        --"temp": 100.3\n                        if length == 9 and iota.hexToByte(data,2,'B') == 0x04 and moduleNo==modulenumber  then   \n                            local temp = iota.hexToShort(data,4,'B') / 10.0\n                            local humi = iota.hexToByte(data,6,'B') \n                            out.data = {               \n                                temp=temp,\n                                humi=humi\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x40 then --ValLvdt m\n                        --aa040340017a6832aa0503400a52a1\n                        --"lvdt": 3.78\n                        if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then \n                            local lvdt = iota.hexToShort(data,4,'B') /100.0\n                            out.data = {               \n                                lvdt = lvdt\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x03 then --° 三轴角度\n                        --aa0407030d660eb70000ad58\n                        --"xDegree": 3.43,\n                        --"yDegree": 3.767,\n                        --"zDegree": 0\n                        if length == 12 and iota.hexToByte(data,2,'B') == 0x07 and moduleNo==modulenumber then\n                            local xDegree = iota.hexToShort(data,4,'B') /1000.0\n                            local yDegree = iota.hexToShort(data,6,'B') /1000.0\n                            local zDegree = iota.hexToShort(data,8,'B') /1000.0\n                            out.data = {               \n                                xDegree = xDegree,\n                                yDegree = yDegree,\n                                zDegree = zDegree\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x08 then --mg 加速度\n                        --AA01030803EBE4E8\n                        --"accelertation": 1003\n                        if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then\n                            local accelertation = iota.hexToShort(data,4,'B')\n                            out.data = {               \n                                accelertation=accelertation\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x16 then --mg 加速度（三轴）\n                        --AA01071603EB03EB03EB79F9\n                        --"xAccelertation": 1003,\n                        --"yAccelertation": 1003,\n                        --"zAccelertation": 1003\n                        if length == 12 and iota.hexToByte(data,2,'B') == 0x07 and moduleNo==modulenumber then\n                            local xAccelertation = iota.hexToShort(data,4,'B')\n                            local yAccelertation = iota.hexToShort(data,6,'B')\n                            local zAccelertation = iota.hexToShort(data,8,'B')\n                            out.data = {               \n                                xAccelertation = xAccelertation,\n                                yAccelertation = yAccelertation,\n                                zAccelertation = zAccelertation\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x10 then --°\n                        --AA01051003EB03EB1111\n                        --"xDegree": 1.003,\n                        --"yDegree": 1.003\n                        if length == 10 and iota.hexToByte(data,2,'B') == 0x05 and moduleNo==modulenumber then\n                            local xDegree = iota.hexToShort(data,4,'B') / 1000.000\n                            local yDegree = iota.hexToShort(data,6,'B') / 1000.000\n                        \n                            out.data = {               \n                                xDegree = xDegree,\n                                yDegree = yDegree\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end    \n                    elseif valCmd == 0x05 then --℃  采集时间需要减 2h\n                        --AA01030503EB752B\n                        --"temp": 100.3\n                        if length == 8 and iota.hexToByte(data,2,'B') == 0x03 and moduleNo==modulenumber then\n                            local Temp = iota.hexToShort(data,4,'B') / 10.0\n                            out.data = {               \n                                temp=Temp\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                        local buff2 = 'AA0001E021E4' --下发接受返回命令\n                        ctx:asend(buff2)\n                    elseif valCmd == 0x41  then --液位 mm\n                        --AA01094100EB0000000000000000\n                        --"level": 235\n                        if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local level = iota.hexToShort(data,4,'B') \n                            out.data = {               \n                                level=level\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end          \n                    elseif valCmd == 0x06 and moduleNo==modulenumber then --湿度\n                        --AA010206309F90\n                        --"humi": 48\n                        if length == 7 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local humi =iota.hexToByte(data,4,'B') \n                            out.data = {               \n                                humi=humi\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end       \n                    elseif valCmd == 0x42  then -- ℃ 温度\n                        if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local Temp = iota.hexToShort(data,4,'B') \n                            out.data = {               \n                                temp=Temp\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end       \n                    elseif valCmd == 0x43  then --电压 mm\n                        --AA01094300EB0000000000000000\n                        --"votage": 235\n                        if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local votage = iota.hexToShort(data,4,'B') \n                            out.data = {               \n                                votage=votage\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end    \n                    elseif valCmd == 0x4a  then --风速\n                        --AA01094a03EB0000000000000000\n                        --"windSpeed": 100.3\n                        if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local windSpeed = iota.hexToShort(data,4,'B') / 10.0\n                            out.data = {               \n                                windSpeed=windSpeed\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    elseif valCmd == 0x4b  then ----风向\n                        --AA01094b03EB0000000000000000\n                        --"windDirection": 1.003\n                        if length == 14 and iota.hexToByte(data,2,'B') == 0x09 and moduleNo==modulenumber then\n                            local windDirection = iota.hexToShort(data,4,'B') / 1000.0\n                            out.data = {               \n                                windDirection=windDirection\n                            }\n                        else\n                            errcode = 1005\n                            errmsg = 'Unknow Error,code is not right'\n                            out.result = {code=errcode,msg=errmsg}\n                            out.data = {}\n                        end\n                    end\n                    local resultData =json.encode(out)\n                    log.debug("recv %s, ctx=%s", "mk_acqUint_4001.lua",json.encode(out))\n                    ctx:notify(resultData)\n                end\n\n            --end\n            --break\n        --end      \n    --end\nend\n\nIsValid=function(data)\n    if data == nil then\n        return false\n    end\n    --iota.checkPlusSum16\n\n    return true\n--crc\nend\n\nfunction split(s, delim)\n    if type(delim) ~= "string" or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n    local pos = string.find (s, delim, start, true) -- plain find\n        if not pos then\n          break\n        end\n\n        table.insert (t, string.sub (s, start, pos - 1))\n        start = pos + string.len (delim)\n    end\n    table.insert (t, string.sub (s, start))\n\n    return t\nend\n \nfunction roundOff(num, n)\n    if n > 0 then\n        local scale = math.pow(10, n-1)\n        return math.floor(num / scale + 0.5) * scale\n    elseif n < 0 then\n        local scale = math.pow(10, n)\n        return math.floor(num / scale + 0.5) * scale\n    elseif n == 0 then\n        return num\n    end\nend\n	INLINE	2017-08-24 16:07:17.577+08	2018-12-14 14:03:17.856+08	2017-08-22	\N
80333e13-97f8-4502-b053-ab8fc9e0ebbc	mingao_weather_1	\N	气象站	1.0	e09d681f-e39b-4915-8e87-af54bdd0e815	e09d681f-e39b-4915-8e87-af54bdd0e815	f	e09d681f-e39b-4915-8e87-af54bdd0e815	Lua	start=function()\n    log.debug("mingao_weather_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("mingao_weather_1.lua: Data=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --52533B323031352D30312D30312030303A30303B31303135313233343B3130303B32303135313233343B34303B3130303B343B373B413B303B31363B613B313030302E3B423B303B32393B633B3138303B423B313B33303B683B31302E303B423B323B33313B613B352E303B433B303B393B633B302E30313B443B303B333B613B37322E303B443B313B353B613B32352E30303B323034320D0A\n\n\n    local sData= toStrHex(hex)\n    log.debug("mingao_weather_1.lua: sData=%s",sData)\n    local spliteData = Split(sData,'\\t')\n    local temperature = tonumber(spliteData[6])\n    local CO2=tonumber(spliteData[3])\n    local humidity = tonumber(spliteData[5])\n    local radiation=tonumber(spliteData[4])\n    local dewpoint=tonumber(spliteData[7])\n    out.data = {                \n        temperature=temperature,\n        humidity=humidity,\n        radiation=radiation,\n        CO2=CO2,\n        dewpoint=dewpoint\n    }\n\n    local resultData =json.encode(out)\n    log.debug("mingao_weather_1: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n	INLINE	2018-07-04 14:55:48.523+08	2018-07-13 16:27:13.027+08	2018-07-04	\N
fd174c97-b010-47ac-a9fb-9436756cac7f	fs_tj_lf_station	\N		0.1	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n\tlog.debug("start fs_tj_lf_station device :%s",json.encode(device))\n\tlocal out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n\tlocal req = {\n\t\ttype= "http",\n\t\turl= device.uplink.props.uri,   --"http://data.linfeng-tech.com/restful/v1/business/runData",  \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n\n\tlocal authorization = getAuthorization()\n\tif authorization ~= nil and authorization ~="" then\n\t\treq.header["Authorization"] = authorization\n\t\tok,ack=ctx:ssend(req,4000)\n\t\tif ack.code==200 and ack.body ~="" then\n\t\t\tlog.debug("fs_tj_lf_station data= %s",ack.body)\n\t\t\tlocal datalist = json.decode(ack.body)\n\t\t\tfor index,data in pairs(datalist) do\n--\t\t\t\tlog.debug("fs_tj_lf_station subdata= %s",json.encode(data))\n\t\t\t\t\n\t\t\t\tlocal subdevice = getDevice(data.sn)\n        \t\tif subdevice~=nil then\n\t\t\t\t    --获取上次数据时间\n\t\t\t\t\tlocal r1,r1ok = redis.get(subdevice.id.."_endTime")  --获取上次记录时间\n\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\n\t\t\t\t\t\tlocal timenow=unixtimestamp(data.recordTime)\n\t\t\t\t\t\tendTime=timenum  --当前数据时间戳  全局 timenum\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station  beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\tlog.debug("fs_tj_lf_station  数据未刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tbreak\n                        else\n                       \t\tlog.debug("fs_tj_lf_station  数据刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(subdevice.id.."_endTime", tostring(beginTime))\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n--          \t\t\tlog.debug("fs_tj_lf_station subdevice= %s",json.encode(subdevice))\n          \t\t\tlocal subdata = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\trotationAngle=tonumber(string.format('%0.2f',data.rotationAngle)),\n\t\t\t\t\t\t\tallRotationAngle=tonumber(string.format('%0.2f',data.allRotationAngle)),\n\t\t\t\t\t\t\tradius=tonumber(string.format('%0.2f',data.radius)),\n\t\t\t\t\t\t\theight=tonumber(string.format('%0.2f',data.height)),\n\t\t\t\t\t\t\televationAngle=tonumber(string.format('%0.2f',data.elevationAngle)),\n\t\t\t\t\t\t\tloadValue=tonumber(string.format('%0.2f',data.loadValue)),\n\t\t\t\t\t\t\tsafeLoad=tonumber(string.format('%0.2f',data.safeLoad)),\n\t\t\t\t\t\t\ttorquePercent=tonumber(string.format('%0.2f',data.torquePercent)),\n\t\t\t\t\t\t\twindSpeed=tonumber(string.format('%0.2f',data.windSpeed)),\n\t\t\t\t\t\t\tobliquity=tonumber(string.format('%0.2f',data.obliquity)),\n\t\t\t\t\t\t\tdirectionAngle=tonumber(string.format('%0.2f',data.directionAngle)),\n\t\t\t\t\t\t\tstringFactor=data.stringFactor,\n\t\t\t\t\t\t\tpowerQuantity=data.powerQuantity,\n\t\t\t\t\t\t\tinputState=data.inputState,\n\t\t\t\t\t\t\twarning=data.warning,\n\t\t\t\t\t\t\talarm=data.alarm,\n\t\t\t\t\t\t\tpeccancy=data.peccancy,\n\t\t\t\t\t\t\tcontrolState=data.controlState\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttime=timenow,--unixtimestamp(data.recordTime),\n\t\t\t\t\t\ttype=1\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,subdata)\n\t\t\t\t\t--更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("fs_tj_lf_station redis更新 set lasttime ok  key=%s,value=%s",subdevice.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("fs_tj_lf_station redis不更新 ")\n\t\t\t\t\tend\n        \t\telse\n          \t\t\tlog.debug("fs_tj_lf_station not found subdevice= %s",data.sn)\n          \t\tend\n\t\t\tend\n\t\telse\n\t\t\tlog.warn("fs_tj_lf_station get data failure")\n\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t}\n\t\tend\t\t\n\telse\n\t\tlog.warn("fs_tj_lf_station 塔机接口认证失败")\n\t\tout.result={\n\t\t\tcode=1002,\n\t\t\tmsg="timeout",\n\t\t}\n\tend\n  \tlog.debug("fs_tj_lf_station out.data= %s",json.encode(out))\n\tctx:done(json.encode(out))\nend\n\n\n\n\n\ngetAuthorization =function()\n  log.debug("fs_tj_lf_station get authorization ")\n\tlocal authreq = {\n\t\ttype= "http",\n\t\turl=device.uplink.props.uri,  \n\t\tmethod="get",\n\t\tcontent="application/json",\n\t\theader={},\n\t}\n--  log.debug("fs_tj_lf_station req url= %s",authreq.url)\n\tlocal authOk,authAck=ctx:ssend(authreq,4000)\n \tlog.debug("fs_tj_lf_station authOk= %s,authAck=%s",authOk,json.encode(authAck))\n--\tlog.debug("fs_tj_lf_station Authenticate= %s",authAck.header["Www-Authenticate"])\n\tlocal str =authAck.header["Www-Authenticate"]\n\tstr = string.gsub(str, "%[Digest ", "{")\n\tstr = string.gsub(str, "%]", "}")\n\tstr = string.gsub(str, "%realm=", "\\"realm\\":")\n\tstr = string.gsub(str, "%qop=", "\\"qop\\":")\n\tstr = string.gsub(str, "%nonce=", "\\"nonce\\":")\n--\tlog.debug("fs_tj_lf_station str= %s",str)\n\tlocal obj = json.decode(str)\n \tlocal qop = obj["qop"]\n\tlocal realm = obj["realm"]\n\tlocal nonce = obj["nonce"]\n\t   \n\tlocal user=device.uplink.props.username\n\tlocal passwd=device.uplink.props.password\n\tlocal a1 = user..":"..realm..":"..passwd\n\ta1 = crypto.md5(a1)\n\tlocal a2 = "GET:".."/restful/v1/business/runData"\n\ta2 = crypto.md5(a2)\n\t\n\tlocal response =a1 .. ":"..nonce .. ":::" .. qop .. ":" .. a2\n\tresponse = crypto.md5(response)\n--\tlog.debug("fs_tj_lf_station md5(response)= %s",response)\n\tlocal auth = {\n\t\tusername=user,\n\t\trealm=realm,\n\t\tnonce=nonce,\n\t\turi="/restful/v1/business/runData",\n\t\tqop=qop,\n\t\tnc="",\n\t\tcnonce="",\n\t\tresponse=response, \n\t\topaque=""\n    }\n--\tlog.debug("fs_tj_lf_station auth= %s",json.encode(auth))\n\tlocal authstr = json.encode(auth)\n\tauthstr = string.gsub(authstr, "%:", "=")\n\tauthstr = string.gsub(authstr, "%\\"cnonce\\"", "cnonce")\n\tauthstr = string.gsub(authstr, "%\\"nc\\"", "nc")\n\tauthstr = string.gsub(authstr, "%\\"nonce\\"", "nonce")\n\tauthstr = string.gsub(authstr, "%\\"opaque\\"", "opaque")\n\tauthstr = string.gsub(authstr, "%\\"qop\\"", "qop")\n\tauthstr = string.gsub(authstr, "%\\"auth\\"", "auth")\n\tauthstr = string.gsub(authstr, "%\\"realm\\"", "realm")\n\tauthstr = string.gsub(authstr, "%\\"response\\"", "response")\n\tauthstr = string.gsub(authstr, "%\\"uri\\"", "uri")\n\tauthstr = string.gsub(authstr, "%\\"username\\"", "username")\n\tauthstr = string.gsub(authstr, "%{", "")\n\tauthstr = string.gsub(authstr, "%}", "")\n\tauthstr = "Digest " .. authstr   \n\tlog.debug("fs_tj_lf_station authstr= %s",authstr)\n\n\treturn authstr\nend\n\ngetDevice = function(moduleId)\n\t\n\tlocal subdevices=device.dnlinks[1].devices \n\tfor index,child in pairs(subdevices) do \n\t\tif child.uplink.props.module == moduleId then\n\t\tlog.debug("fs_tj_lf_station found the device %s,[%s]",moduleId,child.uplink.props.module)\n      \treturn child\n\t\telse\n\t\tlog.debug("fs_tj_lf_station not found the device %s,[%s]",moduleId,child.uplink.props.module)\n\t\tend\n\tend\n\tlog.debug("fs_tj_lf_station not found the device %s,[%s]",moduleId)\n\treturn nil\nend\n\n  --string split函数\nSplit=function(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t   local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t   if not nFindLastIndex then\n\t\t  nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t  break\n\t   end\n\t   nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t   nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t   nSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nunixtimestamp=function(datestr)\n    -- 2018-4-28 16:10:12\n\t--log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, " ");\n    local date = Split(datelist[1], "-");\n    local time = Split(datelist[2], ":");\n    local year = tonumber(date[1]);\n\tlocal month = tonumber(date[2]);\n\tlocal day = tonumber(date[3]);\n    local hour = tonumber(time[1]);\n    local minute = tonumber(time[2]);\n    local second = tonumber(time[3]);\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("fs_tj_lf_station recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-07-26 17:27:53.256+08	2019-04-09 16:56:19.183+08	2018-07-26	\N
8f9e2bf6-e76c-4794-b3f0-1af76a216b60	jm_lvdt_1553	\N	13字节带温度--总线型位移计指令表--金马静力水准仪协议 传感器单独使用	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//04 项目资料/2017-12/总线型位移计指令表--金马静力水准仪协议.pdf   \n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度   本协议是老版本\nstart=function()\n    log.debug("start %s, moduleId=%s", "jm_lvdt_1553.lua",device.props.moduleId or 'nil')\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian)                   \n    buff=iota.appendHexByte(buff, 0x2b, endian) \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n    if string.len(moduleNo)<6 then\n        local strlen=6-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n    buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n\tbuff= buff..toHexStr(string.sub(moduleNo,2,2))\n\tbuff= buff..toHexStr(string.sub(moduleNo,3,3))\n\tbuff= buff..toHexStr(string.sub(moduleNo,4,4))\n\tbuff= buff..toHexStr(string.sub(moduleNo,5,5))\n\tbuff= buff..toHexStr(string.sub(moduleNo,6,6))\n  log.debug("jm_lvdt_1553 moduleId=%s send: %s",moduleNo or 'nil',buff)\n    ok,resp=ctx:asend(buff)\n    -- local result="{}"\n    -- if ok then\n        -- result = unmarshall(resp)\n    -- end\n    -- ctx:done(result)\nend\nlocal buff_response="" --缓存\nonData=function(hex)\n\tlocal result="{}"\n\tresult = unmarshall(hex)\n    log.debug("jm_lvdt_1553 buff_response=%s",buff_response)\n    log.debug("jm_lvdt_1553 结果out=%s",result)\n    if string.len(buff_response)/2 ~=13 then\n    \tlog.debug("jm_lvdt_1553 数据 不完整 不解析 buff_response=%s",buff_response)\n\t\t--ctx:notify(result)\t\n    else\n        log.debug("jm_lvdt_1553 数据完整退出解析 buff_response=%s",buff_response)\n        ctx:done(result)\n    end\nend \n\n\nunmarshall=function(hex)\n    --24596148594963486  349634850   moduleId=1\n    --"level":1095.05,\n    --"temp": 10644.7\n\tbuff_response=buff_response..hex\n    log.debug("jm_lvdt_1553 moduleId=%s recv: %s  缓存数据=%s",device.props.moduleId or 'nil',hex,buff_response)\n    --log.debug("jm1550收到数据："..hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n        \n\t\tlocal level\n\t\tlocal level0\n\t\tlocal temp\n\t\tif  string.len(buff_response)/2==13 then\t\n                hex=buff_response\n      \t\t\tlog.debug("jm_lvdt_1553 解析数据hex=%s",hex)\n\t\t\t\tlevel=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n\t\t\t\tlevel0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\t\n\t\t\t\ttemp=((tonumber(string.sub(hex,19,20),16)-48)*16+(tonumber(string.sub(hex,21,22),16)-48)+(tonumber(string.sub(hex,23,24),16)-48)*16*16*16+(tonumber(string.sub(hex,25,26),16)-48)*16*16-500)/10\n\t\t\t    log.debug("jm_lvdt_1553 结果level=%s,level0=%s,temp=%s",level,level0,temp)\n\t\t\t\n\t\t   out.data = {\n\t\t\tlevel=level,\n\t\t\tlevel0=level0,\n\t\t\ttemp=temp\n\t\t   }\n\t\tend\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleCheck=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleCheck=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1553 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n    log.debug('jm_lvdt_1553 开始校验数据%s',data)\n  \n    if string.len(data)/2==13 then\n    \treturn true\n    end\n    if data == nil or (string.len(data)/2 ~=9 and string.len(data)/2 ~=4 ) then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('jm_lvdt_1553 模块%s 校验失败 data=%s',moduleCheck ,data)\n        return false\n    end\n\tlog.debug('jm_lvdt_1553  CMD=%s',iota.hexToByte(data,0,'B'))\n\tif string.len(data)/2 ==9 then\n\t\tif iota.hexToByte(data,0,'B') ~= 0x24 then\n\t\t\terrcode = 1001\n\t\t\terrormsg = 'Hex CMD False ' \n\t\t\treturn false\n\t\tend\n\tend\n\n    log.debug('jm_lvdt_1553 数据校验通过')\n    return true\n--crc\nend\n\n  -- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2018-02-07 09:10:35.192+08	2018-11-13 14:21:35.432+08	2018-02-07	\N
9e3473be-51a7-4bba-917b-2a7813354caa	njgy_jlsz	\N		1.0	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	f	55ecba2d-f3da-4ebb-b58d-7cc16522faad	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "njgye_yb.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\n   \n    buff=iota.appendHexWord(buff, 0x01, endian)\n\tbuff=iota.appendHexByte(buff, 0x0e, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\n\t\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\t\t\tbuff=iota.appendHexByte(buff, 0x08, endian)\n    buff=iota.appendHexWord(buff, 0, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexWord(buff, 0, endian)  \n    buff=iota.appendHexWord(buff, 0, endian)  \t-- 4: 指令: 0x01 = 采集\n    \tlocal lcr_str = CS(buff)                   -- 5: CRC\n\t\tbuff=iota.appendHexWord(buff, lcr_str, endian)  \t-- 4: 指令: 0x01 = 采集\n\t\tbuff='4654' .. buff\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==38) then\n\t\tlocal symbol=string.sub(hex,27,28)\n        local length1= tonumber(string.sub(hex,29,32))\n\t\tlocal length2= tonumber(string.sub(hex,33,33))/10\n\t\tlocal length3= tonumber(string.sub(hex,34,34))/100\n        local length= length1+length2+length3\n\t\tif symbol=='00' then\n\t\t    length=length\n\t\telseif symbol=='01' then\n\t\t\n\t\t\tlength=-1*length\n\t\tend\n        out.data = {\n            length\t=length\t        \n            \n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n    return value\nend \n \n\n	INLINE	2020-10-19 14:46:07.91+08	2020-10-30 10:30:05.272+08	2020-10-19	\N
3c239466-6ce0-435b-869e-715dc10c3c69	fzmas_micro_yx	\N	复制的工训的	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	start=function()\n    --log.debug("fzmas_micro_yx : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n  log.debug("fzmas_micro_yx : devices network =%s", json.encode(device))\n    if data ~=nil then\n        log.debug("fzmas_micro_yx devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fzmas_micro_yx recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        --log.debug("fzmas_micro_yx 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        --log.debug("fzmas_micro_yx datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            --log.debug("fzmas_micro_yx 解析dat r1= %s", r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                --log.debug("fzmas_micro_yx 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                --log.debug("fzmas_micro_yx 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            log.debug("fzmas_micro_yx 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fzmas_micro_yx  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fzmas_micro_yx 版本固件 %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            --log.debug("fzmas_micro_yx devices crc =%s",crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t   -- log.debug("fzmas_micro_yx crc %s r1 %s setting%s" ,crc,r1,setting)\n        \t\t--log.debug("fzmas_micro_yx dtuid: %s Day:%s H:%s , M:%s",device.uplink.props.id,tostring(os.date("%d")),tostring(os.date("%H")),tostring(os.date("%M")))\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fzmas_micro_yx 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fzmas_micro_yx  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fzmas_micro_yx 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_yx 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fzmas_micro_yx 设备休眠")\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\t--log.debug("fzmas_micro_yx r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fzmas_micro_yx powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n\t\t\t\t--log.debug("fzmas_micro_yx XDATA=%s",string.sub(data,firststart,firststart+datalength))\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 振弦11111111 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 静力水准仪 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fzmas_micro_yx 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fzmas_micro_yx 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\t--log.debug("fzmas_micro_yx dataresult %s", json.encode(out))\n            end \n            --log.debug("fzmas_micro_yx out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            --log.debug("fzmas_micro_yx: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    --log.debug("fzmas_micro_yx : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\t--log.debug("fzmas_micro_yx subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                --log.debug("fzmas_micro_yx : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\t--log.debug("fzmas_micro_yx : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("fzmas_micro_yx  baudrate =%s databits %s parity %s stopbits ",baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fzmas_micro_yx  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\t--log.debug("fzmas_micro_yx  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                --log.debug("fzmas_micro_yx  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fzmas_micro_yx 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("fzmas_micro_yx has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fzmas_micro_yx has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("fzmas_micro_yx has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fzmas_micro_yx has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("fzmas_micro_yx  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("fzmas_micro_yx deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("fzmas_micro_yx begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        --log.debug("fzmas_micro_yx finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("fzmas_micro_yx r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fzmas_micro_yx powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fzmas_micro_yx cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("fzmas_micro_yx not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    --log.debug("fzmas_micro_yx len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("fzmas_micro_yx te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    --log.debug("fzmas_micro_yx sum %s", sum)\n   return 0xffff-sum\nend\n\n	INLINE	2019-11-08 16:17:49.654+08	2020-08-05 09:44:50.417+08	2019-11-08	\N
a0ce411d-4370-4a33-88dc-7a51846cf38f	XP-PM	\N		1.0	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	f	ccf8ee6b-1ab5-4bcb-a4bb-78c12220849c	Lua	\nstart=function()\n\n\tlocal token='1v80m71c77803be222aca35264846'\n\n\t --请求数据\n\tlocal datareq = {\n\t\t\t\ttype= "http",\n\t\t\t\turl='',  --https://www.loraflow.io/v1/application/data?appeui=04a64f007b4cc75f&deveui=6a59781dc3f8d57d&token=1v80m71c77803be222aca35264846&order=desc\n\t\t\t\tmethod="get",\n\t\t\t\theader={}\n\t\t\t}\n\tlocal deveui\n\tout={\n\t\ttype = 2,\n\t\tdata ={},\n\t\tresult = {}\n\t}\n\tfor i,link in pairs(device.dnlinks) do\n\t\tfor j,subdevice in pairs(link.devices) do\n\t\t\tlocal deveui=subdevice.uplink.props.module\n\t\t\tdatareq.url="https://www.loraflow.io/v1/application/data".."?appeui="..'04a64f007b4cc75f'.."&deveui="..deveui.."&token="..token.."&order=desc"\n\t\t\tlog.debug("xinpu:  data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\n\t\t\t\t\n\t\t\t --get发送\n\t\t\tlocal dataok,dataack=ctx:ssend(datareq,4000)\n\n\t\t\tDataParse(dataok,dataack)\n\t\tend\n\tend\n\t\n\tlog.debug("xinpu out=%s ",json.encode(out))\n\tctx:done(json.encode(out))\nend\n \nDataParse=function(dataok,dataack)\n\tif not dataok or dataack==nil then\n\t\t\tout.result={\n\t\t\tcode=1002,\n\t\t\tmsg="timeout"\n\t\t\t}\n\t\telse --OK\n\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\talldataTable=json.decode(dataack.body)  -- 有数据\n\t\t\t\t\t\n\t\t\t\tlocal rt_data=alldataTable.list\t\t\t\t\t\t\n\t\t\t\tlog.debug("xinpudata=%s",dataack.body)\t\n\t\t\t\t--遍历节点数据\n\t\t\t\tfor k,v in ipairs(rt_data) do\t\t\t\t     \n\t\t\t\t\t--log.debug("xinpu k=%s, value=%s",k,json.encode(v))\t\n\t\t\t\t\tlocal moduleId=v.deveui\n\t\t\t\t\tlocal timess=v["$time"]\t\t\t\n\t\t\t\t\tlocal r1,r1ok = redis.get(device.id..moduleId.."_endTime")  --获取上次记录时间\n\t\t\t\t\t--log.debug("xinpu r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tlocal beginTime\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("xinpu r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(device.id..moduleId.."_endTime", tostring(beginTime))\n\t\t\t\t\t\tlog.debug("xinpu r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n\t\n\t\t\t\t\tlocal endTime=tonumber(timess)  --全局\n\t\t\t\t\tlocal timedata = unixtimestamp(endTime)\n\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\tlog.debug("xinpu  m=%s 数据未刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("xinpu  m=%s 数据刷新beginTime=%s,endTime=%s",moduleId,beginTime,endTime)\n\t\t\t\t\t\n\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\tlog.debug("xinpu childDevice=%s",moduleId)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleId) \n\t\t\t\t\t\tif string.len(v.data)/2 == 28 then\n\t\t\t\t\t\t\tlocal pm1 = iota.hexToShort(v.data, 6, 'B') \n\t\t\t\t\t\t\tlocal pm25 = iota.hexToShort(v.data, 15, 'B') \n\t\t\t\t\t\t\tlocal pm10 = iota.hexToShort(v.data, 24, 'B') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tpm1=pm1,\n\t\t\t\t\t\t\t\t\t\t\t\tpm25=pm25,\n\t\t\t\t\t\t\t\t\t\t\t\tpm10=pm10\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata,  \n\t\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t};                    \n\t\t\t\t\t\t\tlog.debug("xinpu pm data1 =%s",json.encode(data1))    \n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\telseif string.len(v.data)/2 == 4 then\n\t\t\t\t\t\t\tlocal temp = iota.hexToShort(v.data, 0, 'L') \n\t\t\t\t\t\t\tlocal humdity = iota.hexToShort(v.data, 2, 'L') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\ttemp=temp/100,\n\t\t\t\t\t\t\t\t\t\t\t\thumdity=humdity/100\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata,  \n\t\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t};                  \n\t\t\t\t\t\t\tlog.debug("xinpu temp data1 =%s",json.encode(data1))     \n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\telseif string.len(v.data)/2 == 5 then\n\t\t\t\t\t\t\tlocal direction = iota.hexToShort(v.data, 1, 'B') \n\t\t\t\t\t\t\tlocal speed = iota.hexToShort(v.data, 3, 'B') \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\t\tdirection=direction/10,\n\t\t\t\t\t\t\t\t\t\t\t\tspeed=speed\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttime=timedata,  \n\t\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t};                       \n\t\t\t\t\t\t\tlog.debug("xinpu wind data1 =%s",json.encode(data1))\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\n\t\t\t\t\t--更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id..moduleId.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("xinpu redis更新 set lasttime ok  key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("xinpu redis不更新 ")\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\telse\n\t\t\t\tlog.debug("xinpu:  request data error:%s body:%s",dataack.code,dataack.body)            \n\t\t\tend\n\t\tend\t\nend\n\n\nSleep=function(n)\n   local t0 = os.clock()\n   while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid)\n  \t--log.debug("xinpu: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n\tlocal resensor=nil\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices \n\t\tfor i,link in pairs(device.dnlinks) do\n\t\t\t--log.debug("xinpulink=%s",json.encode(link))\n\t\t\tfor j,subdevice in pairs(link.devices) do\n        \t    --log.debug("xinpunode=%s",json.encode(subdevice))\n\t\t\t\tif subdevice.uplink.props.module==moduleid then\n\t\t\t\t\tresensor = subdevice\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\t--log.debug("xinpuresensor=%s",json.encode(resensor))\n\treturn resensor\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nunixtimestamp=function(datestr)\n    -- 2018-4-28 16:10:12\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S",datestr/1000)\n\treturn recordTime\nend	INLINE	2018-11-10 16:00:32.678+08	2018-11-19 16:52:55.278+08	2018-11-10	\N
3bed9937-4292-47f9-ad0a-3f39e26791f6	fshs_pressure_19000	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "fshs_pressure_19000.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fshs_pressure_19000 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x06, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fshs_pressure_19000,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("fshs_pressure_19000  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fshs_pressure_19000 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,11,'B')\n    \n        out.data = {           \n            pressure=pressure,\n\t\t\ttemperature\t=temperature\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fshs_pressure_19000 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-07-25 09:39:32.668+08	2018-07-25 11:09:48.755+08	2018-07-25	\N
1e0edcee-1fb7-4601-b3ac-6f6f59593485	fs_weight_9803	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local  IDX_Start = 0  -- 起始指令\n    local  IDX_CMD = 1; -- 命令字 \n    local  IDX_DataLen = 2; -- 数据长度\n    local  IDX_MoudleID = 3; -- 模块号(车道号)\n\n    local  IDX_licence = 4; -- 车牌号\n\t\n    local  IDX_axeisCount = 14; -- 轴数\n    local  IDX_GrWeight = 15; -- 总重\n    local IDX_year = 17\n\tlocal IDX_month =19\n\tlocal IDX_day = 20\n    local IDX_hour = 21\n    local IDX_minute = 22\n    local IDX_second = 23\n    local  IDX_UpWeight = 24; -- 总重超重\n\t\n    local  IDX_AxieWeight1 = 25; -- 轴一重量\n    local  IDX_AxieWeight2 = 27; -- 轴二重量\n    local  IDX_AxieWeight3 = 29; -- 轴三重量\n    local  IDX_AxieWeight4 = 31; -- 轴四重量\n    local  IDX_AxieWeight5 = 33; -- 轴五重量\n    local  IDX_AxieWeight6 = 35; -- 轴六重量\n    local  IDX_AxieWeight7 = 37; -- 轴七重量\n    local  IDX_AxieWeight8 = 39; -- 轴八重量\n\t\n\tlocal  IDX_AxieSpeed1 = 41; -- 轴一速度\n    local  IDX_AxieSpeed2 = 42; -- 轴二速度\n    local  IDX_AxieSpeed3 = 43; -- 轴三速度\n    local  IDX_AxieSpeed4 = 44; -- 轴四速度\n    local  IDX_AxieSpeed5 = 45; -- 轴五速度\n    local  IDX_AxieSpeed6 = 46; -- 轴六速度\n    local  IDX_AxieSpeed7 = 47; -- 轴七速度\n    local  IDX_AxieSpeed8 = 48; -- 轴八速度\n\t\n\t\n    local  IDX_TotalBase =49; -- 总轴距\n\tlocal  IDX_Carlength = 51; -- 车长\n    local  IDX_Cardirection = 53; -- 方向\n    local  IDX_CarModle = 54; -- 车类型\n   \n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\t\n\t\tlocal  crossroad =iota.hexToByte(hex,IDX_MoudleID,'B'); -- 模块号(车道号)\n\t\tlog.debug("fs_weight_9803 crossroad=%s",crossroad)\n\t\tlocal licence = unicode2gb2312(string.sub(hex,2*(IDX_licence)+1,2*(IDX_licence+2)))..toStrHex(string.sub(hex,2*(IDX_licence+2)+1,2*(IDX_licence+8)))..unicode2gb2312(string.sub(hex,2*(IDX_licence+8)+1,2*(IDX_licence+10)))\n\t\t\n\t\tlocal  axisnum = iota.hexToByte(hex,IDX_axeisCount,'B'); -- 轴数\n\t\tlocal grossweight = iota.hexToShort(hex,IDX_GrWeight,'B'); -- 总重\n\t\tlocal year = iota.hexToUShort(hex,IDX_year,'B')\n\t\tlocal month =iota.hexToByte(hex,IDX_month,'B')\n\t\tlocal day = iota.hexToByte(hex,IDX_day,'B')\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,'B')\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second = iota.hexToByte(hex,IDX_second,'B')\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\t\n\t\tlocal over = iota.hexToByte(hex,IDX_UpWeight,'B')--总重超重\n\t\t\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'B')\n        local axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'B')\n        local axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'B')\n        local axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'B')\n        local axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'B')\n        local axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'B')\n        local axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'B')\n        local axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'B')\n\t\tlog.debug("fs_weight_9803 axieWeight1-8=[%s,%s,%s,%s,%s,%s,%s,%s]",axieWeight1,axieWeight2,axieWeight3,axieWeight4,axieWeight5,axieWeight6,axieWeight7,axieWeight8)\n\t\tlocal  axieSpeed1 = iota.hexToByte(hex,IDX_AxieSpeed1,'B'); -- 轴一速度\n\t\tlocal  axieSpeed2 = iota.hexToByte(hex,IDX_AxieSpeed2,'B'); -- 轴二速度\n\t\tlocal  axieSpeed3 = iota.hexToByte(hex,IDX_AxieSpeed3,'B'); -- 轴三速度\n\t\tlocal  axieSpeed4 = iota.hexToByte(hex,IDX_AxieSpeed4,'B'); -- 轴四速度\n\t\tlocal  axieSpeed5 = iota.hexToByte(hex,IDX_AxieSpeed5,'B'); -- 轴五速度\n\t\tlocal  axieSpeed6 = iota.hexToByte(hex,IDX_AxieSpeed6,'B'); -- 轴六速度\n\t\tlocal  axieSpeed7 = iota.hexToByte(hex,IDX_AxieSpeed7,'B'); -- 轴七速度\n\t\tlocal  axieSpeed8 = iota.hexToByte(hex,IDX_AxieSpeed8,'B'); -- 轴八速度\n\t\tlog.debug("fs_weight_9803 axieSpeed1-8=[%s,%s,%s,%s,%s,%s,%s,%s]",axieSpeed1,axieSpeed2,axieSpeed3,axieSpeed4,axieSpeed5,axieSpeed6,axieSpeed7,axieSpeed8)\n\t\t\n\t\tlocal totalbase = iota.hexToShort(hex,IDX_TotalBase,'B')--总轴距\n\t\tlocal cmslength = iota.hexToShort(hex,IDX_Carlength,'B')--车长\n\t\tlocal direction = iota.hexToByte(hex,IDX_Cardirection,'B')--行驶方向\n\t\tlocal carmodel = iota.hexToShort(hex,IDX_CarModle,'B') -- 车类型\n\t    log.debug("fs_weight_9803 totalbase=%s,cmslength=%s,direction=%s,carmodel=%s",totalbase,cmslength,direction,carmodel)\n\t----\n        out.data = {\n\t\t\tcrossRoad = tostring(crossroad),\n\t\t\tlicence = tostring(licence),\n\t\t\taxisnum = tostring(axisnum),\n            grossWeight = tostring(grossweight),\n            overload = tostring(over),\n            axieWeight = json.encode({axieWeight1,\n            axieWeight2,\n            axieWeight3,\n            axieWeight4,\n            axieWeight5,\n            axieWeight6,\n            axieWeight7,\n            axieWeight8}),\n\t\t\taxieSpeed=json.encode({axieSpeed1,\n            axieSpeed2,\n            axieSpeed3,\n            axieSpeed4,\n            axieSpeed5,\n            axieSpeed6,\n            axieSpeed7,\n            axieSpeed8}),\n            totalBase = tostring(totalbase),            \n            cmsLength = tostring(cmslength),\n\t\t\tdirection = tostring(direction),\n\t\t\tcarType = tostring(carmodel)\n        }\t\t\n\t\t\n\t\t--out.time=recordTime\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\tlog.debug("fs_weight_9803 校验数据=%s",data)\n\tif string.len(data)/2 ~= 62 then\n        errormsg = 'hex length is not enough.'\n        errcode = 1001\n        return false\n    end\n    if  string.lower(string.sub(data,1,4)) ~='ff01' then\n        errormsg = 'weight buffer length is not enough.'\n        errcode = 1001\n        return false\n    end\n\tlog.debug("fs_weight_9803 数据校验通过")\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n                  ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n                  ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n                  ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n                  ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7" }\t\n\tfor k,v in pairs(map_tb) do\n        if v == string.format("%X",tonumber(src,16)) then\n            return k\n        end\n    end\n    return " "\nend\n	INLINE	2018-07-04 16:47:01.607+08	2018-07-24 10:41:45.744+08	2018-07-04	\N
f3220830-3911-472f-a168-49c2e6be4264	qy_noise_4100	\N	清易噪声传感器协议	1.0	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	f	f37cd019-7796-443e-9467-97aec7656620	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "qy_noise_4100.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x00, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x01, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--02030201ea7c5b    moduleId=2\n--"noise": 49\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local noisedata = iota.hexToShort(hex,3,'B') / 10.0\n        out.data = {\n            noise = noisedata\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-12 19:44:26.351+08	2018-02-28 18:32:12.191+08	2017-09-12	\N
d3cd6277-96e5-4811-af48-ff6f141b2fe6	tt_oxy_3100	\N	重庆唐天负氧离子监测仪	1.0	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	f	67fa3de9-4f6e-4df8-9f2e-9a87d122aa68	Lua	\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "tt_oxy_3100.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x00, endian)                       \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--010300200132ff3d01A50012006C00AC00BC02857FFF7FFF7FFF7FFF007a7FFF7FFF7FFF0000\n--moduleId=1\n--"anion": 1220,\n--"humid": 42.1,\n--"temp": -19.5\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local hum = bit:_or(bit:_lshift(iota.hexToByte(hex,8,'B'),8) ,iota.hexToByte(hex,9,'B')) / 10.0\n        local sign = 1\n        local temperature = 0\n        local by = string.sub(hex,13,16)\n        if iota.hexToByte(by,0,'B') >= 0x80 then\n            sign = -1\n            temperature = (0xffff - bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,0,'B') , 0xffff) , 8) , iota.hexToByte(by,1,'B')) + 1) * sign / 10.0\n        else\n            temperature = bit:_or(bit:_lshift(iota.hexToByte(by,0,'B'),8) ,iota.hexToByte(by,1,'B')) / 10.0;\n        end\n        local Anion = iota.hexToShort(hex,28,'B')* 10\n        out.data = {\n            temp = temperature,\n            anion = Anion,\n            humid = hum\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 38 then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 20:29:06.545+08	2018-02-28 18:32:12.206+08	2017-09-14	\N
bb630bcd-5a32-416d-b6e2-9d0bd0eab954	ryzh_illumin_2407	\N	锐研智华	1.0	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	f	e3655afc-a2a8-4bc3-801a-9c3019705a27	Lua	--//04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/RY-GW-485光照传感器.doc\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "ryzh_illuminance_2407.lua", device.props.moduleId or "[nil]")\n\t-- 0xFF, 0x03, 0x00, 0x00, 0x00, 0x01, 0x91, 0xD4\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    log.debug("ryzh_illuminance_2407 ssend : %s", buff)\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n    \tlog.debug("ryzh_illuminance_2407 recv ok : %s", resp)\n        result = unmarshall(resp)\n    else\n    \tlog.debug("ryzh_illuminance_2407 recv faild")\n    end\n    \n    \n    ctx:done(result)\nend\n--FF03020014919F\n--moduleId=255\n--range=(0,100000)\n--"illuminance": 200\nunmarshall=function(hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        local IDX_Illuminance = 3\n        local range =device.props.range\n        local firstNum=bit:_rshift( bit:_and(iota.hexToByte(hex,IDX_Illuminance,'B'), 0xF0),4)\n        local secondNum= bit:_and(iota.hexToByte(hex,IDX_Illuminance,'B'), 0x0F)\n        local thirdNum=bit:_rshift( bit:_and(iota.hexToByte(hex,IDX_Illuminance+1,'B'), 0xF0),4)\n        local forthNum= bit:_and(iota.hexToByte(hex,IDX_Illuminance+1,'B'), 0x0F)\n         \n        local rawvalue=firstNum * 4096 + secondNum * 256 + thirdNum * 16 + forthNum\n        \n        local sArray=Split(range,",")\n        local limitL=tonumber(string.sub(sArray[1],2,-1))\n        local limitH=tonumber(string.sub(sArray[2],1,-2))\n        log.debug("limitL=%d  limitH=%d", limitL,limitH)\n        if limitL == 0 and limitH == 20000 or limitH == 2000 then --0-2K or 0-20K\n            local illuminance = rawvalue\n            out.data = {\n                illuminance=illuminance\n            }\n       end\n    log.debug("开始求解")\n       if limitL == 0 and limitH == 100000 then --0-10K\n            local illuminance = rawvalue * 10\n            out.data = {\n                illuminance=illuminance\n            }\n       end\n        log.debug("ryzh_illuminance_2407  data : %s",json.encode(out.data))\n    else\n        local message = 'Invalid Msg, len= '..string.len(hex)\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\nfunction Split(s, sp)  \n    local res = {}  \n  \n    local temp = s  \n    local len = 0  \n    while true do  \n        len = string.find(temp, sp)  \n        if len ~= nil then  \n            local result = string.sub(temp, 1, len-1)  \n            temp = string.sub(temp, len+1)  \n            table.insert(res, result)  \n        else  \n            table.insert(res, temp)  \n            break  \n        end  \n    end  \n  \n    return res  \nend \n    	INLINE	2017-11-15 17:18:21.81+08	2018-02-28 18:32:12.206+08	2017-11-13	\N
00ce002e-e472-4ac9-b74e-52d5c06c4ee0	sz_strain_2301	\N		1.0	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	f	fa5611e2-d726-4e8f-a22c-632ef7ab7148	Lua	start =function()\n    log.debug('load script %s, moduleId=%s  device=%s', 'sz_strain_2301', device.uplink.props.module, json.encode(device))\n    local endian = 'B'\n    local buff = ''\n    local errout = {\n        data = {},\n        result = {}\n    }\n\n    buff = buff .. '0F'\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    log.debug('sz_strain_2301 设备模块 m=%s  json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '11000000000000000000000000000000' --cmd=0x11\n    --log.debug('sz_strain_2301 buff 累加前=%s ', buff)\n    --buff=buff..iota.hexCheckPlusSum(buff)\n    buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n    --log.debug('sz_strain_2301 buff 累加后=%s ', buff)\n\n    buff = buff .. 'F0'\n    --buff='0F040100000000000000000000000000000014F0'  --测试用 后删除\n    ok, resp = ctx:ssend(buff, 18000) --实际采集需要90秒 有历史数据读取 比较快\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n        errout.result = {code = 1001, msg = '采集超时'}\n       result=json.encode(errout)\n    end\n    ctx:done(result)\nend\n\n--0F001100000000000000000000000000000020F0\n--moduleId=0\n--0F00117F7F7F120519130A00200106A8FC0E5A01F4020624090B6A01F4030729110B1D01EC040610A80C3001EC0506A6A20D0B01F0060743880BA301F0070751E50C1B01F00806FC0D0F5B01F009075A620A3C01F80A0665A30C4001EC0B0265CB0B4A01E80C062E0A0FA901F00D06CD840A1501F40E067F5D0E8C01F00F07EE0D0AF601E810067CF80B5801F01100000000000C801200000000000C801300000000000C801400000000000C801500000000000C801600000000000C801700000000000C801800000000000C801900000000000C801A00000000000C801B00000000000C801C00000000000C801D00000000000C801E00000000000C801F00000000000C802000000000000C80F7F7F73890F0\nunmarshall =function(hex, moduleStr)\n    log.debug('sz_strain_2301 m=%s, recv =%s', moduleStr, hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ErrorCode = IsValid(hex, moduleStr)\n    if ErrorCode then\n        local dataArea = string.sub(hex, 27, -13)\n        local dataTimeHexStr = string.sub(hex, 13, 24) --数据时间\n        local channelCount = tonumber(string.sub(hex, 25, 26), 16)\n        --单个传感器数据 占8个字节\n        local dataAreaLength = string.len(dataArea) / 2\n\n        for i = 1, channelCount, 1 do\n            log.debug('i=%s', i)\n      \t\tlocal singleChannelDataHexStr = string.sub(hex, 27 + (i - 1) * 16, 27 + i * 16-1)\n            local channel = iota.hexToByte(singleChannelDataHexStr, 0, 'B')\n            \n            if string.sub(singleChannelDataHexStr, 3, -1) == '00000000000c80' then\n                log.debug('sz_strain_2301  通道=%s,通道为空', channel)\n            else\n                -- statements\n\t\t\t\t\n                local Fi = iota.hexToUShort(singleChannelDataHexStr, 4, 'B')\n                local temperature = iota.hexToUShort(singleChannelDataHexStr, 6, 'B') / 16\n\t\t\t\tif temperature==200 then\n          \t\t\tFi=Fi/16\n                end\n                local childDevice = getDeviceInfo(moduleStr, channel)\n                if childDevice ~= nil then\n                    if childDevice.uplink.capabilities[1].formula.metaid == '6eadaa20-f803-4859-8ed0-3bd1afa830cb' then --振弦公式 不带温度 metaid\n                        local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n                        local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n                        local c0 = childDevice.uplink.capabilities[1].formula.props.Co or nil\n                        log.debug('sz_strain_2301  模块%s通道%s的公式计算参数是：K=%s,Fo=%s,Co=%s', moduleStr, channel, k, f0, c0)\n                        if k ~= nil and f0 ~= nil then\n                            phy = k * (Fi - f0) + c0\n                            log.debug('sz_strain_2301  模块%s通道%s的公式计算结果 phy=%s,Fi=%s,singleChannelDataHexStr=%s', moduleStr, channel, phy,Fi,singleChannelDataHexStr)\n                        end\n                    end\n\n                    local singleData = {\n                        data = {\n                            physicalvalue = tonumber(string.format('%0.2f', phy)),\n                            temperature = tonumber(string.format('%0.2f', temperature))\n                        },\n                        device = childDevice.id,\n                        type = 1\n                    }\n                    log.debug('sz_strain_2301 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n                    table.insert(out.data, singleData)\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('sz_strain_2301 m=%s,data=%s', moduleStr, json.encode(out))\n    return json.encode(out)\nend\n\nIsValid =function(data, moduleStr)\n    log.debug('sz_strain_2301 开始校验数据=%s', data)\n    if string.sub(data, 1, 2) ~= '0f' or string.sub(data, -2, -1) ~= 'f0' then\n        errcode = 1003\n        errormsg = string.format('回复数据的 帧头≠0x0f[%s]，帧尾≠0xf0[%s] ', string.sub(data, 1, 2), string.sub(data, -2, -1))\n        return false\n    end\n    local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n    if moduleStrCheck ~= tonumber(moduleStr) then\n        errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n        errcode = 1004\n        log.debug('sz_strain_2301 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n        return false\n    end\n\n    local dataChannelCount = tonumber(string.sub(data, 25, 26), 16) --获取数据的长度\n    local dataLen = string.len(data) / 2\n    local checkLen = 13 + dataChannelCount * 8 + 6\n   -- if dataLen ~= checkLen then\n     --   errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n      --  errcode = 1002\n      --  return false\n   -- end\n   -- log.debug('sz_strain_2301 数据校验通过')\n    return true\n    --crc\nend\n\ngetDeviceInfo =function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("sz_strain_2301 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('sz_strain_2301 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                --log.debug('sz_strain_2301 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('sz_strain_2301 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('sz_strain_2301  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('sz_strain_2301  subdevices是nil')\n        return nil\n    end\nend\n\n--异或校验\nCheckXor = function(hex)\n    local len = string.len(hex) / 2\n    local pp = 0\n    for i = 0, len - 1 do\n        local bi = iota.hexToByte(hex, i, 'B')\n        pp = bit:_and(bit:_xor(bi, pp), 0x000000ff)\n        --log.debug("PP是=%s",string.format("%02x",pp))\n    end\n    return string.format('%02x', pp)\nend\n	INLINE	2018-12-18 11:21:56.186+08	2019-03-18 15:41:27.075+08	2018-12-18	\N
dd0197d4-7aaa-415a-b006-de6f384718ee	LJW_7100	\N	1.0	1.0	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	f	564b6c70-39c1-423b-9eed-89d2dcdbc2a4	Lua	start=function ()\n\tok=ctx:asend("010206")\nend\n\nonData=function(hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n    log.debug("LJW_7100 收到数据=%s",hex)\n\tlocal moduleNo=device.uplink.props.module\n    --local moduleNo="99912345" --测试用\n\tlocal ErrorCode = IsValid(hex,moduleNo);\n\tif ErrorCode then\n        log.debug("LJW_7100 数据有效")\n\t\tlocal data_str = HextoStr(hex)\n\t\t--转为字符串\n        log.debug("LJW_7100 ascii data_str=%s",data_str)\n\t\tlocal weight=string.sub(data_str,9,16)\n\t\tlocal lowerLimit=string.sub(data_str,17,24)\n\t\tlocal upLimit=string.sub(data_str,25,32)\n\t\tlocal division=string.sub(data_str,33,40)\n\t\tlocal range_weight=string.sub(data_str,41,48)\n        log.debug("LJW_7100 ascii weight=%s,lowerLimit=%s,upLimit=%s,division=%s,range_weight=%s",weight,lowerLimit,upLimit,division,range_weight)\n\t\tlocal data1={\n\t\t\t\t\tweight = tonumber(weight)/1000.0,\n\t\t\t\t\tlowerLimit = tonumber(lowerLimit)/1000.0,\n\t\t\t\t\tupLimit = tonumber(upLimit)/1000.0,\n\t\t\t\t\tdivision = tonumber(division)/1000.0,\n\t\t\t\t\trange_weight=tonumber(range_weight)/1000.0\n\t\t\t\t\t}\n\t\ttable.insert(out.data,data1)\n\t \n\t\t\t\t\t\t\t\t\t\t\n\telse\n        log.debug("LJW_7100 数据无效")\n\t\tmessage = 'Invalid Msg, len='..string.len(hex)\n\t\tout.result = {code = errcode, msg = message}\n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\nIsValid=function (data,moduleNoCheck)\n\tif data == nil or string.len(data)/2 ~= 48 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n    local moduleNoCheckStr_hex=string.sub(data,1,16)\n    local moduleNoCheckStr=HextoStr(moduleNoCheckStr_hex)\n\tif moduleNoCheckStr~=moduleNoCheck then\n\t\terrormsg = string.format('module is Invalid=%s[%s]',moduleNoCheckStr,moduleNoCheck)\n\t\terrcode = 1002\n\t\treturn false\n\tend\n\t\treturn true\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2018-10-18 15:12:08.326+08	2018-10-29 14:45:15.4+08	2018-10-18	\N
4374d945-290d-4424-884d-818f2bada891	guang_xian_test	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	onData=function (recvHex)\n\t--主动上传式\n    local out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n    }\n    \n    log.debug("GUANGXIAN   Received=>%s", recvHex)\n\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\n     \nend\n	INLINE	2020-01-13 16:20:54.275+08	2020-01-13 16:25:36.648+08	2020-01-13	\N
070668c8-be26-4e4d-96df-d2d191f31972	anxin_Settlemen	\N	静力水准仪 主动上报（标准协议）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t    local distance = iota.hexToInt(hex,24,'B')/1000\n        local temperature = iota.hexToShort(hex,28,'B')/100\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          distance=distance,\n                            temperature =temperature\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_rain:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_rain [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-23 11:02:43.27+08	2019-12-23 14:14:58.323+08	2019-12-23	\N
f4bb99f2-48a1-454c-8d3b-d9aa707ce857	LANNOVO_Water	\N		1.0	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	f	d7992dd9-6356-40b2-ae7d-78cb5508b40c	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("LANNOVOWater: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("LANNOVOWater: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\n    local sData= toStrHex(hex)\n    log.debug("LANNOVOWater: sData=%s",sData)\n    local spliteData = Split(sData,'&&')\n\tlocal deviceData = Split(spliteData[1],';')\n\tlocal moduledata = Split(deviceData[4],'=')\n\tlocal module = tonumber(moduledata[2]) --模块号\n\t\n\tlocal Data = Split(spliteData[2],';')\n\tlocal timedata = Split(Data[1],'=')\n\tlocal time = tonumber(timedata[2])   --时间\n\t\n\tfor key,value in pairs(Data) do\n\t\tAllot(value)\n\tend\n\t\n\n\n    local resultData =json.encode(out)\n    log.debug("LANNOVOWater: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot=function(datastr)\n\tlocal name = Split(datastr,'=')\n\tif name[1] == 'PM25-Rtd' then \n\t\tout.data.pm=tonumber(name[2])\n\telseif name[1] == 'PM10-Rtd' then \n\t\tout.data.pm10=tonumber(name[2])\n\telseif name[1] == 'TSP-Rtd' then \n\t\tout.data.pm100=tonumber(name[2])\n\telseif name[1] == 'TEMP-Rtd' then \n\t\tout.data.temp=tonumber(name[2])\n\telseif name[1] == 'HUMI-Rtd' then \n\t\tout.data.humi=tonumber(name[2])\n\telseif name[1] == 'SO2-Rtd' then\n\t\tout.data.so2=tonumber(name[2])\n\telseif name[1] == 'NO2-Rtd' then \n\t\tout.data.no2=tonumber(name[2])\n\telseif name[1] == 'O3-Rtd' then \n\t\tout.data.o3=tonumber(name[2])\n\telseif name[1] == 'CO-Rtd' then\n\t\tout.data.co=tonumber(name[2])\n\telseif name[1] == 'CO2-Rtd' then \n\t\tout.data.co2=tonumber(name[2])\n\telseif name[1] == 'VOC-Rtd' then \n\t\tout.data.voc=tonumber(name[2])\n\telseif name[1] == 'CH2O-Rtd' then \n\t\tout.data.ch2o=tonumber(name[2])\n\telseif name[1] == 'O2-Rtd' then\n\t\tout.data.o2=tonumber(name[2])\n\telseif name[1] == 'MPA-Rtd' then \n\t\tout.data.mpa=tonumber(name[2])\n\telseif name[1] == 'WS-Rtd' then\n\t\tout.data.ws=tonumber(name[2])\n\telseif name[1] == 'WD-Rtd' then \n\t\tout.data.wd=tonumber(name[2])\n\telseif name[1] == 'NOISE-Rtd' then \n\t\tout.data.noise=tonumber(name[2])\n\telseif name[1] == 'CL2-Rtd' then\n\t\tout.data.cl2=tonumber(name[2])\n\telseif name[1] == 'HCL-Rtd' then \n\t\tout.data.hcl=tonumber(name[2])\n\telseif name[1] == 'H2S-Rtd' then \n\t\tout.data.h2s=tonumber(name[2])\n\telseif name[1] == 'NH3-Rtd' then\n\t\tout.data.nh3=tonumber(name[2])\n\telse\n\t\n\tend\nend\n\n	INLINE	2018-10-16 11:49:18.432+08	2018-12-15 12:57:42.057+08	2018-10-16	\N
281b572d-6cff-47db-b2dd-363d6443b061	ACM300_Z_2G	\N	智慧应用，电器火灾	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: ACM300-Z-2G\n]]--liankang\nstart=function ()\n    log.debug("ACM300Z2G start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ACM300Z2G encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ACM300Z2G decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x8B, BE);                        -- 读取寄存器数量 00 8B\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果\n-- 正确回复 0103FF 14080907211B 1111111111111111111111111111 1111111111111111111111111111 00000001001F001F00000081000100000000 419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC 38 43\n-- 0103FF14080907211B1111111111111111111111111111111111111111111111111111111100000001001F001F00000081000100000000419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC419051EC3843\n--  \n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n        log.debug("数据有效")\n        \n        local data = string.sub( da, 7, -5);\n        log.debug("ACM300Z2G data ==>"..data)\n        log.debug("ACM300Z2G dataLength ==>"..json.encode(string.len(data)))\n        -- 接收到的设备时间\n        local recvTime = unixtimestamp(data)\n        log.debug("ACM300Z2G time ==>"..recvTime)\n\n        -- 告警信息\n        local voltagePhaseSequenceFlag = iota.hexToUShort(data, 36, 'B')\n        local leakageTemperatureWiringFaultFlag = iota.hexToUShort(data, 38, 'B')\n        local leakageTemperatureAlarmFlag = iota.hexToUShort(data, 40, 'B')\n        local voltageStatusFlag = iota.hexToUShort(data, 44, 'B')\n        local currentStatusFlag = iota.hexToUShort(data, 46, 'B')\n        local digitalInputStatus = iota.hexToUShort(data, 48, 'B')\n        local digitalOutputStatus = iota.hexToUShort(data, 50, 'B')\n    \n\n        -- 获取告警后的所有数值\n        local valueTab = {}\n        for i = 52, 276, 4 do\n            -- log.debug("ACM300Z2G value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n            table.insert(valueTab, iota.hexToFloat(data, i, 'B'))\n        end\n        log.debug("ACM300Z2G valueTab"..json.encode(valueTab))\n        log.debug("ACM300Z2G valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n        local keyTab = {}\n        local valueIndexTab = {}\n        -- 电压相序标志位\n        if(1 == bit:_and(voltagePhaseSequenceFlag, 0x01)) then\n            table.insert(keyTab, "voltagePSF")\n            out.data["voltagePSF"] = 1;\n        end\n\n        -- 剩余电流报警时测量值\n        out.data["residualCurrentAlarm"] = valueTab[6]\n        \n        -- 漏电温度报警标志位\n        if(1 == bit:_and(leakageTemperatureAlarmFlag, 0x01)) then\n            if(0x02 == bit:_and(leakageTemperatureAlarmFlag, 0x02)) then\n                out.data["leakageTAF1"] = valueTab[7]\n            end\n            if(0x04 == bit:_and(leakageTemperatureAlarmFlag, 0x04)) then\n                out.data["leakageTAF2"] = valueTab[8]\n            end\n            if(0x08 == bit:_and(leakageTemperatureAlarmFlag, 0x08)) then\n                out.data["leakageTAF3"] = valueTab[9]\n            end\n            if(0x10 == bit:_and(leakageTemperatureAlarmFlag, 0x10)) then\n                out.data["leakageTAF4"] = valueTab[10]\n            end\n        end\n\n        -- 电压状态标志位\n        if(1 == bit:_and(voltageStatusFlag, 0x01)) then\n            out.data["voltageSFOverA"] = valueTab[22]\n            out.data["voltageSFOverB"] = valueTab[23]\n            out.data["voltageSFOverC"] = valueTab[24]\n        end\n        if(0x80 == bit:_and(voltageStatusFlag, 0x80)) then\n            out.data["voltageSFUnderA"] = valueTab[25]\n            out.data["voltageSFUnderB"] = valueTab[26]\n            out.data["voltageSFUnderC"] = valueTab[27]    \n        end\n\n        -- 电流状态标志位\n        if(1 == bit:_and(currentStatusFlag, 0x01)) then\n            out.data["currentSFOverA"] = valueTab[34]\n            out.data["currentSFOverB"] = valueTab[35]\n            out.data["currentSFOverC"] = valueTab[36]\n        end\n        out["time"] = recvTime \n\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 285 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于285   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n-- 将时间字符串转化为时间戳\nunixtimestamp=function(dateStr)\n    -- 12 06 15 11 3B 3A  ==>   18 06 21 17 59 58\n    local year = tonumber(string.sub( dateStr, 1, 2), 16) + 2000;\n\tlocal month = tonumber(string.sub( dateStr, 3, 4), 16);\n\tlocal day = tonumber(string.sub( dateStr, 5, 6), 16);\n    local hour = tonumber(string.sub( dateStr, 7, 8), 16);\n    local minute = tonumber(string.sub( dateStr, 9, 10), 16);\n    local second = tonumber(string.sub( dateStr, 11, 12), 16);\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n    local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n    if type(nNum) ~= "number" then\n        return nNum;\n    end\n    n = n or 0;\n    n = math.floor(n)\n    if n < 0 then\n        n = 0;   \n    end\n    local nDecimal = 10 ^ n\n    local nTemp = math.floor(nNum * nDecimal + 0.5);\n    local nRet = nTemp / nDecimal;\n    return nRet;\nend\n	INLINE	2020-01-07 11:41:08.925+08	2020-01-14 09:38:41.221+08	2020-01-07	\N
e746003f-c6e3-4213-9d13-706aa552dfd2	mk_level_1	\N	液位	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, m=%s", "mk_level_1.lua",device.uplink.props.module)\nend\n\nonData=function(hex)\n--AA01094100EB0000000000000000\n--"level": 235\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s",data)\n\tlocal moduleNo=device.uplink.props.module\n    local ErrorCode = IsValid(hex,moduleNo)\n  \tlocal resultData\n    if ErrorCode then\n      local level = iota.hexToShort(hex,4,'B') \n      out.data = {               \n\t\t\t\t\tlevel=level\n\t\t\t\t}\n      resultData =json.encode(out)\n    else\n      out.result = {code = errcode, msg = errormsg}\n      resultData =json.encode(out)\n    end\n   log.debug("recv %s, ctx=%s", "mk_level_1.lua",json.encode(out))\n   ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 14 then\n        errormsg = string.format('无效的数据长度=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,1,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1003\n        return false\n    end\n\t\n\tlocal valCmd = string.sub(data,3,4)     \n\tif valCmd ~= '41' then\n\t\terrormsg = string.format('无效的功能码CMD=0x%s',valCmd)\n        errcode = 1004\n\tend\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:24:37.511+08	2018-12-22 10:54:07.605+08	2018-01-08	\N
55b025d7-61e9-49a5-b144-ab7c86525a66	http-server	\N		2	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	start=function()\n  log.debug("LUA http server start")\nend\n\nonData=function(data)\n    log.debug("ondata http_server %s", json.encode(data))\n  \tack = {type="http", code= 200, body="ggggggggggggg"}\n    ctx:asend(ack)\nend\n\nctx:notify\nctx:done	INLINE	2018-11-13 13:35:47.321+08	2018-12-17 17:36:01.476+08	2018-11-13	\N
b56416f5-1d0a-447a-b178-90e538da66fe	geot_1406_ZX	\N	基泰四通道振弦采集   	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\t\tlog.debug("start %s, ctx=%s", "geot_1406_ZX.lua",json.encode(device.props.moduleId))\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1406_ZX 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1406_ZX 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t    --ff6100010014830102032030213122322333f51a\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x61, endian)\n        buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号                \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x14, endian)\n        buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x20, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x30, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x31, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x22, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x32, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x23, endian)\t\t\t\n\t\tbuff=iota.appendHexByte(buff, 0x33, endian)\t\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok=ctx:asend(buff)\n   log.debug("geot_1406_ZX:下发完成buff=%s",buff)\nend\n--moduleId=98 通道1  通道2  通道3  通道4\n--ff6000620027100144595bd8cc024456de1600036494187c4011648ae3c74512649a99054211648ae3c74512649a99054211648ae3c74512649a990542116444e59d5d126444e59d5d0480\n--前3组0 \n--第4组\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\t\n\tlog.debug("geot_1406_ZX Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("geot_1406_ZX:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\tfor i=0,3,1 do\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X + i*2 * 6,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n             local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + (i*2 + 1) * 6,'L');\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=i+1\n             log.debug("geot_1406_ZX:模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("geot_1406_ZX:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n              \tlog.debug("geot_1406_ZX:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n           \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n           \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s：公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n                    if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n                        Phy=nil\n                   \t\tlog.debug("geot_1406_ZX:模块号=%s,通道号=%s  参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                    else\n                  \t\tlog.debug("geot_1406_ZX:模块号=%s,通道号=%s  参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                        local Fi=vibrate\n         \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n                        log.debug("geot_1406_ZX:模块号=%s,通道号=%s 当前的Phy是:%s",moduleNo,channelNo,Phy)\n                    end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n               -- end\n             else\n                log.debug("geot_1406_ZX (振弦)子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n            end\n\t\t\tlocal data1={\n\t\t\t            data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.3f",Temp)),\n                  \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n        \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n   log.debug("geot_1406_ZX resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("geot_1406_ZX 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("geot_1406_ZX:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1406_ZX 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("geot_1406_ZX 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("geot_1406_ZX:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("geot_1406_ZX:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1406_ZX:开始校验数据%s',data)\n    if data == nil or string.len(data)/2 ~= 75 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n    log.debug('geot_1406_ZX:校验通过')\n\treturn true\n\t\nend\n	INLINE	2017-09-09 15:43:14.372+08	2018-05-25 17:09:14.872+08	2017-09-05	\N
d135605e-090a-44f6-844b-8c294ea13c83	fs_water_645_1997	\N	水表 电表字节长度不一样	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS   +16H           CS=（68a0a1a2a3a4a56801021090的累加和）\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n    log.debug("start %s, ctx=%s", "fs_water_645_1997.lua",json.encode(ctx.device))\n\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n    if string.len(moduleNo)<12 then\n       local lenadd=12-string.len(moduleNo)\n       for i=1,lenadd do\n           moduleNo='0'..string.lower(moduleNo)\n       end\n    end\n    --调换模块号字节序\n    local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_water_645_1997 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n    log.debug("fs_water_645_1997,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("fs_water_645_1997  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n-- 电表 module=000027034408\n--FEFE6808440327000068810643C34C333333B816    =》0.19   \n\n--水表 module=201806001180\n--00fefefe6880110006182068810843c33345333333337216  =》12\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_water_645_1997 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode,newDataStr = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        --\n          local hexBCD=getHexBCD(newDataStr)\n        --\n        log.debug("fs_water_645_1997  m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n        local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n        log.debug("fs_water_645_1997 initialvalue=%s",initialvalue)\n        local phy=totalenergy-initialvalue\n        log.debug("fs_water_645_1997  m=%s,totalenergy=%s ",moduleNoStr,totalenergy)\n        out.data = {           \n\t\t\treadingNumber=phy\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_water_645_1997 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid,newData=function(data,moduleCheck)\n    --data=string.gsub(data,'00fe','')\n    --data=string.gsub(data,'fefe','')\n  \tif data == nil or string.len(data)/2 <20 then\n        errormsg = string.format('无效的数据=%s长度=[%s]',data,string.len(data)/2)\n        errcode = 1001\n        return false\n    end\n  \n    for i=1,string.len(data)/2,1 do\n    \tlocal headByte=string.sub(data,1,2)\n       if headByte~='68' and string.len(data)>12 then\n      \t\tdata=string.sub(data,3,-1)\n       elseif headByte=='68' then\n        break\n      end\n    end\n    log.debug("fs_water_645_1997 校验 data=%s",data)\n    local dataAeraLen=tonumber(string.sub(data,19,20),16)+12\n    if data == nil or string.len(data)/2 ~= dataAeraLen then\n        errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,dataAeraLen)\n        errcode = 1001\n        return false\n    end\n    if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n        errormsg = '无效的数据头≠68 或 无效的数据尾≠16'\n        errcode = 1004\n        return false\n    end\n\t\n    local moduleCheckStr=string.sub(data,3,3+11)\n    moduleCheckStr=exchangeHtoL(moduleCheckStr)\n    if tostring(moduleCheck) ~= moduleCheckStr then\t\n        errormsg = string.format('无效的模块号=%s[%s]',moduleCheckStr,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    log.debug("fs_water_645_1997 校验通过 m=%s,data=%s",moduleCheck,data)\n    return true,data\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n    log.debug("fs_water_645_1997校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n    local sum = 0\n    for i = startIndex, endIndex-1 do\n\t    local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n        --log.debug("fs_water_645_1997校验和 i=%s, byteSte=%s",i,byteSte)\n        sum = (sum + tonumber(byteSte,16))\n    end        \n    local result = sum % 256\n   log.debug("fs_water_645_1997 校验和 result=%s hex=%s",result,string.format("%x",result))\n    return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n  log.debug("fs_water_645_1997 交换 moduleStr=%s",moduleStr)\n  local length=string.len(moduleStr)/2\n  local newModuleStr=''\n       for i=length-1,0,-1 do\n           newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n       end\n  log.debug("fs_water_645_1997 交换newModuleStr=%s",newModuleStr)\n  return newModuleStr\nend\n\ngetData=function(BCDstr)\n  log.debug("fs_water_645_1997 获取数据 BCDstr=%s",BCDstr)\n  local e_BCDstr=BCDstr  --exchangeHtoL(BCDstr)\n  local newBCDstr=''\n  local len=string.len(e_BCDstr)/2\n  for i=0,len-1,1 do\n     local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n     --log.debug("fs_water_645_1997 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n     local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n    --log.debug("fs_water_645_1997 获取数据 rawdata=%s",rawdata)\n     newBCDstr = newBCDstr..string.format('%02x',rawdata)\n    --log.debug("fs_water_645_1997 获取数据 newBCDstr=%s",newBCDstr)\n  end\n  log.debug("fs_water_645_1997 数据 newBCDstr=%s",newBCDstr)\n  return newBCDstr\nend\n\ngetHexBCD=function(hexStr)\n        local datalen=tonumber(string.sub(hexStr,19,20),16) --数据字节数\n    \tlog.debug("fs_water_645_1997 数据域 datalen=%s,hexStr=%s",datalen,hexStr)\n    \tlocal hexBCD=''\n        for i=1,datalen-2,1 do\n           hexBCD=hexBCD..string.sub(hexStr,-1*i*2-4,-1*i*2-3)\n        end\n        return hexBCD\nend\n	INLINE	2018-11-02 11:39:46.042+08	2019-05-21 10:41:03.357+08	2018-11-02	\N
80989031-5d20-4c1f-a1ac-949bad0026c8	fs_people_design	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("fs_people_design: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("fs_people_design: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\tlocal sData= toStrHex(hex)\n\tlocal cmd = Split(sData,',')\n\t\n\tif cmd[2] == 'R'  then --注册指令\n\t\ton_regest_replay(sData)\n\telseif cmd[2] == "S" then -- 实时数据\n\t\ton_data_replay(sData)\n\telseif cmd[2] == "H" then -- 历史数据\n\t\ton_data_replay(sData)\n\telse\n\tend\n\n    local resultData =json.encode(out)\n    log.debug("fs_people_design: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n  local bi = string.byte(str, i);\n  hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\non_regest_replay=function(sData)\n\tlocal acq = '$08,RA,0,1,#'\n\tacq = toHexStr(acq)\n\t--分两次发送08,RA,0,1,#\\n\n\tctx:asend(acq)\n      log.debug("fs_people_design: asend acq= %s",acq)\n\tctx:asend('0A')\nend\n\non_alarm_replay=function(alarmtype)\n\tlocal acq = '$08,AC,0,7,#\\n'\n\tif tostring(alarmtype) == '3' then \n\t\tacq = '$08,AC,0,3,#\\n'\n\tend\n\tacq = toHexStr(acq)\n\tctx:asend(acq)\n\nend \n\non_data_replay=function(sData)\n\tlocal str = Split(sData,',')\n\tlocal alarm = str[15]\n\tif tostring(alarm) == '8' then  --SOS报警\n\t\ton_alarm_replay('3')\n\t\tout.data.alarm ='SOS报警'\n\tend\n\t\tif tostring(alarm) == '128' then  --报道报警\n\t\ton_alarm_replay('7')\n\t\tout.data.alarm ='报道报警'\n\tend\n\tlocal power = tonumber(str[18])\n  \tlocal langdata = tonumber(string.sub(str[5],3,-1))/60\n  \tlog.debug("langdata=%s",langdata)\n\tlocal lang = tonumber(string.sub(str[5],1,2))+langdata\n\tlocal long = tonumber(string.sub(str[7],1,3))+tonumber(string.sub(str[7],4,-1))/60\n\tout.data.power = power\n\tout.data.lang = lang\n\tout.data.long = long\t\t\nend 	INLINE	2018-12-13 09:40:26.952+08	2018-12-19 09:43:20.276+08	2018-12-13	\N
030de29c-d4cb-4747-9885-3a81f9cf61ba	yh5700.lua	\N		1.0	48d081a7-0a5a-42cb-810c-029c445b96b5	48d081a7-0a5a-42cb-810c-029c445b96b5	f	48d081a7-0a5a-42cb-810c-029c445b96b5	Lua	--//04 项目资料/2017-06/基坑监测/银河传感器数据通信协议V2.1(1).pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift\n\n\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\n--AA75100001002841998500000004170620105130FFFF00010FFFFFF0001020204B4E1A3131313131313131313131313131313132323232323232320E\n--moduleId=2841998500000004\n--value=0.1  offsetvalue=409.5   temp=-0.1\nstart=function()\n    log.debug("load script %s, moduleId=%s", "yh5700.lua", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xAA, endian)\n    --buff=iota.appendHexByte(buff, device.props.moduleId, endian)             -- 2: 模块号\n    buff=iota.appendHexByte(buff, 0x75, endian)              -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x10, endian)              -- 1: 通道号\n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x0E, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\n\t--模块号部分\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yh5700 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yh5700 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=buff..moduleNo\n\t--日期部分\n\tlocal strDate=os.date("%y%m%d",os.time())\n    --log.debug("yh5700  m=%s 日期=%s",moduleNo,strDate)\n\tlocal strTime=os.date("%X",os.time())\n    --log.debug("yh5700  m=%s 时间=%s",moduleNo,strTime)\n\tlocal strYear=string.sub(strDate,1,2)\n\tlocal strMonth=string.sub(strDate,3,4)\n\tlocal strDay=string.sub(strDate,5,6)\n  \n\tlocal strHour=string.sub(strTime,1,2)\n\tlocal strMinute=string.sub(strTime,4,5)\n\tlocal strSecond=string.sub(strTime,7,8)\n\tlocal datebuff=strYear..strMonth..strDay..strHour..strMinute..strSecond\n    buff=buff..datebuff\n\t--结尾 需添加00\n  \tlocal xorStr=iota.hexCheckXor(buff.."00",0)\n  \tlog.debug("yh5700: [m=%s]  Xor=%s",moduleNo,xorStr)\n\tbuff=iota.appendHexByte(buff, xorStr, endian)\n  \tlog.debug("yh5700 [m=%s]  发送采集命令  cmd=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\t \n    local result={}\n    if ok then\n    \tlog.debug(string.format("yh5700  [m=%s], resp=%s",moduleNo,resp))\n        result = unmarshall(resp,moduleNo)  \n   \t\t\n    else\n    \t log.debug("yh5700 [m=%s]  数据接收超时 ok=%s resp=%s",moduleNo,ok,resp)\n    \t local errorout={\n                    data ={},\n                    result = {}\n                }\n    \t errorout.result = {code=1003,msg="采集超时"}\n         result=json.encode(errorout)\n    end\n   ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if string.sub(hex,13,28)  ~= string.lower(moduleStr) then \n        errcode = 1001\n        errormsg = 'Hex moudleId is False' \n        log.debug("yh5700  模块号校验失败 moduleStr=%s string.sub(hex,13,28)=%s ",string.lower(moduleStr),string.sub(hex,13,28))\n        return json.encode(out)\n    end\n    log.debug("yh5700  模块号校验通过")\n    if ErrorCode then     \n        local temp = iota.hexToShort(hex,20,'B')*0.1\n\t\t--bit:_and(0xFF,bit:_rshift(tempByte[1],3))==0x1f\n\t\tlocal buffer34=string.sub(hex,34*2+1,34*2+2)\n        log.debug("yh5700  buffer34:"..buffer34)\n        log.debug("yh5700  buffer34类型:"..type(buffer34))\n        --log.debug("buffer34:转换数字"..(tonumber(buffer34)))\n        local offset=bit:_rshift(bit:_and(tonumber(buffer34,16),0xF0),4)\n\t\tlocal value1=iota.hexToShort(hex,22,'B')--应变\n    \tlocal value2=iota.hexToShort(hex,24,'B')--偏移值\n\t\tlocal value=value1/(10^offset)\n\t\tlocal offsetValue=value2/(10^offset)\n    \tlocal unit=hexToStr(string.sub(hex,30*2+1,30*2+6))\n\t\tlog.debug("yh5700 系数 m=%s  offset=%s  unit=%s",moduleStr,offset,unit)\n        if unit=="KPa" then --单位转换为MPa\n           value=value/1000.0\n      \tend\n    --协议能力输出先不改 \n        out.data = {\n            temp=temp,\n            value = value,\n            offsetValue = offsetValue\n        }\n\t\t\n    else\n        log.debug("yh5700 [m=%s] 校验失败[%s]",moduleStr,errormsg)\n        out.result = {code=errcode,msg=errormsg} \n    end\n  \tlog.debug("yh5700 [m=%s] 数据=%s",moduleStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid = function(checkData)\n    local data=checkData\n    log.debug('yh5700  开始校验data=%s',data)\n    \n\n    --厂家说 通讯过程  错误字符在485线路上是比较常见的 需要依字节排查\n    --找头\n    local startIndex=string.find(data, "557a", 1)\n    if startIndex~=nil then\n        data=string.sub(data,startIndex,-1)\n    end\n\n    \n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen < 8 then\n        errormsg = string.format('Data is nil or Invalid length<8[%s]', checkData)\n        errcode = 1002\n        return false\n    end\n    local respose_head=string.sub(data,1,6)\n    if respose_head ~= '557a10' then\n        errcode = 1003\n        errormsg = 'respose_head ~= 557a10'\n        return false\n    end\n\n    local checkLen=string.sub(data,7,10)\n    local len=7+tonumber(checkLen,16)\n    if dataLen < len then\n        errormsg = string.format('DataLen is invalid length<%s[%s]', len,checkData)\n        errcode = 1002\n        return false\n    end\n\n\n    log.debug('yh5700  校验通过data=%s',data)\n    return true\n    --crc\nend\n\n--HEX字符串->ascii字符串\nhexToStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2017-12-01 17:56:30.093+08	2020-07-06 10:04:06.207+08	2017-12-01	\N
bf768303-c930-4c11-8397-4676f65152f9	jm_lvdt_1550	\N	总线型位移计指令表--金马静力水准仪协议  传感器单独使用	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//04 项目资料/2017-12/总线型位移计指令表--金马静力水准仪协议.pdf   \n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度   本协议是老版本\nstart=function()\n    log.debug("start %s, moduleId=%s", "jm_lvdt_1550.lua",device.props.moduleId or 'nil')\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian)                   \n    buff=iota.appendHexByte(buff, 0x2b, endian)  \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_lvdt_1550 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_lvdt_1550 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n    if string.len(moduleNo)<6 then\n        local strlen=6-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n     buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n  buff= buff..toHexStr(string.sub(moduleNo,2,2))\n  buff= buff..toHexStr(string.sub(moduleNo,3,3))\n  buff= buff..toHexStr(string.sub(moduleNo,4,4))\n  buff= buff..toHexStr(string.sub(moduleNo,5,5))\n  buff= buff..toHexStr(string.sub(moduleNo,6,6))\n  log.debug("jm_lvdt_1550 moduleId=%s send: %s",moduleNo or 'nil',buff)\n    ok,resp=ctx:ssend(buff,60000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    \tlog.debug("jm_lvdt_1550 moduleId=%s result= %s",moduleNo,result)\n    \t ctx:done(result)\n    else\n        log.debug("jm_lvdt_1550 moduleId=%s 数据采集失败 resp=%s",moduleNo or 'nil',resp)\n    end\n   \nend\n\nunmarshall=function(hex,moduleStr)\n    --245961485949634863   moduleId=1\n    --"level":1095.05,\n   \n    log.debug("jm_lvdt_1550 moduleId=%s recv: %s",moduleStr or 'nil',hex)\n    --log.debug("jm1550收到数据："..hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        \n \n    \n       local level=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n      local level0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\n       out.data = {\n        level=level,\n        level0=level0\n       }\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    log.debug("jm_lvdt_1550 moduleId=%s 校验数据 data= %s",moduleCheck,data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('jm_lvdt_1550:模块%s数据校验失败Data is nil or invalid length[%s] hex=%s',moduleCheck,string.len(data)/2,data)\n        return false\n    end\n  log.debug('CMD=%s',iota.hexToByte(data,0,'B'))\n    if iota.hexToByte(data,0,'B') ~= 0x24 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n    \tlog.debug('jm_lvdt_1550:模块%s数据校验失败 Hex CMD False hex=%s',moduleCheck,data)\n        return false\n    end\n\n    log.debug("jm_lvdt_1550 moduleId=%s 校验通过 data= %s",moduleCheck,data)\n    return true\n--crc\nend\n\n  -- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n	INLINE	2018-01-10 10:46:21.862+08	2018-10-31 11:07:29.234+08	2018-01-08	\N
814665db-0ede-4cc6-90de-ac291cdbf814	zh_inclination_1540	\N	东方中恒单轴倾角协议	1.0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	f	5c2a5b34-3127-4921-bf54-49378012c0b0	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\n\nstart=function()\n    log.debug("start %s, ctx=", "zh_inclination_1540.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n    if module > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        ctx:done(json.encode(errout))\n    else\n        local moduleNo=uintToBytes(tonumber(device.props.moduleId))\n        buff=iota.appendHexByte(buff, 0x46, endian)  \n        buff=iota.appendHexByte(buff, 0x54, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x13, endian)\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, moduleNo[1], endian)             -- 4: 模块号\n        buff=iota.appendHexByte(buff, moduleNo[2], endian)             \n        buff=iota.appendHexByte(buff, moduleNo[3], endian)             \n        buff=iota.appendHexByte(buff, moduleNo[4], endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)      \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x00, endian)      \n        local hi,lo = checkPlusSum16(buff,2,16)     --CRC\n        local histr = string.format("%02X",hi)\n        local lostr = string.format("%02X",lo)\n        buff = buff..histr..lostr\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --46540001130101010100000001000005170035 \n        --moduleId=1   "angleX": 13.03\n        local inclination = iota.hexToInt(hex,13,'B')/100.0\n\n        out.data = {\n            angleX=inclination\n\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 19 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x46 or iota.hexToByte(data,1,'B') ~= 0x54 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    local sumHi,sumLo = checkPlusSum16(data,2,17)\n    if iota.hexToByte(data,17,'B') ~= sumHi or iota.hexToByte(data,18,'B') ~= sumLo then\n        errcode = 1003\n        errormsg = 'checkPlusSum16 is Error ' \n        return false\n    end\n    local module = bytesToUint(data,9)\n  log.debug("module=%d",module)\n    if tonumber(device.props.moduleId) ~= module then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\nuintToBytes=function(value)--高位在前地位在后\n    local src={}\n    \n    local byte = bit:_and(bit:_rshift(value , 24) , 0xFF)\n    table.insert(src,byte)\n    byte = bit:_and(bit:_rshift(value , 16) , 0xFF)\n    table.insert(src,byte)\n    byte = bit:_and(bit:_rshift(value , 8) , 0xFF)\n    table.insert(src,byte)\n    byte = bit:_and(value , 0xFF)\n    table.insert(src,byte)\n    return src                                    \n            \nend\n\n\nbytesToUint=function(src,offset)--高位在前地位在后\n    \n    local value = 0\n    value = bit:_or(bit:_or(bit:_or(bit:_lshift(bit:_and(tonumber(string.sub(src,2*offset+1,2*(offset+1)),16) , 0xFF) , 24)\n            , bit:_lshift(bit:_and(tonumber(string.sub(src,2*(offset+1)+1,2*(offset+2)),16) , 0xFF) , 16))\n            , bit:_lshift(bit:_and(tonumber(string.sub(src,2*(offset+2)+1,2*(offset+3)),16) , 0xFF) , 8))\n            , bit:_and(tonumber(string.sub(src,2*(offset+3)+1,2*(offset+4)),16) , 0xFF))\n    return value;\nend\n\ncheckPlusSum16=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff  \n        end\n    end \n    local hi = bit:_and(bit:_rshift(sum,8) , 0xff)\n    local lo = bit:_and(sum , 0xff)\n    return hi,lo\nend \n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend	INLINE	2017-09-25 10:38:09.039+08	2018-02-28 18:32:12.208+08	2017-09-23	\N
1ee103da-e152-4e3d-8339-1606813a19c3	11	\N		11	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	f	94c7cf4e-584f-4ab4-bbfc-aa2c818e3c26	Lua	sdf	INLINE	2018-01-22 17:18:19.833+08	2018-01-30 13:56:39.422+08	2018-01-22	\N
46106eaa-ff62-41cf-b93f-26fd6b48fe1d	9000A	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("9000A start moudleid=%s", device.props.pointId or "nil")\n    local pointId==device.uplink.props.URL\n    local payload={\n        queryDataPoint={      \n            slaveIndex=device.props.slaveIndex,           --要查询的数据点所属从机序号\n            pointId=device.props.pointId             --要查询的数据点 id\n        }\n    \n    ctx:ssend(\n\t{ \n        type="mqtt",\n\t    payload=json.encode(payload)\n        }              \n    },\n    3000) \nend \n\nonData=function(data) \n\n    --subject:  string              -- 状态码, 对应 statusCode, 譬如 200\n    --payload: string               -- 应答 数据, 自行解码.\n    if data ~=nil then\n        log.debug("9000A:payload=%s", data.payload)\n        parseDiag(data.payload)\n\n    else\n        log.error("9000A:data is nil")\n    end\nend\n\nfunction parseDiag(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\n\n\n    local data1 ={\n        data={\n            anglex = dj.RV[1] or 0,\n            angley= dj.RV[2] or 0,\n            temperature= dj.RV[3] or 0,  \n        },\n        device=childDevice.id,\n        type=1,\n        time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n        }\n    table.insert(out.data,data1)\n\n\n    local resultData =json.encode(out)\n    log.debug("9000A:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId)  then\n                 return child\n           \t  end\n\t\tend\n    else\n       log.debug("zdhl_air_1:".."subdevices是nil")\n    \treturn nil\n    end\nend\n        	INLINE	2018-06-28 15:30:11.835+08	2018-06-28 15:30:11.835+08	2018-06-28	\N
ccd4746c-7684-408a-941b-20b9baad024b	njsy__8500	\N		1.0	d8e712e8-731c-45ed-8c90-23504d4e7daf	d8e712e8-731c-45ed-8c90-23504d4e7daf	f	d8e712e8-731c-45ed-8c90-23504d4e7daf	Lua	start=function()   \n   ok,resp=ctx:asend("01020304")\nend\n\n\nonData=function(hex)\n    log.debug("njsy__8500 收到数据=%s", hex)\n    --log.debug("njsy__8500 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local data=hex\n    \n    local ErrorCode = IsValid(data)\n    if ErrorCode then\n        log.debug('njsy__8500 数据有效=%s',data)\n        --数据回复\n        local sensorId_index=7\n        local sensorTime_index=21\n        local dataType_index=38\n\n        local sensorId_hex=string.sub(data,sensorId_index*2-1,(sensorId_index+13)*2)\n        local sensorId=HextoStr(sensorId_hex)\n        local sensorTime=string.sub(data,sensorTime_index*2-1,(sensorTime_index+16)*2)\n        local dataType=string.sub(data,dataType_index*2-1,dataType_index*2)\n\n        if dataType=='00' then --定位数据\n            --回复定位数据\n            local hexStr='232300129013'..sensorId..sensorTime..'00'\n            local resp_hexStr_location=iota.appendHexCrc(hexStr, 'L' ,0)\n            resp_hexStr_location=resp_hexStr_location..'0d0a'\n            --ok=ctx:asend("resp_hexStr_location")\n        elseif dataType=='ff'then --设备数据\n            local dataLength=tonumber(string.sub(data,5,8),16)\n            local dataCount=math.modf(dataLength/30)\n            log.debug("njsy__8500  sensorID=%s",sensorId)\n            for i=1,dataCount,1 do\n                 \n                \n                local childDevice=getDeviceInfo(sensorId)\n                if childDevice~=nil then\n                    --分析单类数据\n                    local sensorTime_hex=string.sub(data,sensorTime_index*2-1+(i-1)*30*2,(sensorTime_index+16)*2+(i-1)*30*2)\n                    local sensorValue_hex=string.sub(data,sensorTime_index*2-1+(i-1)*30*2+20*2,(sensorTime_index+7)*2+(i-1)*30*2+20*2)\n                    local timenow=unixtimestamp(sensorTime_hex)\n                    -- local phy1=hexToDouble(sensorValue_hex,0,'B')\n                    --local phy2=hexToDouble(sensorValue_hex,4,'B')\n                    local phy1=iota.hexToFloat(sensorValue_hex,0,'B')\n                    local phy2=iota.hexToFloat(sensorValue_hex,4,'B')\n                    local data1 = {\n                        data={\n                            temperature=phy1,\n                            humidity=phy2\n                        },\n                    device=childDevice.id,\n                        time=timenow,  \n                        type=1                       \n                    }                   \n                    table.insert(out.data,data1)\t\t\t\t\t\t\t\t\t\n        \n                    log.debug("njsy__8500  data=%s",json.encode(out))\n                else\n                    log.debug("njsy__8500  childDevice=nil")\n                end\n            end\n            \n        end\n\n        local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n        local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n        ok=ctx:asend(timeResponse)\n    \n        local length={}\n        local temp={}\n        local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n        local channelCounts=tonumber(channelCounts_hex,16)\n        for i=1,channelCounts,1 do\n            length[i]=iota.hexToShort(data,14+(i-1)*4,'L')\t\n            temp[i]=iota.hexToShort(data,14+(i-1)*4+2,'L')\n        end\n\n    else\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\n\nend\n\nIsValid=function(data)\n    local checkdatalength=string.len(data)/2\n\n    if checkdatalength<54 then\n        errormsg = string.format('data length is wrong[%s]',checkdatalength)\n        errorcode = 1001\n        --ok=ctx:asend("4552")\n        return false\n    end\n\n    if string.sub(data,1,4) ~= '2323' or string.sub(data,-4,-1)~='0d0a' then  \n            errormsg = 'Data is Invalid'\n            errorcode = 1001\n        --ok=ctx:asend("4552")\n        return false\n    end\n    \n    log.debug("njsy__8500 校验通过")\n    return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n    local sum = 0\n    for i = startIndex, endIndex,4 do\n        sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n    end        \n    local result = sum \n    return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("njsy__8500 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index,child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("njsy__8500:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n                \n            moduleStrCheck=child.props.sensorID --模块 通道 优先接口获取\n           \n            --log.debug("njsy__8500 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)                          \n            if moduleStrCheck==moduleNoId then               \n                log.debug("njsy__8500:  m=%s  匹配到子设备child=%s",moduleStrCheck,json.encode(child))\n                return child\n             end\n        end\n    else\n        log.debug("njsy__8500:  subdevices是nil")\n        return nil\n    end\nend\n\nunixtimestamp=function(datestr)\n    --3230313830343130313033353530343530\n    log.debug("JCLQ2021 datestr=%s",datestr)\n    local datebuff={}\n    for i=1,string.len(datestr)/2,1 do\n        datebuff[i]=string.sub(datestr,(i-1)*2+1,i*2)\n    end\n    local year = tonumber(string.char(tonumber(datebuff[1],16),tonumber(datebuff[2],16),tonumber(datebuff[3],16),tonumber(datebuff[4],16)))\n\tlocal month = tonumber(string.char(tonumber(datebuff[5],16),tonumber(datebuff[6],16)))\n\tlocal day = tonumber(string.char(tonumber(datebuff[7],16),tonumber(datebuff[8],16)))\n    local hour = tonumber(string.char(tonumber(datebuff[9],16),tonumber(datebuff[10],16)))\n    local minute = tonumber(string.char(tonumber(datebuff[11],16),tonumber(datebuff[12],16)))\n    local second = tonumber(string.char(tonumber(datebuff[13],16),tonumber(datebuff[14],16)))\n    --log.debug("njsy__8500 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("njsy__8500 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("njsy__8500 recordTime=%s",recordTime)\n\treturn recordTime\nend\n\nhexToDouble=function(hex,index,endian)\n    local stacklen = string.len(hex)\n    if stacklen < 3 then\n        return nil\n    end\n    local buff = string.sub(hex,2*index+1,2*(index+8))\n    local data = 0\n    if endian == 'B' then\n\n        local d = tonumber(string.sub(buff,1,3),16)\n        local f = tonumber('1'..string.sub(buff,4,16),16)\n\n        data = (-1)^0 * f *(2^(-52)* 2^(d-1023))  \n        return data\n    elseif endian == 'L' then\n        local bi =  ''\n        for i=1,8 do\n            bi = bi..string.sub(buff,-2*(i),-1*(2*i-1))\n        end\n\n        local dl = tonumber(string.sub(bi,1,3),16)\n        local fl = tonumber('1'..string.sub(bi,4,16),16)\n\n        data = (-1)^0 * fl *(2^(-52)* 2^(dl-1023))  \n        return data\n    else\n        return nil\n    end    \nend\n\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend	INLINE	2018-09-13 16:48:48.839+08	2018-09-21 14:37:18.48+08	2018-09-13	\N
adc151ff-eda9-4130-9f47-0c1adb863ae8	anXin_laser_9514	\N	安信激光测距（请求应答）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 7, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==26) then\n        --   2   2   1      4     4       2\n        -- \n        \n        --print("parsing data", hex)\n        local distance = iota.hexToShort(hex,9,'B')/ 10000\n        out.data = {\n            distance=distance\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-01 17:02:12.455+08	2019-12-23 14:44:25.871+08	2017-09-01	\N
0cbce951-a9a9-4eed-b235-fad6a532803b	BeiDou_4800	\N	占位	1.0	37315d9c-8e25-4ec7-901b-851fdcb94068	37315d9c-8e25-4ec7-901b-851fdcb94068	f	37315d9c-8e25-4ec7-901b-851fdcb94068	Lua	--//02 协议分析/2017-04/优先接入/天津滨海工业研究院港口监测项目/孔隙水压力及分层沉降无线数据采集 通讯协议V1.03.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n--\n\n--\nstart=function()\nlog.debug("load script %s, moduleId=%s", "beidou_4800.lua", device.props.moduleId or "[nil]")\n      log.debug("beidou_4800:".."LUA: ctx is =%s", json.encode(device))\n    ok,resp=ctx:ssend("0102030405060708",15000)\n    log.debug("beidou_4800:".."测试下发正常")\nend\n\n\n--44415430313A42503030303031352C31372D30342D32352031303A32343A33392C30313736392C30313736392C30313736392C30313736392C30313736392C30313630302C30313630322C30313630382C30313539382C30313630302C30323130382C30323130382C30323130382C30323130382C30323130382C30313432302C30313432382C30313432362C30313432382C30313432342C30313534312C30313534322C30313534302C30313534322C30313534332C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C30303030302C454E44\nonData=function(hex)\n    log.debug("beidou_4800:".."LUA: onData: Received data ==> %s", hex)\n\t--log.debug("beidou_4800:".."LUA:device : data is =%s", json.encode(device))\n    --log.debug("beidou_4800:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=HexToStr(hex)\n        --log.debug("beidou_4800:sData是 %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,',')\n        local moduleNo_str=string.sub(allResponse[1],4,5)\n        local moduleNo=tonumber(moduleNo_str)\n\t\tlocal channelNo\n\n\t\tif moduleNo==1 then\n        --分析单类数据\n            for k=2+1,table_leng(allResponse)-1,5 do\n\t\t\t    local singleData=v\n\t\t\t\t--移除单类数据中的空 \n\n\t\t\t\t\n\t\t\t\t   \n\t\t\t\t   channelNo=(k-2)/5+1\n\t\t\t\t   channelNo=getIntPart(channelNo)\n\t\t\t\t\t--解析单条数据\n\t\t\t\t\tlocal frequency1=tonumber(allResponse[k])\n\t\t\t\t\tlocal frequency2=tonumber(allResponse[k+1])\n\t\t\t\t\tlocal frequency3=tonumber(allResponse[k+2])\n\t\t\t\t\tlocal frequency4=tonumber(allResponse[k+3])\n\t\t\t\t\tlocal frequency5=tonumber(allResponse[k+4])\n\t\t\t\t    \n\t\t\t\t\tlocal freq=frequency1+frequency2+frequency3+frequency4+frequency5-math.max(frequency1,frequency2,frequency3,frequency4,frequency5)-math.min(frequency1,frequency2,frequency3,frequency4,frequency5)\n\t\t\t\t\tlocal agvfreq=freq/3.0\n\t\t\t\t\t--log.debug("beidou_4800:当前模块%s通道%s的agvfreq是:%s",moduleNo,channelNo,agvfreq)\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo) \n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal deviceId=childDevice.id\t\n\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tlocal phy\t\t\t\n\t\t\t\t\t\tif k ==nil or f0 ==nil then\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlog.debug("beidou_4800:模块%s通道%s的公式参数为空是:k=%s,f0=%s",moduleNo,channelNo,k,f0)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tphy =k * (agvfreq ^ 2 - f0 ^ 2)\n\t\t\t\t\t\t\tlog.debug("beidou_4800:模块%s通道%s的当前的phy是:%s",moduleNo,channelNo,phy)\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t  \n\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tfrequency=agvfreq,--每路有5次测量值 只展示平均值\n\t\t\t\t\t\t\t\t\t\t\tphy=phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\n\t\t\t\t\t\tlog.debug("beidou_4800:模块%s,通道%s deviceId=%s,frequency结果frequency=%s,phy=%s",moduleNo,channelNo,deviceId,agvfreq,phy)\n\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\tend\n\t\telseif moduleNo==2 then\n\t\t\tlocal electricity=tonumber(allResponse[3])\n\t\t\tlocal temp=tonumber(allResponse[4])\n\t\t\t\n\t\t\tfor k=4+1,table_leng(allResponse)-1,1 do\n\t\t\t    local singleData=v\n\t\t\t\t--移除单类数据中的空 \n\n\n\t\t\t\t   \n\t\t\t\t   channelNo=k-3\n\t\t\t\t\t--解析单条数据\n\t\t\t\t\tlocal distance=tonumber(allResponse[k])\n\t\t\t\t\t\n\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal deviceId=childDevice.id\t\t\t\t\t\n\t\t\t\t\t\t\t\t  \n\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tdistance=distance,\n\t\t\t\t\t\t\t\t\t\t\ttemp=temp,\n\t\t\t\t\t\t\t\t\t\t\telectricity=electricity\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tlog.debug("beidou_4800:模块%s,通道%s,deviceId=%s,distance=%s,temp=%s,electricity=%s",moduleNo,channelNo,deviceId,distance,temp,electricity)\t\n\t\t\t\t\tend\n\t\t\tend\t\n\t\telse\n\t\t\tlog.debug("beidou_4800:moduleNo !=1 and moduleNo !=2",Phy)\n\t\tend \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("beidou_4800:通知处理展示数据 data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n                 log.debug("beidou_4800:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("beidou_4800:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("beidou_4800:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(data)\n    log.debug('beidou_4800:开始校验数据')\n    if data == nil or string.len(data)/2 < 3 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('beidou_4800:  数据 长度校验失败：Data is nil or invalid length')\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x44 or iota.hexToByte(data,string.len(data)/2-1,'B') ~= 0x44 or iota.hexToByte(data,1,'B') ~= 0x41  then\n        errcode = 1003\n        errormsg = 'CMD is wrong ' \n\t\tlog.debug('beidou_4800: 数据校验失败：CMD错误')\n        return false\n    end\n    log.debug('beidou_4800:校验数据通过！！！')\n    return true\nend\n\ntable_leng=function(t)\n    local leng=0\n    for k, v in pairs(t) do\n      leng=leng+1\n    end\n    return leng;\nend\n\n--Hex字符串->ascii字符\nHexToStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\nfunction getIntPart(x)  --取整\n    if x<= 0 then\n        return math.ceil(x)\n    end\n    if math.ceil(x) == x then\n        x = math.ceil(x)\n    else\n        x = math.ceil(x)-1\n    end\n\n\n    return x\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\n	INLINE	2018-01-08 16:54:43.786+08	2018-03-23 10:09:33.029+08	2018-01-06	\N
99b4ff2d-6b14-4ab0-9e98-b2d349bc74d3	133	\N		1	32fed51e-ebe8-4cbe-978d-9e018288d245	32fed51e-ebe8-4cbe-978d-9e018288d245	f	32fed51e-ebe8-4cbe-978d-9e018288d245	Lua	this is a test	INLINE	2018-11-01 17:23:56.789+08	2018-11-01 17:23:56.789+08	2018-11-01	\N
a07a4bf8-c1c2-49da-b8dc-e2f2825764a1	rtu_disater	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    --log.debug("rtu_data  , device=%s=%s",json.encode(device))\nend\n\ngetJson = function(rawStr)\n    local startIndex = string.find(rawStr, '{', 1)\n    local str = string.sub(rawStr, startIndex, -1)\n    str = string.gsub(str, '=', ':')\n    str = string.gsub(str, ';', ',')\n    return str\nend\nonData = function(hex)\n    log.debug('rtu_data  , device=%s', json.encode(device))\n    log.debug('rtu_data payload=%s', hex.payload)\n    --全局\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local errcode\n    local errormsg\n    GenrateTimeSet()\n    local js = hex.payload\n    local ishavepic = string.find(hex.payload, 'ds_id')\n    local ispower = string.find(hex.payload, '0_0_001')\n    local index = string.find(js, ':')\n    if ispower == nil then\n        js = string.sub(js, index + 1, -2)\n    end\n    local data = Split(js, ',')\n    local pictime\n    if ishavepic ~= nil then --判断是否为图片\n        --log.debug('rtu_data data[2]=%s', data[2])\n        local jsd = hex.payload\n        local index = string.find(jsd, ':')\n        jsd = string.sub(jsd, index + 1, -1)\n        local jsd = string.sub(hex.payload, index + 1, -1)\n        local datapic = Split(jsd, ',')\n        --log.debug('rtu_data datapic[2] =%s', datapic[2])\n        local data_t = Split(datapic[2], '}')\n        --log.debug('rtu_data data_t=%s', data_t[1])\n        local time_d = Split(data_t[1], '":')\n        pictime = string.sub(time_d[2], 1, -2)\n        T = unixtimestamp(pictime) --时间\n        --log.debug('rtu_data pictime=%s', pictime)\n        local index_data = string.find(data_t[2], 'FFD8')\n        valuestr = string.sub(data_t[2], index_data, -1)\n        --log.debug('rtu_data valuestr=%s', valuestr)\n        local dev_data = string.sub(datapic[1], 2, -2)\n        local data_next = Split(dev_data, '_')\n        local module = data_next[2]\n        local channel = data_next[1]\n        --log.debug('rtu_data  module = %s channel = %s ', module,channel)\n        childDevice = getDeviceInfo(module, channel)\n        log.debug('rtu_data childDevice=%s module = %s channel = %s ,pictime=%s ,valuestr=%s', childDevice, module, channel, pictime, valuestr)\n    elseif ispower ~= nil then\n        local jsonStr = getJson(js)\n        local jsonData = json.decode(jsonStr)\n        log.debug('rtu_data  诊断 json反序列化成功 jsonStr=%s', jsonStr)\n        --测试 直接按照json解析 20201028\n        local power\n        local version\n        local config_version\n        local records\n        power = jsonData['001'].value.p\n        version = jsonData['001'].value.sv\n        config_version = jsonData['001'].value.cv\n        sensor_num = jsonData['001'].value.sn\n        overstock = jsonData['001'].value.re --积压数据个数\n        rouse = jsonData['001'].value.wt --唤醒次数\n        loction = jsonData['001'].value.lc --存储位置\n\n        local nodeData = {\n      \t\tCDV=config_version,--固件版本\n            P=power,--节点电量\n      \t\tW=os.date('%Y-%m-%d %H:%M:%S'),--实际数据内没有时间，采用服务器实时时间\n            R = overstock,--积压数据个数\n            WTS = rouse, --唤醒次数\n            LC = loction --存储位置（新增）\n        }\n\n        local rst = {\n            data = {\n                _data_type = 'diag',\n                R = {\n                    base = {\n                        cc = {\n                            gpi = {\n                                --gp = power\n                            }\n                        },\n                        fw = {\n                            v = version,\n                            cv = config_version,\n                            sn = sensor_num\n                        }\n                    },\n                    node = {nodeData\n                    }\n                }\n            },\n            device = device.id,\n            type = 1,\n            time = os.date('%Y-%m-%dT%H:%M:%S+08:00')\n        }\n        table.insert(out.data, rst)\n    else\n        log.debug('rtu_data data jsoncount=%s', #(data))\n        for k, v in ipairs(data) do\n            if v ~= '' and v ~= nil then\n                local dj = v\n                log.debug('rtu_data dj=%s', dj)\n                if dj ~= nil and dj ~= '' then\n                    --获取传感器\n                    local cmd = Split(dj, '=')\n                    log.debug('rtu_data cmd=%s value=%s,no=%s', cmd[1], string.find(cmd[1], 'value'), string.find(cmd[1], 'no'))\n                    if string.find(cmd[1], 'value') ~= nil then\n                        if string.find(dj, ';') ~= nil then\n                            valuedata = Split(dj, ';')\n                            local value = Split(valuedata[1], '=')\n                            vaulex = value[3]\n                            value = Split(valuedata[2], '=')\n                            vauley = string.sub(value[2], 1, -2)\n                            --log.debug('rtu_data  valuedata=%s vauley=%s', valuedata[1], vauley)\n                            if #(valuedata) > 2 then\n                                value = Split(valuedata[3], '=')\n                                vaulez = string.sub(value[2], 1, -2)\n                \t\t\t--log.debug('rtu_data  valuedata=%s vauley=%s vauley=%s', valuedata[1], vauley,vaulez)\n                            end\n                            if #(valuedata) > 3 then\n                                value = Split(valuedata[3], '=')\n                                vaulez = value[2]\n                                value = Split(valuedata[4], '=')\n                                valuef = string.sub(value[2], 1, -2)\n                                --log.debug('rtu_data vaule4=%s,vaulef=%s', valuedata[4], vaulef)\n                            end\n\t\t\t\t\t\t\tif #(valuedata) > 4 then\n                                value = Split(valuedata[3], '=')\n                                vaulez = value[2]\n                                value = Split(valuedata[4], '=')\n\t\t\t\t\t\t\t\tvaulef = value[2]\n\t\t\t\t\t\t\t\tvalue = Split(valuedata[5], '=')\n                                valued = string.sub(value[2], 1, -2)\n                                --log.debug('rtu_data vaule4=%s,vaulef=%s', valuedata[4], vaulef)\n                            end\n                        else\n                            valuestr = cmd[2]\n                        end\n                    elseif string.find(cmd[1], 'no') ~= nil then\n                        --log.debug('rtu_data childDevice=%s', json.encode(childDevice))\n                        local sendata = Split(cmd[2], '_')\n                        local module = string.sub(sendata[2], 1, -1)\n                        local channel = string.sub(sendata[1], 2)\n                        log.debug('rtu_data module=%s  ch=%s', module, channel)\n                        childDevice = getDeviceInfo(module, channel)\n                    elseif string.find(cmd[1], 'at') ~= nil then\n                        ---获取时间\n                        local timestr = cmd[2]\n                        log.debug('rtu_data timestr=%s', timestr)\n                        if timestr ~= '' then\n                            T = unixtimestamp(timestr)\n                        end\n                    elseif string.find(cmd[1], 'flag') ~= nil then\n                        ---获取flag  告警标记\n                        local flag = cmd[2]\n                        flag = string.sub(flag, 2, -3)\n                        log.debug('rtu_data flag=%s', flag)\n                        if flag == '1' then\n                            errcode = 30070001\n                            errormsg = '设备数据超阈值告警'\n                            log.debug('rtu_data  设备告警[%s,%s]', errcode, errormsg)\n                        end\n                    else\n                    end\n                else\n                    log.debug('rtu_data  dj=nil dj=%s', dj)\n                end\n            else\n                log.debug('rtu_data  v is nil v=%s', json.decode(v))\n            end\n        end\n    end\n    if childDevice ~= nil and childDevice ~= {} then\n        log.debug('rtu_data sensor=%s,vaulez=%s', childDevice.props.sensortype,vaulez)\n        if childDevice.props.sensortype == 'cx' then --测斜\n            log.debug('rtu_data cx=')\n            local data1 = {\n                data = {\n                    anglex = tonumber(vaulex),\n                    angley = tonumber(vauley),\n\t\t\t\t\ttemperature = tonumber(vaulez)\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n      \t\t--log.debug('rtu_data data1=%s', json.encode(data1))\n            table.insert(out.data, data1)\n        end\n        if childDevice.props.sensortype == 'gscx' then --杆式测斜\n            log.debug('rtu_data gscx=')\n            local data1 = {\n                data = {\n                    anglex = tonumber(vaulex),\n                    angley = tonumber(vauley)\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data1)\n        end\n        if childDevice.props.sensortype == 'rainfall' then --雨量\n            log.debug('rtu_data rainfall=%s,T=%s', valuestr, T)\n            local data1 = {\n                data = {\n                    physicalvalue = tonumber(valuestr)\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data1)\n        end\n        if childDevice.props.sensortype == 'lf' then --裂缝\n            log.debug('rtu_data ls=%s,T=%s', valuestr, T)\n            local data1 = {\n                data = {\n                    length = tonumber(valuestr)\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data1)\n        end\n        if childDevice.props.sensortype == 'wsd' then --温湿度\n            log.debug('rtu_data wsd=')\n            local data2 = {\n                data = {\n                    temperature = tonumber(vaulex) or 0,\n                    humidity = tonumber(vauley) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data2)\n        end\n\n        if childDevice.props.sensortype == 'cj' then --激光测距\n            log.debug('rtu_data cj=')\n            local data2 = {\n                data = {\n                    length = tonumber(vaulex) or 0,\n                    temperature = tonumber(vauley) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data2)\n        end\n        if childDevice.props.sensortype == 'zx' then --振弦\n            log.debug('rtu_data zx=%s,T=%s', valuestr, T)\n            local data4 = {\n                data = {\n                    frequency = tonumber(vaulex) or 0,\n                    am = tonumber(vauley) or 0,\n                    temperature = tonumber(vaulez) or 0,\n                    physicalvalue = tonumber(valuef) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data4)\n        end\n    \tif childDevice.props.sensortype == 'ty' then --土压\n            log.debug('rtu_data ty=%s,T=%s', valuestr, T)\n            local data4 = {\n                data = {\n                    frequency = tonumber(vaulex) or 0,\n                    am = tonumber(vauley) or 0,\n                    temperature = tonumber(vaulez) or 0,\n                    physicalvalue = tonumber(valuef) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data4)\n        end\n        if childDevice.props.sensortype == 'yc' then --压差\n            log.debug('rtu_data yc=')\n            local data3 = {\n                data = {\n                    temperature = tonumber(vaulex) or 0,\n                    pressure = tonumber(vauley) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\n\t\tif childDevice.props.sensortype == 'kx' then --孔隙\n            log.debug('rtu_data kx=')\n            local data3 = {\n                data = {\n                    temperature = tonumber(vaulex) or 0,\n                    waterlevel = tonumber(vauley) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\n        if childDevice.props.sensortype == 'lx' then --拉线\n            log.debug('rtu_data lx=')\n            local data3 = {\n                data = {\n                    length = tonumber(valuestr) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\n        if childDevice.props.sensortype == 'gnss' then --GNSS\n            log.debug('rtu_data gnss=')\n            local data3 = {\n                data = {\n                    x = tonumber(vaulex) or 0,\n                    y = tonumber(vauley) or 0,\n                    z = tonumber(vaulez) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\n        if childDevice.props.sensortype == 'js' then --加速度\n            log.debug('rtu_data js=')\n            local data3 = {\n                data = {\n                    gx = tonumber(vaulex) or 0,\n                    gy = tonumber(vauley) or 0,\n                    gz = tonumber(vaulez) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\t\t\n        if childDevice.props.sensortype == 'qj' then --倾角\n            log.debug('rtu_data qj=')\n            local data3 = {\n                data = {\n                    x = tonumber(vaulex) or 0,\n                    y = tonumber(vauley) or 0,\n                    z = tonumber(vaulez) or 0,\n\t\t\t\t\tangle = tonumber(vaulef) or 0,\n\t\t\t\t\ttrend = tonumber(vauled) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\t\n        if childDevice.props.sensortype == 'tw' then --土温\n            log.debug('rtu_data tw=')\n            local data3 = {\n                data = {\n                    temperature = tonumber(vaulex) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\t\n        if childDevice.props.sensortype == 'hs' then --土壤含水\n            log.debug('rtu_data hs=')\n            local data3 = {\n                data = {\n                    waterrate = tonumber(vaulex) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\t\n        if childDevice.props.sensortype == 'nw' then --泥水位\n            log.debug('rtu_data nw=')\n            local data3 = {\n                data = {\n                    waterlevel = tonumber(vaulex) or 0\n                },\n                result = {code = errcode, msg = errormsg},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            table.insert(out.data, data3)\n        end\t\t\t\n        if childDevice.props.sensortype == 'pic' then --capture\n            log.debug('rtu_data capture= %s', childDevice.id)\n            errcode = 70050001\n            local data6 = {\n                data = {\n                    alarmPic = valuestr\n                },\n                result = {code = errcode, msg = '触发告警抓拍'},\n                device = childDevice.id,\n                type = 1,\n                time = T\n            }\n            --log.debug('rtu_data data6= %s',json.encode(data6))\n            table.insert(out.data, data6)\n        end\n    end\n    --log.debug('rtu_data out=%s',json.encode(out))\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('rtu_data result_out=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\nGenrateTimeSet = function()\n    local cmd = '$cmd=settime&time=' .. tostring(os.date('%Y-%m-%d %H:%M:%S'))\n    devmodule = device.props.moduleid\n    local r1, ok = redis.get(device.id .. '_settime')\n    if ok and r1 ~= nil then\n        log.debug('rtu_data tiem crc=%s ，r1=%s', tostring(os.date('%Y-%m-%d')), r1)\n        if r1 ~= tostring(os.date('%Y-%m-%d')) then\n            local topic = devmodule .. '_settime'\n            local okdev, ack = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n            if okdev then\n                local crc = os.date('%Y-%m-%d')\n                redis.set(device.id .. '_settime', tostring(crc))\n            end\n        end\n    else --第一次下发\n        local topic = devmodule .. '_settime'\n        local okdev_first, ack_first = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n        if okdev_first then\n            local crc = os.date('%Y-%m-%d')\n            redis.set(device.id .. '_settime', tostring(crc))\n        end\n    end\nend\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(module, channel)\n    local resensor = nil\n    if device.dnlinks ~= nil then\n        --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n        for i, link in pairs(device.dnlinks) do\n            --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n            for j, subdevice in pairs(link.devices) do\n                --log.debug("fsidaufile: = %s sensor=%s",filename,json.encode(subdevice))\n                if subdevice.uplink.props.module == module and subdevice.uplink.props.channel == channel then\n                    --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n                    resensor = subdevice\n                end\n            end\n        end\n    end\n    return resensor\nend\n\nunixtimestamp = function(dateStr)\n    -- 2018-4-28 16:10:12\n    local dateStr = string.sub(dateStr, 2, -2)\n    local datelist = Split(dateStr, ' ')\n    --log.debug('rtu_data datelist[1]= %s ', datelist[1])\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    --log.debug('rtu_data year= %s ', year)\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('rtu_data recordTime= %s ', recordTime)\n    return recordTime\nend	INLINE	2019-11-06 13:56:16.494+08	2021-01-25 10:22:14.525+08	2019-11-06	\N
976bf9fd-9b27-4c62-a317-915325daf8d4	shjy_incline_2	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_incline_2", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_incline_2 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x01, endian)  \n        buff=iota.appendHexByte(buff, 0x08, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_Pressure_2 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030806814d41f4fdd9c18ee7\n--moduleId=1   \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local anglex = iota.hexToFloat(hex,3,'L')\n        local angley = iota.hexToFloat(hex,7,'L')\n       \n        out.data = {\n            anglex=anglex,\n            angley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_incline_2 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_incline_2 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-07-09 11:41:05.709+08	2018-07-09 15:52:51.865+08	2018-07-09	\N
6ef7b3a4-1658-4205-ae8b-1260775da50f	gr_2512	\N		1.0	594398cf-af7f-421b-9b42-1cca38c79620	594398cf-af7f-421b-9b42-1cca38c79620	f	594398cf-af7f-421b-9b42-1cca38c79620	Lua	start=function()\n    ok=ctx:asend("010203")\nend\n--2000001001022000203200340123013204450201025505002100003500000000000000000000000000d2a2\nonData=function(hex)\n    local moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n    log.debug("gr_2512 [%s] 收到数据=%s", moduleNo,hex)\n\tlog.debug("gr_2512 [%s] device =%s",moduleNo, json.encode(device))\n    local out={\n        data ={},\n        result = {}\n    }\n\t\n\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n\tif ErrorCode then\n\t\tlog.debug('gr_2512 [%s] 数据有效',moduleNo)\n\t\t\n\t\tlocal Concentration={}\n\t\tlocal index=0\n\t\tfor i=1,9,1 do\t\t\n\t\t\tindex=9+(i-1)*2\n\t\t\tif i==8 then   --温度（4字节）\n\t\t\t\tlocal temp_str=string.sub(hex,51,54)..string.sub(hex,49,50)\n\t\t\t\tlog.debug("gr_2512 [%s]  temp_str=%s",moduleNo,temp_str)\n\t\t\t\t\n\t\t\t\tConcentration[i]=tonumber(temp_str,16)*(-1)^tonumber(string.sub(hex,47,48),16)               \n\t\t\telseif i==9 then\n\t\t\t    \n\t\t\t\tindex=index+2\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t\telse\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t    end\n\t\tend\n\t   log.debug("gr_2512 [%s]  Concentration=%s",moduleNo,json.encode(Concentration))\n\t   local k=0\n\t    for k_index,v in pairs(Concentration) do\n\t\t\n\t\t\tif k_index==1 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ug/m3"; --PM2.5\n\t\t\t   elseif k_index==2 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ug/m3"; --PM10\n\t\t\t   elseif k_index==3 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ppb"; --SO2\n\t\t\t   elseif k_index==4 then\n\t\t\t   k=1.0\n\t\t\t   unit = "dB"; --noise\n\t\t\t   elseif k_index==5 then\n\t\t\t   k=0.001\n\t\t\t   unit = "ppm"; --CO\n\t\t\t   elseif k_index==6 then\n\t\t\t   k=1\n\t\t\t   unit = "ppb"; --O3\n\t\t\t   elseif k_index==7 then\n\t\t\t   k=0.001\n\t\t\t   unit = "ppm"; --TVOC\n\t\t\t   elseif k_index==8 then\n\t\t\t   k=0.1\n\t\t\t   unit = "℃"; --温度\n\t\t\t   elseif k_index==9 then\n\t\t\t   k=0.1\n\t\t\t   unit = "℃"; --湿度\n\t\t\t   else\n\t\t\t   log.debug('gr_2512  [%s] 无匹配数据类型',moduleNo)\t\t    \n\t\t\tend\n\t\t\tConcentration[k_index]=tonumber(string.format("%0.3f",v*k))\t\n\t\t\tlog.debug('gr_2512  [%s] k_index=%s ,Concentration[k_index]=%s',moduleNo,k_index,Concentration[k_index])\n           \n\t\tend\n\t\t\n\t\tout.data = {\n                PM25=Concentration[1],  --pm2.5\n\t\t\t\tPM10=Concentration[2],\n\t\t\t\tSO2=Concentration[3],\n\t\t\t\tnoise=Concentration[4],\n\t\t\t\tCO=Concentration[5],\n\t\t\t\tO3=Concentration[6],\n\t\t\t\tTVOC=Concentration[7],\n\t\t\t\ttemperature=Concentration[8],\n\t\t\t\thumidity=Concentration[9],\n        }\n\t\tlog.debug('gr_2512  [%s] out.data=%s',moduleNo,json.encode(out.data))\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleNoStr)\n    log.debug("gr_2512 [%s] 校验数据=%s",moduleNoStr,data)\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=43 then\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n\t\tlog.debug("gr_2512 [%s] data length is wrong[%s] ",moduleNoStr,string.len(data)/2)\n        return false\n    end\n\t\n   log.debug("gr_2512 [%s] 校验通过",moduleNoStr)\n    return true\nend\n\n\n\n	INLINE	2018-06-20 10:06:49.528+08	2019-02-28 09:54:32.308+08	2018-06-20	\N
b102392b-d80d-44e7-aeac-d8491ef6b469	tst_file666666	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start = function()\n    log.debug('tst_file666666 : devices network =%s', json.encode(device))\n    log.debug('tst_file666666   get Start ')\nend\n\nonData = function(data)\n    log.debug('tst_file666666   解析data ')\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('tst_file666666 : recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("tst_file666666 : unsupported file type: %s", data.ext)\n            end\n            if data.ext == '.dat' then\n                --log.debug("tst_file666666 : recvd content = %s",data.payload)\n                ParseFileDat(data.payload)\n            --else\n            --log.error("tst_file666666 : unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('tst_file666666 : content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('tst_file666666 : recvd content is nil')\n    end\nend\n\nfunction ParseFileDat(dathex)\n    log.debug('tst_file666666 : dat content  =%s', dathex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex, offset, 'B') + 2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex, offset, 'B')\n        offset = offset + 4\n        log.debug('tst_file666666 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n        local floatcount = (string.len(dathex) / 2 - 40) / 4\n        log.debug('tst_file666666 begin parse')\n        local vols = {}\n        for i = 1, floatcount do\n            offset = 40 + (i - 1) * 4\n            vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n        end\n        log.debug('tst_file666666 finish parse')\n\n        local rst = {\n            data = {\n                _data_type = 'vib',\n                physicalvalue = vols,\n                sampleFreq = samplefreq,\n                filterFreq = filterfreq,\n                gainAmplifier = gainamplifier,\n                triggerType = triggertype,\n                version = version\n            },\n            device = subdevice.id,\n            type = 1,\n            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n        }\n        table.insert(out.data, rst)\n        log.debug('tst_file666666 deviceid = %s, cloudvibrate=%s', deviceId, json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug('tst_file666666 not found device module=%s channel=%s', deviceId, channel)\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('tst_file666666 : content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M, jsondata.C)\n                if childDevice ~= nil then\n                    --log.debug("tst_file666666  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n                    if childDevice.props.sensortype == 'gnss' then\n                        local rst = {\n                            data = {\n                                x = jsondata.RV[1] or 0,\n                                y = jsondata.RV[2] or 0,\n                                z = jsondata.RV[3] or 0\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'zd' then\n                        local rst = {\n                            data = {\n                                ppv = jsondata.RV[1] or 0,\n                                pv = jsondata.RV[2] or 0,\n                                rms = jsondata.RV[3] or 0\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file666666:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n\n                    if childDevice.props.sensortype == 'gdgs' then\n                        local rst = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n                                physicalvalue = tonumber(string.format('%0.3f', jsondata.PV[1]))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file666666:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype== 'lf' then\n                        local rst = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', jsondata.RV[1])),\n                                length = tonumber(string.format('%0.3f', jsondata.PV[1]))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file666666:out data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'gdgszx' then\n                        local rst = {\n                            data = {\n                                physicalvalue = jsondata.PV[1],\n                                temperature = jsondata.PV[2]\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file666666  gdgszx data=%s', json.encode(rst))\n                        table.insert(out.data, rst)\n                    end\n                    if childDevice.props.sensortype == 'standard485' then\n                        log.debug('tst_file666666  standard485=%s', json.encode(childDevice))\n                        local rst = {\n                            data = {\n                                physicalvalue = (jsondata.RV[2])\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+16:00', (tonumber(jsondata.T) / 1000))\n                        }\n                        log.debug('tst_file666666 standard485 data=%s,time=%s', json.encode(rst), rst.time)\n                        table.insert(out.data, rst)\n                    end\n                else\n                    log.debug('tst_file666666 line=%s childDevice is nil', k)\n                end\n            end\n        end\n    end\n    --log.debug('tst_file666666   dataresult=%s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n    log.debug('tst_file666666:查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            --判断是否是3层采集仪结构\n            if json.encode(subdevice.dnlinks) ~= '{}' then\n                log.debug("tst_file666666  三层结构   二层设备=%s",submodule,json.encode(subdevice))\n                for k, sublink in pairs(subdevice.dnlinks) do\n                    log.debug("tst_file666666  sublink=%s",json.encode(sublink))\n                    for u, sub_subdevice in pairs(sublink.devices) do\n                        log.debug("tst_file666666  sensor=%s",json.encode(sub_subdevice))\n                        local sensornodeId = sub_subdevice.uplink.props.module\n                        local sensorchannel = sub_subdevice.uplink.props.channel\n                        if tostring(sensornodeId) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n                            log.debug('tst_file666666  三层查询 m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n                            return sub_subdevice\n                        else\n                            log.debug("tst_file666666  三层查询 m=%s[%s],c=%s[%s]  未匹配",moduleid,sensornodeId,channel,sensorchannel)\n                        end\n                    end\n                end\n            else\n                local submodule = subdevice.uplink.props.module\n                --log.debug('tst_file666666 两层查询 m=%s[%s]', moduleid, submodule)\n\n                if tostring(submodule) == tostring(moduleid) then\n                    log.debug('tst_file666666  两层查询 m=%s, 匹配到设备=%s', moduleid, json.encode(subdevice))\n\n                    return subdevice\n                else\n                    --log.debug('tst_file666666    两层查询 has no device module=%s ,[submodule=%s]', moduleid,  submodule)\n                end\n            end\n        end\n        log.debug('tst_file666666  has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('tst_file666666 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-10-22 15:17:35.702+08	2019-10-22 16:28:04.113+08	2019-10-22	\N
00bf4878-0815-4bbf-bca6-8115561ffeaf	mic_pressure_9002	\N	麦克压力变送器协议	1.0	f0e6a224-85bc-45e7-831c-119531f38d19	f0e6a224-85bc-45e7-831c-119531f38d19	f	f0e6a224-85bc-45e7-831c-119531f38d19	Lua	--// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n--2a31372b332e3531363933420d    moduleId=17   channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d     moduleId=17    channelId=1\n--temp": 12.24\n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "mic_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("mic_pressure_9002 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mic_pressure_9002 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tif tonumber(moduleNo) > 99 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = '模块号大于99'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n  --全局out\n      out={\n        data ={},\n        result = {}\n    }\n    local endian = 'B'\n    local buff=''\n    local sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RP'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    --log.debug("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,10000)\n    local result="{}"\n    if ok then\n        result_pressure = unmarshall(resp,moduleNo)\n    else\n    \tout.result = {code = 1001, msg = '压强采集超时'}\n    end\n  if out.data.pressure~=nil then\n    ctx:sleep(1)\n    log.debug('mic_pressure_9002: m='..moduleNo..'  压强解析正常'..tostring(out.data.pressure))\n    --压强正常  继续解析\n    sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RT'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    log.debug('mic_pressure_9002: m='..moduleNo..' 开始温度采集cmd:'..buff)\n    ok,resp=ctx:ssend(buff,10000)  \n    if ok then\n       log.debug('mic_pressure_9002: m='..moduleNo..' 温度采集成功 开始解析温度:'..resp)\n        result_temp =tempunmarshall(resp,moduleNo) \n      else\n      log.debug('mic_pressure_9002:m='..moduleNo..'  温度采集失败')\n      out.result = {code = 1001, msg = '温度采集超时'}\n    end\n  end\n    result=json.encode(out)\n     log.debug(string.format('mic_pressure_9002: m=%s,result=%s',moduleNo, result))\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoPcheck)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n  log.debug('mic_pressure_9002: m=%s,pre =%s',moduleNoPcheck,toStrHex(hex))\n    local ErrorCode = IsValid(hex,moduleNoPcheck)\n    if ErrorCode then\n        -- 010404800101488222\n        local pdata = string.sub(toStrHex(hex),5,-3)\n        pre = 0\n        if string.sub(toStrHex(hex),4,4) =='-' then\n            pre = tonumber(pdata) * -1\n        else \n            pre = tonumber(pdata) \n        end\n        out.data.pressure = pre\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n    --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNoTcheck)\n  log.debug('mic_pressure_9002: m=%s,receivedtemp =%s',moduleNoTcheck,toStrHex(hex))\n    local ErrorCode = IsValidtemp(hex,moduleNoTcheck)\n    if ErrorCode then\n        -- 010404800101488222\n        local tdata = string.sub(toStrHex(hex),5,-4)\n        local temperature = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            temperature = tonumber(tdata) * -1\n        else \n            temperature = tonumber(tdata) \n        end\n        out.data.temperature = temperature\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrP)\n    if data == nil or string.len(data)/2 < 12  then\n        errormsg = string.format('压强数据长度无效=%s<12,data=%s',string.len(data)/2,data)\n        errcode = 1002\n        return false\n    end\n    if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n        errormsg =  string.format('压强 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n        errcode = 1003\n        return false\n    end\n  log.debug('d =%s',toStrHex(data))\n  \t local dataModule=string.sub(toStrHex(data),2,3)\n    if PadLeft(2,0,moduleNoStrP) ~= dataModule then\n    \t\n        errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrP)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \nIsValidtemp=function(data,moduleNoStrT)\n    if data == nil or string.len(data)/2 < 12  then\n        errormsg = string.format('温度 数据长度无效=%s≠12,data=%s',string.len(data)/2,data)\n        errcode = 1002\n        return false\n    end\n    if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n        errormsg = string.format('温度 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n        errcode = 1003\n        return false\n    end\n      \tlog.debug('s =%s', toStrHex(data))\n  \t local dataModule=string.sub(toStrHex(data),2,3)\n    if PadLeft(2,0,moduleNoStrT) ~= dataModule then\n\n        errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrT)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nCheck=function(str)\n    local len = string.len(str);\n    local pp = 0\n    for i =1,len do\n        local bi = string.byte(str, i);\n        pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n    end\n    local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n    local p1 = bit:_and(pp,0x0f)\n    return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2017-09-06 17:35:54.57+08	2019-01-07 17:05:47.792+08	2017-09-06	\N
65495481-c107-49ff-98c9-2c4215b38347	mas_pressure_9002	\N	麦克	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n--2a31372b332e3531363933420d    module=17   channelId=1\n--"pressure": 3.5169\n\n--2a31362b31322e323430370d     module=16    channelId=1\n--temp": 12.24\n\nstart=function()\n    log.debug("load script %s, module=%s", "fs_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\tif tonumber(device.uplink.props.module) > 99 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n  --全局out\n      out={\n        data ={},\n        result = {}\n    }\n    local endian = 'B'\n    local buff=''\n    local sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,device.uplink.props.module)\n    sendstr = sendstr..'RP'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result_pressure = unmarshall(resp)\n    end\n    result=json.encode(out)\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n  log.debug('fs_pressure_9002:'..'pre =%s',toStrHex(hex))\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        -- 010404800101488222\n        local pdata = string.sub(toStrHex(hex),5,-4)\n        pre = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            pressure = tonumber(pdata) * -1\n        else \n            pressure = tonumber(pdata) \n        end\n        out.data.pressure = pressure\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n    --return json.encode(out)\nend\n \ntempunmarshall=function(hex)\n  log.debug('fs_pressure_9002:'..'receivedtemp =%s',toStrHex(hex))\n    local ErrorCode = IsValidtemp(hex)\n    if ErrorCode then\n        -- 010404800101488222\n        local tdata = string.sub(toStrHex(hex),5,-4)\n        local temperature = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            temperature = tonumber(tdata) * -1\n        else \n            temperature = tonumber(tdata) \n        end\n        out.data.temperature = temperature\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 13  then\n        errormsg = 'pressure Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,12,'B') ~= 0x0D  then\n        errormsg = 'CMD is not right,0x24 0x0D'\n        errcode = 1001\n        return false\n    end\n  log.debug('d =%s',toStrHex(data))\n    if PadLeft(2,0,device.uplink.props.module) ~= string.sub(toStrHex(data),2,3) then\n    \t\n        errormsg = 'Invalid acq module'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \nIsValidtemp=function(data)\n    if data == nil or string.len(data)/2 ~= 12  then\n        errormsg = 'temp Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x24 and iota.hexToByte(data,11,'B') ~= 0x0D  then\n        errormsg = 'CMD is not right,0x24 0x0D'\n        errcode = 1001\n        return false\n    end\n      \tlog.debug('s =%s', toStrHex(data))\n    if PadLeft(2,0,deviceuplink.uplink.props.module) ~= string.sub(toStrHex(data),2,3) then\n\n        errormsg = 'Invalid acq module'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nCheck=function(str)\n    local len = string.len(str);\n    local pp = 0\n    for i =1,len do\n        local bi = string.byte(str, i);\n        pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n    end\n    local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n    local p1 = bit:_and(pp,0x0f)\n    return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2018-04-19 10:47:29.52+08	2018-12-13 18:27:33.783+08	2018-04-19	\N
14ef07e7-d972-4cdd-996d-377d740d87bd	zigmqtt_temp	\N		1	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	a0524b8e-f69f-421e-b306-124dd37f4f1c	Lua	start=function()\nend\n\nonData=function(rawd)\n  -- @{"temperature":27.43,"linkquality":102,"humidity":72.96}\n  rd=json.decode(rawd)\n  --log.debug("rd=%s",json.encode(rd))\n  log.debug("zigbeemqtt recv =%s", json.encode(rawd))\n  result={\n    type=1,\n    data=rawd\n  }\n ctx:notify(json.encode(result))\nend	INLINE	2019-05-15 21:05:01.574+08	2019-05-15 21:55:00.535+08	2019-05-15	\N
be045345-b692-40de-8c14-3649bb3ccbbc	sz_temperature_2302	\N		1.0	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	f	fa5611e2-d726-4e8f-a22c-632ef7ab7148	Lua	start =function()\n    log.debug('load script %s, moduleId=%s  device=%s', 'sz_temperature_2302', device.uplink.props.module, json.encode(device))\n    local endian = 'B'\n    local buff = ''\n    local errout = {\n        data = {},\n        result = {}\n    }\n\n    buff = buff .. '0F'\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    log.debug('sz_temperature_2302 设备模块 m=%s  json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '11000000000000000000000000000000' --cmd=0x11\n    --log.debug('sz_temperature_2302 buff 累加前=%s ', buff)\n    --buff=buff..iota.hexCheckPlusSum(buff)\n    buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n    --log.debug('sz_temperature_2302 buff 累加后=%s ', buff)\n\n    buff = buff .. 'F0'\n    ok, resp = ctx:ssend(buff, 18000) --实际采集需要90秒 有历史数据读取 比较快\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n        out.result = {code = '1001', msg = '采集超时'}\n    end\n    ctx:done(result)\nend\n\n--0F001100000000000000000000000000000020F0\n--moduleId=0\n--0F00117F7F7F120519130A00200106A8FC0E5A01F4020624090B6A01F4030729110B1D01EC040610A80C3001EC0506A6A20D0B01F0060743880BA301F0070751E50C1B01F00806FC0D0F5B01F009075A620A3C01F80A0665A30C4001EC0B0265CB0B4A01E80C062E0A0FA901F00D06CD840A1501F40E067F5D0E8C01F00F07EE0D0AF601E810067CF80B5801F01100000000000C801200000000000C801300000000000C801400000000000C801500000000000C801600000000000C801700000000000C801800000000000C801900000000000C801A00000000000C801B00000000000C801C00000000000C801D00000000000C801E00000000000C801F00000000000C802000000000000C80F7F7F73890F0\nunmarshall =function(hex, moduleStr)\n    log.debug('sz_temperature_2302 m=%s, recv =%s', moduleStr, hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ErrorCode = IsValid(hex, moduleStr)\n    if ErrorCode then\n        local dataArea = string.sub(hex, 27, -13)\n        local dataTimeHexStr = string.sub(hex, 13, 24) --数据时间\n        local channelCount = tonumber(string.sub(hex, 25, 26), 16)\n        --单个传感器数据 占5个字节\n        local dataAreaLength = string.len(dataArea) / 2\n\n        for i = 1, channelCount, 1 do\n            log.debug("i=%s",i)\n            local singleChannelDataHexStr = string.sub(hex, 27 + (i - 1) * 10, 27 + i * 10)\n            local temperature = iota.hexToUShort(singleChannelDataHexStr,3, 'B') / 16\n            local channel = iota.hexToByte(singleChannelDataHexStr, 0, 'B')\n            local childDevice = getDeviceInfo(moduleStr, channel)\n            if childDevice ~= nil then\n                local singleData = {\n                    data = {\n                        temperature = tonumber(string.format('%0.2f', temperature))\n                    },\n                    device = childDevice.id,\n                    type = 1\n                }\n                log.debug('sz_temperature_2302 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n                table.insert(out.data, singleData)\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('sz_temperature_2302 m=%s,data=%s', moduleNoStr, json.encode(out))\n    return json.encode(out)\nend\n\nIsValid =function(data, moduleStr)\n    log.debug('sz_temperature_2302 开始校验数据=%s', data)\n    if string.sub(data, 1, 2) ~= '0f' or string.sub(data, -2, -1) ~= 'f0' then\n        errcode = 1003\n        errormsg = string.format('回复数据的 帧头≠0x0f[%s]，帧尾≠0xf0[%s] ', string.sub(data, 1, 2), string.sub(data, -2, -1))\n        return false\n    end\n    local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n    if moduleStrCheck ~= tonumber(moduleStr) then\n        errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n        errcode = 1004\n        log.debug('sz_temperature_2302 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n        return false\n    end\n\n    local dataChannelCount = tonumber(string.sub(data, 25, 26),16) --获取数据的长度\n    local dataLen = string.len(data) / 2\n    local checkLen = 13 + dataChannelCount * 5 + 6\n    if dataLen ~= checkLen then\n        errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n        errcode = 1002\n        return false\n    end\n    log.debug('sz_temperature_2302 数据校验通过')\n    return true\n    --crc\nend\n\ngetDeviceInfo =function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("sz_temperature_2302 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug('sz_temperature_2302 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                log.debug('sz_temperature_2302 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                log.debug('sz_temperature_2302 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('sz_temperature_2302  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('sz_temperature_2302  subdevices是nil')\n        return nil\n    end\nend\n\n--异或校验\nCheckXor = function(hex)\n    local len = string.len(hex) / 2\n    local pp = 0\n    for i = 0, len - 1 do\n        local bi = iota.hexToByte(hex, i, 'B')\n        pp = bit:_and(bit:_xor(bi, pp), 0x000000ff)\n        --log.debug("PP是=%s",string.format("%02x",pp))\n    end\n    return string.format('%02x', pp)\nend	INLINE	2018-12-18 18:02:11.204+08	2018-12-19 10:06:30.414+08	2018-12-18	\N
b8fe420d-0838-4c78-be1f-6eec1246a5c9	kqzl_by	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("FS_KQZL: start module %s", json.encode(device))\n\tlocal moduleid = device.uplink.props.module\n\tlocal cmd = string.format(moduleid,16)\n\tcmd=iota.appendHexByte(cmd,1,'L')\n\tcmd=iota.appendHexByte(cmd,3,'L')\n\tcmd=iota.appendHexWord(cmd,0x00,'L')\n\tcmd=iota.appendHexWord(cmd,0x0E,'L')\n\tcmd=iota.appendHexCrc(cmd, 'B' ,0)\n\tlog.debug("FS_KQZL: cmd =  %s", cmd)\n\tok,resp=ctx:ssend(cmd,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,modulestr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local pm25 = iota.hexToShort(hex,5,'B')\n        local pm10 = iota.hexToShort(hex,13,'B')\n\t\tlocal temp = iota.hexToShort(hex,13,'B')\n        local humidy = iota.hexToShort(hex,29,'B')\n\t\tlocal noise = iota.hexToShort(hex,27,'B')\n        out.data = {\n            pm25=pm25,\n            pm10 = pm10,\n\t\t\ttemp = temp,\n\t\t\thumidy =humidy，\n\t\t\tnoise = noise\n        };\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\n\n\nIsValid=function(alldata)\n    log.debug("SMARTIT  校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n\t\tlog.debug("SMARTIT: 校验失败 Data is nil")\n        return false\n    end\n    return true\nend\n\n	INLINE	2018-12-15 16:48:26.497+08	2018-12-28 16:48:02.414+08	2018-12-15	\N
82631ec7-32ec-4daf-ba35-fcdbf2802c5d	bjzs_level_18626	\N		1.0	78592d42-1fcc-45bb-8a00-8e246186e702	78592d42-1fcc-45bb-8a00-8e246186e702	f	78592d42-1fcc-45bb-8a00-8e246186e702	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "bjzs_level_18626.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("bjzs_level_18626 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("bjzs_level_18626 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("bjzs_level_18626,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("bjzs_level_18626  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("bjzs_level_18626 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUShort(hex,5,'B')\n    \n        out.data = {           \n            length=length        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("bjzs_level_18626 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-07-13 16:14:42.46+08	2018-07-31 14:05:15.977+08	2018-07-13	\N
316aaf98-e85c-4f4f-993c-d57e8252c5dd	lywh__8000	\N		1.0	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	Lua	\n-- start=function()\n    -- log.debug("load script %s, moduleId=%s", "lywh__8000.lua", device.props.moduleId or "[nil]")\n     -- log.debug("lywh__8000:".."LUA: ctx is =%s", json.encode(device))\n   -- ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("lywh__8000:".."测试下发01020304正常")\n --end\n\n \n \n --AA2D00FFFFFFFFFF5900301032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFBB\n --通道1    temperature=5\n  --通道2    temperature=1.2\n   --通道3    temperature=0.6\n    --通道4    temperature=0.9\n\t --通道5    temperature=387.4\n\t  --通道6    temperature=-1.1\nonData=function(hex)\n    log.debug("lywh__8000 收到数据=%s", hex)\n\t--log.debug("lywh__8000 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal data=hex\n\tif string.upper(data)=="3E74696D656375720D0A" then\n\t   --请求同步服务器时间\n\t   local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n\t   local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n\t   ok=ctx:asend(timeResponse)\n\tend\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('lywh__8000 数据有效=%s',hex)\n\t\n\t    \n        local temp={}\n\t\tfor i=1,16,1 do\t\t\n\t\t   temp[i]=iota.hexToShort(hex,10+i*2,'L');\t\n\t\tend\n\n\t\tlocal moduleId=device.uplink.props.module\n\t\t--分析单类数据\n        for k,v in ipairs(temp) do\n\t\t\tlog.debug('lywh__8000 分析单类数据 k=%s,v=%s',k,v)\n                \n\t\t\t\tlocal channelId=k\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\t\t\t\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t    log.debug('lywh__8000 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttemperature=temp[k]/10.0,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\t\n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\t\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=45 then\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n        return false\n    end\t\n\n\tif string.upper(string.sub(data,1,6)) ~= 'AA2D00' then  \n            errormsg = 'Data is Invalid'\n            errorcode = 1001\n        return false\n    end\n  \n    return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("lywh__8000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    -- log.debug("lywh__8000:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("lywh__8000 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n        \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t  \t \n                if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("lywh__8000:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n       \t \tend\n\t\tend\n    else\n       log.debug("lywh__8000:  subdevices是nil")\n    \treturn nil\n    end\nend\n\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nStrToHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend	INLINE	2018-06-27 14:00:52.319+08	2018-07-09 10:13:03.555+08	2018-06-27	\N
ae1fb024-ff8b-4af2-9931-7a20585b8234	ceweiji	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start = function()\n  log.debug('ceiwenji device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n    --主动上传式\n    log.debug('ceiwenji Received=>%s', hex)\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\n    local index_sign = 7\n    local index_data = 5\n\n\n    local moduleNoStr = device.uplink.props.module \n\n    log.debug('ceiwenji moduleNoStr=%s', moduleNoStr)\n    local ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\tlog.debug('ceiwenji 1111111111111')\n\tfor i=1,4 do\n\t    local length\n\t    local signal=string.sub(hex,index_sign + (i-1)  * 8,index_sign + (i-1)  * 8+1)\n\t\tlog.debug('ceiwenji signal=%s', signal)\n\t\tlocal subDevice=getDeviceInfo(moduleNoStr,i)\n\t\tlog.debug('ceiwenji subDevice=%s', json.encode(subDevice))\n\t\tlocal deviceId=subDevice.id\n\t\tif signal=='00' then\n\t\t\tlength =iota.hexToUShort(hex, index_data + (i-1)  * 4, 'B')\n\t\telseif signal=='01' then\n\t\t\tlength =iota.hexToUShort(hex, index_data + (i-1)  * 4, 'B')*(-1)\n\t\tend\n\t\tlog.debug('ceiwenji length=%s', length)\n\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength=length/1000\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\ttable.insert(out.data,data1)\t\n\tend\n\t\n\t\n\t\n\t\n\t\n\tend\n\n        \n    local resultData = json.encode(out)\n    log.debug('ceiwenji resultData=%s', resultData)\n    ctx:notify(resultData)\n \nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        log.debug("ceiwenji 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug('ceiwenji:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n               log.debug('ceiwenji 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                log.debug('ceiwenji 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            \n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    log.debug('ceiwenji:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            --end\n        end\n    else\n        log.debug('ceiwenji:  subdevices是nil')\n        return nil\n    end\nend\n\nIsValid = function(data)\n    if data == nil  then\n        errormsg = string.format('数据长度无效=%s', datalen)\n        errcode = 1002\n        return false\n    end\n   \n    log.debug('ceiwenji:校验通过')\n    return true\nend	INLINE	2019-11-25 13:09:01.722+08	2019-11-25 16:29:19.09+08	2019-11-25	\N
2e0c0a7c-01b1-4cb8-8f27-efec39b787ca	fs_wind_9202	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n  log.debug("load script %s, moduleId=%s", "zxy_wind_9202.lua", device.uplink.props.module or "[nil]")\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n  \n  \n  \n\tif tonumber(moduleNo) > 99 or tonumber(moduleNo) <=0 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid, >99 or <=0'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian) \n\t\n    buff=buff..toHexStr(PadLeft(2,0,moduleNo))\n\n    buff=iota.appendHexByte(buff, 0x72, endian)  \n    buff=iota.appendHexByte(buff, 0x0D, endian)     \n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n--3e312e352c36302e320d0a\n--moduleId=2\n--"windDirection": "60.2",\n--"windSpeed": "1.5"\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local data = string.sub(hex,3,-5)\n        local str = toStrHex(data)\n        local offset = string.find(str,',')\n\n        local speed = string.sub(str,1,offset-1)\n        local direction = string.sub(str,offset+1,-1)\n        \n        out.data = {\n            windSpeed=speed,\n            windDirection = direction\n        };\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n    if data == nil or iota.hexToByte(data,0,'B') ~= 0x3E then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2018-07-09 15:27:29.696+08	2018-07-09 15:29:25.06+08	2018-07-09	\N
aa4e6330-665d-49b9-b91b-4d0a5099c8bb	nengh_ZD_8305	\N		1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	\n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_ZD 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("nengh_ZD,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  log.debug("nengh_ZD  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\n--0A04040000012840CA\n--module=10\n-- intensity=296\nunmarshall=function(hex,moduleNoStr)\n    log.debug("nengh_ZD m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local intensity =iota.hexToUInt(hex,3,'B')\n    \n        out.data = {           \n            intensity=intensity        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("nengh_ZD m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = '返回数据长度无效='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = '模块号无效='..iota.hexToByte(data,0,'B')\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-11-22 17:20:45.451+08	2018-11-22 17:34:20.921+08	2018-11-22	\N
743ba664-1590-4481-a703-bc9dde076f67	sz_485_2303	\N		1.0	fa5611e2-d726-4e8f-a22c-632ef7ab7148	fa5611e2-d726-4e8f-a22c-632ef7ab7148	f	fa5611e2-d726-4e8f-a22c-632ef7ab7148	Lua	start =function()\n    log.debug('load script %s, moduleId=%s  device=%s', 'sz_485_2303', device.uplink.props.module, json.encode(device))\n    local endian = 'B'\n    local buff = ''\n    local errout = {\n        data = {},\n        result = {}\n    }\n\n    buff = buff .. '0F'\n    --local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    --log.debug('sz_485_2303 设备模块 m=%s  json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n\n    buff = 'AA7510000E000000000000000000'\n\t\n\tlocal hexDataTime=getDateTimeHexStr()\n\t\n    buff = buff..hexDataTime --cmd=0x10\n\t\n\t\n\t\n\t\n\t\n\tbuff='AA7510000E0000000000000000001204020B0A2F'\n    log.debug('sz_485_2303 buff 校验前=%s ', buff)\n    buff=buff..CheckXor(0,buff)\n    --buff = buff .. string.format('%x', iota.hexCheckPlusSum(buff))\n    log.debug('sz_485_2303 buff 校验后=%s ', buff)\n\n    ok = ctx:asend(buff) --异步发送    异步接收\nend\n\n--AA7510000E0000000000000000001204020B0A2FEA  \n--moduleId=28218F130A0000E1\n--557A1000350028218F130A0000E11204020F24380145FDEFC09D56EE5712206D6D2020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535A323031382020A7\nonData=function(hex)\n    log.debug('sz_485_2303  收到数据 =%s', hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ErrorCode = IsValid(hex, moduleStr)\n    if ErrorCode then\n        \n\t\t\n\t\tlocal sensorModule = string.sub(hex, 13, 28)  --传感器编号\n        local dataTimeHexStr = string.sub(hex, 29, 40) --数据时间 HEX\n        local sensorTime=hexDateStrToDateTime(dataTimeHexStr)\n        --单个传感器数据 占5个字节\n\n        local dataArea = string.sub(hex, 41, 52)--温度（2BYTE, BCD编码，扩大了10倍）+ 测量值（2BYTE,UINT16）+ 偏差值（2BYTE,UINT16）+频率（2BYTE，UINT16）\n        local dataAreaLength = string.len(dataArea) / 2\n        local temperature = iota.hexToUShort(dataArea, 0, 'B')/10\n\t\tlocal physicalvalue = iota.hexToUShort(dataArea, 2, 'B')\n        local childDevice = getDeviceInfo(sensorModule)\n        if childDevice ~= nil then\n            local singleData = {\n                 data = {\n                        physicalvalue = tonumber(string.format('%0.2f', physicalvalue)),\n                        temperature = tonumber(string.format('%0.2f', temperature))\n                    },\n                    device = childDevice.id,\n        \t\t\ttime=sensorTime,\n                    type = 1\n                }\n                log.debug('sz_485_2303 m=%s,c=%s,singleData=%s', moduleStr, channel, json.encode(singleData))\n                table.insert(out.data, singleData)\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('sz_485_2303 m=%s,data=%s', moduleNoStr, json.encode(out))\n    local resultData= json.encode(out)\n    log.debug("geot_3300resultData=%s,hex=%s", resultData,hex)\n    ctx:notify(resultData)\nend\n\n\nhexDateStrToDateTime=function(dateStr)\n    -- 12 04 02 0F 24 38 ==> 18\n    local year = tonumber(string.sub(dateStr,1,2),16)+2000;\n\tlocal month = tonumber(string.sub(dateStr,3,4),16);\n\tlocal day = tonumber(string.sub(dateStr,5,6),16);\n    local hour = tonumber(string.sub(dateStr,7,8),16);\n    local minute = tonumber(string.sub(dateStr,9,10),16);\n    local second = tonumber(string.sub(dateStr,11,12),16);\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\n\n\n\ngetDateTimeHexStr=function()   --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n\tlocal BCDdateStr=os.date("%y%m%d%H%M%S", os.time())\n\t--print(string.format('BCDdateStr=%s',BCDdateStr))\n\tlocal hexdateStr=''\n\tfor i=1,string.len(BCDdateStr),2 do\n\t\tlocal newHex=string.sub(BCDdateStr,i,i+1)\n\t\t\n\t\thexdateStr=hexdateStr..string.format('%02x',newHex)\n\t\t--print(string.format('i=%s,newHex=%s,hexdateStr=%s',i,newHex,hexdateStr))\n\tend \n\treturn hexdateStr\nend\n\nIsValid =function(data)\n    log.debug('sz_485_2303 开始校验数据=%s', data)\n    if string.sub(data, 1, 6) ~= '557a10' then\n        errcode = 1003\n        errormsg = string.format('回复数据的 帧头≠0xaa7510[%s]', string.sub(data, 1, 6))\n        return false\n    end\n   -- local moduleStrCheck = tonumber(string.sub(data, 3, 4), 16)\n   -- if moduleStrCheck ~= tonumber(moduleStr) then\n    --    errormsg = string.format('数据中模块号无效=%s[%s]', moduleStrCheck, moduleStr)\n    --    errcode = 1004\n     --   log.debug('sz_485_2303 Invalid moduleId=%s[%s]', moduleStrCheck, moduleStr)\n     --  return false\n   -- end\n\n    local dataChannelCount = tonumber(string.sub(data, 7, 10),16) --获取数据的长度\n    local dataLen = string.len(data) / 2\n    local checkLen = 7 + dataChannelCount\n    if dataLen ~= checkLen or dataLen<20 then\n        errormsg = string.format('数据长度=%s[%s] 无效', dataLen, checkLen)\n        errcode = 1002\n        return false\n    end\n    log.debug('sz_485_2303 数据校验通过')\n    return true\n    --crc\nend\n\ngetDeviceInfo =function(moduleNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("sz_485_2303 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug('sz_485_2303 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck = child.uplink.props.szyksensorid --模块 通道 优先接口获取   \n            log.debug('sz_485_2303 子设备模块通道 接口获取 m=%s', moduleStrCheck)\n\n            if string.lower(moduleStrCheck) == tostring(moduleNoId) then\n               log.debug('sz_485_2303  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n               return child\n            end\n        end\n    else\n        log.debug('sz_485_2303  subdevices是nil')\n        return nil\n    end\nend\n\n\n\n--异或校验\nCheckXor=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = bit.bxor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end \n    log.debug("异或=%s",lcr)\n    return string.format("%02X",lcr)\nend 	INLINE	2018-12-19 10:16:02.72+08	2018-12-20 15:47:32.455+08	2018-12-19	\N
fb7d7130-3184-44ab-ba19-2cb664dc102d	renke_dn	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS   +16H           CS=（68a0a1a2a3a4a56801021090的累加和）\n-- cmd=68|88|88|88|88|88|88|68|20|0E|35|B3|34|2F|33|37|33|33|33|73|9C|96|34|73|C8|16\nstart=function()\n    log.debug("start %s, ctx=%s", "renke_dn.lua",json.encode(ctx.device))\n\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n\tlocal moduleId1 = string.sub(moduleNo,1,2)\n\tlocal moduleId2 = string.sub(moduleNo,3,4)\n\tlocal moduleId3 = string.sub(moduleNo,5,6)\n\tlocal moduleId4 = string.sub(moduleNo,7,8)\n\n\tlocal value = device.props.value\n\tbuff="6888888888888868201d34b33e39343a342e332f335234533461346c34853436343834" \n\tlocal module4 = tonumber(moduleId4,16)\n    if module4 ~= nil then\n  \t\tmodule4 = module4 + 0x33\n\t\tif module4 > 255 then\n\t\t\tmodule4 = module4 - 0x100\n\t\tend\t\t\t\n    end    \n\tbuff=iota.appendHexByte(buff, module4, endian)\n\tlocal module3 = tonumber(moduleId3,16)\n    if module3 ~= nil then\n  \t\tmodule3 = module3 + 0x33\n\t\tif module3 > 255 then\n\t\t\tmodule3 = module3 - 0x100\n\t\tend\t\t\t\n    end      \n\tbuff=iota.appendHexByte(buff, module3, endian)\n\tlocal module2 = tonumber(moduleId2,16)\n    if module2 ~= nil then\n  \t\tmodule2 = module2 + 0x33\n\t\tif module2 > 255 then\n\t\t\tmodule2 = module2 - 0x100\n\t\tend\t\t\t\t\n    end    \n\tbuff=iota.appendHexByte(buff, module2, endian)  \n\tlocal module1 = tonumber(moduleId1,16)\n    if module1 ~= nil then\n  \t\tmodule1 = module1 + 0x33\n\t\tif module1 > 255 then\n\t\t\tmodule1 = module1 - 0x100\n\t\tend\t\t\t\t\n    end      \n\tbuff=iota.appendHexByte(buff, module1, endian)\n\tlocal crc=LCR(0,buff)\n\tbuff=iota.appendHexByte(buff, crc, endian)\n\tbuff=buff.."16"\n    log.debug("renke_dn,buff=%s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("renke_dn,resp=%s",resp)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\tif string.len(hex) < 96 then\n\t\tout.result.code = 1001\n\t\tout.result.msg ="retry, responde is not right"\n\tend\n\tlocal datatable = {}\n\t\t--节点1\n\tlocal datahex = string.sub(hex,27,40)\n\tlocal data11,data12 = Calc(datahex,1)\n\tlocal data1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tlocal data21,data22 = Calc(datahex,7)\n\tlocal data31,data32 = Calc(datahex,11)\n\tlocal data2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tlocal number = iota.hexToShort(data1, 0, 'L')\n\tlocal value = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 262 then \n\t\tdatatable.pm2_5A = value\t\n\tend\n\t\t--节点2\n\tdatahex = string.sub(hex,41,54)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 263 then\n\t\tdatatable.pm2_5B = value\n\tend\n\t\t--节点3\n\tdatahex = string.sub(hex,55,68)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 251 then\n\t\tdatatable.pm10A = value\t\n\tend\t\n\t\t--节点4\n\tdatahex = string.sub(hex,69,82)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 252 then\n\t\tdatatable.pm10B = value\n\tend\t\t\n\t\t--节点5\n\tdatahex = string.sub(hex,83,96)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 287 then\n\t\tdatatable.noiseA = value\n\tend\t\t\n\t\t--节点6\n\tdatahex = string.sub(hex,97,110)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 288 then\n\t\tdatatable.noiseB = value\n\tend\t\t\t\n\t\t--节点7\n\tdatahex = string.sub(hex,111,124)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\t\n\tif number == 302 then\n\t\tdatatable.tempB = value\n\tend\t\t\t\n\t\t--节点8\n\tdatahex = string.sub(hex,125,138)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 313 then\n\t\tdatatable.humidB = value\n\tend\t\t\t\t\n\t\t--节点9\n\tdatahex = string.sub(hex,139,152)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\t\n\tif number == 338 then\n\t\tdatatable.weedspeedB = value\n\tend\t\t\t\t\n\t\t--节点10\n\tdatahex = string.sub(hex,153,166)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \t\n\tif number == 259 then\n\t\tdatatable.threshold = value\n\tend\t\t\t\t\n\t\t--节点11\n\tdatahex = string.sub(hex,167,180)\n\tdata11,data12 = Calc(datahex,1)\n\tdata1 = string.format("%02X",data11-0x33)..string.format("%02X",data12-0x33)\t\n\tdata21,data22 = Calc(datahex,7)\n\tdata31,data32 = Calc(datahex,11)\n\tdata2 = string.format("%02X",data21-0x33)..string.format("%02X",data22-0x33)..string.format("%02X",data31-0x33)..string.format("%02X",data32-0x33)\t\n\tnumber = iota.hexToShort(data1, 0, 'L')\n\tvalue = iota.hexToFloat(data2, 0, 'L') \n\tif number == 261 then\n\t\tdatatable.backlash = value\n\tend\t\t\t\t\n\t\n\tout.data.ack = datatable\n\tlog.debug("renke_dn,out=%s",json.encode(out))\n    return json.encode(out)\nend\n\nLCR=function(start,data)\n    local sum = 0\n    for i=start, string.len(data)/2-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n    sum = bit.band(sum ,0xff)\n    return sum\nend \n\nCalc=function(data,offset)\n\tlocal data1 = tonumber(string.sub(data,offset,offset+1),16)\n\tlocal data2 = tonumber(string.sub(data,offset+2,offset+3),16)\n\tif tonumber(string.sub(data,offset,offset+1),16) < 0x33 then \n\t\tdata1 = tonumber("1"..string.sub(data,offset,offset+1),16)\n\tend\n\tif tonumber(string.sub(data,offset+2,offset+3),16) < 0x33 then \n\t\tdata2 = tonumber("1"..string.sub(data,offset+2,offset+3),16)\n\tend\n\treturn data1,data2\nend 	INLINE	2019-04-08 14:39:25.769+08	2019-05-17 10:59:35.909+08	2019-04-08	\N
feb25833-7419-4779-bfc8-809195843744	fs-idau_mop	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    --log.debug("fs_idau_mop:device=%s",json.encode(device))\n    --log.debug("fs_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    --log.debug("fs_idau_mop:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_network",\n        O = "S",\n        P = {} -- 荷载\n    }\n    local req_sensor={\n        type = "idau",\n        payload = ""\n    }\n    local mop_sensor = {\n        M = "c_sensor",\n        O = "S",\n        P = {} -- 荷载\n    } \n    for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n        local link = device.dnlinks[i]\n        local nodecnt = #(link.devices)\n        --log.debug("fs_idau_mop:nodecnt=%s",nodecnt)\n        local subnet = {\n            SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号.      link.interface.props.subnet\n            NS = {} -- 子网节点\n        }\n        table.insert(mop.P, subnet)\n        if nodecnt > 0 then\n            for j = 1, nodecnt, 1 do\n                local dev = link.devices[j]\n                local dev_inf = link.devices[j].uplink\n                --log.debug("fs_idau_mop:dev=%s", json.encode(dev))\n                local node = {\n                    NID = tonumber(dev_inf.props.netid), -- 网络号\n                    C = 2, -- 通道\n                    DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n                    DIU = 0, --分钟(采集间隔单位)\n                    WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n                    T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n                }\n                table.insert(subnet.NS, node)\n\t\t\t\t\n                if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\t--log.debug("fs_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\t--log.debug("fs_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\t--log.debug("fs_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n\t\t\t\t\t\t\t\tlocal CheckOption = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.CheckOption == false then\n\t\t\t\t\t\t\t\t\tCheckOption = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal VibratSamplFreq = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "8K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSamplFreq == "32K" then\n\t\t\t\t\t\t\t\t\tVibratSamplFreq = 2\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal AmplifierGain = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.AmplifierGain == "500倍" then\n\t\t\t\t\t\t\t\t\tAmplifierGain = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlocal Incentive = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Incentive == false then\n\t\t\t\t\t\t\t\t\tIncentive = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal IncentiveMethod = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.IncentiveMethod == "共振激励" then\n\t\t\t\t\t\t\t\t\tIncentiveMethod = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal VibratSpectrum = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.VibratSpectrum == false then\n\t\t\t\t\t\t\t\t\tVibratSpectrum = 1\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Baudrate = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "19200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Baudrate == "115200" then\n\t\t\t\t\t\t\t\t\tBaudrate = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Databit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "7位" then\n\t\t\t\t\t\t\t\t\tDatabit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Databit == "9位" then\n\t\t\t\t\t\t\t\t\tDatabit = 2\n\t\t\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t\t\tlocal Proofbit = 0\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "奇校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 1\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Proofbit == "偶校验" then\n\t\t\t\t\t\t\t\t\tProofbit = 2\n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tlocal Stopbit = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "0.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "1.5位" then\n\t\t\t\t\t\t\t\t\tStopbit = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.Stopbit == "2位" then\n\t\t\t\t\t\t\t\t\tStopbit = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\t\tlocal SwitchDelay = 1\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "0ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 0\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "10ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 2\n\t\t\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t\t\tif sen.uplink.props.SwitchDelay == "20ms" then\n\t\t\t\t\t\t\t\t\tSwitchDelay = 3\n\t\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBC = CheckOption,\n\t\t\t\t\t\t\t\t\tFS = VibratSamplFreq,\n\t\t\t\t\t\t\t\t\tGA = AmplifierGain,\n\t\t\t\t\t\t\t\t\tBS = Incentive,\n\t\t\t\t\t\t\t\t\tMO = IncentiveMethod,\n\t\t\t\t\t\t\t\t\tUPS = VibratSpectrum,\n\t\t\t\t\t\t\t\t\tHN = tonumber(sen.uplink.props.Spectrumway) or 1,\n\t\t\t\t\t\t\t\t\tINV = tonumber(sen.uplink.props.SensorValue) or 1500,\n\t\t\t\t\t\t\t\t\tBR = Baudrate,\n\t\t\t\t\t\t\t\t\tDB = Databit,\n\t\t\t\t\t\t\t\t\tCB = Proofbit,\n\t\t\t\t\t\t\t\t\tSB = Stopbit,\n\t\t\t\t\t\t\t\t\tSWD = SwitchDelay\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n                    end\n                end\n            end\n        end\n    end\n    req.payload = json.encode(mop)\n    log.debug("fs_idau_mop:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n\tlocal result= {\n\t\tresult= nil,\n\t\ttype=1,\n\t\tdata={}\n\t}\n\t--log.debug("fs_idau_mop:ack=%s", json.encode(ack))\n    if ok then\n        req_sensor.payload= json.encode(mop_sensor)\n        --log.debug("fs_idau_mop:requestsensor=%s", json.encode(req_sensor))\n        local senok, senack = ctx:ssend(req_sensor, 120000)\n\t\tif senok then\n\t\t\tresult.data.ack =  json.encode(senack)\n\t\telse\n\t\t\tresult.data.ack =  json.encode(ack)\n\t\tend\n\t\t--log.debug("mas_idau_mop: sensor ack=%s", json.encode(result))\n\telse\n\t\tresult.data.ack =  'set error'\n    end\n\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n	INLINE	2018-03-08 18:59:11.134+08	2019-12-17 14:37:31.63+08	2018-03-08	\N
7f9b871e-3291-44e5-8ba3-a9a6f7759a41	MASCSHLS	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "MASCSHLS.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("MASCSHLS 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("MASCSHLS 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n\t--buff=iota.appendHexWord(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x04, endian)  \n\t--buff=iota.appendHexWord(buff, 0x00, endian)  \n\tbuff=iota.appendHexWord(buff, 0x02, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n       local length1=iota.hexToShort(hex,3,'B')\n\t   local length2=iota.hexToShort(hex,5,'B')/65535\n\t   local length=length1+length2\n\t\n     \n        out.data = {\n\t\tlength\t=tonumber(string.format('%0.3f',length))\t\n\t\t\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('MASCSHLS开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('MASCSHLS数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-07-02 10:41:35.584+08	2020-07-02 10:49:12.592+08	2020-07-02	\N
7231d629-dac5-471d-a674-005608c54feb	MAS-IOT102	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\n\nstart = function()\n    log.debug('MAS_IOT102 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n    --主动上传式\n    log.debug('MAS_IOT102 Received=>%s', hex)\n    log.debug('MAS_IOT102 device=>%s', json.encode(device))\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\n    local index_temp = 10\n    local index_mv = 12\n    local index_ma1 = 16\n    local index_ma2 = 20\n    local index_powerlevel = 24\n    local index_signal = 26\n    local index_ballstate = 28\n    local index_alarmcode = 30\n    local index_3Dangles = 32\n    local index_angletemp = 38\n    local index_numof485 = 40\n    local index_485_1 = 44\n\n    local moduleNoStr = device.uplink.props.module \n\n    local channelDatas = {}\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    local moduleidsub = string.sub(hex, 3, 10)\n    log.debug('MAS_IOT102  moduleidsub=%s', moduleidsub)\n    local xm=string.sub(hex,11,12)\n    --log.debug('MAS_IOT102  xm=%s', xm)\n    \n    if ErrorCode then\n        local temperature = iota.hexToUShort(hex, index_temp, 'L') / 10\n        channelDatas[1] = temperature\n        local mv = iota.hexToFloat(hex, index_mv, 'L')\n        channelDatas[2] = mv\n        local ma1 = iota.hexToFloat(hex, index_ma1, 'L')\n        channelDatas[3] = ma1\n        local ma2 = iota.hexToFloat(hex, index_ma2, 'L')\n        channelDatas[4] = ma2\n        local powerlevel = iota.hexToUShort(hex, index_powerlevel, 'L')\n        channelDatas[5] = powerlevel\n        local signal = iota.hexToUShort(hex, index_signal, 'L')\n        channelDatas[6] = signal\n        local ballstate = iota.hexToUShort(hex, index_ballstate, 'L')\n        channelDatas[7] = ballstate\n        local alarmcode = iota.hexToUShort(hex, index_alarmcode, 'L')\n        channelDatas[8] = alarmcode\n        --local _3Dangles = {iota.hexToShort(hex, index_3Dangles, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 2, 'L')/32768*180, iota.hexToShort(hex, index_3Dangles + 4, 'L')/32768*180}\n        \n        local _3Dangles = {string.sub(tostring(iota.hexToShort(hex, index_3Dangles, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+2, 'L')/32768*180), 1, 6),string.sub(tostring(iota.hexToShort(hex, index_3Dangles+4, 'L')/32768*180), 1, 6)}\n        channelDatas[9] = _3Dangles\n        local angletemp = iota.hexToUShort(hex, index_angletemp, 'L')\n        channelDatas[10] = angletemp\n        local numof485 = iota.hexToUShort(hex, index_numof485, 'L')\n        for i = 1, numof485, 1 do\n            local data485 = iota.hexToFloat(hex, index_485_1 + (i - 1) * 4, 'L')\n            channelDatas[10 + i] = data485\n        end\n\n        for k, v in pairs(channelDatas) do\n            log.debug('MAS_IOT102   模块号=%s,通道号=%s', moduleNoStr, k)\n            local childDevice = getDeviceInfo(moduleNoStr, k)\n            physicalvalue = channelDatas[k]\n            log.debug('MAS_IOT102:子设备原形childDevice=%s', json.encode(childDevice))\n            local deviceId\n            if childDevice ~= nil then\n                deviceId = childDevice.id\n                log.debug('MAS_IOT102:子设备原形childDevice=%s', json.encode(childDevice))\n\n                if k == 9 then --3向角度计\n                    local data1 = {\n                        data = {\n                            anglex = channelDatas[k][1],\n                            angley = channelDatas[k][2],\n                            anglez = channelDatas[k][3]\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    local data1 = {\n                        data = {\n                            physicalvalue = getPreciseDecimal(channelDatas[k], 5)\n    \n                            \n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            else\n                log.debug('MAS_IOT102  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('MAS_IOT102 resultData=%s', resultData)\n    ctx:notify(resultData)\n    local zt="FF"\n    local zw="FE"\n    \n    if (xm=='01') then \n        local xmo="810000"\n        local  xmm=moduleidsub..xmo     --xmm=2155cc04810000\n        --log.debug('MAS_IOT102 xmm=%s', xmm)\n        local  app=CS(xmm)\n        local  bpp=string.format("%#x",app)\n        --log.debug('MAS_IOT102 app=%s', app)\n        \n        local  bpp=string.format("%#x",app)\n            --log.debug('MAS_IOT102 bpp=%s', bpp)\n        local  cpp=string.sub(bpp, -2, -1)\n        -- log.debug('MAS_IOT102 cpp=%s', cpp)\n        local asends=zt..xmm..cpp..zw\n        --log.debug('MAS_IOT102 asends=%s', asends)\n        ctx:asend(asends)\n    elseif(xm=='09') then\n        local xmo="890000"\n        local  xmm=moduleidsub..xmo     \n        --log.debug('MAS_IOT102 xmm=%s', xmm)\n        local  app=CS(xmm)\n        local  bpp=string.format("%#x",app)\n        --log.debug('MAS_IOT102 app=%s', app)\n        \n        local  bpp=string.format("%#x",app)\n            --log.debug('MAS_IOT102 bpp=%s', bpp)\n        local  cpp=string.sub(bpp, -2, -1)\n        local asends=zt..xmm..cpp..zw\n        --log.debug('MAS_IOT102 asends=%s', asends)\n        ctx:asend(asends)\n        end\n        \nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n    --log.debug('MAS_IOT102:lcr累加结果%s', lcr)\t\n    --local value=bit.band(bit.bnot(lcr),0xff)+1  --按位取反再加1\n    --log.debug('MAS_IOT102:lcrvalue累加结果1%s', value)\t\n    return lcr\nend \n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("MAS_IOT102 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('MAS_IOT102:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                log.debug('MAS_IOT102 uplink子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                log.debug('MAS_IOT102 no子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('MAS_IOT102:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('MAS_IOT102:  subdevices是nil')\n        return nil\n    end\nend\n\nIsValid = function(data, module_device)\n    local datalen = string.len(data)\n    --or datalen < 46\n    if data == nil  then\n        errormsg = string.format('数据长度无效=%s', datalen)\n        errcode = 1002\n        return false\n    end\n\n    if string.sub(data, 1, 2) ~= 'ff' or string.sub(data, -2, -1) ~= 'fe' then\n        errcode = 1003\n        errormsg = string.format('数据帧头帧尾无效')\n        return false\n    end\n\n    local module_data = tostring(iota.hexToUInt(data, 1, 'L'))\n    if module_data ~= module_device then\n        errormsg = string.format('模块号无效=%s≠%s', module_data, module_device)\n        errcode = 1004\n        return false\n    end\n    log.debug('MAS_IOT102:校验通过')\n    return true\nend\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n    if type(nNum) ~= "number" then\n        return nNum;\n    end\n    n = n or 0;\n    n = math.floor(n)\n    if n < 0 then\n        n = 0;\n    end\n    local nDecimal = 10 ^ n\n    local nTemp = math.floor(nNum * nDecimal + 0.5);\n    local nRet = nTemp / nDecimal;\n    return nRet;\nend	INLINE	2019-12-09 10:05:40.023+08	2019-12-10 10:14:32.798+08	2019-12-09	\N
0e7050bc-bc01-4f3e-8758-23b2ba883e6a	rtu_disaster_mop	\N	20201015升级	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n    log.debug("rtu_disaster_mop start , device=%s",json.encode(device))\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks) or 0  --遍历sensors,分配到4个channel\n\tif sencnt > 0 then \n        for i,dnlink in pairs(device.dnlinks)  do\n            for j,subdevice in pairs(dnlink.devices)  do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel)          \t\t\t\n\t\t\t\t\tlocal sentype = subdevice.props.sensortype\n          \t\t\tlog.debug("rtu_disaster_mop sentype =%s",sentype)\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "js" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "nw" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "rainfall" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "hs" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "gnss" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "qj" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "ty" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "lx" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "gscx" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "cx" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "214"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "kx" then --渗压计就是空隙水压计 名称统一\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\n\t\t\t\t\telseif sentype == "wsd" then\n\t\t\t\t\t\tsen_type = "223"\n                    elseif sentype == "pic" then\n\t\t\t\t\t\tsen_type = "224"\n                    elseif sentype == "声光报警" then\n\t\t\t\t\t\tsen_type = "225"\n\t\t\t\t\telseif sentype == "cj" then\n                        sen_type = "226"\n          \t\t\telseif sentype == "tw" then\n                        sen_type = "227"\n\t\t\t\t\tend\n\t\t\t\t\tlocal fid = "0"\n\t\t\t\t\tlog.debug("rtu_disaster_mop start , subdevice.uplink=%s",json.encode(subdevice.uplink.capabilities[1]))\n\t\t\t\t\tlocal thresholdx \n\t\t\t\t\tlocal thresholdy\n\t\t\t\t\tlocal thresholdz\n\t\t\t\t\tlocal cp1\n\t\t\t\t\tlocal cp2\n\t\t\t\t\tlocal cp3\n\t\t\t\t\tlocal cp4\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "bdb43886-e71d-4135-ad42-6e296635b02e" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.cx_thresholdx\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_v1) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_v2) or "0"\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.cx_l) or "0"\n\t\t\t\t\t\tfid = "2"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "14c1729f-4851-411d-9828-84fb5b11f593" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.c_thresholdx\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.C0) or "0"\n\t\t\t\t\t\tfid = "22"\n\t\t\t\t\tend --初值减测值\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "898c3c4f-ecab-4aa9-9a95-accd00e26193" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.v1_x_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.v1_x) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "5"\n\t\t\t\t\tend --减初值\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "c5378a9c-9406-4583-9ae8-5fddb5a5d65e" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.v2_x_thresholdx\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.v2_y_thresholdy\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.v2_x) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.v2_y) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "6"\n\t\t\t\t\tend --减初值公式\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "68180c88-8643-47ba-815c-90668639e80f" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.h_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.len0) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.H) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "13"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "d71a2a8d-5ad2-4cbe-b8d0-3edf77a1037a" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.wl_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.k_wl) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.f0_wl) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.h_wl) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "7"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "927f1c11-f9a3-4c84-a565-57ee9245e41f" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.phy_thresholdx\t\t\t\t\t\t\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.capabilities[1].formula.props.k) or "0"\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.capabilities[1].formula.props.f0) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.capabilities[1].formula.props.k) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tcp4 = tostring(subdevice.uplink.capabilities[1].formula.props.t0) or "0"\t\t\t\t\t\t\n\t\t\t\t\t\tfid = "1"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "b545defc-450b-4986-83ef-445423df6f98" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.n_thresholdx\t\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.n_thresholdy\t\n\t\t\t\t\t\tthresholdz = subdevice.uplink.capabilities[1].formula.props.n_thresholdz\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "fae5e233-4034-4ebe-8e7b-0bf35a648ec9" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.wsd_thresholdx\t\n\t\t\t\t\t\tthresholdy = subdevice.uplink.capabilities[1].formula.props.wsd_thresholdy\t\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.uplink.capabilities[1].formula.metaid == "ed141cf4-ca2c-49a1-9704-afee24dc9c71" then\n\t\t\t\t\t\tthresholdx = subdevice.uplink.capabilities[1].formula.props.n_thresholdx\t\n\t\t\t\t\t\tfid = "0"\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tcid = fid,\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = string.format("%s,%s,%s",thresholdx or 0,thresholdy or 0,thresholdz or 0),\n\t\t\t\t\t\tcp1 = cp1 or "0",\n\t\t\t\t\t\tcp2 = cp2 or "0",\n\t\t\t\t\t\tcp3 = cp3 or "0",\n\t\t\t\t\t\tcp4 = cp4 or "0"\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode)\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop  [%s]  ok=%s,r1=%s,mode=%s",devmodule,ok,r1,device.props.mode)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic })\n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d  tableconfig_3 =%d  tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tlocal ack = Genratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\n\tlog.debug("rtu_disaster_mop [%s] ack =%s",devmodule,json.encode(ack))\n      out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n\tctx:done(json.encode(out))\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\n    local allconfig={}\n    allconfig[1]=tableconfig_1\n    allconfig[2]=tableconfig_2\n    allconfig[3]=tableconfig_3\n    allconfig[4]=tableconfig_4\n\tlocal result\n    local devmodule = device.props.moduleid\n\tlocal channel=0\n    for _, single_tableconfig in pairs(allconfig) do\n\t\tchannel=channel+1\n        if #(single_tableconfig) > -1 then\n            local count = #(single_tableconfig)\n            ----获取配置，判断是否下发\n            local strdevice= toHexStr(json.encode(single_tableconfig))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s 校验配置 strdevice =%s crc =%s",devmodule,channel,json.encode(single_tableconfig), crc)\n            ----轮询下发\n            local index = 0\n            local topic =devmodule.."/ch/"..channel\n            local cmd = "$cmd=setsensor&sensor_num=0"\n\t\t\tlocal redis_key=device.id.."_rtuchset_"..channel\n\t\t\tlocal r1,ok = redis.get(redis_key)\n\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s  缓存变化 redis_key=%s r1 =%s crc =%s",devmodule,channel,redis_key,r1, crc)\t\t\t\t\n\t\t\tif r1~=crc then\n\t\t\t\tfor i,value in pairs(single_tableconfig)  do\n\t\t\t\t\tcmd = "$cmd=setsensor&sensor_num="\n\t\t\t\t\tindex = index + 1\n\t\t\t\t\tcmd = cmd..tostring(index)\n\t\t\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\t\t\tcmd = cmd..",{sensor_id="..senid.."&cid="..value.cid.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&cp="..cpcmd.."}"\n\t\t\t\t\t---------------------------------------------------------------\n\t\t\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s redis_key=%s 修改配置下发  topic =%s cmd =%s",devmodule,channel,redis_key,topic, cmd)\t\t\t\t\t\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\t\t\t\t\t\n\t\t\t\t\tresult = ack\n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\t\t--如果数量变成0\n\t\t\t\tif #single_tableconfig==0 then\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\t\t\t\tresult = ack\n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\t\tredis.set(redis_key, tostring(crc))\n\t\t\tend\n        end\n    end\n\treturn result\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n	INLINE	2019-12-27 09:23:29.977+08	2021-01-21 09:10:05.932+08	2019-12-27	\N
eb7d51b4-3089-4b47-a4df-3d772ee3dbf2	fs_magneticflux_1700	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--01 协议文档/IOTA/协议/磁通量协议.xlsx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("load script %s, moduleId=%s", "fs_magneticflux_1700.lua", device.props.moduleId or "[nil]")   \nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下 子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("fs_magneticflux_1700:LUA:根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("fs_magneticflux_1700:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n        \tlocal moduleNo=tonumber(child.uplink.props.module) --模块 通道 接口获取\n\t\t\tlocal channelNo=tonumber(child.uplink.props.channel)\n            log.debug("fs_magneticflux_1700:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t     \n\t\t\tbuff=iota.appendHexByte(buff, 0xfe, endian)          \n\t\t\tbuff=iota.appendHexByte(buff, 0xcd, endian) \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)           \n\t\t\tbuff=iota.appendHexWord(buff, 0x04, endian)            \n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)             \n\n\t\t\tlocal vol = tonumber(child.uplink.capabilities[1].formula.props.Uj) -- 激励电压Uj(V)\n            log.debug("fs_magneticflux_1700:模块%s通道%s的deviceId的vol的type是%s：",moduleNo,channelNo,type(child.uplink.capabilities[1].formula.props.Uj))\n\t\t\tlocal checkShort=isShort(tonumber(vol))\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的checkShort=%s",moduleNo,channelNo,checkShort) \t\t\n\t\t\tif checkShort==false then\t\t\t\n\t\t\t\tvol=20\t\t\t \n\t\t\tend\n\t\t\t\n\t\t\tif vol==0 or vol==nil then\n\t\t\t   vol=20\n\t\t\tend\n\t\t\t\n\t\n\t\t\t--1:采集选项\n\t\t\tbuff=iota.appendHexWord(buff, vol, endian) \n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的vol=%s,buff=%s",moduleNo,channelNo,vol,buff)\n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian) \t\t\t\n\t\t\tbuff_xor=iota.hexCheckXor(buff,0) \n\t\t\tbuff=iota.appendHexByte(buff, buff_xor, endian) \n\t\t\t\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的异或后,buff_xor=%s,buff=%s",moduleNo,channelNo,buff_xor,buff) \t\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0xef, endian) \n\t\t\tok,resp=ctx:ssend(buff,30000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("fs_magneticflux_1700:模块%s通道%s的数据接收成功,开始解析resp=%s",moduleNo,channelNo,resp)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("fs_magneticflux_1700:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("fs_magneticflux_1700:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('fs_magneticflux_1700:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("fs_magneticflux_1700:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n\n\nisShort=function(checkData)\n    if math.floor(checkData)<checkData then\n\t   return false\n\t else\n\t   return true\n\tend\nend\n\n--cmd=fe cd 21 78 00 04 03 00 14 00 00 00 79 ef \n--resp=FECD000A0104000B9B8922417B14A041000000000000C8EF     m=10 c=1    kt=1  to=2 v0=3 vob=4 c0=5 c1=6 c2=7\n--voltage=10.159\n--stemp = 20.1\n--cableforce = 292.484\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\tlog.debug("fs_magneticflux_1700:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n \n        local Voltage = iota.hexToFloat(hex,8,'L')\n        local Temp = iota.hexToFloat(hex,12,'L')\n        local vol\n\t\tlocal phy\n\n\t\t--公式\n    \t--F=C2[Vi-（Ti-T0）*Kt-(V0-V0b)]2+C1[Vi-（Ti-T0）*Kt-(V0-V0b)]+C0\n        --if subDevice.device.formula == "F=C2*U^2+C1*U+C0;U=Vi-(Ti-T0)*Kt-(Tci-Tc0)*Ktm" then --大小写不区分或者默认处理为该公式\n\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n            local T0 = subDevice.uplink.capabilities[1].formula.props.T0\n\t\t\tlocal V0 = subDevice.uplink.capabilities[1].formula.props.V0\n            local V0B = subDevice.uplink.capabilities[1].formula.props.V0B\n            local C0 = subDevice.uplink.capabilities[1].formula.props.C0\n            local C1 = subDevice.uplink.capabilities[1].formula.props.C1\n            local C2 = subDevice.uplink.capabilities[1].formula.props.C2\n    \t\tlog.debug("fs_magneticflux_1700:!!!模块%s通道%s的参数是Kt,T0,V0,V0B,C0,C1,C2,=[%s,%s,%s,%s,%s,%s,%s]",moduleNo,channelNo,Kt,T0,V0,V0B,C0,C1,C2)\n            if Kt~=nil and T0~=nil and  V0~=nil and V0B~=nil and C0~=nil and C1~=nil and C2~=nil then\n\t\t\t vol = Voltage - Kt*(Temp - T0) - (V0 - V0B);\n             phy = C2 * math.pow(vol, 2) + C1 * vol + C0;\n\t\t\t subData.data = {\n\t\t\t\t\t\t\tvoltage=tonumber(string.format("%5.3f",Voltage)),\n\t\t\t\t\t\t\tstemp = tonumber(string.format("%5.2f",Temp)),\n\t\t\t\t\t\t\tcableforce = tonumber(string.format("%5.3f",phy)),\n\t\t\t\t\t\t}  \n            end\n       -- end\n             \n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('fs_magneticflux_1700:开始校验数据m=%s,c=%s,data=%s',moduleId,channelId,data)\n    if data == nil or string.len(data)/2 ~=24 then\n        errormsg = 'Data is nil or invalid Length'\n        errcode = 1001\n        return false\n    end\n\t\n    if iota.hexToByte(data,0,'B') ~= 0xfe or iota.hexToByte(data,1,'B') ~= 0xcd or iota.hexToByte(data,23,'B') ~= 0xef then \n        errcode = 1002\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    \n\tlocal data_moduleId=tostring(iota.hexToShort(data,2,'B'))\n\tif tostring(moduleId) ~= data_moduleId then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug("fs_magneticflux_1700:模块号错误：moduleId=%s,data_moduleId=%s",moduleId,data_moduleId)\n        return false\n    end\n\t\n\t\n\tlocal data_channelId=iota.hexToByte(data,4,'B')\n\tif tonumber(channelId) ~= data_channelId then\t\n        errormsg = 'Invalid acq channelId'\n        errcode = 1004\n\t\tlog.debug("fs_magneticflux_1700:通道号错误：channelId=%s,data_channelId=%s",channelId,data_channelId)\n        return false\n    end\n\t\n\t\n\t\t\n--xor\n  log.debug('fs_magneticflux_1700:数据校验通过')\n   return true\nend	INLINE	2018-03-02 17:17:43.073+08	2019-08-09 16:50:35.807+08	2018-03-02	\N
b5bfba1d-25c8-4e8d-9a0e-a4d9be2dcd1e	jnrs_temphumi_1	\N		1.0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	943913b0-23c7-43a9-a1d6-a7e59ed719d0	f	943913b0-23c7-43a9-a1d6-a7e59ed719d0	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jnrs_temphumi_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jnrs_temphumi_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexByte(buff, moduleNo, endian)\n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1  SSend error")\n    end\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        \n        -- 0103040292ff9b5a3d\n        --"humi": 65.8,\n\t\t--"temp": -10.1\n        local humi =iota.hexToShort(hex,3,'B')/10;\n        local temp =iota.hexToShort(hex,5,'B')/10;\n      \n        out.data = {  \n            temperature=temp,\n            humidity=humi\n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-23 17:16:33.719+08	2018-03-29 11:37:44.009+08	2018-01-23	\N
0856b400-ee67-440c-b534-b075d2b36023	JM_4801	\N	综合采集仪协议	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	start=function ()\n\tlog.debug("load script %s, moduleId=%s", "jm_4801", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlog.debug("jm_4801:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jm_4801 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jm_4801 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n    if string.len(moduleNo)<8 then  --采集箱编号8位\n        local strlen=8-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n\t log.debug("jm_4801:LUA:采集仪 : moduleId =%s", moduleNo) \n    \n\t local sr=moduleNo..'A'\n\n\n\t local str_check=getCheckStr(sr)\t\n\t \n\t buff_str= '#'..moduleNo..'A'\n\t buff=StrToHex(buff_str)..str_check\n     buff=iota.appendHexByte(buff, 0x21, 'B')  --0x21=!\n     log.debug("jm_4801:模块%s的采集仪采集指令=%s ",moduleNo,buff)   \n\t log.debug("jm_4801: buff=%s,下发码流buff1111 buff%s",buff)\n     ok,resp=ctx:ssend(buff,60000)\n\t if ok then\t   \n\t\t--log.debug("jm_4801:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp)   \n         result = ParseResult(resp,out,moduleNo)\t\n\t else\n    \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("jm_4801:模块%s的采集数据 接收失败",moduleNo)    \n\t end\n     local resultData =json.encode(result)\n     log.debug("jm_4801:out序列化结果 : out is =%s", resultData)\n     ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t--  二次解析\n\tlog.debug("jm_4801 m=%s,接收传感器数据 Received=>%s",moduleNoStr,hex)\n\tlog.debug("jm_4801 hex=%s,上传上来的码流1111 hex%s",hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlocal adress=''\n\t\tlocal channelTable={}\n\t\t\n\t\tlog.debug("jm_4801: hex=%s,回传码流1111 hex%s",hex)\n\t\tlocal dataType=iota.hexToByte(hex,15,'B') ---返回所有通道数据  带通道号\n\t\tlog.debug('jm_4801  获取通道值1111dataType=%s', dataType)\n\t\tif dataType==0x43 then\t--返回"C"  \n\t\t  local datalength=string.len(hex)/2\n\t\t  for i=0,datalength-1,1 do\n\t\t\t if iota.hexToByte(hex,i,'B')==0x43 then  --'C'\n\t\t\t\t adress=adress..tostring(i)..','\n\t\t\t end\n\t\t  end\n\t\t  \n\t\t  local sArray=Split(adress,',')\n\t\t  log.debug('jm_4801  m=%s,sArray=%s',moduleNo,json.encode(sArray))\n\t\t  for k,v in ipairs(sArray) do\n\t\t\t\tif v~='' then\n\t\t\t\t\t\n                    local num=v\n\t\t\t\t\tlocal moduleNo=device.uplink.props.module --evice.props.moduleId\n                    local hex_channelNo =string.sub(hex,2*(num+1)+1,2*(num+1+2))\n                    local channelNo=HextoStr(hex_channelNo)\n\t\t\t\t\t\n\t\t\t\t\tlog.debug('jm_4801:v=%s,moduleNo=%s,channelNo=%s',v,moduleNo,channelNo)\t\t\n\t\t\t\t\tlocal Len=GetCodelen(v+3,hex);\n\t\t\t\t\tlog.debug('jm_4801: v=%s,Len=%s',v,Len)\t\n\t\t\t\t\tlocal valuelen=GetCodelen(num+3+Len+1,hex)\n\t\t\t\t\tlog.debug('jm_4801: v=%s,valuelen=%s',v,valuelen)\n\t\t\t\t\tlocal hex_Type=string.sub(hex,2*(num+3+Len+1)+1,2*(num+3+Len+1+valuelen))\n\t\t\t\t\tlocal Type=HextoStr(hex_Type)\n\t\t\t\t\tlocal valuelength=GetCodelen(num+3+Len+1+valuelen+1,hex)\n\t\t\t\t\tlocal hex_valuel=string.sub(hex,2*(num+3+Len+valuelen+2)+1,2*(num+3+Len+valuelen+2+valuelength))\n\t\t\t\t\tlog.debug('jm_4801: v=%s,hex_valuel=%s',v,hex_valuel)\n\t\t\t\t\tlocal value1=HextoStr(hex_valuel)\n\t\t\t\t\tlocal value11 = GetCodelen(num + 3 + Len + valuelen + valuelength + 3, hex); --//数值2的字符长度\n\t\t\t\t\tlocal hex_value2 =string.sub(hex,2*(num + 3 + Len + valuelen + valuelength + 3)+1,2*(num + 3 + Len + valuelen + valuelength + 3+tonumber(value11)));-- //数值2\n\t\t\t\t\tlog.debug('jm_4801: v=%s, hex_value2=%s',v,hex_value2)\n\t\t\t\t\tlocal value2=HextoStr(hex_value2)\n\t\t\t\t\tlocal value12 = GetCodelen(num + 3 + Len + valuelen + valuelength + value11 + 4, hex); --//数值3的字符长度\n\t\t\t\t\tlocal hex_value3 = string.sub(hex, 2*(num + 3 + Len + valuelen + valuelength + value11 + 4)+1,2*(num + 3 + Len + valuelen + valuelength + value11 + 4+value12));\n\t\t\t\t\tlog.debug('jm_4801:  v=%s,hex_value3=%s',v,hex_value3)\n\t\t\t\t\tlocal value3=HextoStr(hex_value3)\n\t\t\t\t\tlocal Pressure\n\t\t\t\t\tlocal PressureS\n\t\t\t\t\tlog.debug('jm_4801:遍历 moduleNo=%s,channelNo=%s, k=%s,v=%s,value1=%s,value2=%s,value3=%s',moduleNo,channelNo,k,v,value1,value2,value3)\t\t\n                    local value1_isNumber=IsNumberic(value1)\n                    local value2_isNumber=IsNumberic(value2)\n\t\t\t\t\tif  value1_isNumber and value1_isNumber then\n\t\t\t\t\t   --获取通道设备deviceId\n                        log.debug('jm_4801:查找子设备moduleNo=%s,channelNo=%s',moduleNo,channelNo)\n                        local childDevice=getDeviceInfo(tonumber(moduleNo),tonumber(channelNo))\n                        \n                        if childDevice~=nil then\n                            local deviceId=childDevice.id\n                            log.debug("jm_4801 m=%s,c=%s,子设备111111111111deviceId=%s",moduleNo,channelNo,deviceId)\t\n                            if Type=='9' then\t\t\t\t\t\t\n                                    \n                                local displacement=tonumber(value1)/10\n\t\t\t\t\t\t\t\tlog.debug("jm_4801 displacement=%s,这是一个不知道的值1111 displacement%s",displacement)\n                                if displacement<0 then\n                                    displacement=displacement+6553.5\n                                end\n                                local temperature=0\n                                if IsNumberic(value3) then\n                                    temperature=tonumber(value3-500)/10\n                                end\n                                    \n                                local data1={\n                                        data={\n                                            value1=displacement,\n                                            value2=temperature\t\n                                            },\n                                        device=deviceId,\n                                        type=1 ,\n                                        }\n                                            \n                                table.insert(out.data,data1)\t\n                            else\n                                local displacement=tonumber(value1)/1000\n                                local r_displacement=tonumber(value2)/1000\n                                    \n                                local data1={\n                                        data={\n                                            value1=displacement,\n                                            value2=r_displacement\t\n                                            },\n                                        device=deviceId,\n                                        type=1,\n                                        }\n                                            \n                                table.insert(out.data,data1)\t\n\n                            end\n                        else\n                        log.debug("jm_4801 子设备deviceId为nil:m=%s,c=%s",moduleNo,channelNo)\n                        end\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tend  \n\t\t   end \n            return out   \n\t\tend\t\n\telse\n\t    log.debug('jm_4801  m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n  \treturn out\nend\n\ngetCheckStr=function(sr)\n    local srlen=string.len(sr)\n    local check=0\n\t for i=1,srlen,1 do\n\t     local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n     check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check)   \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n    local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t    local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t    length=j\n\t\t\tbreak\n\t\tend\n\t  \n\tend\n    return length\nend\n\n\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("jm_4801 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("jm_4801:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("jm_4801 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("jm_4801 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("jm_4801:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("jm_4801:  subdevices是nil")\n    \treturn nil\n    end\nend\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('jm_4801  m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n    if data == nil or string.len(data)/2 < 3 then\n        errormsg = string.format('无效的数据，长度=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n\n\tif string.sub(data,1,2) ~= '24' then\n        errcode = 1003\n        errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n        return false\n    end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif string.sub(data,-2,-1) ~= '21' then\n        errcode = 1004\n        errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n        return false\n    end\t\n    log.debug('jm_4801  m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend	INLINE	2018-01-11 11:13:58.989+08	2019-10-21 15:18:51.727+08	2018-01-11	\N
afb4357f-a11c-4278-b137-53c5042053db	BGK_CM60B_GPRS	\N		1.0	224e0fc3-9311-4c4a-839d-d0363ece2ab4	224e0fc3-9311-4c4a-839d-d0363ece2ab4	f	224e0fc3-9311-4c4a-839d-d0363ece2ab4	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("load script %s, moduleId=%s", "BGK_CM60B_GPRS.lua", device.props.moduleId or "[nil]")\n    \n    --ok,resp=ctx:ssend("0102030405060708",15000)\n    --log.debug("BGK_CM60B_GPRS:".."测试下发正常")\nend\n\nonData=function(hex)\n    log.debug("BGK_CM60B_GPRS:onData: data is =%s", hex)\n    log.debug("BGK_CM60B_GPRS:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    --log.debug("BGK_CM60B_GPRS:".."子设备device.dnlinks[1].devices:", json.encode(device.dnlinks[1].devices))\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=toStrHex(hex);\n        log.debug("BGK_CM60B_GPRS:sData是"..sData)\n\n        --分析单类数据\n        local singleData=Split(sData,' ');\n            \n        --移除单类数据中的空 \n        for k,v in ipairs(singleData) do\n            if v=='' or v==nil then\n                 --print("移除元素为 ",singleData[kk])\n                table.remove (singleData,k)    \n            end\n        end\n        \n        local moduleNo=singleData[2]\n        --解析单条数据\n        for kk,vv in ipairs(singleData) do\n            log.debug("BGK_CM60B_GPRS:遍历解析单条数据 键="..tostring(kk).." 值="..tostring(vv))\n            if kk>6 and (kk%2)==1 and kk<(table_leng(singleData)-3) then\n                if vv~='M'then\n                    local value=vv\n                    local channelNo=(kk-5)/2\n                    local childDevice=getDeviceInfo(moduleNo,channelNo)\n                    local deviceid=childDevice.id\n                    log.debug("BGK_CM60B_GPRS:childDevice"..tostring(kk).." 值="..tostring(vv))\n                    local data1 ={\n                        data={\n                            value=tonumber(value)\n                        },\n                        device=deviceid,\n                        type=1                         \n                        }\n                    table.insert(out.data,data1)\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("BGK_CM60B_GPRS:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t    if child.props.channelId == tostring(channelNoId) then\n                    log.debug("BGK_CM60B_GPRS:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t    log.debug("BGK_CM60B_GPRS:".."子设备原形child=%s",json.encode(child))\n            \t    --return child.deviceId\n                    return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n        log.debug("geot_3300:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("BGK_CM60B_GPRS:".."校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    log.debug("BGK_CM60B_GPRS:".."校验通过")\n    return true\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n        local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n        local ascii =string.format("%c",bi)\n        str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n            leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n        return true;   \n    end\n    return false;\nend\n\n	INLINE	2018-02-07 16:34:24.05+08	2018-03-01 00:05:58.035+08	2018-02-07	\N
d9b6eb86-bbee-4c4e-9007-eb566b64fba6	gn_NGN	\N	采集仪	1.0	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	f	c465666b-2fe0-4d50-9d21-74d919571ab4	Lua	start=function()\n    log.debug("gn_NGN:".."测试下发01020304正常")\nend\n\n--FF 1C 00 01 00 2D 11 01 44 5A CD F0 50 03 64 D5 78 79 40 40 64 3F AA AE A3 41 64 3F AA AE A3 42 64 3F AA AE A3 43 64 3F AA AE A3 3C AF \nonData=function(hex)\n    log.debug("gn_NGN: 收到数据=%s", hex)\n\tlog.debug("gn_NGN: device =%s", json.encode(device))\n    --log.debug("gn_NGN: subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local module= iota.hexToShort(hex,2,'B')\n        local time1=iota.hexToInt(hex,9,'B')\n        log.debug("gn_NGN:".."time1=%s", tostring(time1))\n        local count= (string.len(hex)-42)/12\n        for i=1,count,1 do\n            local channel= iota.hexToByte(hex,13+i*6,'B')\n            local Length=iota.hexToFloat(hex,15+i*6,'L',3)\n            log.debug("gn_NGN:".."Length=%s", tostring(Length))\n            local childDevice=getDeviceInfo(module,channel)\n           \n            if childDevice ~=nil then\n                --log.debug("gn_NGN: subdevices  data is =%s", json.encode(childDevice)\n                local data1 ={\n                    data={\n                        length = Length\n                    },\n                    device=childDevice.id,\n                    type=1,\n                    time=os.date("%Y-%m-%dT%H:%M:%S",time1)        \n                    }\n                table.insert(out.data,data1)\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("gn_NGN:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        \n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    log.debug("gn_NGN:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local\tmoduleStrCheck= tostring(child.uplink.props.module)\n            local\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("gn_NGN 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n        \tif moduleStrCheck== tostring(moduleNoId) then\n\t\t  \t    if channelStrCheck== tostring(channelNoId) then\n          \t\t    log.debug("gn_NGN:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                    return child\n                end\n       \t \tend\n        end\n        return nil\n    else\n        log.debug("gn_NGN:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("gn_NGN:".."校验开始")\n    if alldata == nil  then\n        errormsg = 'gn_NGN:allData is nil'\n        errcode = 1001\n        return false\n    end\n    local buff=string.sub(alldata, 1, -5)\n    local buff=iota.appendHexCrc(buff, 'L' ,0)\n    log.debug("gn_NGN:".."buff=s%",buff)\n    if string.lower(buff)~=string.lower(alldata) then\n        log.debug("gn_NGN:".."校验失败 buff=s%",buff)\n        errormsg = 'gn_NGN: cac failed'\n        errcode = 1001\n        return false\n    end\n    log.debug("gn_NGN:".."校验通过")\n    return true\nend\n\n\n\n\n	INLINE	2018-04-11 13:54:46.044+08	2018-04-16 17:11:35.592+08	2018-04-11	\N
6a99d6ca-10ea-424d-a9cd-48ea93b1d1f9	shsd_level_18625	\N		1.0	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	f	6708aba6-65f9-4ec3-bfc2-227628154ff3	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "shsd_level_18625.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shsd_level_18625 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("shsd_level_18625 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    -- 01040000000271cb\n    log.debug("shsd_level_18625,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("shsd_level_18625  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shsd_level_18625 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        --01040442C800006E02 \n        --"pressure": 100\n        local pressure =iota.hexToFloat(hex,3,'B')/1000.0;\n    \n        out.data = {           \n            pressure=pressure        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shsd_level_18625 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-06-25 15:27:11.201+08	2018-06-28 15:35:50.502+08	2018-06-25	\N
a6b0f2df-fe24-4c3c-89ec-a1768e94e07c	ACT4238	\N	采集仪	1.0	84b76f77-20bf-48ff-a6a1-f80965b63275	84b76f77-20bf-48ff-a6a1-f80965b63275	f	84b76f77-20bf-48ff-a6a1-f80965b63275	Lua	--require"functions"--公共函数\n--[[\n可用函数包:\nlog:日志\nconvertor:转换\nconn:链接\n全局变量:\nctx:(只读)\ndevice=>{}//设备信息\nprotocol=>{}//协议信息\ninterface=>{}//接口信息\nssend:同步发送数据\nasend:异步发送数据\ndone:完成处理.\nnotify:通知结果\n]]\n--//协议参考文档：Documents/PMO/02产品协议/我司产品协议/通信协议/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("ACT4238 loadscript%s,moduleId=%s","BK_WaterLevel.lua",device.uplink.props.module or "[nil]")\n\t\n\n\tout={\n\t\t\t\ttype=2,\n\t\t\t\tdata={},\n\t\t\t\tresult={}\n\t\t\t\t}\n\tlocal endian='B'\n\tlocal buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props)~='null'then\n\t\tmoduleNo=device.uplink.props.module--模块通道优先接口获取\n\t\t\n\t\tlog.debug("ACT4238设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("ACT4238设备模块通道属性获取m=%s,c=%s接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=iota.appendHexByte(buff,moduleNo,endian)--1:模块号\n\tbuff=buff.."0300000010"--1:指令:采集\n\tbuff=iota.appendHexCrc(buff,endian,0)--2:CRC\n\tok,resp=ctx:ssend(buff,15000)--发送指令\n\tlocal ErrorCode=IsValid(resp)\n\tlocal subdevices=device.dnlinks[1].devices \n\n\tif subdevices ~=nil then\n\t\t\tlocal offsetvalue=7\n\t\t\tlocal Startingvalue=7\n\t\t\tlocal closvalue=12\n\t\t\t\tlog.debug("ACT4238 subdevices 子设备模块通道 接口获取 ,c=%s ",json.encode(subdevices))\n    \t    for index,child in pairs(subdevices) do          --插入8个通道\n\t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\tlog.debug("ACT4238 uplink 子设备模块通道 接口获取 ,c=%s ",channelNo)\n\t\t\t    else\n\t\t\t\t   channelNo=child.props.channelId \n\t\t\t\t   log.debug("ACT4238 子设备模块通道 属性获取,c=%s  ",channelNo)\n\t\t\t    end\n\t\t\t\tif ErrorCode then          \t\n\t\t\t\t\tlog.debug("ACT4238 ---offsetvalue %d",offsetvalue)\n\t\t\t\t\toffsetvalue=(channelNo-1)*5+7\n\t\t\t\t\tStartingvalue=(channelNo-1)*10+7\n\t\t\t\t\tclosvalue=(channelNo-1)*10+12\n\t\t\t\t\tresult=unmarshall(resp,channelNo,offsetvalue,Startingvalue,closvalue)         ---插入数据\n\t\t\t\t\t table.insert(out.data,result)\n\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t     out.result = {code=errcode,msg=errormsg} \n\t\t\t\t\t \n\t\t\t\tend\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t        end\n            \n\n\tend\n\nlocal resultData =json.encode(out)\n log.debug("ACT4238 result=%s",json.encode(out))\nctx:done(resultData)\nend\n\n\n\nunmarshall=function(hex,subChannelId,offset,Startingvalu, closvalue)\nlog.debug("ACT4238 unmarshall offset = %d",offset)\nlocal subData={\n        type=1,\n        data={},\n\t\tdevice="",  \n        result={}\n        }\nlocal ErrorCode=IsValidOut(resp)\n\tif ErrorCode then\n\t\tlog.debug("ACT4238 进入")\n\t\tlocal D0H=string.sub(hex,Startingvalu,closvalue);\n\t\tlog.debug("ACT4238 D0H = %s",D0H)\n\t\tlocal Freque=tonumber(D0H,16);\n\t\tlog.debug("ACT4238 Freque = %s",Freque)\n\t\tlocal Frequenc=Freque/100;\n\t\tlog.debug("ACT4238 Frequenc = %s",Frequenc)\n\t\tlocal bit=offset-1;\n\t\tlocal Symbol=iota.hexToByte(hex,bit,'B');\n\t\tlog.debug("ACT4238 Symbol = %s",Symbol)\n\t\tlocal Temp=iota.hexToByte(hex,offset,'B')/10;\n\t\t\tif Symbol==0x00 then\n\t\t\t\tTemp=Temp\n\t\t\telse\n\t\t\t\tTemp=Temp*(-1);\n\t\t\tend\n\t\tlog.debug("ACT4238 temp = %d",Temp);\n\t\tlog.debug("ACT4238 offsetvalue=%d",offset);\n\t\t\n\t\t\n\t\tlog.debug("ACT4238")\n\t\tchild=getDeviceInfo( subChannelId)\n\t\tlog.debug("ACT4238 child=%s",child)\n\t\tsubData.data={                                     \n\t\t\t\t\t\ttemperature=Temp;\n\t\t\t\t\t\tfrequency=Frequenc\n\t\t\t\t\t\t}\n\t\tsubData.device = \tchild.id\n\t\tlog.debug("ACT4238  subData.device=%s",subData.device)\n\t\tlog.debug("ACT4238 subData.temperature=%s,channel =%s",subData.data.temperature,tostring(subChannelId))\n\t\treturn subData\n\telse\n\t\tout.result = {code=ercode,msg=erormsg} \n\tend\n\nend\n --获取传感器信息\nfunction getDeviceInfo( channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if  tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('ACT4238 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('ACT4238 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\t\n\nIsValid=function(data)\n\tlog.debug('ACT4238开始校验数据')\n\tif iota.hexToByte(data,1,'B')~=0x03 then\n\tlog.debug("ACT4238 iota.hexToByte=%s",iota.hexToByte)\n\t\terrcode=1001\n\t\terrormsg='HexCMDFalse'\n\t\treturn false\n\tend\n\tlog.debug("ACT4238")\n\t\n\tlog.debug('ACT4238数据校验通过')\n\treturn true\n--crc\nend\nIsValidOut=function(data)\n\tlog.debug('ACT4238即将开始校验数据')\n\n\tif iota.hexToShort(data,1,'L')==0x03 then\n\t\tercode=1001\n\t\terormsg='HexCMD  False'\n\t\tlog.debug('ACT4238 HexCMDFalse')\n\t\treturn false\n\tend\n    if iota.hexToShort(data,2,'L')==0x28 then\n\t\n\t\tercode=1001\n\t\terormsg='ACT4238  False'\n\t\treturn false\n\tend\n\t\n\n\t\treturn true\n--crc\nend\n	INLINE	2019-04-17 11:25:31.027+08	2019-04-19 11:10:04.322+08	2019-04-17	\N
00689b92-6403-4fae-977d-1b9c1436f133	shangheng_pressure_1	\N	上海尚衡电子有限公司	1.0	5355fb27-5945-43ae-bc43-697b572a7363	5355fb27-5945-43ae-bc43-697b572a7363	f	5355fb27-5945-43ae-bc43-697b572a7363	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=%s", "shangheng_pressure_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x02, endian) \n    buff=iota.appendHexByte(buff, 0x52, endian) \n    buff=iota.appendHexByte(buff, 0x44, endian) \n    buff=iota.appendHexByte(buff, 0x53, endian) \n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  \n    buff=iota.appendHexByte(buff, checkPlusSum(buff,1,4), endian)  \n    buff=iota.appendHexByte(buff, 0x0D, endian)                    \n\n    -- 02524453412a0d \n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "shangheng_pressure_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "shangheng_pressure_1.lua",hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==22) then\n        \n        --024144323c35323038720d \n\n\n        --print("parsing data", hex)\n        --log.debug("shangheng_pressure_1:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n        local sData=string.reverse(string.sub(hex,8,8)..string.sub(hex,10,10)..string.sub(hex,12,12)..string.sub(hex,14,14)..string.sub(hex,16,16))\n        local pressure= tonumber(sData,16)\n        out.data = {\n            pressure=pressure\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n    sum = bit:_and(sum ,0xff)\n    return sum\nend \n \n\n\n\n	INLINE	2018-02-06 11:22:17.242+08	2018-03-06 16:51:44.617+08	2018-02-06	\N
b3254088-2d5a-4bbf-a470-a560aa50cbaf	噪声9603	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	-- 测试数据:\n-- 80018402000600290207e1081c130100010000001d00001e500001150000008608004294c5a842629be4427e04c000d28c3a76\nstart=function()\n    log.debug("LUA:start ")\nend\n\n-- 收到数据\nonData=function(data)\n    --print("LUA:onData",data) \n    local len=string.len(data)\n    local r=nil\n    if len == 102 then\n        r=parseNoise(data)\n    elseif len==50 then\n        r=parseWakeup(data)\n    else\n        r={node = string.sub(data,1,4)}\n    end\n    result={}\n    result.data = r\n    result.type=1\n    local msg = json.encode(result)\n    log.debug("result:%s",msg)\n    ctx:notify(msg)\nend\n\nparseNoise=function(data)\n    -- 51长度: 头 25, 数据24, 尾2\n    local node = string.sub(data,1,4)\n    local Lmax = iota.hexToFloat(data,25+9,'B');\n    local Lmin = iota.hexToFloat(data,25+13,'B');\n    local Laeq = iota.hexToFloat(data,25+17,'B');\n    return {node=node, lmax=Lmax,lmin=Lmin,laeq=Laeq}\nend\n\nparseWakeup=function(data)\n    local node = string.sub(data,1,4)\n    local power = iota.hexToByte(data,10,'B');\n    local join  = iota.hexToShort(data,17,'B');\n    return {node=node,power=power,join=join}\nend\n\n\n	INLINE	2018-06-06 18:04:24.992+08	2018-06-06 18:04:24.992+08	2018-06-06	\N
9c6b590a-31c6-4532-9232-3c921c1d7f35	mas_inciton_10001	\N	工讯倾角仪	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "mas_10001", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("mas_10001 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mas_10001 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("mas_10001 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--010308000c6202100c62020000\n--moduleId=1    \n--"anglex": 12.985,\n--"angley": -12.985\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\n\t\tlocal signx=tonumber(string.sub(hex,7,7),16)\n\t\tlocal anglex_1=tonumber(string.sub(hex,8,8),16)\n\t\tlocal anglex_2=tonumber(string.sub(hex,9,9),16)\n\t\tlocal anglex_3=tonumber(string.sub(hex,10,10),16)\n\t\tlocal anglex_4=tonumber(string.sub(hex,11,11),16)\n\t\tlocal anglex_5=tonumber(string.sub(hex,12,12),16)\n\t\tlocal anglex_6=tonumber(string.sub(hex,13,13),16)\n\t\tlocal anglex_7=tonumber(string.sub(hex,14,14),16)\n\t\n        local anglex = (-1)^signx*(anglex_1*100+anglex_2*16+anglex_3+(anglex_4*16+anglex_5)/100+(anglex_6*16+anglex_7)/1000)\n\t\t\n        local signy=tonumber(string.sub(hex,15,15),16)\n\t\tlocal angley_1=tonumber(string.sub(hex,16,16),16)\n\t\tlocal angley_2=tonumber(string.sub(hex,17,17),16)\n\t\tlocal angley_3=tonumber(string.sub(hex,18,18),16)\n\t\tlocal angley_4=tonumber(string.sub(hex,19,19),16)\n\t\tlocal angley_5=tonumber(string.sub(hex,20,20),16)\n\t\tlocal angley_6=tonumber(string.sub(hex,21,21),16)\n\t\tlocal angley_7=tonumber(string.sub(hex,22,22),16)\n\t\n        local angley = (-1)^signy*(angley_1*100+angley_2*16+angley_3+(angley_4*16+angley_5)/100+(angley_6*16+angley_7)/1000)\n        \n\t\t\t\t\t\n\t\t\n\t\t\n        out.data = {\n\t\t\tanglex=anglex,\n\t\t\tangley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('mas_10001 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('mas_10001 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-04-12 16:52:27.109+08	2018-04-12 16:52:44.743+08	2018-04-12	\N
3d202a7e-d9d9-4874-b746-d1150992381c	ew	\N	1212	wewe	013f2f9f-cadd-457b-a86e-ee52e5937acc	013f2f9f-cadd-457b-a86e-ee52e5937acc	f	013f2f9f-cadd-457b-a86e-ee52e5937acc	Lua	rfsfsfsfs	INLINE	2018-01-24 16:58:13.359+08	2018-01-24 16:58:13.359+08	2018-01-24	\N
bb65a921-da11-46bf-a625-cbeb6afd0edf	shjy_DAS_BK-ZC01	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('shjy_DAS_BK-ZC01   device=%s', json.encode(device))\n    local buff = ''\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '0300000006'\n    buff = iota.appendHexCrc(buff, 'L', 0)\n\n    local result = '{}'\n    --第一次发送\n    ok1, resp1 = ctx:ssend(buff, 5000)\n\n    if ok1 then\n       -- local ErrorCode1 = IsValid(resp1, moduleNo)\n        if ErrorCode1 then\n            result = unmarshall(resp, moduleNo)\n        else\n            -- statements\n            --第二次下发\n            ctx:sleep(5)\n            ok2, resp2 = ctx:ssend(buff, 15000)\n\n            if ok2 then\n                result = unmarshall(resp2, moduleNo)\n            else\n                --\n                local errout = {\n                    data = {},\n                    result = {},\n                    type = 2\n                }\n                errout.result = {code = 1001, msg = '超时'}\n                result = json.encode(errout)\n            end\n        end\n    end\n\n    log.debug('shjy_DAS_BK-ZC01 m=%s,result=%s', moduleNo, result)\n    ctx:done(result)\nend\n--140300000006c70d\n--14030c851d45185864451879b745168a4a\n\nunmarshall = function(hex, moduleNoStr)\n    log.debug('shjy_DAS_BK-ZC01 m=%s, recv =%s', moduleNoStr, hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        for i = 1, 3, 1 do\n            --local subDataHex_ = string.sub(hex, 7 + (i-1) * 8, 7 + (i-1) * 8+7)\n            local subDataHex_H = string.sub(hex, 7 + (i - 1) * 8, 7 + (i - 1) * 8 + 3)\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex_H =%s', subDataHex_H)\n            local subDataHex_L = string.sub(hex, 7 + (i - 1) * 8 + 4, 7 + (i - 1) * 8 + 7)\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex_L =%s', subDataHex_L)\n            subDataHex = subDataHex_L .. subDataHex_H\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 subDataHex =%s', subDataHex)\n            local freq = iota.hexToFloat(subDataHex, 0, 'B')\n\t\t\tlog.debug('shjy_DAS_BK-ZC01 freq =%s', freq)\n\t\t\t if  freq>500 then\n            local childDevice = getDeviceInfo(moduleNoStr, i)\n            --\n            local deviceId\n            if childDevice ~= nil then\n                deviceId = childDevice.id\n\n                if childDevice.uplink.capabilities[1].formula.metaid == 'd157f3b3-41c1-4e8b-8141-76c56d56b8ed' then --振弦公式 不带温度 metaid\n                    local k = childDevice.uplink.capabilities[1].formula.props.K\n                    local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\n                    log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s：公式参数=%s,%s', moduleNoStr, i, K, Fo)\n                    if k == nil or f0 == nil then\n                        Phy = nil\n                        log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s：公式参数无效=%s,%s', moduleNoStr, i, K, Fo)\n                    else\n                        Phy = k * (freq ^ 2 - f0 ^ 2)\n                        log.debug('shjy_DAS_BK-ZC01=%s,通道号=%s Phy=%s,freq=%s', moduleNoStr, i, Phy, freq)\n                    end\n                end\n\n                local data1 = {\n                    data = {\n                        rawValue = tonumber(string.format('%5.3f', freq)),\n                        physicalvalue = tonumber(string.format('%5.3f', Phy))\n                    },\n                    device = deviceId,\n                    type = 1\n                }\n\t\t\n\t\t\t\t\n\t\t\t\t\n                table.insert(out.data, data1)\n            else\n                log.debug('shjy_DAS_BK-ZC01(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n            end\n\t\t end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n   -- if data == nil or string.len(data) / 2 ~= 17 then\n    --    errormsg = string.format('无效的数据长度=%s≠17', string.len(data) / 2)\n   --     errcode = 1002\n   --     return false\n   -- end\n\n    local cmd = string.sub(data, 3, 4)\n    if cmd ~= '03' then\n        errormsg = string.format('无效的数据类型=%s≠03', cmd)\n        errcode = 1003\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 0, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("shjy_DAS_BK-ZC01 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n            local channelStrCheck = child.uplink.props.channel\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n                log.debug('shjy_DAS_BK-ZC01  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('shjy_DAS_BK-ZC01  m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\n	INLINE	2019-08-26 10:59:47.473+08	2019-12-19 08:52:02.46+08	2019-08-26	\N
a38f68fe-fc29-40f0-abf2-d3b10a127d9b	cy_inclination_1	\N	测斜	1.0	af8080e1-5282-4133-81ad-97ba568cf313	af8080e1-5282-4133-81ad-97ba568cf313	f	af8080e1-5282-4133-81ad-97ba568cf313	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n    log.debug("cy_inclination_1 module=%s",json.encode(device.uplink.props.module))\n    local endian = 'B'\n    local buff=''         \n    local errout={\n        data ={},\n        result = {}\n    }\n        buff=iota.appendHexByte(buff, 0xAA, endian)\n        buff=iota.appendHexByte(buff, 0x08, endian)\n        buff=iota.appendHexByte(buff, device.uplink.props.module, endian)          \n        buff=iota.appendHexByte(buff, 0x03, endian)                     \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)                     \n        buff=iota.appendHexByte(buff, 0xBB, endian)                     \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n            print(string.format("cy_inclination_1:out=%s,data=%s",resp, result))\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\nend\n\nunmarshall=function(hex)\n\n    local out={\n        data ={},\n        result = {}\n    }\n  \n    local xDegree\n    local yDegree\n    local temperature \n    --01820C0012124501035512002859E4   --moduleId=1\n    --"anglex": 26.097594039948262,\n\t--"angley": 12.1245,\n\t--"temperature": -3.5512\n    if string.len(hex)/2 == 17 then\n        local xsign=string.sub(hex,9,10)\n        if xsign=="00" then\n            xDegree=tonumber(string.sub(hex,11,16))/10000\n        else\n            xDegree=tonumber(string.sub(hex,11,16))/10000*-1\n        end\n\n        local ysign=string.sub(hex,17,18)\n        if ysign=="00" then\n            yDegree=tonumber(string.sub(hex,19,24))/10000\n        else\n            yDegree=tonumber(string.sub(hex,19,24))/10000*-1\n        end\n\n        local tsign=string.sub(hex,25,26)\n        if tsign=="00" then\n            temperature=tonumber(string.sub(hex,27,32))/10000\n        else\n            temperature=tonumber(string.sub(hex,27,32))/10000*-1\n        end\n        out.data = {                \n            anglex = xDegree,\n            angley = yDegree,\n            temperature = temperature\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\n	INLINE	2018-04-24 14:38:10.312+08	2018-04-24 14:52:23.376+08	2018-04-24	\N
d6c7bf35-62db-4a57-9a6f-d50ab8f37ccd	v	\N		v1.02	cb3f6958-fdbf-441d-8009-1fb1ecc61589	cb3f6958-fdbf-441d-8009-1fb1ecc61589	f	cb3f6958-fdbf-441d-8009-1fb1ecc61589	Lua	gfddss	INLINE	2018-04-24 15:23:50.037+08	2018-04-24 15:23:50.037+08	2018-04-24	\N
5be4b8c2-7201-4565-be1d-2af8209fc3e4	testOnData	\N		1.0	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	f	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	Lua	onData=function(hex)\n    log.debug("lucastest 收到数据=%s", hex)\n local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n  log.debug("lucastest bit.bor(1,2)=%s",bit.bor(1,2))\n  out.data = {           \n            str=hex        \n        };\n  local resultData =json.encode(out)\n  ctx:notify(resultData)\nend	INLINE	2018-07-10 11:54:51.577+08	2018-08-22 15:40:53.45+08	2018-07-10	\N
d0816bbb-7afc-4139-a930-ba8f5267c76c	gdjw_JLSZ_7000	\N		1.0	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f	dade7e83-25b6-4932-993c-6d886fec9843	Lua	start=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gdjw_JLSZ_7000 设备模块 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("gdjw_JLSZ_7000,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集 超时'}      \n\t  log.debug("gdjw_JLSZ_7000  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01030016000225cf\n--010304be40e61215a2    == -0.188378\nunmarshall=function(hex,moduleNoStr)\n    log.debug("gdjw_JLSZ_7000 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToFloat(hex,3,'B')\n    \n        out.data = {           \n            length=tonumber(string.format('%0.3f',length))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("gdjw_JLSZ_7000 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = string.format('返回数据长度无效=%s≠9',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataMoudle=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n        errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2019-01-19 14:32:55.18+08	2019-01-19 15:39:44.968+08	2019-01-19	\N
1449480d-e748-4693-8f2a-1806b6b5b930	cy_temp_c1162	\N	长英采集仪版本	1.0	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	f	5f62fd39-0b72-492e-99be-308c935c1b64	Lua	--//04 项目资料/2017-05/武汉大桥局青山桥/LTM8000用户手册_fin_4.doc\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift\n\nstart=function()\n\tlog.debug("start load  cy_temp_C1162 moudle = %s ",device.uplink.props.module)\n    --log.debug("cy_temp_C1162 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tif isModuleIdInvalid(moduleNo) then\n\t\terrout.result = {code = 1004, msg = 'Invalid moduleId,moduleIdLength ~=6'}\n\t\tctx:done(json.encode(errout))\n\telse\n\t\t\n\t\t\n\t\tstrCardNo=string.sub(moduleNo,2,3)\n\t\tlog.debug("cy_temp_C1162 strCardNo是"..strCardNo)\n\t\tstrModuleNo=string.sub(moduleNo,5,6)  \n\t\tbuff=iota.appendHexByte(buff, 0x23, endian) \n\t\tbuff=buff..toHexStr(string.sub(strCardNo,1,1))\n\t\tbuff=buff..toHexStr(string.sub(strCardNo,2,2))\n\t\tbuff=buff..toHexStr(string.sub(strModuleNo,2,2)) \t\t\n\t\tbuff=iota.appendHexByte(buff, 0x0d, endian)                         \n\n\t\tSleep(3)\n\t\tok,resp=ctx:ssend(buff,15000)\n\t\tlocal resDataList='{}'\n\t\tif ok then  \n\t\t\tresDataList = unmarshall(resp,moduleNo)--解析单条数据\n\t\t\t\n\t\t\tlog.debug("cy_temp_C1162 子设备模块通道 接口获取 m=%s, json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\t\tif subdevices ~=nil then\n\t\t\t\tfor index,child in pairs(subdevices) do      \t\t\n\t\t\t\t\tlocal channelNo=child.uplink.props.channel\t\n\t\t\t\t\tlocal deviceId=child.id\n\t\t\t\t\tlog.debug("cy_temp_C1162 module=%s,channel=%s id=%s.",moduleNo,channelNo,deviceId)\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature=resDataList[channelNo+0]--//取对应的传感器值 默认插入表下标1开始\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\n\t\t\t\tend \n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\telse\n\t\t\t\tlog.debug("cy_temp_C1162:".."subdevices是nil")\n\t\t\t\treturn nil\n\t\t\tend\n\t\telse\n\t\t\tlog.debug("cy_temp_C1162 module=%s  not ok ",moduleNo)    \n\t\tend\n\t\t\t\t\n\t\t\n\tend\n\tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend\n\n\n--3e30310003eb010510d3010d10c70109100d82\n--moduleId=K01C01\n--channelId=3\n--"temperature":28.4375,\nunmarshall=function(hex,moduleNoStr)\n\n\tlocal data=hex;\n\tlog.debug("cy_temp_C1162 m=%s  data=%s string.len(data)/2-2-1=%s",moduleNoStr,data,string.len(data)/2-2-1)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        \n\t\t--存储每个通道下的返回的多个传感器数据\n\t    resDataList = {}\n\t\t\n\t\tfor i=5,string.len(data)/2-2-1,4 do\n           -- log.debug("i="..i)\n            local tempBytes={}\n\t\t\ttempBytes[0]=string.sub(data,i*2+1,i*2+2)\n\t\t\ttempBytes[1]=string.sub(data,i*2+3,i*2+4)\n            if tempBytes[0]=="ff" and tempBytes[1]=="ff" then\n\t\t\t\tout.result = {code=1001,msg="data is invalid"}\n\t\t\t    return json.encode(out)\n\t\t\tend\n            --log.debug("cy_temp_C1162 tempBytes[0]="..tempBytes[0])\n            --log.debug("cy_temp_C1162 tempBytes[1]="..tempBytes[1])\n            --log.debug("cy_temp_C1162 tempBytes[1]类型"..type(tempBytes[1]))\n              \n             --温度为 +\n           -- log.debug("bit:_rshift(tonumber(tempBytes[1]),3)是"..bit:_rshift(tonumber(tempBytes[1]),3))\n\t\t\t\tif bit:_and(0xFF,bit:_rshift(tonumber(tempBytes[1],16),3))==0x00 then\n\t\t\t\t   local tempBytes1=tonumber("21",16);\n\t\t\t\t --  log.debug('cy_temp_C1162 tempBytes1是'..tempBytes1)\n\t\t\t\t   local temp=(bit:_and(tonumber(tempBytes[1],16),0x07)*256+tonumber(tempBytes[0],16))*0.0625;\n\t\t\t\t--   log.debug("cy_temp_C1162 temp+是"..temp)\n\t\t\t\t   table.insert(resDataList,temp)\n\t\t\t   else\n                 ----//温度为 -\n\t\t\t\t\tlocal temporary=tonumber(tempBytes[1],16)\n\t\t\t\t\tlog.debug("温度为 -  tempByte[1]=%s ",tostring(temporary))\n\t\t\t\t   if bit:_and(0xFF,bit:_rshift(tonumber(temporary,16),3))==0x1f then\n\t\t\t\t\t  local temp=-1*((256 - temporary)*256-temporary)*0.0625;\n\t\t\t\t\t  table.insert(resDataList,temp)\n\t\t\t\t   --   log.debug("cy_temp_C1162 temp-是"..temp)\n\t\t\t\t   end\n\t\t\t\tend  \n        end \n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return resDataList  --返回数据表\nend\n\n\n--判断模块号格式\nisModuleIdInvalid=function(strModuleId)\n  if string.len(strModuleId) ==6 then\n      if string.sub(strModuleId,1,1)=='K' then\n\t      if string.sub(strModuleId,4,4)=='C' then\n\t\t      --模块号格式K01C01\n\t\t      local n = tonumber(string.sub(strModuleId,2,3)..string.sub(strModuleId,5,6));\n\t\t\t  if n then\n\t\t\t     return false;\n\t\t\t  end   \n\t\t   end\t  \n\t  end\t\n   end\n    return true\nend\n\nIsValid=function(data,moduleId,channelId)\n        local countId=iota.hexToShort(data,3,'B');\n\tif string.len(data)/2 ~=countId*4+5+2 or string.len(data)/2 <=7 then\n\t  errormsg = 'data length is wrong'\n        errcode = 1001\n        return false\n    end\n\t\n    if string.sub(data,1,2) ~= '3e' or string.sub(data,-4,-3) ~= '0d' then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n\n    return true\nend\n\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串ascii->字符16D\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n\nSleep=function(n)\n   local t0 = os.clock()\n   while os.clock() - t0 <= n do end\nend	INLINE	2018-06-05 13:22:33.789+08	2018-06-05 15:15:52.597+08	2018-06-05	\N
08a07e96-2fdb-40b9-aa08-b106bc3092c4	yx-log	\N		1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	start = function()\n\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop_log = {\n        M = "c_shell",\n        P = {} -- Get Log\n    }\n\tmop_log.P.C = "rm -f /media/mmcblk0p1/data" --"cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"--"rm -f /home/idau/data/dac/log.txt"\n\t\n\n    req.payload = json.encode(mop_log)\n    log.debug("yx_idau_log:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("fs_idau_log:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n	INLINE	2019-12-27 15:00:56.834+08	2019-12-27 15:00:56.834+08	2019-12-27	\N
35d39ff1-9f65-4305-b738-33e7b4adfcb6	test	\N	1	1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	-- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function()\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)                --2: 0015 协议类型=21\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                -- 1: 01   指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,3000)\n    local result = unmarshall(ok,resp)\n    log.debug("result=%s",result)\n    ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (ok and string.len(hex) >=23 ) then\n        --   2   2   1      4     4       2\n        -- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n    \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        if (temp>45) then\n          -- invalid data\n          out.data={\n          }\n          out.result={\n            code=1002,\n            msg="over range"\n          }\n        else\n          out.data = {\n            x=xa,\n            y = ya,\n      \t\ttemp = temp,\n          }\n        end\n    else\n    \tlocal msg\n        if ok then\n           msg= 'Invalid Msg, len='..string.len(hex)\n        else \n           msg="Timeout" \n        end\n        out.result = {code=1001,msg=msg}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2018-04-25 17:21:46.401+08	2018-04-25 17:21:46.401+08	2018-04-25	\N
b2f54327-7b39-41e7-b7b2-4ba258e6cf00	sonbest_wind_1	\N	搜博	1.0	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	f	76ba35a6-d733-40eb-b290-6538f9e9c77f	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sonbest_wind_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \n  \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n    buff=iota.appendHexByte(buff, moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    -- 01 03 00 00 00 01 84 0A \n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "sonbest_wind_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        \n        -- 010302018CB871\n        --"level": 3.96\n        local windSpeed =iota.hexToShort(hex,3,'B')/100;\n    \n        out.data = {\n           \n            windSpeed=windSpeed,\n         \n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-30 17:09:14.434+08	2018-03-29 16:42:30.486+08	2018-01-30	\N
35f2a891-7956-4b9f-b57d-4e4c5c08b286	tjxk_yibiao_9800	\N		1.0	30733da7-f918-41cd-85ed-8b5b0b55b0e6	30733da7-f918-41cd-85ed-8b5b0b55b0e6	f	30733da7-f918-41cd-85ed-8b5b0b55b0e6	Lua	--E:\\SVN\\201807项目\\2 北京昆仑海岸LNG监测项目--康飞\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "tjxk_yibiao_9800", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module\t\t\n\t\tlog.debug("tjxk_yibiao_9800 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\tmoduleNo=string.format("%02d", moduleNo)\n\t\tlocal asciimoduleNo=strToHex(moduleNo)\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian) \n        buff=buff..asciimoduleNo -- 模块号      \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("tjxk_yibiao_9800 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--5b31323331323334353637383930313233343536373831323334353631323334353631323334353631323334355d00005e\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\n        local allAscii=HexToStr(string.sub(hex,1,-7))\n\t\tlog.debug("tjxk_yibiao_9800  allAscii=%s",allAscii)\n        local standValue_Sum=string.sub(allAscii,5,14)\n\t\tlocal standValue_Instant=string.sub(allAscii,15,22)\n\t\tlocal pressure=string.sub(allAscii,23,28)\n        local workValue_Sum=string.sub(allAscii,29,34)\n\t\tlocal workValue_Instant=string.sub(allAscii,35,40)\n\t\tlocal temperature=string.sub(allAscii,41,45)\n\t\tlog.debug("tjxk_yibiao_9800 value 1-6=%s,%s,%s,%s,%s,%s",standValue_Sum,standValue_Instant,pressure,workValue_Sum,workValue_Instant,temperature)\n        out.data = {\n\t\t\tstandValue_Sum=tonumber(standValue_Sum),\t\t\t\n\t\t\tstandValue_Instant=tonumber(standValue_Instant)/100,\n\t\t\tpressure=tonumber(pressure)/10,\n\t\t\tworkValue_Sum=tonumber(workValue_Sum),\n\t\t\tworkValue_Instant=tonumber(workValue_Instant)/100,\n\t\t\ttemperature=tonumber(temperature)/10\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('tjxk_yibiao_9800 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 49 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x5b then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n\tlocal rec_module=HexToStr(string.sub(data,3,6))\n    if moduleStrCheck~= rec_module then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('tjxk_yibiao_9800 数据校验通过')\n    return true\n--crc\nend\n\n  -- 字符串 -> BCD\nstrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\n  end\n  \n--hex->ascii\nHexToStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\t\n   \n	INLINE	2018-07-10 16:26:13.646+08	2018-07-11 09:52:52.775+08	2018-07-10	\N
f46d22a0-54b2-47dc-8b98-6c3de609557a	hzyz_mass_5302	\N		1.0	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	f	b1797f0b-c735-409e-89f5-ab695859f076	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "hzyz_mass_5302.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module   --模块 通道 优先接口获取\t\t\n\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n    buff=iota.appendHexByte(buff, 0x27, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("hzyz_mass_5302,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("hzyz_mass_5302  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01030400004E200000\n--\nunmarshall=function(hex,moduleNoStr)\n    log.debug("hzyz_mass_5302 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local mass =iota.hexToUInt(hex,3,'B')\n        out.data = {           \n            mass=mass\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("hzyz_mass_5302 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    local dataLen=string.len(data)/2\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = string.format('无效的数据长度=%s,≠9',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    local datamodule=tostring(iota.hexToByte(data,0,'B'))\n    if moduleCheck~=datamodule  then\t\n        errormsg = string.format('无效的模块号=%s[%s]',datamodule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-12-10 09:59:17.548+08	2018-12-10 16:26:36.418+08	2018-12-10	\N
317a91ad-ae05-4ce3-9b76-916a9e3103b6	二二	\N		二二	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	f	475d6577-d638-4b9c-a4de-35f6ddd51240	Lua	二	INLINE	2018-01-25 10:34:27.073+08	2018-01-25 14:27:49.31+08	2018-01-25	\N
cc8a4434-b6c9-4c38-a813-90111a3625f7	mk_temp_1	\N	温度	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_temp_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01030503EB752B\n--"temp": 100.3\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_temp_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x05 and moduleNo==modulenumber  then\n            \n            local Temp = iota.hexToShort(hex,4,'B') / 10.0\n            out.data = {               \n                temp=Temp\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_temp_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_temp_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:33:30.147+08	2018-02-28 18:32:12.224+08	2018-01-08	\N
1285ee16-87aa-464e-9656-872ede3b16a1	jnrs_temphumi_1	\N	基泰马甲版	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module or device.props.moduleId\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexByte(buff, moduleNo, endian)\n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1  SSend error")\n    end\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        \n        -- 0103040292ff9b5a3d\n        --"humi": 65.8,\n\t\t--"temp": -10.1\n        local humi =iota.hexToShort(hex,3,'B')/10;\n        local temp =iota.hexToShort(hex,5,'B')/10;\n      \n        out.data = {  \n            temperature=temp,\n            humidity=humi\n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-03-20 17:27:25.594+08	2018-03-27 09:27:36.747+08	2018-03-20	\N
67b012f5-78e5-44d1-a465-db543bdc1c00	szjh_flow_9600	\N		1.0	762b9963-18af-4789-afed-88df57b2a556	762b9963-18af-4789-afed-88df57b2a556	f	762b9963-18af-4789-afed-88df57b2a556	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "szjh_flow_9600.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x011, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("szjh_flow_9600,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("szjh_flow_9600  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("szjh_flow_9600 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local hex_flow_sec=string.sub(hex,2*5+1,2*5+4)..string.sub(hex,2*3+1,2*3+4)\n\t\tlocal hex_flow_min=string.sub(hex,2*9+1,2*9+4)..string.sub(hex,2*7+1,2*7+4)\n\t\tlocal hex_flow_hour=string.sub(hex,2*13+1,2*13+4)..string.sub(hex,2*11+1,2*11+4)\n\t\tlocal hex_flow_speed=string.sub(hex,2*17+1,2*17+4)..string.sub(hex,2*15+1,2*15+4)\n\t\tlocal hex_flow_total=string.sub(hex,2*21+1,2*21+4)..string.sub(hex,2*19+1,2*19+4)\n\t\tlocal hex_flow_total_index=string.sub(hex,2*23+1,2*23+4)\n\t\t\n\t\tlog.debug("szjh_flow_9600 数据=%s,%s,%s",hex_flow_sec,hex_flow_min,hex_flow_hour)\n        local flow_sec =iota.hexToFloat(hex_flow_sec,0,'B')\n\t\tlocal flow_min =iota.hexToFloat(hex_flow_min,0,'B')\n\t\tlocal flow_hour =iota.hexToFloat(hex_flow_hour,0,'B')\n\t\tlocal flow_speed =iota.hexToFloat(hex_flow_speed,0,'B')\n\t\tlocal flow_total =iota.hexToUint(hex_flow_total,0,'B')\n\t\tlocal flow_total_index =iota.hexToUShort(hex_flow_total_index,0,'B')\n      \n        out.data = {           \n            --flow_sec=flow_sec,\n\t\t\t--flow_min=flow_min,\n\t\t\tflow_hour=flow_hour,\n\t\t\tflow_speed=flow_speed,\n\t\t\tflow_total=flow_total^flow_total_index\n\t\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("szjh_flow_9600 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 27 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n\tlog.debug("szjh_flow_9600 m=%s,校验通过",moduleNoStr)\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-08-13 10:55:12.724+08	2018-08-13 16:26:35.702+08	2018-08-13	\N
1fd5bb36-282f-48f4-bddf-3e3b780b76c3	sonbest_smoke_1	\N	上海搜博实业有限公司	1.0	76ba35a6-d733-40eb-b290-6538f9e9c77f	76ba35a6-d733-40eb-b290-6538f9e9c77f	f	76ba35a6-d733-40eb-b290-6538f9e9c77f	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sonbest_smoke_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    --：：010300000001 \n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "sonbest_smoke_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sonbest_smoke_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        \n        --01030203750000 \n        --"smoke": 5000\n        local smoke =iota.hexToShort(hex,3,'B');\n    \n        out.data = {\n           \n            smoke=smoke,\n         \n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-30 17:04:18.82+08	2018-03-29 16:44:47.777+08	2018-01-30	\N
540f8993-f761-48dc-9c69-00851a16a2ac	shxb_laser_9556	\N		1.0	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	f	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	Lua	--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shxb_laser_9555", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shxb_laser_9555 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x94, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shxb_laser_9555 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18    \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length = iota.hexToUInt(hex,3,'B')/10.0  --高精度\n        \n       \n        out.data = {\n\t\t\tlength=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shxb_laser_9555 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n\tif iota.hexToUInt(data,3,'B') == 0xffffffff then\n        errcode = 1001\n        errormsg = '采样错误' \n        return false\n    end\n\t\n    log.debug('shxb_laser_9555 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-06-07 15:48:37.538+08	2018-12-20 09:24:02.333+08	2018-06-07	\N
028a903a-d5b8-41a5-b42f-dc0a963cc74f	test	\N		13131	cc8dde53-d482-45d2-8216-78628899396a	cc8dde53-d482-45d2-8216-78628899396a	f	cc8dde53-d482-45d2-8216-78628899396a	Lua	1321313123	INLINE	2018-02-08 17:17:34.275+08	2018-03-01 10:03:58.59+08	2018-02-08	\N
82cb0db7-6181-419c-8c52-a6b5e01e6c49	cd_flowMeter_2312	\N	承德热河克罗尼仪表流量计	1.0	5343c9e2-a32e-4c69-97bb-6e526464cb93	5343c9e2-a32e-4c69-97bb-6e526464cb93	f	5343c9e2-a32e-4c69-97bb-6e526464cb93	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nstart=function()\n    log.debug("start %s, ctx=", "cd_flowMeter_2312.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xD5, endian)\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)             -- 2: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)              -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x44, endian)              -- 1: 通道号\n    buff=iota.appendHexByte(buff, 0x50, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x16, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)       \n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result={}\n    if ok then\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n  --d501032c100c1b0b300a008042a0000042ca00004241c86c442798df000000c73f142c444406ff2e3f7f20953f7f8af06aae\n  --"cumulant": 199.5788,\n  --"flow": 670.388611,\n  --"pressure": 101,\n  --"temp": 80\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if iota.hexToByte(hex,1,'B')  ~= tonumber(device.props.moduleId) then \n        errcode = 1001\n        errormsg = 'Hex moudleId is False' \n        return json.encode(out)\n    end\n    if ErrorCode then\n        local Flow = iota.hexToFloat(hex,24,'B')\n        local Cumulant = iota.hexToFloat(hex,32,'B')\n    \t\n        Cumulant = Cumulant + bit:_or(bit:_or(bit:_or(bit:_lshift(iota.hexToByte(hex,28,'B'),24),bit:_lshift(iota.hexToByte(hex,29,'B'),16)),bit:_lshift(iota.hexToByte(hex,30,'B'),8)),iota.hexToByte(hex,31,'B'))\n        local Temp = iota.hexToFloat(hex,12,'B')\n        local Pressure = iota.hexToFloat(hex,16,'B')\n        out.data = {\n            flow=Flow,\n            temp = Temp,\n            cumulant = Cumulant,\n            pressure = Pressure\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 50 then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,2,'B')  ~= 0x03 then \n        errcode = 1001\n        errormsg = 'Hex CMDType False' \n        return false\n    end\n    return true\n--crc\nend\n\n	INLINE	2017-08-26 15:38:00.113+08	2018-02-28 18:32:12.193+08	2017-08-26	\N
6961f5ca-3d77-4944-921f-d4bf6d757bce	fs_tempHum_1101	\N	温湿度采集协议 统一协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n  log.debug("fs_1101:load script %s, moduleId=%s", "fs_1101", device.moduleId or "[nil]")\n  \n  \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_1101 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_1101 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,4000)\n\tlog.debug("fs_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_1101:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 2 设备类型，温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE);  -- 2: 3/4 模块号\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 7 指令\n\tfor i = 8,30 do                                 -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n  \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc          -- 1: 31 CRC8  加总异或，2-30\n  --log.debug('fs_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF);             -- 1: 32 结尾\n\t--log.debug("fs_1101:start %s, ctx=%s ", "fs_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n        log.debug("fs_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n    log.debug("fs_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n    log.debug("fs_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum\n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('fs_1101:开始校验数据%s',data)\n    local startbyte = iota.hexToByte(data,0,'B');\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n  \tlocal endbyte = iota.hexToByte(data,31,'B');\n    if data == nil or string.len(data)/2 ~= 32 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte  ~= 0xDF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1101:数据校验通过')\n    return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n    local CRC8Table ={\n            0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n            157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n            35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n            190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n            70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n            219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n            101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n            248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n            140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n            17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n            175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n            50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n            202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n            87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n            233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n            116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n        }\n    local c = 0\n    for  i = start, string.len(val)/2 do\n        local b = iota.hexToByte(val,i-1,'B')\n        local index = bit:_xor(c,b)\n        c = CRC8Table[index+1];\n    end\n    local crc8 = string.format("%X",c)\n    return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n\n	INLINE	2017-08-28 21:10:05.448+08	2020-04-28 10:49:51.179+08	2017-08-22	\N
37d61bde-62f1-4c1e-97f9-8546cba82d2d	fs_645_1997	\N	国网电表水表协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS   +16H           CS=（68a0a1a2a3a4a56801021090的累加和）\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n    log.debug("start %s, ctx=%s", "fs_ammeter.lua",json.encode(ctx.device))\n\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n    if string.len(moduleNo)<12 then\n       local lenadd=12-string.len(moduleNo)\n       for i=1,lenadd do\n           moduleNo='0'..string.lower(moduleNo)\n       end\n    end\n    --调换模块号字节序\n    local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_ammeter 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n    log.debug("fs_ammeter,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("fs_ammeter  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--module=000027034408\n--FEFE6808440327000068810643C34C333333B816    =》0.19   \nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_ammeter m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local hexBCD=string.sub(hex,-6,-5)..string.sub(hex,-8,-7)..string.sub(hex,-10,-9)..string.sub(hex,-12,-11)\n        log.debug("fs_ammeter  m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n        local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n        log.debug("fs_ammeter initialvalue=%s",initialvalue)\n        local phy=totalenergy-initialvalue\n        log.debug("fs_ammeter  m=%s,totalenergy=%s ",moduleNoStr,totalenergy)\n        out.data = {           \n\t\t\treadingNumber=phy\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_ammeter m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    local data=string.gsub(data,'fefe','')\n    log.debug("fs_ammeter 校验 data=%s",data)\n    if data == nil or string.len(data)/2 ~= 18 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n    if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n        errormsg = 'Invalid acq heade or tail'\n        errcode = 1004\n        return false\n    end\n\t\n    local moduleCheckStr=string.sub(data,3,3+11)\n    moduleCheckStr=exchangeHtoL(moduleCheckStr)\n    if tostring(moduleCheck) ~= moduleCheckStr then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleCheckStr,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    log.debug("fs_ammeter 校验通过 m=%s,data=%s",moduleCheck,data)\n    return true\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n    log.debug("fs_ammeter校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n    local sum = 0\n    for i = startIndex, endIndex-1 do\n\t    local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n        --log.debug("fs_ammeter校验和 i=%s, byteSte=%s",i,byteSte)\n        sum = (sum + tonumber(byteSte,16))\n    end        \n    local result = sum % 256\n   log.debug("fs_ammeter 校验和 result=%s hex=%s",result,string.format("%x",result))\n    return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n  log.debug("fs_ammeter 交换 moduleStr=%s",moduleStr)\n  local length=string.len(moduleStr)/2\n  local newModuleStr=''\n       for i=length-1,0,-1 do\n           newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n       end\n  log.debug("fs_ammeter 交换newModuleStr=%s",newModuleStr)\n  return newModuleStr\nend\n\ngetData=function(BCDstr)\n  log.debug("fs_ammeter 获取数据 BCDstr=%s",BCDstr)\n  local e_BCDstr=BCDstr  --exchangeHtoL(BCDstr)\n  local newBCDstr=''\n  local len=string.len(e_BCDstr)/2\n  for i=0,len-1,1 do\n     local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n     --log.debug("fs_ammeter 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n     local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n    --log.debug("fs_ammeter 获取数据 rawdata=%s",rawdata)\n     newBCDstr = newBCDstr..string.format('%02x',rawdata)\n    --log.debug("fs_ammeter 获取数据 newBCDstr=%s",newBCDstr)\n  end\n  return newBCDstr\nend\n\n	INLINE	2018-10-31 16:45:03.881+08	2019-01-05 12:49:56.686+08	2018-10-31	\N
a9269cd1-57a8-4731-a70d-ef619cc8ee96	mas_micro_gprs	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start=function()\n   -- log.debug("masmicrogprs  [%s] : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("masmicrogprs  [%s] devices data =%s",data)\n        ParseData(data)        \n    else\n        --log.error("masmicrogprs  [%s] recvd content is nil")\n    end\nend\n\nlocal dtuId=device.uplink.props.id  --日志标记\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\t\n\t\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        --log.debug("masmicrogprs  [%s] 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("masmicrogprs  [%s] datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            --log.debug("masmicrogprs  [%s] 解析dat r1= %s",dtuId, r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                --log.debug("masmicrogprs  [%s] 接收dat datpackage= %s",dtuId,  firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                --log.debug("masmicrogprs  [%s] 接收dat r1= %s package=%s",dtuId, r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            --log.debug("masmicrogprs  [%s] 剩余电量  %s",dtuId, power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("masmicrogprs  [%s]  通道配置版本号 %s",dtuId, setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("masmicrogprs  [%s] 版本固件 %s",dtuId, ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s',dtuId, version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            --log.debug("masmicrogprs  [%s] devices crc =%s",dtuId,crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("masmicrogprs  [%s] crc %s r1 %s setting%s" ,dtuId,crc,r1,setting)\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("masmicrogprs  [%s] 配置无修改",dtuId)\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("masmicrogprs  [%s] 苏醒帧返回 %s",dtuId, req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("masmicrogprs  [%s]  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("masmicrogprs  [%s] 苏醒帧返回 %s",dtuId, req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("masmicrogprs  [%s] 配置初次配置",dtuId)\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("masmicrogprs  [%s] 苏醒帧返回 %s",dtuId, req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("masmicrogprs  [%s] 设备休眠",dtuId)\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' and string.len(data)/2>26 then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("masmicrogprs  [%s] r1=%s,r1ok=%s,_power=%s",dtuId,r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\t--log.debug("masmicrogprs  [%s] r1=%s,r1ok=%s,_version=%s",dtuId,r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%", power)\n\t\t\t--log.debug("masmicrogprs  [%s] powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n\t\t\t\t--log.debug("masmicrogprs  [%s] XDATA=%s",dtuId,string.sub(data,firststart,firststart+datalength))\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t--log.debug("masmicrogprs  [%s] 振弦 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 振弦 Phy =%s, deviceid %s", dtuId,Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif childDevice.props.sensortype == "zxwd" then\n\t\t\t\t\t\t\trst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif childDevice.props.sensortype ~= "zxwd" then\n\t\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\t\trst.data = {}\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\t\trst.data = {}\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\tend\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 振弦 %s",dtuId,  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 测斜 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 裂缝 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 裂缝 %s", dtuId, json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030 then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 静力水准仪(齐兴) %s,dtuId, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 静力水准仪 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\tif protocalCode==9031 then     --静力水准仪\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 静力水准仪 %s, deviceid: %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 静力水准仪 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 水位 %s, deviceid %s",dtuId, module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("masmicrogprs  [%s] 水位 %s",dtuId,  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\t--log.debug("masmicrogprs  [%s] dataresult %s",dtuId, json.encode(out))\n            end \n            log.debug("masmicrogprs  [%s] out %s", dtuId,json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            --log.debug("masmicrogprs  [%s]: databack: %s",dtuId, req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    --log.debug("masmicrogprs  [%s] : totalSensors =%s",dtuId,total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\t--log.debug("masmicrogprs  [%s] subdevice =%s",dtuId,json.encode(subdevice))\n\t\t\t--log.debug("masmicrogprs  [%s] sensortype =%s",dtuId,subdevice.props.sensortype)\n\t\t\t\n            if subdevice.props.sensortype=='zx' or subdevice.props.sensortype=='zxwd' then    \n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd")\n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd buff=%s",buff)\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd colgain=%s",dtuId,colgain)\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd incentivemethod=%s",dtuId,incentivemethod)\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd checkoption=%s",dtuId,checkoption)\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd vibratspectrum=%s",dtuId,vibratspectrum)\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd vibratsamplfreq=%s",dtuId,vibratsamplfreq)\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\t--log.debug("masmicrogprs  [%s] : zx zxwd incentive=%s",dtuId,incentive)\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("masmicrogprs  [%s] : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd'and subdevice.props.sensortype ~='zxwd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("masmicrogprs  [%s] : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\t--log.debug("masmicrogprs  [%s]  baudrate =%s databits %s parity %s stopbits ",dtuId,baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                --log.debug("masmicrogprs  [%s]  setting =%s",dtuId,setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\t--log.debug("masmicrogprs  [%s]  ssend request =%s",dtuId,ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                --log.debug("masmicrogprs  [%s]  deploy back =%s",dtuId,ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("masmicrogprs  [%s] 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("masmicrogprs  [%s] has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("masmicrogprs  [%s] has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("masmicrogprs  [%s] has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("masmicrogprs  [%s] has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("masmicrogprs  [%s]  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("masmicrogprs  [%s] deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",dtuId,deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("masmicrogprs  [%s] begin parse",dtuId)\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        --log.debug("masmicrogprs  [%s] finish parse",dtuId)\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("masmicrogprs  [%s] r1=%s,r1ok=%s,_power=%s",dtuId,r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\t--log.debug("masmicrogprs  [%s] r1=%s,r1ok=%s,_version=%s",dtuId,r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\t--log.debug("masmicrogprs  [%s] powerstr=%s",dtuId,powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("masmicrogprs  [%s] cloudvibrate=%s",dtuId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n       -- log.debug("masmicrogprs  [%s] not found device module=%s channel=%s",dtuId,deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    --log.debug("masmicrogprs  [%s] len %s", dtuId,len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        --log.debug("masmicrogprs  [%s] te %s",dtuId, te)\n        sum = sum+ tonumber(te)\n    end\n    --log.debug("masmicrogprs  [%s] sum %s",dtuId, sum)\n   return 0xffff-sum\nend	INLINE	2019-09-06 10:07:33.413+08	2020-12-24 16:44:29.11+08	2019-09-06	\N
ad7b4cd5-9b3e-44c9-bb9b-60dc15019f01	anxin_laser	\N	激光测距仪 主动上报（标准协议）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_laser.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_laser [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t    local distance = iota.hexToShort(hex,24,'B')/10000\n    \n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_laser timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_laser dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          distance=distance\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_laser [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_laser:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_laser [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_laser module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_laser [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_laser [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-23 14:51:58.931+08	2019-12-23 14:55:58.922+08	2019-12-23	\N
36fe6fad-733b-496b-bdc7-be6c9b17f119	yy_TempHum_1154	\N	科润美改为永阳	1.0	414bf334-23bf-4e6d-aa00-230325261d81	414bf334-23bf-4e6d-aa00-230325261d81	f	414bf334-23bf-4e6d-aa00-230325261d81	Lua	--//01 协议文档/9月第4周/华南，深圳市永阳新能源科技有限公司，温湿度传感器，485通讯协议/永阳YY-TF100湿度探头及协议.pdf\n--[[\n协议号: 1154;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "yy_TempHum_1154.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("yy_TempHum_1154 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("yy_TempHum_1154 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=iota.appendHexByte(buff, moduleNo, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3:  \t读取寄存器数量\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  01040419e81c9af447     moduleId=1\n--原始数据   温度26.32，湿度73.22\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("yy_TempHum_1154 数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal Temp = (iota.hexToShort(data, 3,'B')-4000)/100.0;\n\t\tlocal Hum = iota.hexToShort(data, 5,'B')/100.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thumid=Hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n	INLINE	2017-12-21 16:35:23.636+08	2018-03-30 09:01:53.817+08	2017-12-21	\N
01ed9514-09fa-4a3a-be3e-42040e39b1eb	YCxieyi	\N	扬尘设备协议	1.0	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	1b2d8739-627e-4b7d-9480-3eee6e9396fe	Lua	--\n--require "functions"    -- 公共函数\n\n--start=function()\n  --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n  --local aa=iota.appendHexCrc8(checkstr,0)\n  --log.debug("enyi_2018 crc8=%s",aa)\n -- ok=ctx:asend("010203")\n--end\n\n--缓存\n--local buff_random_32=""\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("enyi_2018:Received=>%s",hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\t--\n\t\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\n\t\tlocal json_table=getJsonTable(hex)\n\t\tlog.debug("enyi_2018 json_table.Cmd_Type=%s",json_table.Cmd_Type)\n\t\t--扬尘注册 C-S\n\t\tif json_table.Cmd_Type=="Register" then\n\t\t     log.debug("enyi_2018 处理注册信息")\n\t\t\t--提取 device_Id\n\t\t\tlocal device_Id=json_table.Device_ID\n\t\t\t local Registercheck=""\n\t\t\tif device_Id~=device.props.Device_ID then\n\t\t\t   Registercheck="1"\n\t\t\t   log.debug("enyi_2018 C-S 注册校验错误,device_Id=%s,device.props.Device_ID=%s",device_Id,device.props.Device_ID)\n\t\t\telse\n\t\t\t\tRegistercheck="0"\n\t\t\tend\n\t\t\t \n\t\t\t \n\t\t\tlocal Register_messageNo=string.sub(hex,9,9+7)\n\t\t\t \n\t\t\t--注册应答 \n\t\t    local tb_Register={}\n\t\t\tlocal timestamp=os.time()\n\t\t\tlocal random_32=getRandom32(timestamp)--随机数32=固定头(22)..时间戳(10)\n\t\t\t--buff_random_32=random_32  --保存随机数\n\t\t\ttb_Register.Cmd_Type="Register_Ret"\n\t\t\ttb_Register.Data_Check=Registercheck\t\t--CD55333ECFBF490B84145E61E6DCD028\t\n\t\t\ttb_Register.Random=random_32  --测试随机数"11223344556677889900112233445566"\n\t\t\tlocal cmdStr_Register=json.encode(tb_Register)\n\t\t     local buff_Register=creatResponse(cmdStr_Register,Register_messageNo)--消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Register)\n\t\t\tlog.debug("enyi_2018:s-C发送注册反馈=%s",buff_Register)\n\t\t\t\n\t\t\t--扬尘登录 C-S\n\t\telseif json_table.Cmd_Type=="Login" then\n\t\t\tlog.debug("enyi_2018 处理登录信息")\n\t\t\tlocal C_S_Device_ID=json_table.Device_ID\n\t\t\tlocal C_S_Random32=json_table.Random\n\t\t\tlocal C_S_Response=json_table.Response\n\t\t\tlocal S_Response=getMD5Response(C_S_Device_ID,C_S_Random32)\n\t\t\tlocal logincheck=""\n\t\t\tif string.upper(C_S_Response)~=string.upper(S_Response) then\n\t\t\t\tlogincheck="1"\n\t\t\t   log.debug("enyi_2018  C-S 登录response校验错误,C_S_Response=%s,S_Response=%s,C_S_Random32=%s",string.upper(C_S_Response),string.upper(S_Response),C_S_Random32)\n\t\t\telse\n\t\t\t\tlogincheck="0"\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\t\tlocal login_messageNo=string.sub(hex,9,9+7)\n\t\t\t--登录应答\n\t\t\tlocal tb_Login={}\n\t\t\t--local timestamp_2=os.time()\n\t\t\t--local random_32_2=getRandom32(timestamp_2) --"BE4805E9EF1D41DFB6D732931F6C2F6C"\n\t\t\ttb_Login.SessionID=C_S_Random32    --tostring(random_32_2)\t\t\t\n\t\t\ttb_Login.Cmd_Type="Login_Ret"\n\t\t\ttb_Login.Data_Check=logincheck\t\t\t\n\t\t\tlocal cmdStr_Login=json.encode(tb_Login)\n\t\t    local buff_Login=creatResponse(cmdStr_Login,login_messageNo)--消息编号 时间戳\n\t\t\tok=ctx:asend(buff_Login)\n\t\t\tlog.debug("enyi_2018:s-C发送登录反馈=%s",buff_Login)\n\n\t\t\t--扬尘数据 C-S\n\t\telseif json_table.Cmd_Type=="Reporting_Data" then\n\t\t\tlocal data_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_Data={}\n\t\t\tlocal timestamp_3=os.time()\t\t\n\t\t\ttb_Data.Cmd_Type="Reporting_Data_Ret"\n\t\t\ttb_Data.Data_Check="0"\n\t\t\ttb_Data.Control_Cmd="0"\n\t\t\ttb_Data.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_Data=json.encode(tb_Data)\n\t\t     local buff_Data=creatResponse(cmdStr_Data,data_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Data)\n\t\t\tlog.debug("enyi_2018:s-C发送数据上报反馈=%s",buff_Data)\n\t\t\t\n\t\t\t\n\t\t\t--\n\t\t\t--数据解析\n\t\t\tlocal device_ID=json_table.Device_ID\n\t\t\tlocal temperature=tonumber(json_table.Temp)\n\t\t\tlocal humidity=tonumber(json_table.Hum)\n\t\t\tlocal pm25=tonumber(json_table.PM2p5)\n\t\t\tlocal pm10=tonumber(json_table.PM10)\n\t\t\t--local tsp=tonumber(json_table.TSP)\n\t\t\tlocal nvh=tonumber(json_table.NVH)--噪声\n\t\t\tlocal speed=tonumber(json_table.Wind_Sp)--风速\n\t\t\tlocal directionEnum=tonumber(json_table.Wind_Dir)--风向\t\n\t\t\tlocal direction\n\t\t\tif \tdirectionEnum~=nil then\n                direction=getWindDirection(directionEnum)\n\t\t\tend\n\t\t\tlog.debug("enyi_2018:数据 =%s,%s,%s,%s,%s,%s,%s",temperature,humidity,pm25,pm10,nvh,speed,direction)\n\t\t    out.data={\n\t\t\t\t\t\t--temperature=temperature,\n\t\t\t\t\t\t--humidity=humidity,\n\t\t\t\t\t\tpm25=pm25,\n\t\t\t\t\t\tpm10=pm10,\n\t\t\t\t\t\tnoise=nvh,\n\t\t\t\t\t\tspeed=speed,\n\t\t\t\t\t\tdirection=direction\t\n\t\t\t}\n\t\t\t--local resultData =json.encode(out)\n\t\t\t--ctx:notify(resultData)\n\t\t\t--\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t--扬尘保活 C-S\n\t\telseif json_table.Cmd_Type=="KeepAlive" then\n\t\t\tlocal KeepAlive_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_KeepAlive ={}\n\t\t\tlocal timestamp_4=os.time()\n\t\t\ttb_KeepAlive.Cmd_Type="KeepAlive_Ret"\n\t\t\ttb_KeepAlive.Data_Check="0"\n\t\t\ttb_KeepAlive.Control_Cmd="0"\n\t\t\ttb_KeepAlive.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_KeepAlive=json.encode(tb_KeepAlive)\n\t\t     local buff_KeepAlive=creatResponse(cmdStr_KeepAlive,KeepAlive_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_KeepAlive)\n\t\t\tlog.debug("enyi_2018:s-C发送注册反馈=%s",buff_KeepAlive)\n\t\t \n\t\t \n\t\tend\n\t\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("enyi_2018 resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n\n\n\ngetWindDirection=function(num)\n   local NO=tonumber(num+1)\n\tlocal WindDirections={"北","东北偏北","东北","东北偏东","东","东南偏东","东南","东南偏南","南","西南偏南","西南","西南偏西","西","西北偏西","西北","西北偏北"}\n\tlocal direction=WindDirections[NO]\n\treturn direction\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("enyi_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("enyi_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("enyi_2018 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("enyi_2018 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("enyi_2018:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("enyi_2018:  subdevices是nil")\n    \treturn nil\n    end\nend\n\n\n--获取收到数据中的json\ngetJsonTable=function(hex)\n\n\tlocal IDX_json=24; \n\tlocal length=string.len(hex)\n\tlocal json_hex=string.sub(hex,2*IDX_json+1,length-4*2)       \n\tlocal jsonStr=HextoStr(json_hex)\n     log.debug("enyi_2018  校验前jsonStr=%s",jsonStr)\n    local jsonStr_New=string.gsub(jsonStr,",\\r\\n}","\\r\\n}") \n    log.debug("enyi_2018 校验后jsonStr=%s",jsonStr)\n    local tableJson=json.decode(jsonStr_New)\n\tlog.debug("enyi_2018 type(tableJson)=%s,tableJson=%s",type(tableJson),json.encode(tableJson))\n  \tlog.debug("enyi_2018 table转换ok")\n\treturn tableJson\nend\n\n--服务器应答\ncreatResponse=function(jsonStr,messageNo)\n   log.debug("enyi_2018 应答json=%s,messageNo=%s",jsonStr,messageNo)--消息标号=时间戳（H）\n   --local headerHex="5aa50100"..string.format("%08x",messageNo).."534445590200020100000000"\n   local headerHex="5aa50100"..messageNo.."534445590200020100000000"  --直接采用设备上报的  消息编号\n   local jsonhex=StrtoHex(jsonStr)\n   --报文长度\n   local allLength=4+string.len(jsonhex)/2\n   local cmd_length=string.format("%08x",allLength)\n   local cmdHex=headerHex..cmd_length..jsonhex\n   local cmdHex=iota.appendHexCrc8(cmdHex,0);\n   local cmdHex=cmdHex.."000304"\n   \n   return cmdHex\nend\n\n--hex -> ASCII\nHextoStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nStrtoHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nIsValid=function (data)\n\tlog.debug('enyi_2018:开始校验数据')\n    if data == nil or string.len(data)/2 < 100 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif string.sub(data,1,4)~="5aa5" or string.sub(data,-4,-1)~="0304" then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n\t\n\t-- local moduleR = tostring(iota.hexToShort(data,2,'B'))\n\t-- if moduleR ~=tostring(moduleNoStrCheck) then\n        -- errormsg = 'module is invalid='..moduleR\n        -- errcode = 1003\n        -- return false\n    -- end\n    log.debug('enyi_2018:校验通过')\n\treturn true\t\nend\n\n\ngetMD5Response=function(deviceId,randomNum32)\n   local HA1="59ABD5A817CCFA22CB0F1C3E3E77C4D9"\n   local HA2=crypto.md5(deviceId..":"..randomNum32)\n   local HA3=crypto.md5(string.upper(HA1)..":"..string.upper(HA2))\n   return string.upper(HA3)\nend\n\ngetRandom32=function(num10)\t\n\tlocal num32="1000000000000000000000"..tostring(num10)\n\treturn num32\nend\n	INLINE	2018-07-23 15:37:57.959+08	2018-07-30 17:46:18.735+08	2018-07-23	\N
61394f4f-a90e-4c38-8d8b-f0acdee2975c	chemins_Turbidity_34	\N	chemins_Turbidity_3401	1.0	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	f	ba38de11-b347-4100-a317-9c4c4a362f91	Lua	--//01 协议文档/7月第3周烟台凯米斯仪器有限公司/ZS-710一体式在线浊度传感器用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "chemins_Turbidity_3401.lua", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            log.debug("SSend error!")\n        end\n        ctx:done(result)\nend\n\n--030308fffa0001011e0001169e\n--moduleId=3\n--"temp": 28.6,\n--"turbidity": -0.6\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n\n        local turbidity_temp = iota.hexToShort(hex,3,'B')\n        local turbidity_dot = iota.hexToShort(hex,5,'B')\n\t\tlocal turbidity = turbidity_temp/(10^turbidity_dot)\n\t\t\n\t\tlocal temp_temp = iota.hexToShort(hex,7,'B')\n        local temp_dot = iota.hexToShort(hex,9,'B')\n\t\tlocal temp = temp_temp/(10^temp_dot)\n\t\tlog.debug("温度"..tostring(temp_temp)) \n        out.data = {\n            turbidity=turbidity,\n\t\t\ttemp=temp\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\n\t\n   \n	INLINE	2017-12-19 13:57:36.268+08	2018-02-28 18:32:12.194+08	2017-12-19	\N
f0dbf2ac-9867-4a07-bfe3-8b84c2e375b2	sci_1409	\N		1.0	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	f	86b3b2f0-be8a-4f62-8fe7-c0b6e9b67307	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sci_1409", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("sci_1409:LUA:根设备devices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("sci_1409:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n        \t--local moduleNo=tonumber(child.props.moduleId) \n            --local channelNo=tonumber(child.props.channelId)-1\n\t\t\t\t\t\t\n            local moduleNo=tonumber(child.props.moduleId) \n            local channelNo=tonumber(child.props.channelId)\n            if child.uplink.props ~='null' then \n        \t    moduleNo=tonumber(child.uplink.props.module) \n                channelNo=tonumber(child.uplink.props.channel)\n            end\n            log.debug("sci_1409:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0xF7, endian)     \n\t\t\tbuff=iota.appendHexByte(buff, 0x60, endian)  \n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian) \n\t\t\tlocal sum=iota.hexCheckPlusSum(buff,0,3)\n\t\t\t--log.debug("sci_1409:模块%s通道%s的 校验前sum=%s",moduleNo,channelNo,sum)  \n\t\t\tbuff=buff..string.format("%x",sum)\t\n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)            \n\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\t\t\t\n\t\t\tbuff=iota.appendHexByte(buff, channelNo-1, endian)\n\t\t\t--log.debug("sci_1409:模块%s通道%s的 校验前buff=%s",moduleNo,channelNo,buff)  \n      \t\tlocal crc16H\n     \t\tlocal crc16L\n\t\t\tcrc16H,crc16L=crc16_CCITT(buff,0,8)\n      \t\tlog.debug("sci_1409:模块%s通道%s的 校验前buff=%s,crc16L=%s,crc16H=%s",moduleNo,channelNo,buff,crc16L,crc16H)  \n\t\t\tbuff=buff..crc16L..crc16H\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("sci_1409:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("sci_1409:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("sci_1409:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('sci_1409:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("sci_1409:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\nend\n\n\n\n--F760076301C001805F85CC447DDE     moduleId=1  channelID=1   原始值 strain=1636.16785  --注，转换在采集仪上自动转换\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n    \n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n \n        \n\t\tlocal freq=iota.hexToFloat(hex,8,'L')  --应变\n\t\tlocal Phy=freq\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == "209ff0d2-7a85-4997-804a-d64bb04ba531" then --振弦公式 metaid \n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or nil\n\t\t\t\t--local kt = subDevice.uplink.capabilities[1].formula.props.Kt or nil\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or nil\n\t\t\t\t--local t0 = subDevice.uplink.capabilities[1].formula.props.To or nil\n                log.debug("sci_1409:模块%s通道%s的公式计算参数是：k=%s,f0=%s,freq=%s",subModuleId,subChannelId,k,f0,freq)\n\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\tPhy =k*(freq ^ 2 - f0 ^ 2) \n\t\t\t\t\tlog.debug("sci_1409:模块%s通道%s的phy是：%s",subModuleId,subChannelId,Phy)\n\t\t\t\tend\n\t\t\telse\n\t\t\tlog.debug("sci_1409:模块%s通道%s的metaid=%s[%s]",subModuleId,subChannelId,subDevice.uplink.capabilities[1].formula.metaid)\n\t\tend\n\n\n\t\t \n\t\tsubData.data={\n\t\t\t\t\tphysicalvalue=Phy\t\t\t\t\t\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n                 log.debug("sci_1409:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("sci_1409:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("sci_1409:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('sci_1409:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 14 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('sci_1409:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length',moduleId,channelId)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0xF7 or iota.hexToByte(data,1,'B') ~= 0x60 or iota.hexToByte(data,2,'B') ~= 0x07  then\n        errcode = 1003\n        errormsg = 'CMD is wrong ' \n\t\tlog.debug('sci_1409:模块%s通道%s 数据校验失败：CMD错误',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,4,'B'))\n\tif  tostring(moduleId)~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('sci_1409:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B')%16+1)\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('sci_1409:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('sci_1409:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend\n\n\n\n\nfunction getIntPart(x)  --取整\n    if x<= 0 then\n        return math.ceil(x)\n    end\n    if math.ceil(x) == x then\n        x = math.ceil(x)\n    else\n        x = math.ceil(x)-1\n    end\n\n\n    return x\nend\n\ncrc16_CCITT=function(buffer,index_start,index_end)--CRC校验 CRC-16 CCITT X2\n    local crc = 0;\n    local da=0;\n    local yu ={\n               0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n                0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef\n              };\n    for i = index_start,index_end-1,1  do\n        \n         da = (crc / 256) / 16\n         da=getIntPart(da)\n         crc =crc*16%65536\n        \n        local buff_i=tonumber(string.sub(buffer,2*i+1,2*i+2),16)\n        local index=bit:_xor(da,buff_i / 16) \n         crc = bit:_xor(crc,yu[index+1])\n        \n\n         da = (crc / 256) / 16;\n         da=getIntPart(da)\n         crc =crc*16%65536\n\n         local index_2=bit:_xor(da,buff_i %16)        \n         crc = bit:_xor(crc,yu[index_2+1])               \n    end\n       local  crcHi_CCITT = crc %256;\n       local  crcLo_CCITT = getIntPart(crc/256)\n       return string.format("%02x",crcHi_CCITT),string.format("%02x",crcLo_CCITT)\nend\n\n\n\n	INLINE	2018-01-08 15:26:45.699+08	2018-05-17 20:06:57.687+08	2018-01-08	\N
9daba2de-e5bd-4b35-a63c-364ac8b366fa	gr_Concentration2512	\N		1.0	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f	8e1adf17-9018-4c44-bc9b-ff70bcca029a	Lua	--//04 项目资料/2017-08/湖南国瑞仪器有限公司/IAT说明书.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n --0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\nstart=function()\n    log.debug("load script %s, moduleId=%s", "gr_Concentration2512", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal data=hex\n    local ErrorCode = IsValid(hex)\n\t\n    if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n        --心跳直接结束\n\t\treturn true\n    end\n\t\t\n    if ErrorCode then\n        log.debug('数据有效')\n\t    local k=0.0;\n\t\tlocal unit=''\n\t\tlocal k_index=string.sub(data,11,12)\n\t\tif k_index=='01' then\n\t\t   k=1.0\n\t\t   unit = "ug/m3"; --PM2.5\n\t\t   elseif k_index=='02' then\n\t\t   k=1.0\n\t\t   unit = "ug/m3"; --PM10\n\t\t   elseif k_index=='03' then\n\t\t   k=1.0\n\t\t   unit = "ppb"; --SO2\n\t\t   elseif k_index=='04' then\n\t\t   k=1.0\n\t\t   unit = "ppb"; --NO2\n\t\t   elseif k_index=='05' then\n\t\t   k=0.001\n\t\t   unit = "ppm"; --CO\n\t\t   elseif k_index=='06' then\n\t\t   k=0.01\n\t\t   unit = "ppb"; --O3\n\t\t   elseif k_index=='09' then\n\t\t   k=0.01\n\t\t   unit = "% RH"; --湿度\n\t\t   elseif k_index=='0a' then\n\t\t   k=0.1\n\t\t   unit = "℃"; --温度\n\t\t   else\n\t\t   log.debug('无匹配数据类型')\t\t    \n\t\tend\n\t\t--log.debug('k是'..k)\n\t\tlocal Concentration = 0.0;\n\t\tlocal gasType=string.sub(data,13,14)\n    \n\t\tif gasType=='20' then\n\t\tConcentration=iota.hexToInt(data,9,'L')\n\t\telseif gasType=='40' then\n\t\tConcentration=iota.hexToShort(data,9,'L')\n\t\telseif gasType=='43' then\n\t\tConcentration=iota.hexToShort(data,9+1,'L')*(-1)^tonumber(string.sub(data,9,10),16)    \n        end\n        out.data = {              \n        concentration=Concentration*k\n        }\n    else\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\n    \nend\n\nIsValid=function(data)\n\n\t--/湿度13，其他15,心跳10\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ==15 or string.len(data)/2 ==13 or string.len(data)/2 ==10 then\n\telse\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n        return false\n    end\n\t\n    if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n        --心跳直接放入\n\t\treturn true\n    end\n\n\tif string.sub(data,9,10) ~= '01' or string.sub(data,15,16) ~= '00'then\n        errormsg = 'Data is Invalid'\n        errorcode = 1001\n        return false\n    end\n  \n    local moduleId = tonumber(string.sub(data,1,2),16);\n    log.debug('moduleId是：'..moduleId)\n    local channelId = tonumber(string.sub(data,11,12),16);\n    log.debug('channelId：'..channelId)\n\tif moduleId~=tonumber(device.props.moduleId) or channelId~=tonumber(device.props.channelId) then\n\t\terrormsg = 'moduleId or channelId is Invalid'\n    \terrorcode = 1001\n        return false\n    end\n    return true\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-12-01 14:54:59.371+08	2018-02-28 18:32:12.216+08	2017-12-01	\N
c10e1f69-fac2-446b-b907-7b94e3da49ed	FS_Tower_9077	\N	塔吊	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n start=function() \n    log.debug("fs_tower_9077 start")\n end\n\nonData=function(hex)\n    log.debug("fs_tower_9077 收到数据=%s", hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        --local sensorid = string.char(iota.hexToByte(hex,2,'B'))..string.char(iota.hexToByte(hex,2,'B'))..string.char(iota.hexToByte(hex,3,'B'))..string.char(iota.hexToByte(hex,4,'B'))\n        local cmd = iota.hexToByte(hex,6,'B')\n        --运行记录数据\n        if cmd == 0x10 then \n            local state = iota.hexToShort(hex,15,'B')--状态掩码\n            local weight = iota.hexToShort(hex,17,'B')/1000.0 --额定重量\n            local curweight = iota.hexToShort(hex,19,'B')/1000.0 --当前重量\n            local moment = iota.hexToShort(hex,21,'B')/10.0 --力矩\n            local height = iota.hexToShort(hex,23,'B')/10.0 --高度（dm）\n            local rotation = iota.hexToShort(hex,25,'B') --回转角度（°）\n            local radius = iota.hexToShort(hex,27,'B')/100.0 --幅度\n            local speed = iota.hexToShort(hex,29,'B')/10 --风速\n            local obliquity = iota.hexToShort(hex,31,'B')/100 --倾角\n\n            out.data={\n                weight=tonumber(string.format('%0.2f',weight)),\n                curweight=tonumber(string.format('%0.2f',curweight)),\n                moment=tonumber(string.format('%0.2f',moment)),\n                height=tonumber(string.format('%0.2f',height)),\n                rotation=tonumber(string.format('%0.2f',rotation)),\n                radius=tonumber(string.format('%0.2f',radius)),\n                speed=tonumber(string.format('%0.2f',speed)),\n                obliquity=tonumber(string.format('%0.2f',obliquity))\n            }\n        end\n        --超载记录数据\n\t\tif string.len(hex)/2 > 34 then \n\t\t\tcmd = iota.hexToByte(hex,40,'B')\n\t\t\tif cmd == 0x12 then\n\t\t\t\t\n\t\t\t\tlocal state = iota.hexToShort(hex,15+34,'B')--状态掩码 \n\t\t\t\tlocal weight = iota.hexToShort(hex,17,'B')/1000.0--额定重量\n\t\t\t   log.debug("fs_tower_9077 we0x12 = %s",weight)\n\t\t\t\tlocal weightdeg = iota.hexToShort(hex,19+34,'B')/100.0--重量比            \n\t\t\t\tlocal height = iota.hexToShort(hex,21+34,'B')/10--高度（dm）\n\t\t\t\tlocal heightdeg = iota.hexToShort(hex,23+34,'B')/100.0--高度比\n\t\t\t\tlocal rotation = iota.hexToShort(hex,25+34,'B')--回转角度（°）\n\t\t\t\tlocal rotationdeg = iota.hexToShort(hex,27+34,'B')/100.0--回转角度比\n\t\t\t\tlocal radius = iota.hexToShort(hex,29+34,'B')/100.0--幅度\n\t\t\t\tlocal radiusdeg = iota.hexToShort(hex,31+34,'B')/100.0--幅度比\n\t\t\t\tlocal speed = iota.hexToShort(hex,33+34,'B')/10--风速\n\t\t\t\tlocal speeddeg = iota.hexToShort(hex,35+34,'B')/100.0--风速比\n\t\t\t\tlocal obliquity = iota.hexToShort(hex,37+34,'B')/100--倾角\n\t\t\t\tlocal obliquitydeg = iota.hexToShort(hex,39+34,'B')/100.0--倾角比\n                local moment = iota.hexToShort(hex,21,'B')/10.0 --力矩\n\t\t\t\tlocal curweight = iota.hexToShort(hex,19,'B')/1000.0 --当前重量\n\t\t\t\tout.data={\n\t\t\t\t\tweight=weight,\n\t\t\t\t\tWeightdeg=weightdeg,\n\t\t\t\t\theight=height,\n\t\t\t\t\tHeightdeg=heightdeg,\n\t\t\t\t\trotation=rotation,\n\t\t\t\t\tRotationdeg=rotationdeg,\n\t\t\t\t\tradius=radius,\n\t\t\t\t\tRadiusdeg=radiusdeg,\n\t\t\t\t\tspeed=speed,\n\t\t\t\t\tSpeeddeg=speeddeg,\n\t\t\t\t\tobliquity=obliquity,\n\t\t\t\t\tObliquitydeg=obliquitydeg,\n                    curweight=curweight,\n                \tmoment=moment\n\t\t\t\t}\n\t\t\tend\n\t\tend\n        --设置记录\n        if cmd == 0x14 then\n            local req = iota.hexToByte(hex,9,'B')--请求编号\n            \n            local endian = 'B'\n            local buff=''\n            buff=iota.appendHexByte(buff, 0x5A, endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,1,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,2,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,3,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,4,'B'), endian)\n            buff=iota.appendHexByte(buff, 0x01, endian)\n            buff=iota.appendHexByte(buff, 0x14, endian)\n            buff=iota.appendHexByte(buff, 0x01, endian)\n            local xor = CheckXor(buff)\n            buff=iota.appendHexByte(buff, xor, endian)--异或\n            buff=iota.appendHexByte(buff, req, endian)\n            local data = string.format("%02X",req)\n            xor = CheckXor(data)\n            buff=iota.appendHexByte(buff, xor, endian)--异或和\n            ctx:asend(buff)\n        end\n        --对时请求\n        if cmd == 0x61 then\n            local req = iota.hexToByte(hex,9,'B')--请求编号\n            \n            local endian = 'B'\n            local buff=''\n            buff=iota.appendHexByte(buff, 0x5A, endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,1,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,2,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,3,'B'), endian)\n            buff=iota.appendHexByte(buff, iota.hexToByte(hex,4,'B'), endian)\n            buff=iota.appendHexByte(buff, 0x01, endian)\n            buff=iota.appendHexByte(buff, 0x61, endian)\n            buff=iota.appendHexByte(buff, 0x12, endian)\n            local xor = CheckXor(buff)\n            buff=iota.appendHexByte(buff, xor, endian)--头异或\n            --buff=iota.appendHexByte(buff, req, endian)\n            local data = ''\n            --黑匣子时间\n            local reyear = iota.hexToByte(hex,9,'B')\n            data = iota.appendHexByte(data, reyear, endian)\n            buff = iota.appendHexByte(buff, reyear, endian)\n            local remonth = iota.hexToByte(hex,10,'B')\n            data = iota.appendHexByte(data, remonth, endian)\n            buff = iota.appendHexByte(buff, remonth, endian)\n            local reday = iota.hexToByte(hex,11,'B')\n            data = iota.appendHexByte(data, reday, endian)\n            buff = iota.appendHexByte(buff, reday, endian)\n            local rehour = iota.hexToByte(hex,12,'B')\n            data = iota.appendHexByte(data, rehour, endian)\n            buff = iota.appendHexByte(buff, rehour, endian)\n            local reminute = iota.hexToByte(hex,13,'B')\n            data = iota.appendHexByte(data, reminute, endian)\n            buff = iota.appendHexByte(buff, reminute, endian)\n            local resecond = iota.hexToByte(hex,14,'B')\n            data = iota.appendHexByte(data, resecond, endian)\n            buff = iota.appendHexByte(buff, resecond, endian)\n            --接受时间\n            local year = os.date("%y")\n            data = iota.appendHexByte(data, year, endian)\n            buff = iota.appendHexByte(buff, year, endian)\n            local month = os.date("%m")\n            data = iota.appendHexByte(data, month, endian)\n            buff = iota.appendHexByte(buff, month, endian)\n            local day = os.date("%d")\n            data = iota.appendHexByte(data, day, endian)\n            buff = iota.appendHexByte(buff, day, endian)\n            local hour = os.date("%H")\n            data = iota.appendHexByte(data, hour, endian)\n            buff = iota.appendHexByte(buff, hour, endian)\n            local minute = os.date("%M")\n            data = iota.appendHexByte(data, minute, endian)\n            buff = iota.appendHexByte(buff, minute, endian)\n            local Second = os.date("%S")\n            data = iota.appendHexByte(data, Second, endian)\n            buff = iota.appendHexByte(buff, Second, endian)\n            --发送时间\n\n            data = iota.appendHexByte(data, year, endian)\n            buff = iota.appendHexByte(buff, year, endian)\n\n            data = iota.appendHexByte(data, month, endian)\n            buff = iota.appendHexByte(buff, month, endian)\n\n            data = iota.appendHexByte(data, day, endian)\n            buff = iota.appendHexByte(buff, day, endian)\n\n            data = iota.appendHexByte(data, hour, endian)\n            buff = iota.appendHexByte(buff, hour, endian)\n\n            data = iota.appendHexByte(data, minute, endian)\n            buff = iota.appendHexByte(buff, minute, endian)\n\n            data = iota.appendHexByte(data, Second, endian)\n            buff = iota.appendHexByte(buff, Second, endian)\n            xor = CheckXor(data)\n            buff=iota.appendHexByte(buff, xor, endian)--内容异或\n      \t\tlog.debug("fs_tower_9077 对时=%s", buff)\n            ctx:asend(buff)\n        end\n        \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("fs_tower_9077resultData=%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\nIsValid=function(alldata)\n    log.debug("fs_tower_9077  校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n\t\tlog.debug("fs_tower_9077: 校验失败 Data is nil")\n        return false\n    end\n\n    if string.sub(alldata,1,2)~='5a' then\n\t    errormsg = 'Head is wrong'\n        errcode = 1002\n\t\tlog.debug("fs_tower_9077: 校验失败 Head is wrong")\n        return false\n\tend\n    log.debug("fs_tower_9077: 校验通过")\n    return true\nend\n\n\n\n--异或校验\nCheckXor=function(hex)  \n    local len = string.len(hex)/2\n    local pp = 0\n    for i =0,len-1 do\n        local bi = iota.hexToByte(hex,i,'B')\n        pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n    end\n    return pp\nend \n	INLINE	2018-08-17 15:22:37.45+08	2019-01-14 16:28:45.488+08	2018-08-17	\N
fc53b2d3-05e5-4bd9-ac41-66bfa2283dd9	GX_LF_XW	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	bit = {data32 = {}}\nfor i = 1, 32 do\n    bit.data32[i] = 2 ^ (32 - i)\nend\n\nfunction bit:d2b(arg)\n    local tr = {}\n    for i = 1, 32 do\n        if arg >= self.data32[i] then\n            tr[i] = 1\n            arg = arg - self.data32[i]\n        else\n            tr[i] = 0\n        end\n    end\n    return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n    local nr = 0\n    for i = 1, 32 do\n        if arg[i] == 1 then\n            nr = nr + 2 ^ (32 - i)\n        end\n    end\n    return nr\nend --bit:b2d\n\nfunction bit:_or(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n\n    for i = 1, 32 do\n        if op1[i] == 1 or op2[i] == 1 then\n            r[i] = 1\n        else\n            r[i] = 0\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction bit:_xor(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n    for i = 1, 32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction bit:_and(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n\n    for i = 1, 32 do\n        if op1[i] == 1 and op2[i] == 1 then\n            r[i] = 1\n        else\n            r[i] = 0\n        end\n    end\n    return self:b2d(r)\nend --bit:_and\n\nlocal pp = 0\nfunction check(pcmd)\n    pp = bit:_and(PCBxor(pp, pcmd), 0xff)\n    return pp\nend\n\nfunction bit:_rshift(a, n)\n    local op1 = self:d2b(a)\n    local r = self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i = 1, n do\n            for i = 31, 1, -1 do\n                op1[i + 1] = op1[i]\n            end\n            op1[1] = 0\n        end\n        r = op1\n    end\n    return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a, n)\n    local op1 = self:d2b(a)\n    local r = self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i = 1, n do\n            for i = 1, 31 do\n                op1[i] = op1[i + 1]\n            end\n            op1[32] = 0\n        end\n        r = op1\n    end\n    return self:b2d(r)\nend --bit:_lshift\n\nstart = function()\n    log.debug('GX_LF_XW start %s, ctx=', 'GX_LF_XW.lua', json.encode(ctx.device))\n\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n        log.debug('GX_LF_XW 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ', moduleNo, json.encode(moduleNo))\n    else\n        moduleNo = device.props.moduleId\n        log.debug('GX_LF_XW 设备模块通道 属性获取 m=%s  接口props=%s', moduleNo, json.encode(device.uplink.props))\n    end\n\n    if tonumber(moduleNo) > 255 then\n        local errout = {\n            data = {},\n            result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff = ''\n    buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n    buff = iota.appendHexByte(buff, 0x04, endian) --1: CMD 4\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexByte(buff, 0x04, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexByte(buff, 0x02, endian) --1: CMD 1\n    buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n        local errout = {\n            data = {},\n            result = {code = 1001, msg = '采集超时'}\n        }\n       result = json.encode(errout)\n       \n    end\n   ctx:done(result)\nend\n\nunmarshall = function(hex, moduleNoStr)\n    log.debug('GX_LF_XW  m=%s  received=%s', moduleNo, hex)\n    -- var_dump(ctx,3,"")\n    local out = {\n        data = {},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        -- 010404800101488222\n        local data_by = 0\n        local elongation = 0\n        if iota.hexToByte(hex, 1, 'B') == 0x04 then\n            local by = string.sub(hex, 7, 15) --data\n            local sign = 1\n            data_by = iota.hexToByte(by, 0, 'B')\n            if data_by >= 0x80 then\n                data_by = bit:_and(data_by, 0x7f)\n                sign = -1\n            end\n            local integer = bit:_or(bit:_lshift(bit:_and(data_by, 0xffff), 8), iota.hexToByte(by, 1, 'B')) * sign\n            local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by, 2, 'B'), 0xffff), 8), iota.hexToByte(by, 3, 'B')) / 1000 * sign\n\n            elongation = integer + decim\n            out.data = {\n                length = elongation\n            }\n        else\n            local cmd = iota.hexToByte(hex, 2, 'B')\n            if cmd == 0x06 then\n                out.result = {\n                    code = 1005,\n                    msg = '功能号错误'\n                }\n            elseif cmd == 0x05 then\n                out.result = {\n                    code = 1005,\n                    msg = '寄存器错误'\n                }\n            elseif cmd == 0x04 then\n                out.result = {\n                    code = 1005,\n                    msg = '正常操作发生异常'\n                }\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n    if data == nil or (string.len(data) / 2 ~= 9 and string.len(data) / 2 ~= 5) then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data, 1, 'B') ~= 0x04 and iota.hexToByte(data, 1, 'B') ~= 0x84 then\n        errormsg = 'CMD is not right,0x04/0x84'\n        errcode = 1003\n        return false\n    end\n    if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data, 0, 'B')) then\n        errormsg = 'Invalid moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2018-08-13 14:58:12.131+08	2019-05-21 14:48:46.113+08	2018-08-13	\N
80216459-82ea-4fd2-b8a5-a8857b794d5e	tlsf_collector_1606	\N	采集仪协议	1.0	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	f	fc6696f3-32e6-42c8-b8de-8409f5bfe865	Lua	--//svn/SavoirCloud/Documents/04 项目资料/2017-05/通联四方协议.txt\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n\tlog.debug("load script %s", "tlsf_1606")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("tlsf_1606:LUA:根设备devices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("tlsf_1606:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n        \tlocal moduleStr\n\t\t\t\n\t\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStr=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\tlog.debug("tlsf_1606 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\t\telse\n\t\t\t\tmoduleStr=device.props.moduleId\t\t\n\t\t\t\tlog.debug("tlsf_1606 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\t\tend\n\t\t\tmoduleStr=string.format("%05d",moduleStr)  -- 补全 5位的模块号，比如“00001”\n\t\t\tlocal channelStr=tostring(child.props.channelId) \n            log.debug("tlsf_1606:模块%s通道%s的deviceId是%s：",moduleStr,channelStr,tostring(child.id))\n\t\t\t\n\t\t\tlocal package_Str=string.format("CWM80x %s Begin %s",moduleStr,channelStr)\n\t\t\tlocal buff=StrToHex(package_Str)\t\t\n\t\t\tbuff=iota.appendHexByte(buff, 0x0d, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x0a, endian)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("tlsf_1606:模块%s通道%s的数据接收成功,开始解析",moduleStr,channelStr)    \n\t\t\tresult = unmarshall(resp,child,moduleStr,channelStr)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("tlsf_1606:模块%s通道%s的数据接收失败",moduleStr,channelStr)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("tlsf_1606:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('tlsf_1606:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("tlsf_1606:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\nend\n\n\n        --m= 2，C= 16 ,frequency=1630.9 temp= 0\n        --536e3d3030303032204261743d342e302031372f30362f31392030373a35343a3233205031363d313633302e39205431363d302e30200b800d0a \n\t\t--Sn=00002 Bat=4.0 17/06/19 07:54:23 P16=1630.9 T16=0.0\nunmarshall=function(hex,subDevice,moduleStr,channelStr)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\tlocal ModuleChar = "M";\n        local FrequencyChar = "P";\n        local TempChar = "T";\n        local VoltageChar = "V";\n        local CurrentChar = "I";\n\t    local channelNo=""\n\t\tlocal chlen   --获取通道长度\n\t\n\t--local subModuleId=subDevice.props.moduleId\n\t--local subChannelId=subDevice.props.channelId\n\t--log.debug("tlsf_1606:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        sData=HextoStr(hex)\n\t\tSData=string.gsub(sData,'\\r\\n','')\n\t\tlocal allResponse=Split(sData,' ')\n\t\t--移除表内的“”和nil\n        for i,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n            table.remove(allResponse,k)\n                log.debug("tlsf_1606:".."表内的“”和nil 移除元素为 "..tostring(allResponse[i]))\n            else\n\t\t\t    local type_sensor=string.sub(allResponse[i],1,1)\n\t\t\t\t\n\t\t\t\t--模数\n\t\t\t\tif type_sensor==ModuleChar then\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t   break\n\t\t\t\t\t\tend\t\t\t\t\t\n                    end\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t  break\n\t\t\t\t\tend\n\t\t\t\t\t\n                    chlen=chlen-1  \n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal tempLength=string.len(allResponse[i+1])-chlen-2\n\t\t\t\t\tlocal Module_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal Module=tonumber(Module_str)\n\t\t\t\t\tlocal freq=math.sqrt(Module *1000)\n\t\t\t\t\tlocal tempData_str=string.sub(allResponse[i+1],chlen+2+1,chlen+2+1+tempLength)\n\t\t\t\t\tlocal tempIsNum=IsNumberic(tempData_str)\n\t\t\t\t    local temp=0\n\t\t\t\t\tif tempIsNum then\n\t\t\t\t\t\ttemp=tonumber(tempData_str)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "18760c89-e1c8-416d-a74e-8e273f8329a7" then --振弦公式ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)+B\n\t\t\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlocal b = subDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\t\tlog.debug("tlsf_1606:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s",moduleStr,channelStr,k,kt,f0,t0,freq,temp)\n\t\t\t\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil and b~=nil then\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+b\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("tlsf_1606:模数模块%s通道%s的phy是：%s",moduleStr,channelStr,Phy)\n\t\t\t\t\tend\n\t\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\tfrequency=freq,\t\n\t\t\t\t\t\t\t\ttemperature=temp,\n\t\t\t\t\t\t\t\tphy=Phy\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--频率\n\t\t\t\tif type_sensor==FrequencyChar then --\n\t\t\t\t    local singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t   break\n\t\t\t\t\t\tend\t\t\t\t\t\n                    end\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t  break\n\t\t\t\t\tend\n\t\t\t\t\t\n                    chlen=chlen-1  \n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal tempLength=string.len(allResponse[i+1])-chlen-2             \n\t\t\t\t\tlocal frequency_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal freq=tonumber(frequency_str)\n\t\t\t\t\tlocal tempData_str=string.sub(allResponse[i+1],chlen+2+1,chlen+2+1+tempLength)\n\t\t\t\t    local tempIsNum=IsNumberic(tempData_str)\n\t\t\t\t    local temp=0\n\t\t\t\t\tif tempIsNum then\n\t\t\t\t\t\ttemp=tonumber(tempData_str)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "18760c89-e1c8-416d-a74e-8e273f8329a7" then --振弦公式ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n\t\t\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlocal b = subDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\t\tlog.debug("tlsf_1606:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s",moduleStr,channelStr,k,kt,f0,t0,freq,temp)\n\t\t\t\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil and b~=nil then\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+b\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("tlsf_1606:频率模块%s通道%s的phy是：%s",moduleStr,channelStr,Phy)\n\t\t\t\t\tend\n\t\t\t\t\tsubData.data={\n\t\t\t\t\t\t\t\tfrequency=freq,\t\n\t\t\t\t\t\t\t\ttemperature=temp,\n\t\t\t\t\t\t\t\tphy=Phy\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t    --电压\n\t\t\t\tif type_sensor==VoltageChar then --\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t   break\n\t\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t  break\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tchlen=chlen-1    --j下标从1开始 非0\n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal voltage_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal voltage=tonumber(voltage_str)\n\t\t\t\t    subData.data={\n\t\t\t\t\t\t\t\tvoltage=voltage\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--电流\n\t\t\t\tif type_sensor==CurrentChar then --\n\t\t\t\t\tlocal singleDatalen=string.len(allResponse[i])\n\t\t\t\t\tfor j=1,singleDatalen,1 do\n\t\t\t\t\t\tchlen=j\n\t\t\t\t\t\tlocal str=string.sub(allResponse[i],1+j,1+j)\n\t\t\t\t\t\tif(str~="=") then\n\t\t\t\t\t\t\tchannelNo=channelNo..str\n\t\t\t\t\t\telse\n\t\t\t\t\t\t   break\n\t\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tif(channelNo ~=channelStr) then\n\t\t\t\t\t  break\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tchlen=chlen-1    --j下标从1开始 非0\n\t\t\t\t\tlocal length=string.len(allResponse[i])-chlen-2\n\t\t\t\t\tlocal current_str=string.sub(allResponse[i],chlen+2+1,chlen+2+1+length)\n\t\t\t\t\tlocal current=tonumber(current_str)\n\t\t\t\t    subData.data={\n\t\t\t\t\t\t\t\tcurrent=current\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\n\t\t\tend\n        end\n\t\t\t\t\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if subdevices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n    \tfor index,child in pairs(subdevices) do\n        \tif child.device.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.device.channelId == tostring(channelNoId) then\n                 log.debug("tlsf_1606:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("tlsf_1606:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("tlsf_1606:subdevices是nil")\n    \treturn nil\n    end\nend\n\n\nIsValid=function(checkdata,moduleStr)\n    log.debug("tlsf_1606:".."数据校验开始:%s",checkdata)\n    if checkdata == nil  then\n        errormsg = 'checkdata is nil'\n        errcode = 1001\n        return false\n    end\n\tlocal moduleStrCheck=tonumber(HextoStr(string.sub(checkdata,7,16)))\n\tif tonumber(moduleStr) ~= moduleStrCheck  then\n        errormsg = string.format('module=%s is wrong[%s]',tonumber(moduleStr),moduleStrCheck)\n        errcode = 1001\n        return false\n    end\n\t\n\t\n\tlocal plusSum16=string.sub(checkdata,-8,-5)\n    local plu16={}\n\tlocal sub_checkdata=string.sub(checkdata,1,-9)\n    local r_plusSum16 = CheckPlusSum(sub_checkdata, 1, string.len(sub_checkdata)/2)\n\tlog.debug('tlsf_1606:plusSum16=%s',plusSum16)\n    if tonumber(plusSum16,16)~=r_plusSum16 then\n      errormsg = 'checkPlusSum16 is false'\n      errcode = 1004\n\t  log.debug('tlsf_1606: plusSum16校验失败：plusSum16=%s,r_plusSum16=%s',tonumber(plusSum16,16),r_plusSum16)\n      return false\n    end\n\n    log.debug("tlsf_1606:校验通过")\n    return true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nCheckPlusSum=function(Hex_package, startIndex, endIndex)\n    local sum = 0\n    for i = startIndex, endIndex,1 do\n        local Hex_byte=string.sub(Hex_package,2*i-1,2*i)\n        sum = (sum + tonumber(Hex_byte,16)) % 0xffff\n    end        \n    local result = sum --& 0xff\n    return result\nend	INLINE	2018-01-08 15:36:37.219+08	2018-07-09 15:27:12.037+08	2018-01-04	\N
e8cedb2f-f0bd-401c-bea3-abd04f01319e	fs-httpNewTJ	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('httpNewTJ   LUA http server start')\nend\n\nonData =\n    function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('httpNewTJ [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    --local id = httpbody.ID\n    --log.debug('httpNewTJ  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    local bodydata = json.decode(bodydataStr)\n    local hxzId = bodydata.HxzId\n    local serverIP = '218.3.126.49'\n    local port = '19700'\n    local serverTime = getTimeNowStr()\n    local url = httpbody.URL\n    log.debug('httpNewTJ [%s] url=%s type=%s', moduleNo, url, type(url))\n    local urlsperts = Split(url, '/')\n    local len_urlsperts = table_leng(urlsperts)\n    local type_long = urlsperts[len_urlsperts]\n    local cmd_types = Split(type_long, '?')\n    local cmd_type = cmd_types[1]\n    log.debug('httpNewTJ [%s] cmd_type=%s', moduleNo, cmd_type)\n    if cmd_type == 'LoginDataCrane' then\n        local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataCrane","data":{"RangeSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":20,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","LockFlag":"0","IdSetError":"0","RecordId":"63098da082984bd499217f2c980064ad","HeightSetError":"0","AngleSetError":"0","ObliguitySetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n        asend_HttpResponse(response_LoginData_bodyStr)\n    elseif cmd_type == 'BaseDataCrane' then\n        local response_BaseData_bodyStr = '{"cmd":"BaseDataCrane","data":{},"status":0}'\n        asend_HttpResponse(response_BaseData_bodyStr)\n    elseif cmd_type == 'RuntimeData' then\n        local response_RuntimeData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n        asend_HttpResponse(response_RuntimeData_bodyStr)\n        local isOnline=0\n        local isDownline=0\n        local RTime=''\n        local DownlineTime = bodydata.DownlineTime\n        local OnlineTime = bodydata.OnlineTime\n        log.debug('httpNewTJ [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime,OnlineTime)\n        if DownlineTime~='' then\n            isDownline=1\n            RTime=DownlineTime\n        else\n            isOnline=1\n            RTime=OnlineTime\n        end\n        out.data = {\n            isDownline = isDownline,\n            isOnline = isOnline\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'RealtimeDataCrane' then --实时数据\n        local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataCrane","data":{},"status":0}'\n        asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n        --获取实时数据\n        local RTime = bodydata.RTime --单次工作完成时刻\n        local Multiple = bodydata.Multiple\n        local Moment = bodydata.Moment\n        local Weight = bodydata.Weight\n        local RatedWeight = bodydata.RatedWeight\n        local WindSpeed = bodydata.WindSpeed\n        local WindLevel = bodydata.WindLevel\n        local RRange = bodydata.RRange\n        local Height = bodydata.Height\n        local Angle = bodydata.Angle\n        local Obliguity = bodydata.Obliguity\n\n        out.data = {\n            Multiple = tonumber(Multiple),\n            Moment = tonumber(Moment),\n            Weight = tonumber(Weight),\n            RatedWeight = tonumber(RatedWeight),\n            WindSpeed = tonumber(WindSpeed),\n            WindLevel = tonumber(WindLevel),\n            RRange = tonumber(RRange),\n            Height = tonumber(Height),\n            Angle = tonumber(Angle),\n            Obliguity = tonumber(Obliguity)\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'AlarmDataCrane' then\n        local response_AlarmData_bodyStr = '{"cmd":"AlarmDataCrane","data":{},"status":0}'\n        asend_HttpResponse(response_AlarmData_bodyStr)\n    elseif cmd_type == 'WorkDataCrane' then\n        --获取一个循环数据\n        -- local workEndTime = bodydata.WorkEndTime --单次工作完成时刻\n        -- local workMultiple = bodydata.WorkMultiple --倍率   1~99\n        -- local workWindSpeedAlarm = bodydata.WorkWindSpeedAlarm --工作循环中是否有风速报警 0:正常 1:报警\n        -- local workMaxRange = bodydata.WorkMaxRange --工作循环最大力矩时的幅度 0.00~99.99m\n        ---- local workTime = bodydata.WorkTime --工作循环持续时长 单位（s）\n        --  local workMaxWindSpeed = bodydata.WorkMaxWindSpeed --工作循环最大风速\n        -- local workMaxTorque = bodydata.WorkMaxTorque --工作循环最大力矩百分比 0.00~655.35%\n        -- local workRatedWeight = bodydata.WorkRatedWeight --工作循环最大力矩时的额定载重 0.00~99.99t\n        -- local workWeight = bodydata.WorkWeight --工作循环最大力矩时的吊重 0.00~99.99t\n        -- local workMaxHeight = bodydata.WorkMaxHeight --工作循环中最大高度 0.00~655.35m\n        -- out.data = {\n        --  workMultiple = tonumber(workMultiple),\n        -- workWindSpeedAlarm = tonumber(workWindSpeedAlarm),\n        -- radius = tonumber(workMaxRange),\n        -- workTime = tonumber(workTime), --完成耗时s\n        -- windSpeed = tonumber(workMaxWindSpeed),\n        -- torquePercent = tonumber(workMaxTorque),\n        -- workRatedWeight = tonumber(workRatedWeight),\n        -- loadValue = tonumber(workWeight),\n        -- height = tonumber(workMaxHeight)\n        -- }\n        --out.time = unixtimestamp(workEndTime, moduleNo)\n        --log.debug('httpNewTJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        --ctx:notify(json.encode(out))\n        local response_WorkData_bodyStr = '{"cmd":"WorkDataCrane","data":{},"status":0}'\n        asend_HttpResponse(response_WorkData_bodyStr)\n    elseif cmd_type == 'GpsData' then\n        local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n        asend_HttpResponse(response_GpsData_bodyStr)\n    end\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('httpNewTJ [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n	INLINE	2018-11-09 17:36:10.253+08	2021-02-19 16:21:21.615+08	2018-11-09	\N
0e7f12e2-5208-4731-b100-1d4dd5d7bbf9	DaLianFiber_1180	\N	非简测的通用协议（老师版）	1.0	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	f	72d32d5c-6aa0-4de8-aa1f-fa37e01ffc53	Lua	--//04 项目资料/2017-06/通辽土壤墒情温湿度监测/光纤光栅码流格式.png\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--48个通道\n----E2030000080000004A454D45544543480C0000003030383032463139444430333000120065000000803FE107061E0C17D44DA65FBD44120066000000803FE107061E0C17D44DEE8BBD44120067000000803FE107061E0C17D44D32BABD44120068000000803FE107061E0C17D44DDDF4BD44120069000000803FE107061E0C17D44DB320BE4412006A000000803FE107061E0C17D44D684FBE4412006B000000803FE107061E0C17D44D9581BE4412006C000000803FE107061E0C17D44DD4B4BE4412006D000000803FE107061E0C17D44D27F6BE4412006E000000803FE107061E0C17D44D4407BF4412006F000000803FE107061E0C17D44DE642BF44120070000000803FE107061E0C17D44DF270BF44120071000000803FE107061E0C17D44D9EA9BF44120072000000803FE107061E0C17D44DB1D6BF44120073000000803FE107061E0C17D44D7F00C044120074000000803FE107061E0C17D44DB728C044120075000000803FE107061E0C17D44D3569C044120076000000803FE107061E0C17D44D238AC044120077000000803FE107061E0C17D44D7FC4C044120078000000803FE107061E0C17D44D6DF2C044120079000000803FE107061E0C17D44D5619C14412007A000000803FE107061E0C17D44DAD4AC14412007B000000803FE107061E0C17D44D8482C14412007C000000803FE107061E0C17D44D04ABC14412007D000000803FE107061E0C17D44D50DDC14412007E000000803FE107061E0C17D44DE713C24412007F000000803FE107061E0C17D44D1D3CC244120080000000803FE107061E0C17D44D9C73C244120081000000803FE107061E0C17D44DA29FC244120082000000803FE107061E0C17D44D4FD8C244120083000000803FE107061E0C17D44D64FDC244120084000000803FE107061E0C17D44D6336C344120085000000803FE107061E0C17D44DB460C344120086000000803FE107061E0C17D44DC58DC344120087000000803FE107061E0C17D44D6BC0C344120088000000803FE107061E0C17D44DF9F1C344120089000000803FE107061E0C17D44D9A1BC44412008A000000803FE107061E0C17D44DCD55C44412008B000000803FE107061E0C17D44D1279C44412008C000000803FE107061E0C17D44D6DA7C44412008D000000803FE107061E0C17D44D4BE4C44412008E000000803FE107061E0C17D44DE00EC54412008F000000803FE107061E0C17D44DA63BC544120090000000803FE107061E0C17D44D046EC544120091000000803FE107061E0C17D44D7B96C544120092000000803FE107061E0C17D44D80CDC544120093000000803FE107061E0C17D44DE1FFC544120094000000803FE107061E0C17D44D1832C64400002C87\n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "JC_1180.lua", device.props.moduleId or "[nil]")\n      --log.debug("JC_1180:".."LUA: ctx is =%s", json.encode(device))\n   -- ok,resp=ctx:ssend("0102030405060708",15000)\n   -- log.debug("JC_1180:".."测试下发正常")\nend\n\nonData=function(hex)\n    --log.debug("JC_1180:".."LUA: onData: data is =%s", hex)\n\t--log.debug("JC_1180:".."LUA:device : data is =%s", json.encode(device))\n    --log.debug("JC_1180:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\n    local buffer=hex\n    --数据域 内的索引号\n    local ErrorCode = IsValid(buffer)\n    if ErrorCode then\n        log.debug("JC_1180:buffer==> %s",buffer)\n        --获取子字符串表\n        local sensorcnt=iota.hexToShort(buffer,32,'L')\n\t\tlocal channelno=0\n\t\tlocal buf=string.sub(buffer,2*20+1,2*(31+1))\n\t\tlocal modle1=toStrHex(buf)\n\t\tlocal modle=0\n\t\tlocal Value=0\n\t\t\n\t\tfor i=0,sensorcnt-1,1 do\n\t\t\tlocal num=iota.hexToShort(buffer,36+i*20,'L')\n\t\t    channelno=num %100\n\t\t\tmodle=getIntPart(num/100)\t\n\t\t\tlocal module_str=modle1..modle\t\t\t\n\t\t\tValue=iota.hexToFloat(buffer,50+i*20,'L')\n\t\t\t\n\t\t\tlocal moduleNo=module_str\n\t\t\tlocal channelNo=channelno\n\t\t\t\n\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\tlocal deviceId\n\t\t\tif childDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tlog.debug("JC_1180:循环 i=%s,sensorcnt=%s,num=%s,moduleNo=%s,channelNo=%s,deviceId=%s",i,sensorcnt,num,moduleNo,channelNo,deviceId)\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t  phy=Value\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t  }\n\t\t\ttable.insert(out.data,data1)\n\t\tend     \n       \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("JC_1180: resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props ~='null' or child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n                 log.debug("JC_1180:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("JC_1180:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("JC_1180:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("JC_1180:校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local data=string.sub(alldata,1,-4)\n    log.debug("data:"..data)\n\n    local crc16_Str=string.sub(alldata,-8,-1)\n    local checkData = iota.appendHexCrc(data,'L',0);\n\tlocal crc16_Str_check=string.sub(checkData,-8,-1)\n    log.debug("JC_1180:".."原crc16是："..crc16_Str)\n       \n    log.debug("JC_1180:crc16_Str_check是："..tostring(crc16_Str_check))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n     --   errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    log.debug("JC_1180:".."校验通过")\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetIntPart=function(x)  --取整\n    if x<= 0 then\n        return math.ceil(x)\n    end\n    if math.ceil(x) == x then\n        x = math.ceil(x)\n    else\n        x = math.ceil(x)-1\n    end\n\n\n    return x\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n	INLINE	2018-01-08 16:20:05.743+08	2018-03-27 16:00:07.78+08	2018-01-08	\N
9ee874f0-a205-421a-8249-73fd9c6b4901	zdhl_air_1	\N		1.0	d3ab1979-3439-47ba-aa98-82b61a9d6260	d3ab1979-3439-47ba-aa98-82b61a9d6260	f	d3ab1979-3439-47ba-aa98-82b61a9d6260	Lua	\nstart=function()\n    log.debug("start zdhl_air_1.lua , ctx= %s",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tlocal moduleNo=device.uplink.props.module \n    buff=iota.appendHexByte(buff, moduleNo, endian)         \n    buff=iota.appendHexByte(buff, 4, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 16, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)  \n\n    log.debug(" zdhl_air_1 ssend %s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "zdhl_air_1.lua",hex)\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    local module=iota.hexToByte(hex,0,'B')\n    local length=iota.hexToByte(hex,2,'B') \n    if (string.len(hex)/2==length+5) then\n        \n        --010304012c01f43a11\n        --\n\n        for i=1,length/2 do\n            local childDevice=getDeviceInfo(i)\n            local deviceid\n            if childDevice~=nil then\n                deviceid=childDevice.id\n                log.debug("zdhl_air_1:子设备原形childDevice=%s",json.encode(childDevice))\n                log.debug("zdhl_air_1:子设备device.id: "..tostring(device.id))\n                \n                local Phy=iota.hexToShort(hex,i*2+1,'B')\n                    \n                local data1 = {\n                    data={\n                        physicalvalue=Phy\n                        },\n                        device=deviceid,\n                        type=1                       \n                        }\n                log.debug("Phy结果=%s",Phy)\n                table.insert(out.data,data1)    \n            end\n        end\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "zdhl_air_1.lua",json.encode(out))\n    return json.encode(out)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId)  then\n                 return child\n           \t  end\n\t\tend\n    else\n       log.debug("zdhl_air_1:".."subdevices是nil")\n    \treturn nil\n    end\nend\n	INLINE	2018-05-03 08:52:14.917+08	2018-05-07 11:04:01.205+08	2018-05-03	\N
8757fbc2-2ae6-42b5-b888-0f5ce8edb8cc	hc_settlement_1	\N	上海华测创时测控科技有限公司	1.0	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	f	14332895-1778-42da-912a-4314147f2555	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "hc_settlement_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0x16, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==26) then\n        \n        --01040842DEEB3E419300004526 \n        --"settlement":   111.459457,\n        --"temp": 18.375\n        --print("parsing data", hex)\n       \n        local settlement =iota.hexToFloat(hex,3,'B');\n        local temp =iota.hexToFloat(hex,7,'B');    \n        out.data = {\n            settlement=settlement,\n            temp=temp\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-12-18 17:13:46.687+08	2018-02-28 18:32:12.196+08	2017-12-18	\N
09635bcc-db2c-4e5a-b933-638501dad998	lywh__8001	\N	升级版  厂家要求 收到数据给回复	1.0	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	Lua	\n-- start=function()\n    -- log.debug("load script %s, moduleId=%s", "lywh__8001.lua", device.props.moduleId or "[nil]")\n     -- log.debug("lywh__8001:".."LUA: ctx is =%s", json.encode(device))\n   -- ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("lywh__8001:".."测试下发01020304正常")\n --end\n\n \n \n --AA2D00FFFFFFFFFF5900301032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFBB\n --通道1    temperature=5\n  --通道2    temperature=1.2\n   --通道3    temperature=0.6\n    --通道4    temperature=0.9\n\t --通道5    temperature=387.4\n\t  --通道6    temperature=-1.1\nonData=function(hex)\n    log.debug("lywh__8001 收到数据=%s", hex)\n\t--log.debug("lywh__8001 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal data=hex\n\tif string.upper(data)=="3E74696D656375720D0A" then\n\t   --请求同步服务器时间\n\t   local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n\t   local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n\t   ok=ctx:asend(timeResponse)\n\telse\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('lywh__8001 数据有效=%s',hex)\n\t\n\t    \n        local temp={}\n\t\tfor i=1,16,1 do\t\t\n\t\t   temp[i]=iota.hexToShort(hex,12+i*2,'L');\t\n\t\tend\n\n\t\tlocal moduleId=device.uplink.props.module\n\t\t--分析单类数据\n        for k,v in ipairs(temp) do\n\t\t\tlog.debug('lywh__8001 分析单类数据 k=%s,v=%s',k,v)\n                \n\t\t\t\tlocal channelId=k\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\t\t\t\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t    log.debug('lywh__8001 moduleId=%s,channelId=%s id=%s,temperature=%s',moduleId,channelId,childDevice.id,temp[k])\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttemperature=temp[k]/10.0,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\t\n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\n    end\nend\n\nIsValid=function(data)\n\t\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=48 then\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n        ok=ctx:asend("4552")\n        return false\n    end\t\n\n\tif string.upper(string.sub(data,1,6)) ~= 'AA552E' then  \n            errormsg = 'Data is Invalid'\n            errorcode = 1001\n        ok=ctx:asend("4552")\n        return false\n    end\n   --累加和校验\n    local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n\tlocal checksum16_Hex=string.format("%02x",checksum16)\n    local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n    log.debug("lywh__8001 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n    if checksum16_Hex~=sum16_Hex then\n    \tlog.debug("lywh__8001 累加和校验失败")\n        ok=ctx:asend("4552")\n        errormsg = 'Data is Invalid'\n         errorcode = 1001\n        return false\n    end\n    ok=ctx:asend("4f4b")\n    log.debug("lywh__8001 校验通过")\n    return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n    local sum = 0\n    for i = startIndex, endIndex,4 do\n        sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n    end        \n    local result = sum \n    return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("lywh__8001 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    -- log.debug("lywh__8001:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("lywh__8001 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n        \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t  \t \n                if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("lywh__8001:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n       \t \tend\n\t\tend\n    else\n       log.debug("lywh__8001:  subdevices是nil")\n    \treturn nil\n    end\nend\n\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nStrToHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend	INLINE	2018-07-27 15:34:11.106+08	2018-09-11 09:18:35.537+08	2018-07-27	\N
0af7b979-0985-40de-8e79-654d7b90c35a	多条数据~~~	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	start=function()\n  --log.debug("协议2 start~~~~~~~ ")\n  ctx:asend("00110011")\nend\n\nonData=function()\n ctx:done("{\\"data\\":[{\\"data\\":{\\"x\\":11.11,\\"y\\":22.22,\\"temp\\":33.33},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-03-23T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":1,\\"y\\":1,\\"temp\\":3},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":2,\\"y\\":58,\\"temp\\":27},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1},{\\"data\\":{\\"x\\":37,\\"y\\":58,\\"temp\\":37},\\"device\\":\\"b8aab8dc-6e4d-4c55-a778-d0f516d90a59\\",\\"time\\":\\"2018-06-08T10:25:30+08:00\\",\\"type\\":1}],\\"result\\":null,\\"type\\":2}")\nend\n	INLINE	2018-06-08 15:50:57.676+08	2018-09-06 15:28:18.879+08	2018-06-08	\N
3c8986bd-7bbb-4132-b2f0-eeb132743564	JM_1548	\N		1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	start =function()\n    log.debug('start %s, moduleId=%s', 'jm_lvdt_1548.lua', device.props.moduleId or 'nil')\n\n    local endian = 'B'\n    local moduleNo = device.uplink.props.module\n\n    if string.len(moduleNo) < 8 then --采集箱编号8位\n        local strlen = 8 - string.len(moduleNo)\n        for i = 1, strlen do\n            moduleNo = '0' .. moduleNo\n        end\n    end\n    log.debug('jm_1548  : moduleNo =%s', moduleNo)\n    local buff_str = '#' .. moduleNo .. 'A!' --测量数据\n    local buff = StrToHex(buff_str)\n    local ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n        local errorout = {\n            data = {},\n            result = {}\n        }\n        errorout.result = {code = 1003, msg = '采集超时'}\n        result = json.encode(errorout)\n    end\n    ctx:done(result)\nend\n\n --243737EE38303030303030389033303331C735353633D330B021    \n  --module=80000008\n--"length": 30.31,\n--"length0": 55.63,\n--"temperature": -50\nunmarshall =\n    function(hex, moduleNoStr)\n\n\n    log.debug('jm_1548 收到数据=' .. hex)\n    local out = {\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        local hexDatas = Get128Split(hex)\n        local moduleNocheck = HextoStr(hexDatas[2])\n        if moduleNocheck == moduleNoStr then\n            local length = tonumber(HextoStr(hexDatas[3])) / 100\n            --local length0 = tonumber(HextoStr(hexDatas[4])) / 100\n            --local temperature = (tonumber(HextoStr(hexDatas[5])) - 500) / 10\n            out.data = {\n                length = length\t--,\n               -- length0 = length0,\n               -- temperature = temperature\n            }\n        else\n            out.result = {code = 1002, msg = string.format('模块号%s≠%s',moduleNoStr,moduleNocheck)}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStr)\n    log.debug('jm_1548 开始校验数据=%s', data)\n    local checkLength = string.len(data) / 2\n    if data == nil or checkLength ~= 26 then\n        errormsg = 'Data is nil or invalid length=' .. checkLength\n        errcode = 1001\n        log.debug('jm_1548 [%s]  长度校验失败 data=%s', moduleNoStr, data)\n        return false\n    end\n    if iota.hexToByte(data, 0, 'B') ~= 0x24 then\n        errcode = 1003\n        errormsg = '返回数据头错误'\n        return false\n    end\n    local dataLength = string.len(data) / 2\n\n    --if iota.hexToByte(data, dataLength - 1, 'B') ~= 0x21 then\n    --    errcode = 1003\n    --    errormsg = '返回数据尾错误'\n    --    return false\n    --end\n\n    log.debug('jm_1548 [%s] 数据校验通过', moduleNoStr)\n    return true\n    --crc\nend\n\n-- Hex-> 字符串\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\nGet128Split = function(buff_hex)\n    local buffs = {}\n    local tempStr = ''\n    local j = 1\n    for i = 1, string.len(buff_hex), 2 do\n        local Y_str = string.sub(buff_hex, i, i + 1)\n        local Y = tonumber(Y_str, 16)\n        if Y >= 128 then\n            buffs[j] = tempStr\n            log.debug('jm_1548 buffs[%s]=%s',j,buffs[j])\n            j = j + 1\n            tempStr = ''\n        else\n            tempStr = tempStr .. Y_str\n        end\n    end\n   if i==string.len(buff_hex) or i==string.len(buff_hex)-1 then\n       buffs[j] = tempStr\n      log.debug('jm_1548 buffs[%s]=%s',j,buffs[j])\n    end\n  \n    return buffs\nend\n	INLINE	2018-11-21 13:43:13.64+08	2018-11-22 15:13:55.316+08	2018-11-21	\N
0bd15600-333e-47d6-b4fb-c3b8b26c2dcf	fs_file_transfer	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n\t--log.debug("fs_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\t--log.debug("fs_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_file_transfer: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\t--log.error("fs_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\t--log.error("fs_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\t--log.debug("fs_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\t--log.debug("fs_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\t--log.debug("fs_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n            -- if pos >= strLen  then\n                -- log.debug("fs_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n            -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\t--log.debug("fs_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\t--log.debug("fs_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\t--log.debug("fs_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\t--log.debug("fs_file_transfer : content  =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tlog.debug("fs_file_transfer : json  =%s", v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("fs_file_transfer id=%s 设备类型=%s,%s",device.uplink.props.id,childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",((tonumber(jsondata.T)-28800000)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='wsd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidity= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='cx' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tanglex = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tangley = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='lf' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  lf=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = jsondata.RV[1] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n                    if childDevice.props.sensortype=="yc" then --压差\n\t\t\t\t\t\t--log.debug("fs_file_transfer  yc=%s",json.encode(childDevice))\n                        local data3 ={\n                            data={\n                                pressure=jsondata.RV[1] or 0,\n                                temperature = jsondata.RV[2] or 0,\n                \t\t\t\tssagee =jsondata.PV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60))        \n                            }\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data3),data3.time,jsondata.T)\t\t\t\n                        table.insert(out.data,data3)\n                    end\t\t\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        --log.debug("fs_file_transfer  zx=%s",json.encode(childDevice))\n                        local data4={\n                            data={\n                                    physicalvalue = jsondata.PV[1] or 0,\n                                    frequency=jsondata.RV[1],\n                                    temperature=jsondata.RV[2],\n                                    am=jsondata.RV[3],\n                \t\t\t\t\twaterlevel=jsondata.PV[1],\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data4),data4.time,jsondata.T)\t\n                            table.insert(out.data,data4)\n                    end\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\t--log.debug("ct_file_transfer  bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='cj' then\n\t\t\t\t\t\t--log.debug("ct_file_transfer  cj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='noise' then\n\t\t\t\t\t\t--log.debug("fs_file_transfer  noise=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tnoise = jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='weight' then\n\t\t\t\t\t\tlog.debug("fs_file_transfer  weight=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal axies = {\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[9])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[10])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[11])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[12])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[13])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[14])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[15])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[16])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[17])/1000),\n\t\t\t\t\t\t\t\ttostring(tonumber(jsondata.SRT[18])/1000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tlocal overloads = ""\n\t\t\t\t\t\tlog.debug("fs_file_transfer jsondata axies=%s,grossWeight=%s",jsondata.SRT[3],tostring(tonumber(jsondata.SRT[1])/1000))\n\t\t\t\t\t\tif tonumber(jsondata.SRT[3]) >= 5 and tonumber(jsondata.SRT[1])/1000 >= 55 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 4 and tonumber(jsondata.SRT[1])/1000 >= 43 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 3 and tonumber(jsondata.SRT[1])/1000 >= 30 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telseif tonumber(jsondata.SRT[3]) == 2 and tonumber(jsondata.SRT[1])/1000 >= 20 then\n\t\t\t\t\t\t\toverloads= "超载"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\toverloads= "未超载"\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlocal directionstr = ""\n\t\t\t\t\t\tif jsondata.M == "1" or jsondata.M == "2" then\n\t\t\t\t\t\t\tdirectionstr= "0"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdirectionstr= "1"\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tgrossWeight = jsondata.SRT[1],\n\t\t\t\t\t\t\t\tdirection = directionstr,\n\t\t\t\t\t\t\t\taxisnum = jsondata.SRT[3],\n\t\t\t\t\t\t\t\tcmsLength = jsondata.SRT[6],\n\t\t\t\t\t\t\t\tcarType = jsondata.SRT[4],\n\t\t\t\t\t\t\t\ttotalBase = jsondata.SRT[7],\n\t\t\t\t\t\t\t\taxieSpeed = jsondata.SRT[2],\n\t\t\t\t\t\t\t\tcrossRoad = jsondata.M,\n\t\t\t\t\t\t\t\toverload = overloads,\n\t\t\t\t\t\t\t\tlicence = jsondata.SRT[8],\n\t\t\t\t\t\t\t\taxieWeight = json.encode(axies)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\t--log.debug("fs_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\t--log.debug("fs_file_transfer  dataresult=%s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\t--log.debug("fs_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\t--log.debug("fs_file_transfer: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n    \t--log.debug("fs_file_transfer: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n    \t--log.debug("fs_file_transfer: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("fs_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("fs_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("fs_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\t--log.debug("fs_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("fs_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\t--log.debug("fs_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\t--log.debug("fs_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\t--log.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--log.debug("fs_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t--log.debug("fs_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n	INLINE	2018-12-21 17:01:01.525+08	2021-02-03 09:05:27.661+08	2018-12-21	\N
ae1f5ddf-f933-47ea-a90e-9ac5af01b15b	fs-httpNewSJJ	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('httpNewSJJ   LUA http server start')\nend\n\nonData =\n    function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('httpNewSJJ [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    --local id = httpbody.ID\n    --log.debug('httpNewSJJ  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    local bodydata = json.decode(bodydataStr)\n    local hxzId = bodydata.HxzId\n    local serverIP = '218.3.126.49'\n    local port = '19700'\n    local serverTime = getTimeNowStr()\n    local url = httpbody.URL\n    log.debug('httpNewSJJ [%s] url=%s type=%s', moduleNo, url, type(url))\n    local urlsperts = Split(url, '/')\n    local len_urlsperts = table_leng(urlsperts)\n    local type_long = urlsperts[len_urlsperts]\n    local cmd_types = Split(type_long, '?')\n    local cmd_type = cmd_types[1]\n    log.debug('httpNewSJJ [%s] cmd_type=%s', moduleNo, cmd_type)\n    if cmd_type == 'LoginDataElevator' then\n        local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataElevator","data":{"SpeedSetError":"0","PeopleCntSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":30,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","ObliguityYSetError":"0","LockFlag":"0","IdSetError":"0","FloorSetError":"0","ObliguityXSetError":"0","RecordId":"0e3f0fb76ccf43fd9cc85767858ce3a9","HeightSetError":"0","WirelessSetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n        asend_HttpResponse(response_LoginData_bodyStr)\n    elseif cmd_type == 'BaseDataElevator' then\n        local response_BaseData_bodyStr = '{"cmd":"BaseDataElevator","data":{},"status":0}'\n        asend_HttpResponse(response_BaseData_bodyStr)\n    elseif cmd_type == 'RealtimeDataElevator' then --实时数据\n        local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataElevator","data":{},"status":0}'\n        asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n        --获取实时数据\n        local RTime = bodydata.RTime            --时刻\n        local PeopleCnt = bodydata.PeopleCnt    -- 人数 0~99人\n        local Weight = bodydata.Weight          --载重  0.00~9.00t\n        local Speed = bodydata.Speed            --  速度    -9.99~9.99m/s\n        local Height = bodydata.Height          --  高度    -999.9~999.9m\n        local Floor = bodydata.Floor            --楼层 -999~999层\n        local ObliguityX = bodydata.ObliguityX  --倾角X -9.99~9.99°\n        local ObliguityY = bodydata.ObliguityY  --倾角Y -9.99~9.99°\n        local WindSpeed = bodydata.WindSpeed    --风速  0.00~36.90m/s\n        local WindLevel = bodydata.WindLevel    --风级  0~12级\n        local DoorState = bodydata.DoorState    --笼门开关状态  0:内外笼门全关 1:内外笼门全开 2:仅内笼门开 3:仅外笼门开\n\n        out.data = {\n            peopleCnt = tonumber(PeopleCnt),\n            weight = tonumber(Weight),\n            speed = tonumber(Speed),\n            height = tonumber(Height),\n            floor = tonumber(Floor),\n            obliguityX = tonumber(ObliguityX),\n            obliguityY = tonumber(ObliguityY),\n            windSpeed = tonumber(WindSpeed),\n            windLevel = tonumber(WindLevel),\n            doorState = tonumber(DoorState),\n      \t\tisOnline=1  ----有数据 默认在线\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewSJJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'AlarmDataElevator' then\n        local response_AlarmData_bodyStr = '{"cmd":"AlarmDataElevator","data":{},"status":0}'\n        asend_HttpResponse(response_AlarmData_bodyStr)\n    elseif cmd_type == 'WorkDataElevator' then\n        local response_WorkData_bodyStr = '{"cmd":"WorkDataElevator","data":{},"status":0}'\n        asend_HttpResponse(response_WorkData_bodyStr)\n    elseif cmd_type == 'GpsData' then\n        local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n        asend_HttpResponse(response_GpsData_bodyStr)\n    elseif cmd_type == 'RuntimeData' then\n        local response_GpsData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n        asend_HttpResponse(response_GpsData_bodyStr)\n    \tlocal isOnline=0\n        local isDownline=0\n        local RTime=''\n        local DownlineTime = bodydata.DownlineTime\n        local OnlineTime = bodydata.OnlineTime\n        log.debug('httpNewSJJ [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime,OnlineTime)\n        if DownlineTime~='' then\n            isDownline=1\n            RTime=DownlineTime\n        else\n            isOnline=1\n            RTime=OnlineTime\n        end\n        out.data = {\n            --isDownline = isDownline,\n            isOnline = isOnline\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewSJJ [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    end\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('httpNewSJJ [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n	INLINE	2018-11-15 13:47:49.511+08	2018-11-27 13:56:05.749+08	2018-11-15	\N
b1c9853e-85b4-4c3f-8fb0-0a5e6f596fbf	Vibrating_1408	\N	天津佳建	1.0	abc9e573-4426-4eee-b858-7d309e181f99	abc9e573-4426-4eee-b858-7d309e181f99	f	abc9e573-4426-4eee-b858-7d309e181f99	Lua	--//04 项目资料/2017-09/天津佳建科技有限公司-建筑模型应变在线监测系统-项目信息/采集仪通讯协议.docx"\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "tjjj_Vibrating_1408.lua",json.encode(device.moduleId))\nend\n--moduleId=  通道1  通道2  通道3  通道4\n--\n--前3组0 \n--第4组\n--"frequency": \n--"temperature": \nonData=function (hex)\n\t--主动上传式\n\tlog.debug("tjjj_Vibrating_1408:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n        log.debug("tjjj_Vibrating_1408:hexToStr=%s",sData)\n\t\tlocal moduleNo = iota.hexToUShort(hex,7,'L')\n\t\tlog.debug("tjjj_Vibrating_1408:moduleNo=%s",moduleNo)\n\n\t\t\n\t\tfor i=0,7,1 do\n\t\t\t local Frequency = iota.hexToUShort(hex, 10 + i*2,'L');\n             local Phy\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=i+1\n             log.debug("tjjj_Vibrating_1408:模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("tjjj_Vibrating_1408:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n              \tlog.debug("tjjj_Vibrating_1408:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                    local k = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n           \t\t                  \n                    log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s：公式参数k=%s,f0=%s",moduleNo,channelNo,k,f0)\n                    if k ~=nil and f0 ~=nil then\n                        Phy=k*(Frequency^2-f0^2) --无温度补偿\n                   \t\tlog.debug("tjjj_Vibrating_1408:模块号=%s,通道号=%s   当前的Frequency是:%s,Phy是%s",moduleNo,channelNo,Frequency,Phy)                   \n                    end \n\t\t\t\t--else\n\t\t\t\t--log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n               -- end\n             else\n                log.debug("tjjj_Vibrating_1408:(振弦)子设备:m=%s,c=%s deviceId为nil",moduleNo,channelNo)\n            end\n\t\t\tlocal data1={\n\t\t\t            data={\n\t\t\t\t\t\t\tfrequency=Frequency,\n                  \t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n        \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId=:"..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props.module==tostring(moduleNoId) or child.props.moduleId==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) or child.props.channelId == tostring(channelNoId) then\n                 log.debug("tjjj_Vibrating_1408:".."DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("tjjj_Vibrating_1408:".."子设备原形child=%s",json.encode(child))\n            \t --return child.deviceId\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("tjjj_Vibrating_1408:".."subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('tjjj_Vibrating_1408:开始校验数据')\n    if data == nil or string.len(data)/2 <= 6 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('tjjj_Vibrating_1408:Data is nil or invalid length')\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0x7e or iota.hexToByte(data,string.len(data)/2-1,'B')~=0x7e then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('tjjj_Vibrating_1408:Hex CMD False %s,%s',iota.hexToByte(data,0,'B'),iota.hexToByte(data,string.len(data)/2-1,'B'))\n        return false\n    end\t\n    log.debug('tjjj_Vibrating_1408:校验通过')\n\treturn true\n\t\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2018-01-08 17:57:53.518+08	2018-03-29 15:49:02.876+08	2018-01-06	\N
2777524a-37b0-433f-9702-3db783dda44a	fs_fy_fx	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "FS_FY_FX", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_FY_FX 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x81, endian)            \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("FS_FY_FX SSend error!")\n        end\n        ctx:done(result)\nend\n--01 81 C0 40\n--01 81 04 00 00 00 0e 01 D4 EB\n--moduleId=1   \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local direction = iota.hexToShort(hex,6,'L')\n       \n        out.data = {\n            direction=direction\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('FS_FY_FX 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x81 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('FS_FY_FX 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-07-11 10:38:00.7+08	2018-07-11 10:40:37.259+08	2018-07-11	\N
b5dd2450-1c6c-4323-a9aa-4e0a4d76e6e1	fs_fy_fs	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "FS_FY_FS", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_FY_FS 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x80, endian)            \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("FS_FY_FS SSend error!")\n        end\n        ctx:done(result)\nend\n--01 80 01 80\n--01 80 04 00 c2 01 00 00 6D F3\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local speed = iota.hexToShort(hex,4,'L')\n       \n        out.data = {\n            speed=speed/10.0\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('FS_FY_FS 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x80 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('FS_FY_FS 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-07-11 10:40:16.676+08	2018-07-11 10:48:16.147+08	2018-07-11	\N
63535373-7358-4149-bb70-60bc6e4cb6f9	shjy_temp_ ZL	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x16, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local physicalvalue\t= iota.hexToFloat(hex,3,'B')/100\n        \n       \n        out.data = {\n\t\t\tphysicalvalue=tonumber(string.format("%0.3f",physicalvalue))\n        }\n    log.debug("shjy_temp: 结果=%s",physicalvalue)\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-07-17 16:29:45.248+08	2019-07-17 16:29:45.248+08	2019-07-17	\N
58991e17-c7c2-420e-b1a5-525a0e4d62a6	hejia_tempHumi_1144	\N	石家庄和嘉温湿度	1.0	bf10bcff-4fbf-4292-a58d-eb368da87223	bf10bcff-4fbf-4292-a58d-eb368da87223	f	bf10bcff-4fbf-4292-a58d-eb368da87223	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "nengh_weather_2401.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 0, endian) \n    buff=iota.appendHexWord(buff, 0x02, endian) \n    buff=iota.appendHexCrc(buff, endian ,0)\n  \n    local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n    buff=string.sub(buff,1,12)\n    buff=buff..crcH\n    buff=buff..crcL \n   \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,500)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    --120404806403110000  moduleId=2\n    --"humi": 78.5,"temp": -10\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then  \n\n        local IDX_Humidity = 5;    --湿度\n        local IDX_Temp = 3        --温度\n\n\n        local humi = iota.hexToShort(hex,IDX_Humidity,'B')/10.00\n        local sign = 1\n        local temp\n        local byTemp0 = iota.hexToByte(hex,IDX_Temp,'B')\n        local byTemp1 = iota.hexToByte(hex,IDX_Temp+1,'B')\n        if (byTemp0 >= 0x80)then\n            sign = -1\n            byTemp0=bit:_and(byTemp0 , 0x7f)\n            local stemp=''\n            stemp=iota.appendHexByte(stemp, byTemp0, 'B')\n            stemp=iota.appendHexByte(stemp, byTemp1, 'B')\n            temp = iota.hexToShort(stemp,0,'B')/10.00*sign\n        else\n            temp = iota.hexToShort(hex,IDX_Temp,'B')/10.00\n        end \n       \n        out.data = {\n           temp=temp,\n           humi=humi\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-09-18 18:49:07.125+08	2018-02-28 18:32:12.195+08	2017-09-18	\N
74e538ac-294f-4037-8cc3-3720305c80c4	jr_inclination_1533	\N	上海集睿倾角仪协议	1.0	63e00acb-9caf-4e8b-9460-a5d7507278b7	63e00acb-9caf-4e8b-9460-a5d7507278b7	f	63e00acb-9caf-4e8b-9460-a5d7507278b7	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n    log.debug("start %s, ctx=", "jr_inclination_1533.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n    if module > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             -- 1: 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)              -- 1: 指令: 0x03 = 采集\n        buff=iota.appendHexByte(buff, 0, endian)\n        buff=iota.appendHexByte(buff, 0x04, endian)    \n        buff=iota.appendHexByte(buff, 0, endian)\n        buff=iota.appendHexByte(buff, 0x06, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)          --CRC\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,500)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --01030c000060403333a3c19a99b242ce2b \n        local angleX = iota.hexToFloat(hex,3,'L')\n        local angleY = iota.hexToFloat(hex,7,'L')\n\t\tlog.debug("angleX = %d",angleX)\n        out.data = {\n            angleX=angleX,\n            angleY = angleY\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n	INLINE	2017-09-20 16:31:19.777+08	2018-02-28 18:32:12.196+08	2017-09-20	\N
3b8b71ea-6f80-40c6-8188-e5b230c4344b	sonbest_smoke_1	\N	上海搜博实业有限公司	1.0	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	f	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sonbest_smoke_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_smoke_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    --：：010300000001 \n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "sonbest_smoke_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sonbest_smoke_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        \n        --01030203750000 \n        --"smoke": 5000\n        local smoke =iota.hexToShort(hex,3,'B');\n    \n        out.data = {\n           \n            smoke=smoke,\n         \n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "supmea_pressure_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-03 16:40:22.938+08	2018-03-30 08:22:00.801+08	2018-01-03	\N
2a7d59b8-3a15-40f5-ad27-2f289da1dfa5	mic_inclination_1529	\N	无锡迈科倾角仪	1.0	24e71772-7488-412d-9acd-26a89f47937c	24e71772-7488-412d-9acd-26a89f47937c	f	24e71772-7488-412d-9acd-26a89f47937c	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \nstart=function()\n    log.debug("start %s, ctx=", "mic_inclination_1529.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\tlocal module = iota.hexToByte(PadLeft(2,0,device.props.moduleId) ,0,'B')\n\t\n    if module > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        ctx:done(json.encode(errout))\n    else\n        \n        buff=iota.appendHexByte(buff, 0x68, endian)              -- 1: 指令: 0x03 = 采集\n        buff=iota.appendHexByte(buff, 4, endian)\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             -- 1: 模块号\n        buff=iota.appendHexByte(buff, 4, endian)\n        buff=buff..PadLeft(2,0,tostring(checkPlusSum(buff,1,4)))    --CheckPlusSum\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --680D0084002010100525000000fb\n        --moduleId=0\n        --"angleX": 20.1,\n\t\t--"angleY": -5.25\n        local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,4,'B'),0xF0),4)\n        local xSecondNum = bit:_and(iota.hexToByte(hex,4,'B'),0x0F) * 100\n        local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,5,'B'),0xF0),4) * 10 + bit:_and(iota.hexToByte(hex,5,'B'),0x0F)\n        local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,6,'B'),0xF0),4) * 0.1 + bit:_and(iota.hexToByte(hex,6,'B'),0x0F) * 0.01\n\n        local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,7,'B'),0xF0),4)\n        local ySecondNum = bit:_and(iota.hexToByte(hex,7,'B'),0x0F) * 100\n        local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,8,'B'),0xF0),4) * 10 + bit:_and(iota.hexToByte(hex,8,'B'),0x0F)\n        local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,9,'B'),0xF0),4) * 0.1 + bit:_and(iota.hexToByte(hex,9,'B'),0x0F) * 0.01\n        \n        local angleX = xSecondNum + xThirdNum + xForthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum\n\n        if xFirst == 0x01 then\n            angleX = -angleX\n        end\n\n        if yFirst == 0x01 then\n            angleY = -angleY\n        end\n        out.data = {\n            angleX=angleX,\n            angleY = angleY,\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 14 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x68 or iota.hexToByte(data,3,'B') ~= 0x84 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)))) % 0xffff\n        end\n    end \n    sum = bit:_and(sum ,0xff)\n    return sum\nend 	INLINE	2017-09-20 16:17:19.096+08	2018-02-28 18:32:12.198+08	2017-09-20	\N
82e895d6-4c9b-4649-b363-6cd82e5c8414	111	\N		11	632bb218-8da7-4d91-b83d-70879c562d74	632bb218-8da7-4d91-b83d-70879c562d74	f	632bb218-8da7-4d91-b83d-70879c562d74	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "lndy_flow_1970.lua",json.encode(ctx.device))\n    ctx:done('hello')\nend\n--01034c614e00bc0b3b000000000000614e00bc0c140000\nunmarshall=function(hex,moduleNoStr)\n    log.debug("lndy_flow_1970 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local transientFlow =iota.hexToUShort(hex,3,'B')+iota.hexToUShort(hex,5,'B')*65536\n\t\tlocal totalFlow =iota.hexToUShort(hex,15,'B')+iota.hexToUShort(hex,17,'B')*65536\n\t\t\n        log.debug("lndy_flow_1970  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            transientFlow=transientFlow,  --瞬时流量  L/h\n\t\t\ttotalFlow=totalFlow/100           --累计流量 m3\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("lndy_flow_1970 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 23 then\n        errormsg = string.format('数据长度无效=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('模块号无效=%s[%s]',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2018-12-25 18:51:23.25+08	2018-12-25 19:05:27.087+08	2018-12-25	\N
8ba409b2-a129-4c05-8f32-a1445cfec3b4	nengh_FS_1	\N	风速风向	1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	start=function()\n    log.debug("start %s, moduleId=%s", "nengh_FS_1.lua",device.uplink.props.module or "null")\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.uplink.props.module, endian)           \n    buff=iota.appendHexByte(buff, 3, endian)      \n    buff=iota.appendHexByte(buff, 0, endian)     \n    buff=iota.appendHexByte(buff, 0x51, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian) \n    buff=iota.appendHexCrc(buff, 'L' ,0)\n\n    log.debug("nengh_FS_1 ssend= %s", buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("nengh_FS_1: Unmarshall data is %s", hex)\n    --01 03 04 00 01 00 01 00 00 \n    -- \n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n      \n        local direction = iota.hexToShort(hex,3,'B')\n        local speed = iota.hexToShort(hex,5,'B')\n\n        out.data = {\n            speed=speed,\n            direction=direction,  \n        }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\n \n\n\n \n\n\n	INLINE	2018-05-09 13:52:47.655+08	2018-05-09 16:19:03.901+08	2018-05-09	\N
591019a9-bb7b-4e46-88f3-7da42a31edea	http	\N		1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start=function()\n  local req={\n    type="http",\n    url="https://www.baidu.com/",\n    method="GET",\n  }\n  local ok,resp=ctx:ssend(req,1000)\n  log.debug("res.header=%s", json.encode(resp.header))\n  \n  out={\n    value=resp.header,\n    result={},\n  }\n  ctx:done(json.encode(out))  \nend	INLINE	2018-07-27 17:04:35.055+08	2018-07-27 17:08:28.736+08	2018-07-27	\N
97a8cbcc-8fc9-4992-a883-d026597b9259	mk_inclination_3	\N	三轴倾角	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_inclination_3.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa0407030d660eb70000ad58\n--"xDegree": 3.43,\n--"yDegree": 3.767,\n--"zDegree": 0\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x03 and moduleNo==modulenumber  then\n            \n            local xDegree = iota.hexToShort(hex,4,'B') /1000.0\n            local yDegree = iota.hexToShort(hex,6,'B') /1000.0\n            local zDegree = iota.hexToShort(hex,8,'B') /1000.0\n            out.data = {               \n                xDegree = xDegree,\n                yDegree = yDegree,\n                zDegree = zDegree\n            }\n\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_inclination_3.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:14:31.033+08	2018-02-28 18:32:12.201+08	2018-01-08	\N
6da213f0-1d9e-48bd-ab58-364e65a0ecd5	nengh_CO2_8302	\N		1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	\n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_CO2 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("nengh_CO2,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  log.debug("nengh_CO2  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("nengh_CO2 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local concentration =iota.hexToUShort(hex,3,'B')\n    \n        out.data = {           \n            concentration=concentration        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("nengh_CO2 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-11-20 14:37:22.879+08	2018-11-22 17:11:30.83+08	2018-11-20	\N
c14df1bd-60ff-48b0-9820-bd146284b57c	sser_tempHumi_1106	\N		1.0	42ed9887-912b-4ce0-b062-3f3e0c22fa74	42ed9887-912b-4ce0-b062-3f3e0c22fa74	f	42ed9887-912b-4ce0-b062-3f3e0c22fa74	Lua	--//PMO/02 产品协议/SavoirCloud/01 协议/3月第3周/北京赛斯尔自控工程有限公司-温湿度传感器/TH802通讯协议-北京赛斯尔自控工程有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "sser_tempHumi_1106", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("sser_tempHumi_1106 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("sser_tempHumi_1106 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("SSend error!")\n        end\n        ctx:done(result)\nend\n\n--1204040d660019fa3c\n--moduleId=18     \n--"humidity": 2.5,\n--"temp": 343\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local temp = iota.hexToShort(hex,3,'B')/10.0\n        local humidity = iota.hexToShort(hex,5,'B')/10.0\n       \n        out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('sser_tempHumi_1106 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('sser_tempHumi_1106 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2017-12-12 14:01:34.757+08	2018-03-30 10:25:38.974+08	2017-12-12	\N
afcdc4de-70b6-486d-a34f-fc255b4bf048	gdyjs_lvdt_1	\N	北京光电研究所	1.0	a8a291bf-9873-4ca2-b876-bf54a06f38dd	a8a291bf-9873-4ca2-b876-bf54a06f38dd	f	a8a291bf-9873-4ca2-b876-bf54a06f38dd	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''       \n    buff=iota.appendHexByte(buff, 0xaa, endian) \n    buff=iota.appendHexByte(buff, 0x75, endian) \n    buff=iota.appendHexByte(buff, 0x10, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x0e, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("gdyjs_lvdt_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("gdyjs_lvdt_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n    buff=buff..moduleNo                  \n    local time=string.sub(os.date("%Y%m%d%H%M%S", os.time()),3)                   \n    buff=buff..time\n    local xor = CheckXor(0,buff)\n    buff=iota.appendHexByte(buff, xor, endian)                 \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--557A1000350028180011226688AA17113011343800E600050020000000006D6D000000000000000000000000000000000000002020202020202020A5\n--moduleId=255  humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==120) then\n        \n       local temperature=iota.hexToShort(hex,20,'B')/10; \n       local strain=iota.hexToShort(hex,22,'B')/10; \n       local displacement =iota.hexToShort(hex,24,'B')/10;    \n        out.data = {\n            strain=strain,\n            displacement=displacement\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\nCheckXor=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end     \n    return lcr\nend \n	INLINE	2017-11-30 10:37:45.689+08	2018-03-30 14:12:44.404+08	2017-11-28	\N
0ba29e5a-b0e0-403e-b562-00f940b9be96	cy_temp_1162	\N		1.0	5f62fd39-0b72-492e-99be-308c935c1b64	5f62fd39-0b72-492e-99be-308c935c1b64	f	5f62fd39-0b72-492e-99be-308c935c1b64	Lua	--//04 项目资料/2017-05/武汉大桥局青山桥/LTM8000用户手册_fin_4.doc\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift\n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "cy_temp_1162", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\tlocal moduleNo=device.props.moduleId\n\t\t \n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo=device.uplink.props.module\n\t\tlog.debug("cy_temp_1162: 接口获取 m=%s ",moduleNo)\n           \n    end\n\t\n    if isModuleIdInvalid(moduleNo) then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleIdLength ~=6'}\n        ctx:done(json.encode(errout))\n    else\n\t--（系统模块号对应实际采集卡的通道号，系统通道号对应 采集卡通道号下面的传感器号）\n\t    strCardNo=string.sub(moduleNo,2,3)\n        log.debug("cy_temp_1162 strCardNo是"..strCardNo)\n\t\t\n\t\t \n\t\t\n\t\tstrModuleNo=string.sub(moduleNo,5,6)            \n        buff=iota.appendHexByte(buff, 0x23, endian) \n        buff=buff..toHexStr(string.sub(strCardNo,1,1))\n\t\tbuff=buff..toHexStr(string.sub(strCardNo,2,2))\n        buff=buff..toHexStr(string.sub(strModuleNo,2,2)) \t\t\n        buff=iota.appendHexByte(buff, 0x0d, endian)                         \n\n        -- print("ssend=", ctx:ssend(buff,500) )\n    \tSleep(3)\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n\t\t\tctx:done(result)\n\t\telse\n\t\t\tlog.debug(" cy_temp_1162 m=%s,c=%s receiced is not ok ,resp=%s",device.props.moduleId,device.props.channel,resp)\n        end\n        \n    end\nend\n--3e30310003eb010510d3010d10c70109100d82\n--moduleId=K01C01\n--channelId=3\n--"temperature":28.4375,\n\n--判断模块号格式\nisModuleIdInvalid=function(strModuleId)\n  if string.len(strModuleId) ==6 then\n      if string.sub(strModuleId,1,1)=='K' then\n\t      if string.sub(strModuleId,4,4)=='C' then\n\t\t      --模块号格式K01C01\n\t\t      local n = tonumber(string.sub(strModuleId,2,3)..string.sub(strModuleId,5,6));\n\t\t\t  if n then\n\t\t\t     return false;\n\t\t\t  end   \n\t\t   end\t  \n\t  end\t\n   end\n    return true\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal data=hex;\n\tlog.debug("cy_temp_1162 m=%s,c=%s  data=%s string.len(data)/2-2-1=%s",device.props.moduleId,device.props.channel,data,string.len(data)/2-2-1)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local channelNo=device.props.channel\n\t    local countIds=iota.hexToShort(hex,3,'B');\n\t\t--存储每个通道下的返回的多个传感器数据\n\t    resDataList = {}\n\t\t\n\t\tfor i=5,string.len(data)/2-2-1,4 do\n           -- log.debug("i="..i)\n            local tempBytes={}\n\t\t\ttempBytes[0]=string.sub(data,i*2+1,i*2+2)\n\t\t\ttempBytes[1]=string.sub(data,i*2+3,i*2+4)\n            if tempBytes[0]=="ff" and tempBytes[1]=="ff" then\n\t\t\t\tout.result = {code=1001,msg="data is invalid"}\n\t\t\t    return json.encode(out)\n\t\t\tend\n            --log.debug("cy_temp_1162 tempBytes[0]="..tempBytes[0])\n            --log.debug("cy_temp_1162 tempBytes[1]="..tempBytes[1])\n            --log.debug("cy_temp_1162 tempBytes[1]类型"..type(tempBytes[1]))\n              \n             --温度为 +\n           -- log.debug("bit:_rshift(tonumber(tempBytes[1]),3)是"..bit:_rshift(tonumber(tempBytes[1]),3))\n\t\t\t\tif bit:_and(0xFF,bit:_rshift(tonumber(tempBytes[1],16),3))==0x00 then\n\t\t\t\t   local tempBytes1=tonumber("21",16);\n\t\t\t\t --  log.debug('cy_temp_1162 tempBytes1是'..tempBytes1)\n\t\t\t\t   local temp=(bit:_and(tonumber(tempBytes[1],16),0x07)*256+tonumber(tempBytes[0],16))*0.0625;\n\t\t\t\t--   log.debug("cy_temp_1162 temp+是"..temp)\n\t\t\t\t   table.insert(resDataList,temp)\n\t\t\t   else\n                 ----//温度为 -\n\t\t\t\t\tlocal temporary=tonumber(tempBytes[1],16)\n\t\t\t\t\tlog.debug("温度为 -  tempByte[1]=%s ",tostring(temporary))\n\t\t\t\t   if bit:_and(0xFF,bit:_rshift(tonumber(temporary,16),3))==0x1f then\n\t\t\t\t\t  local temp=-1*((256 - temporary)*256-temporary)*0.0625;\n\t\t\t\t\t  table.insert(resDataList,temp)\n\t\t\t\t   --   log.debug("cy_temp_1162 temp-是"..temp)\n\t\t\t\t   end\n\t\t\t\tend  \n        end \n\t\tlocal Temperature = resDataList[channelNo+0];--//取对应的传感器值 默认插入表下标1开始\n\t     log.debug("cy_temp_1162 m=%s,c=%s  temperature=%s resDataList=%s",device.props.moduleId,device.props.channelId,Temperature,json.encode(resDataList)) \n\t\t if Temperature~=nil then\n\t\t\tout.data = {\n\t\t\t\ttemperature = Temperature,          \n\t\t\t}\n\t\t end\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n\n    local countId=iota.hexToShort(data,3,'B');\n\tif string.len(data)/2 ~=countId*4+5+2 or string.len(data)/2 <=7 then\n\t  errormsg = 'data length is wrong'\n        errcode = 1001\n        return false\n    end\n\t\n    if string.sub(data,1,2) ~= '3e' or string.sub(data,-4,-3) ~= '0d' then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    end\n\n    return true\nend\n\n\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串ascii->字符16D\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n\nSleep=function(n)\n   local t0 = os.clock()\n   while os.clock() - t0 <= n do end\nend	INLINE	2017-11-30 18:19:51.764+08	2018-06-05 15:40:22.22+08	2017-11-30	\N
65dfe3cd-075d-490f-a2b5-d5c39f4cbc05	httpxieyi	\N		1.0	36b70d6d-c974-4742-9257-b555027d36cd	36b70d6d-c974-4742-9257-b555027d36cd	f	36b70d6d-c974-4742-9257-b555027d36cd	Lua	\nstart=function()\n    log.debug("JCLQ2018 start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n        type= "http",\n        url='https://api.yespowering.cn/dev/data/?box_id=35E81PV005',  --device.uplink.props.url   --.."%s/data?startTime=%s&endTime=%s", \n    \tmethod="get",\n    \tcontent="text/json",\n        header={}\n    }\n    --local param={\n    --  box_id= '35E81PV005',\n   -- }\n    req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n\treq.header["token"] = 'E084B9E84D5220AB5E2C292CB153F596'\n        \n    \n    log.debug("JCLQ2018:  url=%s",req.url)\n \n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("JCLQ2018:  ok=%s",ok)\n    else\n        log.debug("JCLQ2018:  ok=%s,ack=%s",ack)\n    end\n\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n            data=json.decode(ack.body)  -- 有数据\n            log.debug("ack=%s",ack.body)\n            \n           \n                   \n                    local data1 = {\n                        data={\n                            distance=0     \n                        },\n                        device=device.id,\n                        type=1                       \n                    };                       \n                    table.insert(out.data,data1)\n               \n                log.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n                ctx:done(json.encode(out))\n            \n        else\n            log.debug("JCLQ2018:  request data error:%s body:%s",ack.code,ack.body)            \n        end\n    end\nend\n \n\n	INLINE	2018-06-13 16:58:34.542+08	2018-06-14 13:58:50.081+08	2018-06-13	\N
10e166da-8bd4-414c-a941-312073ae8ff8	fs_inclination_2000	\N	安心云 \n超高精度双轴倾角传感器 AIS 2000 	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//20200901  双轴倾角传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 功能码\n    buff=iota.appendHexWord(buff, 4 ,endian)               -- 2: 数据地址\n    buff=iota.appendHexWord(buff, 6 ,endian)                --2：数据长度\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("fs_trwsd_1166  out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"X": 13.5,\n--"Y": 23.9\n\n--01 03 0C 00 00 60 40 33 33 A3 C1 9A 99 B2 42 CE 2B\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \tlocal Xtemp= iota.hexToFloat(hex,3,'L')\n        local Ytemp = iota.hexToFloat(hex,7,'L')\n            \n        out.data = {\n            X = Xtemp,\n            Y = Ytemp\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n    if data == nil or string.len(data)/2~=17 then\n        errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_trwsd_1166  数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend\n	INLINE	2020-09-02 17:38:34.902+08	2020-09-02 17:40:08.336+08	2020-09-02	\N
9f43db1a-9665-4422-83dc-f17f9918a140	simple_sensor	\N		0.3	6aecaca4-ae30-42e7-9963-28713a74a311	6aecaca4-ae30-42e7-9963-28713a74a311	f	6aecaca4-ae30-42e7-9963-28713a74a311	Lua	temp=1\nhumi=12	INLINE	2017-12-20 15:35:56.749+08	2017-12-20 15:35:56.749+08	2017-12-20	\N
dd84941a-2077-439f-a8c4-9696132b7664	Meacon_oxy_dissolved	\N	溶解氧在线分析仪协议	1.0	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	f	849e9b08-1181-436a-a106-cc6b0d3ffdc5	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Meacon_oxy_dissolved", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t--全局\n  out={\n        data ={},\n        result = {}\n    }\t\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Meacon_oxy_dissolved 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)      \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("Meacon_oxy_dissolved SSend error!")\n        end\n\t\tif out.data.oxygen~=nil then\n\t\t\tlog.debug('Meacon_oxy_dissolved:'..'溶解氧解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian)            \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)      \n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0)    \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t   log.debug('Meacon_oxy_dissolved:'..'温度采集成功 开始解析温度:'..resp)\n\t\t\t\tresult_temp =tempunmarshall(resp,moduleNo) \n\t\t\t  else\n\t\t\t\tlog.debug('Meacon_oxy_dissolved:'..'温度采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n        ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local oxygen = iota.hexToShort(hex,3,'B')\n       \n        out.data = {\n            oxygen=oxygen/100.0,\n\t\t\ttemp=0\n\t\t\t}\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n   -- return json.encode(out)\nend\n\n \ntempunmarshall=function(hex,moduleNo_t)\n  local ErrorCode = IsValid(hex,moduleNo_t)\n    if ErrorCode then\n\t\n        local temp = iota.hexToShort(hex,3,'B')\n       \n        out.data.temp = temp/10.0\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('Meacon_oxy_dissolved 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('Meacon_oxy_dissolved 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-10-08 11:13:08.25+08	2018-10-11 09:10:38.006+08	2018-10-08	\N
410e53eb-787b-4897-8eb9-5c48e5268fbe	xy_laser_9510	\N	深圳市七七星宇科技有限公司激光测距仪	1.0	756e574c-b410-4312-99d3-13d78e3cde5a	756e574c-b410-4312-99d3-13d78e3cde5a	f	756e574c-b410-4312-99d3-13d78e3cde5a	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=", "xy_laser_9510.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x0f, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x02, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,500)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local data_1 = iota.hexToByte(hex,3,'B')\n        local data_2 = iota.hexToByte(hex,4,'B')\n        local data_3 = iota.hexToByte(hex,5,'B')\n        local data_4 = iota.hexToByte(hex,6,'B')\n        local len = bit:_or(bit:_or(bit:_or(bit:_lshift(data_1,24) , bit:_lshift(data_2,16)) , bit:_lshift(data_3,8)) , data_4) / 1000.00\n        out.data = {\n            length = len\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n    \treturn false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-13 09:49:27.166+08	2018-02-28 18:32:12.195+08	2017-09-13	\N
0e078d6f-ab96-4c79-ba40-2b3fb5e96e72	zxy_wind_9202	\N		1.0	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	f	d6d9e5bc-bba9-4787-976f-dcb6eb2cfabe	Lua	\nstart=function()\n  log.debug("load script %s, moduleId=%s", "zxy_wind_9202.lua", device.moduleId or "[nil]")\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("zxy_wind_9202 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n  \n  \n  \n\tif tonumber(moduleNo) > 99 or tonumber(moduleNo) <=0 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid, >99 or <=0'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian) \n\t\n    buff=buff..toHexStr(PadLeft(2,0,moduleNo))\n\n    buff=iota.appendHexByte(buff, 0x72, endian)  \n    buff=iota.appendHexByte(buff, 0x0D, endian)     \n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n--3e312e352c36302e320d0a\n--moduleId=2\n--"windDirection": "60.2",\n--"windSpeed": "1.5"\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local data = string.sub(hex,3,-5)\n        local str = toStrHex(data)\n        local offset = string.find(str,',')\n\n        local speed = string.sub(str,1,offset-1)\n        local direction = string.sub(str,offset+1,-1)\n        \n        out.data = {\n            windSpeed=speed,\n            windDirection = direction\n        };\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n    if data == nil or iota.hexToByte(data,0,'B') ~= 0x3E then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2017-12-12 11:30:10.134+08	2018-03-30 10:31:32.836+08	2017-12-12	\N
b1bbe56d-c98c-4e51-8fc1-398fa057bf4a	jm_Inclinometer_1	\N	测斜	1.0	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	f	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	Lua	start=function()\n    log.debug("start %s, ctx=%s", "jm_Inclinometer_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff='#+'\n    --buff=iota.appendHexByte(buff, 0x23, endian)                   \n    --buff=iota.appendHexByte(buff, 0x2b, endian)\n    buff= buff..device.uplink.props.module   \n    local buff1=StrToHex(buff)\n    log.debug("jm_Inclinometer_1: send=%s ",buff1)\n    ok,resp=ctx:ssend(buff1,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --24 3E 39 37 3D 3E 39 35 3E \n    --"anglex": 10.417817400353972,\n    --"angley": -1.0070251712408496\n    log.debug("jm_Inclinometer_1: get=%s ",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n    \n       local data1 =(tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16\n       local data2 =(tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16\n       local x1=(data2/10000-2.5)/4\n       local y1=(data1/10000-2.5)/4\n       local x=  math.deg(math.asin(x1))\n       local y=  math.deg(math.asin(y1))\n       out.data = {\n            anglex=x,\n            angley=y\n       }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n -- 字符串 -> Hex\n StrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2018-05-09 10:22:53.143+08	2018-05-10 09:01:13.708+08	2018-05-09	\N
3675fa64-2747-4043-98d6-fdee3bfd7e89	9603	\N		111	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        函数:\n        ssend: 同步发送数据到设备\n        asend: 异步发送数据到设备\n        notify: 通知平台解析完成的数据\n        done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n    log.debug("LUA:start %s", "fs_9603.lua")\n    log.debug("floatToHex:%s", iota.floatToHex(-100.2))\nend\n\n-- 收到数据\nonData=function(data,pindex)\n   log.debug("pindex:%s",pindex)\n    print("LUA:onData",data) \n    local len=string.len(data)\n    local r=nil\n    if len == 102 then\n        r=parseNoise(data)\n    elseif len==50 then\n        r=parseWakeup(data)\n    else\n        r={node = string.sub(data,1,4)}\n    end\n    result={}\n\tresult.type = 1\n    result.data = r\n    local msg = json.encode(result)\n    log.debug("Parsed:%s",msg)\n    ctx:notify(msg)\nend\n\nparseNoise=function(data)\n    -- 51长度: 头 25, 数据24, 尾2\n    local node = string.sub(data,1,4)\n    local Lmax = iota.hexToFloat(data,25+9,'B');\n    local Lmin = iota.hexToFloat(data,25+13,'B');\n    local Laeq = iota.hexToFloat(data,25+17,'B');\n    return {node=node, max=Lmax,min=Lmin,Laeq=Laeq}\nend\n\nparseWakeup=function(data)\n    local node = string.sub(data,1,4)\n    local power = iota.hexToByte(data,10,'B');\n    local join  = iota.hexToShort(data,17,'B');\n    return {node=node,power=power,join=join}\nend	INLINE	2017-09-26 10:28:41.443+08	2019-03-08 09:20:33.969+08	2017-09-26	\N
17081615-1340-4cae-9924-f101767e7d36	shutai_mop	\N		1.0	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	Lua	onData=function(hex)\n end\n\nstart = function()\n  \t--log.debug("shutaimop  device=%s", json.encode(device))\n\tlocal cmd = capability.param\n\tlog.debug("shutaimop  linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n    log.debug("shutaimop  request=%s", req)\n    local ok, ack = ctx:ssend(req, 20000)\n    out = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = HextoStr(ack)\n        }\n    }\n\tlog.debug("shutaimop  responde=%s", HextoStr(ack))\n\n    ctx:done(json.encode(out))\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend	INLINE	2018-11-20 11:22:42.283+08	2019-04-16 11:19:17.981+08	2018-11-20	\N
f9c35eff-dce1-418c-9286-093f797155d2	shutai_file_transfer	\N		1.0	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	Lua	start=function()\n    log.debug("shutai_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" or data.ext==".dx" then\n                log.debug("shutai_file_transfer : recvd content = %s",data.payload)\n                ParseFileD(data.payload)\n            --else\n                --log.error("shutai_file_transfer : unsupported file type: %s", data.ext)\n            end\n            if data.ext==".dat" then\n                --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n                ParseFileDat(data.payload)\n             --else\n                 --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              log.error("shutai_file_transfer : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("shutai_file_transfer : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("shutai_file_transfer : dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("shutai_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("shutai_file_transfer begin parse")\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n        end\n        log.debug("shutai_file_transfer finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))  --+00:00 \n        }\n        table.insert(out.data,rst)\n        log.debug("shutai_file_transfer cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("shutai_file_transfer not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction ParseFileD(content)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    log.debug("shutai_file_transfer : content  =%s", content)\n    local jsons=Split(content,'\\r')\n    for k,v in pairs(jsons) do\n        if v~=nil and v~='' then\n            local jsondata = json.decode(v)            \n            if jsondata~=nil and jsondata ~='' then\n                local childDevice=getDeviceInfo(jsondata.M,jsondata.C) --数据文件中获取             \n                if childDevice ~=nil then\n          \t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='ZX' then\n\t\t\t\t\t\tlocal freq=tonumber(jsondata.RV[1])\n\t\t\t\t\t\tlocal phy\n\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "ecae192b-0460-431c-bb0e-fb64358a6ac0" then --振弦公式 不带温度 metaid\n\t\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K or nil\n\t\t\t\t\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n\t\t\t\t\t\t\tlocal f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n\t\t\t\t\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n\t\t\t\t\t\t\tlog.debug("shutai_file_transfer:振弦节点 模块%s通道%s的公式计算参数是：k=%s,f0=%s,freq=%s",jsondata.M,jsondata.C,k,f0,freq)\n\t\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2)-- + kt * (temp - t0)\n\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 振弦节点 模块%s通道%s的phy=%s，fre=%s",jsondata.M,jsondata.C,Phy,freq)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n                        local rst = { \n                            data={\n                                frequency = freq,\n                                physicalvalue= Phy                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)-8*3600)  --+00:00 \n                        }\n                        log.debug("shutai_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='485' then --0e03ebe4-bdad-4a8f-840c-ba09293c2488\n\t\t\t\t\t\tlocal raw=tonumber(jsondata.RV[1])\n\t\t\t\t\t\tlocal phy=raw\n\t\t\t\t\t\tlog.debug("shutai_file_transfer 模块%s通道%s的formula=%s",jsondata.M,jsondata.C,json.encode(childDevice.uplink.capabilities[1].formula))\n\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula~=nil then\n\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "0e03ebe4-bdad-4a8f-840c-ba09293c2488" then --模数转换公式 \n\t\t\t\t\t\t\t\tlocal i0 = childDevice.uplink.capabilities[1].formula.props.Io or nil\n\n\t\t\t\t\t\t\t\tlocal k = childDevice.uplink.capabilities[1].formula.props.K or nil\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif k~=nil and k~=0 and i0~=nil then\n\t\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 模块%s通道%s开始计算",jsondata.M,jsondata.C)\n\t\t\t\t\t\t\t\t\tphy =(raw-i0)/k   \n\t\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer: 485节点 模块%s通道%s的phy=%s，k=%s,i0=%s,raw=%s,",jsondata.M,jsondata.C,phy,k,i0,raw)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t   log.debug("shutai_file_transfer:485节点 模块%s通道%s的公式参数 错误：k=%s,i0=%s,raw=%s",jsondata.M,jsondata.C,k,i0,raw)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t    log.debug("shutai_file_transfer: 485节点 公式id匹配错误 模块%s通道%formula.metaid=%s",jsondata.M,jsondata.C,childDevice.uplink.capabilities[1].formula.metaid)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse\n\t\t\t\t\t\t   log.debug("shutai_file_transfer: 485节点 公式匹配错误 模块%s通道%s的formula=nil[%s]",jsondata.M,jsondata.C,json.encode(childDevice.uplink.capabilities[1].formula))\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n                        local rst = { \n                            data={\n\t\t\t\t\t\t\t\tcurrent=raw,\n                                physicalvalue=phy                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",tonumber(jsondata.T)/1000-8*3600)   --+00:00\n                        }\n                        log.debug("shutai_file_transfer:out data=%s",json.encode(rst))\n                        table.insert(out.data,rst)\n                    end\n\n                else\n                    --log.debug("shutai_file_transfer  m=%s,C=%s,childDevice is nil",jsondata.M,jsondata.C)\n                end\n            end\n        end\n    end\n   log.debug("shutai_file_transfer: dataresult: %s", json.encode(out))\n   ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n  \t--log.debug("shutai_file_transfer: 查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices \n       --log.debug("shutai_file_transfer: 查询 节点层 设备device=%s",json.encode(subdevices))\n\n\t\tfor i,link in pairs(device.dnlinks) do\n            --log.debug("shutai_file_transfer: link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("shutai_file_transfer:node=%s",json.encode(node))\n\t\t\t\t--log.debug("shutai_file_transfer  模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n\t\t\t\tlocal moduleNo=node.uplink.props.node_id\n\t\t\t\tif moduleNo==tostring(moduleid) then\n\t\t\t\t\tfor k,sublink in pairs(node.dnlinks) do\n\t\t\t\t\t\t--log.debug("shutai_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("shutai_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif tonumber(subdevice.uplink.props.node_channelid)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("shutai_file_transfer:  m=%s,c=%s 匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        end      \n        \n        --log.debug("shutai_file_transfer has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("shutai_file_transfer has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2018-08-01 15:54:09.117+08	2019-03-19 12:55:50.755+08	2018-08-01	\N
543e1e81-6131-43ec-8f7e-495bb4fa257d	jm_Inclinometer_1	\N	测斜	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	start=function()\n    log.debug("start %s, ctx=%s", "jm_Inclinometer_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff='#+'\n    --buff=iota.appendHexByte(buff, 0x23, endian)                   \n    --buff=iota.appendHexByte(buff, 0x2b, endian)\n    buff= buff..device.uplink.props.module   \n    local buff1=StrToHex(buff)\n    log.debug("jm_Inclinometer_1: send=%s ",buff1)\n    ok,resp=ctx:ssend(buff1,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --24 3E 39 37 3D 3E 39 35 3E \n    --"anglex": 10.417817400353972,\n    --"angley": -1.0070251712408496\n    log.debug("jm_Inclinometer_1: get=%s ",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n    \n       local data1 =(tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16\n       local data2 =(tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16\n       local x1=(data2/10000-2.5)/4\n       local y1=(data1/10000-2.5)/4\n       local x=  math.deg(math.asin(x1))\n       local y=  math.deg(math.asin(y1))\n       out.data = {\n            anglex=x,\n            angley=y\n       }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n -- 字符串 -> Hex\n StrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2018-05-10 09:11:37.7+08	2018-05-10 09:11:37.7+08	2018-05-10	\N
470002e4-546e-4f47-8b78-be6ef7f15734	fs-gnss-1min	\N	1min	2.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n    log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n        type= "http",\n        url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n    \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s",   \n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }\n    local param={\n      pointId= tonumber(device.props.pointId),\n      pageNo=1,  \n      pageSize=1, \n    }\n    local beginTime=stringToTime(device.props.beginTime)*1000 \n    local r1,ok = redis.get(device.id.."_endTime")\n    if ok and r1~=nil then\n        beginTime=r1 - 60000\n    end\n    local endTime=os.time()*1000\n   \n\n    if redis.set(device.id.."_endTime", tostring(endTime)) then\n        log.debug("fs_gnss moudleid=%s set lasttime ok  key=%s,value=%s",device.props.pointId,device.id.."_endTime",tostring(endTime))\n    end\n        \n    req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n    log.debug("fs_gnss: moudleid=%s request url=%s",device.props.pointId,req.url)\n \n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("fs_gnss: moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n    else\n        log.debug("fs_gnss: moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n    end\n\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n            qx=json.decode(ack.body)  -- 有数据\n            log.debug("ack=%s",ack.body)\n            local items = #qx.data or 0\n            log.debug("totalItems=%d", items)\n            if items > 0 then\n                for i=1,items,1 do\n                    local item= qx.data[i]\n                    local data1 = {\n                        data={\n                            x=item.x*1000 or 0,\n                            y=item.y*1000 or 0,\n                            z=item.z*1000 or 0,\n                        },\n                        device=device.id,\n            \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n                        type=1                       \n                    };                       \n                    table.insert(out.data,data1)\n                end\n                log.debug("fs_gnss: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n                ctx:done(json.encode(out))\n            else\n                log.debug("fs_gnss: moudleid=%s has not new data",device.props.pointId)\n            end\n        else\n            log.debug("fs_gnss: moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body)            \n        end\n    end\nend\n \nstringToTime=function( timeString )  --yyyyMMddHHmmss   to   时间戳\n    local yyyy = tonumber(string.sub(timeString , 1, 4)) \n    local MM = tonumber(string.sub(timeString , 5, 6))  \n    local DD = tonumber(string.sub(timeString , 7, 8))\n    local HH = tonumber(string.sub(timeString , 9, 10))\n    local mm = tonumber(string.sub(timeString , 11, 12))\n    local ss = tonumber(string.sub(timeString , 13, 14))\n    return  os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss})  \nend \n\n	INLINE	2019-08-19 10:04:04.068+08	2019-08-19 10:04:25.322+08	2019-08-19	\N
fcd2a682-7043-468e-a5a4-69a4def56b94	file_transfile	\N		1.0	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	f	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	Lua	start=function()\n\tlog.debug("ct_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\tlog.debug("ct_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("ct_file_transfer: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("ct_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("ct_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("ct_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("ct_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\tlog.debug("ct_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n            -- if pos >= strLen  then\n                -- log.debug("ct_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n            -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\tlog.debug("ct_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\tlog.debug("ct_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\tlog.debug("ct_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("ct_file_transfer : content  =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("ct_file_transfer  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='laser' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  laser=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("ct_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("ct_file_transfer: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("ct_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tlog.debug("ct_file_transfer: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n    \tlog.debug("ct_file_transfer: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n    \tlog.debug("ct_file_transfer: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("ct_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("ct_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("ct_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\tlog.debug("ct_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("ct_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("ct_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("ct_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("ct_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("ct_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n	INLINE	2019-04-16 11:01:48.287+08	2019-04-16 11:27:57.181+08	2019-04-16	\N
4d5bd16e-9baf-464f-b930-69308501030f	geot_3300	\N	基泰32通道采集器	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n    -- log.debug("load script %s, moduleId=%s", "geot_3300.lua", device.props.moduleId or "[nil]")\n     -- log.debug("geot_3300:".."LUA: ctx is =%s", json.encode(device))\n    ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("geot_3300:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n    --log.debug("geot_3300收到数据=%s", hex)\n\t--log.debug("geot_3300 device =%s", json.encode(device))\n    --log.debug("geot_3300subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    local ModuleChar = "M=";--振弦\n    local DigChar = "Di";--测斜\n    local VoltageChar = "V=";--电压\n    local CurrentChar = "I=";--电流\n    local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=toStrHex(hex)\n        --log.debug("geot_3300:sData是 %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,'\\n')\n        --移除表内的“”和nil\n        for k,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n            table.remove(allResponse,k)\n                --log.debug("geot_3300:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k,v in ipairs(allResponse) do\n            local singleData=Split(v,' ')\n            --移除单类数据中的空 \n            for kk,vv in ipairs(singleData) do\n                if vv=='' or vv==nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove (singleData,kk)\n                end\n            end\n\n            if k>1 then\n                local temp1=singleData[2+1]\n                local moudleStr=string.sub(singleData[2+1],2,2)\n                local moduleNo=tonumber(moudleStr)\n                --解析单条数据\n                for kkk,vvv in ipairs(singleData) do\n                    --log.debug("geot_3300:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n                  \n                    local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n                    --log.debug("geot_3300: type_sensor="..type_sensor) \n                    if string.len(type_sensor) >=2 then\n                       --频率\n                        if type_sensor==ModuleChar then\n                            local length = string.len(singleData[kkk]) - 3;\n                            local tempLength = string.len(singleData[kkk + 1]) - 3;\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local Module =tonumber(string.sub(singleData[kkk],4, -1))\n                            local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n                            local Frequency = math.sqrt(Module*1000);\n                            local Temp;\n                            local Phy\n              \t\t\t    local Length\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:振弦模块： 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300   模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module  --经过厂家确认  公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("geot_3300:振弦模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("geot_3300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n                        --电压\n                        if type_sensor== VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t     \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend                                     \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("geot_3300:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n                       \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                            \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n                     \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend            \n                        \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                          \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend                          \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk);                            \n  \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("geot_3300:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t   local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t   --log.debug("geot_3300:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t   local Fi=waterData[i]         \n\t\t\t\t\t\t\t\t\t\t   Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t   --log.debug("geot_3300:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend   \n\t\t\t\t\t\t\t\t\telse\n                                   -- log.debug("geot_3300:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)                                \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n                        end\n\n                        --测斜\n                        if type_sensor==DigChar then\n\t\t\t\t\t        local Phy\n\t\t\t\t\t        local Length\n\t\t\t\t\t        local Temp\n                            if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n                                local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n                                local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n                                --获取通道设备deviceId\n                \t\t\t    local childDevice=getDeviceInfo(moduleNo,channelNo)\n                \t\t\t    local deviceId\n                                if childDevice~=nil then\n               \t\t\t\t\t    deviceId=childDevice.id\n                             \t    --log.debug("geot_3300:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n              \t\t\t\t        --log.debug("geot_3300:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n                                   -- log.debug("geot_3300:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination         \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend            \n                         \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("geot_3300:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length            \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1                         \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻（差阻）\n                        if type_sensor==ResistanceChar then\n\t\t\t\t\t        --local R1Length = string.len(singleData[kkk]) - 3;  --取消\n                            --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n                            local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n                            local Temp;\n                            local Phy\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s  f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s  Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s  b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s  a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s  Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil  then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n                  \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n                                      Phy =f*(R1/r1 -Zo)+b*Temp\n                                      --log.debug("geot_3300: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n                    \t\t\t\telse\n                              \t\t\t --log.debug("geot_3300: 数据无效 m=%s,c=%s, r1=0")\n                                          break\n                  \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("geot_3300:差阻模块  m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n                    end\n\t\t\t\tend\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    --log.debug("geot_3300resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("geot_3300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     --log.debug("geot_3300:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("geot_3300 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t  -- log.debug("geot_3300 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t --log.debug("geot_3300:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n      -- log.debug("geot_3300:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    --log.debug("geot_3300 校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length=getIndex(alldata)\n    local data=string.sub(alldata,1,length*2)\n    --log.debug("data:"..data)\n    local plu16={}\n    plu16[0]=string.sub(data,-8,-7)\n    plu16[1]=string.sub(data,-6,-5)\n    local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n    -- log.debug("geot_3300:".."plu16[0]是："..plu16[0])\n    -- log.debug("geot_3300:".."plu16[1]是："..plu16[1])\n    -- log.debug("geot_3300:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("geot_3300:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n     --   errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    --log.debug("geot_3300 校验通过")\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nGetSWData=function(sData,j)\n    local SW={}\n\n    local Water1 = tonumber(string.sub(sData[j],8,-1));\n    local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n    local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n    local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n    local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n    local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n    \n    local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n    local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n    SW[1] = Water1/100 + Base1;\n    SW[2] = Water2/100 + Base2;\n    SW[3] = MaxWinSpeed;\n    SW[4] = Direction;\n    SW[5] = AverWinSpeed;\n    SW[6] = RealTImeWinSpeed;\n    SW[7] = NowDirection;\n    SW[8] = AccRain;\n    return SW;\nend	INLINE	2017-11-15 10:09:48.456+08	2019-05-17 15:10:01.607+08	2017-11-13	\N
fa95dbc3-abc9-43d2-98ba-9c176005b0b8	zm_Weather_2402	\N		1.0	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	f	39e9bd74-7ff5-4608-8f5a-6ec1fbfbf74c	Lua	--//Documents/02 协议分析/2016-10-09/西安中铭电气有限公司  WXA100-06M气象传感器使用手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "zm_Weather_2402", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("zm_Weather_2402 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("zm_Weather_2402 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n   \n  \n    if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n\t    buff=iota.appendHexByte(buff, 0x82, endian)\n        buff=iota.appendHexByte(buff, moduleNo, endian)             \n        buff=iota.appendHexByte(buff, 0x02, endian)              \n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \n        local xor=iota.hexCheckXor(buff, 1);\n        buff=iota.appendHexByte(buff, xor, endian)        \n        log.debug('zm_Weather_2402 ssend====>',buff);\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        end\n        ctx:done(result)\n    end\nend\n--86011b0100ff000060408eee4542cdec7f44475d173e16cfa1430000000072\n--moduleId=1\n--azimuthofWind=323.61785888671875\n--speedofWind=0.14781676232814789\n--temp=3.5\n--hum=49.482963562011719\n--pressure=1023.7000122070312\n--rainFall=0\n\nunmarshall=function(hex,moduleNoStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n      log.debug('开始解析')\n       --模拟byte[]\n\t   --local data={}\n\t   --for i=0,string.len(hex)-1,2 do\n\t      --local j=i/2\n\t\t  --data[j]=string.sub(hex,i+1,i+2)\n\t\t--end\n\t  \n\t    local temp = iota.hexToFloat(hex,6,'L');--//温度\n\t\tlocal hum = iota.hexToFloat(hex,10,'L');--//湿度\n        local pressure = iota.hexToFloat(hex,14,'L');--//压强\n        local speedofWind = iota.hexToFloat(hex,18,'L');--//风速\n        local azimuthofWind = iota.hexToFloat(hex,22,'L');--//风向\n        local rainFall = iota.hexToFloat(hex,26,'L');--//雨量\n       \n        out.data = {\n                temp=temp,\n\t\t\t\thum=hum,\n\t\t\t\tpressure=pressure,\n\t\t\t\tspeedofWind=speedofWind,\n\t\t\t\tazimuthofWind=azimuthofWind,\n\t\t\t\trainFall=rainFall\t\t\t\t\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoCheck)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 31  then\n        errormsg = 'Data is nil or InvalidLength'\n        errcode = 1001\n        return false\n    end\n\tlog.debug('长度校验通过')\n    if iota.hexToByte(data,0,'B') ~= 0x86 or iota.hexToByte(data,3,'B') ~= 0x01 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n\tlog.debug('CMD校验通过')\n    if moduleNoCheck~= tostring(iota.hexToByte(data,1,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n\tlog.debug('模块校验通过')\n    return true\nend\n\ntable_leng=function(t)\n  local leng=0\n  for k, v in pairs(t) do\n    leng=leng+1\n  end\n  return leng;\nend\n	INLINE	2017-12-07 14:10:06.865+08	2018-08-13 15:19:33.442+08	2017-12-07	\N
3d898b6b-02de-4029-a6fd-8df009aa4578	sxcg_displacement_1	\N	位移计	1.0	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	Lua	start=function()\n    log.debug("start %s, moduleId=%s", "sxcg_displacement_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0xaa, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    -- 010300AA0002E4 2B\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sxcg_displacement_1.lua",hex)\n    --0103040012d687\n    --"displacement": 1234567mm\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        \n       local displacement=iota.hexToInt(hex,3,'B')\n          \n        out.data = {\n            displacement=displacement\n          \n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "sxcg_displacement_1.lua",json.encode(out))\n    return json.encode(out)\nend	INLINE	2018-02-06 17:23:12.216+08	2018-08-23 15:25:39.911+08	2018-02-06	\N
06fa55b0-c96c-4704-8998-ffd96d4feaa2	YC_5001_xieyi	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n\nstart=function()\n  --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n  --local aa=iota.appendHexCrc8(checkstr,0)\n log.debug("enyi_2019 device=%s",json.encode(device))\n ok=ctx:asend("010203")\nend\n\n--缓存\n--local buff_random_32=""\n\nonData=function (hex)\n\t--主动上传式\n    --log.debug("enyi_2019:Received=>%s",hex)\n    devicePort=device.uplink.props.port  \n\tlog.debug("enyi_2019 port=%s Received=>%s",devicePort,hex)\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\t--\n\t\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\n\t\tlocal json_table=getJsonTable(hex)\n\t\tlog.debug("enyi_2019 port=%s json_table.Cmd_Type=%s",devicePort,json_table.Cmd_Type)\n\t\t--扬尘注册 C-S\n\t\tif json_table.Cmd_Type=="Register" then\n\t\t     log.debug("enyi_2019 devicePort=%s,处理注册信息",devicePort)\n\t\t\t--提取 device_Id\n\t\t\tlocal device_Id=json_table.Device_ID\n\t\t\t local Registercheck=""\n\t\t\tif device_Id~=device.props.Device_ID then\n\t\t\t   Registercheck="1"\n\t\t\t   log.debug("enyi_2019 devicePort=%s, C-S 注册校验错误,device_Id=%s,device.props.Device_ID=%s",devicePort,device_Id,device.props.Device_ID)\n\t\t\telse\n\t\t\t\tRegistercheck="0"\n\t\t\tend\n\t\t\t \n\t\t\t \n\t\t\tlocal Register_messageNo=string.sub(hex,9,9+7)\n\t\t\t \n\t\t\t--注册应答 \n\t\t    local tb_Register={}\n\t\t\tlocal timestamp=os.time()\n\t\t\tlocal random_32=getRandom32(timestamp)--随机数32=固定头(22)..时间戳(10)\n\t\t\t--buff_random_32=random_32  --保存随机数\n\t\t\ttb_Register.Cmd_Type="Register_Ret"\n\t\t\ttb_Register.Data_Check=Registercheck\t\t--CD55333ECFBF490B84145E61E6DCD028\t\n\t\t\ttb_Register.Random=random_32  --测试随机数"11223344556677889900112233445566"\n\t\t\tlocal cmdStr_Register=json.encode(tb_Register)\n\t\t     local buff_Register=creatResponse(cmdStr_Register,Register_messageNo)--消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Register)\n\t\t\tlog.debug("enyi_2019: devicePort=%s, s-C发送注册反馈=%s",devicePort,buff_Register)\n\t\t\t\n\t\t\t--扬尘登录 C-S\n\t\telseif json_table.Cmd_Type=="Login" then\n\t\t\tlog.debug("enyi_2019 devicePort=%s,处理登录信息",devicePort)\n\t\t\tlocal C_S_Device_ID=json_table.Device_ID\n\t\t\tlocal C_S_Random32=json_table.Random\n\t\t\tlocal C_S_Response=json_table.Response\n\t\t\tlocal S_Response=getMD5Response(C_S_Device_ID,C_S_Random32)\n\t\t\tlocal logincheck=""\n\t\t\tif string.upper(C_S_Response)~=string.upper(S_Response) then\n\t\t\t\tlogincheck="1"\n\t\t\t   log.debug("enyi_2019  devicePort=%s, C-S 登录response校验错误,C_S_Response=%s,S_Response=%s,C_S_Random32=%s",devicePort,string.upper(C_S_Response),string.upper(S_Response),C_S_Random32)\n\t\t\telse\n\t\t\t\tlogincheck="0"\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\t\tlocal login_messageNo=string.sub(hex,9,9+7)\n\t\t\t--登录应答\n\t\t\tlocal tb_Login={}\n\t\t\t--local timestamp_2=os.time()\n\t\t\t--local random_32_2=getRandom32(timestamp_2) --"BE4805E9EF1D41DFB6D732931F6C2F6C"\n\t\t\ttb_Login.SessionID=C_S_Random32    --tostring(random_32_2)\t\t\t\n\t\t\ttb_Login.Cmd_Type="Login_Ret"\n\t\t\ttb_Login.Data_Check=logincheck\t\t\t\n\t\t\tlocal cmdStr_Login=json.encode(tb_Login)\n\t\t    local buff_Login=creatResponse(cmdStr_Login,login_messageNo)--消息编号 时间戳\n\t\t\tok=ctx:asend(buff_Login)\n\t\t\tlog.debug("enyi_2019: devicePort=%s, s-C发送登录反馈=%s",devicePort,buff_Login)\n\n\t\t\t--扬尘数据 C-S\n\t\telseif json_table.Cmd_Type=="Reporting_Data" then\n\t\t\tlocal data_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_Data={}\n\t\t\tlocal timestamp_3=os.time()\t\t\n\t\t\ttb_Data.Cmd_Type="Reporting_Data_Ret"\n\t\t\ttb_Data.Data_Check="0"\n\t\t\ttb_Data.Control_Cmd="0"\n\t\t\ttb_Data.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_Data=json.encode(tb_Data)\n\t\t     local buff_Data=creatResponse(cmdStr_Data,data_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_Data)\n\t\t\tlog.debug("enyi_2019:devicePort=%s, s-C发送数据上报反馈=%s",devicePort,buff_Data)\n\t\t\t\n\t\t\t\n\t\t\t--\n\t\t\t--数据解析\n\t\t\tlocal device_ID=json_table.Device_ID\n\t\t\tlocal temperature=tonumber(json_table.Temp)\n\t\t\tlocal humidity=tonumber(json_table.Hum)\n\t\t\tlocal pm25=tonumber(json_table.PM2p5)\n\t\t\tlocal pm10=tonumber(json_table.PM10)\n\t\t\t--local tsp=tonumber(json_table.TSP)\n\t\t\tlocal nvh=tonumber(json_table.NVH)--噪声\n\t\t\tlocal speed=tonumber(json_table.Wind_Sp)--风速\n\t\t\tlocal directionEnum=tonumber(json_table.Wind_Dir)--风向\t\n\t\t\tlocal direction\n\t\t\tif \tdirectionEnum~=nil then\n                direction=directionEnum*22.5 --getWindDirection(directionEnum)\n\t\t\tend\n\t\t\tlog.debug("enyi_2019:devicePort=%s, 数据 =%s,%s,%s,%s,%s,%s,%s",devicePort,temperature,humidity,pm25,pm10,nvh,speed,direction)\n\t\t    temperature=tonumber(string.format('%0.1f',temperature))\n\t\t\thumidity=tonumber(string.format('%0.1f',humidity))\n\t\t\tpm25=tonumber(string.format('%0.0f',pm25))\n\t\t\tpm10=tonumber(string.format('%0.0f',pm10))\n\t\t\tnoise=tonumber(string.format('%0.1f',nvh))\n\t\t\tspeed=tonumber(string.format('%0.1f',speed))\n\t\t\tdirection=tonumber(string.format('%0.1f',direction))\t\n      \t\t--if temperature>-40 and humidity<0 and pm25<0 and pm10<0 and speed<0 and nvh<0 and direction<0 and temperature<=-40 and humidity<0 and pm25<0 and pm10<0 and speed<0 and nvh<0 and direction<0\n      \t\tif temperature<-40 or temperature>60 then\n        \t\ttemperature=nil\n               out.result = {code = 5001, msg = '温度超阈值[-40,60]'} \n            end\n      \t\tif  humidity<=0 or humidity>100 then\n        \t\thumidity=nil\n        \t\tout.result = {code = 5001, msg = '湿度超阈值[0,100]'} \n        \tend\n      \t\tif  pm25<=0 or pm25>700 then\n        \t\tpm25=nil\n        \t\tout.result = {code = 5001, msg = 'pm2.5超阈值[0,700]'} \n        \tend\n      \t\tif  pm10<=0 or pm10>700 then\n        \t\tpm10=nil\n        \t\tout.result = {code = 5001, msg = 'pm10超阈值[0,700]'} \n        \tend\n      \t\tif  speed<0 or speed>24.5 then\n        \t\tspeed=nil\n        \t\tout.result = {code = 5001, msg = '风速超阈值[0,24.5]'} \n        \tend\n      \t\tif  direction<0 or direction>360 then\n        \t\tdirection=nil\n        \t\tout.result = {code = 5001, msg = '风向超阈值[0,360]'} \n        \tend\n      \t\tif  nvh<0 or nvh>200 then\n        \t\tnvh=nil\n        \t\tout.result = {code = 5001, msg = '噪声超阈值[0,200]'}\n        \tend\n                out.data={\n                            temperature=temperature,\n                            humidity=humidity,\n                            pm25=pm25,\n                            pm10=pm10,\n                            noise=nvh,\n                            speed=speed,\n                            direction=direction\t\n                }\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t--扬尘保活 C-S\n\t\telseif json_table.Cmd_Type=="KeepAlive" then\n\t\t\tlocal KeepAlive_messageNo=string.sub(hex,9,9+7)\n\t\t\tlocal tb_KeepAlive ={}\n\t\t\tlocal timestamp_4=os.time()\n\t\t\ttb_KeepAlive.Cmd_Type="KeepAlive_Ret"\n\t\t\ttb_KeepAlive.Data_Check="0"\n\t\t\ttb_KeepAlive.Control_Cmd="0"\n\t\t\ttb_KeepAlive.SessionID=json_table.SessionID\n\t\t\tlocal cmdStr_KeepAlive=json.encode(tb_KeepAlive)\n\t\t     local buff_KeepAlive=creatResponse(cmdStr_KeepAlive,KeepAlive_messageNo)----消息编号 时间戳\n\t\t\t ok=ctx:asend(buff_KeepAlive)\n\t\t\tlog.debug("enyi_2019:devicePort=%s, s-C发送注册反馈=%s",devicePort,buff_KeepAlive)\n\t\t \n\t\t \n\t\tend\n\t\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("enyi_2019 devicePort=%s, resultData=%s",devicePort,resultData)\n\tctx:notify(resultData)\nend\n\n\n\n\ngetWindDirection=function(num)\n   local NO=tonumber(num+1)\n\tlocal WindDirections={"北","东北偏北","东北","东北偏东","东","东南偏东","东南","东南偏南","南","西南偏南","西南","西南偏西","西","西北偏西","西北","西北偏北"}\n\tlocal direction=WindDirections[NO]\n\treturn direction\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("enyi_2019 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("enyi_2019: devicePort=%s,查询m=%s c=%s子设备 是否匹配设备child=%s",devicePort,tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("enyi_2019  devicePort=%s,子设备模块通道 接口获取 m=%s,c=%s ",devicePort,moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("enyi_2019 devicePort=%s,子设备模块通道 属性获取 m=%s,c=%s ",devicePort,moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("enyi_2019: devicePort=%s, m=%s c=%s 匹配到 子设备原形child=%s",devicePort,moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("enyi_2019: devicePort=%s, subdevices是nil")\n    \treturn nil\n    end\nend\n\n\n--获取收到数据中的json\ngetJsonTable=function(hex)\n\n\tlocal IDX_json=24; \n\tlocal length=string.len(hex)\n\tlocal json_hex=string.sub(hex,2*IDX_json+1,length-4*2)       \n\tlocal jsonStr=HextoStr(json_hex)\n     log.debug("enyi_2019  devicePort=%s,校验前jsonStr=%s",devicePort,jsonStr)\n    local jsonStr_New=string.gsub(jsonStr,",\\r\\n}","\\r\\n}") \n    log.debug("enyi_2019 devicePort=%s,校验后jsonStr=%s",devicePort,jsonStr)\n    local tableJson=json.decode(jsonStr_New)\n\tlog.debug("enyi_2019 devicePort=%s,type(tableJson)=%s,tableJson=%s",devicePort,type(tableJson),json.encode(tableJson))\n  \tlog.debug("enyi_2019 devicePort=%s,table转换ok",devicePort)\n\treturn tableJson\nend\n\n--服务器应答\ncreatResponse=function(jsonStr,messageNo)\n   log.debug("enyi_2019 devicePort=%s,应答json=%s,messageNo=%s",devicePort,jsonStr,messageNo)--消息标号=时间戳（H）\n   --local headerHex="5aa50100"..string.format("%08x",messageNo).."534445590200020100000000"\n   local headerHex="5aa50100"..messageNo.."534445590200020100000000"  --直接采用设备上报的  消息编号\n   local jsonhex=StrtoHex(jsonStr)\n   --报文长度\n   local allLength=4+string.len(jsonhex)/2\n   local cmd_length=string.format("%08x",allLength)\n   local cmdHex=headerHex..cmd_length..jsonhex\n   log.debug("enyi_2019 devicePort=%s,crc8 校验前cmdHex=%s",devicePort,cmdHex)\n   local cmdHex=iota.appendHexCrc8(cmdHex,0);\n   log.debug("enyi_2019 devicePort=%s,crc8 校验后cmdHex=%s",devicePort,cmdHex)\n   local cmdHex=cmdHex.."000304"\n   \n   return cmdHex\nend\n\n--hex -> ASCII\nHextoStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nStrtoHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nIsValid=function (data)\n\tlog.debug('enyi_2019:devicePort=%s,开始校验数据',devicePort)\n    if data == nil or string.len(data)/2 < 100 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif string.sub(data,1,4)~="5aa5" or string.sub(data,-4,-1)~="0304" then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n\t\n\t-- local moduleR = tostring(iota.hexToShort(data,2,'B'))\n\t-- if moduleR ~=tostring(moduleNoStrCheck) then\n        -- errormsg = 'module is invalid='..moduleR\n        -- errcode = 1003\n        -- return false\n    -- end\n    log.debug('enyi_2019:devicePort=%s,校验通过',devicePort)\n\treturn true\t\nend\n\n\ngetMD5Response=function(deviceId,randomNum32)\n   local HA1="59ABD5A817CCFA22CB0F1C3E3E77C4D9"\n   local HA2=crypto.md5(deviceId..":"..randomNum32)\n   local HA3=crypto.md5(string.upper(HA1)..":"..string.upper(HA2))\n   return string.upper(HA3)\nend\n\ngetRandom32=function(num10)\t\n\tlocal num32="1000000000000000000000"..tostring(num10)\n\treturn num32\nend\n	INLINE	2018-08-02 10:43:34.579+08	2019-01-04 17:31:12.962+08	2018-08-02	\N
cc42ea9a-ff73-473a-8b2d-3b1da63c42c3	gdjw_pressure_6900	\N		1.0	dade7e83-25b6-4932-993c-6d886fec9843	dade7e83-25b6-4932-993c-6d886fec9843	f	dade7e83-25b6-4932-993c-6d886fec9843	Lua	--D:\\SVN\\201812项目\\20181207待接入项目\\2、广东江威设备接入-孟凡侠\\R485通讯通讯协议.doc\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gdjw_pressure_6900 设备模块 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("gdjw_pressure_6900,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("gdjw_pressure_6900  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--0103021388b512\n--"pressure": 5000\nunmarshall=function(hex,moduleNoStr)\n    log.debug("gdjw_pressure_6900 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToShort(hex,3,'B')\n    \n        out.data = {           \n            pressure=tonumber(string.format('%0.3f',pressure))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("gdjw_pressure_6900 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = string.format('返回数据长度无效=%s≠7',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataMoudle=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n        errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2018-12-29 09:50:49.587+08	2019-03-04 13:41:42.508+08	2018-12-29	\N
b60cccff-fd27-4bd5-9d9b-95059739c1bb	11	\N	There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard.	11	fdda6836-c22c-4553-934b-5ed334d2d1fc	fdda6836-c22c-4553-934b-5ed334d2d1fc	f	fdda6836-c22c-4553-934b-5ed334d2d1fc	Lua	if (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n	INLINE	2018-05-10 10:38:02.423+08	2018-05-10 10:38:02.423+08	2018-05-10	\N
1b896530-ebfa-432d-83e9-25aa5d2177a0	fs_vibrateWire_1400	\N	老版本振弦采集仪	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load  fs_1401 moudle = %s ",device.uplink.props.module)\n    --log.debug("fs_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\telse\n\t\t\t    log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n                log.debug("fs_1401 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2018-08-27 14:25:12.584+08	2018-08-27 15:50:48.672+08	2018-08-27	\N
907b7ad5-da60-4249-ada4-f02a812acdac	jzyg_weather_46	\N	锦州阳光气象科技有限公司	1.0	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	f	e54b85b0-151e-4b74-b360-a8ae65addd46	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("load script %s, moduleId=%s", "jzyg_weather_46.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n    --350001030C171220074007010C007D007D007D007D007D02A90254025402540254271B007D271B037C0238037C0238037C02380238010E0017007000680002001E0005000500050005000500050005001801C403FF03FF03FF03FF03FF03FF03FF1600008700647171\n    log.debug("jzyg_weather_46  onData(%s), dev=%s", hex, json.encode(device) )\n    local out={\n        type=1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local ambientTemperature =iota.hexToShort(hex,11,'B')*0.1\n        local temperature1 =iota.hexToShort(hex,13,'B')*0.1\n        local temperature2 =iota.hexToShort(hex,15,'B')*0.1\n        local temperature3 =iota.hexToShort(hex,17,'B')*0.1\n        local temperature4 =iota.hexToShort(hex,19,'B')*0.1\n        local temperature5 =iota.hexToShort(hex,21,'B')*0.1\n        local dewPoint =iota.hexToShort(hex,23,'B')*0.01\n        local ambientHumidity =iota.hexToShort(hex,25,'B')*0.1\n        local groundHumidity1 =iota.hexToShort(hex,27,'B')*0.1\n        local groundHumidity2 =iota.hexToShort(hex,29,'B')*0.1\n        local groundHumidity3 =iota.hexToShort(hex,31,'B')*0.1\n        local CO2 =iota.hexToShort(hex,33,'B')*0.1\n        local evaporation =iota.hexToShort(hex,35,'B')*0.1\n        local airPressure =iota.hexToShort(hex,37,'B')*0.1\n        local instantaneousTotalRadiation1 =iota.hexToShort(hex,39,'B')*1\n        local instantaneousScatteredRadiation =iota.hexToShort(hex,41,'B')*1\n        local instantaneousDirectRadiation =iota.hexToShort(hex,43,'B')*1\n        local instantaneousTotalRadiation2 =iota.hexToShort(hex,45,'B')*1\n        local instantaneousNetRadiation =iota.hexToShort(hex,47,'B')*1\n        local instantaneousPhotosyntheticRadiation =iota.hexToShort(hex,49,'B')*1\n        local instantaneousUltravioletRadiation =iota.hexToShort(hex,51,'B')*1\n        local windDirection =iota.hexToShort(hex,53,'B')*1\n        local windSpeed =iota.hexToShort(hex,55,'B')*0.1\n        local windSpeed2mins =iota.hexToShort(hex,57,'B')*0.1\n        local windSpeed10mins =iota.hexToShort(hex,59,'B')*0.1\n        local intervalRainfall =iota.hexToShort(hex,61,'B')*0.1\n        local intervalSunshine =iota.hexToShort(hex,63,'B')*1\n        local sumTotalRadiation1 =iota.hexToShort(hex,65,'B')*0.001\n        local sumScatteredRadiation =iota.hexToShort(hex,67,'B')*0.001\n        local sumDirectRadiation =iota.hexToShort(hex,69,'B')*0.001\n        local sumTotalRadiation2 =iota.hexToShort(hex,71,'B')*0.001\n        local sumNetRadiation =iota.hexToShort(hex,73,'B')*0.001\n        local sumPhotosyntheticRadiation =iota.hexToShort(hex,75,'B')*0.001\n        local sumUltravioletRadiation =iota.hexToShort(hex,77,'B')*0.001\n        local dailyRainfall =iota.hexToShort(hex,79,'B')*0.1\n        local sunshineHour =iota.hexToShort(hex,81,'B')*1\n        local dailyTotalRadiation1 =iota.hexToShort(hex,83,'B')*0.001\n        local dailyScatteredRadiation =iota.hexToShort(hex,85,'B')*0.001\n        local dailyDirectRadiation =iota.hexToShort(hex,87,'B')*0.001\n        local dailyTotalRadiation2 =iota.hexToShort(hex,89,'B')*0.001\n        local dailyNetRadiation =iota.hexToShort(hex,91,'B')*0.001\n        local dailyPhotosyntheticRadiation =iota.hexToShort(hex,93,'B')*0.001\n        local dailyUltravioletRadiation =iota.hexToShort(hex,95,'B')*0.001\n        local illuminance=iota.hexToShort(hex,97,'B')*10\n        local voltage =iota.hexToShort(hex,99,'B')*0.1\n        local PM25 =iota.hexToShort(hex,101,'B')\n\n      \n       \n        \n\n        out.data = {                --需要测试\n        ambientTemperature = ambientTemperature,\n        temperature1 = temperature1,\n        temperature2 = temperature2,\n        temperature3 = temperature3,\n        temperature4 = temperature4,\n        temperature5=temperature5,\n        dewPoint=dewPoint,\n        ambientHumidity=ambientHumidity,\n        groundHumidity1=groundHumidity1,\n        groundHumidity2=groundHumidity2,\n        groundHumidity3=groundHumidity3,\n        CO2=CO2,\n        evaporation=evaporation,\n        airPressure=airPressure,\n        instantaneousTotalRadiation1=instantaneousTotalRadiation1,\n        instantaneousScatteredRadiation=instantaneousScatteredRadiation,\n        instantaneousDirectRadiation=instantaneousDirectRadiation,\n        instantaneousTotalRadiation2=instantaneousTotalRadiation2,\n        instantaneousNetRadiation=instantaneousNetRadiation,\n        instantaneousPhotosyntheticRadiation=instantaneousPhotosyntheticRadiation,\n        instantaneousUltravioletRadiation=instantaneousUltravioletRadiation,\n        windDirection=windDirection,\n        windSpeed=windSpeed,\n        windSpeed2mins=windSpeed2mins,\n        windSpeed10mins=windSpeed10mins,\n        intervalRainfall=intervalRainfall,\n        intervalSunshine=intervalSunshine,\n        sumTotalRadiation1=sumTotalRadiation1,\n        sumScatteredRadiation=sumScatteredRadiation,\n        sumDirectRadiation=sumDirectRadiation,\n        sumTotalRadiation2=sumTotalRadiation2,\n        sumNetRadiation=sumNetRadiation,\n        sumPhotosyntheticRadiation=sumPhotosyntheticRadiation,\n        sumUltravioletRadiation=sumUltravioletRadiation,\n        dailyRainfall=dailyRainfall,\n        sunshineHour=sunshineHour,\n        dailyTotalRadiation1=dailyTotalRadiation1,\n        dailyScatteredRadiation=dailyScatteredRadiation,\n        dailyDirectRadiation=dailyDirectRadiation,\n        dailyTotalRadiation2=dailyTotalRadiation2,\n        dailyNetRadiation=dailyNetRadiation,\n        dailyPhotosyntheticRadiation=dailyPhotosyntheticRadiation,\n        dailyUltravioletRadiation=dailyUltravioletRadiation,\n        illuminance=illuminance,\n        voltage=voltage,\n        PM25=PM25,\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n  log.debug("jzyg_weather_46  Data -- %s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    local moduleNo=iota.hexToShort(data,1,'B')\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    if tonumber(device.props.moduleId)~=moduleNo then\n        errormsg = 'moduleId is wrong'\n        errcode = 1001\n        return false\n    end  \n    if string.len(data)~=210 then\n        errormsg = 'length is not fit'\n        errcode = 1001\n        return false\n    end  \n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-12-20 14:59:37.771+08	2018-02-28 18:32:12.223+08	2017-12-20	\N
87d43c5d-15f4-462d-85d9-dae114bfa3ab	GZM_5002_xieyi	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//\n\nstart = function()\n    ok, resp = ctx:ssend('01020304', 5000)\nend\n\nonData = function(hex)\n    --log.debug("fs_gzm_2018 收到数据=%s", hex)\n    --log.debug("fs_gzm_2018 device =%s", json.encode(device))\n    --log.debug("fs_gzm_2018subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = HextoStr(hex)\n        --log.debug('fs_gzm_2018:sData是 %s', sData)\n        --获取子字符串表\n        local dataTable = json.decode(sData)\n\n        --log.debug("fs_gzm_2018   dataTable=%s",json.encode(dataTable))\n\n        --分析单类数据\n        if dataTable ~= nil then\n            for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n                --log.debug("fs_gzm_2018   k=%s,sensorValue=%s",k,json.encode(sensorValue))\n                if k >= 1 then\n                    local factorId = tonumber(sensorValue.factorid)\n                    local factorName = getFactorName(factorId)\n                    local moduleNo = tonumber(sensorValue.moduleId)\n                    local channelNo = tonumber(sensorValue.channel)\n                    --log.debug( 'fs_gzm_2018   k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s',k,factorId,factorName,moduleNo,channelNo)\n                    --解析单条数据\n                    for kdata, vdata in ipairs(sensorValue.data) do\n                        --log.debug('fs_gzm_2018:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n                        local anglex = tonumber(vdata.value[1])\n                        local angley = tonumber(vdata.value[2])\n                        --log.debug('fs_gzm_2018   factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n                        local force  --轴力\n\n                        local length_cj  --模板沉降\n                        local length_sp  --水平位移\n\n                        if factorId == 0 then --模板沉降\n                            length_cj = tonumber(vdata.value[3])\n                        elseif factorId == 1 then --水平位移\n                            length_sp = tonumber(vdata.value[3])\n                        elseif factorId == 2 then --轴力\n                            force = tonumber(vdata.value[3])\n                        else\n                            --log.debug('fs_gzm_2018   factorId=%s,type=%s', factorId, type(factorId))\n                        end\n\n                        local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n                        local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n                        --log.debug('fs_gzm_2018   timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n                        --获取通道设备deviceId\n                        local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n                        local deviceId\n                        if childDevice ~= nil then\n                            --log.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n                            deviceId = childDevice.id\n                        else\n                            --log.debug('fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n                        end\n\n                        local data1 = {\n                            data = {\n                                x = anglex,\n                                y = angley,\n                                force = force,\n                                settling = length_cj,\n                                displacement = length_sp\n                            },\n                            device = deviceId,\n                            time = recordTime,\n                            type = 1\n                        }\n                        table.insert(out.data, data1)\n                    end\n                end\n            end\n        else\n            log.debug('fs_gzm_2018 数据不完整')\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    --log.debug('fs_gzm_2018 resultData=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                --log.debug('fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    --log.debug('fs_gzm_2018:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fs_gzm_2018: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('fs_gzm_2018  校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        log.debug('fs_gzm_2018: 校验失败 Data is nil')\n        return false\n    end\n\n    if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n        errormsg = 'CMD is wrong'\n        errcode = 1002\n        log.debug('fs_gzm_2018: 校验失败 CMD is wrong')\n        return false\n    end\n\n    log.debug('fs_gzm_2018: 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = string.sub(hex,2*i-1,2*i)\n        local ascii=string.char(tonumber(bi,16))\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetFactorName = function(num)\n    local NO = tonumber(num + 1)\n    local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n    local FactorName = FactorNames[NO]\n    return FactorName\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2018-08-02 10:44:13.645+08	2019-08-07 13:45:30.799+08	2018-08-02	\N
b8292b20-401c-4add-9928-fbcda8b8985f	nengh_tempHumi_8304	\N		1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	\n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NHSF48AR土壤水分（温度）.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_temphunmi 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("nengh_temphunmi,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  log.debug("nengh_temphunmi  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\n--0103040702071de17e\n--temperature=17.94\n--humidity=18.21\n\n\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("nengh_temphunmi m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local temperature =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal humidity =iota.hexToUShort(hex,5,'B')/100\n    \n        out.data = {           \n            temperature=temperature,\n\t\t\t\thumidity=humidity\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("nengh_temphunmi m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n	INLINE	2018-11-22 17:01:21.076+08	2018-11-22 17:18:23.068+08	2018-11-22	\N
7e1e8da3-20b2-4657-bfa2-7a39b17fdd6b	fs_1503	\N		1503	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	-- 001626C68184DEF28AA5120D61FFDACFBEFFC22929F831\n-- 000126C6810D6FFDA1FFDACFBEF831\nstart=function()    \n    log.debug("floatToHex:%s", iota.floatToHex(-101.2))\n\tlog.debug("device.uplink.props.module=%s", device.uplink.props.module)\n    log.debug("json:%s", json.encode(capability))\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)                --2: 0015 协议类型=21\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian) -- 2: 0538 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                -- 1: 01   指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,3000)\n    local result = unmarshall(ok,resp)\n    log.debug("result=%s",result)\n    ctx:done(result)\nend\n\nunmarshall=function(ok, hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (ok and string.len(hex) >=23 ) then\n        --   2   2   1      4     4       2\n        -- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n    \tlocal scale = 1000000.00;\n\t\tlocal temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        if (temp>45) then\n          -- invalid data\n          out.data={\n          }\n          out.result={\n            code=1002,\n            msg="over range"\n          }\n        else\n          out.data = {\n            x=xa,\n            y = ya,\n      \t\ttemp = temp,\n          }\n        end\n    else\n    \tlocal msg\n        if ok then\n           msg= 'Invalid Msg, len='..string.len(hex)\n        else \n           msg="Timeout" \n        end\n        out.result = {code=1001,msg=msg}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-08-12 17:26:40.466+08	2019-03-08 09:22:17.908+08	\N	\N
9e7ff46c-0808-4b46-878d-0614995edc11	geot_1539	\N	基泰4通道485采集仪非振弦	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function()\n\n   -- ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("geot_1539:".."测试下发01020304正常")\n-- end\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1539:Received=>%s",hex)\n\t-- var_dump(ctx,3,"")\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\t\n\t\t\n\n\t\tlocal IDX_DIRECTION_X=27;\n\t\tlocal IDX_DIRECTION_Y=29;\n\t\tlocal Data_X \n\t\tlocal Data_Y\n\t\tlocal anglex\n\t\tlocal angley\n\t\tlocal pc\n\t\tlocal phy\n\t\tfor i=0,3,1 do\n\t\t\n\t\t\tlocal subDevice=getDeviceInfo("default",i+1)\n\t\t\tif subDevice==nil then\n\t\t\t   log.debug("geot_1539:c=%s  break for loop",i+1)\n\t\t\t   break\n\t\t\tend\n\t\t\tlocal deviceId=subDevice.id\n\t\t\tlocal pc = subDevice.props.model --获取子设备的型号\n\t\t\tlog.debug("geot_1539:c=%s  pc=%s device=%s",i+1,pc,json.encode(subDevice))\n            if pc == 'GT-MCU4-MI600T'then -- or pc == 'GT-MCU4-MI600E' \n\t\t\t     \n\t\t\t\tData_X = iota.hexToShort(hex, IDX_DIRECTION_X + i* 6,'B')\n\t\t\t\tData_Y = iota.hexToShort(hex, IDX_DIRECTION_Y + i* 6,'B')\n\t\t\t\tlog.debug("geot_1539:Data_X=%s,Data_Y=%s",Data_X,Data_Y)\n\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\t\t--公式计算\n\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "72133db4-abf6-4073-bc7f-b99c12aca33c" then -- metaid 待确定\n\t\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\tlog.debug("geot_1539: i=%s基泰公式参数=%s,%s,%s,%s,%s",i,K1,K2,K3,Fo,To)\n\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\t\t\t\t\t\n\t\t\t\t\t\tlocal Fi=Data_X         \n\t\t\t\t\t\tanglex = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\n\t\t\t\t\t\tif Data_Y~=nil then\n\t\t\t\t\t\t\tFi=Data_Y\n\t\t\t\t\t\t\tangley = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlog.debug("geot_1539: c=%s anglex=%s  angley=%s",i+1,anglex,angley)\n\t\t\t\t\tend            \n\t\t\t\tend\n\t\t\t\t\n\t\t\t\tlocal data1={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex=anglex,\n\t\t\t\t\t\t\t\t\tangley=angley\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\n\t\t\telse  --非 倾角的其他传感器\n\t\t\t\t\tData_X = iota.hexToUInt(hex,27 + i*6,'B')\n                    log.debug("geot_1539: c=%s Data_X=%s ",i+1,Data_X)\n                    if  Data_X == 0xffffffff then \n\t\t\t\t\t    log.debug("geot_1539: c=%s Data_X == 0xffffffff")\n\t\t\t\t\t\tbreak \n\t\t\t\t\tend\n                    local osBuilder = string.sub(hex,2*(27+i*6)+1,2*(27+i*6)+8)\n\t\t\t\t\tlog.debug("geot_1539: c=%s osBuilder=%s",i+1,osBuilder)\n                    osBuilder = string.format('%s%s%s%s',string.sub(osBuilder,7,8),string.sub(osBuilder,5,6),string.sub(osBuilder,3,4),string.sub(osBuilder,1,2))\n\t\t\t\t\tlog.debug("geot_1539: c=%s reverse(osBuilder)=%s ",i+1,osBuilder)\n                    local sign = 0\n                    if tonumber(string.sub(osBuilder,3,3)) == 8 then\n                        sign = -1 \n                    else \n                        sign = 1\n                    end\n\t\t\t\t\t\n                    Data_X = tonumber(string.sub(osBuilder,4,-1))*sign\t\n                     log.debug("geot_1539: c=%s Data_X=%s,osBuilder=%s,sign=%s ",i+1,Data_X,osBuilder,sign)\t\t\t\t\t\n\t\t\t\t\t\t\t--公式计算  P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)\n\t\t\t\t\tif subDevice.uplink.capabilities[1].formula.metaid == "72133db4-abf6-4073-bc7f-b99c12aca33c" then -- metaid 待确定\n\t\t\t\t\t\tlocal K1 = subDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\tlocal K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\tlocal K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\tlog.debug("geot_1539: c=%s 公式48参数=%s,%s,%s,%s,%s",i+1,K1,K2,K3,Fo,To)\n\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\t\t\t\t\t\n\t\t\t\t\t\t\tlocal Fi=Data_X         \n\t\t\t\t\t\t\tphy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\t\t\t\t\t\n\t\t\t\t\t\t\tlog.debug("geot_1539: c=%s phy=%s",i+1,phy)\n\t\t\t\t\t\tend            \n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=phy\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t}\n\t\t\t\t\t--若是单轴\n\t\t\t\t\tif pc == 'GT-MCU4-MI600E'then \n\t\t\t\t\t\tdata1={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tanglex=phy\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1 \n\t\t\t\t\t\t}\n\t\t\t         end\n\t\t\t\t     \n\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\t\n\t\tend\n\tend\n\tlocal resultData =json.encode(out)\n    log.debug("geot_1539: out data=%s", json.encode(out))\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("geot_1539 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("geot_1539:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1539 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("geot_1539 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) or  moduleNoId=="default" then  --添加 默认无模块号  依靠通道号校验（仅限单模块号采集仪）\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then                \n          \t\t log.debug("geot_1539:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("geot_1539: m=%s , c=%s, child=nil",moduleNoId,channelNoId)\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('geot_1539:开始校验数据')\n    if data == nil or string.len(data)/2 ~= 51 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n    log.debug('geot_1539:校验通过')\n\treturn true\n\t\nend\n	INLINE	2018-04-02 10:47:17.157+08	2019-07-12 15:54:53.788+08	2018-04-02	\N
3ba4748d-4a2e-4b5a-84ff-3e36e397671d	mas_vibrateWire_1401	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load  mas_1401 moudle = %s ",device.uplink.props.module)\n    --log.debug("mas_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("mas_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("mas_1401 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("mas_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\telse\n        \t\tout.result={code=1001,msg='超时'}\n\t\t\t    log.debug("mas_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("mas_1401  subdevices=nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n    log.debug("mas_1401  resultData=%s",resultData)\n    ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("mas_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('mas_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        log.debug("mas_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n                log.debug("mas_1401 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n  \tlocal datalen=string.len(data)/2\n    if data == nil or datalen ~= 22 then\n        errormsg = string.format('返回数据长度无效=%s≠22[%s]',datalen,data)\n        errcode = 1002\n\t\tlog.debug('mas_1401   Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    local dataCmd=iota.hexToByte(data,4,'B')\n    if dataCmd== 0xc0 then\n        errcode = 1003\n        errormsg = string.format('返回数据功能码无效=c0[%s]',data)\n\t\tlog.debug('mas_1401   Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = string.format('返回数据模块号无效=%s≠%s[%s]',moduleStr,moduleId,data)\n        errcode = 1004\n\t\tlog.debug('mas_1401  module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = string.format('返回数据通道号无效=%s≠%s[%s]',channelStr,channelId,data)\n\t\terrcode = 1004\n\t\tlog.debug('mas_1401  channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2018-06-15 09:29:49.606+08	2020-06-16 10:24:26.092+08	2018-06-15	\N
ea1b9563-b435-48d2-b5d5-6ac8887aa15d	11	\N	There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard.	11	fdda6836-c22c-4553-934b-5ed334d2d1fc	fdda6836-c22c-4553-934b-5ed334d2d1fc	f	fdda6836-c22c-4553-934b-5ed334d2d1fc	Lua	if (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n	INLINE	2018-05-10 10:47:40.019+08	2018-05-10 10:47:40.019+08	2018-05-10	\N
a0c8ab50-1f6a-43dd-b2e0-7e185e5c3c00	bl_force_1	\N	称重	1.0	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	f	4d2bdba7-f602-4d5b-b066-82902bbc7472	Lua	--//协议参考： Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n    log.debug("bl_lvdt_9101:device=%s",json.encode(device))\n    log.debug("load script %s, moduleId=%s", "bl_lvdt_9101.lua", device.uplink.props.module or device.props.moduleId)\n\tlocal moduleNo=device.props.moduleId or device.uplink.props.module \n  \tif tonumber(moduleNo) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = '无效的模块号>255'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, moduleNo, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)\n    buff=iota.appendHexWord(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x01, endian)                 --1: CMD 1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n--170302fffd71f6  moduleId=23\n--"elongationIndicator": -3\nunmarshall=function(hex,moduleNoStr)\n    log.debug("bl_lvdt_9101:data=%s",hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        -- 170302fffd71f6\n    \n        local elongation = iota.hexToShort(hex,3,'B')\n        out.data = {\n            force=elongation\n        }\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n  log.debug(string.sub(data,1,12))\n    if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n        errcode = 1001\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if moduleNoStrCheck ~= tostring(dataModule) then\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleNoStrCheck)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n\n	INLINE	2018-04-02 11:05:37.604+08	2019-01-30 16:20:51.764+08	2018-04-02	\N
cabb8dc7-293f-4cb1-b1e9-81e637fd8faf	nengh_PH_8303	\N		1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	\n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_PH 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("nengh_PH,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  log.debug("nengh_PH  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("nengh_PH m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local ph =iota.hexToUShort(hex,3,'B')/100\n    \n        out.data = {           \n            ph=ph        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("nengh_PH m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-11-20 15:16:51.179+08	2018-11-22 17:11:11.633+08	2018-11-20	\N
28d1a5bb-346e-4a5e-8854-a0c47f8357b7	CZJTM_acqunit_3002	\N		1.0	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	f	d5fa5193-b237-4a60-b82a-165c033e2596	Lua	start = function()\n    --log.debug("CZJTM_acqunit_3002 device = %s", json.encode(device))\n    local testDate = getDateTimeHexStr()\n    log.debug('CZJTM_acqunit_3002 testDate = %s', testDate)\n    local endian = 'B'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    if subdevices ~= nil then\n        for index, child in pairs(subdevices) do\n            local moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n            local channelNo = tonumber(child.uplink.props.channel)\n            log.debug('CZJTM_acqunit_3002 子设备模块通道 接口获取 m=%s,c=%s ', moduleNo, channelNo)\n\n            local projectId = 0\n            local buff = 'f00f'\n            buff = iota.appendHexWord(buff, 0, endian) ---1： 工程号\n            buff = iota.appendHexByte(buff, moduleNo, endian) -- 2: 模块号\n            buff = iota.appendHexByte(buff, 0xf7, endian) -- 3: 指令: f7 = 采集   --f3 脱机停止\n            buff = buff .. '0101'\n            --buff=iota.appendHexWord(buff, 0, endian)         -- 4: 设备识别码（通道号）\n\n            --local BCDdateStr=os.date("%y%m%d%H%M%S", os.time())      --5:日期\n            local dataStr = getDateTimeHexStr()\n            log.debug('CZJTM_acqunit_3002 dataStr=%s ', dataStr)\n            buff = buff .. dataStr\n            buff = buff .. '01000000000000000000000000000000'\n            buff = iota.appendHexCrc(buff, endian, 0)\n            ok, resp = ctx:ssend(buff, 15000)\n            log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] ssend=[%s].', moduleNo, channelNo, child.id, buff)\n            local result = '{}'\n            if ok then\n                result = unmarshall(resp, child, tostring(moduleNo), tostring(channelNo))\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] recvd data error.', moduleNo, channelNo, child.id)\n            end\n        end\n    else\n        log.debug('CZJTM_acqunit_3002:' .. 'subdevices是nil')\n        return nil\n    end\n    local resultData = json.encode(out)\n    log.debug('CZJTM_acqunit_3002  resultData=%s',resultData)\n    ctx:done(resultData)\nend\n\n--f00f000001f701011303060b100101000000000000000000000000000000b125\n--f00f000101e901011303060b110902001cbb1f4e2000000000000000006a55c1\nunmarshall = function(hex, subDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = subDevice.id,\n        type = 1\n    }\n\n    --local subModuleId=module\n    --local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    log.debug('CZJTM_acqunit_3002 module=%s,channel=%s [%s] recv=[%s].', subModuleId, subChannelId, subDevice.id, hex)\n    if ErrorCode then\n        local dataHex=string.sub(hex,2*15+1,-9)\n        local frequent=iota.hexToUInt(dataHex,0,'B')\n        local temperature=iota.hexToUShort(dataHex,4,'B')\n\t\tlocal value = nil\n\t\tlocal fre = 0\n\t\tif tonumber(subDevice.props.f0) ~= nil then\n\t\t\tfre = tonumber(subDevice.props.f0)\n\t\tend\n\t\tlocal K =  0\n\t\tif tonumber(subDevice.props.K) ~= nil then\n\t\t\tK = tonumber(subDevice.props.K)\n\t\tend\n        --数据有效性判断\n        if frequent==0 then\n            frequent=nil\n        else \n            frequent=frequent/1000\n      \t\tlog.debug('CZJTM_acqunit_3002 K = %s,fre = %s,frequent = %s', tostring(K),tostring(fre*fre),tostring(frequent*frequent))\n\t\t\tvalue = K*(frequent*frequent - fre*fre)\n        end\n\n        if temperature==20000 then\n            temperature=nil\n        else\n            temperature=temperature/100-30\n        end\n\t\t\n        subData.data = {\n            frequency = frequent,\n            temperature = temperature,\n\t\t\tphysicalvalue = value\n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\nIsValid = function(data, moduleId, channelId)\n    if data == nil or string.len(data) / 2 ~= 32 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('CZJTM_acqunit_3002 : Data is nil or invalid length. module=%s channel=%s recv = %s', moduleId, channelId, data)\n        return false\n    end\n    local hex_header = string.sub(data, 1, 4)\n    if hex_header ~= 'f00f' then\n        errcode = 1001\n        errormsg = 'Modbus Error Code '\n        log.debug('CZJTM_acqunit_3002  hex_header=%s≠f00f. module=%s channel=%s recv = %s', hex_header, moduleId, channelId, data)\n        return false\n    end\n\n    local moduleStr = tostring(iota.hexToByte(data, 4, 'B'))\n    if moduleId ~= moduleStr then\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        log.debug('CZJTM_acqunit_3002 : module error [errmodule=%s]. module=%s channel=%s recv = %s', moduleStr, moduleId, channelId, data)\n        return false\n    end\n    return true\nend\n\ngetDateTimeHexStr = function()\n    --BCD码日期 181220025358 --> 16进值日期 120c1402353a\n    local BCDdateStr = os.date('%y%m%d%H%M%S', os.time())\n    --print(string.format('BCDdateStr=%s',BCDdateStr))\n    local hexdateStr = ''\n    for i = 1, string.len(BCDdateStr), 2 do\n        local subBCDHex = string.sub(BCDdateStr, i, i + 1)\n        local newHex = string.format('%02x', tonumber(subBCDHex))\n        hexdateStr = hexdateStr .. newHex\n        log.debug('CZJTM_acqunit_3002  i=%s,subBCDHex=%s,newHex=%s,hexdateStr=%s', i, subBCDHex, newHex, hexdateStr)\n    end\n    return hexdateStr\nend	INLINE	2019-03-06 10:07:50.463+08	2019-03-07 14:54:15.098+08	2019-03-06	\N
795bc81a-cc56-4b80-93d5-7d4cacd0fc5b	GPRS-DesignC	\N	安全帽粒度配置下发	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("DesignConfig: start module %s", json.encode(device.uplink.props.module))\n\tlocal module = tostring(device.uplink.props.module)\n\tlocal interval = device.props.interval\n\tlocal hour = os.date("%H")\n  \tlocal date = string.format("%02d",hour)\n  \tlocal min = os.date("%M")\n  \tdate = date..string.format("%02d",min)\n  \tlocal sec = os.date("%S")\n  \tdate = date..string.format("%02d",sec)\n  \tlocal str = ""\n  \tif module == nil or date == nil or interval == nil then\n    \terrcode = 1001\n    \terrormsg = module.."have nil!"\n    else\n    \tstr = "*HQ,"..module..",D1,"..tostring(date)..","..interval..",1#"\n    \tlocal req = toHexStr(str)\n\t\tctx:asend(req)\n    \terrcode = 0\n    \terrormsg = module.."send:"..str\n    end\n\tlog.debug("DesignConfig: param interval: %s,date: %s HEXSTR: %s",tostring(interval),tostring(date),str)\n  \t    log.debug("DesignConfig: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n  out.result = {code=errcode,msg=errormsg}\n    local resultData =json.encode(out)\n    log.debug("DesignConfig: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nonData=function(hex)\n\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n  local bi = string.byte(str, i);\n  hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2019-05-16 18:01:38.151+08	2019-05-16 18:20:30.466+08	2019-05-16	\N
915cd9ab-b893-4670-ad79-93a2c14523bd	cy_lora_2018	\N		1.0	0235a43b-3369-4639-a955-05e9962ecc4c	0235a43b-3369-4639-a955-05e9962ecc4c	f	0235a43b-3369-4639-a955-05e9962ecc4c	Lua	--//\n\n start=function() \n    resp=ctx:asend("01020304")\n end\n\nonData=function(hex)\n    --log.debug("cy_lora_2018 收到数据=%s", hex)\n\t--log.debug("cy_lora_2018 device =%s", json.encode(device))\n    log.debug("cy_lora_2018 subdevices  data is =%s", hex)\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }   \n    \n    --03e9040d00cd00000c1425000000590843410f01700000   m=1001\n    --数据域 内的索引号\n    local ErrorCode,packNumber = IsValid(hex)\n    if ErrorCode then\n\t\tresp=ctx:asend("FFFE050A0801EAE6")--数据应答\n        local moduleNo=tonumber(string.sub(hex,1,4),16)  \n        log.debug("cy_lora_2018: moduleNo=%s",moduleNo)\n        --获取子字符串表\n        \n        \n        --log.debug("cy_lora_2018   dataTable=%s",json.encode(dataTable))\n        local nodeId=tonumber(string.sub(hex,1,4),16)\n\t\t--获取通道设备deviceId                     \n\t\tlocal childDevice=getDeviceInfo(nodeId)             \t\t\t\n\n\t\tlocal deviceId\n\t\tif childDevice~=nil then\n\t\t\tdeviceId=childDevice.id\n\t\t\t--所有输出项\n\t\t\tlocal temperature\n\t\t\tlocal\thumidity\n\t\t\tlocal\tsoil_temperature\n\t\t\tlocal\tsoil_humidity\n\t\t\tlocal\tintensity\n\t\t\tlocal\tconcentration_CO2\n\t\t\tlocal\tPH\n\t\t\tlocal\tCO2\n\t\t\tlocal\twindforce\n\t\t\tlocal\tNH4\n\t\t\tlocal\tH2S\n\t\t\tlocal\tweightvoltage\n\t\t\tlocal\tleaftemperature\n\t\t\tlocal\tpacktemperature1\n\t\t\tlocal\tpacktemperature2\n\t\t\tlocal\tpacktemperature3\n\t\t\tlocal\tpacktemperature4\n\t\t\tlocal\tO2\n\t\t\tlocal\tMINIR_60_CO2\n\t\t\tlocal\tmoisture\n\t\t\tlocal   voltage\n\t\t\t\n\t\t\t--分析节点下面传感器类型\n\t\t\tfor i=1,packNumber,1  do\t\t\t\t\n\t\t\t\t\n\t\t\t\tlocal index=3+(i-1)*5  \n\t\t\t\tlocal sensorModel=string.sub(hex,index*2+1,index*2+2)\n\t\t\t\t\n\t\t\t\tif sensorModel=='00' then  -- 00 空气 温湿度\n\t\t\t\t\tlocal temperature_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal temperature_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\ttemperature=tonumber(string.format("%s.%s",temperature_int,temperature_dec))-64\n\t\t\t\t\tlocal humidity_int=tonumber(string.sub(hex,(index+1)*2+5,(index+1)*2+6),16)\n\t\t\t\t\tlocal humidity_dec=tonumber(string.sub(hex,(index+1)*2+7,(index+1)*2+8),16)\n\t\t\t\t\thumidity=tonumber(string.format("%s.%s",humidity_int,humidity_dec))\n                    log.debug("cy_lora_2018  node_id=%s,温湿度00 temp=%s,humidity=%s",nodeId,temperature,humidity)\n\t\t\t\telseif sensorModel=="01" then  --土壤 温湿度\n\t\t\t\t\tsoil_temperature=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)\t\t\n\t\t\t\t\tsoil_humidity=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)\n          \t\t\tlog.debug("cy_lora_2018  node_id=%s,土壤温湿度01 temp=%s,humidity=%s",nodeId,soil_temperature,soil_humidity)\n\t\t\t\telseif sensorModel=="02" then --日照 klux\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal intensity_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal intensity_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tintensity=tonumber(string.format("%s.%s",intensity_int,intensity_dec))\n          \t\t\tlog.debug("cy_lora_2018  node_id=%s,日照02 intensity=%s",nodeId,intensity)\n\t\t\t\telseif sensorModel=="03" then --CO2 ppm\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal concentration_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal concentration_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tconcentration_CO2=tonumber(string.format("%s.%s",concentration_int,concentration_dec),16)\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,CO2 03 concentration_CO2=%s",nodeId,concentration_CO2)\n\t\t\t\telseif sensorModel=="04" then --PH\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal PH_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal PH_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tPH=tonumber(string.format("%s.%s",PH_int,PH_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,PH 04 PH=%s",nodeId,PH)\n\t\t\t\telseif sensorModel=="05" then -- 电导率 conductivity\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal conductivity_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal conductivity_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tconductivity=tonumber(string.format("%s.%s",conductivity_int,conductivity_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,电导率 05 conductivity=%s",nodeId,conductivity)\n\t\t\t\telseif sensorModel=="06" then -- 风力 windforce\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal windforce_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal windforce_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\twindforce=tonumber(string.format("%s.%s",windforce_int,windforce_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,风力 06 windforce=%s",nodeId,windforce)\n\t\t\t\telseif sensorModel=="07" then -- 氨气NH4 ppm\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal NH4_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal NH4_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tNH4=tonumber(string.format("%s.%s",NH4_int,NH4_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,氨气NH4 07 NH4=%s",nodeId,NH4)\n\t\t\t\telseif sensorModel=="08" then -- 硫化氢 H2S\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal H2S_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal H2S_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tH2S=tonumber(string.format("%s.%s",H2S_int,H2S_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,硫化氢 08 H2S=%s",nodeId,H2S)\n\t\t\t\telseif sensorModel=="09" then -- 电子台秤 mv\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal weightvoltage_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal weightvoltage_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tweightvoltage=tonumber(string.format("%s.%s",weightvoltage_int,weightvoltage_dec))\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,电子台秤 08 weightvoltage=%s",nodeId,weightvoltage)\n\t\t\t\telseif sensorModel=="0a" then -- 叶温传感器 \t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal leaftemperature_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal leaftemperature_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tleaftemperature=tonumber(string.format("%s.%s",leaftemperature_int,leaftemperature_dec))-64\n\t\t\t\telseif sensorModel=="0b" then  --包芯温度数据 4组   处理后，跳出循环\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal packtemperature1_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature1_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature1=tonumber(string.format("%s.%s",packtemperature1_int,packtemperature1_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature2_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature2_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature2=tonumber(string.format("%s.%s",packtemperature2_int,packtemperature2_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature3_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature3_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature3=tonumber(string.format("%s.%s",packtemperature3_int,packtemperature3_dec))-50\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tlocal packtemperature4_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal packtemperature4_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tpacktemperature4=tonumber(string.format("%s.%s",packtemperature4_int,packtemperature4_dec))\t-50\t\n\t\t\t\t\t\n\t\t\t\t\tindex=index+5\n\t\t\t\t\tvoltage=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\t\t\t\t\t\t\n\t\t\t\t\tbreak\n\t\t\t\telseif sensorModel=="0c" then -- 氧气 O2\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal O2_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal O2_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tO2=tonumber(string.format("%s.%s",O2_int,O2_dec))\n\t\t\t\telseif sensorModel=="0d" then -- MINIR-60 二氧化碳 CO2\t\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tMINIR_60_CO2=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\n\t\t\t\telseif sensorModel=="0e" then -- 水分值\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tlocal moisture_int=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+2),16)\n\t\t\t\t\tlocal moisture_dec=tonumber(string.sub(hex,(index+1)*2+3,(index+1)*2+4),16)\n\t\t\t\t\tmoisture=tonumber(string.format("%s.%s",moisture_int,moisture_dec))\t\n\t\t\t\telseif sensorModel=="0f" then -- 电压\t\t\t\t\t    \t\t\t\t\t\n\t\t\t\t\tvoltage=tonumber(string.sub(hex,(index+1)*2+1,(index+1)*2+4),16)*10\n\t\t\t\t\tlog.debug("cy_lora_2018  node_id=%s,电压 0f voltage=%s",nodeId,voltage)\t\t\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tlog.debug("cy_lora_2018   sensorModel=%s,type=%s",sensorModel,type(sensorModel))\n\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%6.2f",temperature)),\n\t\t\t\t\t\t\t\t\thumidity=tonumber(string.format("%6.2f",humidity)),\n\t\t\t\t\t\t\t\t\tsoil_temperature=tonumber(string.format("%6.2f",soil_temperature)),\n\t\t\t\t\t\t\t\t\tsoil_humidity=tonumber(string.format("%6.2f",soil_humidity)),\n\t\t\t\t\t\t\t\t\tintensity=tonumber(string.format("%6.2f",intensity)),\n\t\t\t\t\t\t\t\t\tconcentration_CO2=tonumber(string.format("%6.2f",concentration_CO2)),\n\t\t\t\t\t\t\t\t\tPH=tonumber(string.format("%6.2f",PH)),\n\t\t\t\t\t\t\t\t\tconductivity=tonumber(string.format("%6.2f",conductivity)),\n\t\t\t\t\t\t\t\t\twindforce=tonumber(string.format("%6.2f",windforce)),\n\t\t\t\t\t\t\t\t\tNH4=tonumber(string.format("%6.2f",NH4)),\n\t\t\t\t\t\t\t\t\tH2S=tonumber(string.format("%6.2f",H2S)),\n\t\t\t\t\t\t\t\t\tweightvoltage=tonumber(string.format("%6.2f",weightvoltage)),\n\t\t\t\t\t\t\t\t\tleaftemperature=tonumber(string.format("%6.2f",leaftemperature)),\n\t\t\t\t\t\t\t\t\tpacktemperature1=tonumber(string.format("%6.2f",packtemperature1)),\n\t\t\t\t\t\t\t\t\tpacktemperature2=tonumber(string.format("%6.2f",packtemperature2)),\n\t\t\t\t\t\t\t\t\tpacktemperature3=tonumber(string.format("%6.2f",packtemperature3)),\n\t\t\t\t\t\t\t\t\tpacktemperature4=tonumber(string.format("%6.2f",packtemperature4)),\n\t\t\t\t\t\t\t\t\tO2=tonumber(string.format("%6.2f",O2)),\n\t\t\t\t\t\t\t\t\tMINIR_60_CO2=tonumber(string.format("%6.2f",MINIR_60_CO2)),\n\t\t\t\t\t\t\t\t\tmoisture=tonumber(string.format("%6.2f",moisture)),\n\t\t\t\t\t\t\t\t\tvoltage=tonumber(string.format("%6.2f",voltage))\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\n\t\t\ttable.insert(out.data,data1)   \n\t\t\n\t\telse\n\t\t\tlog.debug("cy_lora_2018:%s节点 deviceId为nil:m=%s,c=%s",factorName,moduleNo,channelNo)\n\t\tend\n\t\t\n        \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("cy_lora_2018resultData=%s", json.encode(out))\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("cy_lora_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     --log.debug("cy_lora_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t --local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\t\t\t\n\t\t\t\tlog.debug("cy_lora_2018 子设备模块通道 接口获取 m=%s",moduleStrCheck)\n\t\t\telse\n\t\t\t   log.debug("cy_lora_2018 子设备 无接口属性")\n\t\t\t   return nil\n\t\t\t   \n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  \n                \n          \t\tlog.debug("cy_lora_2018:  m=%s 匹配到 子设备原形child=%s",moduleNoId,json.encode(child))\n                return child\n           \t \n       \t \tend\n\t\tend\n    else\n       log.debug("cy_lora_2018: m=%s c=%s subdevices是nil",moduleNoId)\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("cy_lora_2018  校验开始")\n\t\n    if string.len(alldata)/2 <3  then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n\t\tlog.debug("cy_lora_2018: 校验失败 Data is nil")\n        return false\n    end\n    \n\tlocal packNumber=tonumber(string.sub(alldata,5,6),16)\n    if packNumber*5+3~=string.len(alldata)/2 then\n\t    errormsg = 'data length is wrong'\n        errcode = 1002\n\t\tlog.debug("cy_lora_2018: 校验失败 data length=%s[%s] is wrong",packNumber*5+3,string.len(allData)/2)\n        return false\n\tend\n\n    log.debug("cy_lora_2018: 校验通过")\n    return true,packNumber\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n	INLINE	2018-08-14 16:11:08.725+08	2018-08-20 14:21:47.86+08	2018-08-14	\N
dd1ef963-7fb6-4932-a259-9d2e47363890	11	\N	There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard.	11	fdda6836-c22c-4553-934b-5ed334d2d1fc	fdda6836-c22c-4553-934b-5ed334d2d1fc	f	fdda6836-c22c-4553-934b-5ed334d2d1fc	Lua	if (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n	INLINE	2018-05-10 10:47:40.977+08	2018-05-10 10:47:40.977+08	2018-05-10	\N
b3fc90d9-c68c-4e58-95a9-89311901aca4	Miran_lvdt_1	\N		1.0	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	f	e39ef519-bfb9-4a75-9cd1-fb18e5e29559	Lua	--//svn\\Documents\\PMO\\04 项目资料\\2018-02\\米朗位移传感器的通讯协议用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Miran_lvdt_1", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n        local moduleNo=""\n  \t\tif json.encode(device.uplink.props) ~= 'null' then\n            moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n            log.debug("bjzs_level_18626 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        else\n            moduleNo=device.props.moduleId\t\t\n            log.debug("bjzs_level_18626 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n  \t\t log.debug("Miran_lvdt_1  发送指令=%s",buff)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("Miran_lvdt_1 数据接收not OK")\n        end\n        log.debug("Miran_lvdt_1 out=%s",result)\n        ctx:done(result)\nend\n\n--01030400332bff0000\n--moduleId=1    \n--"lvdt": 51.171862363622495\n\nunmarshall=function(hex,moduleNoStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then     \n \n        local integralPart = iota.hexToShort(hex,3,'B')\n        local decimalPart = iota.hexToShort(hex,5,'B')/ 65535.000\n        local lvdt =integralPart+decimalPart\n    \t--\n        local year=2018\n    \tlocal month=6\n    \tlocal day=15\n    \tlocal hour=21\n    \tlocal minute=24\n    \tlocal second=40\n        local timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n        \n    \ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n    \tlog.debug("Miran_lvdt_1 timenum=%s ,time=%s",timenum,time)\n        --\n        out.data = {\n\t\t\tlvdt=lvdt,\n      \t\t\n        }\n        --out.time=time\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n    log.debug('Miran_lvdt_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if moduleNoStrCheck ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('Miran_lvdt_1 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-02-28 14:56:04.871+08	2018-10-18 16:54:36.547+08	2018-02-28	\N
e7fa2b54-05b9-4fb9-9036-01f292fc3ec6	Asmik_Phn_4600	\N		1.0	28e14628-e071-41c6-a2b7-dca0773f996f	28e14628-e071-41c6-a2b7-dca0773f996f	f	28e14628-e071-41c6-a2b7-dca0773f996f	Lua	--//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart =\n    function()\n    log.debug('load script %s, moduleId=%s', 'Asmik_Phn_4600', device.props.moduleId or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local errout = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n        errout.result = {code = 1004, msg = '模块号无效,模块号 >= 255 or < 1'}\n    else\n        buff = iota.appendHexByte(buff, moduleNo, endian)\n        buff = iota.appendHexByte(buff, 0x04, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 0x00, endian)\n        buff = iota.appendHexByte(buff, 120, endian)\n        buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC16\n        local ok, resp = ctx:ssend(buff, 18000)\n        local result = '{}'\n        if ok then\n            result = unmarshall(resp, moduleNo)\n            ctx:done(result)\n        else\n            errout.result = {code = 1004, msg = '采集超时'}\n            ctx:done(json.encode(errout))\n        end\n    end\nend\n--01041203979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942773979427739794277397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall =\n    function(hex, moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    local pressures = {}\n    if ErrorCode then\n        for i = 1, 60 do\n            local sub_hex = string.sub(hex, 7 + (i-1) * 8, 14 + (i-1) * 8)\n            sub_hex_BE = string.sub(sub_hex, -4, -1) .. string.sub(sub_hex, 1, 4)\n            local pressure = iota.hexToFloat(sub_hex_BE, 0, 'B')\n            pressures[i] = pressure\n          -- log.debug("Asmik_Phn_4600 i=%s,pressures[%s]=%s,sub_hex_BE=%s",i,i,pressures[i],sub_hex_BE)\n        end\n\n        --遍历设备\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if device.dnlinks[1].devices ~= nil then\n            --log.debug("http_test 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n            for index, child in pairs(device.dnlinks[1].devices) do\n                log.debug('Asmik_Phn_4600 [%s] child=%s', moduleNoStr, json.encode(child))\n                local deviceId = child.id\n                local subChannel = tonumber(child.uplink.props.channel)\n                --判断设备类型\n\n                pressure = pressures[subChannel]\n\t\t\t\tlog.debug('Asmik_Phn_4600 deviceId=%s ,subChannel=%s[type=%s] ,pressure=%s',deviceId,subChannel,type(subChannel),pressure)\n                local subData = {\n                    data = {\n                        pressure = pressure\n                    },\n                    device = deviceId,\n                    type = 1\n                }\n                table.insert(out.data, subData)\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data,moduleNoStrCheck)\n    if data == nil or string.len(data) / 2 ~= 5 + 4 * 60 then\n        errormsg = '数据长度错误'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data, 1, 'B') ~= 0x04 then\n        errormsg = '返回命令码≠0x04'\n        errcode = 1002\n        return false\n    end\n    if moduleNoStrCheck ~= tostring(iota.hexToByte(data, 0, 'B')) then\n        errormsg = '模块号错误'\n        errcode = 1003\n        return false\n    end\n    return true\nend	INLINE	2017-12-06 15:43:52.334+08	2018-11-19 18:02:05.341+08	2017-12-06	\N
93cfc761-ac5c-438a-b7fa-0e7230b5165a	fs-idau-gear_mop	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug("fs_idau_mop:device=%s",json.encode(device))\n    log.debug("fs_idau_mop:subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    log.debug("fs_idau_mop:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_network",\n        O = "S",\n        P = {} -- 荷载\n    }\n    local req_sensor={\n        type = "idau",\n        payload = ""\n    }\n    local mop_sensor = {\n        M = "c_sensor",\n        O = "S",\n        P = {} -- 荷载\n    } \n    local req_diag={\n        type = "idau",\n        payload = ""\n    }\n    local mop_diag = {\n        M = "c_diag",\n        O = "DIAG",\n        P = {\n            D = "root",\n            SYNC = true\n        } -- 荷载\n    }\n  \tlog.debug("fs_idau_mop:port=%s",device.uplink.props.port)\n    if device.uplink.props.diag then --即时诊断\n        req_diag.payload= json.encode(mop_diag)\n        log.debug("fs_idau_mop:request=%s", json.encode(req_diag))\n        local ok, ack = ctx:ssend(req_diag, 30000)\n        result = {\n            result = nil,\n            type = 1,\n            data = {\n                ack = json.encode(ack)\n            }\n        }\n        ctx:done(json.encode(result))\n    end\n    for i = 1, linkcnt, 1 do -- 一个link, 一个子网\n        local link = device.dnlinks[i]\n        local nodecnt = #(link.devices)\n        log.debug("fs_idau_mop:nodecnt=%s",nodecnt)\n        local subnet = {\n            SN = tonumber(link.devices[1].uplink.props.subnet), -- 子网编号.      link.interface.props.subnet\n            NS = {} -- 子网节点\n        }\n        table.insert(mop.P, subnet)\n        if nodecnt > 0 then\n            for j = 1, nodecnt, 1 do\n                local dev = link.devices[j]\n                local dev_inf = link.devices[j].uplink\n                log.debug("fs_idau_mop:dev=%s", json.encode(dev))\n                local node = {\n                    NID = tonumber(dev_inf.props.netid), -- 网络号\n                    C = 2, -- 通道\n                    DI = tonumber(dev.props.interval) or 30, -- 设备属性: 采集间隔. 默认30分钟\n                    DIU = 0, --分钟(采集间隔单位)\n                    WD = tonumber(dev.props.wakeupdelay) or 0, -- 设备属性:苏醒延迟, 默认0,\n                    T = toNodeType(dev_inf.props.worktype) -- 节点类型: 终端?\n                }\n                table.insert(subnet.NS, node)\n\t\t\t\t\n                if dev.dnlinks ~= nil then \n\t\t\t\t\tlocal nodednlinkcnt = #(dev.dnlinks)\n\t\t\t\t\tlog.debug("fs_idau_mop:nodednlinkcnt=%s", nodednlinkcnt)\n\t\t\t\t\tif nodednlinkcnt>0 then\n\t\t\t\t\t\tfor k=1,nodednlinkcnt,1 do\n\t\t\t\t\t\t\tlog.debug("fs_idau_mop:Sdnlinks=%s", json.encode(dev.dnlinks[1]))\n\n\t\t\t\t\t\t\tlocal sensorcnt = #(dev.dnlinks[k].devices)\n\t\t\t\t\t\t\tlog.debug("fs_idau_mop:sensorcnt=%s", sensorcnt)\n\t\t\t\t\t\t\tfor u=1,sensorcnt,1 do\n\t\t\t\t\t\t\t\tlocal sen = dev.dnlinks[k].devices[u]\n                        \n\t\t\t\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\t\t\t\tID = sen.uplink.props.sensorid,--传感器ID\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\t\t\t\tSN= tostring(dev_inf.props.subnet),--子网号\n\t\t\t\t\t\t\t\t\t\tN=dev_inf.props.netid,--网络号(节点号)\n\t\t\t\t\t\t\t\t\t\tC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0,--模块号: 485端口模块号 \n\t\t\t\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\tDIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1\n\t\t\t\t\t\t\t\t\tPN = sen.props.protocolcode or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\t\t\t\tEN = tostring(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\t\t\t\tED = sen.uplink.props.postdelay or 0, --执行前延迟(485作用)\n\t\t\t\t\t\t\t\t\tRD = sen.uplink.props.predelay or 0,--读取前延迟\n\t\t\t\t\t\t\t\t\tCF = tostring(sen.uplink.props.fid) or "",--公式编码, 和安心云保持一致.\n\t\t\t\t\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.k or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.f0 or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.kt or 0,\n\t\t\t\t\t\t\t\t\t\tsen.uplink.props.t0 or 0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(mop_sensor.P, sensor)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n                    end\n                end\n            end\n        end\n    end\n    req.payload = json.encode(mop)\n    log.debug("fs_idau_mop:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n    if ok then\n        req_sensor.payload= json.encode(mop_sensor)\n        log.debug("fs_idau_mop:requestsensor=%s", json.encode(req_sensor))\n        local ok, ack = ctx:ssend(req_sensor, 60000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n    end\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n	INLINE	2018-08-28 17:47:53.115+08	2018-09-04 17:33:41.752+08	2018-08-28	\N
ead9f2c7-1bb8-4d58-b7da-45fd0e8754fd	11	\N	There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard.	11	fdda6836-c22c-4553-934b-5ed334d2d1fc	fdda6836-c22c-4553-934b-5ed334d2d1fc	f	fdda6836-c22c-4553-934b-5ed334d2d1fc	Lua	if (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n	INLINE	2018-05-10 10:47:42.427+08	2018-05-10 10:47:42.427+08	2018-05-10	\N
bc95a88a-945c-4682-bbba-d347d49d737f	11	\N	There Are Some Things Money Can't Buy. For Everything Else, There's MasterCard.	11	fdda6836-c22c-4553-934b-5ed334d2d1fc	fdda6836-c22c-4553-934b-5ed334d2d1fc	f	fdda6836-c22c-4553-934b-5ed334d2d1fc	Lua	if (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \nif (not windower.ffxi.get_info().logged_in) then \n    log ("You must be logged in order to use this script")\n    return \nend\n\nlocal zone_values = T{\n    [191] = {val = 0, element = "Fire",      chip = "Red"},    -- Dangruf Wadi\n    [196] = {val = 1, element = "Earth",     chip = "Yellow"}, -- Gusgen Mines\n    [197] = {val = 2, element = "Water",     chip = "Blue"},   -- Crawlers' Nest\n    [193] = {val = 3, element = "Wind",      chip = "Green"},  -- Ordelle's Caves\n    [195] = {val = 4, element = "Ice",       chip = "Clear"},  -- Eldieme Necropolis\n    [194] = {val = 5, element = "Lightning", chip = "Purple"}, -- Outer Horutoto Ruins\n    [200] = {val = 6, element = "Light",     chip = "White"},  -- Garlaige Citadel\n    [198] = {val = 7, element = "Dark",      chip = "Black"},  -- Maze of Shakrami\n}\n\nlocal name = windower.ffxi.get_player().name:lower():sub(1,3) -- First 3 chars of name\nlocal area = windower.ffxi.get_info().zone\n\n\nif (not zone_values[area]) then\n    log ("This is not an area with a strange apparatus")\n    return\nend\n\nlocal values = T{}\nvalues[0] = name:byte(1) - 97 + zone_values[area].val\nvalues[1] = name:byte(2) - 97 + zone_values[area].val\nvalues[2] = name:byte(3) - 97 + zone_values[area].val\nvalues[3] = values[0] + values[1] + values[2] + zone_values[area].val\n\nlog ("Password: %02d%02d%02d%02d":format(values[0], values[1], values[2], values[3]))\nlog ("Chip: %s (%s)":format(zone_values[area].chip, zone_values[area].element))\n \n	INLINE	2018-05-10 10:47:42.885+08	2018-05-10 10:47:42.885+08	2018-05-10	\N
1da26fe7-c82b-4d54-8f79-41fa728951d9	jm_lvdt_1	\N	长沙金码测控科技股份有限公司	1.0	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	f	d5b4f900-6aac-40dc-8c6d-d38bc27004d1	Lua	start=function()\n    log.debug("start %s, ctx=%s", "jm_lvdt_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian)                   \n    buff=iota.appendHexByte(buff, 0x2b, endian)\n    buff= buff..device.props.moduleId    \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --36596148594963486349634850 \n    --"level": 1234567\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==26) then\n        \n \n    \n       local level=((tonumber(string.sub(hex,3,4))-48)*16+(tonumber(string.sub(hex,5,6))-48)+(tonumber(string.sub(hex,7,8))-48)*16*16*16+(tonumber(string.sub(hex,9,10))-48)*16*16)/100\n       local temp=  ((tonumber(string.sub(hex,19,20))-48)*16+(tonumber(string.sub(hex,21,22))-48)+(tonumber(string.sub(hex,23,24))-48)*16*16*16+(tonumber(string.sub(hex,25,26))-48)*16*16-500)/10\n       out.data = {\n        level=level,\n        temp=temp\n       }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-12-28 19:12:36.497+08	2018-02-28 18:32:12.224+08	2017-12-26	\N
9bea199d-898c-4f82-b80b-1b9ac9402f4f	啊	\N	大大大大	啊	93ffff70-11c1-46a9-8810-612bd42172e2	93ffff70-11c1-46a9-8810-612bd42172e2	f	93ffff70-11c1-46a9-8810-612bd42172e2	Lua	大时代	INLINE	2018-08-30 14:16:10.129+08	2018-08-30 14:16:10.129+08	2018-08-22	\N
d0b9cd23-81cd-4990-9b9a-5e38b382d587	hlo_flow_2500	\N	气体浓度监测协议	1.0	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	f	d36cd0a0-873c-4592-9ab4-6712ff3d87cc	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "hlo_flow_2500.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId need <= 255'}\n        ctx:done(json.encode(errout))\n    else\n\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x09, endian)             \n        buff=iota.appendHexByte(buff, 0xD0, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x02, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--ff030200001a0c6699  moduleId=255\n--"concentration": 666.8\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local Concentration = iota.hexToInt(hex,3,'B') / 10.0\n        out.data = {\n            concentration = Concentration\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n    \treturn false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 09:56:58.974+08	2018-02-28 18:32:12.187+08	2017-09-14	\N
cd5bd311-1502-44b3-9764-4013fe62db21	lywh__8004	\N	多通道温度	1.0	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	f	dd7cacfc-a0f8-4d19-86b1-db4c80849dd5	Lua	--AA55820018072713515930003c0032000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF32000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFF32000B0006000900220FF5FFEDFFEEFF0500090010001300F0FFF2FFEFFFEFFFF0FFF2FFEFFFEFFFf5f6\n --通道1  50\n  --通道2   12\n   --通道3    9\n    --通道4     6\nonData=function(hex)\n    log.debug("lywh__8004 收到数据=%s", hex)\n    --log.debug("lywh__8004 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local data=hex\n    if string.upper(data)=="3E74696D656375720D0A" then\n        --请求同步服务器时间\n        local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n        local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n        ok=ctx:asend(timeResponse)\n    else\n    \n        local ErrorCode = IsValid(data)\n        if ErrorCode then\n            log.debug('lywh__8004 数据有效=%s',data)\n        \n            local phy={}\n            local moduleId_hex=string.sub(data,23,24)..string.sub(data,21,22)\n            local moduleId=tonumber(moduleId_hex,16)\n            local channelCounts_hex=string.sub(data,27,28)..string.sub(data,25,26)\n\n            local channelCounts=tonumber(channelCounts_hex,16)\n            log.debug('lywh__8004 channelCounts=%s',channelCounts)\n            for i=1,channelCounts,1 do\n                phy[i]=iota.hexToShort(data,14+(i-1)*2,'L')\n                \n            end\n\n            local timess=string.sub(data,9,9+12)\n\t\t\tlocal timenow=unixtimestamp(timess)\n\n\n            log.debug('lywh__8004  phy=%s',json.encode(phy))\n            --分析单类数据\n            for k,v in ipairs(phy) do\n                log.debug('lywh__8004 分析单类数据 k=%s,v=%s',k,v)\n                    \n                    local channelId=k\n                    local childDevice=getDeviceInfo(moduleId,channelId) \n                    \n                    if childDevice~=nil then\n                        log.debug('lywh__8004 moduleId=%s,channelId=%s id=%s,physicalvalue=%s',moduleId,channelId,childDevice.id,phy[k])\n                        local data1 = {\n                                        data={\t\t\t\t\t\t\t\t\t\t\t\n                                                physicalvalue=phy[k]\n                                                \n                                            },\n                                        device=childDevice.id,\n                                        --time=timenow,\n                                        type=1                       \n                                        }\n\n                        table.insert(out.data,data1)\n                    end\t\n            end\n            \n        else\n            out.result = {code = errorcode, msg = errormsg}\n        end\n        local resultData =json.encode(out)\n        ctx:notify(resultData)\n    end\nend\n\nIsValid=function(data)\n    local checkdatalength=string.len(data)/2\n\n    if checkdatalength<14 then\n        errormsg = 'data length is wrong'\n        errorcode = 1001\n        ok=ctx:asend("4552")\n        return false\n    end\n\n\n    local datalength=tonumber(string.sub(data,5,6),16)+tonumber(string.sub(data,7,8),16)*256\n    if datalength~=checkdatalength then\n        errormsg = 'data length is wrong'\n        errorcode = 1001\n        ok=ctx:asend("4552")\n        return false\n    end\t\n\n    if string.upper(string.sub(data,1,4)) ~= 'AA55' then  \n            errormsg = 'Data is Invalid'\n            errorcode = 1001\n        ok=ctx:asend("4552")\n        return false\n    end\n    --累加和校验\n    local checksum16=CheckPlusSum(data,1,string.len(data)-4)\n    local checksum16_Hex=string.format("%04x",checksum16)\n    local sum16_Hex=string.sub(data,-2,-1)..string.sub(data,-4,-3)\n    log.debug("lywh__8004 checksum16_Hex=%s,sum16_Hex=%s",checksum16_Hex,sum16_Hex)\n    if checksum16_Hex~=sum16_Hex then\n        log.debug("lywh__8004 累加和校验失败%s[%s]",sum16_Hex,checksum16_Hex)\n        ok=ctx:asend("4552")  --错误数据返回\n        errormsg = 'Data is Invalid'\n            errorcode = 1001\n        return false\n    end\n    ok=ctx:asend("4f4b")  --正确数据返回\n    log.debug("lywh__8004 校验通过")\n    return true\nend\n--累加和校验\nfunction CheckPlusSum(str, startIndex, endIndex)\n    local sum = 0\n    for i = startIndex, endIndex,4 do\n        sum = (sum + tonumber(string.sub(str,i+2,i+3)..string.sub(str,i,i+1),16)) % 0x10000\n    end        \n    local result = sum \n    return result\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("lywh__8004 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index,child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("lywh__8004:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n                local moduleStrCheck\n                local channelStrCheck\n                \n            moduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck=child.uplink.props.channel\n            log.debug("lywh__8004 子设备模块通道 接口获取 m=%s[%s],c=%s[%s] ",moduleStrCheck,moduleNoId,channelStrCheck,channelNoId)\n            \n                \n            if tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n                \n                if tonumber(channelStrCheck)==tonumber(channelNoId) then\n                    log.debug("lywh__8004:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                    return child\n                end\n\n                end\n        end\n    else\n        log.debug("lywh__8004:  subdevices是nil")\n        return nil\n    end\nend\n\nunixtimestamp=function(datestr)\n    --180727135159\n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n    local year = tonumber(string.sub(datestr,1,2))+2000;\n\tlocal month = tonumber(string.sub(datestr,3,4));\n\tlocal day = tonumber(string.sub(datestr,5,6));\n    local hour = tonumber(string.sub(datestr,7,8));\n    local minute = tonumber(string.sub(datestr,9,10));\n    local second = tonumber(string.sub(datestr,11,12));\n    log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend\n\nStrToHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend	INLINE	2018-09-19 17:13:40.537+08	2018-09-26 20:47:58.935+08	2018-09-19	\N
c0e95dc9-2a94-4b37-9176-1f911fa40781	hhdz_6300	\N		1.0	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	f	b62a05b7-00f6-49f0-a9d4-c3ffa17b7340	Lua	--//20180921项目资料提交\\20180921项目资料提交\\长沙弘汇电子科技有限公司-大坝监测-康飞\\长沙弘汇MCU协议.doc\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart=function()\n    -- log.debug("load script %s, moduleId=%s", "hhdz_6300.lua", device.props.moduleId or "[nil]")\n     log.debug("hhdz_6300:".."LUA: ctx is =%s", json.encode(device))\n\t \n\t local out={\n\t\t\tdata ={},\n\t\t\tresult = {},\n\t\t\ttype=2\n\t\t}\n\t \n     --采集指令\n    local moduleNo=string.format("%05d",device.uplink.props.module)\n\tlocal cmd_bgein=string.format("MCU32 %s Begin",moduleNo)\n\tlocal cmd_bgein_hex=StrToHex(cmd_bgein).."0d0a"\n\tok_begin,resp_hex_begin=ctx:ssend(cmd_bgein_hex,15000)--15秒\n    log.debug("hhdz_6300 发送Begin cmdHex =%s",cmd_bgein_hex)\n\tlocal resp_begin=HexToStr(resp_hex_begin)\n\tlocal isBeginOK=resp_begin=="OK!\\r\\n"\n    if ok_begin and isBeginOK then\n       log.debug("hhdz_6300  开始休眠50s")\n\t\tctx:sleep(60)  --休眠50s\n    \tlog.debug("hhdz_6300  休眠50s结束")\n    \t--ctx:sleep(2)  --测试  2s\n\t\t--发送读取指令\n\t\tlocal cmd_read=string.format("MCU32 %s Read",moduleNo)\n\t\tlocal cmd_read_hex=StrToHex(cmd_read).."0d0a"\n\t\tok_read,resp_hex_read=ctx:ssend(cmd_read_hex,20000)--测试用\n    \t log.debug("hhdz_6300 发送 cmd_read_hex =%s,resp_hex_read=%s",cmd_read_hex,resp_hex_read)\n\t\tlocal resp_read=HexToStr(resp_hex_read)\n\t\tif resp_read=="Wait\\r\\n" then\n\t\t   --等待  重新发送采集\n            ctx:sleep(20)  --休眠20s  重新读取\n            --ctx:sleep(3)  --测试  3s\n\t\t\tok_read,resp_hex_read=ctx:ssend(cmd_read_hex,20000)\n\t\tend\n\t\t\n        if ok_read then\n\t\t   --非回复等待的  直接处理结果 不论数据是否正常\n\t\t\tresponseAnalyse_read(resp_hex_read,out)--带入数据结果table\n\t\tend\n\t\t\t\n    else\t\n\t  out.result = {code = 1004, msg = 'MCU32 is not Begin OK'}      \n\t  log.debug("hhdz_6300  m=%s, ok is false",moduleNo)  \n\tend\n\tlocal jsondata=json.encode(out)\n\tctx:done(jsondata)\nend\n\nresponseAnalyse_read=function(hex,out)\n    log.debug("hhdz_6300 收到数据=%s", hex)\n\t--log.debug("hhdz_6300 device =%s", json.encode(device))\n    --log.debug("hhdz_6300subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n    \n    local ModuleChar = "M=";--振弦\n    local DigChar = "Di";--测斜\n    local VoltageChar = "V=";--电压\n    local CurrentChar = "I=";--电流\n    local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=HexToStr(hex)\n        log.debug("hhdz_6300:sData是 %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,'\\n')\n        --移除表内的“”和nil\n        for k,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n            table.remove(allResponse,k)\n                log.debug("hhdz_6300 表内的“”和nil 移除元素为"..tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k,v in ipairs(allResponse) do\n            local singleData=Split(v,' ')\n            --移除单类数据中的空 \n            for kk,vv in ipairs(singleData) do\n                if vv=='' or vv==nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove (singleData,kk)\n                end\n            end\n\n            if k>1 then\n                local temp1=singleData[2+1]\n                local moudleStr=string.sub(singleData[2+1],2,2)\n                local moduleNo=tonumber(moudleStr)\n                --解析单条数据\n                for kkk,vvv in ipairs(singleData) do\n                    log.debug("hhdz_6300:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n                  \n                    local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n                    log.debug("hhdz_6300: type_sensor="..type_sensor) \n                    if string.len(type_sensor) >=2 then\n                       --频率\n                        if type_sensor==ModuleChar then\n                            local length = string.len(singleData[kkk]) - 3;\n                            local tempLength = string.len(singleData[kkk + 1]) - 3;\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local Module =tonumber(string.sub(singleData[kkk],4, -1))\n                            local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n                            local Frequency = math.sqrt(Module*1000);\n                            local Temp;\n                            local Phy\n              \t\t\t    local Length\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n                \t\t\t\tlocal Po = childDevice.uplink.capabilities[1].formula.props.Po\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:振弦模块： 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Po)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil or Po==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300   模块%s,通道%s 当前的Frequency=%s,Temp=%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module  --经过厂家确认  公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)+Po\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("hhdz_6300:振弦模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n                        --电压\n                        if type_sensor== VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t     \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend                                     \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n                       \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                            \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n                     \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend            \n                        \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                          \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend                          \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk);                            \n  \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t   local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t   log.debug("hhdz_6300:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t   local Fi=waterData[i]         \n\t\t\t\t\t\t\t\t\t\t   Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t   log.debug("hhdz_6300:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend   \n\t\t\t\t\t\t\t\t\telse\n                                    log.debug("hhdz_6300:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)                                \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n                        end\n\n                        --测斜\n                        if type_sensor==DigChar then\n\t\t\t\t\t        local Phy\n\t\t\t\t\t        local Length\n                            local Temp\n                            local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n                            if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n                                \n                                local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n                                --获取通道设备deviceId\n                \t\t\t    local childDevice=getDeviceInfo(moduleNo,channelNo)\n                \t\t\t    local deviceId\n                                if childDevice~=nil then\n               \t\t\t\t\t    deviceId=childDevice.id\n                             \t    log.debug("hhdz_6300:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n              \t\t\t\t        log.debug("hhdz_6300:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n                                    log.debug("hhdz_6300:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination         \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:测斜模块 当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend            \n                         \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:(测斜)子设备deviceId为nil:m=%s,c=%s"..tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length            \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1                         \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻（差阻）\n                        if type_sensor==ResistanceChar then\n\t\t\t\t\t        --local R1Length = string.len(singleData[kkk]) - 3;  --取消\n                            --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n                            local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n                            local Temp;\n                            local Phy\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s  f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s  Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s  b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s  a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s  Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil  then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n                  \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n                                      Phy =f*(R1/r1 -Zo)+b*Temp\n                                      log.debug("hhdz_6300: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n                    \t\t\t\telse\n                              \t\t\t log.debug("hhdz_6300: 数据无效 m=%s,c=%s, r1=0")\n                                          break\n                  \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("hhdz_6300:差阻模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("hhdz_6300:差阻模块  m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n                    end\n\t\t\t\tend\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("hhdz_6300resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("hhdz_6300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     --log.debug("hhdz_6300:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("hhdz_6300 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("hhdz_6300 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("hhdz_6300:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("hhdz_6300:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    log.debug("hhdz_6300: 校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length=getIndex(alldata)\n    local data=string.sub(alldata,1,length*2)\n    --log.debug("data:"..data)\n    local plu16={}\n    plu16[0]=string.sub(data,-8,-7)\n    plu16[1]=string.sub(data,-6,-5)\n    --local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n    -- log.debug("hhdz_6300:".."plu16[0]是："..plu16[0])\n    -- log.debug("hhdz_6300:".."plu16[1]是："..plu16[1])\n    -- log.debug("hhdz_6300:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("hhdz_6300:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n     --   errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    log.debug("hhdz_6300:".."校验通过")\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--字符串ascii->字符\nHexToStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n  -- 字符串 -> BCD\nStrToHex=function(str)\n   local len = string.len(str);\n   local hex='';\n   for i =1,len do\n     local bi = string.byte(str, i);\n     hex=hex..string.format("%02X",bi);\n   end\n   return hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nGetSWData=function(sData,j)\n    local SW={}\n\n    local Water1 = tonumber(string.sub(sData[j],8,-1));\n    local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n    local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n    local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n    local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n    local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n    \n    local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n    local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n    SW[1] = Water1/100 + Base1;\n    SW[2] = Water2/100 + Base2;\n    SW[3] = MaxWinSpeed;\n    SW[4] = Direction;\n    SW[5] = AverWinSpeed;\n    SW[6] = RealTImeWinSpeed;\n    SW[7] = NowDirection;\n    SW[8] = AccRain;\n    return SW;\nend\n	INLINE	2018-09-29 15:35:13.347+08	2018-11-03 11:40:43.121+08	2018-09-29	\N
723d4fd1-f2c5-4fc1-97a9-9843cdb10693	httpJCLQ_2020	\N	T2	1.0	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	Lua	\nstart=function()\n    log.debug("JCLQ2020 start moudleid=%s", device.props.pointId or "nil")\n\tlocal req = {\n        type= "http",\n        url='',  --https://api.yespowering.cn/login/\n    \tmethod="post",\n        header={}\n    }\n\n     req.url=device.props.tokenUrl\n    log.debug("JCLQ2020:  url=%s",req.url)\n    log.debug("设备原型="..json.encode(device))\n    req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n    req.ContentType='application/json'\n        \n    local param={\n      account= device.props.account,\n      pw=device.props.pw\n    }\n\treq.body = json.encode(param)\n    log.debug("JCLQ2020:param="..json.encode(param))\n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("JCLQ2020:  ok=%s",ok)\n    else\n        log.debug("JCLQ2020:  ok=%s,token=%s",ok,ack.body)\n    end\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n           local dataTable=json.decode(ack.body)\n          \tlocal token=dataTable.data.userinfo.token\n           log.debug("JCLQ2020:  token=%s " ,token)\n            log.debug("JCLQ2020 ack=%s",ack.body)\n            \n            \n\t\t\tSleep(1)\n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='',  --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005  \n\t\t\t\t\t\tmethod="get",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\t\t\tlocal boxId=device.props.boxId\n\t\t\tdatareq.url=device.props.dataUrl.."?box_id="..boxId\n\t\t\tlog.debug("JCLQ2020:  data url=%s",datareq.url)\n\t\t\t--log.debug("设备原型="..json.encode(device))\n\t\t\tdatareq.header["agent"] = '0'\n\t\t\tdatareq.header["language"] = 'zh'\n\t\t\tdatareq.header["brandid"] = '38'\n\t\t\tdatareq.header["token"] = token\n\t\t\tdatareq.ContentType='application/json'\n\t\t\t\t\n\t\t     --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body)  -- 有数据\n\t\t\t\t\tlocal instant_data=alldataTable.data.instant_data\n\t\t\t\t\tlocal model=alldataTable.data.model   --获取云盒类型\n\t\t\t\t\t\n\t\t\t\t\tlocal r1,r1ok = redis.get(device.id.."_endTime")  --获取上次记录时间\n\t\t\t\t\tlog.debug("JCLQ2020 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tif r1ok and r1~=nil then\n\t\t\t\t\t\tbeginTime=r1\n\t\t\t\t\t\tlog.debug("JCLQ2020 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tbeginTime=os.time()--第一次默认当前时间\n\t\t\t\t\t\tredis.set(device.id.."_endTime", tostring(beginTime))\n\t\t\t\t\t    log.debug("JCLQ2020 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t\tend\n\t\t\t\t\tlocal endTime\n\t\t\t\t\tfor k,v in ipairs(instant_data) do\n\t\t\t\t\t    log.debug("JCLQ2020 k=%s, value=%s",k,json.encode(v))\n\t\t\t\t\t\tlocal moduleNo=v.order_id\n\t\t\t\t\t\tlocal timeStr=v.datetime\n\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,1) \n\t\t\t\t\t\t--\n\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal timess=alldataTable.data.instant_data[k].datetime\n\t\t\t\t\t\t\tlocal timenow=unixtimestamp(timess)\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tendTime=timenum  \n\t\t\t\t\t\t\tlog.debug("JCLQ2020  beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tif endTime<=tonumber(beginTime) then\n\t\t\t\t\t\t\t   log.debug("JCLQ2020  数据未刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\t   break\n                            else\n                       \t\t\t log.debug("JCLQ2020  数据刷新beginTime=%s,endTime=%s",beginTime,endTime)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\n                             \t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif model=='RION激光测距仪激光测距仪' then\n\t\t\t\t\t\t\t\t\tlocal length=tonumber(alldataTable.data.instant_data[k].distance)\n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2020 length=%s  timess=%s ",length,timess)\n\t\t\t\t\t\t\t\t\tlog.debug("JCLQ2020  type(timess)=%s ,unixtimestamp(timess)=%s",type(timess),unixtimestamp(timess))\n\t\t\t\t\t\t\t\t\t--time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tlength=tonumber(length)\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow,  \n\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t};                       \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\telseif \n\t\t\t\t\t\t\t\t\tmodel=='HY-65HY-65(波特率9600)HY-65' then\n\t\t\t\t\t\t\t\t\tlocal stress_c=tonumber(alldataTable.data.instant_data[k].stress_c)\n\t\t\t\t\t\t\t\t\tlocal temp=tonumber(alldataTable.data.instant_data[k].temp)\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(stress_c),\n\t\t\t\t\t\t\t\t\t\t\ttemperature=tonumber(temp)\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow,  \n\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t};                       \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\telseif \n\t\t\t\t\t\t\t\t\tmodel=='HY-65HY-65HY-65' then\n\t\t\t\t\t\t\t\t\tlocal stress_c=tonumber(alldataTable.data.instant_data[k].stress_c)\n\t\t\t\t\t\t\t\t\tlocal temp=tonumber(alldataTable.data.instant_data[k].temp)\n\t\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(stress_c),\n\t\t\t\t\t\t\t\t\t\t\ttemperature=tonumber(temp)\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t\ttime=timenow,  \n\t\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t};                       \n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlog.debug("JCLQ2018: moudleid=%s data:%s",device.props.pointId,json.encode(out))\n\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t    --更新endTime\n\t\t\t\t\tif endTime>tonumber(beginTime) then\n\t\t\t\t\t\tif redis.set(device.id.."_endTime", tostring(endTime)) then\n\t\t\t\t\t\t\tlog.debug("JCLQ2020 redis更新 set lasttime ok  key=%s,value=%s",device.id.."_endTime",tostring(endTime))\n\t\t\t\t\t\tend\t\n\t\t\t\t\telse\n\t\t\t\t\t\tlog.debug("JCLQ2020 redis不更新 ")\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("JCLQ2018:  request data error:%s body:%s",ack.code,ack.body)            \n\t\t\t\tend\n\t\t\tend\t\n            \n        else\n            log.debug("JCLQ2020:  request data error:%s body:%s",ack.code,ack.body)            \n        end\n    end\n\tctx:done(json.encode(out))\nend\n \nSleep=function(n)\n   local t0 = os.clock()\n   while os.clock() - t0 <= n do end\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("JCLQ2020 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    -- log.debug("JCLQ2020:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("JCLQ2020 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n        \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t  \t \n                \n          \t\t log.debug("JCLQ2020:  m=%s  匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n\n       \t \tend\n\t\tend\n    else\n       log.debug("JCLQ2020:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp=function(datestr)\n    -- 2018-4-28 16:10:12\n\tlog.debug("JCLQ2020 datestr=%s",datestr)\n    local datelist = Split(datestr, " ");\n    local datebegin = Split(datelist[1], "-");\n    local dateend = Split(datelist[2], ":");\n    local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n    local hour = tonumber(dateend[1]);\n    local minute = tonumber(dateend[2]);\n    local second = tonumber(dateend[3]);\n    log.debug("JCLQ2020 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("JCLQ2020 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("JCLQ2020 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-06-19 09:40:17.591+08	2019-05-30 10:27:28.005+08	2018-06-19	\N
46523fa3-833c-499c-b73e-3055e95fce65	hj_gasDetector_2501	\N		1.0	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	f	0d656fb5-b8d8-4066-8dd1-d2e46cf1707b	Lua	\n\nstart=function()\n    log.debug("start %s, ctx=", "hj_gasDetector_2501.lua",json.encode(ctx.device))\n\tif tonumber(device.props.moduleId) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)                         --1: CMD 3\n    buff=iota.appendHexByte(buff, device.props.channelId, endian)             --1: 通道号\n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x00, endian)                 --1: CMD 1\n    buff=iota.appendHexByte(buff, 0x01, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n    \n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --0103040025999e     moduleId=1   channelId=1\n        --"concentration": 37\n        local Concentration = iota.hexToShort(hex,3,'B')\n        local elongation = 0\n        out.data = {\n            concentration = Concentration\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n  log.debug(string.sub(data,1,12))\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03  then\n        errormsg = 'CMD is not right,0x03'\n        errcode = 1001\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n	INLINE	2017-11-29 09:21:07.569+08	2018-02-28 18:32:12.187+08	2017-11-27	\N
672258f5-8e0b-43b1-8e33-39a92693774e	4543	\N	4	43	475d6577-d638-4b9c-a4de-35f6ddd51240	475d6577-d638-4b9c-a4de-35f6ddd51240	f	475d6577-d638-4b9c-a4de-35f6ddd51240	Lua	345	INLINE	2018-01-30 10:32:13.398+08	2018-01-30 10:32:13.398+08	2018-01-30	\N
8f22983b-fc23-4271-a52b-10d40511ca00	testTcp	\N		1.0	8e1adf17-9018-4c44-bc9b-ff70bcca029a	8e1adf17-9018-4c44-bc9b-ff70bcca029a	f	8e1adf17-9018-4c44-bc9b-ff70bcca029a	Lua	--//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n    -- log.debug("load script %s, moduleId=%s", "geot_3300.lua", device.props.moduleId or "[nil]")\n     -- log.debug("geot_3300:".."LUA: ctx is =%s", json.encode(device))\n    ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("geot_3300:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n    log.debug("tcp12306 收到数据=%s", hex)\n\tlog.debug("tcp12306 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  physicalvalue=hex\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue=physicalvalue\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=device.id,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("geot_3300:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n    local resultData =json.encode(out)\n    log.debug("geot_3300resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n	INLINE	2018-06-19 11:34:29.651+08	2018-06-19 11:34:29.651+08	2018-06-19	\N
2dffaa68-111b-4b1d-89c4-2a14a6b8c64e	cs_temp_1160	\N	创思温度协议	1.0	111647f0-416f-4e83-83fa-846fa9806308	111647f0-416f-4e83-83fa-846fa9806308	f	111647f0-416f-4e83-83fa-846fa9806308	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=", "cs_temp_1160.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local sData = toStrHex(hex)\n        local temperature = string.sub(sData,13,string.len(sData)-1)\n     \n        out.data = {                --需要测试\n            temp = temperature\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-09-25 10:51:44.807+08	2018-02-28 18:32:12.188+08	2017-09-25	\N
bda73ab5-87db-4bba-a807-ddc03a8b2a4b	Pressure_Opine_9008	\N		1.0	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	f	2b45f147-f84e-43e1-9a5c-39ffe5f7c52c	Lua	--[[\n协议号: 9008;\n协议名: modbus 压力变送器.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "Pressure_Opine_9008.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序  01 04 00 00 00 02 71 cb 模块1\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3:  \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0)   --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  0104044411B3338a54  压强582.8   moduleId=1\n--原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal pressure = iota.hexToFloat(data, 3,'B');\n\t\t\n\t\t\n\t\tout.data = {\n\t\tpressure=pressure,\n\t\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n	INLINE	2017-09-16 15:13:54.919+08	2018-02-28 18:32:12.189+08	2017-09-16	\N
7aac1370-3321-4738-9717-9dbe62d413b5	hc_vibratingWir_1403	\N	上海华测创时振弦采集仪协议	1.0	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	f	4cb97284-0871-46d4-baf9-17d494f6db64	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n        log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n        log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n      \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n        \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t           \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n            log.debug("hc_1403 模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian)      \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian)      \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("hc_1403 subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlocal resultData =json.encode(out)\n    log.debug("hc_1403  out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n    if ErrorCode then     \n \n        \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n        local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\t--自己新加上的   当温度出现负值时，需要处理\n\t\tif(Temp>6000)then \n\t\t\tTemp=Temp-6553.5\n\t\tend\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是：freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n        log.debug("hc_1403:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t--local K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t--local K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块：公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\t--end\n        \n       \n       \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n                  \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 25 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败：Hex CMD False：错误码=1003',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('hc_1403:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend	INLINE	2017-11-25 11:51:35.863+08	2020-01-06 15:00:44.988+08	2017-11-25	\N
9c5e1617-0ca4-4ca1-aec1-dfb0bd25a0a8	geot_1407_485	\N	基泰单通道采集仪 485数字信号 模块	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--//04 项目资料/2017-05/南京基泰/基泰单通道 单点协议示例.doc\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\n-- start=function ()  \n\t-- log.debug("start %s, ctx=%s", "geot_1407.lua",json.encode(device.moduleId))\n  -- ok,resp=ctx:ssend("0102030405060708",15000)\n    -- log.debug("geot_1407:测试下发正常")\n-- end\n--moduleId=98 通道1  \n--ff8000620027100144595bd8cc024456de1600036494187c40116444e59d5d126444e59d5df053--振弦设备\n--ff8000620027100144595bd8cc024456de1600036494187c40116444e59d5df053--485设备\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "geot_1407_485", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x80, endian)\n        buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号\n                    \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x0D, endian)\n        buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x11, endian)\t\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n  \t\tlog.debug("geot_1407_485 is SSending !")\n        ok=ctx:asend(buff)       \nend\n\n\nonData=function (hex)\n\t--主动上传式\n\tlog.debug("geot_1407_485:Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\t\n\t\n\tlocal moduleNoStr\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNoStr=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNoStr,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNoStr=device.props.moduleId\t\t\n\t\t\tlog.debug("geot_1407_485 设备模块通道 属性获取 m=%s  接口props=%s",moduleNoStr,json.encode(device.uplink.props))\n\t\tend\n\t\n\t\n\t\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B') \t\n\t\tlog.debug("geot_1407_485:moduleNo=%s",moduleNo)\n\t\tlocal IDX_DIRECTION_X=29;\n\t\t     local index=string.sub(hex,IDX_DIRECTION_X*2+1,IDX_DIRECTION_X*2+1)\n\t\t\t local modulu=string.sub(hex,IDX_DIRECTION_X*2+2,IDX_DIRECTION_X*2+2)..string.sub(hex,IDX_DIRECTION_X*2-1,IDX_DIRECTION_X*2)..string.sub(hex,IDX_DIRECTION_X*2-3,IDX_DIRECTION_X*2-2)   --= iota.hexToUShort(hex, IDX_DIRECTION_X,'B')\n    \t\t--log.debug("geot_1407_485 模数=%s",index,modulu)\n    \t\tif(index=='8') then\n                modulu=-1*tonumber(modulu)\n      \t\t end\n             log.debug("geot_1407_485 解析index=%s,模数=%s",index,modulu)\n\t\t\t --插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=1\n             log.debug("geot_1407_485:模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("geot_1407_485:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n              \tlog.debug("geot_1407_485:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n           \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n           \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    --local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    --local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s：公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n                    if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then --or Kt==nil or To==nil \n                        Phy=nil\n                   \t\tlog.debug("geot_1407_485:模块号=%s,通道号=%s  参数无效 当前的Frequency是:%s",moduleNo,channelNo,Frequency)\n                    else\n                  \t\tlog.debug("geot_1407_485:模块号=%s,通道号=%s  参数有效 当前的modulu是:%s",moduleNo,channelNo,modulu)\n                        local Fi=modulu  --公式计算带入模数\n         \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)--+Kt*(Temp-To)\n                        log.debug("geot_1407_485:当前的Phy是:%s",Phy)\n                    end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n               -- end\n             else\n                log.debug("geot_1407_485:(振弦)子设备:m=%s,c=%s deviceId为nil"..tostring(moduleNo),tostring(channelNo))\n            end\n\t\t\tlocal data1={\n\t\t\t            data={\t\t\t\t\t\t\n                  \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),,\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n        \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n\tlog.debug("geot_1407_485 resultData=%s",resultData)\n\tctx:notify(resultData)\n     --ctx:done(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("geot_1407_485 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("geot_1407_485:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("geot_1407_485 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("geot_1407_485 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("geot_1407_485:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("geot_1407_485:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data,moduleNoStrCheck)\n\tlog.debug('geot_1407_485:开始校验数据')\n    if data == nil or string.len(data)/2 ~= 33 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n\t\n\tlocal moduleR = tostring(iota.hexToShort(data,2,'B'))\n\tif moduleR ~=tostring(moduleNoStrCheck) then\n        errormsg = 'module is invalid='..moduleR\n        errcode = 1003\n        return false\n    end\n    log.debug('geot_1407_485:校验通过')\n\treturn true\t\nend	INLINE	2018-05-11 09:47:31.457+08	2018-05-18 16:14:28.234+08	2018-05-11	\N
018f9be4-aa05-45e1-9fbe-ef52acd6970e	qy_wind_9216	\N	邯郸清易风速协议	1.0	f37cd019-7796-443e-9467-97aec7656620	f37cd019-7796-443e-9467-97aec7656620	f	f37cd019-7796-443e-9467-97aec7656620	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=", "qy_wind_9216.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x00, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x01, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,500)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local speedofWind = bit:_or(bit:_lshift(iota.hexToByte(hex,3,'B'),8),iota.hexToByte(hex,4,'B'))/10.0\n        out.data = {\n            windSpeed = speedofWind\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n    \treturn false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-12 20:23:37.278+08	2018-02-28 18:32:12.196+08	2017-09-12	\N
25ba6551-67b9-4b04-85a8-314b0da4cef6	sxcg_inclination_1	\N	超高精度数字双轴倾角传感器	1.0	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	Lua	start=function()\n    log.debug("start %s, device=%s", "sxcg_inclination_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xaa, endian)    \n    buff=iota.appendHexByte(buff, 8, endian)    \n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 0, endian)  \n    buff=iota.appendHexByte(buff, 0xbb, endian)\n\n    -- aa080103000000bb\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sxcg_inclination_1.lua",hex)\n    --5517018300013841010035350030500066\n    --"temp": 30.5,\n\t--"xDegree": 1.3841,\n\t--"yDegree": -0.3535\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==34) then\n\n        local xSign=1\n        if string.sub(hex,9,10)=='01' then\n            xSign=-1\n        end\n\n        local ySign=1\n        if string.sub(hex,17,18)=='01' then\n            ySign=-1\n        end \n\n         local tSign=1\n        if string.sub(hex,25,26)=='01' then\n            tSign=-1\n        end\n        local xDegree = tonumber(string.sub(hex,11,16))/10000*tonumber(xSign)\n        local yDegree = tonumber(string.sub(hex,19,24))/10000*tonumber(ySign)\n        local temp = tonumber(string.sub(hex,27,32))/10000*tonumber(tSign)\n        out.data = {\n            xDegree=xDegree,\n            yDegree=yDegree,\n            temp=temp\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "sxcg_inclination_1.lua",json.encode(out))\n    return json.encode(out)\nend\n	INLINE	2018-02-06 16:56:06.443+08	2018-02-28 18:32:12.197+08	2018-02-06	\N
526f9775-e8e0-4d37-ac18-304e20c79c6a	hj_gasDetector_2501	\N	盐城恒嘉气体检测传感器协议	1.0	352bd9cd-bfc9-433a-be60-afa9421c71bf	352bd9cd-bfc9-433a-be60-afa9421c71bf	f	352bd9cd-bfc9-433a-be60-afa9421c71bf	Lua	\n\nstart=function()\n    log.debug("start %s, ctx=", "hj_gasDetector_2501.lua",json.encode(ctx.device))\n\tif tonumber(device.props.moduleId) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)                         --1: CMD 3\n    buff=iota.appendHexByte(buff, device.props.channelId, endian)             --1: 通道号\n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x00, endian)                 --1: CMD 1\n    buff=iota.appendHexByte(buff, 0x01, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n    \n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        -- 0103040025999e     moduleId=1   channelId=1\n        --"concentration": 37\n        local Concentration = iota.hexToShort(hex,3,'B')\n        local elongation = 0\n        out.data = {\n            concentration = Concentration\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n  log.debug(string.sub(data,1,12))\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03  then\n        errormsg = 'CMD is not right,0x03'\n        errcode = 1001\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n	INLINE	2017-09-05 10:39:06.783+08	2018-02-28 18:32:12.197+08	2017-09-05	\N
872da9a0-9b0f-48d0-9767-c090a8d895af	bjftxd_laser_9501	\N	北京飞拓信激光测距仪协议	1.0	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	f	4f9eb22c-4ad8-4b77-a5a2-dc6eca00dd82	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "bjftxd_laser_9501.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    \n    else\n        buff=iota.appendHexByte(buff, 0xCC, endian)              -- 1: 指令: 0xCC \n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)   -- 1: moduleId\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,500)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --   2   2   1      4     4       2\n        -- 3255303033303032\n        local index,ismodule = IsModule(hex)\n        local datastr = toStrHex(hex)\n\n        local pdata = string.sub(datastr,index, index+5);\n        local len = tonumber(pdata) / 1000.0; --m\n    \t\n        out.data = {\n            length = len\n        }\n        if ismodule == false then \n            out.result = {code=errcode,msg=errormsg}\n            out.data = {}\n            --return json.endcode(out)\n        end\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    local str = toStrHex(data)\n    if string.sub(str,2,2) == 'U' or string.sub(str,3,3) == 'U' then\n        return true\n    else \n        errormsg = 'Data is invalid'\n        errcode = 1001\n        return false\n    end\nend\n\nIsModule=function(data)\n    local moduleNo = ''\n    \n    local str = toStrHex(data)\n \tlocal startIndex = string.find(str,'U')\n\n    if startIndex > 2 then\n        moduleNo = string.sub(str,1,2)\n        startIndex = startIndex + 1\n        local invalid = false\n        if device.props.moduleId == moduleNo then invalid = true else errormsg = 'moduleId is invalid' errcode = 1004 end \n    \n        return startIndex,invalid\n    else \n        local d = iota.hexToByte(data,0,'B')\n        if d >=48 and d <=57 then\n            moduleNo = string.sub(str,1,1)\n            startIndex = startIndex + 1\n            local invalid = false\n            if device.props.moduleId == moduleNo or tonumber(device.props.moduleId)==d then invalid = true else errormsg = 'moduleId is invalid' errcode = 1001 end \n            return startIndex,invalid\n        else\n            startIndex = startIndex + 1\n            local invalid = false\n            if tonumber(device.props.moduleId)==d then invalid = true else errormsg = 'moduleId is invalid' errcode = 1001 end \n            return startIndex,invalid\n        end \n    end\n  return startIndex,invalid\nend\n \n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend	INLINE	2017-09-02 14:50:22.489+08	2018-02-28 18:32:12.198+08	2017-08-31	\N
457f4d30-bbd7-4608-84f6-c6249675c7eb	test1	\N		1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start=function()\n  log.debug("LUA http server start")\nend\n\nonData=function(data)\n    log.debug("ondata http_server %s", json.encode(data))\n    ack = {type="http", code=201, body="good"}\n    ctx:asend(ack)\n    ctx:notify\nend	INLINE	2018-09-06 17:07:18.601+08	2018-12-17 17:44:20.176+08	2018-09-06	\N
078cc06c-c4e7-4863-8a2a-7e080b162bf9	JM_1550	\N	开始采集	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n\nstart =function()\n    log.debug('jm_1550 devices=%s', json.encode(device))\n    local endian = 'B'\n    \n    local moduleNo = device.uplink.props.module\n    if string.len(moduleNo)<8 then  --采集箱编号8位\n        local strlen=8-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n  \n    local buff_str = '#'..moduleNo..'f!'\n    local buff = StrToHex(buff_str)\n    ctx:asend(buff)\n   log.debug('jm_1550 发送读取指令 asend=>%s', buff)\n   local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    return json.encode(out)\nend\n\n\n-- 字符串 -> Hex\nStrToHex = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend	INLINE	2019-02-13 09:45:34.188+08	2019-04-28 09:39:13.34+08	2019-02-13	\N
228b069f-74d0-4863-983c-c33d126a4c02	zt_acqUint_4500	\N	南通中天采集仪协议	1.0	ca9092a8-c707-4783-9d79-f50f05048927	ca9092a8-c707-4783-9d79-f50f05048927	f	ca9092a8-c707-4783-9d79-f50f05048927	Lua	--//02 协议分析/2017-03/南通中天/提供V2.4版数据采集器命令集.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "zt_4500.lua", device.uplink.props.module or "[nil]")\n\tlocal buff=''\n    local buffstr='LA'\n    local moduleNo=tonumber(device.uplink.props.module) \n    buffstr=buffstr..string.format("%03d",moduleNo)\n    buffstr=buffstr..'/LDCMD/1$'\n    log.debug("zt_4500: buffstr= %s",buffstr)\n    buff_request=StrToHex(buffstr)\n\tlog.debug("zt_4500: buff_request= %s",buff_request)\n    ok,resp=ctx:ssend(buff_request,15000)--同步下发)\n\tlocal result='{}'\n\tif ok then\t   \n\t\tresult = unmarshall(resp,resp)--解析所有数据\n\telse\n\t\tlog.debug("zt_4500:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\tend\n\tlog.debug('zt_4500:out序列化')\n\tlocal resultData =json.encode(result)\n    log.debug("zt_4500:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\nend\n--2409494409592D4D2D442D482D4D09426174745F566F6C746167655F6D56094D6F6973315F6D56094D6F6973315F25094D6F6973325F6D56094D6F6973325F25094D6F6973335F6D56094D6F6973335F25094D6F6973345F6D56094D6F6973345F25094D6F6973355F6D56094D6F6973355F25094D6F6973365F6D56094D6F6973365F25094D6F6973375F6D56094D6F6973375F25094D6F6973385F6D56094D6F6973385F25095261696E66616C6C636F756E74095261696E46616C6C5F6D6D0D0A24094C4130303109323031372D30332D33302031323A3035093132333835093030313509302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E3130093030313409302E313009303030303009302E30302020200D0A\nunmarshall=function(hex)\n    log.debug("zt_4500:".."LUA: onData: data is =%s", hex)\n\t\n    log.debug("zt_4500:".."LUA:subdevices : data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\n     --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        allResponse=HexToStr(hex)\n\t\tallResponse = string.gsub(allResponse,'\\r','\\n')\n        print("zt_4500:allResponse是 %s",allResponse)\n        --获取子字符串表\n        local sData=Split(allResponse,'\\n')\n\n        allResponse = string.gsub(allResponse,'\\r','\\n')\n        print("zt_4500:allResponse是 %s",allResponse)\n        --获取子字符串表\n        local sData=Split(allResponse,'\\n')\n\n        local len=table_leng(sData)\n\t\tfor k=len,1,-1 do\n            if sData[k]=='' or sData[k]==nil then\n                table.remove (sData,k)                \n            end\n        end\n\t\t\n\t\t\n        local title = Split(sData[1],'\\t')\n        local dataresult = Split(sData[2],'\\t')\n        local index = IndexOf(title,'ID')\n        local moduleNo = string.sub(dataresult[index],3,-1)--模块号\n        index = IndexOf(title,'Y-M-D-H-M')\n        local timestr = dataresult[index]\n        index = IndexOf(title,'Batt_Voltage_mV')\n        local voltagestr = dataresult[index]\n\n\n\n        local offset = 1\n        local title_len=table_leng(title)\n        for k=1,title_len,1 do \n            local key = string.format("Mois%s", offset)\n            if string.find(title[k],key) then \n                local data1 = tonumber(dataresult[k+1])--datalist\n                local data2 = tonumber(dataresult[k])\n\t\t\t\tlocal channelNo=offset\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tend\n\t\t\t\tlog.debug('zt_4500:模块%s通道%s的deviceId=%s',moduleNo,channelNo,deviceId)\n\t\t\t\tlocal rawData = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tdata1=data1,\n\t\t\t\t\t\t\t\tdata2=data2,\n\t\t\t\t\t\t\t\tvoltagestr=voltagestr,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,rawData)\t\n                offset = offset + 1\n                k=k+1\n            end\n        end\n\t\t\n\t\tlocal channelNo=offset  --通道号\n        if Contains(title,'Rainfallcount') and Contains(title,'RainFall_mm') then\n            index = IndexOf(title,'RainFall_mm')\n            local rain = tonumber(dataresult[index])\n            index = IndexOf(title,'Rainfallcount')\n            local rainv = tonumber(dataresult[index])\n\n\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\tlocal deviceId\n\t\t\tif childDevice~=nil then\n\t\t\t\tdeviceId=childDevice.id\t\t\t\n\t\t\tend\n\t\t\tlocal rawData = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\train=rain,\n\t\t\t\t\t\t\t\trainv=rainv,\n\t\t\t\t\t\t\t\tvoltagestr=voltagestr,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t}\n\t\t\ttable.insert(out.data,rawData)\t\t\t\n        end\n     \n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return out\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    moduleNoId=tonumber(moduleNoId)\n    channelNoId=tonumber(channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("moduleId= "..tostring(moduleNoId).." channelId="..tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n        \tif child.uplink.props.module==tostring(moduleNoId) then\n\t\t  \t  if child.uplink.props.channel == tostring(channelNoId) then\n                 log.debug("zt_4500  DeviceInfo是："..tostring(child.deviceId))\n          \t\t log.debug("zt_4500  子设备原形child=%s",json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("zt_4500 subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(checkdata)\n    log.debug("zt_4500 校验开始")\n    if checkdata == nil or string.len(checkdata)/2 <= 3 then\n        errormsg = 'Data is nil or length is not right'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(checkdata,0,'B') ~= 0x24 or iota.hexToByte(checkdata,1,'B') ~= 0x09 or iota.hexToByte(checkdata,string.len(checkdata)/2-1,'B') ~= 0x0a then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n--crc\n    log.debug("zt_4500  校验通过")\n    return true\nend\n\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHexToStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng=function(t)\n    local leng=0\n    for k, v in pairs(t) do\n      leng=leng+1\n    end\n    return leng;\nend\n\nIndexOf=function(table,str) \n    local pp = 0\n    for k,v in pairs(table) do\n        if str == v then\n            pp = k\n            return pp\n        end\n    end\n    return -1\nend \n\nContains=function(table,str)\n    for k,v in pairs(table) do\n        if str == v then\n            return true\n        end\n    end\n    return false\nend	INLINE	2017-09-09 13:49:28.644+08	2018-12-14 11:35:13.775+08	2018-03-08	\N
471b754b-0904-451b-96a3-a5e8c6a6ee2b	xy_LiquidLevel_1931	\N		1.0	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	f	3e663c2d-1b5c-4742-aef3-a0c1368cc4b3	Lua	--//04 项目资料/2017-07/北京星移/CYW11通用型投入式液位变送器.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "xy_LiquidLevel_1931", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--01030202acb959\n--moduleId=1\n--"liquidLevel": 1710,\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local LiquidLevel = iota.hexToShort(hex,3,'B')*5/2.0;\n        \n        out.data = {\n            liquidLevel = LiquidLevel,          \n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x02 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-11-30 11:47:09.516+08	2018-02-28 18:32:12.2+08	2017-11-30	\N
625ea754-8015-430d-afef-ca20ec2efa06	mk_accelertation_1	\N	单轴加速度	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_accelertation_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01030803EBE4E8\n--"accelertation": 1003\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x08 and moduleNo==modulenumber  then\n            \n            local accelertation = iota.hexToShort(hex,4,'B')\n            out.data = {               \n                accelertation=accelertation\n            }\n\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_accelertation_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 10:45:53.614+08	2018-02-28 18:32:12.201+08	2018-01-08	\N
44a576ba-470c-4115-8e33-f2a80145060c	anXin_9028_Settlemen	\N	安信标准协议 沉降	1.0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	f	5c2a5b34-3127-4921-bf54-49378012c0b0	Lua	--[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "AnXin_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n  -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, 0xFF, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0a, BE);            -- 2 :设备类型0a 静力水准，\n    buff=iota.appendHexByte(buff, 0x00, BE); \n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x01, BE);  --功能码  0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  ff41584a000a0004800000f6180aa5cead  沉降63mm 温度27.25°   moduleId=4\n--原始数据  \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n  if string.len(data)/2 ~=17 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\tend\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); --  :设备类型0a 温湿度，\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n    else\n       log.debug("帧头正确")\n\tend\n  \t\t\t\t\n\t\n    log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data,9,'B')/1000.0;\n        local temp = iota.hexToShort(data, 13,'B')/100.0;\n        log.debug("沉降等于:%s,温度等于:%s",distance,temp)\n\t\t\n\t\tout.data = {\n\t\tDistance=distance,\n        Temp=temp\n\t\t};\t\n\t return json.encode(out)\nend\n	INLINE	2017-08-31 16:47:40.673+08	2018-02-28 18:32:12.201+08	2017-08-31	\N
43291a09-50f1-4287-8c7c-b51503799fd1	sxcg_liquidLevel_1	\N	上海隼星	1.0	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sxcg_liquidLevel_1934.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sxcg_liquidLevel_1934 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sxcg_liquidLevel_1934 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian)    -- 水位2  水温1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("sxcg_liquidLevel_1934,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("sxcg_liquidLevel_1934  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--0103040012d687007d0000\nunmarshall=function(hex,moduleNoStr)\n    log.debug("sxcg_liquidLevel_1934 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local level =iota.hexToInt(hex,3,'B')\n\t\tlocal temperature =iota.hexToUShort(hex,7,'B')/10\n\t\t\n        log.debug("sxcg_liquidLevel_1934  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            level=level,\n\t\t\ttemperature=temperature\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("sxcg_liquidLevel_1934 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 11 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2017-11-16 16:43:25.91+08	2018-08-15 10:59:26.663+08	2018-08-15	\N
e0bea2c7-c789-4c48-8005-ebd569755d61	tcpXY	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("gr_2512 发送数据=01020304")\n    ok,resp=ctx:asend("01020304",5000)\nend\n\nonData=function(hex)\n    log.debug("gr_2512 收到数据=%s", hex)\n\tlog.debug("gr_2512 device =%s", json.encode(device))\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\t\n\t\n\n\tlocal data=hex\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('gr_2512 数据有效')\n\t\n\t    local k=0.0;\n\t\tlocal unit=''\n\t\tlocal k_index=string.sub(data,11,12)\n\t\tif k_index=='01' then\n\t\t   k=1.0\n\t\t   unit = "ug/m3"; --PM2.5\n\t\t   elseif k_index=='02' then\n\t\t   k=1.0\n\t\t   unit = "ug/m3"; --PM10\n\t\t   elseif k_index=='03' then\n\t\t   k=1.0\n\t\t   unit = "ppb"; --SO2\n\t\t   elseif k_index=='04' then\n\t\t   k=1.0\n\t\t   unit = "ppb"; --NO2\n\t\t   elseif k_index=='05' then\n\t\t   k=0.001\n\t\t   unit = "ppm"; --CO\n\t\t   elseif k_index=='06' then\n\t\t   k=0.01\n\t\t   unit = "ppb"; --O3\n\t\t   elseif k_index=='09' then\n\t\t   k=0.01\n\t\t   unit = "% RH"; --湿度\n\t\t   elseif k_index=='0a' then\n\t\t   k=0.1\n\t\t   unit = "℃"; --温度\n\t\t   else\n\t\t   log.debug('gr_2512 无匹配数据类型')\t\t    \n\t\tend\n\t\t--log.debug('k是'..k)\n\t\tlocal Concentration = 0.0;\n\t\tlocal gasType=string.sub(data,13,14)\n    \n\t\tif gasType=='20' then\n\t\t\tConcentration=iota.hexToInt(data,9,'L')\n\t\telseif gasType=='40' then\n\t\t\tConcentration=iota.hexToShort(data,9,'L')\n\t\telseif gasType=='43' then\n\t\t\tConcentration=iota.hexToShort(data,9+1,'L')*(-1)^tonumber(string.sub(data,9,10),16)  \t\t\n        end\n\t\tlocal moduleId = tonumber(string.sub(data,1,2),16);\n        local channelId = tonumber(string.sub(data,11,12),16);\n\t\tlog.debug('gr_2512 moduleId=%s,channelId=%s',moduleId,channelId)\n\t\tlocal childDevice=getDeviceInfo(moduleId,channelId) \n\t\tif childDevice~=nil then\n\t\t\tlocal data1 = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tconcentration= Concentration*k\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t}\n\n\t\t\ttable.insert(out.data,data1)\n        end\t\t\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n\n\t--/湿度13，其他15,心跳10\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ==15 or string.len(data)/2 ==13 or string.len(data)/2 ==10 then\n\telse\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n        return false\n    end\n\t\n    if string.sub(data,1,2) == '77' or string.sub(data,3,4) == '77' or string.sub(data,5,6) == '77' or string.sub(data,7,8) == '2e' then\n        --心跳直接放入\n\t\treturn true\n    end\n\n\tif string.sub(data,9,10) ~= '01' or string.sub(data,15,16) ~= '00'then\n        errormsg = 'Data is Invalid'\n        errorcode = 1001\n        return false\n    end\n  \n    return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("gr_2512 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    -- log.debug("gr_2512:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\tlog.debug("gr_2512 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n        \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t  \t \n                if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("gr_2512:  m=%s  匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend\n\n       \t \tend\n\t\tend\n    else\n       log.debug("gr_2512:  subdevices是nil")\n    \treturn nil\n    end\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n	INLINE	2018-06-19 16:50:06.449+08	2018-06-19 17:09:25.099+08	2018-06-19	\N
8a27161a-7fe3-47bf-a269-648c94121266	FS_LF_XW	\N	同 信为9102	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n\nstart=function()\n    log.debug("start %s, ctx=", "FS_LF_XW.lua",json.encode(ctx.device))\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("FS_LF_XW 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("FS_LF_XW 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tif tonumber(moduleNo) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'Invalid moduleId,moduleId >= 255'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, moduleNo, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x04, endian)                         --1: CMD 4\n    buff=iota.appendHexByte(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x02, endian)                 --1: CMD 1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("FS_LF_XW  m=%s  received=%s",moduleNo,hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        -- 010404800101488222\n        local data_by = 0\n        local elongation = 0\n        if iota.hexToByte(hex,1,'B') == 0x04 then\n            local by = string.sub(hex,7,15) --data\n            local sign = 1\n            data_by = iota.hexToByte(by,0,'B') \n            if data_by >= 0x80 then\n                data_by = bit:_and(data_by , 0x7f)\n                sign = -1\n            end\n            local integer = bit:_or(bit:_lshift(bit:_and(data_by , 0xffff) , 8) , iota.hexToByte(by,1,'B')) * sign\n            local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,2,'B') , 0xffff) , 8) , iota.hexToByte(by,3,'B')) /1000 * sign\n\n            elongation = integer + decim\n            out.data = {\n                length=elongation\n            }\n        else \n            local cmd = iota.hexToByte(hex,2,'B')\n            if cmd == 0x06 then \n                out.result = {\n                    code = 1005,\n                    msg = '功能号错误'\n                }\n            elseif cmd == 0x05 then \n                out.result = {\n                    code = 1005,\n                    msg = '寄存器错误'\n                }\n            elseif cmd == 0x04 then \n                out.result = {\n                    code = 1005,\n                    msg = '正常操作发生异常'\n                }\n            end\n        end\n\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n    if data == nil or (string.len(data)/2 ~= 9 and string.len(data)/2 ~=5) then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 and iota.hexToByte(data,1,'B') ~= 0x84 then\n        errormsg = 'CMD is not right,0x04/0x84'\n        errcode = 1001\n        return false\n    end\n    if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\n        errormsg = 'Invalid moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n	INLINE	2018-05-16 17:24:13.078+08	2018-05-17 10:51:25.987+08	2018-05-16	\N
95936e79-012a-4439-87a6-0a08f6c419e5	JM_1551	\N	停止采集指令	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n\nstart =function()\n    log.debug('jm_1550 devices=%s', json.encode(device))\n    local endian = 'B'\n    \n    local moduleNo = device.uplink.props.module\n    if string.len(moduleNo)<8 then  --采集箱编号8位\n        local strlen=8-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n  \n    local buff_str = '#'..moduleNo..'Z!'\n    local buff = StrToHex(buff_str)\n    ctx:asend(buff)\n   log.debug('jm_1550 发送读取指令 asend=>%s', buff)\n   local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    return json.encode(out)\nend\n\n\n-- 字符串 -> Hex\nStrToHex = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend	INLINE	2019-04-20 17:19:29.785+08	2019-04-28 09:39:28.295+08	2019-04-20	\N
2a2d8e77-444a-4911-9f33-9de3b1dff1c8	mk_accelertation_3	\N	三轴加速度	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_accelertation_3.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa0407030d660eb70000ad58\n--"xDegree": 3.43,\n--"yDegree": 3.767,\n--"zDegree": 0\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x16 and moduleNo==modulenumber  then\n            \n            local xAccelertation = iota.hexToShort(hex,4,'B')\n            local yAccelertation = iota.hexToShort(hex,6,'B')\n            local zAccelertation = iota.hexToShort(hex,8,'B')\n            out.data = {               \n                xAccelertation = xAccelertation,\n                yAccelertation = yAccelertation,\n                zAccelertation = zAccelertation\n            }\n\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_accelertation_3.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:00:40.723+08	2018-02-28 18:32:12.202+08	2018-01-08	\N
dc9c3a5d-cfcf-4676-bd75-2314053e2cf6	anXin_Settlemen_9028	\N	安信标准协议 静力水准（请求应答）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "anXin_Settlemen_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n  -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, 0xFF, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n    buff=iota.appendHexWord(buff, 10, BE)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)   -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x01, BE);  --功能码  0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  ff41584a000a0004800000f6180aa5cead  沉降63mm 温度27.25°   moduleId=4\n--moduleId=4  \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n  if string.len(data)/2 ~=17 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); --  :设备类型0a 温湿度，\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n    else\n       log.debug("帧头正确")\n\tend\n  \t\t\t\t\n\t\n    log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data,9,'B')/1000.0;\n        local temp = iota.hexToShort(data, 13,'B')/100.0;\n        log.debug("沉降等于:%s,温度等于:%s",distance,temp)\n\t\t\n\t\tout.data = {\n\t\tdistance=distance,\n        temperature=temp\n\t\t};\n    end\n\t return json.encode(out)\nend\n	INLINE	2017-08-31 16:33:23.005+08	2019-12-23 15:20:18.182+08	2017-08-27	\N
3a675e96-bee4-48ae-85c8-643b40bb29fd	jzyg_fsfx	\N		1.0	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	f	e54b85b0-151e-4b74-b360-a8ae65addd46	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "jzyg_fsfx.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("jzyg_fsfx 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("jzyg_fsfx 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x02, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n     \n        local speed = iota.hexToUShort(hex,3,'B')/10\n\t\tlocal direction = iota.hexToUShort(hex,5,'B')/10\n\n  \n        out.data = {\n            speed=speed,\n\t\t\tdirection=direction\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('jzyg_fsfx开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('jzyg_fsfx数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-11-02 10:08:07.078+08	2020-11-02 10:14:27.912+08	2020-11-02	\N
0dc05dea-ad41-48eb-8f4b-4b2b20ae87fe	jinan_weight_9802	\N	济南大学奇石缘称重	1.0	1b5ae589-18e9-4263-96b2-dd30c0357ae1	1b5ae589-18e9-4263-96b2-dd30c0357ae1	f	1b5ae589-18e9-4263-96b2-dd30c0357ae1	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--测试AAAAF0AC010000D0DE480008E048003F7B9700E10700000B000000010000000B0000000B0000000B000000008E4F00000000000B00000037000000020000000000000001000000BE150000988A4F0001000000F88D4F005CCF2800A3E0C577008E4F00C0B6B4A84238363039BEAF0000000000323031372D382D325F31362D32322D32362D36303831395F382E6A7067A7D8092C00000020BBD268B0D02800B961B66170CF2800D0DE4800F8DC2800D58C8F7686509F41FEFFFFFFDA988D7624E3D361008E4F000800000031000000E8854F00E8854F00A0D028007C784B0074E3D361008E4F00E8854F0024D02800A0D028007C784B0000000000000000009F6BD461A0D0280000000000A4D02800C754AD6AE8854F0024D02800010000006B0200000900000000454B001600000000000000DC104A00008E4F0088D028004FD7A9681900000030BBD26880D0280000C6F161B8704B0000854F00C8104A0000000000160000000000000000000000E5E89B000000000028000000C8D1280000454B001061AE68B8D02800D0DF5700E1EBAE0000000000C8D128003CFC280004DFAC000000000028000000C8D12800E0E953004C03EEEE\nstart=function()\n    log.debug("start %s, ctx=", "jinan_weight_9802.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local  IDX_Start = 0  -- 起始指令\n    local  IDX_CMD = 2; -- 命令字 \n    local  IDX_DataLen = 3; -- 数据长度\n\n--数据域 内的索引号\n    local  IDX_cDevNum = 0; -- 设备编号\n    local  IDX_lDataHCode = 1; -- 数据标号H\n    local  IDX_lDataCode = 2; -- 数据标号L\n    local  IDX_iYear = 3; -- 年\n    local  IDX_cMonth = 4; -- 月\n    local  IDX_cDay = 5; -- 日\n    local  IDX_cHour = 6; -- 时\n    local  IDX_cMin = 7; -- 分\n    local  IDX_cSec = 8; -- 秒\n    local  IDX_iMilSec = 9; -- 毫秒\n    local  IDX_iLane = 10; -- 车道\n    local  IDX_cVehicleType = 11; -- 车型\n    local  IDX_fSpeed = 12;--车速\n    local  IDX_iAxleCnt = 13; -- 轴数\n    local  IDX_iAxleDis = 14; -- 轴距cm\n    local  IDX_cDriction = 15; -- 方向\n    local  IDX_fSumWeight = 16; -- 总重\n    local  IDX_fAxleWeight_1 = 17; -- 轴一重量\n    local  IDX_fAxleWeight_2 = 18; -- 轴二重量\n    local  IDX_fAxleWeight_3 = 29; -- 轴三重量\n    local  IDX_fAxleWeight_4 = 20; -- 轴四重量\n    local  IDX_fAxleWeight_5 = 21; -- 轴五重量\n    local  IDX_fAxleWeight_6 = 22; -- 轴六重量\n    local  IDX_licence = 23; -- 车牌号\n    local  IDX_frontPic64=24; --前图片文件名称\n    local  IDX_backtPic64=25;--后图片文件名称\n    local  IDX_sidePic64=26;--旁边图片文件名称\n    local  IDX_upPic64=27;--旁边图片文件名称\n    local  IDX_Movie64=28;--视频文件名称\n\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local data=string.sub(hex,15,-5)--获取数据域\n\n        local Channel = iota.hexToUInt(data,IDX_iLane*4,'L') --车道号\n        local Carmodel =iota.hexToUInt(data,IDX_cVehicleType*4,'L') --车型号\n        local Speed = iota.hexToUInt(data,IDX_fSpeed*4,'L')--车速\n        local Axisnum = iota.hexToUInt(data,IDX_iAxleCnt*4,'L')--轴数\n        local Totalbase = iota.hexToUInt(data,IDX_iAxleDis*4,'L')--轴距cm\n        local Direction = iota.hexToUInt(data,IDX_cDriction*4,'L')--车向\n        local FSumWeight = iota.hexToUInt(data,IDX_fSumWeight*4,'L')--总重\n\n        local FAxleWeight_1 = iota.hexToUInt(data,IDX_fAxleWeight_1*4,'L')-- 轴一重量\n        local FAxleWeight_2 = iota.hexToUInt(data,IDX_fAxleWeight_2*4,'L')-- 轴二重量\n        local FAxleWeight_3 = iota.hexToUInt(data,IDX_fAxleWeight_3*4,'L')-- 轴三重量\n        local FAxleWeight_4 = iota.hexToUInt(data,IDX_fAxleWeight_4*4,'L')-- 轴四重量\n        local FAxleWeight_5 = iota.hexToUInt(data,IDX_fAxleWeight_5*4,'L')-- 轴五重量\n        local FAxleWeight_6 = iota.hexToUInt(data,IDX_fAxleWeight_6*4,'L')-- 轴六重量\n  \n        --local ddd=string.sub(data,2*4*IDX_licence+1,2*4*(IDX_licence)+4);    \n        --local ddd2=string.sub(data,2*4*(IDX_licence)+5,2*4*(IDX_licence)+8);\n       --local ddd1=string.sub(data,2*4*(IDX_licence)+9,2*4*(IDX_licence)+18);\n\n       local Licence1 = unicode2gb2312(string.sub(data,2*4*(IDX_licence)+1,2*4*(IDX_licence)+4))--车牌颜色\n       local Licence2 = unicode2gb2312(string.sub(data,2*4*(IDX_licence)+5,2*4*(IDX_licence)+8))--车牌归属地\n       local Licence3 = toStrHex(string.sub(data,2*4*(IDX_licence)+9,2*4*(IDX_licence)+18))--5位数字或字母\n       local licence4_1=string.sub(data,2*4*(IDX_licence)+19,2*4*(IDX_licence)+20)\n       local licence4\n       --车牌最后一位 的16进制开头是3 是数字，否者可能是汉字 \n       if(string.sub(licence4_1,1,1)=='3') then\n       licence4 = toStrHex(licence4_1)--第6位数字\n       else\n           licence4_1=string.sub(data,2*4*(IDX_licence)+19,2*4*(IDX_licence)+22)\n           licence4 = unicode2gb2312(licence4_1)--第6位汉字\n       end\n       local Licence=Licence1..Licence2..Licence3..licence4;\n   \n        out.data = {            \n            channel = Channel,\n            carmodel= Carmodel,\n            speed = Speed,\n            axisnum=Axisnum,\n            totalBase = Totalbase,\n            direction = Direction,\n            fSumWeight= FSumWeight,           \n            axieWeight1 = AxieWeight1,\n            axieWeight2 = AxieWeight2,\n            axieWeight3 = AxieWeight3,\n            axieWeight4 = AxieWeight4,\n            axieWeight5 = AxieWeight5,\n            axieWeight6 = AxieWeight6,\n            licence = Licence\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    local len=string.len(data)/2\n    if hexToByte(data,0,'L') ~= 0xaa or \n    hexToByte(data,1,'L') ~= 0xaa or \n    hexToByte(data,len-2,'L') ~= 0xee or \n    hexToByte(data,len-1,'L') ~= 0xee then\n        errormsg = 'is not match weight buffer .'\n        errcode = 1001\n        return false\n    end\n    --if len ~=\n    --rrormsg = 'weight buffer length is not enough.'\n    return true\n--crc\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n                  ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n                  ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n                  ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n                  ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7",["白"] = "B0D7",["蓝"] = "C0B6",\n                  ["黄"] = "BBC6",["黑"] = "BADA",["学"] = "D1A7",["使"] = "CAB9",["警"] = "BEAF"}\t\n\tfor k,v in pairs(map_tb) do\n        if v == string.format("%X",tonumber(src,16)) then\n            return k\n        end\n    end\n    return " "\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2017-11-09 16:29:53.827+08	2018-02-28 18:32:12.204+08	2017-11-07	\N
d923ce84-8f85-4e60-94c4-e91819015eeb	simulator	\N		1	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	function unhex( input )\n    return (input:gsub( "..", function(c)\n        return string.char( tonumber( c, 16 ) )\n    end))\nend\n\nstart=function()\nend\n\nonData=function(data)\n  local dataJson = unhex(data)\n  log.debug("simulator: devices data = %s", dataJson)\n  ctx:notify(dataJson)\nend	INLINE	2018-11-23 20:44:16.517+08	2018-11-24 16:06:45.061+08	2018-11-23	\N
333f9eaa-379c-4293-a159-a26f133e42be	CZJTM_api_3003	\N		1.0	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	f	d5fa5193-b237-4a60-b82a-165c033e2596	Lua	\nstart = function()\n    log.debug('CZJTM_api_3003 start device=%s', json.encode(device))\n\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local datareq = {\n        type = 'http',\n        url = '', --url=http://www.jsjtm.com.cn:8080/api/RawData/GetRawDataList\n        method = 'get',\n        header = {}\n    }\n    local Account = device.props.Account\n    datareq.url = device.props.Url .. '?Account=' .. Account\n    local PassWord = device.props.PassWord\n    datareq.url = datareq.url .. '&PassWord=' .. PassWord\n    local ModuleCode = device.props.ModuleCode\n    datareq.url = datareq.url .. '&ModuleCode=' .. ModuleCode\n    local ModuleAddress = device.props.ModuleAddress\n    datareq.url = datareq.url .. '&ModuleAddress=' .. ModuleAddress\n\n    local beginTime\n    local endTime\n    local r1, r1ok = redis.get(device.id .. '_endTime')\n    log.debug('CZJTM_api_3003 r1=%s,r1ok=%s', r1, r1ok)\n    if r1ok and r1 ~= nil then\n        beginTime = tonumber(r1)\n        log.debug('CZJTM_api_3003 r1=%s,r1ok=%s,beginTime=%s', r1, r1ok, beginTime)\n    else\n        beginTime = os.time()\n        --第一次默认当前时间\n        redis.set(device.id .. '_endTime', tostring(beginTime))\n        log.debug('CZJTM_api_3003  第一次默认当前时间 r1=%s,r1ok=%s', r1, r1ok)\n    end\n\n    local BeginTime = TimestampToDateTime(beginTime)\n    --'2019-03-16%2017:30:00' --默认启始时间\n    datareq.url = datareq.url .. '&BeginTime=' .. BeginTime\n\n    --endTime  为首次提取数据过多，endtime-begintime  最大时间差不超过2小时\n    endTime = os.time() --记录数据时间，多组数据取最大的结束时间\n    local timeSPan = endTime - beginTime\n    if timeSPan > 7200 then\n        endTime = beginTime + 7200\n    end\n\n    local EndTime = TimestampToDateTime(endTime) --默认启始时间\n    datareq.url = datareq.url .. '&EndTime=' .. EndTime\n    --获取上次记录时间\n\n    -- local beginTimeNum=ConvertToTimestamp(beginTime)\n\n    log.debug('CZJTM_api_3003  begintime=%s,endtime=%s,data url=%s', beginTime, endTime, datareq.url)\n\n    datareq.ContentType = 'application/json'\n\n    --get发送\n    local dataok, dataack = ctx:ssend(datareq, 10000)\n    if not dataok or dataack == nil then\n        out.result = {\n            code = 1001,\n            msg = '超时'\n        }\n    else --OK\n        log.debug('CZJTM_api_3003:  dataok=%s,dataack=%s', dataok, json.encode(dataack))\n        if dataack.code == 200 and dataack.body ~= '' then -- http应答\n            alldataTable = json.decode(dataack.body) -- 有数据\n            --{\n            --   "ErrorCode": 0,\n            --   "IsSuccess": false,\n            --   "Msg": "账号或密码错误",\n            --   "Result": null\n            --}\n            if alldataTable.IsSuccess ~= false then\n                local module_data = alldataTable.Result --数据\n                log.debug('CZJTM_api_3003  校验有无有效数据module_data[1].RD_DataTime=%s', module_data[1].RD_DataTime)\n                if module_data[1].RD_DataTime ~= nil and module_data[1].RD_DataTime ~= '' then --RD_DataTime": null\n                    for k, v in pairs(module_data) do --遍历每个模块\n                        --log.debug('CZJTM_api_3003 k=%s, value=%s', k, json.encode(v))\n                        local moduleCode = v.RD_ModuleCode\n                        local moduleNo = v.RD_ModuleAddress\n                        local timeStr = v.RD_DataTime\n                        local timenow = unixtimestamp(timeStr)\n                        --log.debug( 'CZJTM_api_3003 moduleCode=%s,moduleNo=%s,timeStr=%s,timenow=%s,beginTime=%s,timenum=%s,k=%s, value=%s',\n                        --  moduleCode,\n                        --   moduleNo,\n                        --   timeStr,\n                        --   timenow,\n                        --   beginTime,\n                        --  timenum,\n                        --  k,\n                        --   json.encode(v)\n                        -- )\n\n                        if beginTime <= timenum then --timenum在unixtimestamp全局变量\n                            --endTime = timenum --时间每次固定死了\n                            --log.debug('CZJTM_api_3003  beginTime=%s,endTime=%s', beginTime, endTime)\n\n                            local sensorsData = v.RD_Sensors\n                            if sensorsData ~= nil then\n                                for k_sensor, v_sensor in ipairs(sensorsData) do --遍历传感器数据\n                                    local sensorChannelId = v_sensor.RD_Sensoradd\n                                    local sensorData = v_sensor.RD_Datas\n\n                                    local childDevice = getDeviceInfo(moduleNo, sensorChannelId)\n                                    --\n                                    if childDevice ~= nil then\n                                        if moduleCode == '0101' then\n                                            local physicalvalue = tonumber(sensorData[1])\n                                            -- log.debug('CZJTM_api_3003 physicalvalue=%s  timess=%s ', physicalvalue, timeStr)\n                                            -- log.debug('CZJTM_api_3003  type(timess)=%s ,unixtimestamp(timess)=%s', type(timeStr), unixtimestamp(timeStr))\n                                            local data1 = {\n                                                data = {\n                                                    physicalvalue = physicalvalue\n                                                },\n                                                device = childDevice.id,\n                                                time = timenow,\n                                                type = 1\n                                            }\n                                            table.insert(out.data, data1)\n                                        --log.debug('CZJTM_api_3003  moduleNo=%s,sensorChannelId=%s,data1=%s', moduleNo, sensorChannelId, json.encode(data1))\n                                        end\n                                    end\n                                end\n                            end\n                        else\n                            log.debug('CZJTM_api_3003 beginTime=[%s] > timenum=[%s]', beginTime, timenum)\n                        end\n\n                        --获取通道设备deviceId\n                    end\n                    --更新endTime\n                    if endTime > tonumber(beginTime) then\n                        if redis.set(device.id .. '_endTime', tostring(endTime)) then\n                            log.debug('CZJTM_api_3003 redis更新 set lasttime ok  key=%s,value=%s', device.id .. '_endTime', tostring(endTime))\n                        end\n                    else\n                        log.debug('CZJTM_api_3003 redis不更新 ')\n                    end\n                end\n            else\n                out.result = {\n                    code = 1002,\n                    msg = alldataTable.Msg\n                }\n            end\n        else\n            log.debug('CZJTM_api_3003  request data error:%s body:%s', ack.code, ack.body)\n        end\n    end\n    local resultStr = json.encode(out)\n    log.debug('CZJTM_api_3003 resultStr=%s', resultStr)\n    ctx:done(resultStr)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("CZJTM_api_3003 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("CZJTM_api_3003:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n\n            moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck = child.uplink.props.channel\n            --log.debug('CZJTM_api_3003 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n                log.debug('CZJTM_api_3003:  m=%s,c=%s  匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('CZJTM_api_3003:  subdevices是nil')\n        return nil\n    end\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp = function(datestr)\n    -- 2018-4-28 16:10:12\n    log.debug('CZJTM_api_3003 datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    --log.debug('CZJTM_api_3003 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    -- log.debug('CZJTM_api_3003 timenum=%s', timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    -- log.debug('CZJTM_api_3003 recordTime=%s', recordTime)\n    return recordTime\nend\n\nTimestampToDateTime = function(TimestampNum)\n    local Date1 = os.date('%Y-%m-%d', TimestampNum)\n    --'2019-03-16%2017:30:00' --默认启始时间\n    local Date2 = os.date('%H:%M:%S', TimestampNum)\n    --'2019-03-16%2017:30:00' --默认启始时间\n    local result_datetime = Date1 .. '%20' .. Date2\n    return result_datetime\nend\n\nConvertToTimestamp = function(datetimeStr)\n    -- 2018-4-28 16:10:12\n    log.debug('CZJTM_api_3003 datetimeStr=%s', datetimeStr)\n    local datelist = Split(datestr, '%20')\n    --不支持直接空格？\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    log.debug('CZJTM_api_3003 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n    num = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    return num\nend	INLINE	2019-03-15 11:37:43.703+08	2019-06-06 09:56:44.628+08	2019-03-15	\N
ae53766c-e071-432d-a0be-046430485033	we	\N		we	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("start load  fs_1401 moudle = %s ",device.uplink.props.module)\n    --log.debug("fs_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal temp=iota.hexToByte(hex,4,'L')/10\n\t\tlocal tempState=iota.hexToByte(hex,6,'L')/10\n\t\tlocal temp1=iota.hexToByte(hex,8,'L')/10\n\t\tlocal temp2=iota.hexToByte(hex,10,'L')/10\n\t\tlocal temp3=iota.hexToByte(hex,12,'L')/10\n\t\tlocal temp4=iota.hexToByte(hex,14,'L')/10\n\t\tif temp~= 0 or tempState ~= 0 or temp1~= 0 then\n\t\t\tif temp ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\t\n        log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n                log.debug("fs_1401 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\ttemperatureState=tempState,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\ttemperature1=temp1\n                  \ttemperature2=temp2\n\t\t\t\t\ttemperature3=temp3\n\t\t\t\t\ttemperature4=temp4\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2019-03-19 09:32:30.845+08	2019-03-22 13:24:12.166+08	2019-03-19	\N
cba36de4-2915-4b24-8c57-4ff0f78e202c	gmkj_7500	\N	下发采集版	1.0	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	Lua	--20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议（V2.0）.doc\n\nstart=function()\n    log.debug('start %s, ctx=%s', 'gmkj__7500.lua', json.encode(device))\n\n    local endian = 'B'\n    local buff = ''\n    \n   -- 调试指令\n  -- ok, resp = ctx:ssend('010310000048413c', 15000)\n  --ok, resp = ctx:ssend('01030200000445b1', 15000)\n  \n  -- ok, resp = ctx:ssend('01060200000149B2', 5000)\n  --ok, resp = ctx:ssend('0106020100011872', 5000)\n   --\n  -- ok, resp = ctx:ssend('0106100300033d0b', 5000)\n  -- ok, resp = ctx:ssend('01031003000170ca', 5000)\n  \n    moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = iota.appendHexByte(buff, 0x14, endian)\n    buff = iota.appendHexByte(buff, 0x03, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexByte(buff, 0x02, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    buff = iota.appendHexCrc(buff, 'L', 0)\n\n    log.debug('gmkj__7500,m=%s, send=%s', moduleNo, buff)\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n        ctx:done(result)\n    else\n        --\n        local errout = {\n            data = {},\n            result = {}\n        }\n        errout.result = {code = 1001, msg = '采集超时'}\n        ctx:done(errout)\n    end\nend\n\n--0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n\nunmarshall =function(hex, moduleNoStr)\n    log.debug('gmkj__7500 收到数据=%s', hex)\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local data = hex\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        log.debug('gmkj__7500 数据有效')\n\n        local alldata = {}\n\n        --分析单类数据\n        for i = 1, 32 * 8, 1 do\n            local wavelength = iota.hexToFloat(hex, i * 4, 'B')\n            alldata[i] = tonumber(string.format('%0.4f', wavelength))\n        end\n        log.debug('gmkj__7500  通道1数据1=%s,通道8数据32=%s', alldata[1], alldata[256])\n        --遍历设备 匹配数据\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n        if subdevices ~= nil then\n            local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n            for index_channel, channelDevice in pairs(subdevices) do\n                local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n                for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n                    local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --通道\n                    --log.debug("gmkj__7500 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n                    local keyIndex = (channelNo_sub - 1) * 32 + nodeNo_sub\n                    local WaveLength = alldata[keyIndex]\n                    local temperature\n                    if nodeDevice.uplink.capabilities[1].formula.metaid == 'c4f1e8d6-82f3-4436-b65e-4d1a8474612e' then --温度公式\n                        local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n                        local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n                        local To = nodeDevice.uplink.capabilities[1].formula.props.To\n                        if WTo == nil or Kwt == nil or To == nil then\n                            temperature = nil\n                        else\n                            temperature = (WaveLength - WTo) * 1000 * Kwt + To\n                        end\n                        local data_temp = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                physicalvalue = tonumber(string.format('%0.2f', temperature))\n                            },\n                            device = nodeDevice.id,\n                            type = 1\n                        }\n\n                        table.insert(out.data, data_temp)\n                    elseif nodeDevice.uplink.capabilities[1].formula.metaid == '83c9a688-5f70-472f-abce-c1c127ce189b' then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n                        local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n                        local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n                        local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n                        local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n                        local Kwt  --温度的温度系数Kt\n                        local WTo  --T0温度波长值WTo\n \n                        if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n                            local linkInformation = Split(cn, ',')\n                            local link_tempDevice_channel = linkInformation[1]\n                            local link_tempDevice_node = linkInformation[2]\n                            local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n                            if w_device ~= nil then\n                                Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n                                WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n\t\t\t\t\t\t\t\tlocal keyIndex_linkTempDevice = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n                    \t\t\tlocal WaveLength_linkTempDevice = alldata[keyIndex_linkTempDevice]\n\t\t\t\t\t\t\t\tlocal physicalvalue=((WaveLength-Wo)-(WaveLength_linkTempDevice-WTo)*Kwt/Kt)*1000/K\n\n                                local data_strain = {\n                                    data = {\n                                        wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                        physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n                                    },\n                                    device = nodeDevice.id,\n                                    type = 1\n                                }\n\n                                table.insert(out.data, data_strain)\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    return resultData\nend\n\nIsValid = function(data, moduleStr)\n    local checkLen = string.len(data) / 2\n    if data == nil or checkLen ~= 1030 then\n        errormsg = string.format('无效的数据长度=%s≠1030', checkLen)\n        errcode = 1003\n        log.debug('gmkj__7500 数据校验失败 %s ', errormsg)\n        return false\n    end\n\n    local checkModule = iota.hexToByte(data, 0, 'B')\n    if tostring(moduleStr) ~= tostring(checkModule) then\n        errormsg = string.format('无效的模块号=%s≠%s', checkModule, moduleStr)\n        errcode = 1004\n        log.debug('gmkj__7500 数据校验失败 %s ', errormsg)\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr,nodeStr)\n\t--log.debug("gmkj__7500:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\t--log.debug("gmkj__7500:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\tlocal sensorchannel=subdevice.uplink.props.channel\n\t\t\t\t\t--log.debug("gmkj__7500:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("gmkj__7500:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensornode=sub_subdevice.uplink.props.node\n\t\t\t\t\t\t\n\t\t\t\t\t\tif tostring(sensorchannel) == channelStr and tostring(sensornode)==nodeStr then\n\t\t\t\t\t\t\tlog.debug("gmkj__7500:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gmkj__7500:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("gmkj__7500:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("gmkj__7500:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("gmkj__7500 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("gmkj__7500 has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("gmkj__7500 has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2018-10-10 09:29:58.574+08	2020-07-30 13:38:50.874+08	2018-10-10	\N
f98f678a-503a-40a9-aba3-37c6033901dd	FS-ZWY-XX	\N	直线位移传感器	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-ZWY-XX\n]]--liankang\nstart=function ()\n    log.debug("FS-ZWY-XX start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-ZWY-XX encoded")\n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-ZWY-XX decoded")\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\n\treturn buff\nend\n\n-- decode\n-- returns: 结果,  直线位移\n--   01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n-- 01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlog.debug("hexLenStr = %s ", hexLenStr)\n\t\tlocal lenInteger = iota.hexToUShort(hexLenStr, 0, 'B') \t-- 十进制整数位\n\t\tlog.debug("lenInteger = %d ", lenInteger)\n\t\tlocal lenDecimal = iota.hexToUShort(hexLenStr, 2, 'B') /  65536  -- 十进制小数位\n\t\tlog.debug("lenDecimal = %f ", lenDecimal)\n\t\tlocal len = lenInteger + lenDecimal\n\n\n\t\tout.data = {\n\t\t\tlength = getPreciseDecimal(len, 3),        -- 控制浮点数进度为3位小数，四舍五入\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n\n\n--- nNum 源数字\n--- n 小数位数\n--- 四舍五入\nfunction getPreciseDecimal(nNum, n)\n    if type(nNum) ~= "number" then\n        return nNum;\n    end\n    n = n or 0;\n    n = math.floor(n)\n    if n < 0 then\n        n = 0;\n\tend\n    local nDecimal = 10 ^ n\n    local nTemp = math.floor(nNum * nDecimal + 0.5);\n    local nRet = nTemp / nDecimal;\n    return nRet;\nend\n	INLINE	2019-12-06 14:25:09.187+08	2019-12-27 15:24:57.238+08	2019-12-06	\N
65b7fa36-3a28-48e9-9f56-20d2277d7a63	cn_flow_2309	\N	苍南气体流量计协议	1.0	b4b3a303-1848-4507-bec8-d33983641e32	b4b3a303-1848-4507-bec8-d33983641e32	f	b4b3a303-1848-4507-bec8-d33983641e32	Lua	\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "cn_flow_2309",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlocal result='{}'\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  module\n\tbuff=iota.appendHexByte(buff, 0x03, BE);-- 1:  cmd\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x0A, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x15, BE);-- 3:  \t\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n--17032A1701101442063FB72B808E6FE3593FA566198C77B80000000000000000004083F8704336729D000000009400\n--moduleId=23\n--"normalInstanceFlow": 0,\n--"normalTotalFlow": 0.04179458465283403,\n--"pressure": 182.447708,\n--"standardInstanceFlow": 0,\n--"standardTotalFlow": 0.09050754048793176,\n--"temp": 4.124077\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\tlocal out={\n\tdata ={},\n\tresult = {}\n\t}\n\tif string.len(data)/2 ~=47 or iota.hexToByte(data, 1,'B')~=0x03 or iota.hexToByte(data, 2,'B')~=0x2A then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telseif iota.hexToByte(data,0,'B') ~= tonumber(device.props.moduleId) then\n\t\tlocal message = 'Invalid moduleId,'\n\t\tout.result = {code=1004,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug(string.format('decode: %s', data));\n\n\t\tlocal stFlow = hexToDouble(data,9,'B')\n\t\tlocal siFlow = iota.hexToFloat(data,25,'B')\n\t\tlocal ntFlow = hexToDouble(data,17,'B')\n\t\tlocal niFlow = iota.hexToFloat(data,29,'B')\n\t\tlocal temperature = iota.hexToFloat(data,33,'B')\n\t\tlocal pre = iota.hexToFloat(data,37,'B')\n\t\tout.data = {\n\t\t\tstandardTotalFlow=stFlow,\n\t\t\tstandardInstanceFlow=siFlow,\n\t\t\ttemp=temperature,\n\t\t\tpressure=pre,\n\t\t\tnormalTotalFlow=ntFlow,\n\t\t\tnormalInstanceFlow=niFlow\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\nhexToDouble=function(hex,index,endian)\n    local stacklen = string.len(hex)\n    if stacklen < 3 then\n        return nil\n    end\n    local buff = string.sub(hex,2*index+1,2*(index+8))\n    local data = 0\n    if endian == 'B' then\n\n        local d = tonumber(string.sub(buff,1,3),16)\n        local f = tonumber('1'..string.sub(buff,4,16),16)\n\n        data = (-1)^0 * f *(2^(-52)* 2^(d-1023))  \n        return data\n    elseif endian == 'L' then\n        local bi =  ''\n        for i=1,8 do\n            bi = bi..string.sub(buff,-2*(i),-1*(2*i-1))\n        end\n\n        local dl = tonumber(string.sub(bi,1,3),16)\n        local fl = tonumber('1'..string.sub(bi,4,16),16)\n\n        data = (-1)^0 * fl *(2^(-52)* 2^(dl-1023))  \n        return data\n    else\n        return nil\n    end    \nend	INLINE	2017-09-09 16:20:37.213+08	2018-02-28 18:32:12.204+08	2017-09-09	\N
cba2303c-cdd4-477f-8bff-49ff734cfcd6	hbxh_PM_2513	\N		1.0	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	f	f7d6caec-f4d1-4641-92bf-5f918ea8d13c	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "hbxh_PM_2513", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t    local cmd_str="pm10chr$"\n\t\tlocal cmd_hex=StrToHex(cmd_str)\n  \t\tlog.debug("hbxh_PM_2513 SSend cmd=%s",cmd_hex)\n        ok,resp=ctx:ssend(cmd_hex,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            log.debug("hbxh_PM_2513 SSend error! resp=%s",resp)\n        end\n        ctx:done(result)\nend\n\n--434F4E433D31352020202C323120202024\n--15\n--21\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n \n\t\tlocal data_str=HextoStr(hex)\n\t\tlocal data_str_sub=string.sub(data_str,6,-2)\n        local allResponse=Split(data_str_sub,',')\n\t\tlocal pm_worked=tonumber(allResponse[1])\n\t\tlocal pm_standard=tonumber(allResponse[2])\n   \t\t --pmworked=pm_worked,\n        out.data = {\n\t\t\tpmstandard=pm_standard\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('hbxh_PM_2513 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 <= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if  string.sub(data,1,10) ~= "434f4e433d" then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n   \n    log.debug('hbxh_PM_2513 数据校验通过')\n    return true\n--crc\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\t\n   \n	INLINE	2018-04-03 11:34:04.465+08	2018-05-17 09:16:30.552+08	2018-04-03	\N
0571b781-2713-4381-a8d3-3e54717eb15a	shyx_TempHum_1134	\N		1.0	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	f	345ebe97-ed2b-44ca-b5a3-8d0597ca4db1	Lua	-- //01 协议文档/6月第4周/上海域信测控技术有限公司/PKTH300A智能温湿度变送器使用说明书.pdf\n--[[\n协议号: 1134;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n  log.debug("load script %s, moduleId=%s", "shyx_TempHum_1134.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,500)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3:  \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0)   --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  010304ffdd01645a66   moduleId=1\n--原始数据  温度-3.5，湿度35.6  \nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal temp = iota.hexToShort(data, 3,'B')/10.0;\n\t\tlocal hum = iota.hexToShort(data, 5,'B')/10.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thum=hum\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x03 then\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend\n	INLINE	2017-09-11 20:27:14.342+08	2018-02-28 18:32:12.204+08	2017-09-11	\N
1d9b604c-5ac9-4064-90cc-b23edf04c575	anXin_vibrating_1408	\N	安信振弦	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_vibrating_1408.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 1, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.props.moduleId, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,500)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        --   2   2   1      4     4       2\n        -- \n        \n        --print("parsing data", hex)\n        local freqH = iota.hexToShort(hex,10,'B');\n        local freqL = iota.hexToShort(hex,12,'B')/10000.0;\n        local freq=freqH+freqL;\n        local temp = iota.hexToShort(hex,14,'B')/100.0;\n        out.data = {\n            Freq=freq,\n            Temp=temp\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-02 17:20:46.428+08	2018-02-28 18:32:12.205+08	2017-09-02	\N
b78abeef-fbe0-4ecf-9a73-9f343bc5800e	th_Weight_9807	\N		1.0	e7d33a6c-15b9-405b-bf65-a6c054704291	e7d33a6c-15b9-405b-bf65-a6c054704291	f	e7d33a6c-15b9-405b-bf65-a6c054704291	Lua	--//http://www.smowo.com/newweb/Uploads/2016/06/21/5768dd9a5c048.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "th_Weight_9807", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--FF03040000030D24C9\n--moduleId=255\n--weight = 0.781\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local weight = iota.hexToInt(hex,3,'B')/1000.0;\n        out.data = {\n            weight = weight\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 or iota.hexToByte(data,2,'B') ~= 0x04 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-12-06 15:15:08.366+08	2018-02-28 18:32:12.206+08	2017-12-06	\N
f59cbddd-927c-47e7-97d6-964d8abdd184	rf_inclination_1534	\N	北京瑞芬双轴倾角仪协议	1.0	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	f	85ba98a3-b552-4bcf-a736-30b525492481	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n----/02 协议分析/2016-08-25/北京瑞芬_ACA826T全温补高精度双轴数字输出型倾角仪.pdf\n\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \nstart=function()\n    log.debug("start %s, ctx=", "rf_inclination_1534.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rf_inclination_1534 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rf_inclination_1534 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n    if tonumber(moduleNo) > 255 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255'}\n        ctx:done(json.encode(errout))\n    else\n        \n        buff=iota.appendHexByte(buff, 0x68, endian)              -- 1: 指令: 0x03 = 采集\n        buff=iota.appendHexByte(buff, 4, endian)\n        buff=iota.appendHexByte(buff, moduleNo, endian)             -- 1: 模块号\n        buff=iota.appendHexByte(buff, 4, endian)\n        buff=buff..string.format("%02X",checkPlusSum(buff,1,3))    --CheckPlusSum\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            --print("SSend error!")\n        end\n        -- ctx:asend("hello")\n        ctx:done(result)\n    end\nend\n\nunmarshall=function(hex,moduleStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        --68100C8400002008100025280000000025\n        --moduleId=1\n        --"angleX": 0.2008,\n\t    --"angleY": -0.2528\n        local xFirst = bit:_and(bit:_rshift(iota.hexToByte(hex,4,'B'),4),0x0F)\n        local xData = tonumber(string.sub(hex,13,16))/10000.0\n\n        local yFirst = bit:_and(bit:_rshift(iota.hexToByte(hex,8,'B'),4),0x0F)\n        local yData = tonumber(string.sub(hex,21,24))/10000.0\n\n        if xFirst == 0x01 then\n            xData = -xData\n        end\n        if yFirst == 0x01 then\n            yData = -yData\n        end\n        out.data = {\n            anglex=xData,\n            angley=yData,\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x68 or iota.hexToByte(data,3,'B') ~= 0x84 or iota.hexToByte(data,1,'B') ~= 0x10 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug("rf_inclination_1534  moduleCheck=%s[%s] ",moduleCheck,iota.hexToByte(data,2,'B'))\n        return false\n    end\n    return true\n--crc\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\ncheckPlusSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n    sum = bit:_and(sum ,0xff)\n    return sum\nend 	INLINE	2017-09-21 11:16:10.23+08	2018-05-16 15:26:37.1+08	2017-09-19	\N
277490e2-f0f8-4aa6-b04a-0b05a1466059	mh_salinity_2900	\N	杭州迈煌盐分浓度传感器协议	1.0	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	f	bfb251a3-a9ca-40cd-bc85-9671b0d102f1	Lua	\nstart=function()\n    log.debug("start %s, ctx=", "mh_salinity_2900.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)             \n        buff=iota.appendHexByte(buff, 0x2A, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x01, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--02030200193d8e    moduleId=2       \n--"salinity": 25\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local Salinity = iota.hexToShort(hex,3,'B')\n        out.data = {\n            salinity = Salinity\n        }\n\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..',"X":'..xa..',"Y":'..ya..'}'\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 7  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 20:22:03.089+08	2018-02-28 18:32:12.207+08	2017-09-12	\N
4f567512-fd50-45b1-8ffd-b635123d9749	GZMxieyi	\N	高支模协议	1.0	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	1b2d8739-627e-4b7d-9480-3eee6e9396fe	Lua	--	INLINE	2018-07-23 15:38:31.292+08	2018-07-23 15:38:31.292+08	2018-07-23	\N
8ef51f2f-b169-4e69-9a5c-d471d6c03e76	JL-Spectrum	\N		1.0	19d97e00-b313-443e-b2cd-40bce48c0f05	19d97e00-b313-443e-b2cd-40bce48c0f05	f	19d97e00-b313-443e-b2cd-40bce48c0f05	Lua	start=function()\n    log.debug("JL-Spectrum: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("JL-Spectrum: Data=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --52533B323031352D30312D30312030303A30303B31303135313233343B3130303B32303135313233343B34303B3130303B343B373B413B303B31363B613B313030302E3B423B303B32393B633B3138303B423B313B33303B683B31302E303B423B323B33313B613B352E303B433B303B393B633B302E30313B443B303B333B613B37322E303B443B313B353B613B32352E30303B323034320D0A\n\tlocal sData= toStrHex(hex)\n    log.debug("JL-Spectrum: sData=%s",sData)\n\tlocal spliteData = Split(sData,'\\t')\n\tlog.debug("JL-Spectrum: spliteData=%s",spliteData[8])\n    out.data.soilwater = tonumber(spliteData[3])\n  \tlocal st = tonumber(spliteData[4])\n  \tif (st ~= nil) then\n    out.data.soiltemp = (st-32)/1.8\n    end\n    out.data.soilcond = tonumber(spliteData[5])\n    out.data.soilwater2 = tonumber(spliteData[6])\n  \tlocal st2 = tonumber(spliteData[7])\n  \tif (st2 ~= nil) then\n  \tout.data.soiltemp2 = (st2-32)/1.8\n  \tend\n\tout.data.radiation = tonumber(spliteData[8])\n  \tout.data.humidity = tonumber(spliteData[9])\n  \tlocal t = tonumber(spliteData[10])\n  \tif (t ~= nil) then\n    \tout.data.temperature = (t-32)/1.8\n    end\n    out.data.rainfall = tonumber(spliteData[11])\n    out.data.winddirection = tonumber(spliteData[12])\n    out.data.windspeed = tonumber(spliteData[13])\n    out.data.wind = tonumber(spliteData[14])\n  \n    local resultData =json.encode(out)\n    log.debug("JL-Spectrum: weather=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n	INLINE	2018-10-11 09:49:57.951+08	2018-11-07 09:45:15.044+08	2018-10-11	\N
92fe46e5-a379-4416-83ad-63157315a8b1	fs-microPower-2045	\N	扬尘	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('fs_microPower_w : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        log.debug('fs_microPower_w : devices data =%s', data)\n        ParseData(data)\n    else\n        log.error('fs_microPower_w : recvd content is nil')\n    end\nend\n\nfunction ParseData(data)\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    if string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n        log.debug('fs_microPower_w : 振动数据 data =%s', data)\n        local package = iota.hexToShort(data, 8, 'L')\n        local packagecount = iota.hexToShort(data, 10, 'L')\n        local datpackage = string.sub(data, 41, -9)\n        local moduleid = iota.hexToShort(data, 16, 'L')\n\n        local req1 = ''\n        local req2 = ''\n        local req = ''\n        req1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议   4-7  协议版本\n        req1 = iota.appendHexByte(req1, 0x02, 'L')\n        req1 = iota.appendHexWord(req1, 0x0007, 'L')\n        req1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n        req2 = iota.appendHexWord(req2, package, 'L')\n        req2 = iota.appendHexWord(req2, packagecount, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        req2 = iota.appendHexWord(req2, moduleid, 'L')\n        req2 = iota.appendHexWord(req2, 0x0000, 'L')\n        local checkdat = req1 .. req2\n        local checksum = HeadCheckSum(checkdat)\n        req = req1\n        req = iota.appendHexWord(req, checksum, 'L')\n        req = req .. req2\n        req = iota.appendHexWord(req, package, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0, 'L')\n        req = req .. '00000000'\n        req = iota.appendHexCrc(req, 'L', 0) --校验\n        local crc16 = string.sub(req, -4, -1)\n        req = string.sub(req, 1, -13)\n        req = req .. crc16\n        req = iota.appendHexByte(req, 0, 'L')\n        req = iota.appendHexByte(req, 0xfa, 'L')\n        log.debug('fs_microPower_w: datfileback: %s', req)\n        ctx:asend(req, 20000)\n\n        if package == packagecount then\n            local r1, ok = redis.get(device.id .. '_mpzd')\n            log.debug('fs_microPower_w: 解析dat:r1= %s', r1)\n            ParseFileDat(r1)\n        else\n            if package == 1 then\n                local firstpackage = string.sub(datpackage, -80, -1)\n                redis.set(device.id .. '_mpzd', firstpackage)\n                log.debug('fs_microPower_w: 接收dat:datpackage= %s', firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1, ok = redis.get(device.id .. '_mpzd')\n                log.debug('fs_microPower_w: 接收dat:r1= %s package=%s', r1, package)\n                local data = r1 .. datpackage\n                redis.set(device.id .. '_mpzd', data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n        end\n    else -- 非振动数据\n        if string.sub(data, 13, 16) == '8a00' then\n            local rtumodule = iota.hexToShort(data, 3, 'B')\n            local power = iota.hexToByte(data, 13, 'B')\n            log.debug('fs_microPower_w: 剩余电量: %s', power)\n            local strdevice = toHexStr(json.encode(device))\n            strdevice = iota.appendHexCrc(strdevice, 'B', 0)\n            local crc = string.sub(strdevice, -4, -1)\n            log.debug('fs_microPower_w : devices crc =%s', crc)\n            local r1, ok = redis.get(device.id .. '_mpset')\n            if ok and r1 ~= nil then\n                if crc == r1 then\n                    log.debug('fs_microPower_w : 配置无修改')\n                    local req = ''\n                    req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                    req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                    req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                    req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                    req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                    req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                    req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                    req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                    req = iota.appendHexByte(req, os.date('%m'), 'B')\n                    req = iota.appendHexByte(req, os.date('%d'), 'B')\n                    req = iota.appendHexByte(req, os.date('%H'), 'B')\n                    req = iota.appendHexByte(req, os.date('%M'), 'B')\n                    req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                    req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req = iota.appendHexByte(req, 0, 'B') -- 是否下发\n                    --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req = iota.appendHexWord(req, 0, 'B') --当前版本\n                    req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                    req = iota.appendHexCrc(req, 'B', 0) --校验\n                    req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                    log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug('fs_microPower_w : 配置有修改')\n                    local req = ''\n                    req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                    req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                    req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                    req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                    req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                    req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                    req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                    req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                    req = iota.appendHexByte(req, os.date('%m'), 'B')\n                    req = iota.appendHexByte(req, os.date('%d'), 'B')\n                    req = iota.appendHexByte(req, os.date('%H'), 'B')\n                    req = iota.appendHexByte(req, os.date('%M'), 'B')\n                    req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                    req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n                    --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req = iota.appendHexWord(req, 0, 'B') --当前版本\n                    req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                    req = iota.appendHexCrc(req, 'B', 0) --校验\n                    req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                    log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id .. '_mpset', tostring(crc))\n                    ctx:sleep(2)\n                    Deploy() --配置\n                end\n            else\n                log.debug('fs_microPower_w : 配置初次配置')\n                local req = ''\n                req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n                req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n                req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n                req = iota.appendHexByte(req, 0x01, 'B') --命令源\n                req = iota.appendHexWord(req, 0x0A01, 'B') --指令\n                req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n                req = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n                req = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n                req = iota.appendHexByte(req, os.date('%m'), 'B')\n                req = iota.appendHexByte(req, os.date('%d'), 'B')\n                req = iota.appendHexByte(req, os.date('%H'), 'B')\n                req = iota.appendHexByte(req, os.date('%M'), 'B')\n                req = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n                req = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                req = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                req = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                req = iota.appendHexByte(req, 1, 'B') -- 是否下发\n                --req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                req = iota.appendHexWord(req, 0, 'B') --当前版本\n                req = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n                req = iota.appendHexCrc(req, 'B', 0) --校验\n                req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n                log.debug('fs_microPower_w: 苏醒帧返回: %s', req)\n                ctx:asend(req, 20000)\n                redis.set(device.id .. '_mpset', tostring(crc))\n                ctx:sleep(2)\n                Deploy() --配置\n            end\n        end\n\n        if string.sub(data, 13, 16) == '8a02' then\n            log.debug('fs_microPower_w : 设备休眠')\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n\n        local rtumodule = iota.hexToShort(data, 3, 'B')\n        if string.sub(data, 13, 16) == '8601' then\n            local time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n            local sensorCount = iota.hexToByte(data, 26, 'B')\n\n            local isover = iota.hexToByte(data, 25, 'B') --尾包\n            local datalength = 0\n            local firststart = 27\n            for i = 1, sensorCount, 1 do\n                firststart = firststart + datalength\n                local sensorType = iota.hexToByte(data, firststart, 'B')\n                local module = iota.hexToShort(data, firststart + 3, 'B')\n                local channel = iota.hexToByte(data, firststart + 2, 'B')\n                datalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n                if sensorType == 0 then --振弦\n                    local childDevice = getZxDeviceInfo(module, channel)\n                    local rst = {\n                        data = {\n                            frequency = iota.hexToFloat(data, firststart + 12, 'B'),\n                            am = iota.hexToFloat(data, firststart + 16, 'B'),\n                            temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                        },\n                        device = childDevice.id,\n                        type = 1,\n                        time = time\n                    }\n                    table.insert(out.data, rst)\n                end\n                if sensorType == 1 then --485\n                    local childDevice = getDeviceInfo(module, channel)\n                    local protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n                    log.debug('fs_microPower_w: protocalCode: %s', protocalCode)\n                    if protocalCode == 1503 or protocalCode == 1502 then --测斜\n                        local rst = {\n                            data = {\n                                anglex = iota.hexToFloat(data, firststart + 12, 'B'),\n                                angley = iota.hexToFloat(data, firststart + 16, 'B'),\n                                temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 9102 then --裂缝\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                length = iota.hexToFloat(data, firststart + 12, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 1102 then --温湿度\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                temperature = iota.hexToFloat(data, firststart + 12, 'B'),\n                                humidity = iota.hexToFloat(data, firststart + 16, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n\n                    if protocalCode == 9002 then --压差\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                physicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n                                frequency = iota.hexToFloat(data, firststart + 16, 'B'),\n                                temperature = iota.hexToFloat(data, firststart + 20, 'B')\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n                        table.insert(out.data, rst)\n                    end\n                    if protocalCode == 2045 then --扬尘\n                        local datacnt = iota.hexToByte(data, firststart + 11, 'B')\n                        log.debug('fs_microPower_w: 2405')\n                        local childDevice = getDeviceInfo(module, channel)\n                        local rst = {\n                            data = {\n                                pm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n                                pm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n                                noise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n                                temp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n                                humidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n                                windspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n                                winddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = time\n                        }\n\n                        rst.result={}\n                        if rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n                                rst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n                            else\n                               -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n                                rst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n                            end\n                            rst.data.pm25 = nil\n                        end\n                        if rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n                                rst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n                            else\n                               -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n                                rst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n                            end\n                            rst.data.pm10 = nil\n                        end\n                        if rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n                           -- out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                                rst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n                            else\n                               -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                                rst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n                            end\n                            rst.data.windspeed = nil\n                        end\n                        if rst.data.winddir < 0 or rst.data.winddir > 360 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                                rst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n                            else\n                                --out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                                rst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n                            end\n                            rst.data.winddir = nil\n                        end\n                        if rst.data.temp < -40 or rst.data.temp > 60 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                                rst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                            else\n                               -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                                rst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n                            end\n                            rst.data.temp = nil\n                        end\n                        if rst.data.humidity <= 0 or rst.data.humidity > 100 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                               -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                                rst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                            else\n                                --out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n                                rst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n                            end\n                            rst.data.humidity = nil\n                        end\n                        if rst.data.noise < 0 or rst.data.noise > 200 then\n                            --out.result.code = 5001\n                            rst.result.code = 5001\n                            if rst.result.msg ~= nil then\n                                --out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                                rst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                            else\n                                --out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                                rst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n                            end\n                            rst.data.noise = nil\n                        end\n                        log.debug('fs_microPower_w: insert')\n                        table.insert(out.data, rst)\n                    end\n                end\n            end\n            log.debug('fs_microPower_w: dataresult: %s', json.encode(out))\n            local req = ''\n            req = iota.appendHexByte(req, 0xfe, 'B') --帧头\n            req = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n            req = iota.appendHexWord(req, rtumodule, 'B') --模块号\n            req = iota.appendHexByte(req, 0x01, 'B') --命令源\n            req = iota.appendHexWord(req, 0x0601, 'B') --指令\n            req = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n            req = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n            req = iota.appendHexCrc(req, 'B', 0) --校验\n            req = iota.appendHexByte(req, 0xef, 'B') --帧尾\n            log.debug('fs_microPower_w: databack: %s', req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out))\n        end\n    end\nend\n\nfunction Deploy()\n    local total = totalSensors()\n    log.debug('fs_microPower_w : totalSensors =%s', total)\n    local over = 0\n    local onepag = 0\n    local totallength = 3\n    local buff = ''\n\n    for i, dnlink in pairs(device.dnlinks) do\n        for j, subdevice in pairs(dnlink.devices) do\n            over = over + 1\n            onepag = onepag + 1\n            if subdevice.props.sensortype == 'zx' then\n                totallength = totallength + 18\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n                local settingvib = tonumber(subdevice.uplink.props.colgain) + tonumber(subdevice.uplink.props.incentive) * math.pow(2, 1) + tonumber(subdevice.uplink.props.checkoption) * math.pow(2, 2) + tonumber(subdevice.uplink.props.vibratspectrum) * math.pow(2, 3) + tonumber(subdevice.uplink.props.vibratsamplfreq) * math.pow(2, 4) + tonumber(subdevice.uplink.props.incentivemethod) * math.pow(2, 6)\n                log.debug('fs_microPower_w : settingvib =%s', settingvib)\n                buff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n                buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x05, 'B') --长度\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n                buff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n                buff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n            end\n            if subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n                totallength = totallength + 18\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n                local setting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n                log.debug('fs_microPower_w : setting =%s', setting)\n                buff = iota.appendHexByte(buff, setting, 'B') --选项1\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x0c, 'B') --长度\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --阈值\n                buff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --阈值\n                buff = iota.appendHexFloat(buff, 0x00, 'B') --0\n            end\n            if subdevice.props.sensortype == 'zd' then\n                totallength = totallength + 31\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n                buff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n                buff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n                buff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n                buff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n                buff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n                buff = iota.appendHexByte(buff, 0x12, 'B') --长度\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff = iota.appendHexWord(buff, 0x42c8, 'B')\n                buff = iota.appendHexWord(buff, 0x0000, 'B')\n                buff = iota.appendHexWord(buff, 0x4248, 'B')\n                buff = iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n                buff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n                buff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n                buff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n            end\n            if over == 8 or onepag == total then\n                local buffhead = ''\n                buffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n                buffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号：0x0c，多通道数据采集系统\n                buffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n                buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n                buffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n                buffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n                buffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n                if onepag == total then\n                    buffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n                else\n                    buffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n                end\n                buffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n                buffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n                buff = buffhead .. buff\n                buff = iota.appendHexCrc(buff, endian, 0) --校验\n                buff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug('fs_microPower_w : deploy back =%s', ack)\n                buff = ''\n                if over == 8 then\n                    over = 0\n                end\n                totallength = 3\n                if onepag == total then\n                    log.debug('fs_microPower_w 配置下发完成')\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end\n        end\n    end\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i, dnlink in pairs(device.dnlinks) do\n            for j, subdevice in pairs(dnlink.devices) do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('fs_microPower_w has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('fs_microPower_w has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i, dnlink in pairs(device.dnlinks) do\n            for j, subdevice in pairs(dnlink.devices) do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('fs_microPower_w has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('fs_microPower_w has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug('fs_microPower_w : dat content  =%s', dathex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex, offset, 'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex, offset, 'B') + 2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex, offset, 'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex, offset, 'B')\n        offset = offset + 4\n        log.debug('fs_microPower_w deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n        local floatcount = (string.len(dathex) / 2 - 40) / 4\n        log.debug('fs_microPower_w begin parse')\n        local vols = {}\n        for i = 1, floatcount do\n            offset = 40 + (i - 1) * 4\n            vols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n        end\n        log.debug('fs_microPower_w finish parse')\n\n        local rst = {\n            data = {\n                _data_type = 'vib',\n                physicalvalue = vols,\n                sampleFreq = samplefreq,\n                filterFreq = filterfreq,\n                gainAmplifier = gainamplifier,\n                triggerType = triggertype,\n                version = version\n            },\n            device = subdevice.id,\n            type = 1,\n            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n        }\n        table.insert(out.data, rst)\n        log.debug('fs_microPower_w cloudvibrate=%s', json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug('fs_microPower_w not found device module=%s channel=%s', deviceId, channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt = 0\n    for i, dnlink in pairs(device.dnlinks) do\n        sensorcnt = #(dnlink.devices) + sensorcnt\n    end\n    return sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\nfunction HeadCheckSum(data)\n    local sum = 0\n    local len = string.len(data)\n    log.debug('fs_microPower_w: len: %s', len)\n    for i = 1, len, 4 do\n        local te = tonumber(string.sub(data, i, i + 3), 16)\n        log.debug('fs_microPower_w: te: %s', te)\n        sum = sum + tonumber(te)\n    end\n    log.debug('fs_microPower_w: sum: %s', sum)\n    return 0xffff - sum\nend	INLINE	2018-10-24 10:35:48.217+08	2019-01-19 17:35:57.408+08	2018-10-24	\N
118e4efb-d115-4765-b805-129460d51153	fs_peopleCounAJS_985	\N	485报文类似websocket	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	 start = function()\n\nend\n\nlocal cacheCount={inCount=0,outCount=0,offlineData={inCount=0,outCount=0}}\n\nonData = function(hex)\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    local result = protocol_decode(hex, moduleNo)\n\n    local isheart=mayHeart(hex,moduleNo)\n    \n   if isheart==false then\n    log.debug('fs_peopleCounter_985  result=%s', result)\n    ctx:notify(result)\n    end\nend\n\nfunction mayHeart(hex,moduleNo)\n    if string.len(hex)/2==12 and string.sub(hex,1,2)=='cc' then \n       local yearNow=tonumber(os.date('%Y'))\n\t\tlocal monthNow=tonumber(os.date('%m'))\n\t\tlocal dayNow=tonumber(os.date('%d'))\n\t\tlocal hourNow = tonumber(os.date('%H'))\n\t\tlocal minNow = tonumber(os.date('%M'))\n\t\tlocal secNow = tonumber(os.date('%S'))\n        log.debug("fs_peopleCounter_985\t应答时间 %s,%s,%s,%s,%s,%s",yearNow,monthNow,dayNow,hourNow,minNow,secNow)\n\t\tlocal resp_buff=string.sub(hex,1,20)..'1800'\n\t\tresp_buff = iota.appendHexWord(resp_buff, yearNow, 'L')\n        resp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, monthNow, 'L')\n    \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, dayNow, 'L')\n    \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, hourNow, 'L')\n   \t\tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, minNow, 'L')\n    \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tresp_buff = iota.appendHexWord(resp_buff, secNow, 'L')\n    \tresp_buff = iota.appendHexWord(resp_buff, 0, 'L')\n\t\tctx:asend(resp_buff)\n        log.debug('fs_peopleCounter_985  心跳应答=%s[%s]', resp_buff,string.len(resp_buff)/2)\n\t\t\n\t\t--更新缓存的时间\n\t\tcacheCount.time=os.time()\n\t\t--汇总进出数据+离线数据\n\t\tcacheCount.inCount=cacheCount.inCount + cacheCount.offlineData.inCount\n\t\tcacheCount.outCount=cacheCount.outCount + cacheCount.offlineData.outCount\n\t\tcacheCount.offlineData.inCount=0\n\t\tcacheCount.offlineData.outCount=0\n\t\t\n\t\tif redis.set(device.id.."_count", json.encode(cacheCount)) then\n\t\t\tlog.debug("fs_peopleCounter_985 redis更新 set cacheCount ok  key=%s,value=%s",device.id.."_count",json.encode(cacheCount))\n\t\tend\t\n\t\t\n\t\t\n    \treturn true \n    end\n\t\n    return false\nend\n\nfunction protocol_encode(moduleNoStr)\n\nend\n\n--ccc0c5da1997980000000000  心跳\n--正确回复   ddc0c5da1997980000002c000100000000000000010000000000000001000000b20700000100000009000000090000000a00000000000000\n--原始数据   --"inCount": 130,\n-- "outCount": 16\nfunction protocol_decode(hex, moduleNoCheck)\n    local data = hex\n    --存储结果\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    log.debug(data)\n    --判断数据有效性\n    local ErrorCode = IsValid(hex, moduleNoCheck)\n    \n    if ErrorCode then\n    \tctx:asend(hex)--数据需要回传  设备确认平台已经收到\n       -- local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n      --  local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n       --log.debug('fs_peopleCounter_985  修改')\n        local inCount = iota.hexToUInt(hex,16,'L')   --getCount(inBytesStr) --  :进人数\n        local outCount = iota.hexToUInt(hex,20,'L') --  :出人数\n\t\t\n\t\t--判断缓存中是否有更新时间，若无，说明被重启过，从redis更新\n\t\tif cacheCount.time then\n\t\t\n\t\telse\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_count")  --获取上次记录时间\n\t\t\tlog.debug("fs_peopleCounter_985 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tcacheCount=json.decode(r1)\n\t\t\t\tlog.debug("fs_peopleCounter_985 r1=%s,r1ok=%s,beginTime=%s",r1,r1ok,beginTime)\t\t\t\t\n\t\t\telse\t\n\t\t\t\tlog.debug("fs_peopleCounter_985 redis读取失败 r1=%s,r1ok=%s",r1,r1ok)\n\t\t\t\t--读取失败 将漏掉的记录一下\n\t\t\t\tcacheCount.offlineData.inCount=cacheCount.offlineData.inCount+inCount\n\t\t\t\tcacheCount.offlineData.outCount=cacheCount.offlineData.outCount+outCount\n\t\t\tend\n\t\tend\n\t\t\n    \tcacheCount.inCount=cacheCount.inCount+inCount\n    \tcacheCount.outCount=cacheCount.outCount+outCount\n        local year = iota.hexToUInt(hex,32,'L')  \n\t\tlocal month=iota.hexToUInt(hex,36,'L')  \n    \tlocal day=iota.hexToUInt(hex,40,'L')  \n   \t    local hour=iota.hexToUInt(hex,44,'L') \n        local min=iota.hexToUInt(hex,48,'L') \n        local sec=iota.hexToUInt(hex,52,'L') \n\t    local time=string.format('%04d-%02d-%02d %02d:%02d:%02d',year,month,day,hour,min,sec)\n        out.data = {\n      \t\t--time=time,\n            inCount = cacheCount.inCount,\n            outCount =  cacheCount.outCount,\n            stayCount = cacheCount.inCount - cacheCount.outCount\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    log.debug('fs_peopleCounter_985   开始校验 data=%s', data)\n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen ~= 56 then\n        errormsg = string.format('数据长度无效=%s≠22', dataLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data, 0, 'B') ~= 0xdd then\n       errormsg = 'CMD is not right'\n       errcode = 1003\n       return false\n    end\n    --local dataModule = string.sub(data,2*2+1,2*2+12)\n    --if tonumber(deviceModule) ~= dataModule then\n    --    errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n     --   errcode = 1004\n     --   return false\n    --end\n    return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n    local lcr = 0\n    for i = start, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    local value =256- bit.band(lcr, 0x7f)\n    return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n    local bytes_len = string.len(bytes_8) / 2\n    local count = 0\n    for i = 0, bytes_len - 1, 1 do\n        local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n        count = count + num * math.pow(10, i)\n    end\n    return count\nend	INLINE	2021-02-23 10:39:26.53+08	2021-03-03 10:52:29.122+08	2021-02-23	\N
00fa01a7-10b5-4908-ac97-d08ded49b59d	zxnt_GDGS_7800	\N		1.0	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	f	f6ce26a9-3ae2-4845-9e60-cbeae08428e4	Lua	start = function()\n    log.debug('zxnt_GDGS_7800 device=%s', json.encode(device))\n    ok = ctx:asend('01020304')\nend\n\nonData = function(hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local moduleNo = device.uplink.props.module\n    log.debug('zxnt_GDGS_7800 m=%s, recv =%s', moduleNo, hex)\n    --local channelCounts = 8 --device.props.channelCount\n    --local allDataLen = 6 + channelCounts * (4 * 30 + 2)\n    --local singleChannelDataLen = 4 * 30 + 2\n    local ErrorCode = IsValid(hex, moduleNo)\n    local dataHex = string.sub(hex, 9, -1) --数据域\n    local subData = dataHex\n    local subData_len = string.len(subData) / 2\n\n    local allSensorDatas = {}\n    if ErrorCode then\n        while (subData_len >= 5) do\n            local channelNo = tonumber(string.sub(subData, 1, 2))\n            local nodeSensorCounts = tonumber(string.sub(subData, 3, 4)) --光栅个数\n            for i = 1, nodeSensorCounts, 1 do\n                local dataindex = (2 + 3 * (i - 1)) * 2 + 1\n                local X1 = string.sub(subData, dataindex, dataindex + 1)\n                local X2 = string.sub(subData, dataindex + 2, dataindex + 3)\n                local X3 = string.sub(subData, dataindex + 4, dataindex + 5)\n                local frequency = (19625000 - (tonumber(X1, 16) * 65536 + tonumber(X2, 16) * 256 + tonumber(X3, 16))) / 100\n\n                local keyStr = string.format('%s,%s', channelNo, i-1)  --通道节点号 都是从0开始\n                allSensorDatas[keyStr] = 299792458/frequency\n            end\n\n            --subData 删去已解析部分\n            subData = string.sub(subData, 4 + 6 * nodeSensorCounts + 1, -1)\n            subData_len = string.len(subData) / 2\n        end\n\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n\n        if subdevices ~= nil then\n            local moduleNo_sub = tonumber(device.uplink.props.module) --模块\n            for index_channel, channelDevice in pairs(subdevices) do\n                local channelNo_sub = tonumber(channelDevice.uplink.props.channel) --通道\n                for index_node, nodeDevice in pairs(channelDevice.dnlinks[1].devices) do\n                    local nodeNo_sub = tonumber(nodeDevice.uplink.props.node) --节点\n                    --log.debug("zxnt_GDGS_7800 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n                    local keyIndex = string.format('%s,%s', channelNo_sub, nodeNo_sub)\n                    local WaveLength = allSensorDatas[keyIndex]\n                    local temperature\n                    if nodeDevice.uplink.capabilities[1].formula.metaid == '02079e63-b1de-4da9-8424-ebded758b627' and WaveLength~=nil then --温度公式\n                        local WTo = nodeDevice.uplink.capabilities[1].formula.props.WTo\n                        local Kwt = nodeDevice.uplink.capabilities[1].formula.props.Kwt\n                        local To = nodeDevice.uplink.capabilities[1].formula.props.To\n                        if WTo == nil or Kwt == nil or To == nil then\n                            temperature = nil\n                        else\n                            temperature = (WaveLength - WTo) * 1000 * Kwt + To\n                        end\n                        local data_temp = {\n                            data = {\n                                wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                physicalvalue = tonumber(string.format('%0.2f', temperature))\n                            },\n                            device = nodeDevice.id,\n                            type = 1\n                        }\n\n                        table.insert(out.data, data_temp)\n                    elseif nodeDevice.uplink.capabilities[1].formula.metaid == 'a9bc6a3e-3aae-4ee7-a354-c174ea0577f5' and WaveLength~=nil then --应变公式 ε= [(W - Wo)-(WT-WTo)*Kt/Kwt]*1000.0/K\n                        local cn = nodeDevice.uplink.capabilities[1].formula.props.cn --关联的温度通道与节点如5,12\n                        local Wo = nodeDevice.uplink.capabilities[1].formula.props.Wo --应变波长初值Wo\n                        local Kt = nodeDevice.uplink.capabilities[1].formula.props.Kt --应变的温度系数Kt\n                        local K = nodeDevice.uplink.capabilities[1].formula.props.K --应变系数K\n\n                        local Kwt  --温度的温度系数Kt\n                        local WTo  --T0温度波长值WTo\n\n                        if cn ~= nil and Wo ~= nil and Kt ~= nil and K ~= nil then\n                            local linkInformation = Split(cn, ',')\n                            local link_tempDevice_channel = linkInformation[1]\n                            local link_tempDevice_node = linkInformation[2]\n                            local w_device = getDeviceInfo(link_tempDevice_channel, link_tempDevice_node)\n\n                            if w_device ~= nil then\n                                Kwt = w_device.uplink.capabilities[1].formula.props.Kwt --温度的温度系数Kt\n                                WTo = w_device.uplink.capabilities[1].formula.props.WTo --T0温度波长值WTo\n\n                                --local keyIndex_linkTemp = (link_tempDevice_channel - 1) * 32 + link_tempDevice_node\n                                local WaveLength_linkTemp = allSensorDatas[cn]\n                                local physicalvalue = ((WaveLength - Wo) - (WaveLength_linkTemp - WTo) * Kwt / Kt) / K\n\n                                local data_strain = {\n                                    data = {\n                                        wavelength = tonumber(string.format('%0.3f', WaveLength)),\n                                        physicalvalue = tonumber(string.format('%0.3f', physicalvalue))\n                                    },\n                                    device = nodeDevice.id,\n                                    type = 1\n                                }\n\n                                table.insert(out.data, data_strain)\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('zxnt_GDGS_7800 m=%s,data=%s', moduleNo, json.encode(out))\n    local result = json.encode(out)\n    ctx:notify(result)\nend\n\nIsValid = function(data, deviceModule, dataLenCheck)\n    local checklength = string.len(data) / 2\n    if data == nil or checklength < 6 then\n        errormsg = string.format('数据无效')\n        errcode = 1002\n        return false\n    end\n\n    local cmdlength = tonumber(string.sub(data, 5, 8), 16)\n    if checklength ~= cmdlength then\n        errormsg = string.format('数据长度无效=%s[%s]', checklength, cmdlength)\n        errcode = 1002\n        return false\n    end\n\n    local dataCMD = string.sub(data, 3, 4)\n    if dataCMD ~= '02' then\n        errormsg = string.format('无效的功能码≠0x02[0x%s]', dataCMD)\n        errcode = 1003\n        return false\n    end\n    local dataModule = string.sub(data, 1, 2)\n    if tonumber(dataModule, 16) ~= tonumber(deviceModule) then\n        errormsg = string.format('无效的模块号=%s[%s]', dataModule, dataModule)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取传感器信息\nfunction getDeviceInfo(channelStr, nodeStr)\n    --log.debug("zxnt_GDGS_7800:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local submodule = subdevice.uplink.props.module\n            --判断是否是3层采集仪结构\n            if json.encode(subdevice.dnlinks) ~= '{}' then\n                --log.debug("zxnt_GDGS_7800:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n                for k, sublink in pairs(subdevice.dnlinks) do\n                    local sensorchannel = subdevice.uplink.props.channel\n                    --log.debug("zxnt_GDGS_7800:sublink=%s",json.encode(sublink))\n                    for u, sub_subdevice in pairs(sublink.devices) do\n                        --log.debug("zxnt_GDGS_7800:sensor=%s",json.encode(subdevice))\n                        local sensornode = sub_subdevice.uplink.props.node\n\n                        if tostring(sensorchannel) == channelStr and tostring(sensornode) == nodeStr then\n                            log.debug('zxnt_GDGS_7800:m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n                            return sub_subdevice\n                        else\n                            --log.debug("zxnt_GDGS_7800:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n                        end\n                    end\n                end\n            else\n                local subchannel = subdevice.uplink.props.channel\n                --log.debug('zxnt_GDGS_7800:两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n                if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n                    log.debug('zxnt_GDGS_7800:m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n                    return subdevice\n                else\n                    --log.debug('zxnt_GDGS_7800 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n                end\n            end\n        end\n        log.debug('zxnt_GDGS_7800 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('zxnt_GDGS_7800 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-03-22 10:08:31.722+08	2019-04-09 10:19:29.028+08	2019-03-22	\N
f82eec29-fd92-496d-a98e-02dc2e22cf9d	fs_waterLevel_1561	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start =function()\n    log.debug('start %s, moduleId=%s', 'fs_waterLevel_1561.lua', device.props.moduleId or 'nil')\n\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian)  --返回雷达当前水位值，单位为mm\n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    -- 水位\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n       local errorout={\n                    data ={},\n                    result = {}\n                }\n    \t errorout.result = {code=1001,msg="采集超时"}\n         result=json.encode(errorout)\n    end\n    ctx:done(result)\nend\n--01 03 00 03 00 02 0000\n--010304000003040000   772mm \n\nunmarshall =function(hex,moduleNoStr)\n    log.debug("fs_waterLevel_1561 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUShort(hex,3,'B')/100.0\n        log.debug("fs_waterLevel_1561  m=%s,length=%s ",moduleNoStr,length)\n        out.data = {           \n            length=length\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_waterLevel_1561 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleNoStrCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s[%s]',moduleNoStrCheck,dataModule)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\n\nisValidParameter = function(...)\n    local paras = {...}\n    for k, v in pairs(paras) do\n        -- log.debug('k=%s,v=%s',k,v)\n        local isNum = IsNumberic(v)\n        --log.debug('isNum=%s',isNum)\n        if isNum == false then\n            return false\n        end\n    end\n    return true\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-11-20 09:27:30.249+08	2019-11-20 17:19:45.759+08	2019-11-20	\N
f9058abc-d879-4c5e-9f2d-40e8962ba5fe	RT_ZS_BZ	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n    log.debug("start %s, ctx=", "RT_ZS_BZ.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("RT_ZS_BZ 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("RT_ZS_BZ 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tlocal moduleNo=device.props.moduleId or device.uplink.props.module  \n\t--log.debug("RT_ZS_BZ moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=buff..string.format("%02X",tonumber(moduleNo))          -- 1: 模块号\n\tbuff=buff.."0300000001"\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("RT_ZS_BZ:发送数据=%s",buff)\n   local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tlog.debug("RT_ZS_BZ 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n    end\n    \nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)>=14) then\n\n        local noise = iota.hexToShort(hex,3,'B');\n\t\tnoise = noise/10.0\n        out.data = {\n            noise=noise\n        };\n    else\n        local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n \n\n	INLINE	2020-01-17 15:39:03.213+08	2020-01-17 16:07:57.256+08	2020-01-17	\N
20051464-5ac9-47e7-940f-04b066d61a18	Asmik_Phn_4600	\N		1.0	49c6faf4-6972-4d51-9e7c-c6df38c9686c	49c6faf4-6972-4d51-9e7c-c6df38c9686c	f	49c6faf4-6972-4d51-9e7c-c6df38c9686c	Lua	--//02 协议分析/2017-04/优先接入/彩色无纸记录仪\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Asmik_Phn_4600", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x04, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff,(device.props.channelId-1)*2, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--010404397942775647\n--moduleId=1\n--channelId=1\n--"liquidLevel": 61.806126\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local sub_hex=string.sub(hex,7,7+7)\n        sub_hex_BE=string.sub(sub_hex,-4,-1)..string.sub(sub_hex,1,4)\n        local pressure = iota.hexToFloat(sub_hex_BE,0,'B');\n        \n        out.data = {\n            pressure = pressure         \n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-12-06 11:46:32.85+08	2018-02-28 18:32:12.209+08	2017-12-06	\N
38b8ea7c-27c3-4c8e-b667-80bd1f78d911	shzr_RN620	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shzr_RN620", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shzr_RN620 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n        buff=iota.appendHexByte(buff, 0x04, endian)  \n        buff=iota.appendHexByte(buff, 0x03, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,4000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shzr_RN620 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length\t = iota.hexToShort(hex,3,'B')/100\n\t\tlocal temperature\t = iota.hexToShort(hex,5,'B')/100\n        \n       \n        out.data = {\n\t\t\tlength\t=length,\n\t\t\ttemperature\t=temperature\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shzr_RN620 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_RN620 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2020-03-26 11:00:53.98+08	2020-03-26 16:11:32.289+08	2020-03-26	\N
c103cba2-1c09-493e-8db1-37394ad65637	nengh_YF_8301	\N	土壤盐分电导率一体化传感器协议	1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	\n--D:\\SVN\\201811项目\\智慧农业待接入设备\\NH51Y土壤盐分电导率一体化传感器说明书V1.1-170510.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("nengh_YF_ 设备模块通道 接口获取 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("nengh_YF_,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("nengh_YF_  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("nengh_YF_ m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local saltContent =iota.hexToUShort(hex,3,'B')\n    \tlocal conductivity =iota.hexToUShort(hex,5,'B')\n        out.data = {           \n            saltContent=saltContent,\n      \t\tconductivity=conductivity/100\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("nengh_YF_ m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-11-19 10:59:47.33+08	2018-12-13 11:26:51.618+08	2018-11-19	\N
d6f1dfe7-d20a-48bf-ac33-419f33048c43	hc_vibrateWire_1403	\N	上海华测创时振弦采集仪协议	1.0	14332895-1778-42da-912a-4314147f2555	14332895-1778-42da-912a-4314147f2555	f	14332895-1778-42da-912a-4314147f2555	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("start %s, moduleId=%s channel = %s ", "hc_1403",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n        log.debug("hc_1403 根设备 名称 : data is =%s", device.name)\n        log.debug("hc_1403 根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("hc_1403 子设备subdevices=%s : data is =%s", index,json.encode(child))\n      \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("hc_1403 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("hc_1403 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n        \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t           \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n            log.debug("hc_1403 模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian)      \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian)      \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("hc_1403 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("hc_1403 模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("hc_1403 subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlocal resultData =json.encode(out)\n    log.debug("hc_1403  out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("hc_1403:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n    if ErrorCode then     \n \n        \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n        local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("hc_1403:模块%s通道%s的原始值是：freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n        log.debug("hc_1403:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t--local K2 = subDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t--local K3 = subDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("hc_1403:振弦模块：公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("hc_1403 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\t--end\n        \n       \n       \n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n                  \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('hc_1403:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 25 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('hc_1403:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('hc_1403:模块%s通道%s 数据校验失败：Hex CMD False：错误码=1003',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('hc_1403:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('hc_1403:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend	INLINE	2017-09-04 19:06:17.153+08	2018-03-28 16:21:23.473+08	2017-08-31	\N
1e2ed006-51a1-4136-9de9-03451e5aee80	xs_Weather_2408	\N	13要素气象站	1.0	dbfb6012-f2a3-4e35-b214-d014eba687e4	dbfb6012-f2a3-4e35-b214-d014eba687e4	f	dbfb6012-f2a3-4e35-b214-d014eba687e4	Lua	--//04 项目资料/2017-09/绵阳湘蜀电子-气象站监测/自动气象站通讯协议和标准MODBUS协议.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "xs_Weather_2408", device.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("xs_Weather_2408 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("xs_Weather_2408 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t\n\t\n    if tonumber(moduleNo) > 255 or tonumber(moduleNo) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff,moduleNo, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x10, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        -- print("ssend=", ctx:ssend(buff,500) )\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        end\n        ctx:done(result)\n    end\nend\n--0103207FFF7FFF00C3FF3D7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF0000\n--moduleId=1\n--"co2": 0,\n--"direction": 0,\n--"humidity": 0,\n--"illumination": 0,\n--"pm25": 0,\n--"pressure": 0,\n--"radiation": 0,\n--"rainFall": 0,\n--"soilHumidity": 0,\n--"soilTemp": -19.5,\n--"speedWind": 0,\n--"temp": 19.5,\n--"ultravioletRadiation": 0\n\nunmarshall=function(hex,moduleStr)\n    log.debug("xs_Weather_2408  receiced data=%s", hex)   \n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n      log.debug('xs_Weather_2408 开始解析')\n       --模拟byte[]\n\t   local data={}\n\t   for i=0,string.len(hex)-1,2 do\n\t      local j=i/2\n\t\t  data[j]=string.sub(hex,i+1,i+2)\n\t\tend\n\t   --默认无效数据0x7F(无效/未连接) 替换为0x00\n\t\tfor i=3,table_leng(data)-1,1 do\n\t      if data[i]=='7f' then\n             if data[i+1]=='ff' then\n\t\t      data[i]='00'\n              data[i+1]='00'\n              end\n\t\t  end\t     \n\t\tend\n\t    log.debug('xs_Weather_2408 计算结果'..data[3]..data[4])\n\t\tlocal speedWind = iota.hexToShort(data[3]..data[4],0,'B') * 0.1;--//风速\n \t\tlocal rainFall = iota.hexToShort(data[5]..data[6],0,'B')*0.1;--//雨量\n        local temp = iota.hexToShort(data[7]..data[8],0,'B') * 0.1;--//温度\n        local soilTemp = iota.hexToShort(data[9]..data[10],0,'B') * 0.1;--//土壤温度\n        local pressure = iota.hexToShort(data[11]..data[12],0,'B') * 0.1;--//气压\n        local radiation = iota.hexToShort(data[13]..data[14],0,'B');--//总辐射\n        local direction = iota.hexToShort(data[15]..data[16],0,'B');--//风向\n        local soilHumidity = iota.hexToShort(data[17]..data[17],0,'B') * 0.1;--//土壤湿度\n        local humidity = iota.hexToShort(data[19]..data[20],0,'B') * 0.1;--//湿度\n        local ultravioletRadiation = iota.hexToShort(data[21]..data[22],0,'B');--//紫外辐射\n        local illumination = iota.hexToShort(data[23]..data[24],0,'B');--//光照度\n        local co2 = iota.hexToShort(data[25]..data[26],0,'B');--//CO2\n        local pm25 = iota.hexToShort(data[27]..data[28],0,'B');--//PM2.5\n\t\n        \n        out.data = {\n                speedWind=speedWind,\n\t\t\t\trainFall=rainFall,\n\t\t\t\ttemp=temp,\n\t\t\t\tsoilTemp=soilTemp,\n\t\t\t\tpressure=pressure,\n\t\t\t\tradiation=radiation,\n\t\t\t\tdirection=direction,\n\t\t\t\tsoilHumidity=soilHumidity,\n\t\t\t\thumidity=humidity,\n\t\t\t\tultravioletRadiation=ultravioletRadiation,\n\t\t\t\tillumination=illumination,\n\t\t\t\tco2=co2,\n\t\t\t\tpm25=pm25\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleStrCheck)\n    if data == nil or string.len(data)/2 ~= 37  then\n        errormsg = 'Data is nil or InvalidLength'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\ntable_leng=function(t)\n  local leng=0\n  for k, v in pairs(t) do\n    leng=leng+1\n  end\n  return leng;\nend\n	INLINE	2017-12-05 10:44:21.903+08	2018-03-30 10:58:01.406+08	2017-12-03	\N
0519be85-6999-49e5-a49d-0a5702bd60f6	fs_vibrateWire_1401	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load  fs_1401 moudle = %s ",device.uplink.props.module)\n    --log.debug("fs_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("fs_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("fs_1401 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_1401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\t\t\t\t\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("fs_1401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("fs_1401:".."subdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n  \tlog.debug("fs_1401 module=%s,result=%s .",moduleNo,json.encode(out))\n    ctx:done(resultData)\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("fs_1401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('fs_1401 ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        log.debug("fs_1401 module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n\t\tlocal formulaId=subDevice.uplink.capabilities[1].formula.metaid  --公式id\n\t\tlog.debug("fs_1401  公式id=%s",formulaId)\n\t\t--振弦公式\n        if subDevice.uplink.capabilities[1].formula.metaid == '265b6e0c-ccfe-4cbd-bde2-362c37e12a44' then --在iota中查找\n\t\t\t\tlocal k = subDevice.uplink.capabilities[1].formula.props.K or 0\n\t\t\t\tlocal kt = subDevice.uplink.capabilities[1].formula.props.Kt or 0\n\t\t\t\tlocal f0 = subDevice.uplink.capabilities[1].formula.props.Fo or 0\n\t\t\t\tlocal t0 = subDevice.uplink.capabilities[1].formula.props.To or 0\n                log.debug("fs_1401 module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\tend\n\t\t\t\t--无公式 --温度传感器用\n\t\telseif  subDevice.uplink.capabilities[1].formula.metaid == '7db881d1-76ee-4a11-b932-c658d8d0eaed' then --在iota中查找\n\t\t--\n\t\tend\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('fs_1401 : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('fs_1401 : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('fs_1401 : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('fs_1401 : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend	INLINE	2017-08-26 16:00:32.004+08	2019-12-13 11:23:41.903+08	2018-03-23	\N
8ced906b-9db3-4efe-a448-3e197ed73a36	sonbest_wind_1	\N	搜博	1.0	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	f	095856ee-a9d4-4d58-9ecc-8e832e82ab8b	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sonbest_wind_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \n  \tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sonbest_wind_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n    buff=iota.appendHexByte(buff, moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    -- 01 03 00 00 00 01 84 0A \n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("send %s, ctx=%s", "sonbest_wind_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        \n        -- 010302018CB871\n        --"level": 3.96\n        local windSpeed =iota.hexToShort(hex,3,'B')/100;\n    \n        out.data = {\n           \n            windSpeed=windSpeed,\n         \n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "sonbest_wind_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2018-01-23 16:13:36.702+08	2018-03-30 08:21:38.753+08	2018-01-23	\N
f62c8865-7064-4630-8ad6-60d29b34310d	qx_illumination_2404	\N	邯郸光照传感器	1.0	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	f	cd7e9785-f93e-4d49-acf8-7ce7fe77c734	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "qx_illumination_2404.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexWord(buff, 0, endian) \n    buff=iota.appendHexWord(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        \n        --0203040000011f896b        moduleId=2\n        --"illumination": 287  \n        --print("parsing data", hex)\n       \n        local Illumination =iota.hexToInt(hex,3,'B');    \n        out.data = {\n           illumination=Illumination\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-04 20:41:15.964+08	2018-02-28 18:32:12.211+08	2017-09-04	\N
4282373a-95d9-4b6e-97de-73fdd0b03407	zc_inclinometer_1505	\N	ModBus固定杆式测斜仪采集协议  上海直川\t-宁波理工-海涛雷鸟	1.0	52e1e749-befb-43b5-82a2-cc176deaef5b	52e1e749-befb-43b5-82a2-cc176deaef5b	f	52e1e749-befb-43b5-82a2-cc176deaef5b	Lua	--//PMO/02 产品协议/SavoirCloud/01 协议/3月第3周/上海直川电子科技/倾角传感器通讯协议-宁波理工-海涛雷鸟_上海直川电子科技.pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n--[[\n协议号: 1505;\n协议名: ModBus固定杆式测斜仪采集协议  上海直川\t-宁波理工-海涛雷鸟\n]]--\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "zc_inclinometer_1505", device.props.moduleId or "[nil]")\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xA1, endian)            -- 1：帧头  0xA1\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)-- 2: 模块号\n    buff=iota.appendHexByte(buff, 0x13, endian)              -- 3: 指令: 0x13 = 采集\n    buff=iota.appendHexWord(buff, 0, endian)               --4:\n    buff=iota.appendHexByte(buff,LCR(buff),endian)             -- 5: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp)\n        --print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n-- 帧头  模块  功能          采样数据长度        x角度     y角度     LCR\n--   1  1  1  4  2  2  1\n--A11213000404DD8D9612\n--moduleId=18\n--"xDegree": 12.45,\n--"yDegree": -34.78\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\nlocal ErrorCode = IsValid(hex)\n    if ErrorCode then \n        local signx = 1\n        local signy = 1\n        local bytex1 = iota.hexToByte(hex,5,'B')\n        local bytex2 = iota.hexToByte(hex,6,'B')\n        if(bytex1>=0x80) then\n            bytex1=bit:_and(bytex1,0x7f)\n            signx=-1\n        end\n        local XDegree = bit:_or(bit:_lshift(bit:_and(bytex1 , 0xffff) , 8),bytex2) * signx / 100.0\n        local bytey1 = iota.hexToByte(hex,7,'B')\n        local bytey2 = iota.hexToByte(hex,8,'B')\n        if(bytey1>=0x80) then\n            bytey1=bit:_and(bytey1,0x7f)\n            signy=-1\n        end\n        local YDegree = bit:_or(bit:_lshift(bit:_and(bytey1 , 0xffff) , 8),bytey2) * signy / 100.0      \n        out.data = {\n            xDegree = XDegree,\n            yDegree = YDegree\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nLCR=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end     \n    local value= bit:_and(lcr,0xff)\n  \tlocal byte = 0xff - value\n    return byte\nend \n\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0xA1 or iota.hexToByte(data,2,'B') ~= 0x13 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,1,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2017-08-28 20:00:08.145+08	2018-02-28 18:32:12.211+08	2017-08-28	\N
e548ef12-9b49-480e-a000-57c0391c5bd0	bjeac_settlement_1	\N	沉降	1.0	5c2a5b34-3127-4921-bf54-49378012c0b0	5c2a5b34-3127-4921-bf54-49378012c0b0	f	5c2a5b34-3127-4921-bf54-49378012c0b0	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, moduleId : %s", "bjeac_settlement_1.lua",device.props.moduleId or "null")\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 1, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    log.debug("bjeac_settlement_1 ssend : %s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\n    \nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    log.debug("bjeac_settlement_1 recved : %s",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==24) then\n        \n        --0301000142f6cccd00001111\n        --"settlement":  13660.3802214  \n        --print("parsing data", hex)\n       \n        local settlement =iota.hexToFloat(hex,4,'B')*110.7;    \n        out.data = {\n            settlement=settlement\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("bjeac_settlement_1 data  : %s", json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-12-18 10:54:06.725+08	2018-02-28 18:32:12.212+08	2017-12-18	\N
638699d6-576a-49d7-add9-fa5b05896d88	kst_corrosion_1	\N	腐蚀传感器	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''       \n    buff=iota.appendHexByte(buff, 0x55, endian) \n    buff=iota.appendHexByte(buff, 0xaa, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x09, endian)\n    buff=buff..device.props.moduleId \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=buff..device.uplink.props.channelId                  \n    local sum = checkSum(buff,0,8)\n    buff=iota.appendHexByte(buff, sum, endian)              \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--55AA003B000141011105160E320C3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000002A\n--moduleId=255  humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==118) then\n        \n       local rate=iota.hexToShort(hex,21,'B'); \n       local current=iota.hexToShort(hex,25,'B'); \n        \n        out.data = {\n            rate=rate,\n            current=current\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\ncheckSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + iota.hexToByte(data,i,'B'))\n        end\n    end \n    sum = bit:_and(sum , 0xff)\n    return sum\nend \n	INLINE	2017-12-06 11:41:59.984+08	2018-03-17 13:35:37.132+08	2017-12-06	\N
1fccedae-daf9-41b3-9577-7ce5383902a2	gn_settlement	\N		1.0	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	f	c465666b-2fe0-4d50-9d21-74d919571ab4	Lua	--//04 项目资料/2018-01/葛南 静力水准仪监测/JL-1静力水准仪协议.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "gn_settlement", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("gn_settlement 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("gn_settlement 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x04, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("gn_settlement:SSend error!")\n        end\n        ctx:done(result)\nend\n--cmd= 01030004000285ca\n--response=01030412e62e00031c\n--moduleId=1    \n--"settlement": 4838.180,\n\nunmarshall=function(hex,moduleNoStr)\n    local out={\n        data ={},\n        result = {}\n    }\t\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then     \n \n        local  int_part = iota.hexToShort(hex,3,'B')\n        local dec_part = iota.hexToShort(hex,5,'B')/65535.0\n        local settlement=int_part+dec_part\n\t\tsettlement=tonumber(string.format("%5.3f",settlement))\n        out.data = {\n\t\t\tlength=settlement\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrCheck)\n    log.debug('gn_settlement:开始校验数据%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNoStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('gn_settlement:数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-02-27 09:37:13.873+08	2018-04-17 11:49:56.964+08	2018-02-27	\N
eecabea7-d741-4630-8968-e8abfc8f2d1a	mas-pressure-9004	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Mas-pressure-9004", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t--全局\n  out={\n        data ={},\n        result = {}\n    }\t\t\n\tpoint = 0\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Mas-pressure-9004 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)      \n\t\tbuff=iota.appendHexByte(buff, 0x03, endian) \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("Mas-pressure-9004 SSend error!")\n        end\n\t\tif out.data.oxygen~=nil then\n\t\t\tlog.debug('Mas-pressure-9004:'..'解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian)            \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)      \n\t\t\tbufft=iota.appendHexByte(bufft, 0x02, endian) \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0)    \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t   log.debug('Mas-pressure-9004:'..'采集成功 开始解析:'..resp)\n\t\t\t\tresult =unmarshalldata(resp,moduleNo) \n\t\t\t  else\n\t\t\t\tlog.debug('Mas-pressure-9004:'..'采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n        ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        point =  = iota.hexToShort(hex,3,'B')\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n   -- return json.encode(out)\nend\n\n \nunmarshalldata=function(hex,moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\tlocal pressure = iota.hexToShort(hex,3,'B')\n       if point ~= 0 then\n        out.data = {\n            pressure=pressure/10*point\n\t\t\t}\n\t\telse\n\t\tout.data = {\n            pressure=pressure\n\t\t\t}\t\n\t\tend\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n   -- return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('Mas-pressure-9004 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('Mas-pressure-9004 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-10-11 15:43:09.515+08	2018-10-11 17:06:04.74+08	2018-10-11	\N
1a60f41c-f6df-43a2-98f6-6b4d908caaba	jjx_lvdt_9103	\N	拉杆式位移传感器LWF-R2_R5	1.0	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	f	a5f54e1b-45e0-47fd-a9f4-92ee009430ab	Lua	start=function()\n    log.debug("start %s, ctx=", "jjx_lvdt_9103.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 3, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 1, endian) \n    buff=iota.appendHexWord(buff, 4, endian) \n    buff=iota.appendHexCrc(buff, endian ,0)\n  \n    local crcH=string.sub(buff,-2,-1)\n\tlocal crcL=string.sub(buff,-4,-3)\n    buff=string.sub(buff,1,12)\n    buff=buff..crcH\n    buff=buff..crcL\n  \n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp)\n        --print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==13) then\n        --   模块  功能       数据长度           温度             CRC\n        --   1   1   1     2     2\n        --   01040203e8b98e\n        --print("parsing data", hex)\n        local sign=1\n        local data7=iota.appendHexByte(hex,7,'B')\n        if data7==0x80 then\n        sign=-1\n        end\n\n        local elongationIndicator = iota.hexToInt(hex,3,'B')*sign*1.00;\n        out.data = {\n            elongationIndicator=elongationIndicator, \n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-16 10:56:00.168+08	2018-02-28 18:32:12.212+08	2017-09-16	\N
070c5eec-4079-4fdf-bb29-80f9ecfaa377	kst_corrosion_1	\N	腐蚀传感器	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("start %s, ctx=", "gdyjs_lvdt_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''       \n    buff=iota.appendHexByte(buff, 0x55, endian) \n    buff=iota.appendHexByte(buff, 0xaa, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x09, endian)\n    buff=buff..device.uplink.props.moduleId \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=buff..device.props.channelId                  \n    local sum = checkSum(buff,0,8)\n    buff=iota.appendHexByte(buff, sum, endian)              \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--55AA003B000141011105160E320C3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000002A\n--moduleId=255  humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==118) then\n        \n       local rate=iota.hexToShort(hex,21,'B'); \n       local current=iota.hexToShort(hex,25,'B'); \n        \n        out.data = {\n            rate=rate,\n            current=current\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\ncheckSum=function(data,startindex,endindex)\n    local sum = 0\n    for i=startindex,endindex-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + iota.hexToByte(data,i,'B'))\n        end\n    end \n    sum = bit:_and(sum , 0xff)\n    return sum\nend \n	INLINE	2017-12-06 11:41:59.076+08	2018-03-17 13:36:33.361+08	2017-12-06	\N
8eddc2aa-c465-4548-ad8a-c9f9b34c318c	mk_inclination_2	\N	双轴倾角	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_inclination_2.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01051003EB03EB1111\n--"xDegree": 1.003,\n--"yDegree": 1.003\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x10 and moduleNo==modulenumber  then\n            \n            local xDegree = iota.hexToShort(hex,4,'B') / 1000.000\n            local yDegree = iota.hexToShort(hex,6,'B') / 1000.000\n                        \n            out.data = {               \n                xDegree = xDegree,\n                yDegree = yDegree\n            }                \n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_inclination_2.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:07:50.981+08	2018-02-28 18:32:12.213+08	2018-01-08	\N
97f2de59-d075-4c34-97cf-acd1359ee65a	anxin_idau_cloudvibr	\N	提取云振动i文件解析	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("fs_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    log.debug("fs_idau_cloudvibrate : recvd =%s", json.encode(data))\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".dat" then\n               --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n               ParseFileDat(data.payload)\n            else\n                log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              log.error("fs_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("fs_idau_cloudvibrate : recvd content is nil")\n    end\nend\n\n\nfunction ParseFileDat(dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'B') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("fs_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("fs_idau_cloudvibrate begin parse")\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n        end\n        log.debug("fs_idau_cloudvibrate finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                samplefreq=samplefreq,\n                filterfreq=filterfreq,\n                amplification=gainamplifier,\n                triggermode=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        log.debug("fs_idau_cloudvibrate cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("fs_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    --log.debug("anxin_file_transfer search device module=%s channel=%s",moduleid,channel)\n    if device.dnlinks ~= nil then\n        if tostring(device.uplink.props.module) == tostring(moduleid) then\n            local subdevices = device.dnlinks[1].devices       \n            for i,subdevice in pairs(subdevices)  do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    --log.debug("anxin_file_transfer search done. module=%s channel=%s",subdevice.uplink.props.module,subdevice.uplink.props.channel)\n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_idau_cloudvibrate has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n	INLINE	2018-05-22 14:43:13.993+08	2018-05-23 14:59:14.785+08	2018-05-22	\N
2cf8a814-f993-4420-8aa3-7fa891995667	mk_windSpeed_1	\N	风速	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094a03EB0000000000000000\n--"windSpeed": 100.3\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x4a and moduleNo==modulenumber  then\n            local windSpeed = iota.hexToShort(hex,4,'B') / 10.0\n            out.data = {               \n                windSpeed=windSpeed\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_windSpeed_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:42:09.762+08	2019-04-26 14:26:20.767+08	2018-01-08	\N
6026c019-d4d7-4a8e-969e-03ca957ba814	yf_laser_9505	\N	北京亚飞激光测距协议	1.0	6414b423-5567-4672-ae65-db92b076e8e8	6414b423-5567-4672-ae65-db92b076e8e8	f	6414b423-5567-4672-ae65-db92b076e8e8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=", "yf_laser_9505.lua",json.encode(device))\n    local endian = 'B'\n    local buff=''         -- 2: 类型=1\n    local buffer ={}\n    buff = iota.appendHexByte(buff, 0x3a, endian)\n    table.insert(buffer,0x3a)\n    buff = iota.appendHexByte(buff, device.props.moduleId, endian)\n    table.insert(buffer,device.props.moduleId)\n    buff = iota.appendHexByte(buff, 0x05, endian)\n    table.insert(buffer,0x05)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    table.insert(buffer,0x00)\n    local byte = CheckPlusSum(buffer, 1, 4)\n    buff = buff..string.format("%02X",byte) --crcsum\n    buff = iota.appendHexByte(buff, 0x0d, endian)\n    buff = iota.appendHexByte(buff, 0x0a, endian)\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n--3a0105010204000905550d0a     moduleId=1\n--"length": 12.409500000000001\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local Data ={}\n        local resp = ""\n        local len = Calculation(hex)\n        out.data = {\n            length = len\n        }\n    else\n        message = 'Invalid Msg, len='..string.len(hex)\n        out.result = {code = errcode, msg = message}\n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 12 then \n        errormsg = 'Data is nil or Length not right'\n        errcode = 1001\n        return false\n    elseif iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,10,'B') ~= 0x0d or iota.hexToByte(data,11,'B') ~= 0x0a then\n        errormsg = 'Data is Invalid'\n        errcode = 1001\n        return false\n    else \n        return true\n    end\n    --iota.checkPlusSum16\n\n    return true\n--crc\nend\n\nfunction CheckPlusSum(package, startIndex, endIndex)\n    local sum = 0\n    for i = startIndex, endIndex do\n        sum = (sum + package[i]) % 0xffff\n    end        \n    local result = sum --& 0xff\n    return result\nend\n\n\nfunction Calculation(data)\n    local len = 0\n    for i=0, string.len(data)/2 -1 do\n        if i>=3 and i<9 then\n            if i == 3 then \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 10)\n            elseif i == 4 then\n                len = len + tonumber(iota.hexToByte(data,i,'B'))\n            elseif i == 5 then\n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.1)\n            elseif i == 6 then\n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.01)\n            elseif i == 7 then \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.001)\n            else \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.0001)\n            end\n        end\n    end\n    return len \nend	INLINE	2017-08-24 19:26:49.021+08	2018-02-28 18:32:12.213+08	2017-08-24	\N
c3ff71d9-c748-4bb8-a264-c8c2ce35c061	jcj_temp_1138	\N	北京九纯健温度协议	1.0	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	f	ed254182-aeaf-4f3c-9ee6-480154f64cae	Lua	start=function()\n    log.debug("start %s, ctx=", "jcj_temp_1155.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n  \tlocal channelNo = 2*(tonumber(device.props.channelId) - 1)\n    buff=iota.appendHexWord(buff, channelNo, endian) \n    buff=iota.appendHexWord(buff, 1, endian)             -- 3: 类型=1\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 4: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp)\n        --print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==7) then\n        --   模块  功能       数据长度           温度             CRC\n        --   1   1   1     2     2\n        --   01040203e8b98e\n        --print("parsing data", hex)\n        \n        local temp = iota.hexToShort(hex,3,'B')/10.0;\n        out.data = {\n            temp=temp, \n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-29 14:56:57.987+08	2018-02-28 18:32:12.215+08	2017-09-29	\N
03ad066f-654d-4ca0-be8d-5260028f35e5	jitai_degree_1890	\N		1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1890", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1890 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1890 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1890 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf9, endian)            \n        buff=iota.appendHexByte(buff, 0xf9, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n\t\tlog.debug("jitai_1890 发送采集命令=%s",buff)\n        ok,resp=ctx:ssend(buff,15000)\n\t\t\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,tostring(moduleNo))\n    \t\tlog.debug("jitai_1890 result=%s",result)\n        else\n            log.debug("jitai_1890 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765   \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1890 收到数据=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal xDegree\n\tlocal yDegree\n\t\n    local ErrorCode = IsValid(hex,module_str)\n    if ErrorCode then     \n        local index_x=string.sub(hex,3,3)\n        local str_num_x = string.sub(hex,4,8)\n        local num_x=tonumber(str_num_x)\n    \tif index_x=="8" then\n      \t\tnum_x=-1 * num_x\n      \tend\n        \n    \n\t\tlocal num_y\n        if string.len(hex)/2==7 then\n      \t\tlocal index_y=string.sub(hex,9,9)\n         \tlocal str_num_y = string.sub(hex,10,14)\n        \t num_y=tonumber(str_num_y)\n      \t\tif index_y=="8" then\n\t\t\t\tnum_y=-1 * num_y\n\t\t\tend\t\t\t\n\t\tend\n\t\n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1890 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1890 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x  --经过厂家确认  公式带入的是模数\n\t\t\txDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\txDegree=string.format("%0.2f",xDegree)\n\t\t\tif num_y~=nil then\n\t\t\t\tFi=num_y\n\t\t\t\tyDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n        \t\tyDegree=string.format("%0.2f",yDegree)\n\t\t\t\tlog.debug("jitai_1890 qr yDegree=%s",yDegree)\n\t\t\tend\n\t\tend            \t\t\t\t\n        out.data = {\n                    anglex=tonumber(xDegree),\n                    angley=tonumber(yDegree)\n       \t\t\t }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n    log.debug('jitai_1890:开始校验数据%s',data)\n    if data == nil or (string.len(data)/2 ~=4 and string.len(data)/2 ~=7) then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug("jitai_1890 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n        return false\n    end\n    log.debug('jitai_1890:数据校验通过')\n    return true\n--crc\nend\n	INLINE	2018-11-06 19:33:02.495+08	2018-11-06 21:10:46.527+08	2018-11-06	\N
092af94e-0a30-40bc-8f2b-c5eceea24d6a	mk_votage_1	\N	电压	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_votage_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094300EB0000000000000000\n--"votage": 235\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_votage_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x43 and moduleNo==modulenumber  then\n            \n            local votage = iota.hexToShort(hex,4,'B') \n            out.data = {               \n                votage=votage\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_votage_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_votage_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:35:42.847+08	2018-02-28 18:32:12.216+08	2018-01-08	\N
dce56237-048b-4d44-a741-069f30b89674	mlsensor_Liquid_1917	\N	上海蒙朗液位计	1.0	53eab53b-1a19-4820-b536-c5c56fda6e6f	53eab53b-1a19-4820-b536-c5c56fda6e6f	f	53eab53b-1a19-4820-b536-c5c56fda6e6f	Lua	--//01 协议文档/6月第5周/上海蒙朗物联网科技有限公司/MP3530液位变送器（RS485).pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "mlsensor_Liquid_1917.lua", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexWord(buff, 4, endian)                     \n    buff=iota.appendHexWord(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      -- 5: CRC\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n        \n--0103021388B512    moduleId=1\n--pressure": 500\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then   \n       \n        local Pressure =iota.hexToShort(hex,3,'B')/10.0;    \n        out.data = {\n           pressure=Pressure\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2017-09-06 18:56:06.402+08	2018-02-28 18:32:12.216+08	2017-09-06	\N
f6817d17-36f6-41ce-ad3f-9103b236586a	shjy_incline_3	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "shjy_incline_3.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("shjy_incline_3 设备模块 m=%s ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian)    -- 读取9个寄存器\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("shjy_incline_3,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  ctx:done(errout)\n\tend\nend\n--010300020004e5c9\n--0103085046000023200000bd61\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shjy_incline_3 [m=%s], recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\t \n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local rangeStr=device.props.ranges\n        local rangeArray=Split(rangeStr,',')\n        log.debug("shjy_incline_3  [m=%s],范围=%s,%s",moduleNoStr,rangeArray[1],rangeArray[2])\n        local anglex =iota.hexToUInt(hex,3,'L')*0.001 - rangeArray[2]\n\t\tlocal angley =iota.hexToUInt(hex,7,'L')*0.001 - rangeArray[2]\n\t\t\n        --log.debug("shjy_incline_3  [m=%s],temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            anglex=tonumber(string.format("%0.3f",anglex)),  \n\t\t\tangley=tonumber(string.format("%0.3f",angley))       \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shjy_incline_3 [m=%s],data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = string.format('数据长度无效=%s≠13',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('模块号无效=%s≠[%s]',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2018-12-24 11:00:38.354+08	2018-12-25 09:25:07.15+08	2018-12-24	\N
4551eefd-3b2e-42e4-b314-f27e5157eecc	rpkj_level_1	\N	上海融频电子科技有限公司	1.0	ef70d798-67c0-4772-9639-3d9b805f5941	ef70d798-67c0-4772-9639-3d9b805f5941	f	ef70d798-67c0-4772-9639-3d9b805f5941	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "rpkj_level_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 2, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    -- 01040000000271cb\n    log.debug("rpkj_level_1,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("rpkj_level_1  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("rpkj_level_1 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        --01040442C800006E02 \n        --"level": 100\n        local level =iota.hexToFloat(hex,3,'B');\n    \n        out.data = {           \n            level=level        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("rpkj_level_1 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-02-05 14:52:38.736+08	2018-05-17 14:12:06.154+08	2018-02-05	\N
da2dc742-e8d6-4906-9581-128b6b5f3198	sxcg_inclination_2	\N	倾斜传感器通信协议	1.0	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "sxcg_inclination_2.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("sxcg_inclination_2 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("sxcg_inclination_2 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    -- 角度\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("sxcg_inclination_2,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("sxcg_inclination_2  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--0503040001E422252A    ---2.95\nunmarshall=function(hex,moduleNoStr)\n    log.debug("sxcg_inclination_2 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local anglex=(iota.hexToInt(hex,3,'B')-125000)/360\n\t\t\n        --log.debug("sxcg_inclination_2  m=%s,anglex=%s ",moduleNoStr,anglex)\n        out.data = {           \n\t\t\tanglex=anglex\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("sxcg_inclination_2 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-02-06 17:14:35.343+08	2018-08-15 10:59:17.266+08	2018-08-15	\N
71f0c6f5-2830-448a-8bf4-d4992c8cee9a	Wind_OSL_9201	\N	超声风速风向仪协议解析V2.0	1.0	9f1dab8d-8776-4895-af81-ece24218042c	9f1dab8d-8776-4895-af81-ece24218042c	f	9f1dab8d-8776-4895-af81-ece24218042c	Lua	--// Documents/PMO/02 产品协议/外购产品协议/协议解析V2.0.pdf\n--[[\n协议号: 9201;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n    log.debug("load script %s, moduleId=%s", "Wind_OSL_9201.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序    02 04 10 04 00 08 b4 fe\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x10, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x08, BE);-- 3:  \t读取寄存器数量\t\n\tlocal temp=buff;--交换CRC16高地位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0)   --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  020410a5253db90943438600004190c7b0c0b7cd90 \n--原始数据 风速0.09 风向268.07  moduleId=2\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal windSpeed = Bytes2Float(data, 3);\n\t\tlocal windDirection= Bytes2Float(data,7);\t\t\t\n\t\t\n\t\tout.data = {\n\t\twindSpeed=windSpeed,\n\t\twindDirection=windDirection\n\t\t};\n    else\n    out.result = {code=errcode,msg=errormsg} \n\tend\n\treturn json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 21 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\n\n\nfunction Bytes2Float(data,index)\n    index=index*2\n\tdataStr1=string.sub(data,index+1,index+2);\n\tdataStr2=string.sub(data,index+3,index+4)\n\tdataStr3=string.sub(data,index+5,index+6)\n\tdataStr4=string.sub(data,index+7,index+8)\n\tdataStr=dataStr3..dataStr4\n\tdataStr=dataStr..dataStr1\n\tdataStr=dataStr..dataStr2\n    --log.debug(string.format('转换后的字节: %s', dataStr));\n    data1=iota.hexToFloat(dataStr, 0,'B');\n   -- log.debug(string.format('转换的数: %s', data1));\n\treturn data1;\nend	INLINE	2017-09-14 20:43:31.514+08	2018-02-28 18:32:12.216+08	2017-09-14	\N
752b624d-000c-4f53-adfb-e6d12b8640af	blm_tempHumi_1104	\N	北京宝力马传感技术有限公司	1.0	59924975-bf9a-49ef-8bb4-239e5eb716f4	59924975-bf9a-49ef-8bb4-239e5eb716f4	f	59924975-bf9a-49ef-8bb4-239e5eb716f4	Lua	--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "blm_tempHumi_1104", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("blm_tempHumi_1104 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("blm_tempHumi_1104 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("blm_tempHumi_1104 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18    \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local temp = iota.hexToShort(hex,3,'B')/10.0\n        local humidity = iota.hexToShort(hex,5,'B')/10.0\n       \n        out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('blm_tempHumi_1104 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('blm_tempHumi_1104 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2017-12-13 12:00:14.021+08	2018-03-30 10:04:44.954+08	2017-12-11	\N
aa7da275-9e58-4b7e-8fe4-7abbcb421491	sxcg_3400	\N	采集仪协议	1.0	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	f	8ab9c150-c09e-4a8b-9f1e-75edfb0ffb12	Lua	--//20180809新增项目资料提交\\上海隼星--边坡监测--康飞\\T440振弦采集仪接口协议.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart = function()\n    -- log.debug("load script %s, moduleId=%s", "sxcg_3400.lua", device.props.moduleId or "[nil]")\n    -- log.debug("sxcg_3400:".."LUA: ctx is =%s", json.encode(device))\n    ok, resp = ctx:asend('01020304')\n    -- log.debug("sxcg_3400:".."测试下发01020304正常")\nend\n\nonData =\n    function(hex)\n    log.debug('sxcg_3400收到数据=%s', hex)\n    log.debug('sxcg_3400 device =%s', json.encode(device))\n    log.debug('sxcg_3400subdevices  data is =%s', json.encode(device.dnlinks[1].devices))\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ModuleChar = 'M=' --振弦\n    local DigChar = 'Di' --测斜\n    local VoltageChar = 'V=' --电压\n    local CurrentChar = 'I=' --电流\n    local WaterChar = 'Wa' --水文\n    local ResistanceChar = 'R=' --电阻(差阻)\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = toStrHex(hex)\n        log.debug('sxcg_3400:sData是 %s', sData)\n        --获取子字符串表\n        local allResponse = Split(sData, '\\n')\n        --移除表内的“”和nil\n        for k, v in ipairs(allResponse) do\n            if v == '' or v == nil then\n                table.remove(allResponse, k)\n                log.debug('sxcg_3400:' .. '表内的“”和nil 移除元素为 ' .. tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k, v in ipairs(allResponse) do\n            local singleData = Split(v, ' ')\n            --移除单类数据中的空\n            for kk, vv in ipairs(singleData) do\n                if vv == '' or vv == nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove(singleData, kk)\n                end\n            end\n\n            if k > 1 then\n                local temp1 = singleData[2 + 1]\n                local moudleStr = string.sub(singleData[2 + 1], 2, 2)\n                local moduleNo = tonumber(moudleStr)\n                --解析单条数据\n                for kkk, vvv in ipairs(singleData) do\n                    log.debug('sxcg_3400:遍历解析单条数据 键=' .. tostring(kkk) .. ' 值=' .. tostring(vvv))\n\n                    local type_sensor = string.sub(string.gsub(singleData[kkk], '%d', ''), 1, 2)\n                    log.debug('sxcg_3400: type_sensor=' .. type_sensor)\n                    if string.len(type_sensor) >= 2 then\n                        --频率\n                        if type_sensor == ModuleChar then\n                            --local length = string.len(singleData[kkk]) - 3\n                            local tempLength = string.len(singleData[kkk + 1]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Module = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local tempData = string.sub(singleData[kkk + 1], 4, 4 + tempLength)\n                            local Frequency = math.sqrt(Module * 1000)\n                            local Temp\n                            local Phy\n                            if IsNumberic(tempData) then\n                                Temp = tonumber(tempData)\n                            else\n                                Temp = 0\n                            end\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s原型childDevice=%s', moduleNo, channelNo, json.encode(childDevice))\n                                log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s deviceId=%s ', moduleNo, channelNo, tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:振弦模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                    else\n                                        log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                        local Fi = Module --经过厂家确认  公式带入的是模数\n                                        Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                elseif childDevice.uplink.capabilities[1].formula.metaid == 'a6bc41f8-f061-4714-acd6-7b839a4559fc' then\n                                    --角度公式\n                                    log.debug('sxcg_3400 振弦转角度 当前的Frequency是:%s,%s', Frequency, Temp)\n                                    local Fi = Module --经过厂家确认  公式带入的是模数\n                                    Phy = (Fi * 10 - 125000) / 3600\n                                    log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                else\n                                    log.debug('sxcg_3400 模块%s,通道%s当前无匹配公式', moduleNo, channelNo)\n                                end\n                            else\n                                log.debug('sxcg_3400:(振弦)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            --log.debug("sxcg_3400:振弦模块：公式%s",device.formula)\n\n                            local data1 = {\n                                data = {\n                                    frequency = tonumber(string.format('%0.3f', Frequency)),\n                                    temperature = tonumber(string.format('%0.2f', Temp)),\n                                    physicalvalue = tonumber(string.format('%0.3f', Phy))\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            log.debug('sxcg_3400:(振弦) Phy结果=%s', Phy)\n                            table.insert(out.data, data1)\n                        end\n\n                        --电压\n                        if type_sensor == VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Voltage = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local Phy\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(电压)子设备原形childDevice=%s', json.encode(childDevice))\n                                log.debug('sxcg_3400:(电压)子设备deviceId: ' .. tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:电压模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Voltage=%s', moduleNo, channelNo, Voltage)\n                                    else\n                                        log.debug('sxcg_3400 当前的Voltage=%s', Voltage)\n                                        local Fi = Voltage\n                                        Phy = K1 * Fi - (K1 * Fo)  + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                end\n                            else\n                                log.debug('sxcg_3400:(电压)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            local data1 = {\n                                data = {\n                                    voltage = Voltage,\n                                    physicalvalue = Phy\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            table.insert(out.data, data1)\n                        end\n\n                        --电流\n                        if type_sensor == CurrentChar then\n                            local length = string.len(singleData[kkk]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Current = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local Phy\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(电流)子设备原形childDevice=%s', json.encode(childDevice))\n                                log.debug('sxcg_3400:(电流)子设备deviceId: ' .. tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Current=%s', moduleNo, channelNo, Current)\n                                    else\n                                        log.debug('sxcg_3400 当前的Current=%s', Current)\n                                        local Fi = Current\n                                        Phy = K1 * Fi - (K1 * Fo) + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                end\n                            else\n                                log.debug('sxcg_3400:(电流)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            local data1 = {\n                                data = {\n                                    current = Current,\n                                    physicalvalue = Phy\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            table.insert(out.data, data1)\n                        end\n\n                        --水文\n                        if type_sensor == WaterChar then\n                            local Phy\n                            if string.sub(singleData[kkk], 1, 6) == 'Water1' then\n                                local waterData = GetSWData(singleData, kkk)\n\n                                for i = 1, 8, 1 do\n                                    --获取通道设备deviceId\n                                    local childDevice = getDeviceInfo(moduleNo, i)\n                                    --\n                                    local deviceId\n                                    if childDevice ~= nil then\n                                        deviceId = childDevice.id\n                                        log.debug('sxcg_3400:(水文)子设备原形childDevice=%s', json.encode(childDevice))\n                                        log.debug('sxcg_3400:(水文)子设备deviceId: ' .. tostring(deviceId))\n                                        local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                        if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                            ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                            local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                            local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                            local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                            local To = childDevice.uplink.capabilities[1].formula.props.To\n                                            local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                            log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                            if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                                Phy = nil\n                                                log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                            else\n                                                log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                                local Fi = waterData[i]\n                                                Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                                log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                            end\n                                        end\n                                    else\n                                        log.debug('sxcg_3400:(水文)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(i))\n                                    end\n                                    local data1 = {\n                                        data = {\n                                            waterdata = waterData[i],\n                                            physicalvalue = Phy\n                                        },\n                                        device = deviceId,\n                                        type = 1\n                                    }\n                                    table.insert(out.data, data1)\n                                end\n                            end\n                        end\n\n                        --测斜\n                        if type_sensor == DigChar then\n                            local Phy\n                            local Temp\n                            if (string.sub(singleData[kkk], 1, 3) .. string.sub(singleData[kkk], 5, 5)) == 'Dig=' then\n                                local channelNo = tonumber(string.sub(singleData[kkk], 4, 4), 16)\n                                local Inclination = tonumber(string.sub(singleData[kkk], 6, -1))\n                                --获取通道设备deviceId\n                                local childDevice = getDeviceInfo(moduleNo, channelNo)\n                                local deviceId\n                                if childDevice ~= nil then\n                                    deviceId = childDevice.id\n                                    log.debug('sxcg_3400:(测斜)子设备原形childDevice=%s', json.encode(childDevice))\n                                    log.debug('sxcg_3400:(测斜)子设备deviceId: ' .. tostring(deviceId))\n                                    local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                    if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                        ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                        local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                        local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                        local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                        local To = childDevice.uplink.capabilities[1].formula.props.To\n                                        local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                        log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                        if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                            Phy = nil\n                                            log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                        else\n                                            log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                            local Fi = Inclination\n                                            Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                            log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                        end\n                                    end\n                                else\n                                    log.debug('sxcg_3400:(测斜)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                                end\n\n                                local data1 = {\n                                    data = {\n                                        inclination = Inclination,\n                                        temperature = Temp,\n                                        physicalvalue = Phy\n                                    },\n                                    device = deviceId,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('sxcg_3400resultData=%s,hex=%s', json.encode(out), hex)\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("sxcg_3400 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('sxcg_3400 查询传感器的下行设备 json.encode(child.dnlinks)=%s,=={}？=%s', json.encode(child.dnlinks), json.encode(child.dnlinks) == '{}')\n            --log.debug("sxcg_3400:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                --log.debug("sxcg_3400 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n            else\n                --log.debug("sxcg_3400 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('sxcg_3400:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('sxcg_3400: m=%s,c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('sxcg_3400:' .. '校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length = getIndex(alldata)\n    local data = string.sub(alldata, 1, length * 2)\n    --log.debug("data:"..data)\n    local plu16 = {}\n    plu16[0] = string.sub(data, -8, -7)\n    plu16[1] = string.sub(data, -6, -5)\n    --local plusSum16Hi, plusSum16Lo = iota.hexCheckPlusSum16(data, 0, length - 4)\n    -- log.debug("sxcg_3400:".."plu16[0]是："..plu16[0])\n    -- log.debug("sxcg_3400:".."plu16[1]是："..plu16[1])\n    -- log.debug("sxcg_3400:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("sxcg_3400:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n    --   errormsg = 'checkPlusSum16 is false'\n    -- errcode = 1004\n    -- return false\n    -- end\n\n    log.debug('sxcg_3400:' .. '校验通过')\n    return true\nend\n\ngetIndex = function(data) --用于IsValid\n    local len = string.len(data) / 2\n    for n = 1, len do\n        local value = string.sub(data, 2 * n - 1, 2 * n)\n        if value == '0a' then\n            return n\n        end\n    end\n    return 0\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nGetSWData = function(sData, j)\n    local SW = {}\n\n    local Water1 = tonumber(string.sub(sData[j], 8, -1))\n    local Base1 = tonumber(string.sub(sData[j + 1], 7, -1))\n\n    local Water2 = tonumber(string.sub(sData[j + 2], 8, -1))\n    local Base2 = tonumber(string.sub(sData[j + 3], 7, -1))\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j + 4], 13, -1))\n    local Direction = tonumber(string.sub(sData[j + 5], 11, -1))\n\n    local AverWinSpeed = tonumber(string.sub(sData[j + 6], 14, -1))\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j + 7], 18, -1))\n\n    local NowDirection = tonumber(string.sub(sData[j + 8], 11, -1))\n    local AccRain = tonumber(string.sub(sData[j + 9], 9, -1))\n\n    SW[1] = Water1 / 100 + Base1\n    SW[2] = Water2 / 100 + Base2\n    SW[3] = MaxWinSpeed\n    SW[4] = Direction\n    SW[5] = AverWinSpeed\n    SW[6] = RealTImeWinSpeed\n    SW[7] = NowDirection\n    SW[8] = AccRain\n    return SW\nend	INLINE	2018-08-15 14:10:46.816+08	2019-03-05 10:54:09.229+08	2018-08-15	\N
878d994c-6a4d-4bf2-81f2-d9ab291633d6	ytc_Weather_2410	\N		1.0	b8127c53-f372-4ef5-bad6-8520cde9e94f	b8127c53-f372-4ef5-bad6-8520cde9e94f	f	b8127c53-f372-4ef5-bad6-8520cde9e94f	Lua	--//04 项目资料/2018-01/武汉云传通侧气象监测项目/YC-M800数据采集仪通信协议(V1.3).doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ytc_Weather_2410", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\t\n\tlocal moduleNo=tonumber(device.props.moduleId) \n\tlocal buff=''\n\tbuff=iota.appendHexByte(buff, moduleNo, endian)           \n\tbuff=iota.appendHexByte(buff, 0x03, endian)            \n\tbuff=iota.appendHexWord(buff, 0x00, endian)            \n\tbuff=iota.appendHexWord(buff, 0x10, endian)\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)\n\tok,resp=ctx:ssend(buff,15000)\n\tlocal result='{}'\n\tif ok then\t\n\t\tlog.debug("ytc_Weather_2410:模块%s的采集仪数据接收成功,开始解析",moduleNo)    \n\t\tresult = unmarshall(resp,out)--解析单条数据\n\telse\n\t\tlog.debug("ytc_Weather_2410:模块%s的采集仪数据接收失败",moduleNo)    \n\tend\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\tlog.debug('ytc_Weather_2410:result序列化')\n\tlocal resultData =json.encode(result)\n    log.debug("ytc_Weather_2410:out序列化结果 : out is =%s", resultData)\n    ctx:done(resultData)\nend\n\n--010320002E00C302927FFF7FFF7FFF7FFF7FFF000000000000000000000000000000008A66\n--风速值：4.6米/秒  通道1\n--风向值：195°\t\t通道2\n--雨量值：65.8\t\t通道3\n\nunmarshall=function(hex,out)\n    \n\t\n\tlocal module_Str=tostring(device.props.moduleId) \n\tlocal ErrorCode = IsValid(hex,module_Str)--subModuleId,subChannelId\n\tif ErrorCode then     \n \n        local rawData={}\n\t    for i=1,16,1 do\n\t\t    local hex_data=string.sub(hex,7+4*(i-1),7+4*i-1)\n\t\t\tif string.upper(hex_data)~="7FFF" then\t\t\t\n\t\t\t\trawData[i]=iota.hexToUShort(hex_data,0,'B')\n\t\t\t\tlog.debug("ytc_Weather_2410:i=%s,hex_data=%s",i,hex_data)\n\t\t    end\t\t\n\t\tend\n\t\t\n\t\t\n\n\n\t\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\t\tif subdevices ~=nil then\n\t\t   \n\t\t   \n\t\t\tlog.debug("ytc_Weather_2410:LUA:子设备devices : data is =%s", json.encode(subdevices))\n\t\t\tfor index,child in pairs(subdevices) do\n\t\t\t\t\n\t\t\t   \n\t\t\t   local moduleNo=tonumber(child.props.moduleId) \n\t\t\t   local channelNo=tonumber(child.props.channelId)\n\t\t\t   log.debug("ytc_Weather_2410:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t   \n\t\t\t   local k=tonumber(child.props.K) ---转换系数  传感器决定\n\t\t\t   if rawData[channelNo]~=nil  then\n\t\t\t\t\tlocal phy=rawData[channelNo]*k\n\t\t\t\t\tlocal subData={\n\t\t\t\t\t\t\t\tdata ={phy=tonumber(string.format("%5.2f",phy))},\n\t\t\t\t\t\t\t\tdevice=child.id,\n\t\t\t\t\t\t\t\ttype=1  \n\t\t\t\t\t}\n\t\t\t\t    table.insert(out.data,subData)\t\t\n\t\t\t    else\n                   log.debug("ytc_Weather_2410:传感器m=%s,c=%s 数据不存在",moduleNo,channelNo)\t\t\t\t   \n\t\t\t   end\n\t\t\t   \n\t\t\tend      \n\t\t\t\n\t\telse\n\t\t\tlog.debug("ytc_Weather_2410:subdevices是nil")\t\t\n\t\tend\n\t\t\n\t\t-----\t\n\t\t\n\tend\n\treturn out\nend\n\n\n\n\nIsValid=function(data,moduleId)\n    log.debug('ytc_Weather_2410:模块%s开始校验数据',moduleId)\n    if data == nil or string.len(data)/2 ~= 37 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('ytc_Weather_2410:模块%s数据 长度校验失败：Data is nil or invalid length',moduleId)\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'CMD Error Code ' \n\t\tlog.debug('ytc_Weather_2410:模块%s 数据校验CMD 失败',moduleId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToByte(data,0,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('ytc_Weather_2410:模块%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,moduleStr)\n        return false\n    end\n\n    log.debug('ytc_Weather_2410:模块%s数据校验通过！！！',moduleId)\n    return true\nend\n\n\n\n	INLINE	2018-02-09 13:59:15.133+08	2018-03-05 10:56:23.038+08	2018-02-09	\N
c54c1a0b-dc02-4aca-99d6-466858cec28a	lndy_flow_1970	\N		1.0	632bb218-8da7-4d91-b83d-70879c562d74	632bb218-8da7-4d91-b83d-70879c562d74	f	632bb218-8da7-4d91-b83d-70879c562d74	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "lndy_flow_1970.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("lndy_flow_1970 设备模块 m=%s ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x09, endian)    -- 读取9个寄存器\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("lndy_flow_1970,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  ctx:done(errout)\n\tend\nend\n--01034c614e00bc0b3b000000000000614e00bc0c140000\nunmarshall=function(hex,moduleNoStr)\n    log.debug("lndy_flow_1970 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local transientFlow =iota.hexToUShort(hex,3,'B')+iota.hexToUShort(hex,5,'B')*65536\n\t\tlocal totalFlow =iota.hexToUShort(hex,15,'B')+iota.hexToUShort(hex,17,'B')*65536\n\t\t\n        log.debug("lndy_flow_1970  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            transientFlow=transientFlow,  --瞬时流量  L/h\n\t\t\ttotalFlow=totalFlow/100           --累计流量 m3\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("lndy_flow_1970 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 23 then\n        errormsg = string.format('数据长度无效=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('模块号无效=%s[%s]',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-12-21 15:04:53.44+08	2018-12-25 10:04:18.923+08	2018-12-21	\N
a6a4d1f0-eb42-4da0-a288-68bb5bd5a5c8	1	\N	1	1	46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd	46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd	f	46ba69b4-f0e6-43d1-9d74-e6af9cf8f2fd	Lua	1	INLINE	2018-05-25 17:30:59.525+08	2018-05-25 17:30:59.525+08	2018-05-25	\N
fc1d0f8f-7951-4f77-91ad-e254bb3f2d94	http	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	start=function()\n  local req={\n    type="http",\n    url="https://www.baidu.com/",\n    method="GET",\n  }\n  local ok,resp=ctx:ssend(req,1000)\n  log.debug("res.header=%s", json.encode(resp.header))\n  \n  out={\n    value=resp.header,\n    result={},\n  }\n  ctx:done(json.encode(out))  \nend	INLINE	2018-08-17 11:16:09.873+08	2018-08-17 11:16:09.873+08	2018-08-17	\N
d6ee4985-7231-43a4-9593-d0088b1f370d	CPF_ecc_door_report	\N		1.0	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	a0524b8e-f69f-421e-b306-124dd37f4f1c	Lua	start=function()\n  \nend\n\nonData=function(data)\n  --channel = device.uplink.props.channel\n  log.debug("CPF_ecc_door_report data=%s %s",data, string.sub(data,1,4))\n  --03020301FF\n  --0302 地址,03=3通道，01=干簧管闭合=关, 00=干簧管开=门开\n  if data==nil or string.len(data)~=10 or string.sub(data,1,4) ~="0302" or string.sub(data,-2) ~="ff" then\n      -- invalid data.\n      return\n  end\n  local channel = tonumber(device.props.channel) or 1 -- 1\n  local scnt=tonumber(device.props.doors) or 1\n  local ch = iota.hexToByte(data,2,"B") -- 1\n  local ismychannel= ((ch - channel) >=0 and (ch - channel)< scnt )\n  --log.debug("CPF_ecc_door_report channel=%d ch=%d,scnt=%d, mych=%s",channel,ch,scnt,ismychannel)\n  -- ch: 判定是否为当前通道开门，\n  if not ismychannel  then\n    return\n  end\n  -- log.debug("CPF_ecc_door_report data=%s",data)\n  door=ch - channel + 1 -- 门号\n  stat=iota.hexToByte(data,3,"B")\n  status= stat==1 and "0" or "1" -- 反转下。\n  result={\n    data={\n    },\n    type=1\n  }\n  if (door==1) then\n    result.data.status_d1=status\n  elseif (door==2) then\n    result.data.status_d2=status\n  elseif (door==3) then \n    result.data.status_d3=status\n  end\n  log.debug("CPF_ecc_door_report result=%s",json.encode(result))\n  ctx:notify(json.encode(result))\n end	INLINE	2019-04-26 16:34:18.774+08	2019-05-18 23:04:04.854+08	2019-04-26	\N
d6833ba5-fa57-4983-840c-096e456ea988	chemins_PH_2703	\N		1.0	ba38de11-b347-4100-a317-9c4c4a362f91	ba38de11-b347-4100-a317-9c4c4a362f91	f	ba38de11-b347-4100-a317-9c4c4a362f91	Lua	-- //01 协议文档/7月第3周烟台凯米斯仪器有限公司/PHG-200系列一体式在线PH变送器用户手册.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "chemins_PH_2703", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            log.debug("SSend error!")\n        end\n        ctx:done(result)\nend\n\n--06030800620002010100012459\n--moduleId=6\n--ph=0.98,\n--temp=25.7\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n\n        local ph_temp = iota.hexToShort(hex,3,'B')\n        local ph_dot = iota.hexToShort(hex,5,'B')\n\t\tlocal ph = ph_temp/(10^ph_dot)\n\t\t\n\t\tlocal temp_temp = iota.hexToShort(hex,7,'B')\n        local temp_dot = iota.hexToShort(hex,9,'B')\n\t\tlocal temp = temp_temp/(10^temp_dot)\n\t\t\n        \n       \n        out.data = {\n            ph=ph,\n\t\t\ttemp=temp\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\n\t\n   \n	INLINE	2017-12-07 15:11:35.06+08	2018-02-28 18:32:12.217+08	2017-12-07	\N
31484d44-4700-4d3e-87ad-19cdd440d7cd	thk_inclinometer_154	\N	天海科测斜	1.0	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	f	2a9970fa-f04b-4c68-b35f-0b4ce65eecac	Lua	start=function()\n    log.debug("start %s, ctx=", "thk_inclinometer_1548.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n    -- log.debug("LUA: Unmarshall: data is %s", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n   -- 5cca3affaa014c00\n    if string.len(hex)>16 then\n      hex=string.sub(hex,1,16)\n    end\n    print("ack truncated as: ",hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local X_axis =iota.hexToShort(hex,1,'B')/1000.0\n        local Y_axis =iota.hexToShort(hex,3,'B')/1000.0\n     \n        out.data = {                --需要测试\n        xDegree = X_axis,\n        yDegree = Y_axis\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n \n	INLINE	2017-11-06 11:02:43.054+08	2018-02-28 18:32:12.218+08	2017-11-06	\N
9d569abf-b544-4bd5-907a-218ea77f580b	csyituo_temphum_1137	\N	亿拓通信协议通用	1.0	78cc8a41-1d48-4575-81ea-c08479cb15d4	78cc8a41-1d48-4575-81ea-c08479cb15d4	f	78cc8a41-1d48-4575-81ea-c08479cb15d4	Lua	--//01 协议文档/智慧城市/亿拓通信协议通用-静力水准仪示例(集成商通用)(1).pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "csyituo_temphum_1137.lua", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xAA, endian)  \n    buff=iota.appendHexByte(buff, 0x75, endian)\n    buff=iota.appendHexByte(buff, 0x10, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0x0e, endian)   \n    buff=iota.appendHexByte(buff, 0x00, endian)   \n    buff=buff..device.props.moduleId\n    local year =tonumber(os.date("%y"),16)\n    buff=iota.appendHexByte(buff, year, endian)\n    local month = tonumber(os.date("%m"),16)\n    buff=iota.appendHexByte(buff, month, endian)\n    local day = tonumber(os.date("%d"),16)\n    buff=iota.appendHexByte(buff, day, endian)\n    local hour = tonumber(os.date("%H"),16)\n    buff=iota.appendHexByte(buff, hour, endian)\n    local min = tonumber(os.date("%M"),16)\n    buff=iota.appendHexByte(buff, min, endian)\n    local sec = tonumber(os.date("%S"),16)\n    buff=iota.appendHexByte(buff, sec, endian)\n    local xor = CheckXor(0,buff)\n    buff=iota.appendHexByte(buff, xor, endian)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\n--557A1000350028E47EEC010000D412032718175500BCFCD3F13C4B4601A2A1E320202AB5E7D7D3B2E2D0B1D2C7202020202020594835303130304100\n-- temp=18.8   humi= -81.3   moduleId=28E47EEC010000D4\nunmarshall=function(hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n        \n        local Temp=iota.hexToShort(hex,20,'B')/10.0\n        local Humi=iota.hexToShort(hex,22,'B')/10.0\n        out.data = {\n           temp=Temp,\n           humi=Humi\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 60 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x55 or iota.hexToByte(data,1,'B') ~= 0x7A or iota.hexToByte(data,2,'B') ~= 0x10 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if string.upper(device.props.moduleId) ~= string.upper(string.sub(data,13,28)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\n\nCheckXor=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = bit:_xor(lcr , tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end     \n    return lcr\nend \n \n\n\n \n\n	INLINE	2017-09-11 19:28:02.423+08	2018-02-28 18:32:12.218+08	2017-09-11	\N
f351ad03-a539-4ec7-8a2c-429209e9c03a	baian_file_transfer	\N		1.0	1510d330-86c7-4950-ac34-695109bc07a8	1510d330-86c7-4950-ac34-695109bc07a8	f	1510d330-86c7-4950-ac34-695109bc07a8	Lua	start=function()\n    log.debug("baian_file_transfer : devices network =%s", json.encode(device))\n     log.debug("baian_file_transfer   get Start ")\nend\n\nonData=function(data)\n     log.debug("baian_file_transfer   解析data ")\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" or data.ext==".dx" then\n                log.debug("baian_file_transfer : recvd content = %s",data.payload)\n                ParseFileD(data.payload)\n            --else\n                --log.error("baian_file_transfer : unsupported file type: %s", data.ext)\n            end\n            if data.ext==".dat" then\n                --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n                ParseFileDat(data.payload)\n             --else\n                 --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              log.error("baian_file_transfer : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("baian_file_transfer : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("baian_file_transfer : dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("baian_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("baian_file_transfer begin parse")\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n        end\n        log.debug("baian_file_transfer finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        log.debug("baian_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("baian_file_transfer not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction ParseFileD(content)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    log.debug("baian_file_transfer : content  =%s", content)\n    local jsons=Split(content,'\\r')\n    for k,v in pairs(jsons) do\n        if v~=nil and v~='' then\n            local jsondata = json.decode(v)            \n            if jsondata~=nil and jsondata ~='' then\n                local childDevice=getDeviceInfo(jsondata.M,jsondata.C)              \n                if childDevice ~=nil then\n          \t\t\t--log.debug("baian_file_transfer  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n                    if childDevice.props.sensortype=='gnss' then\n                        local rst = {\n                            data={\n                                x = jsondata.RV[1] or 0,\n                                y = jsondata.RV[2] or 0,\n                                z = jsondata.RV[3] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        table.insert(out.data,rst)\t\n                    end\n                    if childDevice.props.sensortype=='zd' then\n                        local rst = {\n                            data={\n                                ppv = jsondata.RV[1] or 0, \n                                pv = jsondata.RV[2] or 0, \n                                rms = jsondata.RV[3] or 0,                             \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        log.debug("baian_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n          \n          \t\t\tif childDevice.props.sensortype=='gdgs' then\n                        local rst = {\n                            data={\n                                wavelength = tonumber(string.format('%0.3f',jsondata.RV[1])),\n                                physicalvalue= tonumber(string.format('%0.3f',jsondata.PV[1]))                           \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))    \n                        }\n                        log.debug("baian_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n          \t\t\tif childDevice.props.sensortype=='gdgszx' then\n                        local rst = {\n                            data={\n                                physicalvalue = jsondata.PV[1],\n                                temperature= jsondata.PV[2]                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))    \n                        }\n                        log.debug("baian_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n                    if childDevice.props.sensortype=='standard485' then\n            \t\t\tlog.debug("baian_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n                            data={                              \n                                physicalvalue= jsondata.PV[1]                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        log.debug("baian_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n                        table.insert(out.data,rst)\n                    end\n                else\n                    log.debug("baian_file_transfer line=%s childDevice is nil",k)\n                end\n            end\n        end\n    end\n   log.debug("baian_file_transfer: dataresult: %s", json.encode(out))\n   ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n  \tlog.debug("baian_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices       \n        for i,subdevice in pairs(subdevices)  do\n\t\t\n\t\t\tlocal submodule=subdevice.uplink.props.module\n      \t\t --判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n        \t\t--log.debug("baian_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t   for k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t\t--log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\t--log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\tlocal sensornodeId=sub_subdevice.uplink.props.nodeid\n            \t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channelid\n\t\t\t\t\t\t\tif tostring(sensorchannel) == tostring(moduleid) and tonumber(sensornodeId)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn sub_subdevice\n              \t\t\t\telse\n              \t\t\t\t\t--log.debug("baian_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\n\t\t    else\n              \n              local subchannel=subdevice.uplink.props.channel\n        \t\tlog.debug("baian_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n              if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then \n                 log.debug("baian_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n                  return subdevice\n              else\n                  log.debug("baian_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n              end \n        \tend\n        end\n        log.debug("baian_file_transfer has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("baian_file_transfer has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2018-08-16 10:41:53.704+08	2019-07-09 16:49:42.184+08	2018-11-22	\N
58ca889b-c95f-4603-b017-b40f0208d831	000	\N		12	0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a	0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a	f	0cd4b88c-4fb9-4fb9-83c6-038e9a530b1a	Lua	更好几代人投影机	INLINE	2018-05-24 19:14:58.121+08	2018-05-24 19:14:58.121+08	2018-05-24	\N
3cf58410-da32-4194-aca0-9adf94b1d3bf	fs_waterLevel_1560	\N	原精波水位计	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start =function()\n    log.debug('start %s, moduleId=%s', 'fs_waterLevel_1560.lua', device.props.moduleId or 'nil')\n\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian)  --返回雷达当前水位值，单位为mm\n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    -- 水位\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n    else\n       local errorout={\n                    data ={},\n                    result = {}\n                }\n    \t errorout.result = {code=1001,msg="采集超时"}\n         result=json.encode(errorout)\n    end\n    ctx:done(result)\nend\n--01 03 00 03 00 02 0000\n--010304000003040000   772mm \n\nunmarshall =function(hex,moduleNoStr)\n    log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUInt(hex,3,'B')\n        log.debug("xmxd_liquidLevel_1950  m=%s,length=%s ",moduleNoStr,length)\n        out.data = {           \n            length=length\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNoStrCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = string.format('无效的数据,长度=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleNoStrCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s[%s]',moduleNoStrCheck,dataModule)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\n\nisValidParameter = function(...)\n    local paras = {...}\n    for k, v in pairs(paras) do\n        -- log.debug('k=%s,v=%s',k,v)\n        local isNum = IsNumberic(v)\n        --log.debug('isNum=%s',isNum)\n        if isNum == false then\n            return false\n        end\n    end\n    return true\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2018-12-03 10:26:46.761+08	2018-12-03 10:44:42.886+08	2018-12-03	\N
c0f2f402-ab7b-40f7-ba47-a8e42e42b380	bjhk__7000	\N		1.0	7e13f613-ffd9-4865-800a-0ca768ab2a28	7e13f613-ffd9-4865-800a-0ca768ab2a28	f	7e13f613-ffd9-4865-800a-0ca768ab2a28	Lua	--北京华康科技\n-- start=function()\n    -- log.debug("load script %s, moduleId=%s", "bjhk_7000.lua", device.props.moduleId or "[nil]")\n     -- log.debug("bjhk_7000:".."LUA: ctx is =%s", json.encode(device))\n   -- ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("bjhk_7000:".."测试下发01020304正常")\n --end\n\n \n \n \n start=function()\n    log.debug("start %s, ctx=%s", "bjhk_7000.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t buff=StrToHex("<nodewak:00\\r\\n")\n\t\n\t\n\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n                   \n    log.debug("bjhk_7000,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("bjhk_7000  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n \n \n \n \nunmarshall=function(hex,moduleNoStr)\n    log.debug("bjhk_7000 收到数据=%s", hex)\n\t\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal data=hex\n\t\n\tif string.upper(data)=="3E74696D656375720D0A" then\n\t   --请求同步服务器时间\n\t   local timeStr=os.date("%Y%m%d-%H%M%S",os.time())\n\t   local timeResponse="3c74696d656375723a"..StrToHex(timeStr).."0d0a"\n\t   ok=ctx:asend(timeResponse)\n\tend\n\t\n\t\n\t\n\t\n\t\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlog.debug('bjhk_7000 数据有效')\n\t\n\t    sData=HexToStr(hex)\n        log.debug("bjhk_7000:sData是 %s",sData)\n\t\t--获取子字符串表\n        local allResponse=Split(sData,'\\r\\n')\n        --移除表内的“”和nil\n        for k,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n\t\t\t\tlog.debug("bjhk_7000:表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n\t\t\t\ttable.remove(allResponse,k)         \n            end\n        end\n\n\t\t--分析单类数据\n        for k,v in ipairs(allResponse) do\n\t\t\tlog.debug('bjhk_7000 分析单类数据 k=%s,v=%s',k,v)\n\t\t    if string.len(v)==66 then  --数据完整\n\t\t\t   \n\t\t\t\tlocal timess=string.sub(v,11,25)\n\t\t\t\t--local timenow=unixtimestamp(timess)\n\t\t\t    \n\t\t\t\tlocal anglex=tonumber(string.sub(v,30,39));\n\t\t\t\tlocal angley=tonumber(string.sub(v,43,52));\n\t\t\t\tlocal temperature=tonumber(string.sub(v,62,66));\n\t\t\t\tlocal channelId = tonumber(string.sub(v,7,8))\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tlocal childDevice=getDeviceInfo(moduleNoStr,channelId) \n\t\t\t\tlog.debug('bjhk_7000 moduleNoStr=%s,channelId=%s ,anglex=%s,angley=%s',moduleNoStr,channelId,anglex,angley)\n\t\t\t\tif childDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tanglex= tonumber(string.format("%0.5f",anglex)),\n\t\t\t\t\t\t\t\t\t\t\tangley= tonumber(string.format("%0.5f",angley))--,\n              \t\t\t\t\t\t\t\t--temperature=temperature\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\t--time=timenow, --时间无效 \n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\t\n            else\n            \tlog.debug('bjhk_7000 单条数据不完整=%s',v)\t\n\t\t\tend\n\t\tend\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    return resultData\nend\n\nIsValid=function(data)\n\t\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 <65 then\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n        return false\n    end\t\n\n\tif string.lower(string.sub(data,1,2)) ~= '3e' then  --   主动上报 3e487562== >Hub  --采集是3E646174616C6F673A==>datalog:\n            errormsg = 'Data is Invalid'\n            errorcode = 1001\n        return false\n    end\n  \n    return true\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("bjhk_7000 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t    -- log.debug("bjhk_7000:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t \n\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t--log.debug("bjhk_7000 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\t\n\t\t\t \n        \tif tonumber(moduleStrCheck)==tonumber(moduleNoId) then\n\t\t  \t \n                if tonumber(channelStrCheck)==tonumber(channelNoId) then\n\t\t\t\t\tlog.debug("bjhk_7000:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n\t\t\t\t\treturn child\n\t\t\t\tend           \n       \t \tend\n\t\tend\n    else\n       log.debug("bjhk_7000:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nStrToHex=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\n--\nHexToStr=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp=function(datestr)\n    --20180625-125251 \n\tlog.debug("bjhk_7000 datestr=%s",datestr)\n    local year = tonumber(string.sub(datestr,1,4));\n\tlocal month = tonumber(string.sub(datestr,5,6));\n\tlocal day = tonumber(string.sub(datestr,7,8));\n    local hour = tonumber(string.sub(datestr,10,11));\n    local minute = tonumber(string.sub(datestr,12,13));\n    local second = tonumber(string.sub(datestr,14,15));\n    log.debug("bjhk_7000 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlog.debug("bjhk_7000 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\tlog.debug("bjhk_7000 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-06-22 17:20:42.143+08	2018-08-17 17:27:53.468+08	2018-06-22	\N
2b9ab16b-82fd-4ade-9f6b-e9e0ee2cce71	mk_lvdt_1	\N	lvdt	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_lvdt_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--aa040340017a6832aa0503400a52a1\n--"lvdt": 3.78\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x40 and moduleNo==modulenumber  then\n            \n            local lvdt = iota.hexToShort(hex,4,'B') /100.0\n            out.data = {               \n                lvdt = lvdt\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_lvdt_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:27:19.742+08	2018-02-28 18:32:12.224+08	2018-01-08	\N
39322bd3-88ca-4203-8db7-60c93698aeb0	BK_WaterLevel	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 22, endian)             -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n        local scale = 1000000.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \tanglex = xa,\n           \tangley = ya\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2019-03-20 15:27:40.946+08	2019-03-20 15:27:40.946+08	2019-03-20	\N
fd08e5b1-9f9f-45d2-af57-13ae07de6891	CSXL_7600	\N		1.0	5619f241-827a-4e15-b2af-f2666e57ce48	5619f241-827a-4e15-b2af-f2666e57ce48	f	5619f241-827a-4e15-b2af-f2666e57ce48	Lua	start=function()\n   log.debug("CSXL_7600  devices=%s", json.encode(device))\n    ctx:asend('01020304')\nend\n\nonData =function(hex)\n    --主动上传式\n    log.debug('CSXL_7600:Received=>%s', hex)\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    local ErrorCode = IsValid(hex, moduleNo)\n    if ErrorCode then\n        local sensorType = string.sub(hex, 5, 8)\n        local IDX_data = 23\n        if sensorType == '0001' then\n            for i = 1, 36, 1 do\n                local channelNo = i\n                local subdata = string.sub(hex, 23 + (i - 1) * 16, 23 + (i) * 16-1)\n                if subdata ~= '0000000000000000' then  \n          \t\t\t\n                    local Frequency = iota.hexToFloat(subdata, 0, 'B')\n                    local Temp = iota.hexToFloat(subdata, 4, 'B')\n                    --循环插入单通道数据表\n                    log.debug('CSXL_7600 模块号=%s,通道号=%s,subdata=%s', moduleNo, channelNo,subdata)\n                    local childDevice = getDeviceInfo(moduleNo, channelNo)\n                    --\n                    local deviceId\n                    if childDevice ~= nil then\n                        --else\n                        --log.debug("geot_1406:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n                        -- end\n                        deviceId = childDevice.id\n                        log.debug('CSXL_7600 (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n                        log.debug('CSXL_7600 (振弦)子设备deviceId=' .. tostring(deviceId))\n\n                        --if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                        local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                        local K2 = childDevice.uplink.capabilities[1].formula.props.K2\n                        local K3 = childDevice.uplink.capabilities[1].formula.props.K3\n                        local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                        local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                        local To = childDevice.uplink.capabilities[1].formula.props.To\n                        log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s：公式参数=%s,%s,%s,%s,%s,%s', moduleNo, channelNo, K1, K2, K3, Fo, To, Kt)\n                        if K1 == nil or K2 == nil or K3 == nil or Fo == nil or Kt == nil or To == nil then\n                            Phy = nil\n                            log.debug('CSXL_7600:模块号=%s,通道号=%s  参数无效 当前的Frequency是:%s,Temp是%s', moduleNo, channelNo, Frequency, Temp)\n                        else\n                            log.debug('CSXL_7600:模块号=%s,通道号=%s  参数有效 当前的Frequency是:%s,Temp是%s', moduleNo, channelNo, Frequency, Temp)\n                            local Fi = Frequency\n                            Phy = K1 * Fi + K2 * Fi ^ 2 + K3 * Fi ^ 3 - (K1 * Fo + K2 * Fo ^ 2 + K3 * Fo ^ 3) + Kt * (Temp - To)\n                            log.debug('CSXL_7600:模块号=%s,通道号=%s 当前的Phy是:%s', moduleNo, channelNo, Phy)\n                        end\n                    else\n                        log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s deviceId为nil', tostring(moduleNo), tostring(channelNo))\n                    end\n                    local data1 = {\n                        data = {\n                            frequency = tonumber(string.format('%5.3f', Frequency)),\n                            temperature = tonumber(string.format('%5.3f', Temp)),\n                            physicalvalue = tonumber(string.format('%5.3f', Phy))\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                else\n                    --log.debug('CSXL_7600:(振弦)子设备:m=%s,c=%s 数据无效=0x0000000000000000', tostring(moduleNo), tostring(channelNo))\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("CSXL_7600 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            log.debug('CSXL_7600:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                log.debug('CSXL_7600 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                log.debug('CSXL_7600 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('CSXL_7600:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('CSXL_7600:  subdevices是nil')\n        return nil\n    end\nend\n\nIsValid = function(data, moduleNoCheck)\n    log.debug('CSXL_7600 [%s] 开始校验数据', moduleNoCheck)\n    if data == nil or string.len(data) / 2 ~= 301 then\n        errormsg = string.format('数据长度=%s≠301', string.len(data) / 2)\n        errcode = 1002\n        return false\n    end\n\n    local dataModule = tostring(iota.hexToShort(data, 0, 'B'))\n    if moduleNoCheck ~= dataModule then\n        errormsg = string.format('模块号=%s≠%s无效', moduleCheck, dataModule)\n        errcode = 1003\n        return false\n    end\n    log.debug('CSXL_7600 [%s] 校验通过', moduleNoCheck)\n    return true\nend	INLINE	2018-11-23 16:59:01.75+08	2018-12-10 15:39:56.111+08	2018-11-23	\N
e28ad13d-52d4-4ef6-891e-82958b52ba44	LVDT_HY_9115	\N	裂缝计	1.0	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	f	06551138-8f00-4269-9a6d-4e5fa26c71cc	Lua	--"04 项目资料/2017-09/武汉华岩电子有限责任公司/HY65-ascii/传感器ASCII方式通讯控制协议.TXT"\n--测试\n--3635525830303154542B30303031393654FD36355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F7\nstart = function()\n    log.debug('LVDT_HY_9115 start %s, device=%s', 'LVDT_HY_9115.lua', json.encode(device))\nend\n\nonData =function(hex)\n    log.debug('LVDT_HY_9115 收到数据=%s',hex)\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\t\n    local tempture\n    local crackGap\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        log.debug('LVDT_HY_9115 数据有效=%s',hex)\n        local data_str = HexToStr(hex)\n        --转为字符串\n        local sArray = Split(data_str, '65RX')\n        --获取子字符串表\n\n        for i = 1, #sArray do\n            log.debug('LVDT_HY_9115  i=%s ,len=%s', i, #sArray)\n            if sArray[i] ~= '' then\n                log.debug('LVDT_HY_9115  sArray[%s]=%s', i, sArray[i])\n                --循环插入单通道数据表\n                log.debug(' LVDT_HY_9115  string.sub(sArray[%s],-3,-3)=%s', i, string.sub(sArray[i], -3, -3))\n                if string.sub(sArray[i], -3, -3) == 'T' then\n                    --温度计算\n                    local t = string.sub(sArray[i], 6, 12)\n                    log.debug('LVDT_HY_9115  i=%s ,t=%s', i, t)\n                    tempture = tonumber(t) / 10.0\n                else\n                    --裂缝计算\n                    local str_rawData = string.sub(sArray[i], 6, 12)\n                    log.debug('LVDT_HY_9115  i=%s ,str_rawData=%s', i, str_rawData)\n                    crackGap = tonumber(str_rawData) * 0.001\n                    log.debug('LVDT_HY_9115  i=%s ,crackGap=%s', i, tostring(crackGap))\n                    local channelNo = tonumber(string.sub(sArray[i], 1, 3))\n                    local subdevice = getDeviceInfo(1, channelNo) -- 只匹配通道号 不匹配模块号\n                    local data1 = {\n                        data = {\n                            length = crackGap,\n                            tempture = tempture\n                        },\n                        device = subdevice.id,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n                end\n            end\n        end\n    else\n        log.debug('LVDT_HY_9115 数据无效')\n        message = string.format('LVDT_HY_9115 无效的数据长度=%s', string.len(hex))\n        out.result = {code = errcode, msg = message}\n    end\n    local resultData = json.encode(out)\n  log.debug('LVDT_HY_9115 resultData=%s',resultData)\n    ctx:notify(resultData)\nend\n\nIsValid = function(data)\n    if iota.hexToByte(data, 0, 'B') ~= 0x36 or iota.hexToByte(data, 1, 'B') ~= 0x35 or iota.hexToByte(data, 2, 'B') ~= 0x52 or iota.hexToByte(data, 3, 'B') ~= 0x58 then\n        errormsg = '数据无效[数据帧头与尾校验错误]'\n        errcode = 1001\n        return false\n    end\n    return true\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取传感器信息\ngetDeviceInfo =\n    function(moduleid, channel)\n    log.debug('LVDT_HY_9115 查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local submodule = subdevice.uplink.props.module\n            --判断是否是3层采集仪结构\n            local dnlinkObject = json.encode(subdevice.dnlinks)\n            if dnlinkObject ~= '{}' and dnlinkObject ~= 'null' then\n                log.debug('LVDT_HY_9115 三层结构 m=%s, 设备=%s', submodule, json.encode(subdevice))\n                for k, sublink in pairs(subdevice.dnlinks) do\n                    --log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n                    for u, sub_subdevice in pairs(sublink.devices) do\n                        --log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n                        local sensormodule = sub_subdevice.uplink.props.module\n                        local sensorchannel = sub_subdevice.uplink.props.channel\n                        if tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n                            --log.debug('LVDT_HY_9115 m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n                            return sub_subdevice\n                        else\n                           -- log.debug('LVDT_HY_9115 m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s', moduleid, sensormodule, channel, sensorchannel, json.encode(sub_subdevice))\n                        end\n                    end\n                end\n            else\n                local subchannel = subdevice.uplink.props.channel\n               -- log.debug('LVDT_HY_9115 两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n                if tonumber(subchannel) == tonumber(channel) then -- 只比较 模块号 tostring(submodule) == tostring(moduleid) and\n                   --log.debug('LVDT_HY_9115 m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n                    return subdevice\n                else\n                    log.debug('LVDT_HY_9115 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n                end\n            end\n        end\n       -- log.debug('LVDT_HY_9115 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug('LVDT_HY_9115 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend	INLINE	2017-11-06 17:31:11.879+08	2019-01-18 18:19:32.73+08	2017-11-04	\N
2e03f731-c82a-4513-ab1a-610b99c3d1a1	fm_flow_1	\N	富马流量计	1.0	10f6acf8-d569-4bb6-8f23-f97b1664d309	10f6acf8-d569-4bb6-8f23-f97b1664d309	f	10f6acf8-d569-4bb6-8f23-f97b1664d309	Lua	start=function()\n    log.debug("start %s, ctx=", "fm_flow_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 7, endian)\n    buff=iota.appendHexByte(buff, 0xd6, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 0x06, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    --01030600bc614e00034f44\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==34) then\n        \n        local totalIntFlow=iota.hexToInt(hex,3,'B')  \n        local totalDecimalPiont=iota.hexToShort(hex,7,'B') \n        local totalFlow=totalIntFlow/\tmath.pow(10,totalDecimalPiont)\n        local transientIntFlow=iota.hexToInt(hex,9,'B')  \n        local transientDecimalPiont=iota.hexToShort(hex,13,'B') \n        local transientFlow=transientIntFlow/\tmath.pow(10,transientDecimalPiont)\n        out.data = {\n            totalFlow=totalFlow,\n            transientFlow=transientFlow\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-11-22 15:22:18.834+08	2018-02-28 18:32:12.219+08	2017-11-22	\N
6c84c330-794c-4d18-9113-6d2a91d2abd6	an	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	---[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 2, endian)             -- 2: 类型=1\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, tonumber(moduleNo), endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 03, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, "L" ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,5000)     --下发的码流\n    local result="{}"\n    if ok then              --下发是否成功\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={ },\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\n        local scale = 100.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,3,'B')/100.0-40;\n        local Hem = iota.hexToInt(hex,5,'B')/scale;\n\t\tloc  pres=iota.hexToInt(hex,7,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \thumidity = Hem,  \n\t\t\tpressure=pres,\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,0,'B')) then\t--判读是否模块2\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n	INLINE	2019-03-19 15:54:17.198+08	2019-03-19 18:04:47.432+08	2019-03-19	\N
4ab9cad5-76ed-4cc1-99b0-9543fc1c0533	BDS_WSD	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： 产品协议/温湿度传感器FS-BDS-WSD通讯协议\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "BAS_ACQ.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\tlog.debug("BAS_TW 设备模块通道 接口获取 m=%s",moduleNo)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\tlog.debug("BDS_WSD 设备模块通道 属性获取 m=%s",moduleNo)\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n    buff=iota.appendHexWord(buff, 1 ,endian)               -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian)               -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \tlocal data= iota.hexToShort(hex,3,'B')\n        local Temp = (data - 2000)/100;\n        local humidy = iota.hexToShort(hex,5,'B')/100;\n            \n        out.data = {\n            Temp=Temp,\n           \thumidy = humidy\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('BDS_WSD 开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend\n	INLINE	2019-04-17 14:50:21.701+08	2019-11-21 09:40:12.237+08	2019-04-17	\N
d293d9df-57d3-4156-b626-195aece1b63c	RN-200DW	\N	温度传感器	1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--// \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "RN-200DW ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("RN-200DW 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("RN-200DW  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\t\t\n\t\tlog.debug('RN-200DW %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("RN-200DW  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--010300000001840A\n--010302012B6D71\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/10\n\t\tlog.debug('RN-200DW  %s  温度',Temp)\n\t\t\n\t\t\n       \n       \n        out.data = {\n\t\t\tTemp=Temp,\t\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('RN-200DW %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('RN-200DW 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-12-30 13:25:17.355+08	2019-12-30 13:40:24.354+08	2019-12-30	\N
36938573-512e-46a3-a00f-1761d76ed4b0	fs_pressure_9005	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//01 协议文档/6月第1周/上海佑富实业有限公司/【佑富485协议】液位压力YF-17通信协议.doc\n--[[\n协议号: 9005;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("load script %s, moduleId=%s", "fs_pressure_9005", device.uplink.props.moduleId or "[nil]")\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_pressure_9005 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_pressure_9005 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n--010304be40e6121542\n--moduleId=1\n--"pressure": -0.188378\nfunction protocol_encode(moduleNoStr)\n\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE);  -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);  --功能码  0x03采集        \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x02, BE);\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  \n--原始数据  \nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(hex,moduleNoCheck)\n    if ErrorCode then\n    log.debug('校验正确 开始解析')\n\tlog.debug(string.format('decode: %s', data));\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); --  :压强\n\t\t\t\t\n\t\tout.data = {\n\t\tpressure=pressure\n\t\t};\t\n\telse\n        out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('开始校验')\n    if data == nil or string.len(data)/2 ~= 9  then\n        errormsg = 'Data is nil or InvalidLength'\n        errcode = 1001\n        return false\n    end\n    log.debug('长度校验通过')\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n   log.debug('CMD校验通过')\n    if moduleNoCheckStr ~= tostring(iota.hexToByte(data,0,'B')) then \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    --log.debug('模块号校验通过')\n    return true\nend\n	INLINE	2017-12-05 14:51:15.523+08	2018-06-01 17:39:33.304+08	2017-12-05	\N
d45fde71-90ee-49e8-bfdd-da76b23deb24	fs_cl	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start = function()\n    log.debug("fs_cl:device=%s",json.encode(device))\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_vibf2",\n        O = "S",\n        P = { } -- 荷载\n    }\n\n\n    local linkcnt = #(device.dnlinks)\n\n\n  \tlocal trmode = 0\n  \tif device.props.triggermode == "软件触发" then\n    \ttrmode = 0\n    end\n  \tif device.props.triggermode == "模拟硬件触发" then\n    \ttrmode = 1\n    end\n  \tif device.props.triggermode == "数字硬件触发" then\n    \ttrmode = 2\n    end\n  \tif device.props.triggermode == "硬件模拟数字触发" then\n    \ttrmode = 3\n    end\n\n    local demode = 0\n  \tif device.props.devicermode  == "从设备异步" then\n    \tdemode = 0\n    end\n  \tif device.props.devicermode  == "主设备异步" then\n    \tdemode = 1\n    end\n  \tif device.props.devicermode  == "主设备同步" then\n    \tdemode = 2\n    end\n  local set = {\n  \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n    PA=device.props.uploadprocess,\n    TT = trmode, \n    TI=tonumber(device.props.triggerint),\n    DM=demode, --设备工作模式\n    ISH=tonumber(device.props.hour),--间隔触发启动时间\n    ISM=tonumber(device.props.minute),\n    ISS=tonumber(device.props.second),\n    IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n    TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n    TTS={},CHS ={}\n  }\n  mop.P = set\n  local arry1 = false\n  local arry2 = false\n  local arry3 = false\n  local arry4 = false\n  local arry5 = false\n  local arry6 = false\n\tlocal arry=  Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming1)\n\t\tarry1 = true\n\tend\n\tarry=  Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming2)\n\t\tarry2 = true\n\tend\n\tarry=  Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming3)\n\t\tarry3 = true\n\tend\n\tarry=  Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming4)\n\t\tarry4 = true\n\tend\n\tarry=  Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\ttable.insert(mop.P.TTS, startiming5)\n\t\tarry5 = true\n\tend\n\tarry=  Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 =  {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\ttable.insert(mop.P.TTS, startiming6)\n\t\tarry6 = true\n\tend\n\t\n   \tfor i = 1, linkcnt, 1 do \n        log.debug("fs_cl:dev=%s", json.encode(dev))\n        local link = device.dnlinks[i]\n        local dev = link.devices[1]\n        local dev_inf = link.devices[1].uplink\n    \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n    \tlocal trirmode = 0\n        if dev_inf.props.triggermode  == "绝对值" then\n            trirmode = 0\n        end\n        if dev_inf.props.triggermode  == "上升沿" then\n            trirmode = 1\n        end\n        if dev_inf.props.triggermode  == "下降沿" then\n            trirmode = 2\n        end\n        if dev_inf.props.triggermode  == "峰峰值" then\n            trirmode = 3\n        end\n        local joinmode = 0\n        if dev_inf.props.triggerjoin  == "不参与" then\n            joinmode = 0\n        end\n        if dev_inf.props.triggerjoin  == "参与" then\n            joinmode = 1\n        end\n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n        local sensor = {\n            CH = tonumber(dev_inf.props.channel),--通道号\n            GA = tonumber(dev_inf.props.amplification),--GainAmplifier放大倍数\n            SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n            FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n            DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n            DAS = dasvalue,--DAS, 硬件DA启用? \n            AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n            TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n            TM = trirmode,--TriggerMode触发方式\n            TJ = joinmode,--TriggerJoin 参与触发方式\n            SR = samolepoint ,--SampleRate 采样点数1\n            LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n        }\n        table.insert(mop.P.CHS, sensor)                \n    end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub("\\"TTS\\":null","\\"TTS\\":[{},{},{},{},{},{}]")\n\tlog.debug("fs_cl finish resultstr = %s",resultstr)\n\tlocal darry=  Split(resultstr,",")\n\n\n\t--\n\tlocal arrystr = ""\n\tif arry1 then\n\t\tlocal dstr = darry[25]..","..darry[26]..","\n\t\tlocal  sttr = Split(darry[27],"}")\n\t\tdstr = dstr..sttr[1].."}"\n\t\tlog.debug("fs_cl:dstr=%s", dstr)\t\n\t\tlocal farry=  Split(dstr,"}")\n\t\tlocal ff =farry[1]\n\t\tlog.debug("fs_cl:ff=%s", ff)\n\t\tff = ff.."},{},{},{},{},{},{}"\n\t\tlog.debug("fs_cl:ff1=%s", ff)\n\t\tlocal gstr = ff\n\t\t\n\t\tlocal v1 = string.sub(dstr,7,-1)\n\t\tlocal v2 = string.sub(gstr,7,-1)\n\t\tlog.debug("fs_cl:toto=%s too = %s", v1,v2)\n\t\tresultstr =\tresultstr:gsub(v1,v2)\n\t\tlog.debug("fs_cl:sd=%s", resultstr)\n\t\tif arry2 then\n\t\t\tif arry3 then\n\t\t\t\tif arry4 then\n\t\t\t\t\tif arry5 then\n\t\t\t\t\t\tif arry6 then\n\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\t\n\tend\n\tlog.debug("fs_cl finish parse = %s",resultstr)\n    req.payload = resultstr\n   \t\n    log.debug("fs_cl request=%s", json.encode(req))\n\n    local ok, ack = ctx:ssend(req, 60000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n    log.debug("fs_cl result=%s", json.encode(result))\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n\nfunction Split(szFullString, szSeparator)  \n\tlocal nFindStartIndex = 1  \n\tlocal nSplitIndex = 1  \n\tlocal nSplitArray = {}  \n\twhile true do  \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)  \n\t\tif not nFindLastIndex then  \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))  \n\t\t\tbreak  \n\t\tend  \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)  \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)  \n\t\tnSplitIndex = nSplitIndex + 1  \n\tend  \n\treturn nSplitArray  \nend  	INLINE	2019-08-30 17:01:33.718+08	2019-08-30 19:59:13.521+08	2019-08-30	\N
9e6be8c0-53f7-424e-8e67-adb671494261	testTemp	\N		1.0	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	f	f88cbfa3-0609-45d9-92aa-5108b5a4ac6f	Lua	--	INLINE	2018-12-08 09:58:54.543+08	2018-12-08 09:58:54.543+08	2018-12-08	\N
f4443305-4848-4a3e-b1bc-f5ad10a87518	fs_renke_yc	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//04 项目资料/仁科扬尘/网络型采集器通信协议V11_201807261651431.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n--0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\n\nstart = function()\n    log.debug('load script %s, moduleId=%s', 'rk_yc', device.props.moduleId or '[nil]')\nend\n\nonData = function(hex)\n    local out = {\n        data = {},\n        result = {}\n    }\n    local device_module = device.props.moduleId or device.uplink.props.module\n    local data = hex\n    log.debug('rk_yc [%s] onData hex=%s ', device_module, hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode == true then\n        if string.sub(data, 21, 22) == '33' and (string.sub(data, 23, 24) == '1d' or string.sub(data, 23, 24) == '1D') then\n            --登陆命令\n            local req = '6888888888888868'\n            local endian = 'B'\n            req = iota.appendHexByte(req, 0x20, endian)\n            req = iota.appendHexByte(req, 0x06, endian)\n            req = iota.appendHexByte(req, 0x00 + 0x33, endian)\n            req = iota.appendHexByte(req, 0x1D, endian)\n            local len = string.len(data)\n            local moduleNo = string.sub(data, -12, -5)\n            log.debug('rk_yc [%s] moduleNo=%s ', device_module, moduleNo)\n            local moduleId1 = string.sub(moduleNo, 1, 2)\n            local moduleId2 = string.sub(moduleNo, 3, 4)\n            local moduleId3 = string.sub(moduleNo, 5, 6)\n            local moduleId4 = string.sub(moduleNo, 7, 8)\n\n            req = iota.appendHexByte(req, tonumber(moduleId1, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId2, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId3, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId4, 16), endian)\n\n            crc = LCR(0, req)\n            log.debug('rk_yc [%s] crc=%s ', device_module, crc)\n            req = iota.appendHexByte(req, crc, endian)\n            req = iota.appendHexByte(req, 0x16, endian)\n            log.debug('rk_yc [%s] ssend req=%s ', device_module, req)\n            local ok, ack = ctx:ssend(req, 3000)\n        end\n        if string.sub(data, 21, 22) == '36' and (string.sub(data, 23, 24) == '1d' or string.sub(data, 23, 24) == '1D') then\n            --节点1\n            log.debug('rk_yc [%s] 解析数据', device_module)\n            local datahex = string.sub(data, 25, 34)\n            local data11, data12 = Calc(datahex, 3)\n            local data1 = string.format('%02X', data11 - 0x33) .. string.format('%02X', data12 - 0x33)\n            local data21, data22 = Calc(datahex, 7)\n            local data2 = string.format('%02X', data21 - 0x33) .. string.format('%02X', data22 - 0x33)\n            --节点2\n            datahex = string.sub(data, 35, 44)\n            local data31, data32 = Calc(datahex, 7)\n            local data3 = string.format('%02X', data31 - 0x33) .. string.format('%02X', data32 - 0x33)\n            --节点3\n            datahex = string.sub(data, 45, 54)\n            local data41, data42 = Calc(datahex, 3)\n            local data51, data52 = Calc(datahex, 7)\n            local data4 = string.format('%02X', data41 - 0x33) .. string.format('%02X', data42 - 0x33)\n            local data5 = string.format('%02X', data51 - 0x33) .. string.format('%02X', data52 - 0x33)\n\n            --节点4\n            datahex = string.sub(data, 55, 64)\n            local data61, data62 = Calc(datahex, 3)\n            local data71, data72 = Calc(datahex, 7)\n            local data6 = string.format('%02X', data61 - 0x33) .. string.format('%02X', data62 - 0x33)\n            local data7 = string.format('%02X', data71 - 0x33) .. string.format('%02X', data72 - 0x33)\n            --节点6\n            datahex = string.sub(data, 75, 84)\n            local data81, data82 = Calc(datahex, 7)\n            local data8 = string.format('%02X', data81 - 0x33) .. string.format('%02X', data82 - 0x33)\n            --节点7\n            datahex = string.sub(data, 85, 94)\n            local data91, data92 = Calc(datahex, 7)\n            local data9 = string.format('%02X', data91 - 0x33) .. string.format('%02X', data92 - 0x33)\n\n            local pm10 = iota.hexToShort(data1, 0, 'L')\n            local pm25 = iota.hexToShort(data2, 0, 'L')\n            local noise = iota.hexToShort(data3, 0, 'L') / 10\n            local humidity = iota.hexToShort(data5, 0, 'L') / 10\n            local temperature = iota.hexToShort(data4, 0, 'L') / 10\n            local wind = iota.hexToShort(data6, 0, 'L')\n            local speed = iota.hexToShort(data7, 0, 'L') / 10\n            local direction = iota.hexToShort(data8, 0, 'L')\n            local TSP = iota.hexToShort(data9, 0, 'L')\n\n            out.data = {\n                temperature = tonumber(string.format('%0.1f', temperature)),\n                humidity = tonumber(string.format('%0.1f', humidity)),\n                pm25 = tonumber(string.format('%0.0f', pm25)),\n                pm10 = tonumber(string.format('%0.0f', pm10)),\n                noise = tonumber(string.format('%0.1f', noise)),\n                speed = tonumber(string.format('%0.1f', speed)),\n                direction = tonumber(string.format('%0.1f', direction)),\n                wind = tonumber(string.format('%0.1f', wind)),\n                TSP = tonumber(string.format('%0.1f', TSP))\n            }\n            if out.data.pm25 < 0 or out.data.pm25 > 700 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.pm10 < 0 or out.data.pm10 > 700 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.speed < 0 or out.data.speed > 24.5 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.direction < 0 or out.data.direction > 360 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.temperature < -40 or out.data.temperature > 60 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.humidity < 0 or out.data.humidity > 100 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            if out.data.noise < 0 or out.data.noise > 200 then\n                out.result.code = 5001\n                out.result.msg = 'data outof range!!'\n                out.data = {}\n            end\n            local req = '6888888888888868'\n            local endian = 'B'\n            req = iota.appendHexByte(req, 0x20, endian)\n            req = iota.appendHexByte(req, 0x06, endian)\n            req = iota.appendHexByte(req, 0x03 + 0x33, endian)\n            req = iota.appendHexByte(req, 0x1D, endian)\n            local moduleNo = string.sub(data, -12, -5)\n            log.debug('rk_yc [%s] moduleNo1=%s ', device_module, moduleNo)\n            local moduleId1 = string.sub(moduleNo, 1, 2)\n            local moduleId2 = string.sub(moduleNo, 3, 4)\n            local moduleId3 = string.sub(moduleNo, 5, 6)\n            local moduleId4 = string.sub(moduleNo, 7, 8)\n            req = iota.appendHexByte(req, tonumber(moduleId1, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId2, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId3, 16), endian)\n            req = iota.appendHexByte(req, tonumber(moduleId4, 16), endian)\n            crc = LCR(0, req)\n            req = iota.appendHexByte(req, crc, endian)\n            req = iota.appendHexByte(req, 0x16, endian)\n            local ok, ack = ctx:ssend(req, 3000)\n        end\n    else\n        -- statements\n        out.result = {code = errorcode, msg = errormsg}\n    end\n  \tlog.debug('rk_yc [%s] out =%s ', device_module, json.encode(out))\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid = function(data)\n    local datalength = string.len(data)\n    if string.len(data) / 2 == 22 or string.len(data) / 2 == 89 then\n    else\n        errormsg = 'data length is wrong'\n        errorcode = 1001\n        return false\n    end\n\n    if\n        string.sub(data, 1, 2) ~= '68' or string.sub(data, 3, 4) ~= '88' or string.sub(data, 5, 6) ~= '88' or\n            string.sub(data, 7, 8) ~= '88'\n     then\n        errormsg = 'Data is Invalid'\n        errorcode = 1001\n        return false\n    end\n\n    return true\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--校验和\nLCR = function(start, data)\n    --log.debug('rk_yc data=%s ', data)\n    local sum = 0\n    for i = start, string.len(data) / 2 - 1 do\n        if string.sub(data, 1 + 2 * i, 2 * (i + 1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data, 1 + 2 * i, 2 * (i + 1)), 16)) % 0xffff\n        end\n    end\n    sum = bit.band(sum, 0xff)\n    return sum\nend\n\n--校验和\nCalc = function(data, offset)\n    --log.debug('rk_yc splitdata=%s ', data)\n    local data1 = tonumber(string.sub(data, offset, offset + 1), 16)\n    local data2 = tonumber(string.sub(data, offset + 2, offset + 3), 16)\n    if tonumber(string.sub(data, offset, offset + 1), 16) < 0x33 then\n        data1 = tonumber('1' .. string.sub(data, offset, offset + 1), 16)\n    end\n    if tonumber(string.sub(data, offset + 2, offset + 3), 16) < 0x33 then\n        data2 = tonumber('1' .. string.sub(data, offset + 2, offset + 3), 16)\n    end\n    --log.debug('rk_yc splitdata1=%s  splitdata1=%s', data1, data2)\n    return data1, data2\nend\n	INLINE	2018-12-03 15:01:14.34+08	2020-05-29 17:51:10.875+08	2018-12-03	\N
666451eb-2cea-4777-83de-e5d671a5be5f	ryzh_co2_2510	\N	锐研智华	1.0	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	f	e3655afc-a2a8-4bc3-801a-9c3019705a27	Lua	--//04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/ry-vs09-485二氧化碳说明书.doc\nstart=function()\n    log.debug("start %s, ctx=", "ryzh_co2_2510.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--0103020014B84B\n--moduleId=1\n--"co2": 20\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==7) then\n        \n       local co2=iota.hexToShort(hex,3,'B')  \n        out.data = {\n           co2=co2\n         \n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-11-16 16:55:01.822+08	2018-02-28 18:32:12.221+08	2017-11-16	\N
22419cd8-d0d1-4f79-92f4-17976bd5dd42	jcj_temp_1155	\N	北京九纯健JCJ100R	1.0	ed254182-aeaf-4f3c-9ee6-480154f64cae	ed254182-aeaf-4f3c-9ee6-480154f64cae	f	ed254182-aeaf-4f3c-9ee6-480154f64cae	Lua	start=function()\n    log.debug("start %s, ctx=", "jcj_temp_1155.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 0, endian) \n    buff=iota.appendHexWord(buff, 1, endian)             -- 3: 类型=1\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 4: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp)\n        --print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==7) then\n        --   模块  功能       数据长度           温度             CRC\n        --   1   1   1     2     2\n        --   01040203e8b98e   moduleId=1\n        --print("parsing data", hex)\n        \n        local temp = iota.hexToShort(hex,3,'B')/10.0;\n        out.data = {\n            temp=temp, \n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Temp":'..temp..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-08-28 19:50:41.085+08	2018-02-28 18:32:12.222+08	2017-08-26	\N
97b6dd76-4b4c-42e7-88a4-52e338aab627	jdhs_gas_2511	\N	聚到合盛	1.0	ff0414b7-505b-4d85-bb09-f99bac5262a1	ff0414b7-505b-4d85-bb09-f99bac5262a1	f	ff0414b7-505b-4d85-bb09-f99bac5262a1	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("load script %s, moduleId=%s", "jdhs_gas_2511.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n    log.debug("jdhs_gas_2511  onData(%s), dev=%s", hex, json.encode(device) )\n    local out={\n        type=1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local PM10 =iota.hexToInt(hex,3,'B')\n        local PM25 =iota.hexToInt(hex,11,'B')\n        local TSP =iota.hexToInt(hex,19,'B')\n        out.data = {                --需要测试\n        PM25 = PM25,\n        PM10 = PM10,\n        TSP=TSP\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n  log.debug("jdhs_gas_2511  Data -- %s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    local moduleNo=iota.hexToByte(data,0,'B')\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    if tonumber(device.props.moduleId)~=moduleNo then\n        errormsg = 'moduleId is wrong'\n        errcode = 1001\n        return false\n    end  \n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-10-31 15:04:32.708+08	2018-02-28 18:32:12.222+08	2017-10-29	\N
d7b4876b-9c7a-4446-a47a-0d99d98b117b	jzyg_weather_26	\N	锦州阳光气象科技有限公司	1.0	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	f	e54b85b0-151e-4b74-b360-a8ae65addd46	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("load script %s, moduleId=%s", "jzyg_weather_26.lua", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n    --350001030C17122007400703FF03FF007D007D007D007D007D010C0254FF9A2855FF99001700700068010E02F702F700CA008700171EA61FAA007A12AC00907171\n    log.debug("jzyg_weather_26  onData(%s), dev=%s", hex, json.encode(device) )\n    local out={\n        type=1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local radiation1day =iota.hexToShort(hex,11,'B')*0.001\n        local radiation2day =iota.hexToShort(hex,13,'B')*0.001\n        local groundTemperature1 =iota.hexToShort(hex,15,'B')*0.1\n        local groundTemperature2 =iota.hexToShort(hex,17,'B')*0.1\n        local groundTemperature3 =iota.hexToShort(hex,19,'B')*0.1\n        local groundTemperature4 =iota.hexToShort(hex,21,'B')*0.1\n        local groundTemperature5 =iota.hexToShort(hex,23,'B')*0.1\n        local temperature =iota.hexToShort(hex,25,'B')*0.1\n        local humidity =iota.hexToShort(hex,27,'B')*0.1\n        local dewPoint =iota.hexToShort(hex,29,'B')*0.01\n        local airPressure =iota.hexToShort(hex,31,'B')*0.1\n        local altitude =iota.hexToShort(hex,33,'B')*1\n        local windSpeed =iota.hexToShort(hex,35,'B')*0.1\n        local windSpeed2mins =iota.hexToShort(hex,37,'B')*0.1\n        local windSpeed10mins =iota.hexToShort(hex,39,'B')*0.1\n        local windDirection =iota.hexToShort(hex,41,'B')*1\n        local radiation1 =iota.hexToShort(hex,43,'B')*1\n        local radiation2 =iota.hexToShort(hex,45,'B')*1\n        local groundHumidity =iota.hexToShort(hex,47,'B')*0.1\n        local voltage =iota.hexToShort(hex,49,'B')*0.1\n        local rainfall =iota.hexToShort(hex,51,'B')*0.1\n        local visibility =iota.hexToShort(hex,53,'B')*1\n        local visibility10mins =iota.hexToShort(hex,55,'B')*1\n        local sunshine =iota.hexToShort(hex,57,'B')*1\n        local CO2 =iota.hexToShort(hex,59,'B')*0.1\n        local eCompass =iota.hexToShort(hex,61,'B')\n\n        out.data = {                --需要测试\n        radiation1day = radiation1day,\n        radiation2day = radiation2day,\n        groundTemperature1=groundTemperature1,\n        groundTemperature2=groundTemperature2,\n        groundTemperature3=groundTemperature3,\n        groundTemperature4=groundTemperature4,\n        groundTemperature5=groundTemperature5,\n        temperature=temperature,\n        humidity=humidity,\n        dewPoint=dewPoint,\n        airPressure=airPressure,\n        altitude=altitude,\n        windSpeed=windSpeed,\n        radiation1=radiation1,\n        windSpeed2mins=windSpeed2mins,\n        windSpeed10mins=windSpeed10mins,\n        windDirection=windDirection,\n        radiation1=radiation1,\n        radiation2=radiation2,\n        groundHumidity=groundHumidity,\n        voltage=voltage,\n        rainfall=rainfall,\n        visibility=visibility,\n        visibility10mins=visibility10mins,\n        sunshine=sunshine,\n        CO2=CO2,\n        eCompass=eCompass,\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n  log.debug("jzyg_weather_26  Data -- %s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    local module_check=iota.hexToShort(data,1,'B')\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jzyg_weather_26 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jzyg_weather_26 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n    if tonumber(moduleNo)~=module_check then\n        errormsg = 'moduleId is wrong'\n        errcode = 1001\n        return false\n    end  \n    if string.len(data)~=130 then\n        errormsg = 'length is not fit'\n        errcode = 1001\n        return false\n    end  \n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-12-20 10:06:01.932+08	2018-03-30 09:47:11.934+08	2017-12-20	\N
a2497ec0-71a1-4611-85eb-12a18c8aaa34	galaxyz_laser_9502	\N	上海盖勒克激光测距传感器	1.0	4544878d-c203-4924-a38f-5486d69d7613	4544878d-c203-4924-a38f-5486d69d7613	f	4544878d-c203-4924-a38f-5486d69d7613	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n \nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n--02 协议分析/2017-03/1月第2周/华东--上海盖勒克--激光测距传感器/GLS-B40 说明书--上海盖勒克.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "galaxyz_laser_9502.lua", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module\n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n    buff=iota.appendHexByte(buff, moduleNo, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 6, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexByte(buff, 2, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexByte(buff,LCR(buff),endian)             -- 5: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    \tlog.debug("laser_9502:m=%s out=%s",moduleNo,result)\n\t\tctx:done(result)\n\telse\n\t    log.debug("laser_9502: m=%s,received is not ok ",moduleNo)\n    end\n    \nend\n\n--6406823030302e333131c1\n--moduleId=100\n--"distance": 0.311\nunmarshall=function(hex,moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    log.debug("laser_9502: m=%s,received hex=%s",moduleNoStr,hex)\n    if IsValid(hex,moduleNoStr) then\n        \n        local len1=iota.hexToByte(hex,3,'B')\n        local len2=iota.hexToByte(hex,4,'B')\n        local len3=iota.hexToByte(hex,5,'B')\n        local len4=iota.hexToByte(hex,6,'B')\n        local len5=iota.hexToByte(hex,7,'B')\n        local len6=iota.hexToByte(hex,8,'B')\n        local len7=iota.hexToByte(hex,9,'B')\n\n        local length=string.char(len1,len2,len3,len4,len5,len6,len7) \n        log.debug("laser_9502: m=%s ,length=%s",moduleNoStr,length)\n        local Distance=tonumber(length) * 1000  -- m --> mm\n        out.data = {\n           distance=Distance\n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else      \n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\nLCR=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end     \n    lcr = bit:_rshift(lcr,8) + bit:_and(lcr,0xff)\n  \tlcr = lcr + bit:_rshift(lcr,8)\n  \tlocal value = bit:_and(bit:_not(lcr) + 1,0xff)\n    return value\nend \n \nIsValid=function(data,moduleStrCheck)\n    log.debug('laser_9502:开始校验 data=%s',data)\n    if data == nil or string.len(data)/2 ~= 11  then\n        errormsg = 'Data is nil or InvalidLength'\n        errcode = 1001\n        return false\n    end\n    log.debug("laser_9502: "..'长度校验通过')\n    if iota.hexToByte(data,1,'B') ~= 0x06 or iota.hexToByte(data,2,'B') ~= 0x82 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n   log.debug("laser_9502: "..'CMD校验通过')\n    if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug("laser_9502: m=%s 数据校验通过",moduleStrCheck)\n    return true\nend\n\n\n \n\n	INLINE	2017-09-07 19:39:25.018+08	2018-04-16 18:22:01.406+08	2017-09-03	\N
cbf73de3-cf1e-400f-b1b6-af60c861a09f	hzyz_mass_5301	\N	805TS  & 805BS	1.0	b1797f0b-c735-409e-89f5-ab695859f076	b1797f0b-c735-409e-89f5-ab695859f076	f	b1797f0b-c735-409e-89f5-ab695859f076	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "hzyz_mass_5301.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module \n\tlog.debug("hzyz_mass_5301 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n    buff=iota.appendHexByte(buff,0x01, endian)  \n    buff=iota.appendHexByte(buff, 0x30, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian) \n    buff=iota.appendHexByte(buff, 0x47, endian) \n\tbuff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x74, endian)                      \n\n    log.debug("hzyz_mass_5301,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("hzyz_mass_5301  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01310220202020313037324b4720033b\n--1072kg\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("hzyz_mass_5301 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local hexMass =string.sub(hex,7,-11)\n\t\tlocal mass =tonumber(HextoStr(hexMass))\n\t\t\n        log.debug("hzyz_mass_5301  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            mass=tonumber(string.format('%0.3f',mass))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("hzyz_mass_5301 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 16 then\n        errormsg = string.format('数据长度无效[%s]≠16',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n    if string.sub(data, 1, 2) ~= '01'  then\n        errormsg = string.format('无效的数据指令=%s', data)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n	INLINE	2018-12-08 17:36:00.638+08	2018-12-14 09:48:36.219+08	2018-12-08	\N
8338feff-fcd2-4920-9601-149a610d9887	hg_Inclination_1515	\N		1.0	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	f	91d43dcc-b4ec-4aba-91d9-2b1509cff4db	Lua	--//01 协议文档/5月第1周/上海辉格科技发展有限公司/SST20 通讯协议 -- RS485 ModBus协议  V1.1 2014-10-20.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "hg_Inclination_1515", device.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n        buff=iota.appendHexByte(buff, 0x03, endian)  \n        buff=iota.appendHexByte(buff, 0xe8, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x03, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp)\n        else\n            log.debug("SSend error!")\n        end\n        ctx:done(result)\nend\n\n --0104068540008a1f7c56f2\n        --moduleId=1      range=(-10,10)\n        --"angleX": -19.180272835474717,\n\t\t--"angleY": 0.08423108615375224,\n\t\t--"temp": 30.74739829706717\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then     \n\t\tlocal range=device.props.range\n        local subrange=split(range,',')\n        --log.debug('subrange[1]'..subrange[1])\n        --去除括号\n        subrange[1]=string.sub(subrange[1],2,-1)\n        subrange[2]=string.sub(subrange[2],1,-2)\n        local angleX = iota.hexToShort(hex,3,'B')/32767.0*(tonumber(subrange[2])-tonumber(subrange[1]))\n        local angleY = iota.hexToShort(hex,5,'B')/32767.0*(tonumber(subrange[2])-tonumber(subrange[1]))\n        local temp=iota.hexToShort(hex,7,'B')/32767.0*125.0\n       \n        out.data = {\n            angleX=angleX,\n            angleY = angleY,\n\t\t\ttemp=temp\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 11 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\nsplit=function(s, delim)\n    if type(delim) ~= "string" or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n    local pos = string.find (s, delim, start, true) -- plain find\n        if not pos then\n          break\n        end\n\n        table.insert (t, string.sub (s, start, pos - 1))\n        start = pos + string.len (delim)\n    end\n    table.insert (t, string.sub (s, start))\n\n    return t\nend\n\t\n   \n	INLINE	2017-12-06 09:41:17.413+08	2018-02-28 18:32:12.222+08	2017-12-06	\N
e5eeef06-b9fc-4418-8874-308658cdc66d	ml_Level_1910	\N		1.0	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	f	f319cb97-0bfb-4e76-a02d-89c4ce98f5b4	Lua	--//01 协议文档/6月第4周/上海麦伦仪表有限公司/分体PS/超声波液位仪ModBus标准协议.doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ml_Level_1910", device.props.moduleId or "[nil]")\n\n\t\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\n    if tonumber(device.props.moduleId) > 255 or tonumber(device.props.moduleId) < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff, device.props.moduleId, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian) \t\t\n        buff=iota.appendHexByte(buff, 0x04, endian)                         \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\n        ok,resp=ctx:ssend(buff,15000)\n        local result="{}"\n        if ok then\n            result = unmarshall(resp)\n        end\n        ctx:done(result)\n    end\nend\n--020308406449ba3fb76c8bbdb2\n--moduleId=2\n--level = 3567, \n--emptyHigh=1433\n\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\n        local level = iota.hexToFloat(hex,3,'B')*1000.0;\n        local emptyHigh=iota.hexToFloat(hex,7,'B')*1000.0;\n        out.data = {\n            level = level, \n\t\t\temptyHigh=emptyHigh\n        }\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 13  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid ack moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-12-06 13:39:02.208+08	2018-02-28 18:32:12.222+08	2017-12-06	\N
598d9e9a-4e6f-4ce0-b6f0-1f2b825fb7fc	nengh_FM_1	\N	PM	1.0	ad0cd544-aed4-4670-9d17-f3e717a9a59b	ad0cd544-aed4-4670-9d17-f3e717a9a59b	f	ad0cd544-aed4-4670-9d17-f3e717a9a59b	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, moduleId=%s", "nengh_FM_1.lua",device.props.moduleId or "null")\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexWord(buff, 1, endian) \n    buff=iota.appendHexWord(buff, 2, endian) \n    buff=iota.appendHexCrc(buff, 'L' ,0)\n  \n\n    log.debug("nengh_FM_1 ssend= %s", buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    log.debug("nengh_FM_1: Unmarshall data is %s", hex)\n    --4f0404007b00490000\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n      \n        local PM10 = iota.hexToShort(hex,3,'B')\n        local PM25 = iota.hexToShort(hex,5,'B')\n\n        out.data = {\n            PM10=PM10,\n            PM25=PM25,  \n        }\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n\n\n \n\n\n \n\n	INLINE	2017-11-23 10:22:58.429+08	2018-02-28 18:32:12.222+08	2017-11-21	\N
6bf88814-ee3c-4c50-b47e-e60248e91670	mqtt	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	start=function()\n  --[[\n  log.debug("start")\n  local msg={\n    o="u",\n    t="DeviceMeta",\n    k={\n      id="08c0c71f-fa68-4ae4-bae0-5ab9e27f2f75"\n    }\n  }\n  local req={\n    type="mqtt",\n    payload=json.encode(msg),\n  }\n  print("req=",json.encode(req))\n  local ack,ok=ctx:asend(req, 2000) \n  print("result = ", ok, ack)\n  ctx:notify("{}")\n  ]]--\nend\n\nonData=function(data)\n   if data ~=nil then\n    log.debug("ondata %s", json.encode(data))\n   end\nend\n\nctx:notify	INLINE	2018-08-17 11:26:44.619+08	2018-12-17 17:29:35.141+08	2018-08-17	\N
6e53d045-d373-4098-9ee3-93ceceaf2323	CZJTM_acqunit_3001	\N		1.0	d5fa5193-b237-4a60-b82a-165c033e2596	d5fa5193-b237-4a60-b82a-165c033e2596	f	d5fa5193-b237-4a60-b82a-165c033e2596	Lua	start=function()\n    --log.debug("CZJTM_acqunit_3001 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n         \n\t\t\t\n\t\t\t\n\t\t\tlocal projectId=0\n\t\t\tlocal buff='f00f'\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\t--buff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\t--buff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n  \tlocal resultData =json.encode(out)\n    ctx:done(resultData)\nend	INLINE	2019-01-21 14:22:49.184+08	2019-01-21 14:22:49.184+08	2019-01-21	\N
e1b859b1-b04b-4faa-95a8-8d0b006d392d	klha_tempHumi_1105	\N		1.0	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	f	352a31c7-1e5e-4c52-85f6-2fa692d0fda9	Lua	--//PMO/02 产品协议/SavoirCloud/01 协议/3月第5周/北京昆仑海岸传感技术有限公司/2014&2015选型手册-北京昆仑海岸传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "klha_tempHumi_1105", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("klha_tempHumi_1105 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("klha_tempHumi_1105 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff,moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'B' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030400250019322a\n--moduleId=1    \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local temp = iota.hexToShort(hex,3,'B')/10.0\n        local humidity = iota.hexToShort(hex,5,'B')/10.0\n       \n        out.data = {\n\t\t\ttemp=temp,\n\t\t\thumidity=humidity\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2017-12-12 14:28:50.236+08	2018-03-30 10:14:44.858+08	2017-12-12	\N
fa70ca44-5363-495f-ba20-8572ecd3b398	fs_cloudvibrate_mop	\N	云振动配置下发	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    --log.debug("fs_cloudvibrate_mop:device=%s",json.encode(device))\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_vibf2",\n        O = "S",\n        P = { } -- 荷载\n    }\n\n\n    local linkcnt = #(device.dnlinks[1].devices)\n    --log.debug("fs_cloudvibrate_mop:linkcnt=%d",linkcnt)\n\n  \tlocal trmode = 0\n  \tif device.props.triggermode == "软件触发" then\n    \ttrmode = 0\n    end\n  \tif device.props.triggermode == "模拟硬件触发" then\n    \ttrmode = 3\n    end\n  \tif device.props.triggermode == "数字硬件触发" then\n    \ttrmode = 5\n    end\n  \tif device.props.triggermode == "硬件模拟数字触发" then\n    \ttrmode = 6\n    end\n\n    local demode = 0\n  \tif device.props.devicermode  == "从设备异步" then\n    \tdemode = 0\n    end\n  \tif device.props.devicermode  == "主设备异步" then\n    \tdemode = 2\n    end\n  \tif device.props.devicermode  == "主设备同步" then\n    \tdemode = 1\n    end\n  local set = {\n  \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n    PA=device.props.uploadprocess,\n    TT = trmode, \n    TI=tonumber(device.props.triggerint),\n    DM=demode, --设备工作模式\n    ISH=tonumber(device.props.hour),--间隔触发启动时间\n    ISM=tonumber(device.props.minute),\n    ISS=tonumber(device.props.second),\n    IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n    TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n    TTS={},CHS ={}\n  }\n  mop.P = set\n\tlocal arry=  Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming1)\n\tend\n\tarry=  Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming2)\n\tend\n\tarry=  Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming3)\n\tend\n\tarry=  Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming4)\n\tend\n\tarry=  Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming5)\n\tend\n\tarry=  Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 =  {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\t--table.insert(mop.P.TTS, startiming6)\n\tend\n\t\n   \tfor i = 1, linkcnt, 1 do         \n        local link = device.dnlinks[1]\n        local dev = link.devices[i]\n\t\t--log.debug("fs_cloudvibrate_mop:dev=%s", json.encode(dev))\n        local dev_inf = link.devices[i].uplink\n    \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n    \tlocal trirmode = 0\n        if dev_inf.props.triggermode  == "绝对值" then\n            trirmode = 0\n        end\n        if dev_inf.props.triggermode  == "上升沿" then\n            trirmode = 1\n        end\n        if dev_inf.props.triggermode  == "下降沿" then\n            trirmode = 2\n        end\n        if dev_inf.props.triggermode  == "峰峰值" then\n            trirmode = 3\n        end\n        local joinmode = 0\n        if dev_inf.props.triggerjoin  == "不参与" then\n            joinmode = 0\n        end\n        if dev_inf.props.triggerjoin  == "参与" then\n            joinmode = 1\n        end\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n        end\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n        end\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n        end\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n        end    \n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\t\t\n        local sensor = {\n            CH = tonumber(dev_inf.props.channel),--通道号\n            GA = amplify,--GainAmplifier放大倍数\n            SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n            FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n            DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n            DAS = dasvalue,--DAS, 硬件DA启用? \n            AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n            TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n            TM = trirmode,--TriggerMode触发方式\n            TJ = joinmode,--TriggerJoin 参与触发方式\n            SR = samolepoint ,--SampleRate 采样点数1\n            LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n        }\n        table.insert(mop.P.CHS, sensor)                \n    end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub(":null",":[{},{},{},{},{},{}]")\n\t--log.debug("fs_cloudvibrate_mop finish parse = %s",resultstr)\n    req.payload = resultstr\n   \t\n    log.debug("fs_cloudvibrate_mop request=%s", resultstr)\n\n    local ok, ack = ctx:ssend(req, 60000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n    log.debug("fs_cloudvibrate_mop result=%s", json.encode(result))\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n\nfunction Split(szFullString, szSeparator)  \n\tlocal nFindStartIndex = 1  \n\tlocal nSplitIndex = 1  \n\tlocal nSplitArray = {}  \n\twhile true do  \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)  \n\t\tif not nFindLastIndex then  \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))  \n\t\t\tbreak  \n\t\tend  \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)  \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)  \n\t\tnSplitIndex = nSplitIndex + 1  \n\tend  \n\treturn nSplitArray  \nend  	INLINE	2018-09-19 14:43:18.829+08	2020-07-24 17:38:17.842+08	2018-09-19	\N
2ed40a11-7a2b-4aa7-a649-28b9d72efbf8	yyzn_Analog_1801	\N	云扬智能 储液罐监测 模拟量采集模块	1.0	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	f	275e6287-8ef6-4bc1-8e57-72f3d6404d8f	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("load script %s, moduleId=%s", "yyzn_1801.lua", device.props.moduleId or "[nil]")   \nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n       \n        log.debug("yyzn_1801:LUA:根设备devices : data is =%s", json.encode(subdevices))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("yyzn_1801:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n        \tlocal moduleNo=tonumber(child.props.moduleId) \n            local channelNo=tonumber(child.props.channelId)\n            if child.uplink.props ~='null' then \n        \t    moduleNo=tonumber(child.uplink.props.module) \n                channelNo=tonumber(child.uplink.props.channel)\n            end\n            log.debug("yyzn_1801:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\t     \n\t\t\tbuff=iota.appendHexByte(buff, moduleNo, endian)\n            buff=iota.appendHexByte(buff, 0x03, endian)      \n\n\t\t\tbuff=iota.appendHexWord(buff, channelNo+3, endian)              -- 1: 通道号 \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, endian)\t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L',0) \n\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("yyzn_1801:模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("yyzn_1801:模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("yyzn_1801:".."subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlog.debug('yyzn_1801:out序列化')\n\tlocal resultData =json.encode(out)\n    log.debug("yyzn_1801:out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n\n\n--  0103023a28aafa  analog=14.888\nunmarshall=function(hex,subDevice)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\tlocal subModuleId=subDevice.props.moduleId\n\tlocal subChannelId=subDevice.props.channelId\n    if subDevice.uplink.props ~='null' then \n        moduleNo=subDevice.uplink.props.module\n        channelNo=subDevice.uplink.props.channel\n    end\n\tlog.debug("yyzn_1801:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    if ErrorCode then     \n \n        \n\t\tlocal rawData = iota.hexToShort(hex,3,'B')*0.001;\n\t\tlog.debug("yyzn_1801:模块%s通道%s的原始值是：rawData=%s",subModuleId,subChannelId,rawData)\n        log.debug("yyzn_1801:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].props))\n        \n\t\tlocal Phy=0\n        --if subDevice.device.formula == "phy = (dH - dL) / (aH-aL) *(data1-aL) + dL" then --模拟量采集模块数据转换公式\n\t\t\t\tlocal aH = subDevice.uplink.capabilities[1].formula.props.aH\n\t\t\t\tlocal aL = subDevice.uplink.capabilities[1].formula.props.aL\n\t\t\t\tlocal dH = subDevice.uplink.capabilities[1].formula.props.dH\n\t\t\t\tlocal dL = subDevice.uplink.capabilities[1].formula.props.dL\n\t\t\t\tphy = (dH - dL) / (aH-aL) *(rawData-aL) + dL;\n\t\t        log.debug("yyzn_1801:模块%s通道%s的a=%s,b=%s,phy=%s",subModuleId,subChannelId,a,b,Phy)\n\t\t--end\n        \n       \n       --analog=tonumber(string.format("%0.3f",rawData)),\n\t\tsubData.data={\n                  \tphysicalvalue=tonumber(string.format("%0.3f",phy))\n\t\t\t\t\t}\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('yyzn_1801:开始校验数据')\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    \n--crc\n  \t--判断数据有效性\t\t\t\n  local crcH = iota.hexToByte(data,5,'B');\t \n  local crcL = iota.hexToByte(data, 6,'B');\t\n\n  log.debug("yyzn_1801:crcH等于:%s",crcH)\n  log.debug("yyzn_1801:crcL等于:%s",crcL)\n  --判断CRC16正确性\n  local checkCrc16=string.sub(data,-4,-1)\n --log.debug("checkCrc16等于:%s",checkCrc16)\n  local dataCopy=string.sub(data,1,-5)\n  dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n  --log.debug("yyzn_1801:dataCopy+CRC等于:%s",dataCopy)\n  local dataCopycrcH = iota.hexToByte(dataCopy,5,'B');\t \n  local dataCopycrcL = iota.hexToByte(dataCopy, 6,'B');\t\n\n  --log.debug("yyzn_1801:dataCopycrcH等于:%s",dataCopycrcH)\n  --log.debug("yyzn_1801:dataCopycrcL等于:%s",dataCopycrcL)\n  local isCheckCrcOK=(crcH==dataCopycrcL and crcL==dataCopycrcH)\n  if isCheckCrcOK ~=true then \n  \tlog.debug("yyzn_1801:isCheckCrcOK等于:%s",isCheckCrcOK)\n    errormsg = 'Hex crc16 False'\n    errcode = 1004\n    return false\n  end\n  log.debug('yyzn_1801:数据校验通过')\n    return true\nend	INLINE	2017-08-28 14:23:56.418+08	2018-05-21 15:18:52.437+08	2017-08-26	\N
d246da1e-bc3c-4ecc-9afa-d4d0137a3e89	协议-kafak	\N		1	56031544-f3e0-407f-9ffa-1a54742ecfa7	56031544-f3e0-407f-9ffa-1a54742ecfa7	f	56031544-f3e0-407f-9ffa-1a54742ecfa7	Lua	start=function()\n  log.debug("start")\n  local msg={\n payload="testing kafka..."\n  }\n  local req={\n    type="kafka",\n    payload=json.encode(msg),\n  }\n  print("req=",json.encode(req))\n  local ack,ok=ctx:asend(req, 2000) \n  print("result = ", ok, ack)\n  ctx:notify("{}")\nend\n\nonData=function(data)\n  log.debug("ondata")\nend\n\n\n\n	INLINE	2018-08-17 11:35:24.175+08	2018-12-17 17:29:01.949+08	2018-08-17	\N
a51beec3-ab8a-4ab2-9796-21189779b36c	123456	\N		1.12	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	f	5080baff-a15e-42e5-ae75-58f9b31c4576	Lua	‘’；ji'j'jp'jp'\njopjpoidffdbjhsdf\nsjdfksdjfzkdjsa\ndjfsdjfjsdfnjsfdj\n	INLINE	2018-05-28 13:57:00.23+08	2018-05-28 14:02:13.536+08	2018-05-28	\N
4c032273-d5ed-46a2-b362-da219224cac5	123456	\N		1.12	5080baff-a15e-42e5-ae75-58f9b31c4576	5080baff-a15e-42e5-ae75-58f9b31c4576	f	5080baff-a15e-42e5-ae75-58f9b31c4576	Lua	020202\n\nsdfgbasd\n阿瑟的符号就开始对方as\n按实际东方会计师的	INLINE	2018-05-28 14:34:05.065+08	2018-05-28 14:34:05.065+08	2018-05-28	\N
1e3a9533-745a-4c0d-a998-256576a85cab	anxin_inclinometer_1	\N	测斜，主动上传	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("anxin_inclinometer_1.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local xData = iota.hexToShort(hex,34,'B')/1000.0;\n        local yData = iota.hexToShort(hex,36,'B')/1000.0;\n        --local zData = iota.hexToShort(hex,38,'B')/1000.0;\n        --local temp = iota.hexToShort(hex,40,'B')/100.0;\n     \n        out.data = {                \n            anglex=xData,\n            angley=yData,\n            --anglez=zData,\n            --temperature=temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("anxin_inclinometer_1: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'anxin_inclinometer_1:Data is nil'\n        errcode = 1001\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anxin_inclinometer_1:Data length is wrong'\n        errcode = 1001\n        return false\n    end\n    local moduleId= iota.hexToShort(data,26,'B')\n    if (device.uplink.props.module~=tostring(moduleId)) then\n        errormsg = 'anxin_inclinometer_1:module is wrong'\n        errcode = 1001\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anxin_inclinometer_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anxin_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = 'anxin_inclinometer_1:crc is wrong'\n        errcode = 1001\n        return false\n    end\n    \n    return true\n  \nend\n \n	INLINE	2018-05-28 10:10:38.927+08	2018-05-28 15:30:52.961+08	2018-05-28	\N
d3970047-c379-4882-af09-b7ecea4bd65a	fs_Inclin_OLD_1500	\N	老版本测斜fs_Inclination_OLD_1500	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/09固定测斜协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_Inclination_OLD_1500", device.uplink.props.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("fs_Inclination_OLD_1500 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("fs_Inclination_OLD_1500 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\t\n\t\tbuff=iota.appendHexByte(buff, 0xfe, endian)            \n        buff=iota.appendHexByte(buff, 0x43, endian)  \n        buff=iota.appendHexByte(buff, 0x58, endian)      \t\t\n        buff=iota.appendHexWord(buff, device.uplink.props.moduleId, endian) -- 模块号\n\t\tbuff=buff.."00000000000000000000"\n        local xorbuff=iota.hexCheckXorSum(buff,0) \n  \t\tbuff=iota.appendHexByte(buff, xorbuff, endian)\n        log.debug("fs_Inclination_OLD_1500 xorbuff是"..xorbuff)\n\t\tbuff=iota.appendHexByte(buff, 0xef, endian)\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug(" fs_Inclination_OLD_1500 SSend error ok is false!")\n        end\n        ctx:done(result)\nend\n\n--fe4358000020cc0b002f1c0d002c0313ef\n--moduleId=8396\n--"angleX": 0.7911111111111111,\n--"angleY": -0.7341666666666666\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local xminus = iota.hexToByte(hex,7,'B')\n        local xdegree = iota.hexToByte(hex,8,'B')\n\t\tlocal xcent = iota.hexToByte(hex,9,'B')/60.0\n\t\tlocal xsec = iota.hexToByte(hex,10,'B')/3600.0\n\t\t\n\t\tlocal yminus = iota.hexToByte(hex,11,'B')\n        local ydegree = iota.hexToByte(hex,12,'B')\n\t\tlocal ycent = iota.hexToByte(hex,13,'B')/60.0\n\t\tlocal ysec = iota.hexToByte(hex,14,'B')/3600.0\n       \n\t    local angleX = xdegree + xcent + xsec;\n        local angleY = ydegree + ycent + ysec;\n\t   \n\t    if (xminus == 0x0D) then  \n            angleX = -angleX;\n\t\tend \n        if (yminus == 0x0D) then\n            angleY = -angleY;\n\t\tend\n        out.data = {\n\t\t\tanglex=angleX,\n\t\t\tangley=angleY\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('fs_Inclination_OLD_1500 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0xfe or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,2,'B') ~= 0x58 or iota.hexToByte(data,16,'B') ~= 0xef then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if moduleStrCheck ~= tostring(iota.hexToUShort(data,5,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_Inclination_OLD_1500 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2017-12-14 16:32:48.218+08	2018-06-21 17:04:40.831+08	2017-12-14	\N
154ad249-521a-4c6b-b5d5-d0b54aaf71bc	anXin_LVDT_9113	\N	安信LVDT（请求应答）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 5, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==30) then\n        --   2   2   1      4     4       2\n        -- \n        \n        --print("parsing data", hex)\n        local distance = iota.hexToInt(hex,9,'B')/ 10000\n        out.data = {\n            distance=distance\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-08-31 19:39:19.72+08	2019-12-23 15:40:21.917+08	2017-08-28	\N
fffec7fc-706e-4f38-bb9e-8a6b284d28bf	ryzh_temphumi_1165	\N	锐研智华 温湿度气压	1.0	e3655afc-a2a8-4bc3-801a-9c3019705a27	e3655afc-a2a8-4bc3-801a-9c3019705a27	f	e3655afc-a2a8-4bc3-801a-9c3019705a27	Lua	-- //04 项目资料/2017-08/兰州/兰州大学光照、温室压和二氧化碳的项目/RY-WSY301-485温湿压.doc\nstart=function()\n    log.debug("start %s, ctx=", "ryzh_temphumi_1165.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 3, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--FF030619AD1BE427155A2C   \n--moduleId=255  humidity": 71.4,"pressure": 100.05,"temperature": 25.73\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==22) then\n        \n       local Temperature=iota.hexToShort(hex,3,'B')/100.0-40; \n       local Humidity=iota.hexToShort(hex,5,'B')/100.0; \n        local Pressure =iota.hexToShort(hex,7,'B')/100.0;    \n        out.data = {\n           temperature=Temperature,\n           humidity=Humidity,\n           pressure=Pressure\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend	INLINE	2017-10-31 16:21:09.151+08	2018-02-28 18:32:12.223+08	2017-10-27	\N
37eb4d94-3143-426f-bb36-bbb57cc647b5	ReShinel_Laser_9513	\N		1.0	88b38dff-0f2e-4ff5-bc36-089db915aac6	88b38dff-0f2e-4ff5-bc36-089db915aac6	f	88b38dff-0f2e-4ff5-bc36-089db915aac6	Lua	-- //04 项目资料/2017-06/上海誉煊-干滩水库/最新协议/上海誉煊电子技术有限公司激光测距传感器ModBus协议.pdf\n--[[\n协议号: 9513;\n协议名: modbus 激光测距.\n]]--lucas\nstart=function ()\n  log.debug("load script %s, moduleId=%s", "ReShinel_Laser_9513.lua", device.props.moduleId or "[nil]")\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序  01 03 00 92 00 02 65 e6 模块1\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x92, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3:  \t读取寄存器数量\n\tlocal temp=buff;--交换CRC16高地位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0)   --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复  01030400000B10FCCF     moduleId=1\n--原始数据   距离0.2832*1000  mm\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n        log.debug(string.format('decode: %s', data));\t\n\t\t--计算原始值\n\t\tlocal distance = iota.hexToInt(data, 3,'B')/10000.0;\n    \tout.data = {\n\t\tdistance=distance*1000\t\n\t\t};\t\n\telse\t\t\t\t\n\t\tout.result = {code=errcode,msg=errormsg} \t\t\t\t\t\t\n\tend\n\treturn json.encode(out)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n	INLINE	2017-09-12 20:25:06.782+08	2018-02-28 18:32:12.223+08	2017-09-12	\N
1e488dad-bc1e-4572-b36c-f1e48ded987e	dongshuan	\N	东爽写的	1.0	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	Lua	--//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n    ctx:asend("010203")\n    log.debug("shutaiDT14300  device=%s", json.encode(device))\nend\n\nonData=function(hex,index)\n    log.debug("shutaiDT14300  hex=%s[%s] type(index)=[%s]",hex,index,type(index))\n    if index==2 then\n       ok=ctx:asend("670d0a") --"g/n/r"  DT运行当前工作计划\n       ctx:sleep(1)\n       ok=ctx:asend("2f480d0a") --"/H/n/r"  DT 按照指定格式 上报数据\n    end\n\t--log.debug("shutaiDT14300  device =%s", json.encode(device))\n  \n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=HextoStr(hex)\n        log.debug("shutaiDT14300  sData= %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,";")\n        local allResponseCount=table_leng(allResponse)\n        --移除表内的“”和nil\n        for i=allResponseCount,1,-1 do\n            v=allResponse[i]\n            if v=='' or v==nil or string.len(v)<10 then\n            table.remove(allResponse,i)\n            --log.debug("shutaiDT14300  表内的“”和nil 移除元素k=%s v=%s",i,v)\n            end\n        end\n\n        --分析单类数据\n        local resplength=table_leng(allResponse)\n        local phys={} --存储所有通道物理量\n        local moduleNo   --模块号 \n        local dateTimeStr\n        local timenow\n        for k,v in ipairs(allResponse) do\n            dataIndex=string.sub(v,1,1)--单条数据首字母   D为设备信息 ，A为数据\n\n            if dataIndex=='D' then\n                local otherData=Split(v,',')\n                 moduleNo=otherData[2]\n                 local dateStr=otherData[4]\n                 local timeStr=otherData[5]\n                 dateTimeStr=string.format("%s %s",dateStr,timeStr)\n                 timenow=unixtimestamp(dateTimeStr)\n            elseif dataIndex=='A' then\n                 local singleData=Split(v,',')\n                 for sensorKey,sensorValue in ipairs(singleData) do\n                    if sensorKey>2 then\n                        phys[sensorKey-2]=singleData[sensorKey]\n                    end\n                 end\n            end\n        end\n\n        --匹配数据部分\n                                     \t\t\t\n        -- local childDevice={}--测试用\n        -- childDevice.id=123  --测试用\n\n        for index,childDevice in pairs(device.dnlinks[1].devices) do\n            log.debug("shutaiDT14300  遍历子设备 是否匹配设备child=%s",json.encode(childDevice))\n             \n            local channelStrCheck=childDevice.uplink.props.channel\n            log.debug("shutaiDT14300  子设备模块通道 接口获取 c=%s ",channelStrCheck)\n            local relatedChannel= Split(channelStrCheck,',')\n            local valueNum=table_leng(relatedChannel)\n            \n            if childDevice.props.sensortype=='zx' then\n                local Frequency_index=tonumber(relatedChannel[1])\n                local Temperature_index=tonumber(relatedChannel[2])\n                local Frequency=tonumber(phys[Frequency_index])\n                local Temperature=tonumber(phys[Temperature_index])\n                if childDevice.uplink.capabilities[1].formula.metaid == "ff2de59e-fd95-42c6-93cc-d827da25dd0c" then  --在iota中查找\n\n                    local K = childDevice.uplink.capabilities[1].formula.props.K  \n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    --  log.debug("shutaiDT14300  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K ==nil or Kt ==nil or Fo==nil or To==nil then\n                        Phy=nil\n                        -- log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                    else\n                         --log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n                        Phy = K*(Frequency^2-Fo^2)+Kt*(Temperature-To)\n                        --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                                        data={\n                                            frequency=tonumber(string.format("%0.3f",Frequency)),\n                                            temperature=tonumber(string.format("%0.2f",Temperature)),\n                                            physicalvalue=tonumber(string.format("%0.3f",Phy))\n                                            },\n                                        device=childDevice.id,\n                                        time=timenow,\n                                        type=1                       \n                                        }\n                       -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end  \n\t\t\telseif childDevice.props.sensortype=='dw' then\n\t\t\t    local Resistance_index=tonumber(relatedChannel[15])\n\t\t\t\tlocal Resistance=phys[Resistance_index]\n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "5a40c554-1256-4aec-b591-0202fc0f267a" then\n\t\t\t\t \n\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a\n                    local b = childDevice.uplink.capabilities[1].formula.props.b\n\t\t\t\t\tif a==nil or b==nil  then\n\t\t\t\t\tPhy=nil\t\t\t\t\n\t\t\t\t\telse  \t\t\t\t\t\n\t\t\t\t    local y=a*Math.Log(Resistance)+b\n\t\t\t\t    local data1 = {\n                            data={\n                                Y=tonumber(string.format("%0.3f",y)),\n                             \n                                resistance=tonumber(string.format("%0.3f",Resistance))\n                                },\n                            device=childDevice.id,\n                            time=timenow,\n                            type=1                       \n                            }\n\t\t\t\t\t\t\t table.insert(out.data,data1)\n                    end \n                end\t\t\t\t\t\t\t\t\t\t\t\n            \n\t\t\telseif childDevice.props.sensortype=='dt' then\n                local value1_index=tonumber(relatedChannel[1])\n                local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif value1<144.8 then\n\t\t\t\t\tvalue2=0\n\t\t\t\telseif value1>874.9 then\n\t\t\t\t    value2=15\n\t\t\t\telseif value1>=144.8 and value1<=279.7 then\n\t\t\t\t\tvalue2=3*(value1-144.8)/134.9+3\n\t\t\t\telseif value1>279.7 and value1<=365.9 then\n\t\t\t\t\tvalue2=3*(value1-279.7)/86.2+6\n\t\t\t\telseif value1>365.9 and value1<=531.5 then\n\t\t\t\t\tvalue2=3*(value1-365.9)/165.9+9\n\t\t\t\telseif value1>531.5 and value1<=663.2 then\n\t\t\t\t\tvalue2=3*(value1-531.5)/131.7+12\n\t\t\t\telseif value1>663.2 and value1<=874.9 then\n\t\t\t\t\tvalue2=3*(value1-663.2)/211.7+15\n\t\t\t\tend\n                log.debug("shutaiDT14300  standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n                local data1 = {\n                    data={ \n\t\t\t\t\t\tphysicalvalue=value2\n                        },\n                    device=childDevice.id,\n                    time=timenow,\n                    type=1                       \n                    }\n                log.debug("shutaiDT14300  standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                table.insert(out.data,data1)\n          \n\t\t\telseif childDevice.props.sensortype=='dy' then\n                local Temperature_index=tonumber(relatedChannel[1])\n                local Vx_index=tonumber(relatedChannel[2])\n                local Vy_index=tonumber(relatedChannel[3])\n                local Temperature=tonumber(phys[Temperature_index])\n                local Vx=phys[Vx_index]\n                local Vy=phys[Vy_index]\n\t\t\t\t\n                if childDevice.uplink.capabilities[1].formula.metaid == "ed2744e0-eecf-42f0-8732-65fcd7e46d24" then  --在iota中查找\n                                                                         \n                    local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n                    local Ky = childDevice.uplink.capabilities[1].formula.props.Ky                         \n                    local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n                    --  log.debug("shutaiDT14300 倾角通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n                    if Kx ==nil or Ky==nil or Vo==nil then\n                        Phy=nil\n                    --      log.debug("shutaiDT14300  倾角通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n                    else\n                        --   log.debug("shutaiDT14300  倾角通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n                        local AngleX = Kx*(Vx-Vo)\n                        local AngleY = Ky*(Vy-Vo)\n                    --    log.debug("shutaiDT14300 倾角通道[%s] AngleX=%s,AngleY=%s Temperature=%s",channelStrCheck,AngleX,AngleY,Temperature)\n                        local data1 = {\n                            data={\n                                anglex=tonumber(string.format("%0.3f",AngleX)),\n                                angley=tonumber(string.format("%0.3f",AngleY)),\n                                temperature=tonumber(string.format("%0.3f",Temperature))\n                                },\n                            device=childDevice.id,\n                            time=timenow,\n                            type=1                       \n                            }\n                        --   log.debug("shutaiDT14300: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end\n\t\t\telseif childDevice.props.sensortype=='db' then\n\t\t\t    local Frequency_index=tonumber(relatedChannel[1])\n                local Temperature_index=tonumber(relatedChannel[2])\n                local Frequency=tonumber(phys[Frequency_index])\n                local Temperature=tonumber(phys[Temperature_index])\n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "f4e36088-8943-4147-b898-324dafb20220" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K  \n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0\n                    --  log.debug("shutaiDT14300  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K ==nil or K1 ==nil or X0==nil or Y0==nil then\n                        Phy=nil\n                        -- log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                    else\n                         --log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n                        Phy = K*(Frequency-X0)+K1*(Temperature-Y0)\n                        --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                                        data={\n                                            voltage_ratio=tonumber(string.format("%0.3f",Frequency)),\n                                            temperature=tonumber(string.format("%0.2f",Temperature)),\n                                            physicalvalue=tonumber(string.format("%0.3f",Phy))\n                                            },\n                                        device=childDevice.id,\n                                        time=timenow,\n                                        type=1                       \n                                        }\n                       -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end\t\n            elseif childDevice.props.sensortype=='dz' then\n\t\t\t    local Frequency_index=tonumber(relatedChannel[1])\n                local Temperature_index=tonumber(relatedChannel[2])\n                local Frequency=tonumber(phys[Frequency_index])\n                local Temperature=tonumber(phys[Temperature_index])\n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "dc0acbb1-de4d-4fd3-af87-c61d4b7bdf52" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K  \n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                    local X0 = childDevice.uplink.capabilities[1].formula.props.X0\n                    local Y0 = childDevice.uplink.capabilities[1].formula.props.Y0\n                    --  log.debug("shutaiDT14300  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K ==nil or K1 ==nil or X0==nil or Y0==nil then\n                        Phy=nil\n                        -- log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                    else\n                         --log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n                        Phy = K*((Frequency^2)/1000-X0)+K1*(Temperature-Y0)\n                        --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                                        data={\n                                            frequency=tonumber(string.format("%0.3f",Frequency)),\n                                            temperature=tonumber(string.format("%0.2f",Temperature)),\n                                            physicalvalue=tonumber(string.format("%0.3f",Phy)),\n                                            },\n                                        device=childDevice.id,\n                                        time=timenow,\n                                        type=1                       \n                                        }\n                       -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end\t\t\t\t\t\t\t\t\n\t\t\telseif childDevice.props.sensortype=='dm' then\n\t\t\t    local Frequency_index=tonumber(relatedChannel[1])\n          \n                local Frequency=tonumber(phys[Frequency_index])\n            \n\t\t\t\t \n\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == "5773316d-3a54-4974-86d6-eff99007cf04" then\n\t\t\t\t \n\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K  \n                 \n                    --  log.debug("shutaiDT14300  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K ==nil  then\n                        Phy=nil\n                        -- log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                    else\n                         --log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n                        Phy = K*(Frequency-4)\n                        --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                                        data={\n                              \n                                            physicalvalue=tonumber(string.format("%0.3f",Phy))\n                                            },\n                                        device=childDevice.id,\n                                        time=timenow,\n                                        type=1                       \n                                        }\n                       -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end\t\n\t\t\t\telseif childDevice.props.sensortype=='standard' then\n                local value1_index=tonumber(relatedChannel[1])\n                local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif valueNum>1 then\n\t\t\t\t\tlocal value2_index=tonumber(relatedChannel[2])\n\t\t\t\t\tvalue2=tonumber(phys[value2_index])\t\n\t\t\t\t\tvalue2=tonumber(string.format("%0.2f",value2))\n\t\t\t\t\t\n\t\t\t\tend\n                log.debug("shutaiDT14300  standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n                local data1 = {\n                    data={ \n                        physicalvalue=tonumber(string.format("%0.2f",value1)),\n\t\t\t\t\t\tphysicalvalue2=value2\n                        },\n                    device=childDevice.id,\n                    time=timenow,\n                    type=1                       \n                    }\n                log.debug("shutaiDT14300  standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                table.insert(out.data,data1)\n            end\t\t\t\t\n\t\t\t\t\t\t\t\t \n        end\n\n    else\n        ok=ctx:asend("2f480d0a") --"/H/n/r"  DT 按照指定格式 上报数据\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("shutaiDT14300  resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n\n\nIsValid=function(alldata)\n    log.debug("shutaiDT14300  校验开始")\n    if string.len(alldata) <10   then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n        return false\n    end\n\n    if string.sub(alldata,1,4)~='442c' then\n\t   errormsg = 'allData header is invalid'\n        errcode = 1001\n        return false\n\t\n\tend\n\n    log.debug("shutaiDT14300  校验通过")\n    return true\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nunixtimestamp=function(datestr)\n    -- 2018/4/28 16:10:12\n\tlog.debug("shutaiDT14300  datestr=%s",datestr)\n    local datelist = Split(datestr, " ");\n    local datebegin = Split(datelist[1], "/");\n    local dateend = Split(datelist[2], ":");\n    local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n    local hour = tonumber(dateend[1]);\n    local minute = tonumber(dateend[2]);\n    local second = tonumber(dateend[3]);\n    --log.debug("shutaiDT14300 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("shutaiDT14300 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t--log.debug("shutaiDT14300 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2019-12-30 16:55:50.187+08	2019-12-30 16:58:33.351+08	2019-12-30	\N
33386019-d751-44bb-b39d-198ba7d892ff	tlsf_Inclina_1506	\N	倾角传感器协议	1.0	fc6696f3-32e6-42c8-b8de-8409f5bfe865	fc6696f3-32e6-42c8-b8de-8409f5bfe865	f	fc6696f3-32e6-42c8-b8de-8409f5bfe865	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "tlsf_Inclina_1506.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("tlsf_Inclina_1506 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("tlsf_Inclina_1506 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff, 0xA1, endian)  \n    buff=iota.appendHexByte(buff, moduleNo, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 0x04, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexByte(buff, 0xAF, endian)\n    buff=iota.appendHexByte(buff, 0X00, endian)   \n    buff=iota.appendHexByte(buff, 0x00, endian)   \n    buff=iota.appendHexByte(buff, 0x10, endian)                        -- 4: 指令: 0x01 = 采集\n    local check=CS(3,buff)\n    buff=buff..check              -- 5: checkSum\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    --A1AF0D0201001003000123AA00004488B0\n \t--"xDegree": 74.666,\n\t--"yDegree": 17.544\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local power=iota.hexToByte(hex,7,'B')\n        local xInt=iota.hexToInt(hex,8,'B')\n        local yInt=iota.hexToInt(hex,12,'B')\n       \n        local XDegree=xInt/10^power\n        local YDegree=yInt/10^power  \n        out.data = {\n           xDegree=XDegree,\n           yDegree=YDegree\n        }\n     else\n\t\t out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n   if string.lower(string.sub(data,1,2))~='a1' then\n\t\terrormsg = 'Invalid acq moduleId'\n         errcode = 1004\n         return false\n\tend\n    -- if tonumber(moduleCheck) ~=iota.hexToByte(data,1,'B') then\t\n        -- errormsg = 'Invalid acq moduleId'\n        -- errcode = 1004\n        -- return false\n    -- end\n    return true\n--checkSum\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end     \n    local value= string.format("%#x",lcr)\n    local byte = string.sub(value,string.len(value)-1,string.len(value))\n    return byte\nend \n \n\n\n \n\n	INLINE	2017-09-09 11:37:31.894+08	2018-07-10 10:44:25.326+08	2017-09-03	\N
7356f652-5fb4-4cbf-bedc-53a840d6285d	Upload_ax_vibrating_	\N	Upload_ax_vibrating_1408	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--//05 标准文档/安信标准协议.xlsx\n\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Upload_ax_vibrating_1408.lua", device.props.moduleId or "[nil]")\nend\n\n\n--ff41584a230102030405060708091011230001000126f00102030401010203040102C0C0EEEE\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n\t    local frequency_z=iota.hexToShort(hex,28,'B')\n        local frequency_x=iota.hexToShort(hex,30,'B')/1000.0\n\t\tlocal frequency=frequency_z+frequency_x\n        local temp =iota.hexToShort(hex,32,'B')/100.0\n     \n        out.data = {                --需要测试\n        frequency = frequency,\n        temp = temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    log.debug('开始校验数据')\n    local aaa=iota.hexToByte(data,1,'B')\n    log.debug("aaa是"..tostring(aaa))\n    if data == nil or string.len(data)/2 ~= iota.hexToByte(data,21,'B') then\n        --errormsg = 'Data is nil or invalid'\n        --errcode = 1001\n        --return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0xFF or iota.hexToByte(data,1,'B') ~= 0x41 or iota.hexToByte(data,2,'B') ~= 0x58  or iota.hexToByte(data,3,'B') ~= 0x4A then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if device.props.moduleId ~= tostring(iota.hexToUShort(data,19,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n\tif device.props.channelId ~= tostring(iota.hexToByte(data,27,'B')) then\t\n        errormsg = 'Invalid acq channelId'\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\n--crc\nend\n\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n	INLINE	2017-12-25 16:33:05.778+08	2018-02-28 18:32:12.223+08	2017-12-25	\N
26f76eda-aff3-4ae9-82ec-a523a51dde17	mk_humi_1	\N	湿度	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_humi_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA010206309F90\n--"humi": 48\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_humi_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x06 and moduleNo==modulenumber  then\n            \n            local humi =iota.hexToByte(hex,4,'B') \n            out.data = {               \n                humi=humi\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_humi_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_humi_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:03:45.32+08	2018-02-28 18:32:12.224+08	2018-01-08	\N
c26a8950-e810-48a4-a491-d817c5765747	mk_windDirection_1	\N	风向	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mk_windDirection_1.lua",json.encode(device.props.moduleId))\nend\n\nonData=function(hex)\n--AA01094b03EB0000000000000000\n--"windDirection": 1.003\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",data)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.props.moduleId)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x4b and moduleNo==modulenumber  then\n            local windDirection = iota.hexToShort(hex,4,'B') / 1000.0\n            out.data = {               \n                windDirection=windDirection\n            }\n            local resultData =json.encode(out)\n            log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n        local resultData =json.encode(out)\n        log.debug("recv %s, ctx=%s", "mk_windDirection_1.lua",json.encode(out))\n        ctx:notify(resultData)\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2018-01-08 11:38:55.827+08	2018-02-28 18:32:12.224+08	2018-01-08	\N
7f9f00f9-1b47-4a0e-a210-cd495fa0711d	TDxieyi	\N	塔吊设备协议	1.0	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	1b2d8739-627e-4b7d-9480-3eee6e9396fe	Lua	--	INLINE	2018-07-23 15:16:48.59+08	2019-03-13 17:17:05.516+08	2018-07-23	\N
dd9d12d0-a0ee-44d4-9ba5-9887b1057881	LVDT_HY_9116	\N	下发采集	1.0	06551138-8f00-4269-9a6d-4e5fa26c71cc	06551138-8f00-4269-9a6d-4e5fa26c71cc	f	06551138-8f00-4269-9a6d-4e5fa26c71cc	Lua	--"04 项目资料/2017-09/武汉华岩电子有限责任公司/HY65-ascii/传感器ASCII方式通讯控制协议.TXT"\n--测试\n--3635525830303154542B30303031393654FD36355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F736355258303031534F2D30303134383253F7\n--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, device=%s", "LVDT_HY_9116.lua",json.encode(device))\n\t\n    local endian = 'B'\n\tlocal moduleNo=device.uplink.props.module \n\tlocal cmdStr="65TX"\n\tlocal addressStr=string.format("%03s",moduleNo)\n\tcmdStr=cmdStr..addressStr.."S0"\n    log.debug("LVDT_HY_9116 cmdStr=%s",cmdStr)\n\tlocal cmdHex=StrToHex(cmdStr)\n\tlocal sum8Hex=string.format("%02x",getSum8(0,cmdHex))\n    -- log.debug("LVDT_HY_9116,m=%s, sum8Hex=%s",moduleNo,sum8Hex)\n    local buff=cmdHex..sum8Hex\n\t\t\t\n\n    log.debug("LVDT_HY_9116,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug("LVDT_HY_9116 result=%s",result)\n\t\tctx:done(result)\n    else\n\t\tlocal errout={\n\t\t  data ={},\n\t\t  result = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug('LVDT_HY_9116 收到数据=%s',hex)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\t\n    local physicalvalue\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        log.debug('LVDT_HY_9116 数据有效=%s',hex)\n        local data_str = HexToStr(hex)\n        --转为字符串\n        \n        --获取子字符串表\n            if data_str ~= '' then\n                log.debug('LVDT_HY_9116  data_str=%s', data_str)\n               \n                if string.sub(data_str, -3, -3) == 'T' then\n                    --温度计算\n                    local t = string.sub(data_str, 10, 16)\n                    log.debug('LVDT_HY_9116  ,t=%s', t)\n                    physicalvalue = tonumber(t) / 10.0\n                else\n                    --裂缝计算\n                    local str_rawData = string.sub(data_str, 10, 16)\n                    log.debug('LVDT_HY_9116  i=%s ,str_rawData=%s', i, str_rawData)\n                    physicalvalue = tonumber(str_rawData) * 0.001\n                    log.debug('LVDT_HY_9116  i=%s ,crackGap=%s', i, tostring(crackGap))\n                    local channelNo = tonumber(string.sub(data_str, 1, 3))\n         \t\t\tlocal sensortype=device.props.sensorType\n                    if sensortype=='YB' then\n                       physicalvalue=string.format("%0.1f",physicalvalue)\n          \t\t\tend\n                end\n      \t\t\tout.data = {\n                            physicalvalue = physicalvalue\n                        }\n            end\n    else\n        log.debug('LVDT_HY_9116 数据无效')\n        message = string.format('LVDT_HY_9116 无效的数据长度=%s', string.len(hex))\n        out.result = {code = errcode, msg = message}\n    end\n    local resultData = json.encode(out)\n    return json.encode(out)\nend\n\n\nIsValid = function(data)\n    if iota.hexToByte(data, 0, 'B') ~= 0x36 or iota.hexToByte(data, 1, 'B') ~= 0x35 or iota.hexToByte(data, 2, 'B') ~= 0x52 or iota.hexToByte(data, 3, 'B') ~= 0x58 then\n        errormsg = '数据无效[数据帧头与尾校验错误]'\n        errcode = 1001\n        return false\n    end\n    return true\nend\n\n--字符串ascii->字符\nHexToStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n  -- 字符串 -> BCD\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取传感器信息\ngetDeviceInfo =function(moduleid, channel)\n    log.debug('LVDT_HY_9116 查询子设备: moduleid=%s,channel=%s', moduleid, channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local submodule = subdevice.uplink.props.module\n            --判断是否是3层采集仪结构\n            local dnlinkObject = json.encode(subdevice.dnlinks)\n            if dnlinkObject ~= '{}' and dnlinkObject ~= 'null' then\n                log.debug('LVDT_HY_9116 三层结构 m=%s, 设备=%s', submodule, json.encode(subdevice))\n                for k, sublink in pairs(subdevice.dnlinks) do\n                    --log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n                    for u, sub_subdevice in pairs(sublink.devices) do\n                        --log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n                        local sensormodule = sub_subdevice.uplink.props.module\n                        local sensorchannel = sub_subdevice.uplink.props.channel\n                        if tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel) == tonumber(channel) then\n                            log.debug('LVDT_HY_9116 m=%s,c=%s 3 拜安匹配到设备=%s', moduleid, channel, json.encode(sub_subdevice))\n\n                            return sub_subdevice\n                        else\n                            log.debug('LVDT_HY_9116 m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s', moduleid, sensormodule, channel, sensorchannel, json.encode(sub_subdevice))\n                        end\n                    end\n                end\n            else\n                local subchannel = subdevice.uplink.props.channel\n                log.debug('LVDT_HY_9116 两层结构 m=%s,c=%s 设备=%s', submodule, subchannel, json.encode(subdevice))\n                if tonumber(subchannel) == tonumber(channel) then -- 只比较 模块号 tostring(submodule) == tostring(moduleid) and\n                    log.debug('LVDT_HY_9116 m=%s,c=%s 2安信匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n                    return subdevice\n                else\n                    log.debug('LVDT_HY_9116 has no device module=%s channel=%s,[submodule=%s,subchannel=%s]', moduleid, channel, submodule, subchannel)\n                end\n            end\n        end\n        log.debug('LVDT_HY_9116 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('LVDT_HY_9116 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n\ngetSum8=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit.band(lcr,0xff)   \n    return value\nend 	INLINE	2018-12-27 20:15:48.837+08	2019-01-07 17:00:58.392+08	2018-12-27	\N
32d06cb0-ba6b-44d3-90aa-a768cb50cfed	szkrm_TempHum_1154	\N		1.0	7208e2c1-ccf7-46f5-b073-bbab61904cf2	7208e2c1-ccf7-46f5-b073-bbab61904cf2	f	7208e2c1-ccf7-46f5-b073-bbab61904cf2	Lua	--//01 协议文档/9月第4周/华南，深圳市永阳新能源科技有限公司，温湿度传感器，485通讯协议/永阳YY-TF100湿度探头及协议.pdf\n--[[\n协议号: 1154;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "szkrm_TempHum_1154.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.props.moduleId, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址\n    buff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);-- 3:  \t读取寄存器数量\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  01040419e81c9af447     moduleId=1\n--原始数据   温度26.32，湿度73.22\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t--判断数据有效性\n\tif string.len(data)/2 ~=9 or iota.hexToByte(data, 1,'B')~=0x04 or iota.hexToByte(data, 2,'B')~=0x04 then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal Temp = (iota.hexToShort(data, 3,'B')-4000)/100.0;\n\t\tlocal Humi = iota.hexToShort(data, 5,'B')/100.0;\t\t\t\n\t\t\n\t\tout.data = {\n\t\ttemp=Temp,\n\t\thumi=Humi\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n	INLINE	2017-09-07 18:26:20.549+08	2018-02-28 18:32:12.224+08	2017-09-07	\N
08df99de-ea9b-409c-9f5c-fda7f51b2ef9	jcwl_settlement_1	\N	北京杰成物联科技有限公司	1.0	299decdb-5902-4e11-afcb-9e08926723fc	299decdb-5902-4e11-afcb-9e08926723fc	f	299decdb-5902-4e11-afcb-9e08926723fc	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "jcwl_settlement_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jcwl_settlement_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jcwl_settlement_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0x55, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0x0a, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      -- 5: CRC\n\n    ----01030055000ad5dd\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==50) then\n        \n        --01031402AA00000000000000000000999A3F9900020000A899 \n        --"thickness":  1.2,\n        --"temp": 25.02857454545457,\n        --"state": 2,\n        --print("parsing data", hex)\n       \n        local temp =(iota.hexToShort(hex,3,'B')*1.607566-1000)/3.85;\n        local thicknessData=string.sub(hex,35,38)..string.sub(hex,31,34)\n        local thickness =iota.hexToFloat(thicknessData,0,'B'); \n        local state=iota.hexToShort(hex,19,'B')\n        out.data = {\n           \n            temp=temp,\n            thickness=thickness,\n            state=state\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-12-19 16:43:27.718+08	2018-03-29 16:53:38.585+08	2017-12-19	\N
94086d83-438d-4730-9c51-771e4a2e3d12	Meacon_PH	\N		1.0	849e9b08-1181-436a-a106-cc6b0d3ffdc5	849e9b08-1181-436a-a106-cc6b0d3ffdc5	f	849e9b08-1181-436a-a106-cc6b0d3ffdc5	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "Meacon_PH", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\t--全局\n  out={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("Meacon_PH 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)      \n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("Meacon_PH SSend error!")\n        end\n\t\tif out.data.ph~=nil then\n\t\t\tlog.debug('Meacon_PH:'..'PH解析正常'..tostring(out.data.pressure))\n\t\t\tlocal bufft=''\n\t\t\tbufft=iota.appendHexByte(bufft, moduleNo, endian) -- 模块号\n\t\t\tbufft=iota.appendHexByte(bufft, 0x03, endian)            \n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)      \n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x00, endian)\n\t\t\tbufft=iota.appendHexByte(bufft, 0x01, endian)\n\t\t\tbufft=iota.appendHexCrc(bufft, 'L' ,0)    \n\t\t\tok,resp=ctx:ssend(bufft,15000)\n\t\t\tif ok then\n\t\t\t   log.debug('Meacon_PH:'..'温度采集成功 开始解析温度:'..resp)\n\t\t\t\tresult_temp =tempunmarshall(resp,moduleNo) \n\t\t\t  else\n\t\t\t\tlog.debug('Meacon_PH:'..'温度采集失败')\n\t\t\tend\n\t\tend\n\t\tresult = json.encode(out)\n        ctx:done(result)\nend\n--00 03 00 00 00 01 85 DB\n--00 03 02 00 00 85 84\n--moduleId=0\n--00 03 00 01 00 01 D4 1B\n--00 03 02 00 FA 05 C7\n\n\n\nunmarshall=function(hex,moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local ph = iota.hexToShort(hex,3,'B')\n       \n        out.data = {\n            ph=ph/100.0,\n\t\t\ttemp=0\n\t\t\t}\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n   -- return json.encode(out)\nend\n\n \ntempunmarshall=function(hex,moduleNo_t)\n\tlocal ErrorCode = IsValid(hex,moduleNo_t)\n    if ErrorCode then\n\t\n        local temp = iota.hexToShort(hex,3,'B')\n       \n        out.data.temp = temp/10.0\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('Meacon_PH 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('Meacon_PH 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-10-08 14:33:16.075+08	2018-10-11 11:06:09.617+08	2018-10-08	\N
daf77d68-0e8a-4215-94b5-fa3255e04fdc	ky_lvdt_1600	\N		1.0	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	f	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	Lua	--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "ky_lvdt_1600", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("ky_lvdt_1600 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("ky_lvdt_1600 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x03, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("ky_lvdt_1600 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18    \n--"length":1024 \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length = iota.hexToInt(hex,3,'B')/65535.0\n       \n       \n        out.data = {\n\t\t\tlength=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('ky_lvdt_1600 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('ky_lvdt_1600 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-05-29 11:34:39.65+08	2019-06-19 10:12:32.73+08	2018-05-29	\N
85e2b97b-2221-4c86-96cb-1daf90b1118f	ZZ-SG	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("SG: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("SG: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\n    local sData= toStrHex(hex)\n    log.debug("SG: sData=%s",sData)\n    local spliteData = Split(sData,'&&')\n\tlocal deviceData = Split(spliteData[1],';')\n  \n\tlocal moduledata = Split(deviceData[5],'=')\n\tlocal module = tonumber(moduledata[2]) --模块号\n\tlog.debug("SG: deviceData=%s",module)\n\tlocal Data = Split(spliteData[2],';')\n\tlocal timedata = Split(Data[1],'=')\n\tlocal time = tonumber(timedata[2])   --时间\n\t\n\tfor key,value in pairs(Data) do\n\t\tAllot(value)\n\n\tend\n\t\n\n\n    local resultData =json.encode(out)\n    log.debug("SG: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot=function(datastr)\n\tlocal name = Split(datastr,'=')\n\t\n\tif name[1] == 'a34004-Rtd' then \n\t\tlocal pm25 = tonumber(string.format('%0.0f',tonumber(name[2])))\n\t\tif pm25 <= 0 or pm25 > 700 then \n\t\t\tout.data.pm25=nil\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg .. "[pm2.5] out of ranges pm2.5:"..tostring(pm25).." is out of[0,700]"\t\n        \telse\n        \t\tout.result.msg = "[pm2.5] out of ranges pm2.5:"..tostring(pm25).." is out of[0,700]"\t\n        \tend\n      \telse\n      \t\tout.data.pm25=pm25\n\t\tend\n\telseif name[1] == 'a34002-Rtd' then \n\t\tlocal pm10 = tonumber(string.format('%0.0f',tonumber(name[2])))\n\t\tif pm10 <= 0 or pm10 > 700 then \n\t\t\tout.data.pm10=nil\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg .. "[pm10] out of ranges pm10:"..tostring(pm10).." is out of[0,700]"\t\n        \telse\n        \t\tout.result.msg = "[pm10] out of ranges pm10:"..tostring(pm10).." is out of[0,700]"\t\n        \tend\n      \telse\n\t\t    out.data.pm10=pm10\n\t\tend\t\t\n\telseif name[1] == 'a01007-Rtd' then \n\t\tlocal speed = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif speed < 0 or speed > 24.5 then \n\t\t\tout.data.speed=nil\n       \t\tlog.debug("SG:out.data.speed=nil")\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[speed] out of speed:"..tostring(speed).." is out of[0,24.5]"\t\n        \telse\n        \t\tout.result.msg = "[speed] out of speed:"..tostring(speed).." is out of[0,24.5]"\t\n        \tend\n      \telse\n      \t\tout.data.speed=speed\n\t\tend\t\t\n\telseif name[1] == 'a01008-Rtd' then \n\t\tlocal direction = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif direction < 0 or direction > 360 then \n\t\t\tout.data.direction=nil\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[direction] out of direction:"..tostring(direction).." is out of[0,360]"\t\n        \telse\n        \t\tout.result.msg = "[direction] out of direction:"..tostring(direction).." is out of[0,360]"\t\n        \tend\n      \telse\n      \t\tout.data.direction=direction\n\t\tend\t\t\t\n\telseif name[1] == 'a01001-Rtd' then\n\t\tlocal temperature = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif temperature < -40 or temperature > 60 then \n\t\t\tout.data.temperature=nil\n\t\t\tout.result.code = 5001\n\t\t\tout.result.msg = "[temperture] out of temperture pm10:"..tostring(temperature).." is out of[-40,60]"\t\n      \telse\n      \t\tout.data.temperature=temperature\n\t\tend\t\t\n\telseif name[1] == 'a01002-Rtd' then\n\t\tlocal humidity = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif humidity <= 0 or humidity > 100 then \n\t\t\tout.data.humidity=nil\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg = out.result.msg.."[humidity] out of humidity :"..tostring(humidity).." is out of[0,100]"\t\n            else\n            \tout.result.msg = "[humidity] out of humidity :"..tostring(humidity).." is out of[0,100]"\t\n            end\n      \telse\n      \t\tout.data.humidity=humidity\n\t\tend\t\t\n\telseif name[1] == 'LA-Rtd' then\n\t\tlocal noise = tonumber(string.format('%0.1f',tonumber(name[2])))\n\t\tif noise < 0 or noise > 200 then \n\t\t\tout.data.noise=nil\n\t\t\tout.result.code = 5001\n      \t\tif out.result.msg ~= nil then\n\t\t\t\tout.result.msg =out.result.msg.. "[noise] out of noise :"..tostring(noise).." is out of[0,200]"\t\n        \telse\n        \t\tout.result.msg = "[noise] out of noise :"..tostring(noise).." is out of[0,200]"\t\n        \tend\n      \telse \n      \t\tout.data.noise=noise\n\t\tend\t\t\n\telse\n\t\n\tend\nend\n\n	INLINE	2018-11-02 17:21:13.21+08	2019-01-04 17:21:58.334+08	2018-11-02	\N
3e1d46a6-f0b7-4db2-87c7-027e6c5b65c6	iOTA Configure Sync	\N		1.0.0	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start= function()\n  log.debug("mqtt edge config sync start")\n  local edgeMetaId = device.deviceMetaId\n  local edgeId = device.id\n  local topic = string.format("/conf/edge/%s/%s/sync/request", edgeMetaId, edgeId) \n  local request = {\n    id = uuid.v4(),\n    payload = {\n      -- edge config\n      edge = {},\n      -- devices config\n      devices = {}\n    }\n  }\n  -- edge interface and capabilities\n  request.payload.edge = createDevice(device)\n  -- 仅两层结构？\n  if device.dnlinks ~= nil then\n    for i, dl in ipairs(device.dnlinks) do\n      if dl.devices ~= nil then\n        for j, d in ipairs(dl.devices) do\n          local dv = createDevice(d)\n          if dv ~= nil then\n            table.insert(request.payload.devices, dv)\n          end\n        end\n      end\n    end\n  end\n  local iOTAMQTTMessage = {\n    type = "iota_mqtt",\n    topic = topic,\n    payload = json.encode(request)\n  }\n  local result, response = ctx:ssend(iOTAMQTTMessage)\n  local payload = json.decode(response.payload)\n  if request.id == payload.id then\n     log.debug("------------- %s ", json.encode(response))\n     ctx:done("{}")\n  end\nend\n\n--[[\n  设备转换\n]]--\ncreateDevice=function(dev)\n  if dev == nil then\n    return nil\n  end\n  local device = {\n    id = dev.id,\n    name = dev.name,\n    deviceMetaId = dev.deviceMetaId,\n    props = dev.props,\n    -- other ...\n    interfaces = {}\n  }\n  if dev.uplink ~= nil then\n    local interface = createInterface(dev.uplink)\n    if interface ~= nil then\n      table.insert(device.interfaces, interface)\n    end\n  end\n  return device\nend\n\n--[[\n  接口转换\n]]--\ncreateInterface=function(inf)\n  if inf == nil then\n    return nil\n  end\n  local interface = {\n    id = inf.id,\n    name = inf.name,\n    props = inf.props,\n    capabilities = {}\n  }\n  if inf.capabilities ~= nil then\n    for i, cap in ipairs(inf.capabilities) do\n      local capability = createCapability(cap)\n      if capability ~= nil then\n        table.insert(interface.capabilities, capability)\n      end\n    end\n  end\n  return interface\nend\n\n--[[\n  能力转换\n]]--\ncreateCapability=function(cap)\n  if cap == nil then\n    return nil\n  end\n  local capability = {\n    id = cap.id,\n    capabilityMetaId = cap.capabilityMetaId,\n    name = cap.name,\n    props = cap.props,\n  }\n  return capability\nend\n\nonData=function()\nend	INLINE	2019-07-06 16:49:33.225+08	2019-07-24 16:23:05.916+08	2019-07-06	\N
f6f903f9-bd32-4fa0-9305-074458402bd5	fs_door_1503	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//04 D:\\SVN\\201903项目\\厕所电动门\\[说明书]USR-IO808-GR_V1.0.3.pdf \nstart=function()\n\nend\n\nonData=function(hex)\n\tlocal result="{}"\n\tresult = unmarshall(hex)\n    log.debug("jm_lvdt_1553:结果out=%s",result)   \n    ctx:notify(result)\nend \nunmarshall=function(hex)\n\tlocal moduleNo=device.uplink.props.module\n    log.debug("fs_door_1503 m=%s, recv =%s",moduleNo,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n\t local moduleNo=device.uplink.props.module\n     local ErrorCode = IsValid(hex,moduleNo)\n    if ErrorCode then\n        local diS=string.sub(hex,15,16)\n        local diState=getBit8(diS)\n\t\t\n        out.data = {           \n            DI1=diState[1],\n\t\t\tDI2=diState[2],\n\t\t\tDI3=diState[3],\n\t\t\tDI4=diState[4],\n\t\t\tDI5=diState[5],\n\t\t\tDI6=diState[6],\n\t\t\tDI7=diState[7],\n\t\t\tDI8=diState[8]\t\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_door_1503 m=%s,data=%s",moduleNo,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 11 then\n        errormsg = string.format('无效的数据长度=%s≠11',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tonumber(deviceModule) ~= dataModule then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,deviceModule)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \ngetBit8=function(byteStr)\n    local byteTable={}\n    local byteNum=tonumber(byteStr,16)\n    --log.debug("fs_door_1503 byteNum =%s,byteStr=%s",byteNum,byteStr)\n    local bit1=bit.band(byteNum,0x01)\n    local bit2=bit.band(byteNum,0x02)\n    local bit3=bit.band(byteNum,0x04)\n    local bit4=bit.band(byteNum,0x08)\n    local bit5=bit.band(byteNum,0x10)\n    local bit6=bit.band(byteNum,0x20)\n    local bit7=bit.band(byteNum,0x40)\n    local bit8=bit.band(byteNum,0x80)\n\n    byteTable[1]=math.modf(bit1/0x01)\n    byteTable[2]=math.modf(bit2/0x02)\n    byteTable[3]=math.modf(bit3/0x04)\n    byteTable[4]=math.modf(bit4/0x08)\n    byteTable[5]=math.modf(bit5/0x10)\n    byteTable[6]=math.modf(bit6/0x20)\n    byteTable[7]=math.modf(bit7/0x40)\n    byteTable[8]=math.modf(bit8/0x80)\n    return byteTable\nend\n	INLINE	2019-03-14 11:19:12.509+08	2019-05-17 11:15:41.55+08	2019-03-14	\N
9376f5bd-295c-489d-a21a-5bb68e15392e	fs_temp_1103	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_temp_1103", device.uplink.props.module or "[nil]")\n    local buff=''  \n\tlocal result='{}'\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\tlog.debug("fs_temp_1103 设备模块  m==%s ",moduleNo)\n\t\n\t\n\tlocal dotNumber=readDot(moduleNo)\n\tif  dotNumber~=nil then\n\t\t\tbuff=iota.appendHexByte(buff,moduleNo, 'B')  \n\t\t\tbuff=iota.appendHexByte(buff, 0x03, 'B')             \n\t\t\tbuff=iota.appendHexWord(buff, 0x04, 'B') \n\t\t\tbuff=iota.appendHexWord(buff, 0x01, 'B') \t\n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0)            \n\n\t\t\tok,resp=ctx:ssend(buff,10000)\n\t\t\tlog.debug('fs_temp_1103  发送 读数 读取指令=%s',buff)\n\t\t\n\t\t\tlog.debug('fs_temp_1103  接收数据=%s',resp)\n\t\t\tif ok then\n\t\t\tresult=unmarshall_temp(resp,moduleNo,dotNumber)\n\t\t\telse\n\t\t\t  log.debug('fs_temp_1103   数据采集失败')\n\t\t\tend\n\tend\n    \n    \n    \n    ctx:done(result)\nend\n\n\nreadDot=function(deviceModule)\n\t --下发 dot读取指令\n\t local dot_number\n\t\tlocal buff_dot=''\n\t\t\n\t\tbuff_dot=iota.appendHexByte(buff_dot,deviceModule, 'B')  \n\t\tbuff_dot=iota.appendHexByte(buff_dot, 0x03, 'B')             \n\t\tbuff_dot=iota.appendHexWord(buff_dot, 0x03, 'B') \n\t\tbuff_dot=iota.appendHexWord(buff_dot, 0x01, 'B') \t\n\t\tbuff_dot=iota.appendHexCrc(buff_dot, 'L' ,0)       \t\n\t   ok1,resp1=ctx:ssend(buff_dot,10000)\n       log.debug('fs_temp_1103  发送 读取小数指令=%s,ok1=%s,resp1=%s',buff_dot,ok1,resp1)\n       if ok1 then\n         dot_number = unmarshall_dot(resp1,deviceModule)\t   \n       end\n\t    return dot_number\nend\n\n\nunmarshall_dot=function(hex,moduleStr)\n\n\tlocal dot_Num\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        dot_Num = iota.hexToUShort(hex,3,'B');\n        log.debug('fs_temp_1103  小数点位=%s',dot_Num)\n    end\n    return dot_Num\nend\n\n\n\nunmarshall_temp=function(hex,moduleStr,dot_Num)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local  temperature = iota.hexToShort(hex,3,'B')/10^dot_Num;\n        out.data = {\n             temperature = temperature\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\n\n\n\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_temp_1103 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 < 7 or string.len(data)/2 > 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1002\n        errormsg = '返回功能码不是0x03' \n        return false\n    end\n  \tlocal dataModule=tostring(iota.hexToByte(data,0,'B'))\n    if moduleNo_check ~= dataModule then\t\n        errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]',dataModule,moduleNo_check)\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n 	INLINE	2019-10-10 10:27:34.901+08	2020-09-03 18:36:04.614+08	2019-10-10	\N
ff261e2f-e34f-4f1c-933a-aec8cac3b02f	RK_MOP	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--68a0a1a2a3a4a568010243c3 +CS   +16H           CS=（68a0a1a2a3a4a56801021090的累加和）\n-- cmd=68|88|88|88|88|88|88|68|20|0E|35|B3|34|2F|33|37|33|33|33|73|9C|96|34|73|C8|16\nstart=function()\n    log.debug("start %s, ctx=%s", "renke_dn.lua",json.encode(ctx.device))\n\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n\tlocal moduleId1 = string.sub(moduleNo,1,2)\n\tlocal moduleId2 = string.sub(moduleNo,3,4)\n\tlocal moduleId3 = string.sub(moduleNo,5,6)\n\tlocal moduleId4 = string.sub(moduleNo,7,8)\n\tlocal num = device.props.num\n\tlocal number = 262\n\tif num == "PM2.5系数A" then \n\t\tnumber = 262\n\telseif num == "PM2.5系数B" then\n\t\tnumber = 263\n\telseif num == "PM10系数A" then\n\t\tnumber = 251\n\telseif num == "PM10系数B" then\n\t\tnumber = 252\n\telseif num == "噪声系数A" then\n\t\tnumber = 287\n\telseif num == "噪声系数B" then\n\t\tnumber = 288\n\telseif num == "温度系数B" then\n\t\tnumber = 302\n\telseif num == "湿度系数B" then\n\t\tnumber = 313\n\telseif num == "风速系数B" then\n\t\tnumber = 338\n\telseif num == "联动阈值" then\n\t\tnumber = 259\n\telseif num == "控制回差" then\n\t\tnumber = 261    \n\tend\n\tlocal value = device.props.value\n\tbuff="6888888888888868200E35B334"\n  \tlog.debug("renke_dn, number = %s",number)\t\n\tlocal numberstr =''\n\tnumberstr = iota.appendHexWord(numberstr, tonumber(number), endian)\n\tlocal num1 = tonumber(string.sub(numberstr,3,4),16)\n\tif  num1 ~= nil then \n\t\tnum1 = num1 + 0x33\n\t\tif num1 > 255 then\n\t\t\tnum1 = num1 -0x100\n\t\tend\n\tend\n\tbuff=iota.appendHexByte(buff, num1, endian)\n\tlocal num2 = tonumber(string.sub(numberstr,1,2),16)\n\tif num2 ~= nil then \n\t\tnum2 = num2 + 0x33\n\t\tif num2 > 255 then\n\t\t\tnum2 = num2 - 0x100\n\t\tend\n\tend\t\n\tbuff=iota.appendHexByte(buff, num2, endian)\n\n\tbuff = buff.."37"\n\tlocal hex = iota.floatToHex(tonumber(value))--"00004040"\n    --log.debug("renke_dn, hex = %s,value = %s",hex,tostring(value))\t\n\tlocal hex1 = tonumber(string.sub(hex,7,8),16) \n  \tif hex1 ~= nil then\n  \t\thex1 = hex1 + 0x33\n\t\tif hex1 > 255 then\n\t\t\thex1 = hex1 - 0x100\n\t\tend\n    end\n   log.debug("renke_dn,sec2 hex1 = %d",hex1)\t\n\tbuff=iota.appendHexByte(buff, hex1, endian)\n\tlocal hex2 = tonumber(string.sub(hex,5,6),16)\n    if hex2 ~= nil then\n  \t\thex2 = hex2 + 0x33\n\t\tif hex2 > 255 then\n\t\t\thex2 = hex2 - 0x100\n\t\tend\t\t\n    end\n\tbuff=iota.appendHexByte(buff, hex2, endian)\n \n\tlocal hex3 = tonumber(string.sub(hex,3,4),16)\n    if hex3 ~= nil then\n  \t\thex3 = hex3 + 0x33\n\t\tif hex3 > 255 then\n\t\t\thex3 = hex3 - 0x100\n\t\tend\t\t\t\n    end\n\tbuff=iota.appendHexByte(buff, hex3, endian)\n\tlocal hex4 = tonumber(string.sub(hex,1,2),16)\n    if hex4 ~= nil then\n  \t\thex4 = hex4 + 0x33\n\t\tif hex4 > 255 then\n\t\t\thex4 = hex4 - 0x100\n\t\tend\t\t\t\n    end  \n\tbuff=iota.appendHexByte(buff, hex4, endian)\n  \t--log.debug("renke_dn,sec buff=%s",buff)\n\tlocal module4 = tonumber(moduleId4,16)\n    if module4 ~= nil then\n  \t\tmodule4 = module4 + 0x33\n\t\tif module4 > 255 then\n\t\t\tmodule4 = module4 - 0x100\n\t\tend\t\t\t\n    end    \n\tbuff=iota.appendHexByte(buff, module4, endian)\n\tlocal module3 = tonumber(moduleId3,16)\n    if module3 ~= nil then\n  \t\tmodule3 = module3 + 0x33\n\t\tif module3 > 255 then\n\t\t\tmodule3 = module3 - 0x100\n\t\tend\t\t\t\n    end      \n\tbuff=iota.appendHexByte(buff, module3, endian)\n\tlocal module2 = tonumber(moduleId2,16)\n    if module2 ~= nil then\n  \t\tmodule2 = module2 + 0x33\n\t\tif module2 > 255 then\n\t\t\tmodule2 = module2 - 0x100\n\t\tend\t\t\t\t\n    end    \n\tbuff=iota.appendHexByte(buff, module2, endian)  \n\tlocal module1 = tonumber(moduleId1,16)\n    if module1 ~= nil then\n  \t\tmodule1 = module1 + 0x33\n\t\tif module1 > 255 then\n\t\t\tmodule1 = module1 - 0x100\n\t\tend\t\t\t\t\n    end      \n\tbuff=iota.appendHexByte(buff, module1, endian)\n\t--buff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n\tcrc=LCR(0,buff)\n\tbuff=iota.appendHexByte(buff, crc, endian)\n\tbuff=buff.."16"\n    --log.debug("renke_dn,buff=%s",buff)\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("renke_dn,resp=%s",resp)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\nunmarshall=function(hex)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\tif string.len(hex) ~= 44 then\n\t\tout.result.code = 1001\n\t\tout.result.msg ="retry, responde is not right"\n\tend\n    return json.encode(out)\nend\n\nLCR=function(start,data)\n  --log.debug("rk_yc data=%s ",data)\n    local sum = 0\n    for i=start, string.len(data)/2-1 do\n        if string.sub(data,1+2*i,2*(i+1)) ~= '' then\n            sum = (sum + tonumber(string.sub(data,1+2*i,2*(i+1)),16)) % 0xffff\n        end\n    end \n    sum = bit.band(sum ,0xff)\n    return sum\nend \n\n	INLINE	2019-03-06 14:08:39.634+08	2019-05-17 11:16:44.694+08	2019-03-06	\N
466e226f-a04e-4c91-8328-438a2c4628b2	lora	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        函数:\n        ssend: 同步发送数据到设备\n        asend: 异步发送数据到设备\n        notify: 通知平台解析完成的数据\n        done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n    log.debug("fslora2:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex)   \n    local len=string.len(data)\n\tlocal module = string.sub(device.uplink.props.deveui,-4,-1)\n\tlocal modulecode = string.sub(data,1,4)\n\tlocal r=nil\n\tif module == modulecode then\n\t\tlocal code = iota.hexToByte(data,8,'B');\n\t\tlog.debug("fslora2:onData %s len %s code %s",data,len,tostring(code))\n\t\t\n\t\tlocal msgid,r1ok = redis.get(device.id)\n\t\tif len >= 70 and tostring(msgid) ~= string.sub(data,9,12) then \t\t\n\t\t\tr=parseData(data)\n\t\telseif len==54 and tostring(msgid) ~= string.sub(data,9,12)then\n\t\t\tlocal message = 'nil Data!'\n\t\t\tlocal errcode = 0\n\t\t\tlog.debug("fslora2 errorcode %s",tostring(code))\n\t\t\tif tonumber(code) == 1 then \n\t\t\t\tmessage =  '无配置'\n\t\t\t\terrcode = 10010007      \n\t\t\telseif tonumber(code) == 2 then \n\t\t\t\tmessage = '模块号获取失败'\n\t\t\t\terrcode = 30010101\n\t\t\telseif tonumber(code) == 3 then \n\t\t\t\tmessage = '电量不足'\n\t\t\t\terrcode = 60010002      \n\t\t\telseif tonumber(code) == 4 then \n\t\t\t\tmessage = '断路'\n\t\t\t\terrcode = 30010022\n\t\t\telseif tonumber(code) == 5 then \n\t\t\t\tmessage =  '短路'\n\t\t\t\terrcode = 30010023      \n\t\t\telseif tonumber(code) == 6 then \n\t\t\t\tmessage =  '超时'\n\t\t\t\terrcode = 30030001      \n\t\t\tend\n\t\t\tlocal errorcode={\n\t\t\t  data ={},\n\t\t\t  result = {code=errcode,msg=message},\n\t\t\t  type = 1\n\t\t\t}\n\t\t\tr = json.encode(errorcode)\n\t\telse\n\t\t\tlocal s={\n\t\t\t  data =result,\n\t\t\t  result = {},\n\t\t\t  type = 1\n\t\t\t}\n\t\t r = json.encode(s)\n\t\tend\n\telse \n\t\tlocal errorcode={\n\t\t  data ={},\n\t\t  result = {code=30010101,msg="数据异常,发错数据"},\n\t\t  type = 1\n\t\t}\n\t\tr = json.encode(errorcode)\n\tend\n    local msg = r\n    log.debug("fslora2:Parsed:%s",msg)\n    ctx:notify(msg)\n  \tif tostring(msgid) ~= string.sub(data,9,12) then\n    \treply(data)\n    end\nend\n\nparseData=function(data)\n    -- 51长度: 头 25, 数据24, 尾2\n \tlog.debug("fslora2:parseData")\n\tparseWakeup(data)--打印设备信息\n\tlocal module = device.pr\n    local node = string.sub(data,1,4)\n    local sentype = iota.hexToByte(data,16,'B');\n    local time=os.date("%Y-%m-%dT%H:%M:%S+08:00")--,os.time({year = iota.hexToShort(data,17,'B'), month = iota.hexToByte(data,19,'B'), day =iota.hexToByte(data,20,'B'), hour =iota.hexToByte(data,21,'B'), min =iota.hexToByte(data,22,'B'), sec = iota.hexToByte(data,23,'B')}))\n    local data1 = iota.hexToFloat(data,25,'B');\n    local data2 = nil\n  \tlocal len=string.len(data)\n  \tif len == 74 then\n    \tdata2 = iota.hexToFloat(data,29,'B');\n    end\n    local data3 = nil\n  \tif len == 78 then\n    \tdata2 = iota.hexToFloat(data,29,'B');\n    \tdata3 = iota.hexToFloat(data,33,'B');\n    end\n\tlocal out={\n            data ={},\n            result = {},\n            type = 2\n          }\n  \tlocal subdevices = device.dnlinks[1].devices\n\tlocal subDevice = nil\n\tlocal subData={\n        data ={},\n        device=nil,\n        type = 1,\n        time=time\n    }\t\n\tif subdevices ~=nil then\n\t\tfor index,child in pairs(subdevices) do \n\t\t\tsubDevice = child\n\t\t\tsubData.device = child.id\n\t\tend\n\tend\n\tlocal hour =iota.hexToByte(data,21,'B')\n\tlocal min =iota.hexToByte(data,22,'B')\n\tlocal acqnumber = tonumber(hour)*60 + tonumber(min)\n\tif tonumber(sentype) == 0 then --振弦\n    \tlog.debug("fslora2:parseData振弦 subDevice = %s",json.encode(subDevice))\n\t\tlocal Phy=0\n\t\tif subDevice ~= nil then\n\t\t\tlocal k = subDevice.uplink.props.k or 0\n\t\t\tlocal kt = subDevice.uplink.props.kt or 0\n\t\t\tlocal f0 = subDevice.uplink.props.f0 or 0\n\t\t\tlocal t0 = subDevice.uplink.props.t0 or 0\n\t\t\tlog.debug("fslora2:parseData振弦  k =%s,kt=%s,f0=%s,t0=%s",k,kt,f0,t0)\n\t\t\t\n\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\tPhy =k * (data1 ^ 2 - f0 ^ 2) + kt * (data3 - t0)\n\t\t\tend\n\t\t\tsubData.data = {frequency=data1, am=data2,temperature=data3,physicalvalue=Phy}\n      \t\tlog.debug("fslora2:parseData振弦  subData.data =%s",json.encode(subData.data))\n\t\t\ttable.insert(out.data,subData)\n\t\t\t\n\t\tend\n\telseif tonumber(sentype) == 1 then --杆式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\t\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 2 then --盒式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 3 then --压差\n\t\tsubData.data = {pressure=data1,temp =data2}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 4 then --裂缝计\n\t\tsubData.data = {length=data1}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 5 then --三轴加速度\n\t\tsubData.data = {degreex=data1, degreey=data2}\n\t\ttable.insert(out.data,subData)\n\telse\n\n\tend\n  \tlog.debug("fslora:parseData out = %s",json.encode(out))\n    return json.encode(out)\nend\n\nparseWakeup=function(data)\n    local node = string.sub(data,1,4)\n    local power = iota.hexToByte(data,9,'B');\n\tlocal version = "V"..tostring(iota.hexToShort(data,12,'B')/100)\n\tlocal history = iota.hexToShort(data,14,'B')\n  \tlog.debug("fslora2 node %s power %s version %s historycount %s",tostring(node),tostring(power),version,tostring(history))\nend\n\nreply=function(data)\n\tlocal node = string.sub(data,1,4)\n\tlocal msgid = string.sub(data,9,12)\t\n\tlocal buff = node.."0402"..msgid.."0009"\n\tlocal interval = device.props.interval\n  \tlocal deviceid = tostring(device.dnlinks[1].devices[1].id)\n  \tredis.set(device.id,msgid, tonumber(interval)+2)\n  \tctx:sleep(3)\n\tlocal r1,r1ok = redis.get("iota_device_"..deviceid)  --获取阈值超出时采集粒度\n  \t\n\tif r1 ~= nil and r1ok then \n\t  \tlocal value = Split(r1,":")\n\t\tlocal r = string.sub(value[2],1,1)\n\t\tlog.debug("fslora2 value %s  r1 %s",r1,r)\n\t\tlocal level = tonumber(r)\n\t\tif level == 0 then \n\t\t\tinterval = tonumber(device.props.interval)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 1 then \n\t\t\tinterval = tonumber(device.props.interval1)\n     \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 2 then \n\t\t\tinterval = tonumber(device.props.interval2)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 3 then \n\t\t\tinterval = tonumber(device.props.interval3)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telse\n\t\tend\n    \t\n\tend\n\tbuff = iota.appendHexWord(buff, tonumber(interval), 'B')\n\tlocal year = os.date("%Y")\n\tlocal month = os.date("%m")\n\tlocal day = os.date("%d")\n\tlocal hour = os.date("%H")\n\tlocal minute = os.date("%M")\n\tlocal second = os.date("%S")\n\tbuff = iota.appendHexWord(buff, tonumber(year), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(month), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(day), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(hour), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(minute), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(second), 'B')\n\tbuff = iota.appendHexCrc(buff,'B',0)\n  \tlog.debug("fslora2 buff %s",buff)\n\tctx:asend(buff)\n\t\n\tlog.debug("fslora2 set redies device %s msgid %s ",deviceid,msgid)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2018-11-22 18:16:02.687+08	2019-07-30 09:29:14.457+08	2018-11-22	\N
420f3efe-9304-4bb6-bdcb-d62235c8476c	Campbell_01	\N		1.0	f38c8678-6245-4d4c-b6c2-b753ffe51a91	f38c8678-6245-4d4c-b6c2-b753ffe51a91	f	f38c8678-6245-4d4c-b6c2-b753ffe51a91	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('Campbell_01 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('Campbell_01 device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('Campbell_01设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('Campbell_01设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    local registerCount=device.props.registerCount\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '030001'\n\tbuff = iota.appendHexWord(buff, registerCount, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug('Campbell_01 END buff = %s', buff)\n\n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('Campbell_01 数据有效=%s', resp)\n        local  allSubData = getAllDatas(resp)\n\t\tlog.debug('Campbell_01  allSubData=%s',json.encode(allSubData))\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('Campbell_01 child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('Campbell_01    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t--end\n            end\n        end\n    else\n        log.debug('Campbell_01 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('Campbell_01 ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('Campbell_01  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 7, -21)\n\t  log.debug('Campbell_01  subDataArea=%s', subDataArea)\n    local dataCount = string.len(subDataArea) / 8\n\t  log.debug('Campbell_01  dataCount=%s', dataCount)\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 8 + 1, (i - 1) * 8 + 8)\n\t\tlocal singleChannelDataHex1=string.sub(singleChannelDataHex,1,4)\n\t\tlocal singleChannelDataHex2=string.sub(singleChannelDataHex,5,8)\n\t\tlocal aa=singleChannelDataHex2 .. singleChannelDataHex1\n\t\tlog.debug('Campbell_01  singleChannelDataHex=%s', singleChannelDataHex)\n        if aa=='ffffffff' then \n\t\t  DataList[i]=0\n\t\telse\n\t\t  DataList[i]= iota.hexToFloat(aa,0,'B')\n\t\tend\n\t\tlog.debug('Campbell_01  i=%s, DataList[i]=%s',  i,DataList[i])\n   \n    end\n    return DataList\n\t--log.debug('Campbell_01 DataList=%s', json.encode(DataList))\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('Campbell_01 datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n\t\n\n    local physicalvalue = datatable[subChannelId]\n \n        singleData = {\n            data = {\n\t\t\t   \n                physicalvalue = physicalvalue\n            },\n            device = childDevice.id,\n            type = 1\n        }\n\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('Campbell_01 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('Campbell_01 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('Campbell_01 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 1, 'B')\n    if hexHeader ~= 0x03 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('Campbell_01 HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2020-07-01 13:43:46.208+08	2020-07-08 08:56:52.781+08	2020-07-01	\N
b377a3bf-8fe3-4007-b408-eb7b0158f988	jz_Inclination_1206	\N		1.0	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	f	3da5d630-ee41-4e97-8ca6-0c3cc6c9c486	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jz_Inclination_1206", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jz_Inclination_1206 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, 'L')\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("jz_Inclination_1206 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local angleX = iota.hexToShort(hex,3,'B')/100;\n        local angleY=iota.hexToShort(hex,5,'B')/100;\n        out.data = {\n\t\t\tangleX = angleX, \n\t\t\tangleY = angleY\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('jz_Inclination_1206 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('jz_Inclination_1206 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-12-06 11:33:08.793+08	2019-12-17 14:08:37.449+08	2019-12-06	\N
64b4bff2-0b22-4b07-b732-9a80e5a5f8f9	lanju_5600	\N		1.0	d7992dd9-6356-40b2-ae7d-78cb5508b40c	d7992dd9-6356-40b2-ae7d-78cb5508b40c	f	d7992dd9-6356-40b2-ae7d-78cb5508b40c	Lua	--D:\\SVN\\201902项目\\蓝居恶臭设备\\设备通信协议V2018.pdf\nstart = function()\n    log.debug('lanju_5600 start module %s, ctx=', json.encode(device.uplink.props.module))\n    --unixtimestamp('20190311134857')\nend\n\nonData = function(hex)\n    log.debug('lanju_5600 Data=%s', hex)\n    --全局\n    out = {\n        data = {},\n        result = {}\n    }\n\n    local sData = toStrHex(hex)\n    log.debug('lanju_5600 sData=%s', sData)\n    local spliteData = Split(sData, '&&')\n    local deviceData = Split(spliteData[1], ';')\n\n    local moduledata = Split(deviceData[4], '=')\n    local module = tonumber(moduledata[2]) --模块号\n    log.debug('lanju_5600 deviceData=%s', module)\n    local Data = Split(spliteData[2], ';')\n    local timedata = Split(Data[1], '=')\n    local timenum = timedata[2] --时间\n    local recordTime=unixtimestamp(timenum)\n    out.time=recordTime\n    for key, value in pairs(Data) do\n        Allot(value)\n    end\n\n    local resultData = json.encode(out)\n\n    log.debug('lanju_5600 result=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--23233031313853543d32323b434e3d323031313b50573d3132333435363b4d4e3d383838383838383832353334383931333b43503d26264461746154696d653d32303139303331313133343835373b4832532d5274643d332e303b4e48332d5274643d302e303b564f432d5274643d303b4f552d5274643d303b2626663135630d0a\n\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n    local name = Split(datastr, '=')\n\n    if name[1] == 'PM25-Rtd' then\n        local pm25 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.pm25 = pm25\n    elseif name[1] == 'PM10-Rtd' then\n        local pm10 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.pm10 = pm10\n    elseif name[1] == 'NO2-Rtd' then\n        local no2 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.no2 = no2\n    elseif name[1] == 'SO2-Rtd' then\n        local so2 = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.so2 = so2\n    elseif name[1] == 'TEMP-Rtd' then\n        local temperature = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.temperature = temperature\n    elseif name[1] == 'HUMI-Rtd' then\n        local humidity = tonumber(string.format('%0.3f', tonumber(name[2])))\n\n        out.data.humidity = humidity\n    elseif name[1] == 'H2S-Rtd' then\n        local h2s = tonumber(string.format('%0.3f', tonumber(name[2])))\n        out.data.h2s = h2s\n    elseif name[1] == 'NH3-Rtd' then\n        local nh3 = tonumber(string.format('%0.3f', tonumber(name[2])))\n        out.data.nh3 = nh3\n    elseif name[1] == 'VOC-Rtd' then\n        local voc = tonumber(string.format('%0.3f', tonumber(name[2])))\n        out.data.voc = voc\n    elseif name[1] == 'OU-Rtd' then\n        local ou = tonumber(string.format('%0.3f', tonumber(name[2])))\n        out.data.ou = ou\n    else\n    end\nend\n\n\nunixtimestamp=function(dateStr)\n    log.debug('lanju_5600 时间结算前=%s', dateStr)\n    local year = tonumber(string.sub(dateStr,1,4));\n\tlocal month = tonumber(string.sub(dateStr,5,6));\n\tlocal day = tonumber(string.sub(dateStr,7,8));\n    local hour = tonumber(string.sub(dateStr,9,10));\n    local minute = tonumber(string.sub(dateStr,11,12));\n    local second = tonumber(string.sub(dateStr,13,14));\n    local timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n     log.debug('lanju_5600 时间结算后=%s', recordTime)\n\treturn recordTime\nend	INLINE	2019-03-12 09:47:09.354+08	2019-07-08 15:37:18.628+08	2019-03-12	\N
68657c7b-5f8f-48a1-b49f-46e274358782	anXin_LVDT	\N	LVDT 主动上报（标准协议）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t  local distance = iota.hexToInt(hex,24,'B')/10000\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          distance=distance\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_rain:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_rain [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-23 15:47:29.045+08	2019-12-23 15:49:05.677+08	2019-12-23	\N
6832b04d-9188-4104-99aa-7ed91c3c2391	shsd_level_18626	\N		1.0	6708aba6-65f9-4ec3-bfc2-227628154ff3	6708aba6-65f9-4ec3-bfc2-227628154ff3	f	6708aba6-65f9-4ec3-bfc2-227628154ff3	Lua	--‪D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "shsd_level_18626.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("shsd_level_18626,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("shsd_level_18626  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shsd_level_18626 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n        out.data = {           \n            pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shsd_level_18626 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n        errcode = 1001\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2019-01-07 11:05:19.032+08	2019-01-29 16:57:59.789+08	2019-01-07	\N
9ad0fa84-5152-49ae-a277-01a96513528c	weiyun_txt_transfer	\N		1.0	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f	650f75b2-4e3f-4393-8edb-0308c73e15b6	Lua	start = function()\n    log.debug('weiyun_txt_transfer  device=%s', json.encode(device))\nend\n\nonData = function(data)\n    log.debug('weiyun_txt_transfer  start')\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.txt' then\n                --log.debug("weiyun_txt_transfer   recvd content = %s",data.payload)\n                ParseFileTxt(data.payload)\n            else\n                log.debug('weiyun_txt_transfer  unsupported file type: %s', data.ext)\n            end\n        else\n            log.error('weiyun_txt_transfer     不支持的格式  recvd type is %s', data.type)\n        end\n    else\n        log.error('weiyun_txt_transfer   recvd content is nil')\n    end\nend\n\nfunction ParseFileTxt(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local dataStrs = Split(content, '|\\r\\n')\n   -- local dataLineCounts = table_leng(dataStrs)\n   -- log.debug("weiyun_txt_transfer   dataLineCounts=%s", dataLineCounts)\n    local sensorsDataCount = {} --记录所有 传感器 数据数量\n    local sensorsData = {} --记录所有 传感器 数据\n    local sensorTime\n    --解析  第一条数据\n     local  headStr=string.sub(dataStrs[2],1,5)\n    log.debug('weiyun_txt_transfer  2  headStr=%sKK,hex=%s',headStr,strToHex(headStr))\n    for lineNo, singleTimeData in pairs(dataStrs) do\n        --log.debug("weiyun_txt_transfer   singleTimeData=%s", singleTimeData)\n        \n        if string.len(singleTimeData)>20 then\n            local singleTime_moduleDatas = Split(singleTimeData, '|\\t')\n            --解析  单模块数据\n            \n            for moduleNo, mDatas in pairs(singleTime_moduleDatas) do\n                --log.debug('weiyun_txt_transfer   singleTime_moduleData_Counts=%s,dataCounts[1]=%s', singleTime_moduleData_Counts, mDatas)\n                --解析  单通道数据\n                singleTime_moduleData = string.gsub(mDatas, '\\t\\t', '') --singleTime_moduleDatas[moduleNo]\n                --log.debug('weiyun_txt_transfer  m=%s,singleTime_moduleData=%s', moduleNo, singleTime_moduleData)\n                --去掉2个空格的情况\n                local singleTime_channelDatas = Split(singleTime_moduleData, '\\t')\n\n                --通道1开始\n                local channelNo = 1\n                for k, channelData in pairs(singleTime_channelDatas) do\n                    local str_head = string.sub(channelData, 1, 1)\n                    if str_head == '"' or sensorTime == nil then\n                        local timeStr = string.sub(channelData, 2, -2)\n                        sensorTime = unixtimestamp(timeStr)\n                    else\n                        local sensorData = tonumber(channelData)\n                        -- log.debug("k=%s,sensorData=%s[%s] ",k,sensorData,channelData)\n\n                        local sensorName = string.format('%s,%s', moduleNo, channelNo)\n                        --第一次添加数据\n                        if sensorsDataCount[sensorName] == nil then\n                            sensorsDataCount[sensorName] = 1\n\n                            sensorsData[sensorName] = {sensorData}\n                        else\n                            --sensorsData[sensorName].data.sampleFreq=lineNo\n                            --log.debug('sensorsData.data.physicalvalue=%s', json.encode(sensorsData))\n                            sensorsDataCount[sensorName] = sensorsDataCount[sensorName] + 1\n                            table.insert(sensorsData[sensorName], sensorData)\n                        end\n\n                        channelNo = channelNo + 1\n                    end\n                end\n            end\n        end\n    end\n    log.debug('weiyun_txt_transfer   合并前')\n    --合并数据\n    for k, v in pairs(sensorsData) do\n        local sensorAddress = Split(k, ',')\n        local moduleNo = sensorAddress[1]\n        local channelNo = sensorAddress[2]\n        local childDevice = getDeviceInfo(moduleNo, channelNo)\n        if childDevice ~= nil then\n            local data1 = {\n                data = {\n                    physicalvalue = v,\n                    _data_type = 'vib',\n                    sampleFreq = sensorsDataCount[k]\n                },\n                device = childDevice.id,\n                time = sensorTime,\n                type = 1\n            }\n            table.insert(out.data, data1)\n        end\n    end\n    local resultStr = json.encode(out)\n    log.debug('weiyun_txt_transfer   resultStr=%s', resultStr)\n    ctx:notify(resultStr)\nend\n\n--获取传感器信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("geot_3300 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('weiyun_txt_transfer 查询m=%s c=%s 设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n\n            local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            local channelStrCheck = child.uplink.props.channel\n            --log.debug('weiyun_txt_transfer 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    --log.debug('weiyun_txt_transfer  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('weiyun_txt_transfer  m=%s c=%s subdevices=nil', tostring(moduleNoId), tostring(channelNoId))\n        return nil\n    end\nend\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nunixtimestamp = function(dateStr)\n    --2018-12-29,14:13:25\n    dateStr = string.gsub(dateStr, ' ', '')\n    local datelist = Split(dateStr, ',')\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    return recordTime\nend\n\n\nstrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-01-08 16:00:28.194+08	2019-02-14 13:37:38.28+08	2019-01-08	\N
72df2fd5-cf83-449e-8581-0e7860bd0e06	M300	\N	GNSS	1.0	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	f	2abdd5b8-eda7-4f9d-b63c-e16753db1ef1	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n    log.debug("M300 start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n        type= "http",\n        url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n    \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s",   \n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }\n    local param={\n      pointId= tonumber(device.props.pointId),\n      pageNo=1,  \n      pageSize=1, \n    }\n    local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n    local r1,ok = redis.get(device.id.."_endTime")\n    if ok and r1~=nil then\n        beginTime=r1 -- 1200000\n    end\n    local endTime=os.time()*1000\n\n    req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n    log.debug("M300   moudleid=%s request url=%s",device.props.pointId,req.url)\n \n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("M300   moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n    else\n        log.debug("M300   moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n    end\n\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n            qx=json.decode(ack.body)  -- 有数据\n            log.debug("M300 ack=%s",ack.body)\n            local items = #qx.data or 0\n            log.debug("M300 totalItems=%d", items)\n            if items > 0 then\n                for i=1,items,1 do\n                    local item= qx.data[i]\n                    local data1 = {\n                        data={\n                            x=item.x*1000 or 0,\n                            y=item.y*1000 or 0,\n                            z=item.z*1000 or 0,\n                        },\n                        device=device.id,\n            \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n                        type=1                       \n                    };                       \n                    table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("M300 moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("M300 moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n                end\n\t\t\t\t\n                log.debug("M300    moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("M300 moudleid=%s set lasttime ok  key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime))   then\n\t\t\t\t\tlog.debug("M300 moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("M300  step redis  moudleid=%s ",device.props.pointId)\n\t\t\t--\t\n\t\t\n                ctx:done(json.encode(out))\n            else\n                log.debug("M300    moudleid=%s has not new data",device.props.pointId)\n            end\n        else\n            log.debug("M300    moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body)            \n        end\n    end\nend\n \nstringToTime=function( timeString )  --yyyyMMddHHmmss   to   时间戳\n    local yyyy = tonumber(string.sub(timeString , 1, 4)) \n    local MM = tonumber(string.sub(timeString , 5, 6))  \n    local DD = tonumber(string.sub(timeString , 7, 8))\n    local HH = tonumber(string.sub(timeString , 9, 10))\n    local mm = tonumber(string.sub(timeString , 11, 12))\n    local ss = tonumber(string.sub(timeString , 13, 14))\n    return  os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss})  \nend \n\n	INLINE	2020-07-20 09:55:57.115+08	2020-07-20 09:56:26.083+08	2020-07-20	\N
bc33df8d-ef27-4fa0-92cd-770a83216eee	fs_cloudvibrate_mopy	\N	云振动配置下发	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	start = function()\n    log.debug("fs_cloudvibrate_mopyx:device=%s",json.encode(device))\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop = {\n        M = "c_vibf2",\n        O = "S",\n        P = { } -- 荷载\n    }\n\n\n    local linkcnt = #(device.dnlinks[1].devices)\n    --log.debug("fs_cloudvibrate_mopyx:linkcnt=%d",linkcnt)\n\n  \tlocal trmode = 0\n  \tif device.props.triggermode == "软件触发" then\n    \ttrmode = 0\n    end\n  \tif device.props.triggermode == "模拟硬件触发" then\n    \ttrmode = 3\n    end\n  \tif device.props.triggermode == "数字硬件触发" then\n    \ttrmode = 5\n    end\n  \tif device.props.triggermode == "硬件模拟数字触发" then\n    \ttrmode = 6\n    end\n\n    local demode = 0\n  \tif device.props.devicermode  == "从设备异步" then\n    \tdemode = 0\n    end\n  \tif device.props.devicermode  == "主设备异步" then\n    \tdemode = 2\n    end\n  \tif device.props.devicermode  == "主设备同步" then\n    \tdemode = 1\n    end\n  local set = {\n  \tID=tonumber(device.dnlinks[1].devices[1].uplink.props.module) or 1,\n    PA=device.props.uploadprocess,\n    TT = trmode, \n    TI=tonumber(device.props.triggerint),\n    DM=demode, --设备工作模式\n    ISH=tonumber(device.props.hour),--间隔触发启动时间\n    ISM=tonumber(device.props.minute),\n    ISS=tonumber(device.props.second),\n    IAS=tonumber(device.props.acqtimeint),--间隔触发采样时长\n    TAS=tonumber(device.props.acqtiming),--定时触发采样时长\n    TTS={},CHS ={}\n  }\n  mop.P = set\n\tlocal arry=  Split(device.props.startiming1, ":")\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming1 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming1)\n\tend\n\tarry=  Split(device.props.startiming2, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\t\t\n\t\tlocal startiming2 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming2)\n\tend\n\tarry=  Split(device.props.startiming3, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming3 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming3)\n\tend\n\tarry=  Split(device.props.startiming4, ":")\n\tif arry[1] == "" then \n\n\telse\t\t\n\t\tlocal startiming4 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming4)\n\tend\n\tarry=  Split(device.props.startiming5, ":")\t\n\tif arry[1] == "" then \n\n\telse\t\n\t\tlocal startiming5 = {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\n\t\t--table.insert(mop.P.TTS, startiming5)\n\tend\n\tarry=  Split(device.props.startiming6, ":")\t\n\tif arry[1] == "" then \n\n\telse\n\t\tlocal startiming6 =  {\n\t\t\tTSH = tonumber(arry[1]),\n\t\t\tTSM = tonumber(arry[2]),\n\t\t\tTSS = tonumber(arry[3])\n\t\t}\t\n\t\t--table.insert(mop.P.TTS, startiming6)\n\tend\n\t\n   \tfor i = 1, linkcnt, 1 do         \n        local link = device.dnlinks[1]\n        local dev = link.devices[i]\n\t\t--log.debug("fs_cloudvibrate_mopyx:dev=%s", json.encode(dev))\n        local dev_inf = link.devices[i].uplink\n    \tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n    \tlocal trirmode = 0\n        if dev_inf.props.triggermode  == "绝对值" then\n            trirmode = 0\n        end\n        if dev_inf.props.triggermode  == "上升沿" then\n            trirmode = 1\n        end\n        if dev_inf.props.triggermode  == "下降沿" then\n            trirmode = 2\n        end\n        if dev_inf.props.triggermode  == "峰峰值" then\n            trirmode = 3\n        end\n        local joinmode = 0\n        if dev_inf.props.triggerjoin  == "不参与" then\n            joinmode = 0\n        end\n        if dev_inf.props.triggerjoin  == "参与" then\n            joinmode = 1\n        end\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n        end\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n        end\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n        end\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n        end    \n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\t\t\n        local sensor = {\n            CH = tonumber(dev_inf.props.channel),--通道号\n            GA = amplify,--GainAmplifier放大倍数\n            SF = tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n            FF = tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率\n            DA = tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数\n            DAS = dasvalue,--DAS, 硬件DA启用? \n            AA = tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数\n            TL = tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平\n            TM = trirmode,--TriggerMode触发方式\n            TJ = joinmode,--TriggerJoin 参与触发方式\n            SR = samolepoint ,--SampleRate 采样点数1\n            LP = tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数\n        }\n\t\t--log.debug("fs_cloudvibrate_mopyx:sensor=%s", json.encode(sensor))\n        table.insert(mop.P.CHS, sensor)                \n    end\n\tlocal resultstr = json.encode(mop)\n\tresultstr =\tresultstr:gsub(":null",":[{},{},{},{},{},{}]")\n\t--log.debug("fs_cloudvibrate_mopyx finish parse = %s",resultstr)\n    req.payload = resultstr\n   \t\n    log.debug("fs_cloudvibrate_mopyx request=%s", resultstr)\n\n    local ok, ack = ctx:ssend(req, 60000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n    log.debug("fs_cloudvibrate_mopyx result=%s", json.encode(result))\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n\nfunction Split(szFullString, szSeparator)  \n\tlocal nFindStartIndex = 1  \n\tlocal nSplitIndex = 1  \n\tlocal nSplitArray = {}  \n\twhile true do  \n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)  \n\t\tif not nFindLastIndex then  \n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))  \n\t\t\tbreak  \n\t\tend  \n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)  \n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)  \n\t\tnSplitIndex = nSplitIndex + 1  \n\tend  \n\treturn nSplitArray  \nend  	INLINE	2019-08-22 11:35:09.014+08	2020-07-24 17:45:13.732+08	2019-08-22	\N
c3959333-6b5d-4537-9433-6a547bdfb63c	BJlrk_angle_RG931	\N	LRK-RG931无线倾角仪	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("BJ: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("bj: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\n    local sData= toStrHex(hex)\n    log.debug("BJ: sData=%s",sData)\n    local spliteData = Split(sData,'&&')\n\t log.debug("BJ: spliteData=%s",spliteData)\n\t\n\tfor key,value in pairs(spliteData) do\n\t\tAllot(value)\n\n\tend\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("BJ: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)    \n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数    分割的字符分到各个table\nAllot = function(datastr)\n    local pollutantTypes = Split(datastr, ';')              --把datastr分割datastr为上面的value\n    for key, value in pairs(pollutantTypes) do \n\t\tlog.debug("BJ value=%s", value)\n        local name = Split(value, ':')\n\t\tlog.debug('到这ba')\n\t\tlog.debug("BJ  name[1]=%s", name[1])\n        if name[1] == 'GPS_DEV_J' then\n            local GPS_DEV_J = tonumber(string.format('%0.2f', tonumber(name[2])))\n            if GPS_DEV_J < 0 or GPS_DEV_J > 700 then\n                out.data.GPS_DEV_J= nil\n                log.debug('bj  [%s]out.data.GPS_DEV_J=nil')\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[speed] out of GPS_DEV_J:' .. tostring(GPS_DEV_J) .. ' is out of[0,700]'\n                else\n                    out.result.msg = '[speed] out of GPS_DEV_J:' .. tostring(GPS_DEV_J) .. ' is out of[0,700]'\n                end\n            else\n                out.data.GPS_DEV_J = GPS_DEV_J\n            end\n        elseif name[1] == 'GPS_DEV_W' then\n            local GPS_DEV_W = tonumber(string.format('%0.2f', tonumber(name[2])))\n            if GPS_DEV_W < 0 or GPS_DEV_W > 700 then\n                out.data.GPS_DEV_W = nil\n                log.debug('FME  [%s]out.data.GPS_DEV_W=nil')\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[speed] out of speed:' .. tostring(GPS_DEV_W) .. ' is out of[0,24.5]'\n                else\n                    out.result.msg = '[speed] out of speed:' .. tostring(GPS_DEV_W) .. ' is out of[0,24.5]'\n                end\n            else\n                out.data.GPS_DEV_W = GPS_DEV_W\n            end\n\t\telseif name[1] == 'BAT_DL' then\n            local BAT_DL = tonumber(string.format('%0.0f', tonumber(name[2])))\n            if BAT_DL < 0 or BAT_DL > 700 then\n                out.data.BAT_DL = nil\n                log.debug('FME  [%s]out.data.BAT_DL=nil')\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[speed] out of speed:' .. tostring(BAT_DL) .. ' is out of[0,24.5]'\n                else\n                    out.result.msg = '[speed] out of speed:' .. tostring(BAT_DL) .. ' is out of[0,24.5]'\n                end\n            else\n                out.data.BAT_DL = BAT_DL\n            end\t\n        elseif name[1] == ' QJY_SZX' then\n\t\t\tlog .debug('进来了么')\n            local QJY_SZX = tonumber(string.format('%0.4f', tonumber(name[2])))\n\t\t\tlog .debug('就是这了')\n\t\t\tlog .debug("BJ: QJY_SZX=%s",QJY_SZX)\n            if QJY_SZX < 0 or QJY_SZX > 70000 then\n                out.data.QJY_SZX = nil\n                out.result.code = 5001\n                out.result.msg = '[QJY_SZX] out of QJY_SZX pm10:' .. tostring(QJY_SZX) .. ' is out of[-40,60]'\n            else\n                out.data.QJY_SZX =QJY_SZX\n            end\n        elseif name[1] == 'QJY_SZY' then\n            local QJY_SZY = tonumber(string.format('%0.4f', tonumber(name[2])))\n            if QJY_SZY < 0 or QJY_SZY > 7000 then\n                out.data.QJY_SZY = nil\n                out.result.code = 5001\n                out.result.msg = '[QJY_SZY] out of QJY_SZY pm10:' .. tostring(QJY_SZY) .. ' is out of[-40,60]'\n            else\n                out.data.QJY_SZY =QJY_SZY\n            end\n        elseif name[1] == ' QJY_SZNH' then\n\t\t\tlog.debug('这里有没有')\n            local QJY_SZNH = tonumber(string.format('%0.4f', tonumber(name[2])))\n            if QJY_SZNH < 0 or QJY_SZNH > 7000 then\n                out.data.QJY_SZNH = nil\n                out.result.code = 5001\n                out.result.msg = '[QJY_SZNH] out of QJY_SZNH pm10:' .. tostring(QJY_SZNH) .. ' is out of[-40,60]'\n            else\n                out.data.QJY_SZNH =QJY_SZNH\n            end\n        elseif name[1] == 'QJY_WD' then\n            local QJY_WD = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if QJY_WD < 0 or QJY_WD > 200 then\n                out.data.QJY_WD = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[QJY_WD] out of noise :' .. tostring(QJY_WD) .. ' is out of[0,200]'\n                else\n                    out.result.msg = '[QJY_WD] out of QJY_WD :' .. tostring(QJY_WD) .. ' is out of[0,200]'\n                end\n            else\n                out.data.QJY_WD = QJY_WD\n            end\n        else\n        end\n    end\nend	INLINE	2019-04-04 10:05:46.81+08	2019-04-19 09:38:07.282+08	2019-04-04	\N
75267b8b-deeb-49a4-b3f8-0c775ea41cb0	qm_waterquality_2600	\N	常规五参数水质监测仪协议	1.0	d3684da7-e6e5-4925-a09f-dc80904a6b3a	d3684da7-e6e5-4925-a09f-dc80904a6b3a	f	d3684da7-e6e5-4925-a09f-dc80904a6b3a	Lua	--//01 协议文档/智慧城市/河流断面监测/mu900通讯协议.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n    local result={\n        data ={},\n        result = {}\n    }\n    local mo = tonumber(device.uplink.props.module)\n   \tif mo == nil then \n    \tmo = 1\n    end\n    if mo > 255 or mo < 1 then\n        errout.result = {code = 1004, msg = 'Invalid moduleId,moduleId >= 255 or < 1'}\n        ctx:done(json.encode(errout))\n    else\n        buff=iota.appendHexByte(buff,mo, endian)             \n        buff=iota.appendHexByte(buff, 0x03, endian)              \n        buff=iota.appendHexByte(buff, 0x01, endian)             \n        buff=iota.appendHexByte(buff, 0x82, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)              \n        buff=iota.appendHexByte(buff, 0x0A, endian)              \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n        ok,resp=ctx:ssend(buff,15000)\n        if ok then\n            result = unmarshall(resp)\n        end\n    end\n  local resultStr=json.encode(result)\n  log.debug('resultStr=%s',resultStr)\n  \tctx:done(resultStr)\nend\n--010314407ab3d541ca2afc410855d80000000044b12b013d19\n--moduleId=1\n--"PH": 3.917226,\n--"conductivity": 1417.343872,\n--"oxy": 8.520958,\n--"temp": 25.270988,\n--"turbidity": 0\nunmarshall=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local pH = iota.hexToFloat(hex,3,'B')\n        local temperature = iota.hexToFloat(hex,7,'B')\n        local oxygen = iota.hexToFloat(hex,11,'B') \n        local Conductivity = iota.hexToFloat(hex,15,'B')\n        local Turbidity = iota.hexToFloat(hex,19,'B')\n        out.data = {\n            PH = pH,\n            temp = temperature,\n            oxy = oxygen,\n            turbidity = Turbidity,\n            conductivity = Conductivity\n        }\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return out\nend\n \n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 25  then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1001\n        return false\n    end\n    if device.uplink.props.module ~= tostring(iota.hexToByte(data,0,'B')) then\n    \t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2017-09-14 18:58:23.435+08	2019-08-14 17:23:06.196+08	2017-09-14	\N
a45d8866-5e4f-48fc-a646-8462d4a516a6	fs_inclinometer_1502	\N	ModBus固定盒式测斜仪采集协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_1502", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)             -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1502 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    log.debug("fs_1502 ssend=%s",buff )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n    \tlog.debug('fs_1502 module %s result = %s',moduleNo,result)\n        ctx:done(result)\n    else\n\n    end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local scale=1000000.00;\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        out.data = {\n            temperature=Temp,\n            anglex = tonumber(string.format("%5.2f",xa)),\n            angley = tonumber(string.format("%5.2f",ya))\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1502  module %s 开始校验数据%s',moduleNo_check,data)\n    if data == nil or string.len(data)/2 ~= 23 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n    local dataModule=iota.hexToShort(data,2,'B')\n    if tostring(moduleNo_check) ~= tostring(dataModule) then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,dataModule)\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1502 module %s 数据校验通过',moduleNo_check)\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2017-08-28 19:48:05.651+08	2019-11-21 11:01:43.28+08	2017-08-26	\N
997039c0-458d-4302-a91d-147382abfc99	CT_SafeStep	\N	安全步距	1.0	aed14e79-005c-4916-afac-c1b60faeca1b	aed14e79-005c-4916-afac-c1b60faeca1b	f	aed14e79-005c-4916-afac-c1b60faeca1b	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： 安全步距说明书.pdf\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "CT_SafeStep.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("CT_SS 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("CT_SS 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tlocal count = #(device.dnlinks)\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 地址\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x01 = 采集\n\tbuff=iota.appendHexWord(buff, 1, endian)              -- 2: 起始地址\n\tbuff=iota.appendHexWord(buff, count, endian)  \t\t  --寄存器数量\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\tlocal length = iota.hexToByte(data,2,'B')\n\tfor i=1,length/2 do\n\t\tlocal outdata = {\n\t\t\ttype = 1,\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t\tlocal step = iota.hexToShort(data,3 + 2*(i-1),'B')\n\t\toutdata.data.step = step\n\t\tlocal childDevice=getDeviceInfo(i)\n\t\toutdata.device = childDevice.id\n\t\ttable.insert(out.data,outdata)\n\tend\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('CT_SS开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('CT_SS数据校验通过')\n    return true\n--crc\nend\n\n --获取传感器信息\nfunction getDeviceInfo(channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if  tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('savoir_485 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('savoir_485 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend	INLINE	2019-04-09 11:32:09.098+08	2019-04-09 15:31:05.797+08	2019-04-09	\N
03ba9b30-1d60-4da2-b9ff-1de9b514300c	lora2.0	\N		2.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        函数:\n        ssend: 同步发送数据到设备\n        asend: 异步发送数据到设备\n        notify: 通知平台解析完成的数据\n        done: 采集完成, 结束当前采集过程.\n]] \nstart=function()\n    log.debug("fslora2:start %s", "lora.lua")\nend\n\n-- 收到数据\nonData=function(data,pindex)   \n    local len=string.len(data)\n\tlocal module = string.sub(device.uplink.props.deveui,-4,-1)\n\tlocal modulecode = string.sub(data,1,4)\n\tlocal r=nil\n\tif module == modulecode then\n\t\tlocal code = iota.hexToByte(data,8,'B');\n\t\tlog.debug("fslora2:onData %s len %s code %s",data,len,tostring(code))\n\t\t\n\t\tlocal msgid,r1ok = redis.get(device.id)\n\t\tif len >= 70 and tostring(msgid) ~= string.sub(data,9,12) then \t\t\n\t\t\tr=parseData(data)\n\t\telseif len==54 and tostring(msgid) ~= string.sub(data,9,12)then\n\t\t\tlocal message = 'nil Data!'\n\t\t\tlocal errcode = 0\n\t\t\tlog.debug("fslora2 errorcode %s",tostring(code))\n\t\t\tif tonumber(code) == 1 then \n\t\t\t\tmessage =  '无配置'\n\t\t\t\terrcode = 10010007      \n\t\t\telseif tonumber(code) == 2 then \n\t\t\t\tmessage = '模块号获取失败'\n\t\t\t\terrcode = 30010101\n\t\t\telseif tonumber(code) == 3 then \n\t\t\t\tmessage = '电量不足'\n\t\t\t\terrcode = 60010002      \n\t\t\telseif tonumber(code) == 4 then \n\t\t\t\tmessage = '断路'\n\t\t\t\terrcode = 30010022\n\t\t\telseif tonumber(code) == 5 then \n\t\t\t\tmessage =  '短路'\n\t\t\t\terrcode = 30010023      \n\t\t\telseif tonumber(code) == 6 then \n\t\t\t\tmessage =  '超时'\n\t\t\t\terrcode = 30030001      \n\t\t\tend\n\t\t\tlocal errorcode={\n\t\t\t  data ={},\n\t\t\t  result = {code=errcode,msg=message},\n\t\t\t  type = 1\n\t\t\t}\n\t\t\tr = json.encode(errorcode)\n\t\telse\n\t\t\tlocal s={\n\t\t\t  data =result,\n\t\t\t  result = {},\n\t\t\t  type = 1\n\t\t\t}\n\t\t r = json.encode(s)\n\t\tend\n\telse \n\t\tlocal errorcode={\n\t\t  data ={},\n\t\t  result = {code=30010101,msg="数据异常,发错数据"},\n\t\t  type = 1\n\t\t}\n\t\tr = json.encode(errorcode)\n\tend\n    local msg = r\n    log.debug("fslora2:Parsed:%s",msg)\n    ctx:notify(msg)\n  \tif tostring(msgid) ~= string.sub(data,9,12) then\n    \treply(data)\n    end\nend\n\nparseData=function(data)\n    -- 51长度: 头 25, 数据24, 尾2\n \tlog.debug("fslora2:parseData")\n\tparseWakeup(data)--打印设备信息\n\tlocal module = device.pr\n    local node = string.sub(data,1,4)\n    local sentype = iota.hexToByte(data,16,'B');\n    local time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,17,'B'), month = iota.hexToByte(data,19,'B'), day =iota.hexToByte(data,20,'B'), hour =iota.hexToByte(data,21,'B'), min =iota.hexToByte(data,22,'B'), sec = iota.hexToByte(data,23,'B')}))\n    local data1 = iota.hexToFloat(data,25,'B');\n    local data2 = nil\n  \tlocal len=string.len(data)\n  \tif len == 74 then\n    \tdata2 = iota.hexToFloat(data,29,'B');\n    end\n    local data3 = nil\n  \tif len == 78 then\n    \tdata2 = iota.hexToFloat(data,29,'B');\n    \tdata3 = iota.hexToFloat(data,33,'B');\n    end\n\tlocal out={\n            data ={},\n            result = {},\n            type = 2\n          }\n  \tlocal subdevices = device.dnlinks[1].devices\n\tlocal subDevice = nil\n\tlocal subData={\n        data ={},\n        device=nil,\n        type = 1,\n        time=time\n    }\t\n\tif subdevices ~=nil then\n\t\tfor index,child in pairs(subdevices) do \n\t\t\tsubDevice = child\n\t\t\tsubData.device = child.id\n\t\tend\n\tend\n\tlocal hour =iota.hexToByte(data,21,'B')\n\tlocal min =iota.hexToByte(data,22,'B')\n\tlocal acqnumber = tonumber(hour)*60 + tonumber(min)\n\tif tonumber(sentype) == 0 then --振弦\n    \tlog.debug("fslora2:parseData振弦 subDevice = %s",json.encode(subDevice))\n\t\tlocal Phy=0\n\t\tif subDevice ~= nil then\n\t\t\tlocal k = subDevice.uplink.props.k or 0\n\t\t\tlocal kt = subDevice.uplink.props.kt or 0\n\t\t\tlocal f0 = subDevice.uplink.props.f0 or 0\n\t\t\tlocal t0 = subDevice.uplink.props.t0 or 0\n\t\t\tlog.debug("fslora2:parseData振弦  k =%s,kt=%s,f0=%s,t0=%s",k,kt,f0,t0)\n\t\t\t\n\t\t\tif k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\tPhy =k * (data1 ^ 2 - f0 ^ 2) + kt * (data3 - t0)\n\t\t\tend\n\t\t\tsubData.data = {frequency=data1, am=data2,temperature=data3,physicalvalue=Phy}\n      \t\tlog.debug("fslora2:parseData振弦  subData.data =%s",json.encode(subData.data))\n\t\t\ttable.insert(out.data,subData)\n\t\t\t\n\t\tend\n\telseif tonumber(sentype) == 1 then --杆式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\t\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 2 then --盒式测斜\n\t\tsubData.data = {anglex=data1, angley=data2,temperature=data3,_acq_number=acqnumber or 1000}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 3 then --压差\n\t\tsubData.data = {pressure=data1,temp =data2}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 4 then --裂缝计\n\t\tsubData.data = {length=data1}\n\t\ttable.insert(out.data,subData)\n\telseif tonumber(sentype) == 5 then --三轴加速度\n\t\tsubData.data = {degreex=data1, degreey=data2}\n\t\ttable.insert(out.data,subData)\n\telse\n\n\tend\n  \tlog.debug("fslora:parseData out = %s",json.encode(out))\n    return json.encode(out)\nend\n\nparseWakeup=function(data)\n    local node = string.sub(data,1,4)\n    local power = iota.hexToByte(data,9,'B');\n\tlocal version = "V"..tostring(iota.hexToShort(data,12,'B')/100)\n\tlocal history = iota.hexToShort(data,14,'B')\n  \tlog.debug("fslora2 node %s power %s version %s historycount %s",tostring(node),tostring(power),version,tostring(history))\nend\n\nreply=function(data)\n\tlocal node = string.sub(data,1,4)\n\tlocal msgid = string.sub(data,9,12)\t\n\tlocal buff = node.."0402"..msgid.."0009"\n\tlocal interval = device.props.interval\n  \tlocal deviceid = tostring(device.dnlinks[1].devices[1].id)\n  \tredis.set(device.id,msgid, tonumber(interval)+2)\n  \tctx:sleep(3)\n\tlocal r1,r1ok = redis.get("iota_device_"..deviceid)  --获取阈值超出时采集粒度\n  \t\n\tif r1 ~= nil and r1ok then \n\t  \tlocal value = Split(r1,":")\n\t\tlocal r = string.sub(value[2],1,1)\n\t\tlog.debug("fslora2 value %s  r1 %s",r1,r)\n\t\tlocal level = tonumber(r)\n\t\tif level == 0 then \n\t\t\tinterval = tonumber(device.props.interval)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 1 then \n\t\t\tinterval = tonumber(device.props.interval1)\n     \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 2 then \n\t\t\tinterval = tonumber(device.props.interval2)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telseif level == 3 then \n\t\t\tinterval = tonumber(device.props.interval3)\n      \t\tlog.debug("fslora2 interval value %s ",tostring(interval))\n\t\telse\n\t\tend\n    \t\n\tend\n\tbuff = iota.appendHexWord(buff, tonumber(interval), 'B')\n\tlocal year = os.date("%Y")\n\tlocal month = os.date("%m")\n\tlocal day = os.date("%d")\n\tlocal hour = os.date("%H")\n\tlocal minute = os.date("%M")\n\tlocal second = os.date("%S")\n\tbuff = iota.appendHexWord(buff, tonumber(year), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(month), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(day), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(hour), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(minute), 'B')\n\tbuff = iota.appendHexByte(buff, tonumber(second), 'B')\n\tbuff = iota.appendHexCrc(buff,'B',0)\n  \tlog.debug("fslora2 buff %s",buff)\n\tctx:asend(buff)\n\t\n\tlog.debug("fslora2 set redies device %s msgid %s ",deviceid,msgid)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2019-01-22 15:05:36.886+08	2019-06-20 10:24:46.03+08	2019-01-22	\N
f186407a-b804-4ce8-ac19-989d7296dba7	shzr_temp_ZCT330M-SW	\N	NB访问电信平台	1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\n\n--http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?equipmentId=863716040678390\nstart=function()\n    log.debug("shzr_temp_ZCT330M-SW start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\t    local pointIds = device.props.pointId \n\tlocal req = {\n        type= "http",\n      -- url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n\t\t--url=device.uplink.props.url,\n\t\turl="http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?",\n\t\t\n\t\t--http://iot.zc-sensor.com/nbiot/informationApi/getCurrentData.shtml?equipmentId=000000000000000\n    \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s",   \n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }  \n    req.url=req.url.."equipmentId="..device.props.pointId\n    log.debug("shzr_temp_ZCT330M-SW: 0000moudleid=%s request url=%s",device.props.pointId,req.url)\n    local ok,ack=ctx:ssend(req,7000)\n    if ack==nil then\n        log.debug("shzr_temp_ZCT330M-SW: 1111moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n    else\n        log.debug("shzr_temp_ZCT330M-SW: 2222moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n    end\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\t        if ack.body ~="" then -- http应答\n            qx=json.decode(ack.body)  -- 有数据\n\t\t\t\n            log.debug("44444shzr_temp_ZCT330M-SW ack=%s",ack.body)\n\t\t\tlog.debug("shzr_temp_ZCT330M-SW ack=%s",qx)\n\t\t\tlocal angleXs=qx['angleX']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] angleXs', angleXs)\n\t\t\tlocal angleXss=tonumber(angleXs)\n\t\t\tlocal angleYs=qx['angleY']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] angleYs', angleYs)\n\t\t\tlocal angleYss=tonumber(angleYs)\n\t\t\tlocal powers=qx['power']\n\t\t\tlog.debug('shzr_temp_ZCT330M-SW [%s] powers', powers)\n\t\t\tlocal powerss=tonumber(powers)\n\n\t\t\t out.data = {\n            angleX=angleXss,\n\t\t\tangleY=angleYss,\n            power=powerss\n           }\n\t\t\t\t\tlog.debug("shzr_temp_ZCT330M-SW: 12121212121json.encode(out)%s",json.encode(out))\n\t\t\t ctx:done(json.encode(out))\n\n        else\n            log.debug("7777777shzr_temp_ZCT330M-SW: moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body)            \n        end\n   \n\n\nend\n \n\n	INLINE	2019-09-12 16:51:53.155+08	2019-11-15 12:00:35.188+08	2019-09-12	\N
46011659-84f6-49cb-bfa0-69b295acb333	beijingzjzt_weight	\N	测重	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local  IDX_Start = 0  -- 起始指令\n\tlocal  IDX_CMD = 1; -- 数据字节\n    local  IDX_axeisCount = 2; -- 轴数\n    local IDX_year = 6\n\tlocal IDX_month =5\n\tlocal IDX_day = 4\n    local IDX_hour = 7\n    local IDX_minute =8\n    local IDX_second = 9\n\tlocal IDX_second1 = 10\n\tlocal IDX_Sequence=18; --序列号\n\tlocal  IDX_CarModle = 22; -- 车类型\n\tlocal  IDX_Roadway = 30; -- 车道号\n\tlocal  IDX_Speed=32;   --速度\n\tlocal  IDX_AxieWeight1 = 34; -- 轴一P1重量\n    local  IDX_AxieWeight2 = 36; -- 轴二p1重量\n\tlocal  IDX_AxieWeight3 = 38; -- 轴三p1重量\n\tlocal  IDX_AxieWeight4 = 40; -- 轴四p1重量\n\tlocal  IDX_AxieWeight5 = 42; -- 轴五p1重量\n\tlocal  IDX_AxieWeight6 = 44; -- 轴六p1重量\n\tlocal  IDX_AxieWeight7 = 46; -- 轴七p1重量\n\tlocal  IDX_AxieWeight8 = 48; -- 轴八p1重量\n\tlocal  IDX_AxieWeight9 = 50; -- 轴九p1重量\n\tlocal  IDX_AxieWeight10 = 52; -- 轴十p1重量\n\tlocal  IDX_AxieWeight11 = 54; -- 轴一P2重量\n    local  IDX_AxieWeight12 = 56; -- 轴二p2重量\n\tlocal  IDX_AxieWeight13 = 58; -- 轴三p2重量\n\tlocal  IDX_AxieWeight14 = 60; -- 轴四p2重量\n\tlocal  IDX_AxieWeight15 = 62; -- 轴五p2重量\n\tlocal  IDX_AxieWeight16 = 64; -- 轴六p2重量\n\tlocal  IDX_AxieWeight17 = 66; -- 轴七p2重量\n\tlocal  IDX_AxieWeight18 = 68; -- 轴八p2重量\n\tlocal  IDX_AxieWeight19 = 70; -- 轴九p2重量\n\tlocal  IDX_AxieWeight20 = 72; -- 轴十p2重量\n\tlocal  IDX_TotalBase1 =74; -- 轴距一\n\tlocal  IDX_TotalBase2 =76; -- 轴距二\n\tlocal  IDX_TotalBase3 =78; -- 轴距三\n    local  IDX_TotalBase4 =80; -- 轴距四\n\tlocal  IDX_TotalBase5 =82; -- 轴距五\n\tlocal  IDX_TotalBase6 =84; -- 轴距六\n\tlocal  IDX_TotalBase7 =86; -- 轴距七\n\tlocal  IDX_TotalBase8 =88; -- 轴距八\n\tlocal  IDX_TotalBase9 =90; -- 轴距九\n\tlocal  IDX_Carlength = 92; -- 车长\n\tlocal  IDX_Sensor=106;  --传感器是否失效\n\tlocal  IDX_Temp=110; --温度\n\tlocal  IDX_Effective=112; --有效值\n\t local  IDX_Weight = 114; -- 重量\n\t local  IDX_Cardirection = 120; -- 方向\n\n\t local  axiStart = iota.hexToByte(hex,IDX_Start,'B'); --起始位\n    log.debug("startw %s", "fs_weight_9803.lua")\n  \n    \n\tlocal  axiCMD = iota.hexToByte(hex,IDX_CMD); -- 数据字节\n\t\n    local  axisnum = iota.hexToUShort(hex,IDX_axeisCount,'L'); -- 轴数\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then \n    local year = iota.hexToByte(hex,IDX_year,"B")\n\t log.debug("fs_weight_9803 year=%s",year)\n    if year ~= nil then\n      year= year + 2000\n    end\n\t\tlocal month =iota.hexToByte(hex,IDX_month,"B")\n      log.debug("fs_weight_9803 year=%s",year)\n\t\tlocal day = iota.hexToByte(hex,IDX_day,"B")\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,"B")\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second1 = iota.hexToByte(hex,IDX_second,'B')\n\t\tlocal second2= iota.hexToByte(hex,IDX_second1,'B')\n\t\tlocal second=second1.."."..second2\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\tlocal  axieSequence = iota.hexToFloat(hex,IDX_sequence,'L');   --序列号\n\t    --车型\n\t\tlocal Modle1rist=string.sub(hex,45,47);\n\t\tlocal axieCarModle =toStrHex(Modle1rist)\n\t\tlocal axieRoadway = iota.hexToUShort(hex,IDX_Roadway,'L') --车道号\n\t\tlocal axieSpeed = iota.hexToUShort(hex,IDX_Speed,'L') --速度\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'L') --轴一P1重量\n\t\tlocal axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'L')  --轴二p1重量\n\t\tlocal axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'L')  --轴三p1重量\n\t\tlocal axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'L')\n\t\tlocal axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'L')\n\t\tlocal axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'L')\n\t\tlocal axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'L')\n\t\tlocal axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'L')\n\t\tlocal axieWeight9 = iota.hexToShort(hex,IDX_AxieWeight9,'L')\n\t\tlocal axieWeight10 = iota.hexToShort(hex,IDX_AxieWeight10,'L')\n\t\tlocal axieWeight11 = iota.hexToShort(hex,IDX_AxieWeight11,'L')\n\t\tlocal axieWeight12 = iota.hexToShort(hex,IDX_AxieWeight12,'L')\n\t\tlocal axieWeight13 = iota.hexToShort(hex,IDX_AxieWeight13,'L')\n\t\tlocal axieWeight14 = iota.hexToShort(hex,IDX_AxieWeight14,'L')\n\t\tlocal axieWeight15 = iota.hexToShort(hex,IDX_AxieWeight15,'L')\n\t\tlocal axieWeight16 = iota.hexToShort(hex,IDX_AxieWeight16,'L')\n\t\tlocal axieWeight17 = iota.hexToShort(hex,IDX_AxieWeight17,'L')\n\t\tlocal axieWeight18 = iota.hexToShort(hex,IDX_AxieWeight18,'L')\n\t\tlocal axieWeight19 = iota.hexToShort(hex,IDX_AxieWeight19,'L')\n\t\tlocal axieWeight20 = iota.hexToShort(hex,IDX_AxieWeight20,'L')\n\t\tlocal  axieTotalBase1 = iota.hexToShort(hex,IDX_TotalBase1,'L'); -- 轴距一\n\t\tlocal  axieTotalBase2 = iota.hexToShort(hex,IDX_TotalBase2,'L'); -- 轴距二\n\t\tlocal  axieTotalBase3 = iota.hexToShort(hex,IDX_TotalBase3,'L'); -- 轴距三\n\t\tlocal  axieTotalBase4 = iota.hexToShort(hex,IDX_TotalBase4,'L'); -- 轴距四\n\t\tlocal  axieTotalBase5 = iota.hexToShort(hex,IDX_TotalBase5,'L'); -- 轴距五\n\t\tlocal  axieTotalBase6 = iota.hexToShort(hex,IDX_TotalBase6,'L'); -- 轴距六\n\t\tlocal  axieTotalBase7 = iota.hexToShort(hex,IDX_TotalBase7,'L'); -- 轴距七\n\t\tlocal  axieTotalBase8 = iota.hexToShort(hex,IDX_TotalBase8,'L'); -- 轴距八\n\t\tlocal  axieTotalBase9 = iota.hexToShort(hex,IDX_TotalBase9,'L'); -- 轴距九\n\t\tlocal  axieCarlength= iota.hexToShort(hex, IDX_Carlength,'L'); -- 车长\n\t\tlocal  axieEffective= iota.hexToShort(hex, IDX_Effective,'L'); -- 有效值\n\t\tlocal  axieTemp= iota.hexToShort(hex,IDX_Temp,'L'); --温度\n    \tlog.debug("fs_weight_9803 axieTemp=%s",axieTemp);\n\t\tif  axieTemp~= nil then\n     axieTemp = axieTemp -100\n    end\n\t\tlocal  axieWeight = iota.hexToUInt(hex,IDX_Weight,'L');  --重量\n\t\tlocal  axieCardirection= iota.hexToShort(hex,IDX_Cardirection,'L') --方向\n\t\tout.data = {\n\t\t           CMD =axiCMD,\n\t\t\tCardirection = axieCardirection,\n\t\t\tSequence = axieSequence,\n\t\t\tshaftnum=axisnum,\n            axieCarModle = axieCarModle1rist,\n            axieRoadway= axieRoadway,\n\t\t\tSpeed= Speed,\n            axieWeight1 = axieWeight1,\n            axieWeight2= axieWeight2,\n            axieWeight3= axieWeight3,\n            axieWeight4= axieWeight4,\n            axieWeight5= axieWeight5,\n            axieWeight6= axieWeight6,\n            axieWeight7= axieWeight7,\n            axieWeight8= axieWeight8,\n\t\t\taxieWeight9= axieWeight9,\n\t\t\taxieWeight10= axieWeight10,\n\t\t\taxieWeight11= axieWeight11,\n\t\t\taxieWeight12= axieWeight12,\n\t\t\taxieWeight13= axieWeight13,\n\t\t\taxieWeight14= axieWeight14,\n\t\t\taxieWeight15= axieWeight15,\n\t\t\taxieWeight16= axieWeight16,\n\t\t\taxieWeight17= axieWeight17,\n\t\t\taxieWeight18= axieWeight18,\n\t\t\taxieWeight19= axieWeight19,\n\t\t\taxieWeight20= axieWeight20,\n\t\t\taxieTotalBase1=axieTotalBase1,\n            axieTotalBase2=axieTotalBase2,\n            axieTotalBase3=axieTotalBase3,\n           axieTotalBase4=axieTotalBase4,\n            axieTotalBase5=axieTotalBase5,\n            axieTotalBase6=axieTotalBase6,\n           axieTotalBase7=axieTotalBase7,\n          axieTotalBase8=axieTotalBase8,\n\t\t\taxieTotalBase9=axieTotalBase9,\n\t\t\tCarlength=axieCarlength,\n            Sensor=axieSensor,            \n            temperature = axieTemp,\n\t\t\tEffective = axieEffective,\n\t\t\tWeight= axieWeight,\n\t\t\tTime=recordTime\n        }\t\t\n\t\t\n\t\t--out.time=recordTime\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\t\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\nIsValid=function(data)\n    log.debug('BK_WaterLevel开始校验数据')\n    \n    if iota.hexToUShort(data,IDX_Sensor,'L') == 0x01  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n  if iota.hexToUShort(data,axiStart,'L') == 0x02  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug('BK_WaterLevel数据校验通过')\n    return true\n--crc\nend\n\n\n	INLINE	2019-03-25 17:29:01.726+08	2019-05-13 14:08:50.929+08	2019-03-25	\N
e9449473-2655-42a6-9523-50f4da34bba0	fs-microPower-2405	\N		2.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n\tlog.debug('fs_microPower_test : devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    local dataLen=string.len(data)/2\n\tif data ~= nil and dataLen>10 then --长度校验\n    \t\tlocal dtuid = device.uplink.props.id\n\t\t\t--log.debug('fs_microPower_test : dtuid= %s devices data =%s', dtuid,data)\n\t\t\tParseData(data)\n\telse\n\t\t\tlog.error('fs_microPower_test : recvd content is nil')\n\tend\nend\n\nfunction ParseData(data)\n\tout = {\n\t\t\tdata = {},\n\t\t\tresult = {},\n\t\t\ttype = 2\n\t}\n    log.debug('fs_microPower_test   dtuId=%s,  receive数据 data =%s',device.uplink.props.id ,data)\n\tif string.sub(data, 1, 2) == '01' and string.sub(data, -2, -1) == 'fa' then --振动数据\n\t\t\t--log.debug('fs_microPower_test : 振动数据 data =%s', data)\n\t\t\tlocal package = iota.hexToShort(data, 8, 'L')\n\t\t\tlocal packagecount = iota.hexToShort(data, 10, 'L')\n\t\t\tlocal datpackage = string.sub(data, 41, -9)\n\t\t\tlocal moduleid = iota.hexToShort(data, 16, 'L')\n\n\t\t\tlocal req1 = ''\n\t\t\tlocal req2 = ''\n\t\t\tlocal req = ''\n\t\t\treq1 = iota.appendHexByte(req1, 01, 'L') -- 0-3 压缩协议   4-7  协议版本\n\t\t\treq1 = iota.appendHexByte(req1, 0x02, 'L')\n\t\t\treq1 = iota.appendHexWord(req1, 0x0007, 'L')\n\t\t\treq1 = iota.appendHexWord(req1, 0x0000, 'L')\n\n\t\t\treq2 = iota.appendHexWord(req2, package, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, packagecount, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, moduleid, 'L')\n\t\t\treq2 = iota.appendHexWord(req2, 0x0000, 'L')\n\t\t\tlocal checkdat = req1 .. req2\n\t\t\tlocal checksum = HeadCheckSum(checkdat)\n\t\t\treq = req1\n\t\t\treq = iota.appendHexWord(req, checksum, 'L')\n\t\t\treq = req .. req2\n\t\t\treq = iota.appendHexWord(req, package, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = req .. '00000000'\n\t\t\treq = iota.appendHexCrc(req, 'L', 0) --校验\n\t\t\tlocal crc16 = string.sub(req, -4, -1)\n\t\t\treq = string.sub(req, 1, -13)\n\t\t\treq = req .. crc16\n\t\t\treq = iota.appendHexByte(req, 0, 'L')\n\t\t\treq = iota.appendHexByte(req, 0xfa, 'L')\n\t\t\t--log.debug('fs_microPower_test: datfileback: %s', req)\n\t\t\tctx:asend(req, 20000)\n\n\t\t\tif package == packagecount then\n\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpzd')\n\t\t\t\t\t--log.debug('fs_microPower_test: 解析dat:r1= %s', r1)\n\t\t\t\t\tParseFileDat(r1)\n\t\t\telse\n\t\t\t\t\tif package == 1 then\n\t\t\t\t\t\t\tlocal firstpackage = string.sub(datpackage, -80, -1)\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpzd', firstpackage)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test: 接收dat:datpackage= %s', firstpackage)\n\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\telse\n\t\t\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpzd')\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test: 接收dat:r1= %s package=%s', r1, package)\n\t\t\t\t\t\t\tlocal data = r1 .. datpackage\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpzd', data)\n\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\tend\n\t\t\tend\n\telse -- 非振动数据\n\t\t\tif string.sub(data, 13, 16) == '8a00' then\n\t\t\t\t\tlocal rtumodule = iota.hexToShort(data, 3, 'B')\n\t\t\t\t\tlocal power = iota.hexToByte(data, 13, 'B')\n\t\t\t\t\tlog.debug('fs_microPower_test: 剩余电量: %s', power)\n\t\t\t\t\tlocal strdevice = toHexStr(json.encode(device))\n\t\t\t\t\tstrdevice = iota.appendHexCrc(strdevice, 'B', 0)\n\t\t\t\t\tlocal crc = string.sub(strdevice, -4, -1)\n\t\t\t\t\t--log.debug('fs_microPower_test : devices crc =%s', crc)\n\t\t\t\t\tlocal r1, ok = redis.get(device.id .. '_mpset')\n\t\t\t\t\tif ok and r1 ~= nil then\n\t\t\t\t\t\t\tif crc == r1 then\n\t\t\t\t\t\t\t\t\t--log.debug('fs_microPower_test : 配置无修改')\n\t\t\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0, 'B') -- 是否下发\n\t\t\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tack = '配置无修改'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test : 配置有修改')\n\t\t\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 1, 'B') -- 是否下发\n\t\t\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\t\t\tredis.set(device.id .. '_mpset', tostring(crc))\n\t\t\t\t\t\t\t\t\tctx:sleep(2)\n\t\t\t\t\t\t\t\t\tDeploy() --配置\n\t\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test : 配置初次配置')\n\t\t\t\t\t\t\tlocal req = ''\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0A01, 'B') --指令\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0x0013, 'B') --数据区长度\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%Y'), 'B') -- 年\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%m'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%d'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%H'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, os.date('%M'), 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, os.date('%S'), 'B') --秒\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.dis, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.ot, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.acq, 'B')\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 1, 'B') -- 是否下发\n\t\t\t\t\t\t\t--req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, 0, 'B') --当前版本\n\t\t\t\t\t\t\treq = iota.appendHexWord(req, device.uplink.props.delay, 'B') --休眠延时\n\t\t\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test: dtuid: %s,苏醒帧返回: %s', device.uplink.props.id,req)\n\t\t\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\t\t\tredis.set(device.id .. '_mpset', tostring(crc))\n\t\t\t\t\t\t\tctx:sleep(2)\n\t\t\t\t\t\t\tDeploy() --配置\n\t\t\t\t\tend\n\t\t\tend\n\n\t\t\tif string.sub(data, 13, 16) == '8a02' then\n\t\t\t\t\tlog.debug('fs_microPower_test : 设备休眠')\n\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\tack = '设备休眠'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\n\t\t\tlocal rtumodule = iota.hexToShort(data, 3, 'B')\n\t\t\tif string.sub(data, 13, 16) == '8601' then\n\t\t\t\t\tlocal time = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = iota.hexToShort(data, 15, 'B'), month = iota.hexToByte(data, 17, 'B'), day = iota.hexToByte(data, 18, 'B'), hour = iota.hexToByte(data, 19, 'B'), min = iota.hexToByte(data, 20, 'B'), sec = iota.hexToByte(data, 21, 'B')}))\n\t\t\t\t\tlocal sensorCount = iota.hexToByte(data, 26, 'B')\n\n\t\t\t\t\tlocal isover = iota.hexToByte(data, 25, 'B') --尾包\n\t\t\t\t\tlocal datalength = 0\n\t\t\t\t\tlocal firststart = 27\n\t\t\t\t\tfor i = 1, sensorCount, 1 do\n\t\t\t\t\t\t\tfirststart = firststart + datalength\n\t\t\t\t\t\t\tlocal sensorType = iota.hexToByte(data, firststart, 'B')\n\t\t\t\t\t\t\tlocal module = iota.hexToShort(data, firststart + 3, 'B')\n\t\t\t\t\t\t\tlocal channel = iota.hexToByte(data, firststart + 2, 'B')\n        \t\t\t\t\t--log.debug('fs_microPower_test: dtuid: %s,module返回: %s', device.uplink.props.id,tostring(module))\n\t\t\t\t\t\t\tdatalength = iota.hexToByte(data, firststart + 1, 'B') + 6\n\t\t\t\t\t\t\tif sensorType == 0 then --振弦\n\t\t\t\t\t\t\t\t\tlocal childDevice = getZxDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\tam = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif sensorType == 1 then --485\n\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\tlocal protocalCode = iota.hexToShort(data, firststart + 6, 'B')\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: protocalCode: %s', protocalCode)\n\t\t\t\t\t\t\t\t\tif protocalCode == 1503 or protocalCode == 1502 then --测斜\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 9102 then --裂缝\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data, firststart + 12, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 1102 then --温湿度\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data, firststart + 16, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\t\tif protocalCode == 9002 then --压差\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data, firststart + 12, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data, firststart + 16, 'B'),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data, firststart + 20, 'B')\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tif protocalCode == 2045 then --扬尘\n\t\t\t\t\t\t\t\t\t\t\tlocal datacnt = iota.hexToByte(data, firststart + 11, 'B')\n\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test  dtuId=%s: 2405',device.uplink.props.id)\n\t\t\t\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfo(module, channel)\n            \t\t\t\t\t\t\t\t--log.debug('fs_microPower_test  dtuId=%s: childDevice =%s',device.uplink.props.id,childDevice)\n\t\t\t\t\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm25 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 12, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm10 = tonumber(string.format('%0.0f', iota.hexToFloat(data, firststart + 16, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnoise = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 20, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttemp = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 24, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thumidity = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 28, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twindspeed = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 32, 'B'))),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twinddir = tonumber(string.format('%0.1f', iota.hexToFloat(data, firststart + 36, 'B')))\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttime = time\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t--log.debug('fs_microPower_test  dtuId=%s,result: %s', device.uplink.props.id,json.encode(rst))\n\t\t\t\t\t\t\t\t\t\t\trst.result={}\n\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm25 == nil then\n\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = 'data parse error'\n\t\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test parse error dtuId=%s: 2405 data =%s',device.uplink.props.id,data)\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm25 <= 0 or rst.data.pm25 > 700 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = out.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[pm2.5] out of ranges pm2.5:' .. tostring(rst.data.pm25) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.pm25 = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.pm10 <= 0 or rst.data.pm10 > 700 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of [0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[pm10] out of ranges pm10:' .. tostring(rst.data.pm10) .. ' is out of (0,700]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.pm10 = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.windspeed < 0 or rst.data.windspeed > 24.5 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of (0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[windspeed] out of ranges windspeed:' .. tostring(rst.data.windspeed) .. ' is out of [0,24.5]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.windspeed = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.winddir < 0 or rst.data.winddir > 360 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of (0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[winddir] out of ranges winddir:' .. tostring(rst.data.winddir) .. ' is out of [0,360]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.winddir = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.temp < -40 or rst.data.temp > 60 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[temp] out of ranges temp:' .. tostring(rst.data.temp) .. ' is out of [-40,60]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.temp = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.humidity <= 0 or rst.data.humidity > 100 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t -- out.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of [0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[humidity] out of ranges humidity:' .. tostring(rst.data.humidity) .. ' is out of (0,100]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.humidity = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\tif rst.data.noise < 0 or rst.data.noise > 200 then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.code = 5001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif rst.result.msg ~= nil then\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = rst.result.msg .. '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t--out.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.result.msg = '[noise] out of ranges noise:' .. tostring(rst.data.noise) .. ' is out of [0,200]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trst.data.noise = nil\n\t\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test: insert')\n\t\t\t\t\t\t\t\t\t\t\ttable.insert(out.data, rst)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug('fs_microPower_test  dtuId=%s,dataresult: %s', device.uplink.props.id,json.encode(out))\n\t\t\t\t\tlocal req = ''\n\t\t\t\t\treq = iota.appendHexByte(req, 0xfe, 'B') --帧头\n\t\t\t\t\treq = iota.appendHexWord(req, 0x000c, 'B') --设备号：0x0B，多通道数据采集系统\n\t\t\t\t\treq = iota.appendHexWord(req, rtumodule, 'B') --模块号\n\t\t\t\t\treq = iota.appendHexByte(req, 0x01, 'B') --命令源\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0601, 'B') --指令\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --消息ID\n\t\t\t\t\treq = iota.appendHexWord(req, 0x0000, 'B') --数据区长度\n\t\t\t\t\treq = iota.appendHexCrc(req, 'B', 0) --校验\n\t\t\t\t\treq = iota.appendHexByte(req, 0xef, 'B') --帧尾\n\t\t\t\t\tlog.debug('fs_microPower_test: databack: %s', req)\n\t\t\t\t\tctx:asend(req, 20000)\n\t\t\t\t\tctx:notify(json.encode(out))\n\t\t\tend\n\tend\nend\n\nfunction Deploy()\n\tlocal total = totalSensors()\n\tlog.debug('fs_microPower_test : totalSensors =%s', total)\n\tlocal over = 0\n\tlocal onepag = 0\n\tlocal totallength = 3\n\tlocal buff = ''\n\n\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\tover = over + 1\n\t\t\t\t\tonepag = onepag + 1\n\t\t\t\t\tif subdevice.props.sensortype == 'zx' then\n\t\t\t\t\t\t\ttotallength = totallength + 18\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --传感器类型\n\t\t\t\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal settingvib = tonumber(colgain) + tonumber(incentive) * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test : settingvib =%s', settingvib)\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, settingvib, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.k, 'B') --振弦采集参数\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B') --振弦频率初值\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --上传频谱ID\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --采集选项\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.props.sensortype ~= 'zx' and subdevice.props.sensortype ~= 'zd' then\n\t\t\t\t\t\t\ttotallength = totallength + 18\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --传感器类型\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\t\t\t\tend\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlocal setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\t\t\t\t--log.debug('fs_microPower_test : setting =%s', setting)\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, setting, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x5C, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pmtpf, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pmten, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --0\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25a, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm25b, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10a, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.pm10b, 'B') --参数\n        \t\t\t\t\tlog.debug('fs_microPower_test : pm deploy buff =%s', buff)\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.noisea, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.noiseb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.tempa, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.tempb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.humia, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.humib, 'B') --参数\t\t\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speeda, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.speedb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.directiona, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, subdevice.uplink.props.directionb, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\n\t\t\t\t\t\t\tbuff = iota.appendHexFloat(buff, 0x00, 'B') --参数\t\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\tif subdevice.props.sensortype == 'zd' then\n\t\t\t\t\t\t\ttotallength = totallength + 31\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B') --通道号\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B') --传感器id\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --子指令个数\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x04, 'B') --传感器类型\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x00, 'B') --选项1\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x05, 'B') --选项2\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x01, 'B') --选项3\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B') --选项4\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B') --选项5\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0x12, 'B') --长度\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B') --定时采样间隔\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B') --定时采样时长\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B') --加速度触发采样时长\n\t\t\t\t\t\t\t--buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n\t\t\t\t\t\t\t--buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x42c8, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x4248, 'B')\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, 0x0000, 'B')\n\t\t\t\t\t\t\tlocal trigger1 = tonumber(subdevice.uplink.props.triggerlevel) * 10\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, trigger1, 'B') --触发加速度\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B') --加速度范围\n\t\t\t\t\t\t\tbuff = iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B') --滞后点数\n\t\t\t\t\tend\n\t\t\t\t\tif over == 8 or onepag == total then\n\t\t\t\t\t\t\tlocal buffhead = ''\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0xfe, 'B') --帧头\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x000c, 'B') --设备号：0x0c，多通道数据采集系统\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B') --模块号\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x01, 'B') --命令源\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x0306, 'B') --指令\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, 0x0000, 'B') --消息ID\n\t\t\t\t\t\t\tbuffhead = iota.appendHexWord(buffhead, totallength, 'B') --数据区长度\n\t\t\t\t\t\t\tif onepag == total then\n\t\t\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x01, 'B') --尾包\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, 0x00, 'B') --尾包\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, total, 'B') --采集指令总通道指令个数\n\t\t\t\t\t\t\tbuffhead = iota.appendHexByte(buffhead, over, 'B') --该分包通道指令个数\n\t\t\t\t\t\t\tbuff = buffhead .. buff\n\t\t\t\t\t\t\tbuff = iota.appendHexCrc(buff, endian, 0) --校验\n\t\t\t\t\t\t\tbuff = iota.appendHexByte(buff, 0xef, 'B') --帧尾\n\t\t\t\t\t\t\tlocal ok, ack = ctx:ssend(buff, 20000)\n\t\t\t\t\t\t\tlog.debug('fs_microPower_test : deploy back =%s', ack)\n\t\t\t\t\t\t\tbuff = ''\n\t\t\t\t\t\t\tif over == 8 then\n\t\t\t\t\t\t\t\t\tover = 0\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\ttotallength = 3\n\t\t\t\t\t\t\tif onepag == total then\n\t\t\t\t\t\t\t\t\tlog.debug('fs_microPower_test 配置下发完成')\n\t\t\t\t\t\t\t\t\tlocal re = {\n\t\t\t\t\t\t\t\t\t\t\tresult = nil,\n\t\t\t\t\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\t\t\t\t\t\tack = '配置下发完成'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tctx:notify(json.encode(re))\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\tend\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid, channel)\n\tif device.dnlinks ~= nil then\n\t\t\t--local subdevices = device.dnlinks[1].devices\n\t\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\t\t\tif tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n\t\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_test has no device module=%s channel=%s', moduleid, channel)\n\t\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t\tlog.debug('fs_microPower_test has no subdevices.')\n\t\t\treturn nil -- 没有子设备\n\tend\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid, channel)\n\tif device.dnlinks ~= nil then\n\t\t\t--local subdevices = device.dnlinks[1].devices\n\t\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\t\tfor j, subdevice in pairs(dnlink.devices) do\n\t\t\t\t\t\t\tif tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n\t\t\t\t\t\t\t\t\treturn subdevice\n\t\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_test has no device module=%s channel=%s', moduleid, channel)\n\t\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\t\tlog.debug('fs_microPower_test has no subdevices.')\n\t\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\t\tif not nFindLastIndex then\n\t\t\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\t\t\tbreak\n\t\t\tend\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n\t--log.debug('fs_microPower_test : dat content  =%s', dathex)\n\tlocal out = {\n\t\t\tdata = {},\n\t\t\tresult = {},\n\t\t\ttype = 2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex, offset, 'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex, offset, 'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex, offset, 'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex, offset, 'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex, offset, 'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId, channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\t\toffset = offset + 2\n\t\t\tlocal samplefreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 采样频率\n\t\t\toffset = offset + 4\n\t\t\tlocal filterfreq = iota.hexToFloat(dathex, offset, 'L', 4) -- 滤波频率\n\t\t\toffset = offset + 4\n\t\t\tlocal gainamplifier = iota.hexToByte(dathex, offset, 'B') -- 放大倍数\n\t\t\toffset = offset + 1\n\t\t\tlocal triggertype = iota.hexToByte(dathex, offset, 'B') -- 触发方式\n\t\t\toffset = offset + 1\n\t\t\tlocal year = iota.hexToByte(dathex, offset, 'B') + 2000\n\t\t\toffset = offset + 1\n\t\t\tlocal mon = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal day = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal hour = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal min = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\tlocal sec = iota.hexToByte(dathex, offset, 'B')\n\t\t\toffset = offset + 1\n\t\t\toffset = offset + 12\n\t\t\tlocal Ldata = iota.hexToInt(dathex, offset, 'B')\n\t\t\toffset = offset + 4\n\t\t\tlog.debug('fs_microPower_test deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s', deviceId, channel, samplefreq, filterfreq, gainamplifier, triggertype, year, mon, day, hour, min, sec)\n\n\t\t\tlocal floatcount = (string.len(dathex) / 2 - 40) / 4\n\t\t\t--log.debug('fs_microPower_test begin parse')\n\t\t\tlocal vols = {}\n\t\t\tfor i = 1, floatcount do\n\t\t\t\t\toffset = 40 + (i - 1) * 4\n\t\t\t\t\tvols[i] = iota.hexToFloat(dathex, offset, 'L', 6)\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_test finish parse')\n\n\t\t\tlocal rst = {\n\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t_data_type = 'vib',\n\t\t\t\t\t\t\tphysicalvalue = vols,\n\t\t\t\t\t\t\tsampleFreq = samplefreq,\n\t\t\t\t\t\t\tfilterFreq = filterfreq,\n\t\t\t\t\t\t\tgainAmplifier = gainamplifier,\n\t\t\t\t\t\t\ttriggerType = triggertype,\n\t\t\t\t\t\t\tversion = version\n\t\t\t\t\t},\n\t\t\t\t\tdevice = subdevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date('%Y-%m-%dT%H:%M:%S+08:00', os.time({year = year, month = mon, day = day, hour = hour, min = min, sec = sec}))\n\t\t\t}\n\t\t\ttable.insert(out.data, rst)\n\t\t\t--log.debug('fs_microPower_test cloudvibrate=%s', json.encode(out))\n\t\t\tctx:notify(json.encode(out))\n\telse\n\t\t\tlog.debug('fs_microPower_test not found device module=%s channel=%s', deviceId, channel)\n\tend\nend\n\nfunction totalSensors()\n\tlocal sensorcnt = 0\n\tif device.dnlinks ~= nil then\n\t\tfor i, dnlink in pairs(device.dnlinks) do\n\t\t\t\tsensorcnt = #(dnlink.devices) + sensorcnt\n\t\tend\n\tend\n\treturn sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr = function(str)\n\tlocal len = string.len(str)\n\tlocal hex = ''\n\tfor i = 1, len do\n\t\t\tlocal bi = string.byte(str, i)\n\t\t\thex = hex .. string.format('%02X', bi)\n\tend\n\treturn hex\nend\n\nfunction HeadCheckSum(data)\n\tlocal sum = 0\n\tlocal len = string.len(data)\n\t--log.debug('fs_microPower_test: len: %s', len)\n\tfor i = 1, len, 4 do\n\t\t\tlocal te = tonumber(string.sub(data, i, i + 3), 16)\n\t\t\tlog.debug('fs_microPower_test: te: %s', te)\n\t\t\tsum = sum + tonumber(te)\n\tend\n\t--log.debug('fs_microPower_test: sum: %s', sum)\n\treturn 0xffff - sum\nend	INLINE	2019-01-21 17:40:06.748+08	2020-11-23 16:23:09.288+08	2019-01-21	\N
5ed1c355-baee-4949-bc0b-e59ede0b4f85	anXin_temHum_1130	\N	安信温湿度协议（请求应答）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--[[\n协议号: 9028;\n协议名: modbus 数据采集仪.\n]]--lucas\nstart=function ()\n\tlog.debug("start %s, ctx=%s", "anXin_Settlemen_9028.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序\n  -- ff41584a000a000101379c\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, 0xFF, BE);             -- 1:  帧头\n\tbuff=iota.appendHexByte(buff, 0x41, BE);\n\tbuff=iota.appendHexByte(buff, 0x58, BE);\n\tbuff=iota.appendHexByte(buff, 0x4a, BE);\n    buff=iota.appendHexWord(buff, 3, BE)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)   -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x01, BE);  --功能码  0x01采集\n\tbuff=iota.appendHexCrc(buff, 'B' ,0)   --CRC16\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  ff41584a000a0004800000f6180aa5cead  沉降63mm 温度27.25°   moduleId=4\n--moduleId=4  \nfunction protocol_decode(da)\n \n\tlocal data = da;\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug(data)\n\t--判断数据有效性\t\t\t\n  if string.len(data)/2 ~=15 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\t\n\telse\n\tlocal startbyte_1 = iota.hexToByte(data, 0,'B');\n\tlocal startbyte_2 = iota.hexToByte(data, 1,'B');\n\tlocal startbyte_3 = iota.hexToByte(data, 2,'B');\n\tlocal startbyte_4 = iota.hexToByte(data, 3,'B');\n\tlocal devicetype = iota.hexToByte(data, 5,'B'); --  :设备类型0a 温湿度，\n\t\n\tif startbyte_1 ~= 0xFF or startbyte_2 ~= 0x41 or startbyte_3 ~= 0x58 or startbyte_4 ~= 0x4a or devicetype ~= 0x0a then\n\t\tlog.debug("帧头错误")\n    else\n       log.debug("帧头正确")\n\tend\n  \t\t\t\t\n\t\n    log.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t--计算原始值\n\t\tlocal temperature\t = iota.hexToShort(data,9,'B')/100\n        local humidity = iota.hexToShort(data, 11,'B')/100\n     \n\t\t\n\t\tout.data = {\n\t\ttemperature\t=temperature,\n        humidity\t=humidity\t\n\t\t};\n    end\n\t return json.encode(out)\nend\n	INLINE	2017-08-29 19:07:13.721+08	2019-12-23 16:18:46.793+08	2017-08-21	\N
158509e9-b030-42ba-8330-46ef28dfb38b	VOC_ys7	\N	人流量统计萤石	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n    log.debug("YSC5Si start device=%s", json.encode(device.props))\n\tlocal req = {\n        type= "http",\n        url='',  --  https://open.ys7.com/api/lapp/token/get 获取token\n    \tmethod="post",\n        header={}\n    }\n\treq.url=device.props.tokenUrl\n    log.debug("YSC5Si:  url=%s",req.url)\n    req.ContentType='application/x-www-form-urlencoded'\n        \n    local param={\n      appKey = device.props.username,\n      appSecret = device.props.secret\n    }\n\treq.url = req.url.."?appKey="..param.appKey.."&appSecret="..param.appSecret\n    log.debug("YSC5Si:param="..json.encode(param))\n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("YSC5Si:  ok=%s",ok)\n    else\n        log.debug("YSC5Si:  ok=%s,token=%s",ok,ack.body)\n    end\n    local out={\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 or ack.code==60022 and ack.body ~="" then -- http应答\n           local dataTable=json.decode(ack.body)\n          \tlocal token=dataTable.data.accessToken            \n            \n\t\t\t --请求数据\n\t\t\tlocal datareq = {\n\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\turl='https://open.ys7.com/api/lapp/passengerflow/hourly',  -- 当天每小时时间\n\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\theader={}\n\t\t\t\t\t}\n\n\t\t\tdatareq.ContentType='application/x-www-form-urlencoded'\n\t\t\t\n\t\t\tlocal param={\n\t\t\t  accessToken = token,\n\t\t\t  deviceSerial = device.props.deviceSerial\n\t\t\t}\n\t\t\tdatareq.url=datareq.url.."?accessToken="..param.accessToken.."&deviceSerial="..param.deviceSerial.."&channelNo=1"\n\t\t\tlog.debug("YSC5Si:GetDayData param ="..json.encode(param))\t\t\t\t\n\t\t     --get发送\n\t\t\t local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack==nil then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif dataack.code==200 and dataack.body ~="" then -- http应答\n\t\t\t\t\talldataTable=json.decode(dataack.body)  -- 有数据\n\t\t\t\t\tlog.debug("YSC5Si:  Data Get Result:%s ",dataack.body)            \n\t\t\t\t\tlocal instant_data=alldataTable.data\n\t\t\t\t\tlocal timetable = os.date("*t", os.time());   -->os.date用法\n\t\t\t\t\tlocal hourtime = timetable.hour\n\t\t\t\t\tif instant_data ~= nil then\n\t\t\t\t\t\tfor key,value in pairs(instant_data) do \n\t\t\t\t\t\t\tif (hourtime - 1) == value.hourIndex then\n\t\t\t\t\t\t\t\tout.data.inflow = value.inFlow\n\t\t\t\t\t\t\t\tout.data.outflow = value.outFlow\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("YSC5Si:  request data error:%s body:%s",ack.code,ack.body)            \n\t\t\t\tend\n\t\t\tend\t\n            \n        else\n            log.debug("YSC5Si:  request data error:%s body:%s",ack.code,ack.body)            \n        end\n    end\n\tlog.debug("YSC5Si:  DResult:%s ",json.encode(out))\n\tctx:done(json.encode(out))\nend\n \nonData=function()\n\nend\n	INLINE	2019-04-30 09:41:17.578+08	2019-05-06 16:25:25.257+08	2019-04-30	\N
9b35efe3-e7d0-4364-b398-5a4a7d10ab20	soilDT14301	\N		1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	--//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞   --修改部分模块输出名称，添加通用性\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    ok = ctx:asend('0102')\n    log.debug('soilDT14301 device =%s', json.encode(device))\nend\n\nonData =\n    function(hex, index)\n    log.debug('soilDT14301 7777888888=%s[%s] type(index)=[%s]', hex, index, type(index))\n    if index == 2 then\n        ok = ctx:asend('670d0a') --"g/n/r"  DT运行当前工作计划\n        ctx:sleep(1)\n        ok = ctx:asend('2f480d0a') --"/H/n/r"  DT 按照指定格式 上报数据\n    end\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = HextoStr(hex)\n        log.debug('soilDT14301 sData是 %s', sData)\n        --获取子字符串表\n        local allResponse = Split(sData, ';')\n     log.debug("soilDT14301 allResponse=%s",json.encode(allResponse))\n        local allResponseCount = table_leng(allResponse)\n        --移除表内的“”和nil\n        for i = allResponseCount, 1, -1 do\n            v = allResponse[i]\n            if v == '' or v == nil or string.len(v) < 10 then\n                table.remove(allResponse, i)\n                log.debug('soilDT14301 表内的“”和nil 移除元素k=%s v=%s', i, v)\n            end\n        end\n\n        --分析单类数据\n        local resplength = table_leng(allResponse)\n        local phys = {} --存储所有通道物理量\n        local moduleNo  --模块号\n        local dateTimeStr\n        local timenow\n        for k, v in ipairs(allResponse) do\n            dataIndex = string.sub(v, 1, 1)\n             --单条数据首字母   D为设备信息 ，A为数据\n\n            if dataIndex == 'D' then\n                local otherData = Split(v, ',')\n                moduleNo = otherData[2]\n                local dateStr = otherData[4]\n                local timeStr = otherData[5]\n                dateTimeStr = string.format('%s %s', dateStr, timeStr)\n                timenow = unixtimestamp(dateTimeStr)\n            elseif dataIndex == 'A' then\n                local singleData = Split(v, ',')\n                for sensorKey, sensorValue in ipairs(singleData) do\n                    if sensorKey > 2 then\n                        phys[sensorKey - 2] = singleData[sensorKey]\n                    end\n                end\n            end\n        end\n\n        --匹配数据部分\n\n        -- local childDevice={}--测试用\n        -- childDevice.id=123  --测试用\n\n        for index, childDevice in pairs(device.dnlinks[1].devices) do\n            log.debug('soilDT14301 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n            local channelStrCheck = childDevice.uplink.props.channel\n            log.debug('soilDT14301 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n            local relatedChannel = Split(channelStrCheck, ',')\n            local valueNum = table_leng(relatedChannel)\n\n            if childDevice.props.sensortype == 'zx' then\n                local Frequency_index = tonumber(relatedChannel[1])\n                local Temperature_index = tonumber(relatedChannel[2])\n                local Frequency = tonumber(phys[Frequency_index])\n                local Temperature = tonumber(phys[Temperature_index])\n        \t\tlog.debug("soilDT14301  振弦通道[%s]",channelStrCheck)\n                if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("soilDT14301  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K == nil or Kt == nil or Fo == nil or To == nil then\n                        log.debug("soilDT14301  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                        Phy = nil\n                    else\n                        log.debug("soilDT14301  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n                        log.debug("soilDT14301 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                            data = {\n                                frequency = tonumber(string.format('%0.3f', Frequency)),\n                                temperature = tonumber(string.format('%0.2f', Temperature)),\n                                physicalvalue = tonumber(string.format('%0.3f', Phy))\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soilDT14301: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n        \n       elseif childDevice.props.sensortype == 'duowei' then\n\t\t\t    local xLength_index = tonumber(relatedChannel[1])\n\t\t\t\tlocal yLength_index = tonumber(relatedChannel[2])\n\t\t\t\tlocal xCoordinate_index = tonumber(relatedChannel[3])\n\t\t\t\tlocal yCoordinate_index = tonumber(relatedChannel[4])\n\t\t\t\tlocal zCoordinate_index = tonumber(relatedChannel[5])\n\t\t\t\tlocal xAcceleration_index = tonumber(relatedChannel[6])\n\t\t\t\tlocal yAcceleration_index = tonumber(relatedChannel[7])\n\t\t\t\tlocal zAcceleration_index = tonumber(relatedChannel[8])\n\t\t\t\tlocal temperature_index = tonumber(relatedChannel[9])\n                local temperature = phys[temperature_index]\n\t\t\t\tlocal xLength = phys[xLength_index]\n\t\t\t\tlocal yLength = phys[yLength_index]\n\t\t\t\tlocal xCoordinate = phys[xCoordinate_index]\n\t\t\t\tlocal yCoordinate = phys[yCoordinate_index]\n\t\t\t\tlocal zCoordinate = phys[zCoordinate_index]\n\t\t\t\tlocal xAcceleration = phys[xAcceleration_index]\n\t\t\t\tlocal yAcceleration = phys[yAcceleration_index]\n\t\t\t\tlocal zAcceleration = phys[zAcceleration_index]\n\t\t\t\tlocal data1 = {\n                    data = {\n                                temperature=temperature,\n                                zAcceleration = zAcceleration,\n                                yAcceleration = yAcceleration,\n                                xAcceleration = xAcceleration,\n\t\t\t\t\t\t\t\txLength = xLength,\n\t\t\t\t\t\t\t\tyLength = yLength,\n\t\t\t\t\t\t\t\tyCoordinate = yCoordinate,\n\t\t\t\t\t\t\t\tzCoordinate = zCoordinate,\n\t\t\t\t\t\t\t\txCoordinate = xCoordinate\n\t\t\t\t\t\t\t\t\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soilDT14301: 多维位移通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n        \n        \n            elseif childDevice.props.sensortype == 'dy' then\n                local Vx_index = tonumber(relatedChannel[1])\n                local Vx = phys[Vx_index]\n                local Vy\n                local Temperature\n                if valueNum == 2 then\n                    local Temperature_index = tonumber(relatedChannel[2])\n                    Temperature = tonumber(phys[Temperature_index])\n                elseif valueNum == 3 then\n                    local Vy_index = tonumber(relatedChannel[2])\n                    local Temperature_index = tonumber(relatedChannel[3])\n                    Vy = phys[Vy_index]\n                    Temperature = tonumber(phys[Temperature_index])\n                    Temperature = tonumber(string.format('%0.3f', Temperature))\n                end\n\n                if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n                    local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n                    local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n                    local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n                    --  log.debug("soilDT14301 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n                    if Kx == nil or Ky == nil or Vo == nil then\n                        --      log.debug("soilDT14301  电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n                        Phy = nil\n                    else\n                        --   log.debug("soilDT14301  电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n                        local value1 = Kx * (Vx - Vo)\n                        value1 = tonumber(string.format('%0.3f', value1))\n\n                        local value2\n                        if valueNum == 3 then\n                            value2 = Ky * (Vy - Vo)\n                            value2 = tonumber(string.format('%0.3f', value2))\n                        end\n                        -- log.debug("soilDT14301 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n                        local data1 = {\n                            data = {\n                                voltage=Vx,\n                                physicalvalue = value1,\n                                physicalvalue2 = value2,\n                                temperature = Temperature\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soilDT14301: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            elseif childDevice.props.sensortype == 'standard' then\n                local value1_index = tonumber(relatedChannel[1])\n                local Value1 = tonumber(phys[value1_index])\n                Value1 = tonumber(string.format('%0.2f', Value1))\n                local Value2\n                local Temperature\n                if valueNum == 2 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n                    log.debug('soilDT14301 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                elseif valueNum == 3 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n\n                    local value3_index = tonumber(relatedChannel[3])\n                    value3 = tonumber(phys[value3_index])\n                    value3 = tonumber(string.format('%0.2f', value3))\n                    Temperature = value3\n                    log.debug('soilDT14301 standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                end\n                local data1 = {\n                    data = {\n                        physicalvalue = Value1,\n                        physicalvalue2 = Value2,\n                        temperature = Temperature\n                    },\n                    device = childDevice.id,\n                    time = timenow,\n                    type = 1\n                }\n                log.debug('soilDT14301: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n                table.insert(out.data, data1)\n            end\n        end\n    else\n        ok = ctx:asend('2f480d0a') --"/H/n/r"  DT 按照指定格式 上报数据\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('soilDT14301 resultData=%s,hex=%s', json.encode(out), hex)\n    ctx:notify(resultData)\nend\n\nIsValid = function(alldata)\n    log.debug('soilDT14301 校验开始')\n    if string.len(alldata) < 10 then\n        errormsg = string.format('返回数据[%s],校验长度<10',alldata)\n        errcode = 1002\n        return false\n    end\n\n    if string.sub(alldata, 1, 4) ~= '442c' then\n        errormsg =string.format( '返回数据[%s],帧头错误≠442c',alldata)\n        errcode = 1003\n        return false\n    end\n\n    log.debug('soilDT14301 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nunixtimestamp = function(datestr)\n    -- 2018/4/28 16:10:12\n    log.debug('soilDT14301 datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '/')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT14301 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT14301 recordTime=%s",recordTime)\n    return recordTime\nend	INLINE	2019-02-22 15:17:02.082+08	2020-03-27 14:56:31.141+08	2019-02-22	\N
c697ae48-746d-44c4-9b53-03b49de402c1	shjy_acqunit_1600	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--010700000000b40a  --下发采集\n--010300070044f438   --下发读取\n--0103885ca4d651457f6000451bb19a4515599a4514266600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e1d\nstart = function()\n    log.debug('shjy_acqunit_1600   device=%s', json.encode(device))\n    local buff = ''\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '0700000000'\n    buff = iota.appendHexCrc(buff, 'L', 0)\n    ctx:asend(buff)\n    ctx:sleep(70)\n    --ctx:sleep(2) --测试\n    local buff_read = ''\n    buff_read = iota.appendHexByte(buff_read, moduleNo, endian)\n    buff_read = buff_read .. '0300070044'\n    buff_read = iota.appendHexCrc(buff_read, 'L', 0)\n    ok, resp = ctx:ssend(buff_read, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n        ctx:done(result)\n    else\n        --\n        local errout = {\n            data = {},\n            result = {}\n        }\n        errout.result = {code = 1004, msg = 'time is out and ok is false'}\n        log.debug('shjy_acqunit_1600  m=%s, ok is false', moduleNo)\n        ctx:done(errout)\n    end\nend\n\nunmarshall = function(hex, moduleNoStr)\n    log.debug('shjy_acqunit_1600 m=%s, recv =%s', moduleNoStr, hex)\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleNoStr)\n    if ErrorCode then\n        local allDatas = {}\n        for i = 1, 32, 1 do\n            allDatas[i] = iota.hexToFloat(hex, 11 + (i - 1) * 4, 'B')\n            local childDevice = getDeviceInfo(moduleNoStr, i)\n            if childDevice ~= nil then\n                if childDevice.uplink.capabilities[1].formula.metaid == '583a326f-d743-4f66-b60d-89b60c35e439' then --振弦公式\n                    local k = childDevice.uplink.capabilities[1].formula.props.K\n\n                    local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\tlocal kt= childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\n\t\t\t        local t0 = childDevice.uplink.capabilities[1].formula.props.T0\n          \t\t\tlocal freq =allDatas[i]\n                    log.debug('shjy_acqunit_1600 module=%s,channel=%s [%s] formula params ：k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n                    if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil then\n                      Phy = k * (freq ^ 2 - f0 ^ 2)\n                    end\n                end\n\n                local singleData = {\n                    data = {\n                        rawValue = allDatas[i],\n                        physicalvalue = Phy\n                    },\n                    device = childDevice.id,\n                    type = 1\n                }\n\n                log.debug('shjy_acqunit_1600 m=%s,c=%s,singleData=%s', moduleNoStr, (i + 1) / 2, json.encode(singleData))\n                table.insert(out.data, singleData)\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local result_Str = json.encode(out)\n    log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return result_Str\nend\n\nIsValid = function(data, deviceModule)\n    if data == nil or string.len(data) / 2 ~= 141 then\n        errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n        errcode = 1001\n        return false\n    end\n\n    local cmd = string.sub(data, 3, 4)\n    if cmd ~= '03' then\n        errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n        errcode = 1001\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 0, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的模块号')\n        errcode = 3\n        return false\n    end\n    return true\n    --crc\nend\n\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("shjy_acqunit_1600 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug('shjy_acqunit_1600 查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            local channelStrCheck = child.uplink.props.channel\n            --log.debug('shjy_acqunit_1600 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    log.debug('shjy_acqunit_1600  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('shjy_acqunit_1600  subdevices是nil')\n        return nil\n    end\nend\n\n\n--onData=function(hex)\n --end\n	INLINE	2019-04-03 14:47:59.252+08	2019-05-31 08:49:11.411+08	2019-04-03	\N
32590ab5-aa81-4219-bb35-9529dbe852dd	fs_waterUpLoad_1901	\N	智慧水务 设备上报数据  代理TCP转DTU	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\n--字符串ascii->字符\nstart = function()\n    log.debug('fs_waterUpLoad_1901 start module %s, ctx=', json.encode(device))\nend\n\nonData = function(hex)\n    log.debug('fs_waterUpLoad_1901 Data=%s', hex)\n    --全局\n    out = {\n        data = {},\n        result = {}\n    }\n\n    local sData = toStrHex(hex)\n    log.debug('fs_waterUpLoad_1901 sData=%s', sData)\n    local spliteData = Split(sData, '&&')\n    local deviceData = Split(spliteData[1], ';')\n\n    local QN=Split(deviceData[1], '=')[2]\n\n    local moduledata = Split(deviceData[5], '=')\n    local module = moduledata[2] --模块号\n    log.debug('fs_waterUpLoad_1901 deviceData=%s', module)\n    local Data = Split(spliteData[2], ';')\n    local timedata = Split(Data[1], '=')\n    local time = tonumber(timedata[2]) --时间\n    local ack = GnerateAck(QN,module)\n    local sendBuff = toHexStr(ack)..'0d0a' \n    ctx:asend(sendBuff) -- 第二个参数超时时间\n    for key, value in pairs(Data) do\n        Allot(value)\n    end\n    local resultData = json.encode(out)\n    log.debug('fs_waterUpLoad_1901 result=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\nGnerateAck = function(QN,module)\n    local ackstr = string.format('QN=%s;ST=91;CN=9014;PW=123456;MN=%s;Flag=8;CP=&&&&',QN,module)\n    local len=string.len(ackstr)\n  \t local hexs=toHexStr(ackstr)\n  \tlocal crc16=checkCRC16_ANSI(hexs)\n    local ackStrAll=string.format('##%04d',len)..ackstr..crc16\n    return ackStrAll\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n    local name = Split(datastr, '=')\n    local singleData\n\n    if name[1] == 'w01001-Cou' then\n        --out.data.ph = ph\n        singleData = Split(name[2], ',')\n         --pH值\n        local ph = tonumber(singleData[1])\n    elseif name[1] == 'w01010-Cou' then\n        --out.data.temperature = temperature\n        singleData = Split(name[2], ',')\n         --水温\t℃\n        local temperature = tonumber(singleData[1])\n    elseif name[1] == 'w01014-Cou' then --电导率\tuS/cm\n        --out.data.conductivity = conductivity\n        singleData = Split(name[2], ',')\n        local conductivity = tonumber(singleData[1])\n    elseif name[1] == 'w01009-Cou' then --溶解氧\tmg/L\n        --out.data.oxy = oxy\n        singleData = Split(name[2], ',')\n        local oxy = tonumber(singleData[1])\n    elseif name[1] == 'w01003-Cou' then --浑浊度\tNTU\n        --out.data.turbidity = turbidity\n        singleData = Split(name[2], ',')\n        local turbidity = tonumber(singleData[1])\n    elseif name[1] == 'w01016-Cou' then --叶绿素a\tug/L\n        --out.data.chlorophyll_a = chlorophyll_a\n        singleData = Split(name[2], ',')\n        local chlorophyll_a = tonumber(singleData[1])\n    elseif name[1] == 'w01022-Cou' then --蓝绿藻\tmg/L\n        --out.data.cyanophycean = cyanophycean\n        singleData = Split(name[2], ',')\n        local cyanophycean = tonumber(singleData[1])\n    elseif name[1] == 'w22001-Cou' then --石油类   mg/L\n        --out.data.oil = oil\n        singleData = Split(name[2], ',')\n        local oil = tonumber(singleData[1])\n    elseif name[1] == 'w21011-Avg' then --总磷（以P计）mg/L\n        singleData = Split(name[2], ',')\n        local totalPhosphorus = tonumber(singleData[1])\n        out.data.totalPhosphorus = totalPhosphorus\n    else\n    end\nend\n\n\nfunction checkCRC16_ANSI(buff)\n    local len=string.len(buff)/2\n    local crc16=0xffff\n    for i = 1, len, 1 do\n         crc16=math.modf(crc16/256)\n         local buff_i_str=string.sub(buff,2*i-1,2*i)\n         local buff_i=tonumber(buff_i_str,16)\n         crc16=bit.bxor(crc16, buff_i)\n         for j = 1, 8, 1 do\n            local byte_bit=crc16%2\n             if byte_bit==1 then\n                crc16=bit.bxor(math.modf(crc16/2), 0xa001)\n            else\n                crc16=math.modf(crc16/2)\n            end\n         end\n\n\n    end\n    return string.format("%04x",crc16)\nend	INLINE	2020-01-06 14:38:54.218+08	2020-04-22 09:18:34.912+08	2020-01-06	\N
d0c49ede-2200-49db-bd7b-c9535e387848	soil_DAS_BSIL-D1	\N		1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	--//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    if subdevices ~= nil then\n        log.debug('BSIL-D1:LUA:subdevices : data is =%s', json.encode(subdevices))\n        for index, child in pairs(subdevices) do\n            if json.encode(device.uplink.props) ~= 'null' then\n                moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                channelNo = tonumber(child.uplink.props.channel)\n                log.debug('BSIL-D1 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n            else\n                moduleNo = child.props.moduleId\n                channelNo = child.props.channelId\n                log.debug('BSIL-D1 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n            end\n\n            log.debug('BSIL-D1:模块%s通道%s的deviceId是%s：', moduleNo, channelNo, tostring(child.id))\n            --log.debug("BSIL-D1:子通道设备原型child=%s",json.encode(child))\n            local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n            log.debug('BSIL-D1:模块%s通道%s的cmdstr是：%s', moduleNo, channelNo, cmdstr)\n            local lcr_str = LCR(cmdstr)\n            lcr_str = string.upper(lcr_str)\n             --转大写字符\n            log.debug('BSIL-D1:模块%s通道%s的lcr_str是：%s', moduleNo, channelNo, lcr_str)\n            local request_asciiStr = ':' .. ':' .. cmdstr .. lcr_str\n            log.debug('BSIL-D1:模块%s通道%s的request_asciiStr是：%s', moduleNo, channelNo, request_asciiStr)\n            local buff = toHexStr(request_asciiStr)\n            buff = iota.appendHexByte(buff, 0x0d, endian)\n            buff = iota.appendHexByte(buff, 0x0a, endian)\n            ok, resp = ctx:ssend(buff, 15000)\n            local result = '{}'\n            if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n                log.debug('BSIL-D1:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n                result = unmarshall(resp, child, moduleNo, channelNo)\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('BSIL-D1:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n            end\n        end\n    else\n        log.debug('BSIL-D1 subdevices是nil')\n        return nil\n    end\n\n    log.debug('BSIL-D1 out序列化')\n    local resultData = json.encode(out)\n    log.debug('BSIL-D1 out序列化结果 : out is =%s', json.encode(out))\n    ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1，channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = childDevice.id,\n        type = 1\n    }\n\n    log.debug('BSIL-D1:模块%s通道%s的deviceId是：%s', subModuleId, subChannelId, json.encode(childDevice))\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    if ErrorCode then\n        --码流转string\n        local responseStr = toStrHex(hex)\n        log.debug('BSIL-D1:模块%s通道%s的解析字符串是：%s', subModuleId, subChannelId, responseStr)\n        local freStr = string.sub(responseStr, 8, 15)\n        local freq = tonumber(freStr)\n        local data1 = tonumber(string.format('%5.3f', freq))\n        local resistanceStr = string.sub(responseStr, 16, 23)\n        local dResistance = tonumber(resistanceStr)\n        log.debug('BSIL-D1:模块%s通道%s的原始值是：freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n        --阻值转温度计算公式常数A,B,C\n        local A = 1.4051\n        local B = 2.369\n        local C = 1.019\n        local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n        temp = tonumber(string.format('%3.2f', temp))\n        local Phy\n        if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n            local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n            local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n            local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n            local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n            log.debug('BSIL-D1:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n            if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n                log.debug('BSIL-D1:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0)  metaid\n            local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n            local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n            local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n            local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n            log.debug('BSIL-D1:模块%s通道%s的公式计算参数是：Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n            if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n                anglex = data1\n                changedx = G * L * (data1 - Rx0)\n                angley = dResistance\n                changedy = G * L * (dResistance - Ry0)\n                log.debug('BSIL-D1:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n            local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n            local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n            local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n            local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n            log.debug('BSIL-D1:模块%s通道%s的公式计算参数是：dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n            if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n                Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n                log.debug('BSIL-D1:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n        if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式   P=K2*(R1-R0)^2+K1*(R1-R0)+C\n            local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n            local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n            local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n            local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n            local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n            log.debug('BSIL-D1:模块%s通道%s的公式计算参数是：K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n            if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n                R1 = freq ^ P\n                Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n                Phy = tonumber(string.format('%6.3f', Phy))\n                log.debug('BSIL-D1:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        subData.data = {\n            frequency = freq,\n            modulus = data1, --模拟量\n            temperature = temp,\n            physicalvalue = Phy, --物理量\n            anglex = anglex,\n            angley = angley,\n            changedx = changedx,\n            changedy = changedy\n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\nLCR = function(buff)\n    log.debug('BSIL-D1:lcr buff=%s', buff)\n    local lcr = 0\n    for i = 0, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    log.debug('BSIL-D1:lcr累加结果%s', tonumber(lcr))\n    lcr = lcr % 255\n    local value = 0xff - lcr + 1\n    local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n     --去除0x\n    log.debug('BSIL-D1:lcr校验结果%s', lcrResult_str)\n    return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n    log.debug('BSIL-D1:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n    if data == nil or string.len(data) / 2 ~= 27 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('BSIL-D1:模块%s通道%s  数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n    if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n        errcode = 1001\n        errormsg = 'Hex CMD False '\n        log.debug('BSIL-D1:模块%s通道%s 数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n\n    --码流转string\n    local checkStr = toStrHex(data)\n    log.debug('BSIL-D1:模块%s通道%s 数据校验：checkStr=%s', moduleId, channelId, checkStr)\n    local moduleStr = string.sub(checkStr, 2, 3)\n    --local channelStr = string.sub(checkStr, 6, 7)\n    local error_index=string.sub(checkStr, 8, 8)\n    if tonumber(moduleStr) ~= tonumber(moduleId) then\n        errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n        errcode = 1004\n        log.debug('BSIL-D1:模块%s通道%s 数据校验失败：Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n        return false\n    end\n\n    --[[if tonumber(channelStr) ~= tonumber(channelId) then\n        errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n        errcode = 1004\n        log.debug('BSIL-D1:模块%s通道%s 数据校验失败：Invalid acq channelId=%s', moduleId, channelId, channelStr)\n        return false\n    end--]]\n\n    if error_index == 'E' then\n        errormsg = string.format('error data=%s[%s]',data,checkStr)\n        errcode = 1004\n        log.debug('BSIL-D1:模块%s通道%s  数据校验失败 %s', moduleId, channelId, errormsg)\n        return false\n    end\n\n    log.debug('BSIL-D1:模块%s通道%s校验数据通过！！！', moduleId, channelId)\n    return true\nend\n\ngetIndex = function(data) --用于IsValid\n    local len = string.len(data) / 2\n    for n = 1, len do\n        local value = string.sub(data, 2 * n - 1, 2 * n)\n        if value == '0a' then\n            return n\n        end\n    end\n    return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-05-23 13:33:05.387+08	2019-05-29 08:37:36.758+08	2019-05-23	\N
ef6ef551-0434-444e-aa94-12a2c6cfe513	bjca_mop	\N		1.0	17e2c509-1128-42d6-89b5-5058d7a2a5cd	17e2c509-1128-42d6-89b5-5058d7a2a5cd	f	17e2c509-1128-42d6-89b5-5058d7a2a5cd	Lua	start = function()\n    local endian = 'B'\n\tlocal buff=''\n\tlocal cycle=string.format('%08x', tonumber(device.props.cycle))\n\t    log.debug("bjcamop cycle=%s", cycle)\n    buff = '111100011604'\n\tbuff = buff .. cycle\n\tlocal yh=CS(buff)\n    buff = 'FE' .. buff\n\tbuff=iota.appendHexByte(buff,yh, endian) \n\tbuff = buff .. '0d0a'\n                      \n\n    log.debug("bjcamop buff=%s", buff)\n    local ok, ack = ctx:ssend(buff, 20000)\n\t\n\t    out = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = iota.hexToByte(ack,33,'B')\n        }\n    }\n\n\t\n\tlog.debug("bjcamop out=%s",json.encode(out))\n\n\n    ctx:done(json.encode(out))\nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr =bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)) \n    end\n\t\t\t\n    return lcr\nend \n\n	INLINE	2020-12-24 14:36:41.455+08	2020-12-24 17:22:05.07+08	2020-12-24	\N
9143cf8f-4fb3-4e7c-9a9c-c674d088d655	FM-C-SX	\N	风速风向协议	1.0.1	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FM-C-SX\n]]--kiki\n\nstart=function ()\n    log.debug("FM-C-SXstart %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FM-C-SX encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FM-C-SX decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x2A, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 读取寄存器数量 2\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果\n\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n        }\n        \n    -- 判断数据有效性\n    if inValid(da) then\n        local message = 'Invalid Msg,'\n        out.result = {code=5001,msg=message}\n        out.data = {}\n    else\n        log.debug("数据有效")\n        \n\n\t\tlocal windSpeed = iota.hexToShort(da, 3, 'B' )\n\t\tlocal windDirection = iota.hexToShort(da, 5, 'B')\n\n\n\t\tout.data = {\n            --windSpeed = windSpeed,\t\t\t\n\t\t\twindSpeed = string.format("%.3f",windSpeed/10.00),\n\t\t\t--windDirection = string.format("%.3f",windDirection/10.00) ,\n            windDirection = windDirection/10 ,\n\t\t};\n    end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif  iota.hexToByte(data, 1,'B') ~= 0x03 then --  读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n	INLINE	2021-01-14 14:35:46.616+08	2021-01-19 11:32:45.735+08	2021-01-14	\N
227ec3db-dca7-4164-91f6-b59aabfaf84d	geot_1604	\N	雨量计协议	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	start=function()\n    log.debug("GT-Ra1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\tlocal moduleStr=device.uplink.props.module\n    log.debug("GT-Ra1.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --536E3D3030303036204163635261696E3D20202031322E346D6D0D0A\n\t--53 6E 3D 30 30 30 30 36 20 41 63 63 52 61 69 6E 3D 20 20 20 31 32 2E 34 6D 6D 0D 0A\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t\n\t    local rainfal =toStrHex(string.sub(hex, 37, 48))\n        local rainfals=tonumber(rainfal)\n\t\tlog.debug("GT-Ra1 temperature=%s",rainfals)   \n        out.data = {                \n          rainfall =rainfals\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("GT-Ra1: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'GT-Ra1:Data is nil'\n        errcode = 1001\n        return false\n    end\n  log.debug("GT-Ra1---1---- [%s] %s",deviceModule)\n\tlocal moduleid = toStrHex(string.sub(data,7, 16))\n  log.debug("GT-Ra1----2--- [%s] %s",moduleid)\n\tif (deviceModule~=moduleid) then\n\t      errormsg = 'GT-Ra1:crc is wrong'\n        errcode = 1001\n    \tlog.debug("GT-Ra1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\t\n    \n    return true\n  \nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n \n	INLINE	2018-04-03 09:12:41.303+08	2019-07-19 16:41:54.233+08	2018-04-03	\N
451da24b-91ad-43ba-8980-317b9aa1f9bf	nb_door_mop_1504	\N	配和小程序 or App 确认告警使用	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--F:\\SVN\\202010项目\\飞尚NB协议\\平台通讯协议草案.docx\n--另外到时候是小程序或者APP上给了解除报警消息才下发解除指令的\n--目前测是上报报警就触发解除报警。\n\n--关于设备 解除绑定  只要设备上按一下 就需要强制解除用户绑定   (平台上删除结构物)\n\n--ff000c85000001000051cdff  解绑指令\n--ff000c8a00000100093f8000003f80000002dbf2ff   告警指令\nstart = function()\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    local moduleNo = device.uplink.props.module\n    local paramStr = capability.param --小程序或app调用接口的时候 带参数进来 区分是确认告警  还是 确认解绑\n    log.debug('nb_door_mop_1504   [%s] capability=%s', moduleNo, paramStr)\n    if paramStr == 'gjqr' then\n        log.debug('nb_door_mop_1504   [%s] capability=%s', moduleNo, paramStr)\n        ackToDevice(paramStr, moduleNo)\n        local result = json.encode(out)\n        ctx:done(result)\n    else\n        log.debug('nb_door_mop_1504   [%s]  非法能力请求参数 !=gjqr ,capability=%s', moduleNo, paramStr)\n    end\nend\n\nackToDevice = function(ackCmd, moduleNo)\n    local mid = '0001'\n    if ackCmd == 'gjqr' then\n        local ackHex = 'ff000c' .. getAckCmd(ackCmd) .. mid .. '0000'\n        ackHex = iota.appendHexCrc(ackHex, 'B', 0)\n        ackHex = ackHex .. 'ff'\n        local ok = ctx:asend(ackHex)\n        log.debug('nb_door_mop_1504     平台应答[%s], ack= %s', getAckCmd(ackCmd), ackHex)\n    end\nend\n\ngetAckCmd = function(deviceCmd)\n    local dict = {\n        ['gjqr'] = '6000'\n        --停止报警\n    }\n    return dict[deviceCmd]\nend	INLINE	2020-11-03 11:24:24.315+08	2020-11-03 11:47:10.407+08	2020-11-03	\N
c93d239c-120b-4078-9b3e-4b0d80f6707c	jnch_plc485_2000	\N		1.0	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	f	30f9b3bf-cda4-4aea-9af1-9af1cb7bea4e	Lua	start = function()\n    --log.debug('start load  jnch_2000 moudle = %s ', device.uplink.props.module)\n    log.debug("jnch_2000 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    local moduleNo = tonumber(device.uplink.props.module) --模块 通道 优先接口获取\n    if subdevices ~= nil then\n        for index, child in pairs(subdevices) do\n            \n            local channelNo = tonumber(child.uplink.props.plcaddress)\n            log.debug('jnch_2000 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n\n            local buff = ''\n            buff = iota.appendHexByte(buff, moduleNo, endian)\n            buff = iota.appendHexByte(buff, 0x03, endian)\n            buff = iota.appendHexByte(buff, 0x00, endian)\n            buff = iota.appendHexByte(buff, channelNo - 40001, endian)\n            buff = iota.appendHexByte(buff, 0x00, endian)\n            buff = iota.appendHexByte(buff, 0x02, endian)\n            buff = iota.appendHexCrc(buff, 'L', 0)\n            ok, resp = ctx:ssend(buff, 15000)\n            log.debug('jnch_2000 module=%s,channel=%s  ssend=[%s].', moduleNo, channelNo, buff)\n            local result = '{}'\n            if ok then\n                result = unmarshall(resp, child, tostring(moduleNo), tostring(channelNo))\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('jnch_2000 module=%s,channel=%s [%s] recvd data error.', moduleNo, channelNo, child.id)\n            end\n        end\n    else\n        log.debug('jnch_2000 subdevices是nil')\n        return nil\n    end\n    local resultData = json.encode(out)\n    ctx:done(resultData)\nend\n\nunmarshall = function(hex, subDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = subDevice.id,\n        type = 1\n    }\n\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    log.debug('jnch_2000 module=%s,channel=%s [%s] recv=[%s].', subModuleId, subChannelId, subDevice.id, hex)\n    if ErrorCode then\n        local Phy = iota.hexToFloat(hex, 3, 'B')\n\n        subData.data = {\n            physicalvalue = tonumber(string.format('%0.3f', Phy))\n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\nIsValid = function(data, moduleId, channelId)\n    local dataLength = string.len(data) / 2\n    if data == nil or dataLength ~= 9 then\n        errormsg = string.format('无效的数据长度=%s≠9', dataLength)\n        errcode = 1002\n        return false\n    end\n    local dataCMD = string.sub(data, 3, 4)\n    if dataCMD ~= '03' then\n        errcode = 1002\n        errormsg = 'Modbus功能吗≠03'\n        return false\n    end\n\n    local dataModule = tostring(iota.hexToByte(data, 0, 'B'))\n    if moduleId ~= dataModule then\n        errormsg = string.format('无效的模块号=%s≠%s', dataModule, moduleId)\n        errcode = 1002\n        return false\n    end\n    return true\nend\n	INLINE	2019-03-26 17:29:47.105+08	2019-03-27 10:12:53.79+08	2019-03-26	\N
a760c8c5-d868-4f17-aa69-1d008ce0b8d5	test	\N		22	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	f	8ec5f3e2-2dbe-41bd-bdb4-034203f0964f	Lua	te	INLINE	2019-04-15 17:18:21.793+08	2019-04-15 17:18:21.793+08	2019-04-15	\N
804cd4ec-75ac-41e1-bdfa-ed5b8c6cadd3	fs_gnss_disaster	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n    --log.debug("fs_d_gnss start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n        type= "http",\n        url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n    \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s",   \n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }\n    local param={\n      pointId= tonumber(device.props.pointId),\n      pageNo=1,  \n      pageSize=1, \n    }\n    local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n    local r1,ok = redis.get(device.id.."_endTime")\n    if ok and r1~=nil then\n        beginTime=r1 -- 1200000\n    end\n    local endTime=os.time()*1000\n\n    req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n    --log.debug("fs_d_gnss   moudleid=%s request url=%s",device.props.pointId,req.url)\n \n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("fs_d_gnss   moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n    else\n        log.debug("fs_d_gnss   moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n    end\n\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n            qx=json.decode(ack.body)  -- 有数据\n            --log.debug("fs_d_gnss ack=%s",ack.body)\n            local items = #qx.data or 0\n            --log.debug("fs_d_gnss totalItems=%d", items)\n\t\t\tlocal data1 ={}\n            if items > 0 then\n                for i=1,items,1 do\n                    local item= qx.data[i]\n                    data1 = {\n                        data={\n                            x=item.x*1000 or 0,\n                            y=item.y*1000 or 0,\n                            z=item.z*1000 or 0,\n                        },\n                        device=device.id,\n            \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n                        type=1                       \n                    };                       \n                    table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("fs_d_gnss moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("fs_d_gnss moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n                end\n\t\t\t\t\n                log.debug("fs_d_gnss    moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("fs_d_gnss moudleid=%s set lasttime ok  key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime))   then\n\t\t\t\t\tlog.debug("fs_d_gnss moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("fs_d_gnss  step redis  moudleid=%s ",device.props.pointId)\n\t\t\t\tlocal disport = device.props.disport\n\t\t\t\tlog.debug("fs_d_gnss ack disport=%s",disport)\n\n\t\t\t\tif disport~=nil then\n\t\t\t\t\t-------上报江西地灾平台-------\n\t\t\t\t\tlocal title= "L1_GP_1"\n\t\t\t\t\tlocal req = {\n\t\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\t\turl="http://171.34.52.5:10021/api/devices/datapoints?type=1",\n\t\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\t\tContentType="application/json",\n\t\t\t\t\t\t\theader={},\n\t\t\t\t\t\t}\n\t\t\t\t\tlocal x = data1.data.x or 0\n\t\t\t\t\tlocal y = data1.data.y or 0\n\t\t\t\t\tlocal z = data1.data.z or 0\n\t\t\t\t\tlog.debug("fs_d_gnss    x=%s y :%s z %s",x,y,z)\n\t\t\t\t\tlocal bodystr = '{"'..disport..'":{"'..title..'":"'..tostring(x)..','..tostring(y)..','..tostring(z)..'"}}'\n\t\t\t\t\tlog.debug("fs_d_gnss bodystr :%s",bodystr)\n\t\t\t\t\tlocal apikey = device.props.password\n\t\t\t\t\tbodystr = '{"deviceId":"'..disport..'","apikey":"'..apikey..'","data":'..bodystr..'}'\n\t\t\t\t\tlog.debug("fs_d_gnss bodystr2 :%s",bodystr)\n\t\t\t\t\treq.body = bodystr\n\t\t\t\t\tlocal ok,ack=ctx:ssend(req,4000)\n\t\t\t\t\tlog.debug("fs_d_gnss ack disaster=%s",ack.body)\n\t\t\t\tend\n\t\t\t\tctx:done(json.encode(out))\n            else\n                log.debug("fs_d_gnss    moudleid=%s has not new data",device.props.pointId)\n            end\n        else\n            log.debug("fs_d_gnss    moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body)            \n        end\n    end\nend\n \nstringToTime=function( timeString )  --yyyyMMddHHmmss   to   时间戳\n    local yyyy = tonumber(string.sub(timeString , 1, 4)) \n    local MM = tonumber(string.sub(timeString , 5, 6))  \n    local DD = tonumber(string.sub(timeString , 7, 8))\n    local HH = tonumber(string.sub(timeString , 9, 10))\n    local mm = tonumber(string.sub(timeString , 11, 12))\n    local ss = tonumber(string.sub(timeString , 13, 14))\n    return  os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss})  \nend \n\n	INLINE	2021-02-19 14:14:29.597+08	2021-02-19 16:46:22.653+08	2021-02-19	\N
bd2808a9-fbd4-4f04-a674-d3604806b95c	shjy_temp_angle	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_angle", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_angle 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x16, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x06, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,4000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp_angle SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local anglex = iota.hexToFloat(hex,3,'B')\n        local angley = iota.hexToFloat(hex,7,'B')\n\t\tlocal temp = iota.hexToFloat(hex,11,'B')\n       \n        out.data = {\n\t\t\tanglex=tonumber(string.format('%0.3f',anglex)),\n\t\t\tangley=tonumber(string.format('%0.3f',angley)),\n\t\t\ttemperature=tonumber(string.format('%0.1f',temp))\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp_angle 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp_angle 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-06-27 17:10:59.735+08	2019-09-18 09:32:32.835+08	2019-06-27	\N
e377b8e2-0507-407d-859a-64fbc0b4af19	Bracelet_server	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('Bracelet_server   LUA http server start')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n   --log.debug('Bracelet_server [%s] hex=%s type=%s', moduleNo, json.encode(httpbody), type(httpbody.Body))\n    local params = json.decode(httpbody.Body)\n\n  \t--log.debug('Bracelet_server []  %s',json.encode(params))\n  \tlocal param = ""\n    for k,v in pairs(params) do\n        if k ~="id" then\n      \t\tparam = json.decode(k)\n      \tend\n    end\n  --log.debug("Bracelet_server param = %s ",json.encode(param))\n    if string.match(httpbody.URL ,"pull/pedometerdata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal value = param.value\n\t\tlocal childDevice = getDeviceInfo("1")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tstepvalue = value\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\n\t\t--log.debug('Bracelet_server [%s] pedometerdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n    elseif string.match(httpbody.URL ,"pull/heartratedata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal heartRate = param.heartrate\n\t\tlocal childDevice = getDeviceInfo("2")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\theartrate = heartRate\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\n\t\t--log.debug('Bracelet_server [%s] heartratedata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n    elseif string.match(httpbody.URL ,"pull/locationdata/parse") ~= nil then\t   \n\t\tlocal imei = tonumber(param.imei)\n\t\tlocal timeBegin = tostring(param.time_begin)\n\t\tlocal isReply =tostring(param.is_reply)\n\t\tlocal isTrack = tostring(param.is_track)\n\t\tlocal city = tostring(param.city)\n\t\tlocal address = tostring(param.address)\n\t\tlocal lon = tonumber(param.lon)\n\t\tlocal lat = tonumber(param.lat)\n\t\tlocal ltype = tonumber(param.type)\n\t\tlocal childDevice = getDeviceInfo("3")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tltype = ltype,\n\t\t\t\t\t\tisReply = isReply,\n\t\t\t\t\t\tisTrack = isTrack\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t  \n\t\t--log.debug('Bracelet_server [%s] locationdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n    elseif string.match(httpbody.URL ,"pull/falldata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal city = param.city\n\t\tlocal address = param.address\n\t\tlocal lon = param.lon\n\t\tlocal lat = param.lat\n\t\tlocal ftype = param.type\n\t\tlocal childDevice = getDeviceInfo("7")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\t--log.debug('Bracelet_server [%s] timspa: %s', moduleNo,timspa)\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tftype = ftype\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t  \n\t\t--log.debug('Bracelet_server [%s] falldata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\t\n\telseif string.match(httpbody.URL ,"pull/sleepdata/parse") ~= nil then\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal timeEnd = param.time_end\n\t\tlocal total = param.total\n\t\tlocal interval = param.interval\n\t\tlocal data = param.data\n\t\tlocal sleep = Split(tostring(data),"|")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal minute = (23-tonumber(nhour[1]))*60+(60-tonumber(nhour[2]))\n\t\tlocal morning = Split(tostring(timeEnd)," ")\n\t\tlocal mhour = Split(tostring(morning[2]),":")\n\t\tminute = minute + tonumber(mhour[1])*60+tonumber(mhour[2])\n\t\tlocal cnt = minute/tonumber(interval)\n\t\t--log.debug('Bracelet_server [%s] cnt:%s minute: %s', moduleNo,cnt,minute)\n\t\tlocal offset = 0\n\t\tlocal count = {}\n\t\tlocal sleeptype = {}\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\t--log.debug('Bracelet_server [%s] timspa: %s', moduleNo,timspa)\n\t\tlocal addtime = tonumber(interval)*60\n\t\t--log.debug('Bracelet_server [%s] addtime: %s', moduleNo,addtime)\t\n\t\tfor k,v in pairs(sleep) do\n\t\t\toffset = offset + 1\n\t\t\tlocal value = Split(tostring(v),",")\n\t\t\tif cnt >= offset then\t\t\t\t\n\t\t\t\tlocal count=tostring(value[2])\n\t\t\t\tlocal sleeptype=tostring(value[1])\n\t\t\t\tlocal childDevice = getDeviceInfo("4")\n\t\t\t\ttimspa = timspa+addtime\n\t\t\t\tlocal Begintime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\ttable.remove(out.data)\n\t\t\t\t\n\t\t\t\tlocal rst = {\n\t\t\t\t\t\tdata = {\n\n\t\t\t\t\t\t\t\ttimeBegin = tostring(timeBegin),\n\t\t\t\t\t\t\t\ttimeEnd = tostring(timeEnd),\n\t\t\t\t\t\t\t\ttotal = tostring(total),\n\t\t\t\t\t\t\t\tinterval = tostring(interval),\n\t\t\t\t\t\t\t\tcount = tostring(count),\n\t\t\t\t\t\t\t\tsleeptype = tostring(sleeptype)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\t\t\ttype = 1,\n\t\t\t\t\t\t\ttime = Begintime\n\t\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data, rst)\t\t\t\t\n\t\t\t\t--log.debug('Bracelet_server [%s] timspa2: %s', moduleNo,timspa)\n\t\t\t\t--log.debug('Bracelet_server [%s] sleepdata:%s', moduleNo,json.encode(rst))\n\t\t\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\t\t\tctx:notify(json.encode(out))\t\n\t\t\tend\n\t\tend\t\n    elseif string.match(httpbody.URL ,"pull/powerdata/parse") ~= nil then\t\t\n    \t--log.debug('Bracelet_server [%s]powerdata ', moduleNo)\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal ptype = param.type\n\t\tlocal power = param.remaining_power\n\t\tlocal childDevice = getDeviceInfo("5")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\t\t\t\t\t\tptype = ptype,\n\t\t\t\t\t\tpower = power\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t\n\t\t--log.debug('Bracelet_server [%s] powerdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\t\t\n    elseif string.match(httpbody.URL ,"pull/sosdata/parse") ~= nil then\t\t\n\t\tlocal imei = param.imei\n\t\tlocal timeBegin = param.time_begin\n\t\tlocal city = param.city\n\t\tlocal address = param.address\n\t\tlocal lon = param.lon\n\t\tlocal lat = param.lat\n\t\tlocal stype = param.type\n\t\tlocal heartrate = param.heartrate\n\t\tlocal childDevice = getDeviceInfo("6")\n\t\tlocal night = Split(tostring(timeBegin)," ")\n\t\tlocal nhour = Split(tostring(night[2]),":")\n\t\tlocal ndate = Split(tostring(night[1]),"-")\n\t\tlocal timspa = os.time({year =tonumber(ndate[1]), month = tonumber(ndate[2]), day =tonumber(ndate[3]), hour =tonumber(nhour[1]), min =tonumber(nhour[2]), sec = 00})\n\t\tlocal rst = {\n\t\t\t\tdata = {\n\n\t\t\t\t\t\tcity = city,\n\t\t\t\t\t\taddress = address,\n\t\t\t\t\t\tlon = lon,\n\t\t\t\t\t\tlat = lat,\n\t\t\t\t\t\tstype = stype,\n\t\t\t\t\t\theartrate = heartrate\n\t\t\t\t\t},\n\t\t\t\t\tdevice = childDevice.id,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\ttime = os.date("%Y-%m-%dT%H:%M:%S+08:00",timspa)\n\t\t\t\t}\n\t\ttable.insert(out.data, rst)\t  \n\t\t--log.debug('Bracelet_server [%s] sosdata:%s', moduleNo,json.encode(rst))\n\t\t--log.debug('Bracelet_server: dataresult: %s', json.encode(out))\n\t\tctx:notify(json.encode(out))\n    end\n\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i, dnlink in pairs(device.dnlinks) do\n            for j, subdevice in pairs(dnlink.devices) do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) then\n                    return subdevice\n                end\n            end\n        end\n        --log.debug('Bracelet_server has no device module=%s moudledd=%s', moduleid, tostring(subdevice.uplink.props.moduleid) )\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug('Bracelet_server has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-01-05 10:21:39.301+08	2020-04-16 10:00:23.528+08	2019-01-05	\N
5afcddd3-ab1d-4054-a530-478860d650ec	hj_level_1543	\N		1.0	4cb97284-0871-46d4-baf9-17d494f6db64	4cb97284-0871-46d4-baf9-17d494f6db64	f	4cb97284-0871-46d4-baf9-17d494f6db64	Lua	\nstart=function()\n    log.debug("hj_level_1543   device=%s",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("hj_level_1543,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("hj_level_1543  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--0103023458af7e     13400\nunmarshall=function(hex,moduleNoStr)\n    log.debug("hj_level_1543 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUShort(hex,3,'B')\n    \n        out.data = {           \n            length=length        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("hj_level_1543 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n   local dataModule=iota.hexToByte(data,0,'B')\n    if tonumber(deviceModule) ~= dataModule then\t\n        errormsg = string.format('无效的模块号')\n        errcode = 3\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2019-03-27 16:20:07.447+08	2019-03-27 16:20:07.447+08	2019-03-27	\N
d58ecc11-f676-48e3-b96e-1bb9f468720c	hnli	\N	温湿度	1.0	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f	736d5c22-d6ac-4577-9782-0f95345ea1d5	Lua	start=function()\n    log.debug("hnli.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("hnli.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 03 00 01 04 f0 01 16 02 23 D5 07 ee ee\n\t--ff41584a238662620414515830230003000104f001160223D507eeee\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local temperature =iota.hexToShort(hex,20,'B')/10;\n\t\tlog.debug("hnli temperature=%s",temperature)\n        local humidity = iota.hexToShort(hex,22,'B')/10;\n        log.debug("hnli humidity=%s",humidity)\n     \n        out.data = {                \n            temperatures=temperature,\n            humiditys=humidity\n            --anglez=zData,\n            --temperature=temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("hnli: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'hnli:Data is nil'\n        errcode = 1001\n        return false\n    end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tif (sensorType~=3) then\n        errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n        errcode = 1001\n        return false\n    end\n\tlocal subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n        errcode = 1001\n        return false\n    end\n\t\n    \n    return true\n  \nend\n \n	INLINE	2019-06-27 16:19:33.652+08	2019-07-23 09:43:09.934+08	2019-06-27	\N
17314a0b-eb69-402e-9907-19db709a84ea	gdjiangwei_pressure	\N	压力变送器	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."0103"\n    buff=iota.appendHexWord(buff, tonumber(moduleNo), 'L')           -- 2: 模块号\n    buff=buff.."0001 "             -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)     --下发的码流\n   \n\tif ok then              --下发是否成功\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n\t\t\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={ },\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\n       \n        --print("parsing data", hex)\n        local pres= iota.hexToUShort(hex,3,'B');\n\t\tlog.debug("savoir_485 pres= %d",pres)\n        pres=tonumber(pres)/10\n\t\tpres=pres..0.0\n        out.data = {\n            pressure=pres,\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,0,'B') ~= 0x01 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n \n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2019-04-01 14:02:15.172+08	2019-04-02 17:57:32.955+08	2019-04-01	\N
2f0ce240-e503-4e31-8460-e1b29564c31c	fs_YC_FME	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    --log.debug('FME  [%s] start module %s, ctx=', json.encode(device.uplink.props.module))\nend\n\nonData = function(hex)\n    --全局\n    out = {\n        data = {},\n        result = {}\n    }\n\n    local sData = HextoStr(hex)\n\n    local spliteData = Split(sData, '&&')\n    local deviceData = Split(spliteData[1], ';')\n\n    local moduledata = Split(deviceData[4], '=')\n    local MN = moduledata[2] --MN号  唯一识别\n    log.debug('FME  [%s] sData=%s', MN, sData)\n    local Data = Split(spliteData[2], ';')\n    local timedata = Split(Data[1], '=')\n    local time = timedata[2] --时间\n\n    for key, value in pairs(Data) do\n        Allot(value)\n    end\n\n    local resultData = json.encode(out)\n    log.debug('FME  [%s] result=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n-- allot 函数\nAllot = function(datastr)\n    local pollutantTypes = Split(datastr, ',')\n    for key, value in pairs(pollutantTypes) do\n        local name = Split(value, '=')\n        if name[1] == 'PM10-Avg' then\n            local pm10 = tonumber(string.format('%0.0f', tonumber(name[2])))\n            if pm10 <= 0 or pm10 > 700 then\n                out.data.pm10 = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[pm10] out of ranges pm10:' .. tostring(pm10) .. ' is out of[0,700]'\n                else\n                    out.result.msg = '[pm10] out of ranges pm10:' .. tostring(pm10) .. ' is out of[0,700]'\n                end\n            else\n                out.data.pm10 = pm10\n            end\n      elseif name[1] == 'PM25-Avg' then\n            local pm25 = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if pm25 < 0 or pm25 > 700 then\n                out.data.pm25 = nil\n                log.debug('FME  [%s]out.data.pm25=nil')\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[speed] out of pm25:' .. tostring(pm25) .. ' is out of[0,700]'\n                else\n                    out.result.msg = '[speed] out of pm25:' .. tostring(pm25) .. ' is out of[0,700]'\n                end\n            else\n                out.data.pm25 = pm25\n            end\n        elseif name[1] == 'W02-Avg' then\n            local speed = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if speed < 0 or speed > 24.5 then\n                out.data.speed = nil\n                log.debug('FME  [%s]out.data.speed=nil')\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[speed] out of speed:' .. tostring(speed) .. ' is out of[0,24.5]'\n                else\n                    out.result.msg = '[speed] out of speed:' .. tostring(speed) .. ' is out of[0,24.5]'\n                end\n            else\n                out.data.speed = speed\n            end\n        elseif name[1] == 'W01-Avg' then\n            local direction = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if direction < 0 or direction > 360 then\n                out.data.direction = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[direction] out of direction:' .. tostring(direction) .. ' is out of[0,360]'\n                else\n                    out.result.msg = '[direction] out of direction:' .. tostring(direction) .. ' is out of[0,360]'\n                end\n            else\n                out.data.direction = direction\n            end\n        elseif name[1] == 'T01-Avg' then\n            local temperature = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if temperature < -40 or temperature > 60 then\n                out.data.temperature = nil\n                out.result.code = 5001\n                out.result.msg = '[temperture] out of temperture pm10:' .. tostring(temperature) .. ' is out of[-40,60]'\n            else\n                out.data.temperature = temperature\n            end\n        elseif name[1] == 'H01-Avg' then\n            local humidity = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if humidity <= 0 or humidity > 100 then\n                out.data.humidity = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[humidity] out of humidity :' .. tostring(humidity) .. ' is out of[0,100]'\n                else\n                    out.result.msg = '[humidity] out of humidity :' .. tostring(humidity) .. ' is out of[0,100]'\n                end\n            else\n                out.data.humidity = humidity\n            end\n        elseif name[1] == 'B03-Avg' then\n            local noise = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if noise < 0 or noise > 200 then\n                out.data.noise = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[noise] out of noise :' .. tostring(noise) .. ' is out of[0,200]'\n                else\n                    out.result.msg = '[noise] out of noise :' .. tostring(noise) .. ' is out of[0,200]'\n                end\n            else\n                out.data.noise = noise\n            end\n        elseif name[1] == 'R01-Avg' then\n            local rain = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if rain < 0 or rain > 2000 then\n                out.data.rain = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[rain] out of rain :' .. tostring(rain) .. ' is out of[0,200]'\n                else\n                    out.result.msg = '[rain] out of rain :' .. tostring(rain) .. ' is out of[0,200]'\n                end\n            else\n                out.data.rain = rain\n            end\n        elseif name[1] == 'P01-Avg' then\n            local pressure = tonumber(string.format('%0.1f', tonumber(name[2])))\n            if pressure < 0 or pressure > 200 then\n                out.data.pressure = nil\n                out.result.code = 5001\n                if out.result.msg ~= nil then\n                    out.result.msg =\n                        out.result.msg .. '[pressure] out of noise :' .. tostring(pressure) .. ' is out of[0,200]'\n                else\n                    out.result.msg = '[pressure] out of pressure :' .. tostring(pressure) .. ' is out of[0,200]'\n                end\n            else\n                out.data.pressure = pressure\n            end\n        else\n        end\n    end\nend	INLINE	2019-03-31 14:09:32.882+08	2019-04-01 14:33:11.05+08	2019-03-31	\N
e9efde3c-7a62-4df8-b112-22384afc7c24	R485	\N	温度	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require"functions"--公共函数\n--[[\n可用函数包:\nlog:日志\nconvertor:转换\nconn:链接\n全局变量:\nctx:(只读)\ndevice=>{}//设备信息\nprotocol=>{}//协议信息\ninterface=>{}//接口信息\nssend:同步发送数据\nasend:异步发送数据\ndone:完成处理.\nnotify:通知结果\n]]\n--//协议参考文档：Documents/PMO/02产品协议/我司产品协议/通信协议/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("savoir_485 loadscript%s,moduleId=%s","BK_WaterLevel.lua",device.uplink.props.module or "[nil]")\n\t\n\n\tout={\n\t\t\t\ttype=2,\n\t\t\t\tdata={},\n\t\t\t\tresult={}\n\t\t\t\t}\n\tlocal endian='B'\n\tlocal buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props)~='null'then\n\t\tmoduleNo=device.uplink.props.module--模块通道优先接口获取\n\t\t\n\t\tlog.debug("savoir_485设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("savoir_485设备模块通道属性获取m=%s,c=%s接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\tbuff=iota.appendHexByte(buff,moduleNo,endian)--1:模块号\n\tbuff=buff.."03010B001D"--1:指令:采集\n\tbuff=iota.appendHexCrc(buff,endian,0)--2:CRC\n\tok,resp=ctx:ssend(buff,15000)--发送指令\n\tlocal ErrorCode=IsValid(resp)\n\tlocal subdevices=device.dnlinks[1].devices\n\tlog.debug("savoir_485 device 子设备模块通道 接口获取 ,c=%s ",json.encode(device))\n\tif subdevices ~=nil then\n\tlog.debug("savoir_485 subdevices 子设备模块通道 接口获取 ,c=%s ",json.encode(subdevices))\n\t         offsetvalue = 13\n    \t    for index,child in pairs(subdevices) do          --插入16个通道\n \t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\tlog.debug("savoir_485 uplink 子设备模块通道 接口获取 ,c=%s ",channelNo)\n\t\t\t    else\n\t\t\t\t   channelNo=child.props.channelId \n\t\t\t\t   log.debug("savoir_485 子设备模块通道 属性获取,c=%s  ",channelNo)\n\t\t\t    end\n\t\t\t\tif ErrorCode then          \t\n\t\t\t\t\t--offsetvalue=(channelNo-1)*2+13\n\t\t\t\t\tresult=unmarshall(resp,channelNo,offsetvalue )         ---插入数据\n\t\t\t\t\t table.insert(out.data,result)\n\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t     out.result = {code=errcode,msg=errormsg} \n\t\t\t\tend\t\n\n\t\t\t\t\n\t        end\n            \n\n\tend\n\nlocal resultData =json.encode(out)\n--ctx:asend("hello")\nctx:done(resultData)\nend\n\n\nunmarshall=function(hex,subChannelId,offset )\nlog.debug("savoir_485 unmarshall offset = %d",offset)\nlocal subData={\n        type=1,\n        data={},\n\t\tdevice="",  \n        result={}\n        }\nlocal ctemp=iota.hexToShort(hex,offset ,'B')/10\nlocal ErrorCode=IsValidOut(resp,ctemp,offset)\nif ErrorCode then\n\n\t--localscale=1000000.00;\n\t--print("parsingdata",hex)\n\tlocal length=iota.hexToByte(hex,2,"B")\n\tlocal analogquan1=iota.hexToUShort(hex,3,"B")\n\tlocal analogquan2=iota.hexToUShort(hex,5,'B')\n\tlocal Tempmax=iota.hexToShort(hex,7,'B')/10\n\tlocal Tempmin=iota.hexToShort(hex,9,'B')/10\t\n\tlog.debug("savoir_485 Tempmin= %d",Tempmin)\n\tlocal k=length/2-5\n\tlog.debug("savoir_485 k = %d",k)\n\tlocal Temp=iota.hexToShort(hex,offset ,'B')/10\n\n\t\n\tlog.debug("savoir_485 temp = %d",Temp)\n\tlog.debug("savoir_485 offsetvalue=%d",offset)\n\n\t\n\tlog.debug("savoir_485")\n\tchild=getDeviceInfo( subChannelId)\n\tlog.debug("savoir_485 child=%s",child)\n\tsubData.data={                                     \n\t\t\t\t\ttemperature=Temp\n\t\t\t\t\t}\n\tsubData.device = \tchild.id\n\tlog.debug("savoir_485  subData.device=%s",subData.device)\n\tlog.debug("savoir_485 subData.temperature=%s,channel =%s",subData.data.temperature,tostring(subChannelId))\n\treturn subData\nelse\n\tout.result = {code=ercode,msg=erormsg} \nend\n\nend\n --获取传感器信息\nfunction getDeviceInfo( channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if  tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('savoir_485 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('savoir_485 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\t\n\nIsValid=function(data)\n\tlog.debug('savoir_485开始校验数据')\n\tlocal dataex=string.sub(data,1,-5)  \t--crc 校验的具体步骤\n\tlog.debug("savoir_485 dataex=%s",dataex)\n\tlocal reply=iota.appendHexCrc(dataex,'L',0)\n\tlog.debug("savoir_485 reply=%s",reply)\n\tlocal replydadt= string.sub(reply,123,126)\n    if string.sub(data,123,126)== replydadt then\n\t\terrormsg='Invalidacqhyperpyrexia'\n\t\terrcode=1004\n\t\treturn false\n\tend\n\tif iota.hexToByte(data,1,'B')~=0x03 then\n\tlog.debug("savoir_485 iota.hexToByte=%s",iota.hexToByte)\n\t\terrcode=1001\n\t\terrormsg='HexCMDFalse'\n\t\treturn false\n\tend\n\tlog.debug("savoir_485ert0")\n\t\n\tlog.debug('savoir_485数据校验通过')\n\treturn true\n--crc\nend\nIsValidOut=function(data,Temp,offset)\n\tlog.debug('savoir_485即将开始校验数据')\n\n\tif iota.hexToShort(data,7,'L')==-9999 then\n\t\tercode=1001\n\t\terormsg='HexCMD  False'\n\t\tlog.debug('savoir_485 HexCMDFalse')\n\t\treturn false\n\tend\n\tlog.debug('savoir_485 TTTemp=%s offset = %s',tostring(Temp),offset)\n    if Temp==-999.9 then\n\t\n\t\tercode=1001\n\t\terormsg='evey temperature Invalidacqhyperpyrexia'\n\t\treturn false\n\tend\n\t\tlocal a=string.sub(data,11,11)   \n\tlog.debug('savoir_485a=%s',type(a))\n\tif a==0x00 then\t\n\t\terormsg='Invalidacqhyperpyrexia'\n\t\tlog.debug('savoir_485 Invalidacqhyperpyrexia')\n\t\tercode=1002\n\t\treturn false\n\tend\n\tif string.sub(data,12,12)==0x00 then\t\n\t\terormsg='InvalidacqThetemperatureistoolow'\n\t\tercode=1002\n\t\treturn false\n\tend\t\n\t\n\n\t\treturn true\n--crc\nend\n	INLINE	2019-03-27 11:05:50.803+08	2019-04-18 14:53:35.202+08	2019-03-27	\N
e88b9b4b-85da-411c-bff3-39a9513f30a7	dfa	\N	feaf	1	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	f	a83dd8eb-87e6-4594-9729-6d0783c1d6e3	Lua	grtsghrtd	INLINE	2019-03-29 16:41:13.188+08	2019-03-29 16:41:13.188+08	2019-03-29	\N
a92e19e7-5ed2-4b53-8bd5-781c242f27f6	sxhr_level_2019	\N		1.0	802a6ad5-5ee7-4234-8c91-32aa074a0685	802a6ad5-5ee7-4234-8c91-32aa074a0685	f	802a6ad5-5ee7-4234-8c91-32aa074a0685	Lua	--‪D:\\SVN\\201907项目\\高精度压力式水位水温计陕西恒瑞HR8003型新版选型.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "sxhr_level_2019.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x05, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("sxhr_level_2019,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\n--5f0300010005d977\n--5f030a00000000012300000000367e\n--"level": \n--"temperature": \n--"pressure": \nunmarshall=function(hex,moduleNoStr)\n    log.debug("sxhr_level_2019 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local level =iota.hexToInt(hex,3,'B')\n\t\tlocal temperature =iota.hexToShort(hex,7,'B')/10\n\t\tlocal pressure =iota.hexToInt(hex,9,'B')\n    \n        out.data = {           \n            level=tonumber(string.format("%0.3f",level)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature)),\n\t\t\tpressure=tonumber(string.format("%0.3f",pressure)),\t\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("sxhr_level_2019 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 15 then\n        errormsg = string.format('无效的数据长度=%s≠15',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2019-07-22 15:59:48.28+08	2019-07-22 16:01:33.03+08	2019-07-22	\N
80c16a27-2bdf-48f6-ab20-690c3926ec7a	jitai_degree_1888	\N	MI6000倾角仪  单轴	1.0	d3f1aa63-8397-45a4-af26-15a0f91d1e13	d3f1aa63-8397-45a4-af26-15a0f91d1e13	f	d3f1aa63-8397-45a4-af26-15a0f91d1e13	Lua	--// 04 项目资料/2018-03/南京基泰集成箱设备协议/GT-MI600倾角仪.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jitai_1888", device.props.moduleId or "[nil]")\n  log.debug('jitai_1888 device=%s', json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jitai_1888 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jitai_1888 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n\t\tlog.debug("jitai_1888 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n\t\tbuff=iota.appendHexByte(buff, 0xf5, endian)            \n        buff=iota.appendHexByte(buff, 0xf5, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号 485接口获取\n\t\tlog.debug("jitai_1888 发送采集命令=%s",buff)\n        ok,resp=ctx:ssend(buff,15000)\n\t\t\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,tostring(moduleNo))\n        else\n            log.debug("jitai_1888 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--F5F501\n--moduleId=1\n--15028765   \n\nunmarshall=function(hex,module_str)\n\tlog.debug("jitai_1888 收到数据=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal xDegree\n\tlocal yDegree\n\t\n    local ErrorCode = IsValid(hex,module_str)\n    if ErrorCode then     \n        local index_x=string.sub(hex,3,3)\n        local str_num_x = string.sub(hex,4,8)\n        local num_x=tonumber(str_num_x)\n    \tif index_x=="8" then\n      \t\tnum_x=-1 * num_x\n      \tend\n        \n    \n\t\tlocal num_y\n        if string.len(hex)/2==7 then\n      \t\tlocal index_y=string.sub(hex,9,9)\n         \tlocal str_num_y = string.sub(hex,10,14)\n        \t num_y=tonumber(str_num_y)\n      \t\tif index_y=="8" then\n\t\t\t\tnum_y=-1 * num_y\n\t\t\tend\t\t\t\n\t\tend\n\t\n\t\tlocal K1 = device.props.K1\n\t\tlocal K2 = device.props.K2\n\t\tlocal K3 = device.props.K3\n\t\tlocal Fo = device.props.Fo\n\t\tlog.debug("jitai_1888 公式参数=%s,%s,%s,%s",K1,K2,K3,Fo)\n\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil then\n\t\t\tlog.debug("jitai_1888 公式参数有nil")\n\t\telse\n\t\t\tlocal Fi=num_x  --经过厂家确认  公式带入的是模数\n\t\t\txDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n\t\t\txDegree=string.format("%0.2f",xDegree)\n\t\t\tif num_y~=nil then\n\t\t\t\tFi=num_y\n\t\t\t\tyDegree = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)\n        \t\tyDegree=string.format("%0.2f",yDegree)\n\t\t\t\tlog.debug("jitai_1888 yDegree=%s",yDegree)\n\t\t\tend\n\t\tend            \t\t\t\t\n        out.data = {\n\t\t\tanglex=tonumber(xDegree),\n      \t\tangley=tonumber(yDegree)\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,module_str_check)\n    log.debug('jitai_1888:开始校验数据%s',data)\n    if data == nil or (string.len(data)/2 ~=4 and string.len(data)/2 ~=7) then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(module_str_check)~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug("jitai_1888 模块错误 module_str_check=%s ,tostring(string.sub(data,1,2)=%s",module_str_check,string.sub(data,1,2))\n        return false\n    end\n    log.debug('jitai_1888:数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-03-15 17:16:37.707+08	2019-05-17 11:14:43.367+08	2018-03-15	\N
8f7fdf16-7f6e-4bc7-8e4c-bd964a4a02ed	gdjiangwei_noncurren	\N	静力水准仪	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, tonumber(moduleNo), 'L')           -- 2: 模块号\n    buff=buff.."0300000001 "             -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)     --下发的码流\n   \n   \n\tlog.debug('能不能输出呀不能输出呀')\n\tif ok then              --下发是否成功\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n\t\t\n\t\t\n\t\t log.debug("rs_485 code=%d",code)\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={ },\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\n       \n        --print("parsing data", hex)\n\t\t\n\t\n        local  noncurrent= iota.hexToUShort(hex,3,'B');\n\t\t--log.debug("savoir_485 pres= %d",pres)\n       \n        out.data = {\n           noncurrent=noncurrent,\n        };\n    \n    else\n\t\tlog.debug('到没到这丫')\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n\t\tlog.debug("rs_485 errcode=%d",errcode)\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n \n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2019-04-01 15:32:24.962+08	2019-04-12 09:34:39.808+08	2019-04-01	\N
3dc26404-5272-4fbc-97f2-8493009c06ac	Trash_server	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug("Trash_server:device=%s",json.encode(device))\n--根据经纬度获取天气\n\tlocal location = device.props.location\n    local url = "https://www.icb-admin.com/api/trash/trashlist"\n\n\t--Sleep(1)\n\t --请求数据\n\tlocal req = {\n\t\t\t\ttype= "http",\n\t\t\t\turl=url,  \n\t\t\t\tmethod="POST",\n\n     \t\t\tcontenttype="application/json",\n    \t\t\tbody = "{\\"username\\":\\"feishang\\"}"\n\t\t\t}\n\t --post发送\n\tlocal dataok,dataack=ctx:ssend(req,3000)\n\tlocal wd = nil\n\tout = {\n\t\tdata = {},\n\t\tresult ={}\n    }\n\n\tif not dataok or json.encode(dataack) ~=nil then\t\t\n    \t--log.debug("Trash_server recived data is not nil!")\n\t\tlocal moduleid = device.uplink.props.id\n\t\tGetData(dataack,moduleid)\n\telse\n\t\t--log.debug("Trash_server recived data is ni")\n\tend\t\n\t\t\t\n--数据推送\n\tlog.debug("Trash_server restult %s",json.encode(out))\n    ctx:done(json.encode(out))\nend\n\n\n\nfunction GetData(data,moduleid)\n\t--log.debug("Trash_server DisplayWeather: %s",json.encode(data.body))\n\tlocal rt_data=json.decode(data.body)  -- 有数据\n\t\n\tfor k,v in pairs(rt_data.trash_list)do\n\t\tif tostring(v.sn) == tostring(moduleid) then\t\t\t\n\t\t\tlocal lat = tonumber(v.lat)\n\t\t\tlocal lon = tonumber(v.lng)\n\t\t\t  \t\t\n      \t\tlocal table = v.sort_list\n\t\t\tfor j,t in pairs(v.trash_status)do --获取box_num和sort_name 对应关系\n  \t\t\n\t\t\t\tlocal name = tostring(t.sort_name)\n\t\t\t\tlocal num = tonumber(t.box_num)\n\t\t\t\tlog.debug("Trash_server GetData num : %s",tostring(num))\n\t\n\t\t\t\tout.data.lat = lat\n\t\t\t\tout.data.lon = lon\n\n\t\t\t\tfor t,r in pairs(table)do\t\t\t\t\n\t\t\t\t\tif name == tostring(r.sort_name) then \t\t\t\t\t\t\t\n\t\t\t\t\t\tlocal high = tonumber(r.trash_high)\n            \t\t\tlog.debug("Trash_server GetData high: %s",high)\n\t\t\t\t\t\tif num == 1 then \n\t\t\t\t\t\t\tout.data.high1 = high\n\t\t\t\t\t\telseif num == 2 then\n\t\t\t\t\t\t\tout.data.high2 = high\n\t\t\t\t\t\telseif num == 3 then\n\t\t\t\t\t\t\tout.data.high3 = high\n\t\t\t\t\t\telseif num == 4 then\n\t\t\t\t\t\t\tout.data.high4 = high\n\t\t\t\t\t\telseif num == 5 then\n\t\t\t\t\t\t\tout.data.high5 = high\n\t\t\t\t\t\telseif num == 6 then\n\t\t\t\t\t\t\tout.data.high6 = high\n\t\t\t\t\t\telseif num == 7 then\n\t\t\t\t\t\t\tout.data.high7 = high\n\t\t\t\t\t\telseif num == 8 then\n\t\t\t\t\t\t\tout.data.high8 = high\n\t\t\t\t\t\telseif num == 9 then\n\t\t\t\t\t\t\tout.data.high9 = high\n\t\t\t\t\t\telseif num == 10 then\n\t\t\t\t\t\t\tout.data.high10 = high\n\t\t\t\t\t\telseif num == 11 then\n\t\t\t\t\t\t\tout.data.high11 = high\n\t\t\t\t\t\telseif num == 12 then\n\t\t\t\t\t\t\tout.data.high12 = high\n\t\t\t\t\t\telseif num == 13 then\n\t\t\t\t\t\t\tout.data.high13 = high\n\t\t\t\t\t\tend\n            \t\tout.time=os.date("%Y-%m-%dT%H:%M:%S+08:00",r.createtime)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\nend\n\n\n	INLINE	2019-01-18 16:52:04.056+08	2019-05-17 14:58:47.601+08	2019-01-18	\N
048fbfb1-71d8-439a-ba37-9ff68aeeecc2	自己测试	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	zcxc	INLINE	2019-08-14 10:56:47.91+08	2019-08-14 10:57:38.332+08	2019-08-14	\N
d667ae82-81b1-4f2e-94ba-9e7c4741101b	jzyg-EC-A3fs	\N		1.0	e54b85b0-151e-4b74-b360-a8ae65addd46	e54b85b0-151e-4b74-b360-a8ae65addd46	f	e54b85b0-151e-4b74-b360-a8ae65addd46	Lua	--// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "EC-1A3 ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("EC-1A3 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("EC-1A3  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x06, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\t\t\n\t\tlog.debug('EC-1A3 %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("EC-1A3  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030004000285ca\n--01030409c49900d202     \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local speed = iota.hexToShort(hex,3,'B')/10\n\t\tlog.debug('EC-1A3  %s 风速',speed)\n\t\tlocal direction = iota.hexToShort(hex,5,'B')/10\n\t\tlog.debug('EC-1A3  %s 风向',direction)\n\t\tlocal verdirection = iota.hexToShort(hex,7,'B')/10\n\t\tlog.debug('EC-1A3  %s 垂直风向',verdirection)\n\t\tlocal xdirection = iota.hexToShort(hex,9,'B')/10\n\t\tlog.debug('EC-1A3  %s x轴风向',xdirection)\n\t\tlocal ydirection = iota.hexToShort(hex,11,'B')/10\n\t\tlog.debug('EC-1A3  %s y轴风向',ydirection)\n\t\tlocal zdirection = iota.hexToShort(hex,13,'B')/10\n\t\tlog.debug('EC-1A3 %s z轴风向',zdirection)\n\t\t\n       \n       \n        out.data = {\n\t\t\tspeed=speed,\n\t\t\tdirection=direction,\n\t\t\tverdirection=verdirection,\n\t\t\txdirection=xdirection,\n\t\t\tydirection=ydirection,\n\t\t\tzdirection=zdirection\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('EC-1A3 %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('EC-1A3 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-08-08 09:00:49.431+08	2019-08-21 16:02:06.499+08	2019-08-08	\N
b45287f0-ebb9-4479-8090-b85009e199f0	mas_lf	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--//04 项目资料/仁科扬尘/网络型采集器通信协议V11_201807261651431.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n --0100000001012000042b00000014d0\n--moduleId=1\n--channelId=1\n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "mas_lf", device.props.moduleId or "[nil]")\nend\n\nonData=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n\tlocal result=json.encode(hex)\n  \tlocal str = toStrHex(hex)\n  \tlog.debug("mas_lf onData hex = %s",str)\n\tlocal djs=Split(str,',')\n\tlocal channel = 0\n\tlocal frequency = 0\n\tlocal temp = nil\n\tlocal electricity = nil\n\tlocal GSM = nil\n\tfor k,v in ipairs(djs) do\n\t\tif v~='' and v~=nil then\n\t\t\tlocal dj=json.decode(v)\n\t\t\tlog.debug("mas_lf onData key = %d  v =%s",k,v)\n\t\t\tif k == 1 then \n\t\t\t\tlocal errdata = Split(v,':')\n\n\t\t\t\tlocal errstr = tostring(errdata[2])\n\t\t\t\terrstr = string.sub(errstr,2,-2)\n\t\t\t\tlog.debug("mas_lf onData errdata = %s",errstr)\n\t\t\t\tlocal ErrorCode = IsValid(errstr)\n\n\t\t\t\tif ErrorCode ~= true then\n\t\t\t\t  local result = json.encode(out)\n\t\t\t\t  ctx:notify(result)\n\t\t\t\t  return\n\t\t\t\tend\t\t\t\n\t\t\telseif k == 7 then --channel\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tchannelId = tostring(data[2])\n\t\t\telseif k == 8 then --collectedValue1\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue1 = tostring(data[2])\n\t\t\telseif k == 9 then --collectedValue2\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue2 = tostring(data[2])\n\t\t\telseif k == 10 then --collectedValue3\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tcollectedValue3 = tostring(data[2])\n\t\t\telseif k == 11 then --electricity\n\t\t\t\tlocal data = Split(v,'%')\n\t\t\t\tlocal datastr = tostring(data[1])\n\t\t\t\tlocal data1 = Split(datastr,':')\n\t\t\t\tlocal data1str = tostring(data1[2])\n\t\t\t\telectricity = data1str.."%"\n\t\t\telseif k == 12 then --GSM\n\t\t\t\tlocal data = Split(v,':')\n\t\t\t\tGSM = tostring(data[2])\t  \t\t\t\t\n\t\t\tend\n\t\tend\n\tend\n\n\tlog.debug("mas_lf temperature:%s,frequency:%s electricity:%s.GSM:%s",collectedValue1,collectedValue2,electricity,GSM)\n\tlocal power = tonumber(device.props.electricity)\n  \tlocal ele =tonumber(data1str)\n  \tif ele ~= nil and power ~= nil then\n        if ele < power then\n            out.result={code = 1002,msg="electricity too low"}\n        end\n    end\n  \t\tlocal Phy=0\n        --if subDevice.device.formula == "ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)" then --振弦公式\n\t\t\n        local k = device.props.k or 0\n        local kt = device.props.kt or 0\n        local f0 = device.props.f0 or 0\n        local t0 = device.props.t0 or 0\n        --设备不再计算 直接输出物理量\n        --if k~=nil and kt~=nil and f0~=nil and t0~=nil and collectedValue1 ~=nil and collectedValue2 ~= nil then\n          --Phy =k * (collectedValue1 ^ 2 - f0 ^ 2) + kt * (collectedValue2 - t0)\n        --end\n\t--out.data.temp = collectedValue2\n\tout.data.physicalvalue = collectedValue1\n  \t--out.data.physicalvalue = Phy\n\n\tlocal resultData =json.encode(out)\n    ctx:notify(resultData)\n    \nend\n\nIsValid=function(data)\n\tlog.debug("mas_lf onData errdata1 = %s",data)\n\tif data == "success" then\n\telse\n\t    errormsg = 'data is wrong'\n        errorcode = 1001\n        return false\n    end\n    return true\nend\n\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend	INLINE	2019-03-08 17:07:17.281+08	2019-09-09 14:09:03.52+08	2019-03-08	\N
7c5f67f4-aa30-4f95-bc24-3de551e8dc36	scg_Vibrating_14000	\N	复制上海建工的	1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	\nstart = function()\n    log.debug('scg_Vibrating_14000   device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\n\n--0102030405060708190a17323a000000060201365906c7ba   -- 1和4通道\n--0102030405060708150a17323a000000060201365906c7ba \t  -- 1和3通道\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n    local dataid = device.uplink.props.id\n    log.debug('scg_Vibrating_14000 [%s]  httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n    --主动上传式\n    --local hex = httpbody.Body\n    local bodyStr = httpbody.Body\n    if bodyStr ~= nil or bodyStr ~= '' then\n        local obj = json.decode(bodyStr)\n        local hex = obj.pkg\n        log.debug('scg_Vibrating_14000 1111111 [%s] hex=%s', dataid, hex)\n        --调度重启，尝试获取记录结果\n        \n        local out = {\n            type = 2,\n            data = {},\n            result = {}\n        }\n        local messageId_hex\n        local ErrorCode = IsValid(hex, dataid)\n        if ErrorCode then\n            local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n            if dataCounts == 0 or hasCycleTimeUpdated then\n                local getdataCounts = getRedisValue('datacounts')\n                if getdataCounts ~= nil then\n                    dataCounts = dataCounts\n                end\n\n                local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n                if getisCycleTimeUpdated ~= nil then\n                    isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n                end\n            end\n\n            log.debug('scg_Vibrating_14000  [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n            dataCounts = (dataCounts + 1) % 0x100 --计数\n            local dataCounts_hex = string.format('%02x', dataCounts)\n            redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n            log.debug('scg_Vibrating_14000  [%s]  Received=>%s[%s],', dataid, hex, dataCounts)\n\n            local moduleNo = string.sub(hex, 1, 16)\n            messageId_hex = string.sub(hex, 17, 18)\n            log.debug('scg_Vibrating_14000  [%s]  moduleNo=%s,messageId_hex=%s', dataid, moduleNo, messageId_hex)\n\n            --解析messageID\n            local messageId_bitTable = getBits(messageId_hex)\n            local datatimeHexStr = string.sub(hex, 19, 26)\n\n            local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n            local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n            datatimeHexStr = year .. month .. datatimeHexStr\n            local datetime = hexDateStrToDate(datatimeHexStr)\n            log.debug('scg_Vibrating_14000   [%s]  时间datetime=%s', dataid, datetime)\n            local dataArea = string.sub(hex, 27, -1)\n            log.debug('scg_Vibrating_14000   [%s]  dataArea=%s', dataid, dataArea)\n\n            --遍历\n            for i = 1, 8, 1 do\n                local voltage\n                local Frequency\n                local Resistance\n                local LnR\n                local temperature\n                local deviceId\n                local len_dataArea = string.len(dataArea)\n                if messageId_bitTable[i] == 1 and len_dataArea >= dataTypesLen[i] then --当前标志位数据存在\n                    if i < 5 then --频率数据\n                        local subData = string.sub(dataArea, 1, 10)\n                        dataArea = string.sub(dataArea, 11, -1)\n                        local frequency_str = string.sub(subData, 1, 6)\n                        local resistance_Str = string.sub(subData, 7, 10)\n\n                        Frequency = tonumber(frequency_str, 16) / 100\n                        Resistance = tonumber(resistance_Str, 16)\n\t\t\t\t\t\t\n                        LnR = math.log(Resistance)\n\t\t\t\t\t\t\n\n                        --循环插入单通道数据表\n\n                        --获取通道设备deviceId\n                        local channelNo = i\n                        log.debug('scg_Vibrating_14000 [%s] 模块号=%s,通道号=%s,frequency_str=%s[%s],resistance_Str=%s[%s]', dataid, moduleNo, channelNo, frequency_str, Frequency, resistance_Str, Resistance)\n                        local childDevice = getDeviceInfo(moduleNo, channelNo)\n                        --\n\n                        if childDevice ~= nil then\n                            deviceId = childDevice.id\n                            log.debug('scg_Vibrating_14000  (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n                            log.debug('scg_Vibrating_14000  (振弦)子设备deviceId: ' .. tostring(deviceId))\n\n                \n                                local a = childDevice.uplink.capabilities[1].formula.props.A\n                                local b = childDevice.uplink.capabilities[1].formula.props.B\n                                local c = childDevice.uplink.capabilities[1].formula.props.C\n                                local e = childDevice.uplink.capabilities[1].formula.props.E\n\t\t\t\t\t\t\t\tlocal c0= childDevice.uplink.capabilities[1].formula.props.C0\n\t\t\t\t\t\t\t\tlocal g= childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\tlocal k= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\tlocal r0= childDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\t\t\t\tlocal t0= childDevice.uplink.capabilities[1].formula.props.T0\n                                log.debug('scg_Vibrating_14000  [%s] (振弦)子设备:m=%s,c=%s：公式参数a=%s,b=%s,c=%s', dataid, moduleNo, channelNo, a, b, c)\n                               log.debug('scg_Vibrating_14000  [%s] 4444447777a',a )\n\t\t\t\t\t\t\t   log.debug('scg_Vibrating_14000  [%s] 4444488888b',b )\n\t\t\t\t\t\t\t   log.debug('scg_Vibrating_14000  [%s] 4444499999c',c )\n\t\t\t\t\t\t\t   if a ~= nil and b ~= nil and c ~= nil then\n                                    temperature = 1 / (a + b * LnR + c * LnR ^ 3) - 273.2 --无温度补偿\n                                    temperature = tonumber(string.format('%0.2f', temperature))\n                                    log.debug('scg_Vibrating_14000 [%s]  模块号=%s,通道号=%s   当前的temperature=%s', dataid, moduleNo, channelNo, temperature)\n                                end\n\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 44444455555temperature',temperature )\n\t\t\t\t\t\t\t    if childDevice.uplink.capabilities[1].formula.metaid == 'd4c1a662-bfbc-4e70-8744-1604711d65db' then --混凝土结构\n\t\t\t\n\t\t\t\t\t\t\t\t\tif e ~= nil and c0 ~= nil and g ~= nil and k ~= nil and r0 ~= nil and t0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy=e * (g * c0 * (Resistance-r0) + k * (temperature-t0))\n\t\t\t\t\t\t\t\t  \n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'abc52bef-269a-4be1-82f0-5d3626a3ca44' then --钢结构\n\t\t\t\t\t\t\t\t\tlocal y1= childDevice.uplink.capabilities[1].formula.props.Y1\n\t\t\t\t\t\t\t\t\tlocal y2= childDevice.uplink.capabilities[1].formula.props.Y2\n\t\t\t\t\t\t\t\t\tif e ~= nil and c0 ~= nil and g ~= nil and y1 ~= nil and r0 ~= nil and t0 ~= nil and y2 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = e * (g * c0 * (Resistance-r0) + (temperature-t0) * (y1-y2))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 444444temperature',temperature )\n\t\t\t\t\t\t\t--\t04d11a24-68c7-4a80-bfc1-ffb924f24296\n\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == '86dd2c3f-ab82-4e7a-8766-5f8af99c2de9' then --裂缝计\n                                   \n\t\t\t\t\t\t\t\t\tlocal K= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] K1111111111111(振弦)子设备:childDevice.uplink.capabilities[1].formula.props.K',K )\n\t\t\t\t\t\t\t\t\tlocal G= childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] G1111111111111(振弦)子设备:childDevice.uplink.capabilities[1].formula.props.G',G )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 232323Resistance',Resistance )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 444444temperature',temperature )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 55555r0',r0 )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s] 66666t0',t0 )\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s]Frequency2333565677Frequency',Frequency )\n\t\t\t\t\t\t\t\t\tResistance=Frequency^2/1000\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s]Resistance22222222Resistance',Resistance )\n\t\t\t\t\t\t\t\t\tphy = G * (Resistance-r0) + (temperature-t0) * K\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s]phy22222222phy',phy)\n\t\t\t\t\t\t\t\t\tphy=tonumber(string.format('%0.3f',phy))\n\t\t\t\t\t\t\t\t\tlog.debug('scg_Vibrating_14000  [%s]phy222222223436456phy',phy )\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tend\n                        else\n                            log.debug('scg_Vibrating_14000  [%s] (振弦)子设备:m=%s,c=%s deviceId为nil', dataid, moduleNo, channelNo)\n                        end\n                        local data1 = {\n                            data = {\n                                frequency = Frequency,\n                                resistance = Resistance,\n                                voltage = voltage,\n                                temperature = temperature,\n\t\t\t\t\t\t\t\tphysicalvalue=phy\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = datetime\n                        }\n                        table.insert(out.data, data1)\n                    else --电压  错误码  心跳 扩展\n                        local subData = string.sub(dataArea, 1, 2)\n                        dataArea = string.sub(dataArea, 3, -1)\n                        if i == 5 then --电压数据\n                            voltage = (tonumber(subData, 16) + 175) / 100\n                        elseif i == 6 then --错误码\n                            debug_code = 1003\n                            debug_msg = subData .. '_' .. debugErrorMsg[tonumber(subData, 16)]\n                            out.result = {code = debug_code, msg = debug_msg}\n                        end\n                    end\n                end\n            end\n\n            --返回数据\n            sendAck(dataid, messageId_hex, dataCounts_hex)\n        else\n            out.result = {code = errcode, msg = errormsg}\n        end\n        local resultData = json.encode(out)\n        log.debug('scg_Vibrating_14000  [%s] resultData=%s', dataid, resultData)\n\n        ctx:notify(resultData)\n    end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    log.debug('scg_Vibrating_14000 [%s] 应答=%s', ackID, json.encode(ack))\n    ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n    log.debug('scg_Vibrating_14000 [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n    --下发返回前  判断 当前设备 cycletime与之前的存储是否一致\n\n    if uplinkmessageid ~= nil then\n        if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n            local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n            asend_HttpResponse(dataId, resp_hex)\n        else\n            --首次收到数据下发采集周期 配置\n            --d000000e1003010102\n            local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n            --log.debug('scg_Vibrating_14000 [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n            local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n            log.debug('scg_Vibrating_14000 [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n            asend_HttpResponse(dataId, resp_hex)\n            sendCount_updateTime = sendCount_updateTime + 1\n        end\n    end\nend\n\ngetRedisValue = function(keyStr)\n    log.debug('scg_Vibrating_14000 getRedisValue,keyStr=%s', keyStr)\n    local keyValue\n    local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n    if r1ok ~= false then\n        keyValue_redis = r1\n        log.debug('scg_Vibrating_14000 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n        if keyValue_redis ~= nil then\n            keyValue = tonumber(keyValue_redis)\n        else\n            log.debug('scg_Vibrating_14000 redis get dataCounts=nil')\n        end\n    else\n        log.debug('scg_Vibrating_14000 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n    end\n    return keyValue\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            if child.uplink.props.module == tostring(moduleNoId) then\n                if child.uplink.props.channel == tostring(channelNoId) then\n                    --log.debug('scg_Vibrating_14000  m=%s,c=%s 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('scg_Vibrating_14000  m=%s,c=%s subdevices=nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(data, d_index)\n    log.debug('scg_Vibrating_14000  开始校验数据=%s', data)\n    local datalen = string.len(data) / 2\n    if data == nil or datalen <= 9 then\n        errormsg = string.format('Data is nil or invalid length=%s', datalen)\n        errcode = 1002\n        log.debug('scg_Vibrating_14000 [%s] errormsg=%s', d_index, errormsg)\n        return false\n    end\n    data = string.sub(data, 17, -1)\n    --去除id\n    local msgId = string.sub(data, 1, 2)\n    local msgtype = string.sub(data, 5, 6)\n    if msgId == '80' and msgtype == 'ff' then --debug信息\n        debugMsg = HextoStr(string.sub(data, 7, -1))\n        errormsg = string.format('debugmsg=%s', debugMsg)\n        errcode = 1003\n        log.debug('scg_Vibrating_14000 [%s] debugmsg=%s', d_index, errormsg)\n        return false\n    elseif msgId == '80' and msgtype == '01' then --设备ack应答\n        log.debug('scg_Vibrating_14000 [%s] 设备应答设置成功=%s', d_index, errormsg)\n        redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n    \t --如果平台刚更新配置周期，还未下发指令。设备就返回更新应答， 日志记录这种异常，厂家说可能出现，可能？\n        if dataCounts == 0 or  sendCount_updateTime ~=0 then\n            log.debug('scg_Vibrating_14000 [%s]  异常 设备更新周期应答  dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n        end\n    end\n    return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n    local bits = {}\n    local byteNum = tonumber(byteStr, 16)\n    local bitsTable = {}\n\n    for i = 8, 1, -1 do\n        local ex = 2 ^ (i - 1)\n        if byteNum >= ex then\n            --print(string.format('i=%s,byteNum=%s',i,byteNum))\n            bitsTable[i] = 1\n            byteNum = byteNum % ex\n        else\n            bitsTable[i] = 0\n        end\n    end\n    return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n    -- 12 04 02 0F 24 38 ==> 18\n    local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n    local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n    local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n    local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n    local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n    local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n    timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('scg_Vibrating_14000  timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n    return recordTime\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ndebugErrorMsg = {\n    '电量过低，设备即将无法使用无线通讯，此时设备红灯闪烁',\n    'AIT不合法',\n    'SIT不合法',\n    '传感器端口1打开，但检测不到传感器',\n    '传感器端口2打开，但检测不到传感器',\n    '传感器端口3打开，但检测不到传感器',\n    '传感器端口4打开，但检测不到传感器',\n    '传感器1参数不合法',\n    '传感器2参数不合法',\n    '传感器3参数不合法',\n    '传感器4参数不合法',\n    'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n    '设备温度过高，超过85度',\n    '设备温度过低，低于-45度',\n    '开发错误，已保存至flash',\n    '设备未知原因重启',\n    '设备未知原因重新上电',\n    '端口1/2/3/4传感器频率超出扫频范围，可能造成数据不准确',\n    '传感器端口1/2/3/4打开，但监测不到任何传感器',\n    '错误原因较多，导致错误栈满',\n    '传感器端口1 超过4000HZ',\n    '传感器端口2 超过4000HZ',\n    '传感器端口3 超过4000HZ',\n    '传感器端口4 超过4000HZ',\n    'AIT过小，自动设置为最小值60',\n    'AIT过大，大于最大值2147483647',\n    'ait不为零，但没有端口是打开的',\n    '时间同步超时',\n    '传感器端口均未接传感器'\n}	INLINE	2019-09-19 09:30:52.136+08	2019-09-24 16:55:30.256+08	2019-09-19	\N
a0c9fba8-70ea-4fc2-a16f-b308bbf77669	gx_pressure_6900	\N	原江威协议	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--D:\\SVN\\201812项目\\20181207待接入项目\\2、广东江威设备接入-孟凡侠\\R485通讯通讯协议.doc\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gx_pressure_6900 设备模块 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("gx_pressure_6900,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("gx_pressure_6900  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--0103021388b512\n--"pressure": 5000\nunmarshall=function(hex,moduleNoStr)\n    log.debug("gx_pressure_6900 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToShort(hex,3,'B')/10\n    \n        out.data = {           \n            pressure=tonumber(string.format('%0.3f',pressure))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("gx_pressure_6900 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = string.format('返回数据长度无效=%s≠7',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n   \n   local dataMoudle=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n        errormsg = string.format('模块号无效=%s≠%s',dataMoudle,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2019-01-19 15:13:24.71+08	2019-04-09 11:20:39.224+08	2019-01-19	\N
9da84987-2b74-4e21-b24c-98592f025778	FS-LFXX-Z	\N	裂缝计协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-LFXX-Z\n]]--liankang\nstart=function ()\n    log.debug("FS-LFXX-Z start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-LFXX-Z encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-LFXX-Z decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x04, BE);                        -- 功能码 04\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x04, BE);                        -- 读取寄存器起始地址 00 04\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果,  裂缝距离\n-- 正确回复  01040480030242A315  裂缝距离 displacement : -3.0578\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\n\t\tlocal plusOrMinus = bit:_and(iota.hexToByte(data, 3, 'B'), 0x80)  -- 0为正号， 0x80为负号\n\t\tlog.debug("plusOrMinus = %x", plusOrMinus)\n\t\tlocal highInteger = bit:_and(iota.hexToByte(data, 3, 'B'), 0x7F)  -- 整数高位\n\t\tlog.debug("highInteger= %x", highInteger)\n\n\t\t-- 替换整数高位\n\t\tlocal integerStr = ""\n\t\tintegerStr = iota.appendHexByte(integerStr, highInteger, 'B')\n\t\tlog.debug("intergerStr1 = %s", integerStr)\n\t\tintegerStr = integerStr..string.sub( data, 9, 10)\t-- 十六进制字符串\n\t\tlocal decimalStr = string.sub( data, 11, 14)\n\t\tlog.debug("intergerStr = %s", integerStr)\n\t\tlog.debug("decimalStr = %s", decimalStr)\n\t\t\n\t\tlocal integer = iota.hexToShort(integerStr, 0, 'B')  \t-- 十进制数字\n\t\tlocal decimal = iota.hexToShort(decimalStr, 0, 'B')\n\n\t\tlocal displace \t\n\t\tif 0 == plusOrMinus then\n\t\t\tdisplace = integer + decimal / 10000\n\t\telse\t\n\t\t\tdisplace = -(integer + decimal / 10000)\n\t\tend\n\t\tout.data = {\n\t\t\tdisplacement = displace\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x04 then -- 长度不等于 9   或者 读第二个字节，功能码不等于04\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and	INLINE	2019-12-05 15:11:50.571+08	2019-12-06 11:04:36.637+08	2019-12-05	\N
a7ab0713-69b3-41b8-ba9a-0ec08d57a2ba	jclq_temp_ACA626T-3	\N		1.0	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "jclq_temp_ACA626T-3.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x68, endian)\n    buff=iota.appendHexByte(buff, 4, endian)      \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo) \n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n    --680D0084002010000000050500CB    moduleId=0\n    --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n    log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==28) then  \n\n        local IDX_XDATA = 4    \n        local IDX_YDATA = 7        \n        local IDX_Temp = 10  \n\n        local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n        local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n        local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n        local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n        local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n        local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n        local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n        local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n        local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n        local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n        local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n        local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n        local angleX = xSecondNum + xThirdNum + xForthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum\n        local temp = tSecondNum + tThirdNum + tForthNum\n\n        if (xFirst == 0x01) then    \n            angleX = -angleX\n        end\n\n        if (yFirst == 0x01) then\n            angleY = -angleY\n        end\n\n        if (tFirst == 0x01) then\n            temp = -temp\n        end\n       \n       \n        out.data = {\n           anglex=angleX,\n           angley=angleY,\n           temperature=temp\n        }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",json.encode(out))\n    return json.encode(out)\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n \n\n\n \n\n	INLINE	2019-05-24 09:40:31.045+08	2019-05-24 18:07:19.505+08	2019-05-24	\N
fb1db37d-4ca2-4e71-9b30-7ead94407adc	jsywcg_Inclination	\N	倾角传感器	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "ywcg_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("ywcg 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("ywcg 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."0103"\n    buff=iota.appendHexWord(buff, tonumber(moduleNo), 'endian')           -- 2: 模块号\n    buff=buff.."0004 "             -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)     --下发的码流\n   \n\tif ok then              --下发是否成功\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n\t\t\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n--01030001000415C9\n--010308C0054FDF3FBE147B7478\n--"xDegree": -2.083000°\n--"yDegree":1.485000°\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={ },\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\n       \n        --print("parsing data", hex)\n        local xangle= iota.hexToFloat(hex,3,'B');\n\t\tlog.debug("ywcg xangle= %d",xangle)\n\t\tlocal yangle= iota.hexToFloat(hex,7,'B');\n        log.debug("ywcg yangle= %d",yangle)\n        out.data = {\n            xangle=xangle,\n\t\t\tyangle=yangle,\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('ywcg开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,0,'B') ~= 0x01 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n \n    log.debug('ywcg 数据校验通过')\n    return true\n\nend\n\n	INLINE	2019-04-11 16:16:05.197+08	2019-04-19 09:38:38.455+08	2019-04-11	\N
3bd4c565-aa1b-4597-ad7c-dddf5c35b3fb	rpkj_level_1	\N	上海融频电子科技有限公司	1.0	c526123b-28bf-4a01-9c10-c630b8d0dec4	c526123b-28bf-4a01-9c10-c630b8d0dec4	f	c526123b-28bf-4a01-9c10-c630b8d0dec4	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "rpkj_level_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("rpkj_level_1 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 1, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    -- 01040000000271cb\n    log.debug("rpkj_level_1,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("rpkj_level_1  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("rpkj_level_1 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        --01040442C800006E02 \n        --"level": 100\n        local level =iota.hexToFloat(hex,3,'B');\n    \n        out.data = {           \n            level=level        \n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("rpkj_level_1 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-01-19 11:30:57.223+08	2019-09-20 14:33:57.823+08	2018-01-19	\N
ee33724a-0cca-49c0-b8b0-e0b979eb6527	Led_Push_Server	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug("Led_Push_server:device=%s",json.encode(device))\n\tlocal data = capability.param\n\tlocal _endatas = Split(data,",")\n\tlog.debug("_endatas %s",_endatas)\n\tlocal ack = nil\n\tfor k,v in pairs(_endatas) do\n\t\tlocal values = Split(v,"=")\n\t\tif values[1] == "number" then\n\t\t\tChangeSCreen(values[2])\n      \t\tctx:sleep(3)\n\t\telseif values[1] == "data" then\n      \t\tlog.debug("values %s",values[1])\n\t\t\tctx:sleep(3)\n\t\t\tCharterprotocol(values[2])\n      \t\tctx:sleep(3)\n\t\tend\n\n\tend\n\t\n\n--数据推送\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("Led_Push_server:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n\n\n\nfunction ChangeSCreen(data)\n\t--log.debug("Led_Push_server ChangeSCreen")\n\n\n\tlocal moduleid = device.uplink.props.module\n  \t--log.debug("Led_Push_server function ChangeSCreen() num %s",num)\n\tlocal str = ""\n\tstr ="EQ"..string.format("%03d",tonumber(moduleid))\n\tlocal buff = StrtoHex(str).."0103"\n\tbuff =iota.appendHexByte(buff,tonumber(data)).."0040"\n\t--log.debug("Led_Push_server function ChangeSCreen() buff%s",buff)\n\n\tctx:asend(buff)\n\nend\n\nfunction Charterprotocol(data)\n\tlog.debug("Led_Push_server Charterprotocol")\n\n  \tlocal num =tostring (data)\n\n \t--log.debug("Led_server GetData：%s",_endatas)\n\tlocal moduleid = device.uplink.props.module\n\tlocal str = ""\n\tstr ="!#"..string.format("%03d",tonumber(moduleid))\n\t\n\tlocal buff = StrtoHex(str)..data..StrtoHex("$$")\n\t--log.debug("Led_Push_server  Charterprotocol buff%s",buff)\n\tctx:asend(buff)\n\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tret=ret..str\n\tend\n\treturn ret\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-01-19 14:54:14.428+08	2019-05-17 14:57:40.866+08	2019-01-19	\N
e99ff603-3675-43ae-a516-403cf3d1a1b1	fshs_pressure_19001	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	--‪D:\\SVN\\201812项目\\20181207待接入项目\\4、佛山顺德昊胜 沉降监测项目--康飞\\PTH-SZY100硅式静力水准仪通信协议.doc\nstart=function()\n    log.debug("start %s, ctx=%s", "fshs_pressure_19001.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x12, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fshs_pressure_19001,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\n--0103001600122403\n--0103244174F2DD000000000000000042C800000000000042C800000000000047C350003F8DF6FE471F\n--"pressure": 15.309293,\n--"temperature": 1.1091\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fshs_pressure_19001 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,35,'B')\n    \n        out.data = {           \n            pressure=tonumber(string.format("%0.2f",pressure)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature))\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fshs_pressure_19001 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 41 then\n        errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2019-01-28 09:58:41.636+08	2019-01-28 10:07:14.633+08	2019-01-28	\N
f80e7234-e166-424d-8115-f898bb1cabfd	TestTCP	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n\nstart = function()\n    --local checkstr="0105610000010000000000000000000000000000000000000000000000"\n    --local aa=iota.appendHexCrc8(checkstr,0)\n    log.debug('test_TCP device=%s', json.encode(device))\n    ok = ctx:asend('010203')\nend\n\nonData = function(hex)\n    --主动上传式\n    --log.debug("test_TCP:Received=>%s",hex)\n    devicePort = device.uplink.props.port\n    log.debug('test_TCP port=%s Received=>%s', devicePort, hex)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    out.data = {\n        hexData = HextoStr(hex)\n    }\n\n    local resultData = json.encode(out)\n    log.debug('test_TCP devicePort=%s, resultData=%s', devicePort, resultData)\n    ctx:notify(resultData)\nend\n\n--hex -> ASCII\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\nStrtoHex = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n	INLINE	2019-06-19 13:57:35.131+08	2019-06-19 14:04:32.033+08	2019-06-19	\N
e4ffc96e-8398-498d-a5f3-d1ad11efc13d	fshs_pressure_19002	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	--‪D:\\SVN\\201812项目\\20181207待接入项目\\4、佛山顺德昊胜 沉降监测项目--康飞\\PTH-SZY200磁式静力水准仪ModBus通讯协议（V2.0）.doc\nstart=function()\n    log.debug("start %s, ctx=%s", "fshs_pressure_19002.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fshs_pressure_19002,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n--01030004000285ca\n--01030412e62e00031c\n--"pressure": 4838.12\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fshs_pressure_19002 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure_int =iota.hexToUShort(hex,3,'B')\n        local pressure_dot =iota.hexToUShort(hex,5,'B')\n    \tlocal pressure=pressure_int+pressure_dot/65536\n        out.data = {           \n            pressure=tonumber(string.format("%0.2f",pressure))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fshs_pressure_19002 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 9 then\n        errormsg = string.format('无效的数据长度=%s≠9',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2019-01-28 10:46:51.345+08	2019-02-18 15:51:13.318+08	2019-01-28	\N
81808c6c-3007-4832-b2e0-bf51d0c3bf14	xbyq_httpMQTT	\N		1.0	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	f	c8fac2b3-4360-47e4-91ab-2d6f3b3973e6	Lua	\nstart = function()\n    log.debug('xbyq_httpMQTT   device=%s', json.encode(device))\n\tlog.debug('xbyq_httpMQTT   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('xbyq_httpMQTT', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('xbyq_httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['time']\n\tlog.debug('xbyq_httpMQTT [%s] 时间戳', tonumber(timeStamps))\n    local allData=bodypkg['data']\n\tlog.debug('xbyq_httpMQTT 得到所有数据%s ', json.encode(allData))\n\n\tfor k,v in pairs(allData)  do\n\t    local serial_number=v.serial_number\n\t    local source_data=v.source_data\n\t\tlocal childDevice = getDeviceInfos(moduleNo,serial_number)\n\t\t\t\tlog.debug('xbyq_httpMQTT 查询到子设备%s ', json.encode(childDevice))\t\t\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n                        data = {\n                            physicalvalue = source_data\n\t\t\t\t\t\t\t\n                        },\n                        device = childDevice.id,\n                        time=os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(timeStamps))),\n                        type = 1\n                    }\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\telse\n\t\t\t\t\tlog.debug('xbyq_httpMQTT  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\tend \n        log.debug('xbyq_httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\ngetDeviceInfos=function(moduleNo,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        log.debug("xbyq_httpMQTT 查询m=%s c=%s 子设备deviceId",tostring(moduleNo),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("xbyq_httpMQTT:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNo),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("xbyq_httpMQTT 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t  log.debug("xbyq_httpMQTT 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n        if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('xbyq_httpMQTT:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n           \t\n\t\tend\n    else\n    log.debug("xbyq_httpMQTT:  subdevices是nil")\n    return nil\n    end\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2019-10-28 17:19:37.02+08	2019-11-05 08:51:53.764+08	2019-10-28	\N
e32ab979-e242-4b6c-9637-17964d3f6dd9	gmkj__7501	\N	主动上报版本	1.0	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	f	7d1ecbc8-319d-43ec-9a0b-67d1f713fb36	Lua	--20180917项目资料提交\\2 桥梁监测--东南大学--梁少龙\\10730008 GM8050 MODBUS-RTU通讯协议（V2.0）.doc\nstart=function()\n    -- log.debug("load script %s, moduleId=%s", "gmkj__7501.lua", device.props.moduleId or "[nil]")\n     log.debug("gmkj__7501:".."LUA: ctx is =%s", json.encode(device))\n   ok=ctx:asend("0102")\n   -- log.debug("gmkj__7501:".."测试下发01020304正常")\nend\n\n \n \n \nonData=function(hex)\n\t\tlocal result="{}"\n\t\tmoduleNo=device.uplink.props.module --模块 \n        resultData = unmarshall(hex,moduleNo)\n\t\tctx:notify(resultData)\nend\n \n \n --0114040044C1147444C169C144C1B7AE44C2101444C2763444C3065E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C2ADE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044C1BAC70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097A6\n \nunmarshall=function(hex,moduleNoStr)\n    log.debug("gmkj__7501 收到数据=%s", hex)\n\t\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal data=hex\n\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('gmkj__7501 数据有效')\n\t\t\n\t\tlocal alldata={}\n\n\t\t--分析单类数据\n        for i=1,32*8,1 do\n\t\t\tlocal wavelength =iota.hexToFloat(hex,i*4,'B')\n\t\t\talldata[i]=tonumber(string.format("%0.4f",wavelength))\n\t\tend\n\t\tlog.debug("gmkj__7501  通道1数据1=%s,通道8数据32=%s",alldata[1],alldata[256])\n\t\t--遍历设备 匹配数据\n\t\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\t\t\t\n\t\tif subdevices ~=nil then\n\t\t\tlocal moduleNo_sub=tonumber(device.uplink.props.module) \t--模块 \n\t\t\tfor index_channel,channelDevice in pairs(subdevices) do \t\t\t\t\n\t\t\t\tlocal channelNo_sub=tonumber(channelDevice.uplink.props.channel)\t--通道 \n\t\t\t\tfor index_node,nodeDevice in pairs(channelDevice.dnlinks[1].devices) do \n\t\t\t\t\tlocal nodeNo_sub=tonumber(nodeDevice.uplink.props.node)\t--通道 \n\t\t\t\t\t--log.debug("gmkj__7501 子设备模块通道 接口获取 m=%s,c=%s,n=%s ",moduleNo_sub,channelNo_sub,nodeNo_sub)\n\t\t\t\t\tlocal keyIndex=(channelNo_sub-1)*32+nodeNo_sub\n          \t\t\tlocal WaveLength=alldata[keyIndex]   \n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t   data={\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t  wavelength=string.format('%0.3f',WaveLength)     \n\t\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t\tdevice=nodeDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t\n\t\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("gmkj__7501  m=%s  resultData=%s ",moduleNoStr,resultData)\n    return resultData\nend\n\n\nIsValid=function(data,moduleStr)\n    local checkLen=string.len(data)/2\n    if data == nil or checkLen ~= 1030 then\n\n        errormsg =string.format('无效的数据长度=%s≠1030',checkLen)\n        errcode = 1001\n        log.debug("gmkj__7501 数据校验失败 %s ",errormsg)\n        return false\n    end\n   \n    local checkModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleStr) ~= tostring(checkModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleStr)\n        errcode = 1004\n        log.debug("gmkj__7501 数据校验失败 %s ",errormsg)\n        return false\n    end\n    return true\n--crc\nend\n\n\n	INLINE	2018-10-11 09:52:15.812+08	2019-01-23 16:31:30.714+08	2018-10-11	\N
e7b120d0-2c54-4acf-b8c2-af18f962c558	shjy_Level_1935	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "shjy_Level_1935.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module   --模块 通道 优先接口获取\t\t\n\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("shjy_Level_1935,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("shjy_Level_1935  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--01040000000271CB\n--01040401ca1f7d1257\n--458.123\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shjy_Level_1935 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local levelinter =iota.hexToUShort(hex,3,'B')\n\t\tlocal leveldeci =iota.hexToUShort(hex,5,'B')/65535\n\t\tlocal level=levelinter+leveldeci       \n        out.data = {           \n            level=tonumber(string.format("%0.3f",level))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shjy_Level_1935 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-09-26 14:24:15.822+08	2019-01-29 16:46:31.646+08	2018-09-27	\N
dca382da-547a-400b-8fbb-3a1bbd32b33b	bsd_pressure_19010	\N		1.0	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	f	41258e4c-3278-4ea9-bbd8-9d0a83c4ad92	Lua	--D:\\SVN\\201812项目\\20181221新增项目资料\\4 宝鸡百事得设备接入--于金哲\\dpi703rs485通信协议.doc\nstart=function()\n    log.debug("start %s, ctx=%s", "baissde_pressure_19010.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x12, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("baissde_pressure_19010,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\n--0103001600122403\n--0103244174F2DD000000000000000042C800000000000042C800000000000047C350003F8DF6FE471F\n--"pressure": 15.309293,\n--"temperature": 1.1091\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("baissde_pressure_19010 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,35,'B')\n    \n        out.data = {           \n            pressure=tonumber(string.format("%0.3f",pressure)),\n\t\t\ttemperature\t=tonumber(string.format("%0.2f",temperature))\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("baissde_pressure_19010 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 41 then\n        errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2019-01-30 10:36:45.596+08	2019-01-30 11:06:09.095+08	2019-01-30	\N
bf0f9241-ed4f-4e99-83c6-8160c16313ea	nawei_liquid_1930	\N	纳微时代通讯协议	1.0	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	f	a8f32e64-9094-49d3-9da0-9a5abd4dd33d	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n    log.debug("nawei_liquid_1930   device=%s",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x6e, endian)  \n    buff=iota.appendHexByte(buff, 0x75, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x07, endian) \n    buff=iota.appendHexByte(buff, 0x20, endian)\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    local check=CS16(4,buff)\n    buff=iota.appendHexWord(buff, check, endian)              -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    log.debug('nawei_liquid_1930  ok=%s,resp=%s',ok,resp)\n    ctx:done(result)\nend\n--6e75000bff200001000a0103000afe0000   --moduleId=1\n--"level": 28.14\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n        local le1=iota.hexToByte(hex,12,'B')\n        local le2=iota.hexToByte(hex,13,'B')\n        local le3=iota.hexToByte(hex,14,'B')\n        local Level=(bit:_or(bit:_lshift(le1,16),bit:_or(bit:_lshift(le2,8),le3)))/100.0\n        \n        out.data = {\n           length=Level\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nCS16=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16)\n    end     \n    return lcr\nend \nIsValid=function(data)\n    log.debug('nawei_liquid_1930 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,4,'B') ~= 0xff then\n        errcode = 1001\n        errormsg = 'nawei_liquid_1930 Hex CMD False ' \n        return false\n    end\n    if  tonumber(device.uplink.props.module) ~= iota.hexToShort(data,6,'B') then\t\n        errormsg = 'nawei_liquid_1930 Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('nawei_liquid_1930 数据校验通过')\n    return true\nend\n \n	INLINE	2017-09-08 17:34:33.421+08	2019-02-12 10:55:23.626+08	2017-09-06	\N
7c734114-6fa7-41a5-8f0c-ce0940aded18	fs_inclination_1503	\N	江西飞尚杆式测斜仪	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 22, endian)             -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n        local scale = 1000000.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \tanglex = xa,\n           \tangley = ya\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2017-09-04 09:31:46.287+08	2019-11-21 11:12:38.817+08	2017-09-02	\N
dc5d5da7-4105-4b48-9969-e9da5c70a387	hnjs	\N	加速度传感器	1.0	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f	736d5c22-d6ac-4577-9782-0f95345ea1d5	Lua	start=function()\n    log.debug("hnjs.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n--加速度传感器\nonData=function(hex)\n    log.debug("hnjs.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 09 00 01 06 f0 01 16 01 65 01 54 50 82 eeee\n\t--ff41584a 23866262041451583023 0009 0001 06 f0 0116 0165 0154 5082 eeee\n\t--ff41584a238662620414515830230009000106f00116016501545082eeee\n\t\t\tlog.debug("hnjs 加速度=%s",hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\t\n        local accelerationxx = iota.hexToShort(hex,20,'B')/100;\n        log.debug("hnjs accelerationxx=%s",accelerationxx)\n\t\tlocal accelerationyy = iota.hexToShort(hex,22,'B')/100;\n\t\tlog.debug("hnjs accelerationyy=%s",accelerationyy)\n\t\tlocal accelerationzz =iota.hexToShort(hex,24,'B')/100;\n\t\tlog.debug("hnjs accelerationzz=%s",accelerationzz)\n     \n        out.data = {                \n            accelerationx=accelerationxx,\n\t\t\taccelerationy=accelerationyy,\n            accelerationz=accelerationzz\n            --anglez=zData,\n            --temperature=temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("hnjs: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'hnjs:Data is nil'\n        errcode = 1001\n        return false\n    end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tlog.debug("hnjs: -----sensorType=%s",sensorType)\n\tif (sensorType~=9) then\n        errormsg = string.format('hnjs:sensorType is wrong=%s',sensorType)\n        errcode = 1001\n        return false\n    end\n\tlocal subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("hnjs.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("hnjs.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n        errcode = 1001\n        return false\n    end\n\t\n    \n    return true\n  \nend\n \n	INLINE	2019-07-23 09:33:19.172+08	2019-07-23 10:37:23.894+08	2019-07-23	\N
d7580de5-0d54-4658-b81f-48ed26745fb4	fs_fire_1500	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//D:\\SVN\\201909项目\\智慧小区\\产品说明\\智能火灾报警-艾礼安(24h周期主动上报、事件上报)\\烟雾报警器艾礼安NB协议.docx\n\nstart = function()\n    log.debug('fs_fire_1500   device=%s', json.encode(device))\nend\n\nlocal sendCount_updateTime = 0\n\n--c71803111026221303302208200010000000000000000000\nonData = function(httpbody)\n    local dataid = device.uplink.props.id\n    log.debug('fs_fire_1500 [%s]  httpbody===>%s', dataid, json.encode(httpbody))\n    --主动上传式\n    --local hex = httpbody.Body\n    local bodyStr = httpbody.Body\n    if bodyStr ~= nil and bodyStr ~= '' then\n        local obj = json.decode(bodyStr)\n        local hex = obj.pkg\n\n        local out = {\n            data = {},\n            result = {}\n        }\n        local ErrorCode = IsValid(hex, dataid)\n        if ErrorCode then\n            local messageId_hex\n            local messageType = 'cycle'\n            if string.len(hex) / 2 == 24 then --事件信息记录  包序号\n                messageId_hex = string.sub(hex, -2, -1)\n                messageType = 'event'\n            end\n            local moduleNo = tonumber(string.sub(hex, 15, 24))\n            local cidCode = tonumber(string.sub(hex, 7, 10))\n            local cidMessage = getCIDmessage(cidCode)\n            local voltage = tonumber(string.sub(hex, 11, 12), 16) / 10\n            local signals = tonumber(string.sub(hex, 13, 14))\n            log.debug('fs_fire_1500  [%s]  moduleNo=%s,cidCode=%s,voltage=%s,signals=%s', dataid, moduleNo, cidCode, voltage, signals)\n            out.data = {\n                cidCode = cidCode,\n                cidMessage = cidMessage,\n                voltage = voltage,\n                signals = signals\n            }\n\n            sendAck(dataid, messageId_hex, messageType)\n            if(messageType=='event') then\n                out.result = {code = cidCode+70020000, msg = cidMessage}\n            end\n        else\n            out.result = {code = errcode, msg = errormsg}\n        end\n        local resultData = json.encode(out)\n        log.debug('fs_fire_1500  [%s] resultData=%s', dataid, resultData)\n\n        ctx:notify(resultData)\n    else\n        log.debug('fs_fire_1500 [%s]  数据解析为空 httpbody=%s', dataid, json.encode(httpbody))\n    end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    log.debug('fs_fire_1500 [%s] 应答=%s', ackID, json.encode(ack))\n    ctx:asend(ack)\nend\nsendAck = function(dataId, packageIndex, ackType)\n    log.debug('fs_fire_1500 [%s] packageIndex=%s,ackType=%s', dataId, packageIndex, ackType)\n\n    local resp_hex = ''\n    if ackType == 'cycle' then --周期\n        local timeHexStr = os.date('%H%M%S', os.time())\n        log.debug('fs_fire_1500 [%s]    周期timeHexStr=%s', dataId, timeHexStr)\n        resp_hex = '40c701' .. timeHexStr .. '23'\n        asend_HttpResponse(dataId, resp_hex)\n    elseif ackType == 'event' then --事件\n        resp_hex = '40c703' .. packageIndex .. '23'\n        asend_HttpResponse(dataId, resp_hex)\n    end\nend\n\ngetCIDmessage = function(cid)\n    local cidTable = {}\n    cidTable[1100] = '24小时紧急'\n    cidTable[1101] = '个人救护'\n    cidTable[1110] = '火警报警'\n    cidTable[1111] = '燃气报警'\n    cidTable[1112] = '水浸报警'\n    cidTable[1130] = '瞬时报警'\n    cidTable[1384] = '无线探测器低压'\n    cidTable[1140] = '温感报警'\n    cidTable[1400] = '周期检测'\n    cidTable[1485] = '巡更'\n    cidTable[1609] = 'IP设置'\n    cidTable[1702] = '无线探测器防拆'\n    return cidTable[cid]\nend\n\nIsValid = function(data, d_index)\n    log.debug('fs_fire_1500  开始校验数据=%s', data)\n    local datalen = string.len(data) / 2\n    if data == nil or (datalen ~= 12 and datalen ~= 24) then\n        errormsg = string.format('Data is nil or invalid length=%s', datalen)\n        errcode = 1002\n        log.debug('fs_fire_1500 [%s] errormsg=%s', d_index, errormsg)\n        return false\n    end\n\n    local hexHeader = string.sub(data, 1, 2)\n    if hexHeader ~= 'c7' then\n        errormsg = string.format('数据包头=%s≠c7', hexHeader)\n        errcode = 1003\n        log.debug('fs_fire_1500 [%s] debugmsg=%s', d_index, errormsg)\n        return false\n    end\n    return true\nend	INLINE	2019-10-14 16:01:29.423+08	2020-12-18 11:02:08.056+08	2019-10-14	\N
95265997-3ebd-4e01-98d9-9d5a2caa3a7f	JM_1549	\N	解析数据	1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	--//D:\\SVN\\201812项目\\20181207待接入项目\\1、北京为韵科技--康飞\\长沙金码动态电阻应变仪指令及换算.pdf\n--2438383838383838383838383838383830\n--000008b2bab0da80aaa5baaee2a9628098b525b2f5a8258075acaaac2aafa7ad\nstart = function()\nend\n\nlocal G_ascii\nlocal channelsTable\nonData = function(hex)\n    --\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n   local moduleNo = device.uplink.props.module\n   --log.debug('jm_1549  [%s]接收数据Received=>%s',moduleNo,hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        --默认16通道\n\n        local dataType = string.sub(hex, 1, 2)\n\n        if dataType == '24' then\n            local reaponse_Str = HextoStr(hex)\n            G_ascii = string.sub(reaponse_Str, 2, 17)\n            redis.set(device.id .. 'G_ascii', G_ascii)\n            channelsTable = GetValidChannelsNo(G_ascii)\n        else\n            --判断配置表是否为空，若空 读取redis\n            if channelsTable == nil then\n                local r1, r1ok = redis.get(device.id .. 'G_ascii') --获取上次记录时间\n                --log.debug('jm_1549 r1=%s[%s],r1ok=%s[%s]', r1, type(r1), r1ok, type(r1ok))\n                local G_ascii\n                if r1ok ~= false then\n                    G_ascii = r1\n                    --log.debug('jm_1549 r1=%s,r1ok=%s[%s],G_ascii=%s', r1, r1ok, type(r1ok), G_ascii)\n                    if G_ascii ~= nil then\n                        channelsTable = GetValidChannelsNo(G_ascii)\n                    end\n                else\n                    if G_ascii ~= nil then\n                        --log.debug('jm_1549 存入redis')\n                        redis.set(device.id .. 'G_ascii', G_ascii)\n                    else\n                        --log.debug('jm_1549  [%s]无法获取首次设备存储信息',moduleNo)\n                    end\n                end\n            else\n                local dataStr = string.sub(hex, 5, -1)\n                local index = 1\n                for k, v in pairs(channelsTable) do --pairs 遍历所有   与ipairs  遍历连续下标\n                    local subDataHex = string.sub(dataStr, index, index + 3)\n                    index = index + 4\n                    local subData_Ln = string.sub(subDataHex, 1, 2)\n                    local subData_Hn = string.sub(subDataHex, 3, 4)\n                    local subData = tonumber(subData_Hn, 16) * 256 + tonumber(subData_Ln, 16)\n                    local subUm = subData / 65536 * 5 - 2.5\n                    --log.debug('jm_1549 subData=%s,subUm=%s', subData, subUm)\n                    local channelNo = k\n                    --获取通道设备deviceId\n                    local childDevice = getDeviceInfo(channelNo)\n\n                    if childDevice ~= nil then\n                        local deviceId = childDevice.id\n                        local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                        if formulaId == '75a20e66-91ae-4d62-8f69-faef769091b1' then\n                            local k = childDevice.uplink.capabilities[1].formula.props.K\n                            local w = childDevice.uplink.capabilities[1].formula.props.W\n                            if k ~= nil and w ~= nil then\n                                local subPhy = 1000 * k * subUm / w\n                                local data1 = {\n                                    data = {\n                                        physicalvalue = tonumber(string.format('%0.3f', subPhy))\n                                    },\n                                    device = deviceId,\n                                    type = 1\n                                }\n\n                                table.insert(out.data, data1)\n                            end\n                        elseif formulaId == '96e821da-a5f5-448b-9a60-b4e83202b252' then\n                            local k = childDevice.uplink.capabilities[1].formula.props.K\n                            local po = childDevice.uplink.capabilities[1].formula.props.Po\n                            if k ~= nil and po ~= nil then\n                                local subPhy = 1000 * k * subUm + po\n                                local data1 = {\n                                    data = {\n                                        physicalvalue = tonumber(string.format('%0.3f', subPhy))\n                                    },\n                                    device = deviceId,\n                                    type = 1\n                                }\n\n                                table.insert(out.data, data1)\n                            end\n                        -- statements\n                        end\n                    end\n                end\n            end\n        end\n    else\n        log.debug('jm_1549  [%s]数据校验失败=%s',moduleNo,hex)\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\nend\n\n-- 获取有效通道\nGetValidChannelsNo = function(str_G)\n    local channelsTable = {}\n    for i = 1, 16, 1 do\n        local subChannel = string.sub(str_G, i, i)\n        if subChannel == '8' then\n            channelsTable[i] = 1\n        end\n    end\n    return channelsTable\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug('jm_1549  channelId=' .. tostring(channelNoId))\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --if child.props.moduleId==tostring(moduleNoId) then\n            if child.uplink.props.channel == tostring(channelNoId) then\n                --log.debug('jm_1549  DeviceInfo=' .. tostring(child.deviceId))\n                --log.debug('jm_1549  子设备child=%s', json.encode(child))\n                return child\n            end\n            --end\n        end\n    else\n        --log.debug('jm_1549 subdevices=nil')\n        return nil\n    end\nend\n\nIsValid = function(data)\n    --log.debug('jm_1549:开始校验数据')\n    if data == nil or string.len(data) / 2 < 16 then\n        errcode = 1002\n        errormsg = string.format('无效的数据长度=%s%s', string.len(data) / 2)\n        return false\n    end\n\n    if string.sub(data, 1, 2) ~= '24' and string.sub(data, 1, 2) ~= '00' then -- and iota.hexToByte(data,0,'B') ~= 0x54\n        errcode = 1003\n        errormsg = string.format('数据帧头错误,不等于0x24')\n        return false\n    end\n\n    -- if iota.hexToByte(data,dataLength-1,'B') ~= 0x21 then\n    -- errcode = 1003\n    -- errormsg = 'Hex CMD False '\n    -- return false\n    -- end\n    --log.debug('jm_1549:校验通过')\n    return true\nend\n-- 字符串 -> Hex\nStrToHex = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n-- Hex-> 字符串\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2019-01-07 20:09:57.596+08	2019-05-17 10:04:25.563+08	2019-01-07	\N
5562830f-ef0d-4298-bb0e-609f632683e2	dianbiao_	\N	环保监测-电表	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//readingNumber\nstart=function()\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)              -- 1: 功能码\n    buff=iota.appendHexWord(buff, 0x14 ,endian)               -- 2: 数据地址\n    buff=iota.appendHexWord(buff, 42 ,endian)                --2：读取数据长度42\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("fs_trwsd_1166  out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n\n\n\n\n--6303540909092609180fbf0fcc0fb3000000000000000000000001000000000000000000000002000000000000000000000000ffffffff0000000a0000000a0000000b0000002003e803e803e803e80000138a000097a46231\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \t--A项电压\n    \tlocal A_phase_volt= iota.hexToUShort(hex,3,'B')/10\n        local B_phase_volt = iota.hexToUShort(hex,5,'B')/10\n        local C_phase_volt = iota.hexToUShort(hex,7,'B')/10\n        --AC线电压\n   \t\tlocal AC_line_volt= iota.hexToUShort(hex,9,'B')/10\n        local BC_line_volt = iota.hexToUShort(hex,11,'B')/10\n        local CA_line_volt = iota.hexToUShort(hex,13,'B')/10\n    \t--相电流\n    \tlocal A_phase_current= iota.hexToUShort(hex,15,'B')/100\n        local B_phase_current = iota.hexToUShort(hex,17,'B')/100\n        local C_phase_current = iota.hexToUShort(hex,19,'B')/100\n        local total_phase_current=iota.hexToUShort(hex,21,'B')/100\n        \n        --有功功率\n    \tlocal A_active_power=iota.hexToUInt(hex,23,'B')/1000\n   \t\tlocal B_active_power=iota.hexToUInt(hex,27,'B')/1000\n    \tlocal C_active_power=iota.hexToUInt(hex,31,'B')/1000\n    \tlocal total_active_power=iota.hexToUInt(hex,35,'B')/1000\n    \n    \t--无功功率\n    \tlocal A_reactive_power=iota.hexToUInt(hex,39,'B')/1000\n   \t\tlocal B_reactive_power=iota.hexToUInt(hex,43,'B')/1000\n    \tlocal C_reactive_power=iota.hexToUInt(hex,47,'B')/1000\n    \tlocal total_reactive_power=iota.hexToUInt(hex,51,'B')/1000\n    \n        --视在功率\n    \tlocal A_apparent_power=iota.hexToUInt(hex,55,'B')/1000\n   \t\tlocal B_apparent_power=iota.hexToUInt(hex,59,'B')/1000\n    \tlocal C_apparent_power=iota.hexToUInt(hex,63,'B')/1000\n    \tlocal total_apparent_power=iota.hexToUInt(hex,67,'B')/1000\n    \n    \t--功率因数\n    \tlocal A_power_factor=iota.hexToUShort(hex,71,'B')/1000\n   \t\tlocal B_power_factor=iota.hexToUShort(hex,73,'B')/1000\n    \tlocal C_power_factor=iota.hexToUShort(hex,75,'B')/1000\n    \tlocal total_power_factor=iota.hexToUShort(hex,77,'B')/1000\n    \n    \t--功率方向\n    \tlocal power_director=iota.hexToUShort(hex,79,'B')\n   \t\tlocal frequency=iota.hexToUShort(hex,81,'B')/100\n    \tlocal total_energy=iota.hexToUInt(hex,83,'B')/100\n    \n        out.data = {\n         A_phase_volt=A_phase_volt,\n         B_phase_volt = B_phase_volt,\n         C_phase_volt = C_phase_volt,\n        --AC线电压\n   \t\t AC_line_volt= AC_line_volt,\n         BC_line_volt = BC_line_volt,\n         CA_line_volt = CA_line_volt,\n    \t--相电流\n    \t A_phase_current= A_phase_current,\n         B_phase_current =B_phase_current,\n         C_phase_current = C_phase_current,\n         total_phase_current=total_phase_current,\n        \n        --有功功率\n    \t A_active_power=A_active_power,\n   \t\t B_active_power=B_active_power,\n    \t C_active_power=C_active_power,\n    \t total_active_power=total_active_power,\n    \n    \t--无功功率\n    \t-- A_reactive_power=A_reactive_power,\n   \t\t-- B_reactive_power=B_reactive_power,\n    \t-- C_reactive_power=C_reactive_power,\n    \t-- total_reactive_power=total_reactive_power,\n    \n        --视在功率\n    \t-- A_apparent_power=A_apparent_power,\n   \t\t-- B_apparent_power=B_apparent_power,\n    \t-- C_apparent_power=C_apparent_power,\n    \t-- total_apparent_power=total_apparent_power,\n    \n    \t--功率因素\n    \t A_power_factor=A_power_factor,\n   \t\t B_power_factor=B_power_factor,\n    \t C_power_factor=C_power_factor,\n    \t total_power_factor=total_power_factor,\n    \n    \t--功率方向\n    \t-- power_director=power_director,\n   \t\t frequency=frequency,\n    \t total_energy=total_energy\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n    if data == nil or string.len(data)/2~=89 then\n        errormsg = string.format('Data is nil or invalid length=%s[%s]',string.len(data),89)\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n        errormsg = string.format('模块号=%s≠%s',moduleNo_check,tonumber(string.sub(data,1,2),16) )\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_trwsd_1166  数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend\n	INLINE	2021-02-23 15:21:55.591+08	2021-02-24 15:49:28.289+08	2021-02-23	\N
b0bb3d52-04e2-4852-9ad9-b5e8a7e4b543	shjy_LVDT_6100	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug(" load script %s, moduleId=%s", " BJyh.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" BJyh 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" BJyh 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n\tlog.debug(" BJyh buff=%s",buff)\n    buff=buff.."0300160002"\n\tlog.debug(" BJyh bufff=%s",buff)\n    buff=iota.appendHexCrc(buff, "L",0)               -- 2: CRC\n\tlog.debug(" BJyh buff2=%s",buff)\n    ok,resp=ctx:ssend(buff,20000)  --发送指令\n    --local result="{}"\n    if ok then\n\tlog.debug(" BJyh aaaaa")\n        result = unmarshall(resp)\n       -- print(string.format("out=%s,data=%s",resp, result))\n    else\n        log.debug(" BJyh cccc")\n    end\n\tlog.debug(" BJyh result=%s",result)\n\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\tlog.debug(" BJyh vvvv")\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n\t\tlog.debug("BJyh there")\n        local length = iota.hexToFloat(hex,3,'B')\n\t\tlog.debug("BJyh temph=%s",length)\n\t\t\n\t\tlocal data=''\n\n        out.data = {\n            length=length\n        };\n\t\tlog.debug("BJyh data=%s",data)\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\n\n\n\n\n\n\nIsValid=function(data)\n    log.debug(' BJyh 开始校验数据')\n\n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug(' BJyh 数据校验通过')\n    return true\n--crc\nend	INLINE	2018-06-21 09:33:36.576+08	2019-05-07 16:13:45.441+08	2018-06-21	\N
d2f13e5e-dc6e-447c-b8f1-159f56c50f88	shjy_temp_ BK-JC01A	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_ BK-JC01A", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_ BK-JC01A 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x06, endian)            \n        buff=iota.appendHexByte(buff, 0x02, endian)  \n        buff=iota.appendHexByte(buff, CS(buff), endian)              -- 2: CRC16\n        ok,resp=ctx:ssend(buff,4000)\n        local result='{}'\n        if ok then\n            resultStr = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp_ BK-JC01A SSend error!")\n    \t\tout.result = {code=1001,msg='采集超时'} \n    \t\tresultStr=json.encode(out)\n        end\n        ctx:done(resultStr)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\nlog.debug('shjy_temp_ BK-JC01A 解析数据=%s',hex)\n    local out={\n\t    type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t    local responseStr = toStrHex(string.sub(hex, 7, 22))\n\t\tlocal length=tonumber(responseStr)\n\t\tlog.debug('shjy_temp_ BK-JC01A 解析数据=%s',hex)\n        out.data = {\n\t\t\tlength=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp_ BK-JC01A 开始校验数据=%s',data)\n    --[[if data == nil or string.len(data)/2 ~= 12 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end]]--\n    if iota.hexToByte(data,1,'B') ~= 0x06 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    return true\n--crc\nend\n\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n    log.debug('shjy_temp_ BK-JC01A:lcr累加结果%s', lcr)\t\n\tlocal value=bit.band(bit.bnot(lcr),0xff)+1  --按位取反再加1\n\tlog.debug('shjy_temp_ BK-JC01A:lcr累加结果1%s', value)\t\n    return value\nend \n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n\n\t\n   \n	INLINE	2019-06-28 11:09:02.07+08	2019-07-24 11:07:42.532+08	2019-06-28	\N
12414de7-dac4-4966-aaa1-89db04cc97bf	fs_temp_1102s	\N		1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n    log.debug("start %s, ctx=", "fs_1102.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("fs_1102 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("fs_1102 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--local moduleNo=device.props.moduleId or device.uplink.props.module  \n\t--log.debug("fs_1102 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff, 1, endian)             -- 2: 类型=1\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n  \tbuff=iota.appendHexByte(buff, 0, endian)   \n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("fs_1102:发送数据=%s",buff)\n   local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tlog.debug("fs_1102 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n    end\n    \nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)>=15) then\n        --   2   2   1      4     4       2\n        -- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n        --000107DE8112121213131313E1F9  \n        -- moduleId=           结果0,0\n        --print("parsing data", hex)\n        local hum = iota.hexToFloat(hex,9,'B',2);\n        local tem = iota.hexToFloat(hex,5,'B',2);\n        out.data = {\n            temperature=tem,\n            humidity = hum\n        };\n    else\n        local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n \n\n	INLINE	2019-08-21 17:53:18.544+08	2019-08-21 17:53:18.544+08	2019-08-21	\N
ebadb50f-4d2d-4e15-b1fc-0254cb12be3d	aaa	\N		1	269c619d-0aad-4523-a770-9b2f752ed30e	269c619d-0aad-4523-a770-9b2f752ed30e	f	269c619d-0aad-4523-a770-9b2f752ed30e	Lua	f0810c0002181a00fe8046f0	INLINE	2019-09-24 11:33:25.809+08	2019-09-24 11:33:25.809+08	2019-09-24	\N
35c34a5d-993a-4493-a0b0-d8841fd4bd31	CPF_ecc_get_temp	\N	CPFreshmart Energy Consumption Control	1.0	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	a0524b8e-f69f-421e-b306-124dd37f4f1c	Lua	-- 测温。根据设备属性channel 判定是否为单通道读取。\n-- 若多通道读取，则读取 设备的 doors 属性判定通道数量\n-- errorCode：1001=读取温度错误,1002温度无效，1003=读取门磁错误,1004=温度/门无法读取\n--[[ \n测试数据 02030600D100D239F4\n1A18110519000100020003000400050006000700080F\ntemps=2\ndoors=4\ndevType=REFRIGERATOR\n]]--\nstart=function()\n  --log.debug("CPF_ecc_get_temp started")\n  local modbus_addr = 0x02 -- 温度传感器modbus地址\n  local temp_cnt=1  -- 温区数量\n  local door_cnt= 1 -- 门数量 \n  local readtimeout=6000 -- timeout\n  -- 按设备读取。\n  local channel=0         -- 读取开始通道\n  local start_addr=0      -- 起始地址\n\n  -- 通道\n  local channel = tonumber(device.props.channel) or 1\n  local devType = device.props.devType or "REFRIGERATOR"\n  if channel<=0 or channel>4 then -- invalid channel\n    channel=1\n  end\n  -- 传感器数量(温区数量）\n  if device.props.doors ~= nil then\n    door_cnt=tonumber(device.props.doors) or 1\n    if door_cnt<=0 or door_cnt>4 then\n      door_cnt=1\n    end\n else\n    door_cnt=1\n end\n if device.props.temps ~=nil then\n    temp_cnt=tonumber(device.props.temps) or 1\n    if temp_cnt<=0 or temp_cnt>4 then\n      temp_cnt=1\n    end\n else\n    temp_cnt=1\n end\n  \n start_addr = channel -1 -- start from 0\n  -- Modbus地址2+03+偏移量2+读取数量2\n  local req=string.format("%02d03%04X%04X",modbus_addr,start_addr,temp_cnt)\n  --log.debug("CPF_ecc_get_temp, start_addr=%d,sensors=%d",start_addr,temp_cnt)\n  req=iota.appendHexCrc(req,"L",0)\n  --log.debug("req=%s",req)  --02030000000305F8\n  ok,ack=ctx:ssend(req,readtimeout)\n  -- log.debug("CPF_GET_TEMP_ACK=%s-%s,dev=%s",ok,ack,json.encode(device))\n  -- ack=02030600D100CF00D139F4\n  result={\n  \ttype=1\n  }\n  local explen=6+temp_cnt*4+4 -- 期望长度，0203XX=头，4长度CRC，数据=4*传感器数量\n  if ok and string.len(ack) == explen then\n     local tmp1ok,tmp2ok,tmp3ok=true,true,true\n     local err1,err2,err3="","",""\n     result.data={}\n   -- log.debug("mode=%s",channelMode)\n     if devType ~= "REFRIGERATOR" then\n       result.data.temperature,tmp1ok,err1=gettemp(ack,3,"T1",devType)\n     else\n        result.data.temp_1,tmp1ok,err1=gettemp(ack,3,"T1",devType)\n        if temp_cnt>=2 then\n        \tresult.data.temp_2,tmp2ok,err2=gettemp(ack,5,"T2",devType)\n       \tend\n        if temp_cnt>=3 then\n        \tresult.data.temp_3,tmp3ok,err3=gettemp(ack,7,"T3",devType)\n        end\n      end\n      --log.debug("has error!!! %s %s %s", tmp1ok,tmp2ok,tmp3ok)\n      if not (tmp1ok and tmp2ok and tmp3ok) then\n        -- invalid data\n        local msg=err1..err2..err3\n        result.result={\n           code=1002,\n           msg=string.sub(msg,1,string.len(msg)-1)\n        }\n      end\n        -- 门时，读取\n      if devType == "REFRIGERATOR" then\n        \tresult=get_door_stat(channel,door_cnt,result)\n      end\n  else\n     result.result={\n        code= 1001,\n        msg = string.format("Invalid temperature ack:%s",ack)\n      }\n  end\n  --log.debug("CPF_ecc_get_temp result=%s", json.encode(result))\n  ctx:done(json.encode(result))\nend\n\n-- 查询门状态，参考协议： CPF_get_door_stat \nfunction get_door_stat(channel,doors,result)\n  local address="1A18110519"\n  local cmd="8686860F"\n  local readtimeout=5000\n  local ok,ack=ctx:ssend(address..cmd, readtimeout)\n  if channel <1 then channel=1 end\n  if channel >8 then channel = 8 end\n  if doors <1 then doors=1 end\n  if doors >8 then doors = 8 end\n  if doors> 8-channel+1 then doors=8-channel+1 end\n  --log.debug("channel=%d, doors=%d",channel,doors)\n\n  if ok and ack~=nil and string.len(ack) == 44 then\n    -- address+ 01*16 +0F\n    -- 1A18110519000100020003000400050006000700080F\n    local p1,dn\n    -- result.data={}\n    for di=1,doors do\n      p1 = 5+ (channel-1 + di-1)\n      local dis=iota.hexToByte(ack,p1,'B')\n      log.debug("door[%d] = %d", di, dis)\n      dn=string.format("status_d%d",di)\n      result.data[dn] = (dis==0 and "1" or "0")\n    end\n  else\n    if result.result==nil then\n      result.result={\n        code=1003,\n    \tmsg="Invalid doorstat ack:"..ack\n      }\n     else -- get temp error\n       result.result.code=1004 -- both error.\n       result.result.msg=result.result.msg..", invalid door stat ack"\n     end    \n  end\n  return result\nend\n\nfunction gettemp(ack,p,name,devType) \n  local ackHex=string.sub(ack,p*2+1, p*2+4)\n  if ackHex == "ffff" then --not link\n    return nil,false,name.." NOT linked,"\n  end    \n  local v=iota.hexToShort(ack,p,"B")\n  -- log.debug("CPF_get_temp(%s,%d, %s=>%d)",ack, p,name,v)\n  local t=0\n  if v>10000 then\n    t = (10000-v)/10.0\n  else\n    t = v/10.0\n  end\n  if t > 50 or t < -25 then -- Impossible Temp\n      return t,false,name.." OutOfRange[-25,50],"\n  end\n  -- INDOORTEMPSENSOR 读数小于0\n  if t < 0 and devType == "INDOORTEMPSENSOR" then\n      return t,false,name.." OutOfRange[0,50],"\n  end\n  return t,true,""\nend\n\nonData=function(data)\n   -- log.debug("CPF_ecc_get_temp.onData('%s')", data) -- HEX string.\nend	INLINE	2019-04-26 16:10:11.741+08	2019-05-25 13:56:14.384+08	2019-04-26	\N
504318da-e1b0-4c7b-b1a9-c959115c5235	hnyl	\N	压力传感器	1.0	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f	736d5c22-d6ac-4577-9782-0f95345ea1d5	Lua	start=function()\n    log.debug("hnyl.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n--压力传感器\nonData=function(hex)\n    log.debug("hnyl.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a238662620414515830230008000102f0 0116  18 4Feeee\n\t--ff41584a238662620414515830230008000102f00116184Feeee\n\t--ff 41 58 4a 23 86 62 62 04 14 51 58 30 23 00 08 00 01 02 f0 01 16 18 4F eeee\n\t\n\t\t\tlog.debug("hnyl 压力传感器=%s",hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\t\n        local forces = iota.hexToShort(hex,20,'B')/10;\n        log.debug("hnyl forces=%s",forces)\n     \n        out.data = {                \n            force=forces\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("hnyl: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'hnyl:Data is nil'\n        errcode = 1001\n        return false\n    end\n\tlocal sensorType= iota.hexToShort(data,14,'B')\n\tlog.debug("hnyl: -----sensorType=%s",sensorType)\n\tif (sensorType~=8) then\n        errormsg = string.format('hnyl:sensorType is wrong=%s',sensorType)\n        errcode = 1001\n        return false\n    end\n\tlocal subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("hnyl.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("hnyl.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n        errcode = 1001\n        return false\n    end\n\t\n    \n    return true\n  \nend\n \n	INLINE	2019-07-23 09:43:49.005+08	2019-07-30 17:15:53.251+08	2019-07-23	\N
73c4b266-e007-4f6f-88de-02c8c82b9aa4	lefu_settlement_1	\N	位移	1.0	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	f	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	Lua	start=function()\n    log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local length = iota.hexToInt(hex,34,'B')/10000.0000\n     \n        out.data = {                \n            length=length\n        }\n        local resultData =json.encode(out)\n        log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anfang_settlement_1:Data is nil'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anfang_settlement_1:Data length is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataModule= iota.hexToShort(data,26,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=5) then\n        errormsg = 'anfang_settlement_1:sensorType is wrong'\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = 'anfang_settlement_1:crc is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \n	INLINE	2019-05-09 09:47:28.439+08	2019-05-09 15:30:12.516+08	2019-05-09	\N
0e36fdd5-a0d5-4fc7-9337-906d98282bf2	CPF_get_energy	\N	Energy	1.0	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	a0524b8e-f69f-421e-b306-124dd37f4f1c	Lua	--[[\n电量读取。\n参数：相电压(phaseVoltage): 220,380,表示当前设备检测的目标电压值是220还是380\n]]--\nstart=function()\n  log.debug("CPF_get_energy start")\n  modbus_addr = 0x01 -- 功率传感器modbus地址\n  local phaseVoltage = tonumber(device.props.phaseVoltage or "220") --\n  local initConsumption = device.props.initConsumption or 0.00\n  \n  \n  local req=string.format("%02d040000000A",modbus_addr) --读取10个字节\n  req=iota.appendHexCrc(req,"L",0)\n  -- log.debug("req=%s",req)  --01040000000700D\n  ok,ack=ctx:ssend(req,3000)\n  log.debug("CPF_GET_TEMP_ACK=%s-%s,dev=%s",ok,ack,json.encode(device))\n  -- ack=01041408CD00F20000012E00000004000001F400370000D902\n  result={\n    type=1\n  }\n  if ok and string.len(ack)>=50 then\n    --01041408CD00F20000012E00000004000001F400370000D902\n    local crcok,crcmsg=checkCrc(ack)\n    if (not crcok) then\n       result.result={\n        code=1003,\n        msg=string.format("CRC error:%s",crcmsg)\n      }\n    else\n\t  --crcok\n      result.data={\n        voltage=iota.hexToShort(ack,3,"B")/10.0, --08CD\n        current=iota.hexToShort(ack,5,"B")/1000.0,--00F2\n        power=iota.hexToInt(ack,7,"B")/10.0, --0000012E\n        energy=iota.hexToInt(ack,11,"B",3)/1000.0 ,--00000004-KWH\n        frequency=iota.hexToInt(ack,15,"B")/10.0, --000001F4,HZ\n        factor=iota.hexToShort(ack,19,"B")/100.0 -- 0037\n      }\n      result.data.energy = tonumber(string.format("%.3f", result.data.energy))\n      --[[\n      if result.data.frequency<45 or result.data.frequency>55 or\n        result.data.voltage < 180 or result.data.voltage>250 then\n        result.result={\n          code=1001,\n          msg="Out of range:freq,voltage"\n        }\n      end\n      ]]--\n      result.data = convertPhase(result.data, phaseVoltage, initConsumption)\n    end\n  else\n    result.result={\n      code=1002,\n      msg=string.format("Invalid ack:%s",ack)\n    }\n  end\n  -- log.debug("CPF_get_energy done:%s-%s",ok,ack)\n  ctx:done(json.encode(result))  \nend\n\n-- calculate 1phase to 3Phase\nfunction convertPhase(oldval,pv,ic)\n  if pv==220 then\n    oldval.energy = oldval.energy - ic -- initConsumption\n  else\n    -- 转换 220 为 380 系统。\n    -- 防止设备重置\n    --当前基准 \n    local energyBase, ok = redis.hget(device.id, 'energyBase')\n    if not ok then\n        energyBase = 0\n    else \n        energyBase = tonumber(energyBase)\n    end\n    log.debug("CPF_get_energy energy base:%s", tostring(energyBase))\n    \n    oldval.voltage_1p = oldval.voltage\n    oldval.power_1p = oldval.power\n    oldval.energy_1p = oldval.energy\n    oldval.power  = getPrec(3*oldval.power_1p,1)           -- 3*电压*电流*功率因素\n    oldval.voltage = getPrec(1.732*oldval.voltage_1p,1)    -- 相间电压\n    oldval.energy = getPrec(3*oldval.energy_1p,3) - ic + energyBase     -- 电能 功率对时间积分，和功率成功率线性关系\n    \n    local energyLastReading, lastOk = redis.hget(device.id, 'energyLastReading')\n    if not lastOk then\n        energyLastReading = 0\n    else \n        energyLastReading = tonumber(energyLastReading)\n    end\n    log.debug("CPF_get_energy current oldval.energy:%s", tostring(oldval.energy))\n    log.debug("CPF_get_energy last reading:%s", tostring(energyLastReading))\n    -- 重置，认为重置后归0，没有值微小偏差导致读数变小的情况\n    if (oldval.energy < energyLastReading) then\n        local newEnergyBase = energyLastReading + ic -- 消除 ic 的影响\n        oldval.energy = oldval.energy + newEnergyBase - energyBase  -- + NEW energy base / - old energy base\n        redis.hset(device.id, 'energyBase', tostring(newEnergyBase))\n    end\n    redis.hset(device.id, 'energyLastReading', tostring(oldval.energy))\n  end\n  return oldval\nend\n\nfunction getPrec(nv,prec)\n    fmt=string.format("%%3.%df",prec)\n    return tonumber(string.format(fmt,nv))\nend\n\n--check crc,长度必须>=46(23)\nfunction checkCrc(ack)\n   local crcstr= string.sub(ack,1,46)\n   local crcorig=string.upper(string.sub(ack,-4))\n   local crcchk=iota.appendHexCrc(crcstr,'L',0)\n   crcchk = string.upper(string.sub(crcchk,-4))\n   --log.debug("crc=%s - %s", string.upper(crcorig), string.upper(crcchk))\n   return string.upper(crcorig)==string.upper(crcchk), 'exp:'..crcchk\nend	INLINE	2019-04-28 16:35:30.717+08	2019-05-26 12:12:17.315+08	2019-04-28	\N
3bc46801-ad7c-4787-a81f-8ad9b6e4bdd3	anxin_mop	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start = function()\n local cmd = capability.param\n log.debug("MOP:linkcnt=%s",cmd)\n update_mop(cmd)\n    ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n    log.debug("MOP: update_mop command=%s",command)\n\n\n local tosend = StrtoHex(command)\n local ok, ack = ctx:ssend(tosend, 4000)\n log.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = HextoStr(ack)\n        }\n    }\n log.debug("MOP : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n --判断输入类型\n if (type(hex)~="string") then\n  return nil,"hex2str invalid input type"\n end\n --拼接字符串\n local index=1\n local ret=""\n for index=1,hex:len() do\n     local str = string.format("%02X",hex:sub(index):byte())\n     if str == '0A' or str =='0a' then\n        str = '0d0a'        \n       end \n     if index == hex:len() then\n        str = str..'0d0a'\n       end\n     ret=ret..str\n end\n return ret\nend	INLINE	2019-06-25 17:14:21.844+08	2019-06-25 17:16:39.179+08	2019-06-25	\N
9addbae0-b742-4fa1-9ecd-d5f0ee2b3889	mas_inclino_1503	\N	杆式测斜仪	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 22, endian)             -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n        local scale = 1000000.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \tanglex = xa,\n           \tangley = ya\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1503开始校验数据data=%s',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    local checkDataLen=string.len(data)\n   if checkDataLen <= 7 then\n        errormsg = string.format('长度校验无效,数据=%s',data)\n        errcode = 1002\n        return false\n    end\n  \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1002\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2018-06-25 11:26:42.107+08	2019-06-28 09:19:39.808+08	2018-06-25	\N
bbd0c618-985d-47a7-b844-e4831697168b	iOTA Dev Capability	\N		1.0.0	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start= function()\n  log.debug("mqtt edge device capability start")\n  local topic = "/capability/devices/%s/request"\n  local request = {\n    id = uuid.v4(),\n    payload = json.decode(capability.param)\n  }\n  if request.payload == nil then\n    request.payload = {}\n  end\n  request.payload.deviceId = device.id\n  --[[\n  用于在网关侧来判定是否是相应channel的消息 -- InterfaceType 表中的固定值\n  ]]--\n  if  device.uplink.type == "1" then\n    request.channel = "serial"\n  elseif  device.uplink.type == "12" then\n    request.channel = "mqtt"\n  elseif  device.uplink.type == "2" then\n    request.channel = "zigbee"\n  end\n  request.payload.capabilityId = capability.id\n  local iOTAMQTTMessage = {\n    type = "iota_mqtt",\n    topic = topic,\n    payload = json.encode(request)\n  }\n  local result, response = ctx:ssend(iOTAMQTTMessage)\n  if response == nil or response.payload == nil then\n    ctx.done()\n    return\n  end\n  local payload = json.decode(response.payload)\n  if request.id == payload.id then\n    log.debug("------------- %s ", json.encode(response))\n    ctx:done(json.encode(payload.payload))\n  end\nend\n\nonData= function()\nend	INLINE	2019-07-06 16:50:48.869+08	2019-07-26 16:54:04.819+08	2019-07-06	\N
fd763da6-2130-4510-81c8-d27986779983	KYDM-LP3MR910-GC1500	\N		1.0	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	f	ceb5f5c5-1f6e-4fab-9732-fb8b4652f11c	Lua	--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "KYDM-LP3MR910-GC1500 ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("KYDM-LP3MR910-GC1500 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("KYDM-LP3MR910-GC1500  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x04, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("KYDM-LP3MR910-GC1500  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030004000285ca\n--01030409c49900d202     \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local inta = iota.hexToShort(hex,3,'B')\n\t\tlocal decimals=iota.hexToShort(hex,5,'B')/65535.0\n\t\tlocal length=inta+decimals\n       \n       \n        out.data = {\n\t\t\tlength=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('KYDM-LP3MR910-GC1500  开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('KYDM-LP3MR910-GC1500 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-06-18 10:59:06.956+08	2019-08-05 11:06:53.606+08	2019-06-18	\N
5c2e0c0b-13d0-4c7f-926d-6448f4d9cbb7	anXin_temHum	\N	温湿度 主动上报 标准协议	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t  local temperature = iota.hexToShort(hex,24,'B')/100\n      local humidity = iota.hexToShort(hex, 26,'B')/100\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          humidity=humidity,\n        temperature\t=temperature\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_rain:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_rain [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-23 16:35:51.379+08	2019-12-23 16:49:13.399+08	2019-12-23	\N
d6558744-85f3-42ee-8d1c-07aa74f60036	mas_microPower	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start=function()\n    log.debug("mas_microPower_1 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("mas_microPower_1 : devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("mas_microPower_1 : recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        log.debug("mas_microPower_1 : 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("mas_microPower_1: datfileback: %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            log.debug("mas_microPower_1: 解析dat:r1= %s", r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                log.debug("mas_microPower_1: 接收dat:datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                log.debug("mas_microPower_1: 接收dat:r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power  =iota.hexToByte(data,13,'B')\n            log.debug("mas_microPower_1: 剩余电量: %s", power)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("mas_microPower_1: 版本固件: %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_version", tostring(ver))\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            log.debug("mas_microPower_1 : devices crc =%s",crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n                if crc == r1 then\n                    log.debug("mas_microPower_1 : 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("mas_microPower_1 : 配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("mas_microPower_1 : 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("mas_microPower_1: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("mas_microPower_1 : 设备休眠")\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("mas_microPower_1 powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n                firststart=firststart+datalength\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n                    local rst = {\n                        data={\n                            frequency = iota.hexToFloat(data,firststart+12,'B'),\n                            am = iota.hexToFloat(data,firststart+16,'B'),\n                            temperature = iota.hexToFloat(data,firststart+20,'B')\t\t\t\t\t\n                        },\n                        device=childDevice.id,\n                        type=1,\n                        time=time  \n                    }\n                    table.insert(out.data,rst)\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n                    local protocalCode=iota.hexToShort(data,firststart+6,'B')\n                    if protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\tlog.debug("mas_microPower_1: 测斜: %s", protocalCode)\n            \t\tlog.debug("mas_microPower_1: 测斜: %s, deviceid: %s", module,childDevice.id)\n                        local rst = {\n                            data={\n                                anglex = iota.hexToFloat(data,firststart+12,'B'),\n                                angley = iota.hexToFloat(data,firststart+16,'B'),\n                                temperature = iota.hexToFloat(data,firststart+20,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\t\t\t\t\t\n                        table.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("mas_microPower_1: 测斜: %s",  json.encode(out))\n                    end\n    \n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                length = iota.hexToFloat(data,firststart+12,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n    \n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                temperature = iota.hexToFloat(data,firststart+12,'B'),\n                                humidity = iota.hexToFloat(data,firststart+16,'B') \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n    \n                    if protocalCode==9002  then     --压差\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                physicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n                                frequency = iota.hexToFloat(data,firststart+16,'B'),\n                                temperature = iota.hexToFloat(data,firststart+20,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n            end \n            log.debug("mas_microPower_1: dataresult: %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            log.debug("mas_microPower_1: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("mas_microPower_1 : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("mas_microPower_1 : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.k, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n                local setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n                log.debug("mas_microPower_1 : setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("mas_microPower_1 : deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("mas_microPower_1 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("mas_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("mas_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("mas_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("mas_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("mas_microPower_1 : dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("mas_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("mas_microPower_1 begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        log.debug("mas_microPower_1 finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("mas_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("mas_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("mas_microPower_1 cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("mas_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    log.debug("mas_microPower_1: len: %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("mas_microPower_1: te: %s", te)\n        sum = sum+ tonumber(te)\n    end\n    log.debug("mas_microPower_1: sum: %s", sum)\n   return 0xffff-sum\nend\n\n	INLINE	2019-08-22 14:36:27.994+08	2019-09-04 17:34:11.099+08	2019-08-22	\N
0362b1ec-f7ee-4a7e-b0ec-612320d76bbf	shzr_DAS_RN-MICRO-32	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("start %s, moduleId=%s channel = %s ", "shry_zx",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n        log.debug("shry_zx 根设备 名称 : data is =%s", device.name)\n        log.debug("shry_zx 根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("shry_zx 子设备subdevices=%s : data is =%s", index,json.encode(child))\n      \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("shry_zx 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("shry_zx 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n        \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t           \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n            log.debug("shry_zx 模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian)      \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian)      \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,4000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("shry_zx 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("shry_zx 模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("shry_zx subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlocal resultData =json.encode(out)\n    log.debug("shry_zx  out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("shry_zx:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n    if ErrorCode then     \n \n        \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n        local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("shry_zx:模块%s通道%s的原始值是：freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n        log.debug("shry_zx:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n        \n\t\tlocal Phy=0\n        if subDevice.uplink.capabilities[1].formula.metaid == '2bd2a601-c351-4e47-bbbe-9a787efd6026' then --在iota中查找 --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("shry_zx:振弦模块：公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("shry_zx 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("shry_zx 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n                  \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == '8102b4e7-9f04-43f0-a644-5b89c281f52f' then --在iota中查找\n                 \n                    local R0 = subDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\tlocal G = subDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\tlog.debug("shry_zx:电阻模块：公式48参数=%s,%s",R0,G)\n\t\t\t\t\tlocal A=1.4051*10^(-3)\n\t\t\t\t\tlocal B=2.369*10^(-4)\n\t\t\t\t\tlocal C=1.019*10^(-7)\n\t\t\t\t\tlocal a=1.0/3\n\t\t\t\t\tlocal y=1/(Temp+273.2)-A\n\t\t\t\t\tlog.debug("shry_zx 当前的y是:%s",y)\n\t\t\t\t\tlocal yy=(y/2/C)^2+(B/3/C)^3\n\t\t\t\t\tlog.debug("shry_zx 当前的yy是:%s",yy)\n\t\t\t\t\tlocal yy1=y/2/C+math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("shry_zx 当前的yy1是:%s",yy1)\n\t\t\t\t\tlocal yy2=y/2/C-math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("shry_zx 当前的yy2是:%s",yy2)\n\t\t\t\t\t\n\t\t\t\t\tlocal yyy1=math.pow(yy1,a)\n\t\t\t\t\tlog.debug("shry_zx 当前的yyy1是:%s",yyy)\n\t\t\t\t\tlocal yyy2=0\n\t\t\t\t\tif yy2<0 then\n\t\t\t\t\t\tyyy2=-math.pow(-yy2,a)\n\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tyyy2=math.pow(yy2,a)\n\t\t\t\t\n\t\t\t\t    end\n\t\t\t\t\tlocal yyy=yyy1+yyy2\n\t\t\t\t\tlog.debug("shry_zx 当前的yyy是:%s",yyy)\n\t\t\t\t\tlocal R=math.exp(yyy)-18\n\t\t\t\t\tlog.debug("shry_zx 当前的电阻是:%s",R)\n\t\t\t\t\tif G ==nil or R0==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy =G*(R-R0)\n\t\t\t\t\t\tlog.debug("当前的应变是:%s",Phy)\n\t\t\t\t\tend \n        subData.data={\n\t\t\t\t\tresistance=string.format("%0.2f",R),\n\t\t\t\t\n                  \tphysicalvalue=string.format("%0.2f",Phy)\n\t\t\t\t\t}\t\t\t\t\n\t\tend\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('shry_zx:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 25 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('shry_zx:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('shry_zx:模块%s通道%s 数据校验失败：Hex CMD False：错误码=1003',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('shry_zx:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('shry_zx:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('shry_zx:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend	INLINE	2019-06-24 17:02:04.441+08	2020-08-11 13:45:27.497+08	2019-06-24	\N
ce96b9f4-f3b4-437b-8011-b7bd5166300c	测试协议	\N		1.0	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	start= function()\n  log.debug("lua start")\n  log.debug(iota.hexToInt("01041408CD00F20000012E00000004000001F400370000D902", 11, "B"))\nend\n\nonData=function(data) \n  log.debug("on data")\nend	INLINE	2019-04-26 12:56:57.385+08	2019-05-26 11:51:48.325+08	2019-04-26	\N
d2e64245-7a53-43c4-a9a0-727155de89fe	lefu_inclin_1	\N	测斜，主动上传	1.0	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	f	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	Lua	start=function()\n    log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("anfang_inclinometer_1.lua: Data, ctx=%s",hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000200010cf15b0b9ffe00010002ffffffff4f18eeee\n\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local xData = iota.hexToShort(hex,34,'B')/1000.000;\n        local yData = iota.hexToShort(hex,36,'B')/1000.000;\n        --local zData = iota.hexToShort(hex,38,'B')/1000.000;\n        --local temp = iota.hexToShort(hex,40,'B')/100.000;\n     \n        out.data = {                \n            anglex=xData,\n            angley=yData,\n            --anglez=zData,\n            --temperature=temp\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("anfang_inclinometer_1: cloudvibrate=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'anfang_inclinometer_1:Data is nil'\n        errcode = 1001\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anfang_inclinometer_1:Data length is wrong'\n        errcode = 1001\n        return false\n    end\n  \n   local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=2) then\n        errormsg = string.format('anfang_inclinometer_1:sensorType is wrong=%s',sensorType)\n        errcode = 1001\n        return false\n    end\n    local moduleId= iota.hexToShort(data,26,'B')\n    if (device.uplink.props.module~=tostring(moduleId)) then\n        errormsg = 'anfang_inclinometer_1:module is wrong'\n        errcode = 1001\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_inclinometer_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_inclinometer_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = string.format('anfang_inclinometer_1:crc[%s]≠[%s]',subdatacrc,crc)\n        errcode = 1001\n        return false\n    end\n    \n    return true\n  \nend\n \n	INLINE	2019-05-09 09:50:48.945+08	2019-05-09 09:50:48.945+08	2019-05-09	\N
cc122ffc-2080-4bde-a20b-d8b14c47e413	fs_door_mop	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//04 D:\\SVN\\201903项目\\厕所电动门\\[说明书]USR-IO808-GR_V1.0.3.pdf\nstart = function()\n    local rawParam = capability.param\n    log.debug('fs_door_mop rawParam=%s', rawParam)\n    local params = Split(rawParam, ',')\n    local doorNo = params[1]\n    local doorState = params[2]\n    local msg = changeDoorState(doorNo, doorState)\n\n    out = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = msg\n        }\n    }\n    log.debug('fs_door_mop  responde=%s', msg)\n log.debug('fs_door_mop  result=%s', json.encode(out))\n    ctx:done(json.encode(out))\nend\n\nchangeDoorState = function(DOchannel_door, doorState_input)\n   -- log.debug('fs_door_mop  changeDoorState=(%s,%s)', DOchannel_door, doorState_input)\n    local msg = ''\n    local moduleNo = device.uplink.props.module\n    local ErrorCode = IsParamValid(DOchannel_door, doorState_input)\n    if ErrorCode then\n        --声光提醒10秒\n        local DOchannel_sound = DOchannel_door - 1\n        local isSoundLightOK_open = changeDOSate(moduleNo, DOchannel_sound, 1)\n\n        Sleep(2)\n        --关闭声光报警\n        local isSoundLightOK_close = changeDOSate(moduleNo, DOchannel_sound, 0)\n        Sleep(2)\n        --改变门状态\n        local isDoorOK = changeDOSate(moduleNo, DOchannel_door, tonumber(doorState_input))\n\n        --log.debug('fs_door_mop  cmdResponse=%s,%s,%s', isSoundLightOK_open, isSoundLightOK_close, isDoorOK)\n        if isDoorOK == true then\n            msg = '门状态改变指令已经成功下达'\n        end\n    else\n        msg = errormsg\n    end\n\n    return msg\nend\n\nchangeDOSate = function(deviceModule, DOid, Do_input)\n    --log.debug('fs_door_mop  changeDOSate=(%s,%s,%s)', deviceModule, DOid, Do_input)\n    local buff = ''\n    buff = iota.appendHexByte(buff, deviceModule, endian)\n    local nextState\n    if Do_input == 1 then\n        nextState = 'ff00'\n    else\n        nextState = '0000'\n    end\n    buff = buff .. '0500'\n    buff = iota.appendHexByte(buff, DOid, 'L')\n    buff = buff .. nextState\n    buff = iota.appendHexCrc(buff, 'L', 0)\n    local ok, ack = ctx:ssend(buff, 5000)\n\n    local checkBuff=string.lower(buff)\n    if ack == checkBuff then\n        --log.debug('fs_door_mop  ack[%s] == buff[%s])', ack, checkBuff)\n        return true\n    else\n       --log.debug('fs_door_mop  ack[%s] ≠ buff[%s])', ack, checkBuff)\n        return false\n    end\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\n\nIsParamValid = function(paramA, paramB)\n    if paramA == nil or paramA == nil then\n        errormsg = string.format('无效的参数格式，请检查')\n        return false\n    end\n\n    local paramA_num = tonumber(paramA)\n    local paramB_num = tonumber(paramB)\n    if paramA_num == nil or paramB_num == nil then\n        errormsg = string.format('无效的参数格式，请检查')\n        return false\n    end\n\n    local isOu = IsOuNumber(paramA_num)\n    if isOu == true then\n        errormsg = string.format('门通道号必须是奇数，请检查')\n        return false\n    end\n\n    if paramA_num > 8 then\n        errormsg = string.format('门通道号必须小于8，请检查')\n        return false\n    end\n\n    if paramB_num ~= 0 and paramB_num ~= 1 then\n        errormsg = string.format('门通道状态必须是 0 或 1，请检查')\n        return false\n    end\n    return true\nend\n\n--是否是偶数\nfunction IsOuNumber(num)\n    local num1, num2 = math.modf(num / 2)\n    --返回整数和小数部分\n    if (num2 == 0) then\n        return true\n    else\n        return false\n    end\nend\n---------------------\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2019-03-22 15:59:11.594+08	2019-05-27 19:20:28.758+08	2019-03-22	\N
c6ff5a63-12be-4695-87d7-bad84d211561	shjy_incline_1	\N	倾角asic	1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_incline_1",device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t    --6804000408\n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n        log.debug("shjy_incline_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, 0x68, endian) \n        buff=iota.appendHexByte(buff, 0x04, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n         buff=iota.appendHexByte(buff,CS(1,buff),endian)   \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_incline_1 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--68 0D 00 84 00 20 10 10 05 25 00 00 00 FB\n\n--moduleId=1   \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        local signx = tonumber(string.sub(hex,9,9))\n        \n        local anglex = tonumber(string.sub(hex,10,14))/100\n        local signy = tonumber(string.sub(hex,15,15))\n        local angley = tonumber(string.sub(hex,16,20))/100\n        if signx==1 then\n            anglex=anglex*-1\n        end\n        if signy==1 then\n            angley=angley*-1\n        end\n       \n        out.data = {\n            anglex=anglex,\n            angley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_incline_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 14 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_incline_1 数据校验通过')\n    return true\n--crc\nend\n\n--校验和8\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n\n\t\n   \n\n	INLINE	2018-06-27 13:49:25.531+08	2019-05-29 17:41:46.503+08	2018-06-27	\N
f2c0be9e-1cf8-425f-befd-5cff3fac6fb1	shjy_BK_Q01B	\N		1	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_BK_Q01B",device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t    --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n        log.debug("shjy_BK_Q01B 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, 0x68, endian) \n        buff=iota.appendHexByte(buff, 0x04, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n         buff=iota.appendHexByte(buff,CS(1,buff),endian)   \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_BK_Q01B SSend error!")\n        end\n        ctx:done(result)\nend\n\n--68 10 00 84 00 14 03 02 00 05 02 36 00 00 00 00 ea\n\n--68 10 00 84     0    0 14 03 02      0  0 05 02 36    00 00 00 00 ea\n\n--moduleId=1   \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        local signx = tonumber(string.sub(hex,9,9))\n        \n        local anglex = tonumber(string.sub(hex,10,16))/10000\n        local signy = tonumber(string.sub(hex,17,17))\n        local angley = tonumber(string.sub(hex,18,24))/10000\n        if signx==1 then\n            anglex=anglex*-1\n        end\n        if signy==1 then\n            angley=angley*-1\n        end\n       \n        out.data = {\n            anglex=anglex,\n            angley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_BK_Q01B 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_BK_Q01B 数据校验通过')\n    return true\n--crc\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n\n\t\n   \n\n	INLINE	2019-05-29 18:08:22.812+08	2019-05-30 17:08:35.569+08	2019-05-29	\N
103b5fb6-4f69-4647-a725-61dcaa938a17	httpNewXL	\N	卸料平台	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('httpNewXL   LUA http server start')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('httpNewXL [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    --local id = httpbody.ID\n    --log.debug('httpNewXL  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    local bodydata = json.decode(bodydataStr)\n    local hxzId = bodydata.HxzId\n    local serverIP = '218.3.126.49'\n    local port = '19700'\n    local serverTime = getTimeNowStr()\n    local url = httpbody.URL\n    log.debug('httpNewXL [%s] url=%s type=%s', moduleNo, url, type(url))\n    local urlsperts = Split(url, '/')\n    local len_urlsperts = table_leng(urlsperts)\n    local type_long = urlsperts[len_urlsperts]\n    local cmd_types = Split(type_long, '?')\n    local cmd_type = cmd_types[1]\n    log.debug('httpNewXL [%s] cmd_type=%s', moduleNo, cmd_type)\n    if cmd_type == 'LoginDataUnloadingPlatform' then\n        local response_LoginData_bodyStr = string.format('{"cmd":"LoginDataUnloadingPlatform","data":{"RangeSetError":"0","NoWorkInterval":60,"WindSpeedSetError":"0","WorkInterval":20,"GpsSetError":"0","ServerIp":"%s","HxzId":"%s","WeightSetError":"0","ServerTime":"%s","HxzFactory":"DEYE","ErrorDelay":90,"HeartBeatInterval":15,"LeaseFlag":"0","LockFlag":"0","IdSetError":"0","RecordId":"63098da082984bd499217f2c980064ad","HeightSetError":"0","AngleSetError":"0","ObliguitySetError":"0","ServerPort":%s},"status":0}', serverIP, hxzId, serverTime, port)\n        asend_HttpResponse(response_LoginData_bodyStr)\n    elseif cmd_type == 'BaseDataUnloadingPlatform' then\n        local response_BaseData_bodyStr = '{"cmd":"BaseDataUnloadingPlatform","data":{},"status":0}'\n        asend_HttpResponse(response_BaseData_bodyStr)\n    elseif cmd_type == 'RealtimeDataUnloadingPlatform' then --实时数据\n        local response_RealtimeDataCrane_bodyStr = '{"cmd":"RealtimeDataUnloadingPlatform","data":{},"status":0}'\n        asend_HttpResponse(response_RealtimeDataCrane_bodyStr)\n        --获取实时数据\n        local RTime = bodydata.RTime --单次工作完成时刻\n        local Weight = bodydata.Weight\n        local WeightPercent = bodydata.WeightPercent\n        local ObliguityX = bodydata.ObliguityX\n        local ObliguityY = bodydata.ObliguityY\n        local WeightStatus = bodydata.WeightStatus\n        local ObliguityXStatus = bodydata.ObliguityXStatus\n        local ObliguityYStatus = bodydata.ObliguityYStatus\n        local Obliguity= bodydata.Obliguity\n        out.data = {\n            Weight = tonumber(Weight)*1000,\n            WeightPercent = tonumber(WeightPercent),\n            ObliguityX = tonumber(ObliguityX),\n            ObliguityY = tonumber(ObliguityY),\n            WeightStatus = tonumber(WeightStatus),\n            ObliguityXStatus = tonumber(ObliguityXStatus),\n            ObliguityYStatus = tonumber(ObliguityYStatus),\n            Obliguity= tonumber(Obliguity)\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'GpsData' then\n        local response_GpsData_bodyStr = '{"cmd":"GpsData","data":{},"status":0}'\n        asend_HttpResponse(response_GpsData_bodyStr)\n    elseif cmd_type == 'RuntimeData' then\n        local response_RuntimeData_bodyStr = '{"cmd":"RuntimeData","data":{},"status":0}'\n        asend_HttpResponse(response_RuntimeData_bodyStr)\n        local isOnline = 0\n        local isDownline = 0\n        local RTime = ''\n        local DownlineTime = bodydata.DownlineTime\n        local OnlineTime = bodydata.OnlineTime\n        log.debug('httpNewXL [%s] DownlineTime=%s,OnlineTime=%s', moduleNo, DownlineTime, OnlineTime)\n        if DownlineTime ~= '' then\n            isDownline = 1\n            RTime = DownlineTime\n        else\n            isOnline = 1\n            RTime = OnlineTime\n        end\n        out.data = {\n            isDownline = isDownline,\n            isOnline = isOnline\n        }\n        out.time = unixtimestamp(RTime, moduleNo)\n\n        log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'AlarmDataUnloadingPlatform' then\n        local response_AlarmData_bodyStr = '{"cmd":"AlarmDataUnloadingPlatform","data":{},"status":0}'\n        asend_HttpResponse(response_AlarmData_bodyStr)\n\n        local alarmType = bodydata.AlarmType\n        local alarmStartTime = bodydata.StartTime\n        local alarmEndTime = bodydata.EndTime\n        log.debug('httpNewXL [%s] alarmType=%s,alarmStartTime=%s,alarmEndTime=%s', moduleNo, alarmStartTime, alarmEndTime)\n        if alarmStartTime ~= '' then\n            out.time = unixtimestamp(alarmStartTime, moduleNo)\n        end\n        out.data = {\n            AlarmType = alarmType\n        }\n        log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    elseif cmd_type == 'AlarmStartUnloadingPlatform' then\n        local response_AlarmData_bodyStr = '{"cmd":"AlarmStartUnloadingPlatform","data":{},"status":0}'\n        asend_HttpResponse(response_AlarmData_bodyStr)\n\n        local alarmType = bodydata.AlarmType\n        local alarmStartTime = bodydata.StartTime\n        local alarmValue = bodydata.AlarmValue\n        log.debug('httpNewXL [%s] alarmType=%s,alarmStartTime=%s,alarmValue=%s', moduleNo, alarmStartTime, alarmValue)\n        if alarmStartTime ~= '' then\n            out.time = unixtimestamp(alarmStartTime, moduleNo)\n        end\n        out.data = {\n            AlarmType = alarmType,\n            AlarmValue=alarmValue\n        }\n        log.debug('httpNewXL [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\n    end\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('httpNewXL [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n	INLINE	2019-05-29 14:49:17.37+08	2019-06-03 09:24:31.772+08	2019-05-29	\N
8a773405-5a90-4499-8157-5de3276b5744	jclq_temp_ACA626T-3	\N	转移到设备实际厂家目录下，原在聚创目录下	1.0	85ba98a3-b552-4bcf-a736-30b525492481	85ba98a3-b552-4bcf-a736-30b525492481	f	85ba98a3-b552-4bcf-a736-30b525492481	Lua	bit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\n\nstart=function()\n    log.debug("start %s, ctx=", "jclq_temp_ACA626T-3.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x68, endian)\n    buff=iota.appendHexByte(buff, 4, endian)      \n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("jclq_temp_ACA626T-3 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  -- 1: 模块号             \n    buff=iota.appendHexByte(buff, 4, endian)              -- 2: 指令: 0x04 = 采集\n    buff=iota.appendHexByte(buff,CS(1,buff),endian)\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,20000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo) \n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n\n    --680D0084002010000000050500CB    moduleId=0\n    --"angleX": 2.01,\n\t--"angleY": 0,\n\t--"temp": 50.5\n\n    log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==28) then  \n\n        local IDX_XDATA = 4    \n        local IDX_YDATA = 7        \n        local IDX_Temp = 10  \n\n        local xFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0xF0) , 4)\n        local xSecondNum = bit:_and(iota.hexToByte(hex,IDX_XDATA,'B') , 0x0f) * 10\n        local xThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_XDATA + 1,'B') , 0x0F) * 0.1\n        local xForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_XDATA + 2,'B') , 0x0F) * 0.001\n\n        local yFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0xF0) , 4)\n        local ySecondNum = bit:_and(iota.hexToByte(hex,IDX_YDATA,'B') , 0x0f) * 10\n        local yThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_YDATA + 1,'B') , 0x0F) * 0.1\n        local yForthNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_YDATA + 2,'B') , 0x0F) * 0.001\n\n        local tFirst = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0xF0) , 4)\n        local tSecondNum = bit:_and(iota.hexToByte(hex,IDX_Temp,'B') , 0x0f) * 10\n        local tThirdNum = bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0xF0) , 4) + bit:_and(iota.hexToByte(hex,IDX_Temp + 1,'B') , 0x0F) * 0.1\n        local tForthNum =bit:_rshift(bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0xF0) , 4) * 0.01 + bit:_and(iota.hexToByte(hex,IDX_Temp + 2,'B') , 0x0F) * 0.001\n\n        local angleX = xSecondNum + xThirdNum + xForthNum\n        local angleY = ySecondNum + yThirdNum + yForthNum\n        local temp = tSecondNum + tThirdNum + tForthNum\n\n        if (xFirst == 0x01) then    \n            angleX = -angleX\n        end\n\n        if (yFirst == 0x01) then\n            angleY = -angleY\n        end\n\n        if (tFirst == 0x01) then\n            temp = -temp\n        end\n       \n       \n        out.data = {\n           anglex=angleX,\n           angley=angleY,\n           temperature=temp\n        }\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("recv %s, ctx=%s", "jclq_temp_ACA626T-3.lua",json.encode(out))\n    return json.encode(out)\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n \n\n\n \n\n	INLINE	2019-05-30 10:13:46.237+08	2019-05-30 10:13:46.237+08	2019-05-30	\N
52e623de-58b8-4c3d-a50a-5264735bda7b	GPRS-Design	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("Design: start module %s", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("Design: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\t\n    local sData= toStrHex(hex)\n    log.debug("Design: sData=%s",sData)\n    local spliteData = Split(sData,',')\n\tlocal ok = tostring(spliteData[5]) --是否为有效数据\n\tlocal cmd = tostring(spliteData[3])\n\t\n\tif ok == "A" then\t\t\n\t\tlocal modulestr = tostring(spliteData[2]) --模块号\n\t\tlocal datetime = tostring(spliteData[4]) --时间\n\t\tlocal hour = tonumber(string.sub(datetime,1,2))\n\t\tlocal minute = tonumber(string.sub(datetime,3,4))\n\t\tlocal second = tonumber(string.sub(datetime,5,6))\n\t\tlocal date = tostring(spliteData[12]) --年月日\n\t\tlocal year = 2000 + tonumber(string.sub(date,5,6))\n\t\tlocal month = tonumber(string.sub(date,3,4))\n\t\tlocal day = tonumber(string.sub(date,1,2))\n\t\tlocal NSsign = tostring(spliteData[7]) --N/S \n\t\tlocal latitude = tonumber(string.sub(spliteData[6],1,2)) --纬度 \n\t\tlocal latdata = tonumber(string.sub(spliteData[6],3,-1))/60\n\t\tlatitude = latitude + latdata\n\t\tlocal EWsign = tostring(spliteData[9]) --E/W \n\t\tlocal longitude = tonumber(string.sub(spliteData[8],1,3)) --经度\n\t\tlocal londata = tonumber(string.sub(spliteData[8],4,-1))/60\n\t\tlongitude = longitude + londata\n\t\tlog.debug("Design: module=%s，Time=%s",modulestr,datetime)\n\t\tlocal speed = 0\n\t\tif spliteData[10] == "" then \n\t\t\tspeed =tonumber(spliteData[10]) --速度\n\t\tend\n\t\tlocal direction = spliteData[11]\n\t\tif longitude == 0 or latitude == 0 then\n      \t\tout.result = {code=1011,msg="无效数据"} \n      \telse\n          out.data.longitude = longitude\n          out.data.latitude = latitude\n          out.data.speed = speed\n      \tend\n\telse \t\t\n\t\tout.result = {code=1011,msg="无效数据"} \n\tend\n\n\n    local resultData =json.encode(out)\n    log.debug("Design: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\nlocal len = string.len(str);\nlocal hex='';\nfor i =1,len do\n  local bi = string.byte(str, i);\n  hex=hex..string.format("%02X",bi);\nend\nreturn hex;\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2019-05-09 13:52:59.415+08	2019-05-31 11:04:22.203+08	2019-05-09	\N
83ea3d9a-afdf-4200-a973-6f613946df5b	JCLQ_T4	\N	返回的新数据结构解析	1.0	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	f	a8df2f4a-3e2f-49f5-b1e2-b866493ade49	Lua	start = function()\n    log.debug('JCLQ_T4 start moudleid=%s', device.props.pointId or 'nil')\n    local req = {\n        type = 'http',\n        url = '', --https://api.yespowering.cn/login/\n        method = 'post',\n        header = {}\n    }\n\n    req.url = device.props.tokenUrl\n    log.debug('JCLQ_T4:  url=%s', req.url)\n    log.debug('设备原型=' .. json.encode(device))\n    req.header['agent'] = '0'\n    req.header['language'] = 'zh'\n    req.header['brandid'] = '38'\n    req.ContentType = 'application/json'\n\n    local param = {\n        account = device.props.account,\n        pw = device.props.pw\n    }\n    req.body = json.encode(param)\n    log.debug('JCLQ_T4:param=' .. json.encode(param))\n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('JCLQ_T4:  ok=%s', ok)\n    else\n        log.debug('JCLQ_T4:  ok=%s,token=%s', ok, ack.body)\n    end\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    if not ok or ack == nil then\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            local dataTable = json.decode(ack.body)\n            local token = dataTable.data.userinfo.token\n            log.debug('JCLQ_T4:  token=%s ', token)\n            log.debug('JCLQ_T4 ack=%s', ack.body)\n\n            Sleep(1)\n            --请求数据\n            local datareq = {\n                type = 'http',\n                url = '', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005\n                method = 'get',\n                header = {}\n            }\n            local boxId = device.props.boxId\n            datareq.url = device.props.dataUrl .. '?box_id=' .. string.upper(boxId)\n            log.debug('JCLQ_T4:  data url=%s', datareq.url)\n            --log.debug("设备原型="..json.encode(device))\n            datareq.header['agent'] = '0'\n            datareq.header['language'] = 'zh'\n            datareq.header['brandid'] = '38'\n            datareq.header['token'] = token\n            datareq.ContentType = 'application/json'\n\n            --get发送\n            local dataok, dataack = ctx:ssend(datareq, 4000)\n\n            if not dataok or dataack == nil then\n                out.result = {\n                    code = 1002,\n                    msg = 'timeout'\n                }\n            else --OK\n                if dataack.code == 200 and dataack.body ~= '' then -- http应答\n                    alldataTable = json.decode(dataack.body) -- 有数据\n                    local instant_data = alldataTable.data.instant_data\n                    local model = alldataTable.data.protocol --获取云盒类型 通过协议判断\n\n                    local r1, r1ok = redis.get(device.id .. '_endTime') --获取上次记录时间\n                    log.debug('JCLQ_T4 r1=%s,r1ok=%s', r1, r1ok)\n                    if r1ok and r1 ~= nil then\n                        beginTime = r1\n                        log.debug('JCLQ_T4 r1=%s,r1ok=%s,beginTime=%s', r1, r1ok, beginTime)\n                    else\n                        beginTime = os.time()\n                         --第一次默认当前时间\n                        redis.set(device.id .. '_endTime', tostring(beginTime))\n                        log.debug('JCLQ_T4 r1=%s,r1ok=%s', r1, r1ok)\n                    end\n                    local endTime\n                    for k, v in ipairs(instant_data) do\n                        log.debug('JCLQ_T4 k=%s, value=%s', k, json.encode(v))\n                        local moduleNo = v.order_id\n                        local timeStr = v.datetime\n                        --获取通道设备deviceId\n                        local childDevice = getDeviceInfo(moduleNo, 1)\n                        --\n                        if childDevice ~= nil then\n                            local timess = alldataTable.data.instant_data[k].datetime\n                            local timenow = unixtimestamp(timess)\n\n                            endTime = timenum\n                            log.debug('JCLQ_T4  beginTime=%s,endTime=%s', beginTime, endTime)\n                            if endTime <= tonumber(beginTime) then\n                                log.debug('JCLQ_T4  数据未刷新beginTime=%s,endTime=%s', beginTime, endTime)\n                                break\n                            else\n                                log.debug('JCLQ_T4  数据刷新beginTime=%s,endTime=%s', beginTime, endTime)\n                            end\n\n                            if model == 'P002-D022-B0078-S001' then\n                                local anglex = tonumber(alldataTable.data.instant_data[k].anglex)\n                                local angley = tonumber(alldataTable.data.instant_data[k].angley)\n                                local temp = tonumber(alldataTable.data.instant_data[k].temp)\n\n                                log.debug('JCLQ_T4  type(timess)=%s ,unixtimestamp(timess)=%s', type(timess), unixtimestamp(timess))\n                                --time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n                                local data1 = {\n                                    data = {\n                                        anglex = anglex,\n                                        angley = angley,\n                                        temperature = temp\n                                    },\n                                    device = childDevice.id,\n                                    time = timenow,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                            end\n\n                            log.debug('JCLQ_T4  moudleid=%s data:%s', device.props.pointId, json.encode(out))\n                        end\n                    end\n                    --更新endTime\n                    if endTime > tonumber(beginTime) then\n                        if redis.set(device.id .. '_endTime', tostring(endTime)) then\n                            log.debug('JCLQ_T4 redis更新 set lasttime ok  key=%s,value=%s', device.id .. '_endTime', tostring(endTime))\n                        end\n                    else\n                        log.debug('JCLQ_T4 redis不更新 ')\n                    end\n                else\n                    log.debug('JCLQ2018:  request data error:%s body:%s', ack.code, ack.body)\n                end\n            end\n        else\n            log.debug('JCLQ_T4:  request data error:%s body:%s', ack.code, ack.body)\n        end\n    end\n    ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("JCLQ_T4 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("JCLQ_T4:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n\n            moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck = child.uplink.props.channel\n            log.debug('JCLQ_T4 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n                log.debug('JCLQ_T4:  m=%s  匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('JCLQ_T4:  subdevices是nil')\n        return nil\n    end\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp = function(datestr)\n    -- 2018-4-28 16:10:12\n    log.debug('JCLQ_T4 datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    log.debug('JCLQ_T4 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    log.debug('JCLQ_T4 timenum=%s', timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('JCLQ_T4 recordTime=%s', recordTime)\n    return recordTime\nend\n	INLINE	2019-05-30 10:59:03.532+08	2019-05-31 11:26:11.07+08	2019-05-30	\N
83f5296c-98a1-4222-a8eb-8e65d7e459cf	mas_1101	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n  log.debug("mas_1101:load script %s, moduleId=%s", "mas_1101", device.moduleId or "[nil]")\n  \n  \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("mas_1101 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("mas_1101 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("mas_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("mas_1101:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 2 设备类型，温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE);  -- 2: 3/4 模块号\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 7 指令\n\tfor i = 8,30 do                                 -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n  \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc          -- 1: 31 CRC8  加总异或，2-30\n  --log.debug('mas_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF);             -- 1: 32 结尾\n\t--log.debug("mas_1101:start %s, ctx=%s ", "mas_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("mas_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n        log.debug("mas_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n    log.debug("mas_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n    log.debug("mas_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum,\n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('mas_1101:开始校验数据%s',data)\n    local startbyte = iota.hexToByte(data,0,'B');\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n  \tlocal endbyte = iota.hexToByte(data,31,'B');\n    if data == nil or string.len(data)/2 ~= 32 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte  ~= 0xDF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('mas_1101:数据校验通过')\n    return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n    local CRC8Table ={\n            0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n            157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n            35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n            190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n            70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n            219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n            101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n            248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n            140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n            17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n            175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n            50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n            202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n            87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n            233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n            116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n        }\n    local c = 0\n    for  i = start, string.len(val)/2 do\n        local b = iota.hexToByte(val,i-1,'B')\n        local index = bit:_xor(c,b)\n        c = CRC8Table[index+1];\n    end\n    local crc8 = string.format("%X",c)\n    return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n\n	INLINE	2019-06-21 13:56:57.004+08	2019-06-21 13:56:57.004+08	2019-06-21	\N
e32a4670-d2d9-4e72-bfab-ca042c491f7d	shjy_DAS_BK-ZC08w	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('BK-ZC08w loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('BK-ZC08w device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('BK-ZC08w设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('BK-ZC08w设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    buff = buff .. 'F7601269'\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '4010000102030405060708090A0B0C0D0E0F'\n    --1:指令:采集\n    local wCRCin = 0x0000\n    local wCPoly = 0x1021\n    local wChar = 0\n    local usDataLen = string.len(buff) / 2\n    log.debug('BK-ZC08w usDataLen = %s', usDataLen)\n    local var = 0\n    while usDataLen > 0 do\n        var = var + 1\n        wChar = string.sub(buff, var, var + 1)\n        var = var + 1\n        wChar = tonumber(wChar, 16)\n        wChar = bit.lshift(wChar, 8) --左移\n        wCRCin = bit.bxor(wCRCin, wChar)\n        for i = 0, 7 do\n            local value = bit.band(wCRCin, 0x8000)\n            if value > 0 then\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            else\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            end\n        end\n        --log.debug("BK-ZC08w END wCRCin = %X",wCRCin)\n        usDataLen = usDataLen - 1\n    end\n    buff = buff .. string.format('%04X', wCRCin)\n    log.debug('BK-ZC08w END buff = %s', buff)\n    --ctx:asend(buff)\n    --ctx:sleep(10)\n\t--ctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('BK-ZC08w 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('BK-ZC08w child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('BK-ZC08w    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \tend\n            end\n        end\n    else\n        log.debug('BK-ZC08w 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('BK-ZC08w ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('BK-ZC08w  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 15, -5)\n    local dataCount = string.len(subDataArea) / 10\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)+1\n        local subData = string.sub(singleChannelDataHex, 3, -1)\n        DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n    \tlog.debug('BK-ZC08w  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('BK-ZC08w datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[subChannelId+8]\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n            local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n\n            log.debug('BK-ZC08w module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n        log.debug('BK-ZC08w freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                rawValue = tonumber(string.format('%0.2f',freq)),\n                physicalvalue = tonumber(string.format('%0.2f',Phy))\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('BK-ZC08w has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('BK-ZC08w has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('BK-ZC08w 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xF7 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('BK-ZC08w HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2019-06-03 10:53:04.598+08	2020-08-16 11:25:07.189+08	2019-06-03	\N
5695aa0b-5148-4985-9d9c-bffa36a39edc	anxin_DAS	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load  yx_1401 moudle = %s ",device.uplink.props.module)\n    log.debug("anxin_DAS alldevice = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tlog.debug("anxin_DAS  subdevices=%s,",json.encode(subdevices))\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("anxin_DAS 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("anxin_DAS 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n\t\t   -- local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexWord(buff, 10, endian)                   ---2： 传感器类型\n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x01, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x67, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t--log.debug("anxin_DAS module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\t\t--log.debug("anxin_DAS out=%s ",json.encode(out))\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("anxin_DAS module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n\t\t\t--log.debug('anxin_DAS  111111')\n        end      \n\t\t--log.debug('anxin_DAS  22222')\n   \n    end\n    ctx:done(json.encode(out))\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\nlog.debug("anxin_DAS subDevice=%s",json.encode(subDevice))\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("anxin_DAS module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('anxin_DAS ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        --log.debug("anxin_DAS module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n\t\t--for index,child in pairs(subDevice.uplink.capabilities) do \n       --if child.capabilityMetaId == "97be25b3-75df-4137-a479-22343213fe74" then --振弦公式\n\t\t\t\tlocal k = tonumber(subDevice.uplink.capabilities[1].formula.props.K )\n\t\t\t\tlocal kt = tonumber(subDevice.uplink.capabilities[1].formula.props.Kt )\n\t\t\t\tlocal f0 = tonumber(subDevice.uplink.capabilities[1].formula.props.Fo )\n\t\t\t\tlocal t0 = tonumber(subDevice.uplink.capabilities[1].formula.props.To)\n    local B = tonumber(subDevice.uplink.capabilities[1].formula.props.B)\n                log.debug("anxin_DAS module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)+B\n\t\t\t\t\tlog.debug("anxin_DAS channel=%s,Phy=%s",subChannelId,Phy)\n\t\t\t\tend\n\t\t--end\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\t\t\t\t\tlog.debug("anxin_DAS subData=%s",json.encode(subData)) \n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('anxin_DAS : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('anxin_DAS : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('anxin_DAS : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('anxin_DAS : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2019-06-05 10:52:24.824+08	2020-09-15 09:22:06.749+08	2019-06-05	\N
2c405e11-e6dd-407b-b5db-edb86696ce83	fs_lux_log	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug("fs_lux_log:device=%s",json.encode(device))\n    log.debug("fs_lux_log:subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    log.debug("fs_lux_log:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop_log = {\n        M = "c_shell",\n        P = {} -- Get Log\n    }\n\tmop_log.P.C = "cp /media/mmcblk0p1/lux.txt /media/mmcblk0p1/data/lux.txt"\n\t\n\n    req.payload = json.encode(mop_log)\n    log.debug("fs_lux_log:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("fs_lux_log:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n	INLINE	2019-09-24 11:47:38.263+08	2019-09-24 11:48:54.429+08	2019-09-24	\N
2d247587-8e44-41f5-b585-772822f1841e	Mop_DownLoad	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n\tlocal cmd = capability.param\n\tlog.debug("MOP:linkcnt=%s",cmd)\n\tupdate_mop(cmd)\n    ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n    log.debug("MOP: update_mop command=%s",command)\n\n    local mop_sensor = {\n        M = "c_shell",\n        P = {\n\t\t\tC = ""\n\t\t}\n    }\n\tmop_sensor.P.C = command\n\tmop_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("MOP:requestsensor=%s", json.encode(mop_sensor))\n\tlocal ok, ack = ctx:ssend(mop_sensor, 4000)\n\tlog.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("MOP : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend	INLINE	2019-02-21 17:14:14.198+08	2019-09-24 09:58:54.511+08	2019-02-21	\N
4bac8d93-5575-46f9-bf3a-ef0d3240ffc0	CPF_get_door_stat	\N		V1	a0524b8e-f69f-421e-b306-124dd37f4f1c	a0524b8e-f69f-421e-b306-124dd37f4f1c	f	a0524b8e-f69f-421e-b306-124dd37f4f1c	Lua	start=function()\n  local address="1A18110519"\n  local cmd="8686860F"\n  local ok,ack=ctx:ssend(address..cmd,3000)\n  local channel=tonumber(device.props.channel) or 1\n  local doors=tonumber(device.props.doors) or 1\n  if channel <1 then channel=1 end\n  if channel >8 then channel = 8 end\n  if doors <1 then doors=1 end\n  if doors >8 then doors = 8 end\n  if doors> 8-channel+1 then doors=8-channel+1 end\n  --log.debug("channel=%d, doors=%d",channel,doors)\n  local result={\n    type=1\n  }\n  if ok and ack~=nil and string.len(ack) == 44 then\n    -- address+ 0001*8 +0F\n    -- 1A18110519010100020003000400050006000700080F\n    local p1,dn\n    result.data={}\n    for di=1,doors do\n      p1 = 5+ (channel-1 + di-1)\n      local dis=iota.hexToByte(ack,p1,'B')\n      --log.debug("door[%d] = %d", di, dis)\n      dn=string.format("status_d%d",di)\n      result.data[dn] = (dis==0 and "1" or "0")\n    end\n  else\n    result.result={\n      code=1001,\n      msg="Invalid ack:"..ack\n    }\n  end\n  ctx:done(json.encode(result))\nend	INLINE	2019-05-09 14:01:39.63+08	2019-05-09 15:29:12.088+08	2019-05-09	\N
c3873468-2682-4721-9ed3-96219d02c017	lefu_settlement_2	\N	位移	1.0	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	f	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	Lua	start=function()\n    log.debug("anfang_inclinometer_1.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anfang_settlement_1 [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local length = iota.hexToInt(hex,34,'B')/1000.0000\n     \n        out.data = {                \n            length=length\n        }\n        local resultData =json.encode(out)\n        log.debug("anfang_settlement_1 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anfang_settlement_1:Data is nil'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+34)) then\n        errormsg = 'anfang_settlement_1:Data length is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataModule= iota.hexToShort(data,26,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=5) then\n        errormsg = 'anfang_settlement_1:sensorType is wrong'\n        errcode = 1001\n        log.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("anfang_settlement_1.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("anfang_settlement_1.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = 'anfang_settlement_1:crc is wrong'\n        errcode = 1001\n    \tlog.debug("anfang_settlement_1 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    log.debug("anfang_settlement_1 [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \n	INLINE	2019-05-09 16:48:32.266+08	2019-05-09 16:48:32.266+08	2019-05-09	\N
aa079e43-4dfe-40f0-81f7-03b3d30d9082	xaxh_inclinometer_1	\N	西安兴航测控科技有限公司\n	1.0	c418cbf6-8903-45be-a0da-bcccfeda9ac0	c418cbf6-8903-45be-a0da-bcccfeda9ac0	f	c418cbf6-8903-45be-a0da-bcccfeda9ac0	Lua	start=function()\n    --log.debug("start %s, moduleId=%s", "xaxh_inclinometer_1.lua",device.props.moduleId or "null")\n    local endian = 'B'\n    local buff=''\n  \tlocal moduleNo\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) \n\telse\n\t\tmoduleNo=device.props.moduleId\n\tend\n    buff=iota.appendHexByte(buff, moduleNo, endian)         \n    buff=iota.appendHexByte(buff, 3, endian)                   \n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)\n    buff=iota.appendHexByte(buff, 0, endian)                     \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                   \n\n    log.debug("xaxh_inclinometer_1 m=%s ssend= [%s] ", moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("xaxh_inclinometer_1 m=%s recved= [%s] ", moduleNoStr,hex)\n    --0c03080000000000000000ae7b\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local signX=1\n            if tonumber(string.sub(hex, 7,7),16)==1 then\n                signX=-1\n            else\n                signX=1\n            end\n        local signY=1\n            if tonumber(string.sub(hex, 15,15),16)==1 then\n                signY=-1\n            else\n                signY=1\n            end    \n        local xDegree=signX*((tonumber(string.sub(hex, 8,8),16)*100)+(tonumber(string.sub(hex, 9,9),16)*16+tonumber(string.sub(hex, 10,10),16))+(tonumber(string.sub(hex, 11,11),16)*16+tonumber(string.sub(hex, 12,12),16))/100+(tonumber(string.sub(hex, 13,13),16)*16+tonumber(string.sub(hex, 14,14),16))/10000)\n        local yDegree=signY*((tonumber(string.sub(hex, 16,16),16)*100)+(tonumber(string.sub(hex, 17,17),16)*16+tonumber(string.sub(hex, 18,18),16))+(tonumber(string.sub(hex, 19,19),16)*16+tonumber(string.sub(hex, 20,20),16))/100+(tonumber(string.sub(hex, 21,21),16)*16+tonumber(string.sub(hex, 22,22),16))/10000)\n        out.data = {\n            xDegree=xDegree,\n            yDegree=yDegree\n        }\n    else\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    log.debug("xaxh_inclinometer_1  m=%s  data: %s",moduleNoStr,json.encode(out.data))\n    return json.encode(out)\nend\n\n\nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend	INLINE	2017-11-21 11:40:56.318+08	2019-07-29 16:33:11.548+08	2017-11-21	\N
a99f3fb6-8165-411c-a072-0615cbffe55b	lrk_DL630A	\N		1.0	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	f	bfe504c8-b84a-43ec-831a-5ce698db9950	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("lrk_DL630A: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("lrk_DL630A: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\n    local sData= toStrHex(hex)\n    log.debug("lrk_DL630A: sData=%s",sData)\n    local spliteData = Split(sData,'START;')\n\tlocal deviceData = Split(spliteData[2],';')\n  \n\t\n\tlocal module = tonumber(deviceData[2]) --模块号\n\tlog.debug("lrk_DL630A: deviceData=%s",module)\n\tlocal xData = Split(deviceData[1],':')\n\tlocal xlength=tonumber(xData[2])\n\tlocal yData = Split(deviceData[2],':')\n\tlocal ylength=tonumber(yData[2])\n\t\n\tout.data={\n\txlength=xlength,\n\tylength=ylength\n\t}\n\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("lrk_DL630A: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal start=device.props.start\n\tlocal cmd ='$LRKKJ$;JGND_SETTIME:' .. start .. ';END'\n\tlog.debug("lrk_DL630A: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)    \n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\n	INLINE	2019-11-14 14:05:23.77+08	2019-11-26 15:03:42.672+08	2019-11-14	\N
3e489442-5b15-42ec-aa03-4a88c4c6a274	zj_carweight	\N	车载	1.0	bda7431e-46ed-40b2-bf13-b511219a8fcb	bda7431e-46ed-40b2-bf13-b511219a8fcb	f	bda7431e-46ed-40b2-bf13-b511219a8fcb	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s", "fs_weight_9803.lua")\nend\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    local  IDX_Start = 0  -- 起始指令\n\tlocal  IDX_CMD = 1; -- 数据字节\n    local  IDX_axeisCount = 2; -- 轴数\n    local IDX_year = 6\n\tlocal IDX_month =5\n\tlocal IDX_day = 4\n    local IDX_hour = 7\n    local IDX_minute =8\n    local IDX_second = 9\n\tlocal IDX_second1 = 10\n\tlocal IDX_Sequence=18; --序列号\n\tlocal  IDX_CarModle = 22; -- 车类型\n\tlocal  IDX_Roadway = 30; -- 车道号\n\tlocal  IDX_Speed=32;   --速度\n\tlocal  IDX_AxieWeight1 = 34; -- 轴一P1重量\n    local  IDX_AxieWeight2 = 36; -- 轴二p1重量\n\tlocal  IDX_AxieWeight3 = 38; -- 轴三p1重量\n\tlocal  IDX_AxieWeight4 = 40; -- 轴四p1重量\n\tlocal  IDX_AxieWeight5 = 42; -- 轴五p1重量\n\tlocal  IDX_AxieWeight6 = 44; -- 轴六p1重量\n\tlocal  IDX_AxieWeight7 = 46; -- 轴七p1重量\n\tlocal  IDX_AxieWeight8 = 48; -- 轴八p1重量\n\tlocal  IDX_AxieWeight9 = 50; -- 轴九p1重量\n\tlocal  IDX_AxieWeight10 = 52; -- 轴十p1重量\n\tlocal  IDX_AxieWeight11 = 54; -- 轴一P2重量\n    local  IDX_AxieWeight12 = 56; -- 轴二p2重量\n\tlocal  IDX_AxieWeight13 = 58; -- 轴三p2重量\n\tlocal  IDX_AxieWeight14 = 60; -- 轴四p2重量\n\tlocal  IDX_AxieWeight15 = 62; -- 轴五p2重量\n\tlocal  IDX_AxieWeight16 = 64; -- 轴六p2重量\n\tlocal  IDX_AxieWeight17 = 66; -- 轴七p2重量\n\tlocal  IDX_AxieWeight18 = 68; -- 轴八p2重量\n\tlocal  IDX_AxieWeight19 = 70; -- 轴九p2重量\n\tlocal  IDX_AxieWeight20 = 72; -- 轴十p2重量\n\tlocal  IDX_TotalBase1 =74; -- 轴距一\n\tlocal  IDX_TotalBase2 =76; -- 轴距二\n\tlocal  IDX_TotalBase3 =78; -- 轴距三\n    local  IDX_TotalBase4 =80; -- 轴距四\n\tlocal  IDX_TotalBase5 =82; -- 轴距五\n\tlocal  IDX_TotalBase6 =84; -- 轴距六\n\tlocal  IDX_TotalBase7 =86; -- 轴距七\n\tlocal  IDX_TotalBase8 =88; -- 轴距八\n\tlocal  IDX_TotalBase9 =90; -- 轴距九\n\tlocal  IDX_Carlength = 92; -- 车长\n\tlocal  IDX_Sensor=106;  --传感器是否失效\n\tlocal  IDX_Temp=110; --温度\n\tlocal  IDX_Effective=112; --有效值\n\t local  IDX_Weight = 114; -- 重量\n\t local  IDX_Cardirection = 120; -- 方向\n\n\t local  axiStart = iota.hexToByte(hex,IDX_Start,'B'); --起始位\n    log.debug("startw %s", "fs_weight_9803.lua")\n  \n    \n\tlocal  axiCMD = iota.hexToByte(hex,IDX_CMD); -- 数据字节\n\t\n    local  axisnum = iota.hexToUShort(hex,IDX_axeisCount,'L'); -- 轴数\n\t log.debug("fs_weight_9803 axisnum=%s",axisnum)\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then \n    local year = iota.hexToByte(hex,IDX_year,"B")\n\t log.debug("fs_weight_9803 year=%s",year)\n    if year ~= nil then\n      year= year + 2000\n    end\n\t\tlocal month =iota.hexToByte(hex,IDX_month,"B")\n      log.debug("fs_weight_9803 year=%s",year)\n\t\tlocal day = iota.hexToByte(hex,IDX_day,"B")\n\t\tlocal hour = iota.hexToByte(hex,IDX_hour,"B")\n\t\tlocal minute = iota.hexToByte(hex,IDX_minute,'B')\n\t\tlocal second1 = iota.hexToByte(hex,IDX_second,'B')\n\t\tlocal second2= iota.hexToByte(hex,IDX_second1,'B')\n\t\tlocal second=second1.."."..second2\n\t\tlog.debug("fs_weight_9803 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n\t\tlocal timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t\tlog.debug("fs_weight_9803 timenum=%s",timenum)\n\t\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t\tlog.debug("fs_weight_9803 recordTime=%s",recordTime)\n\t\tlocal Seq1=string.sub(hex,37,38)\n\t\tlog.debug("fs_weight_9803 Seq1=%s",Seq1)\n\t\tlocal Seq2=string.sub(hex,39,40)\n\t\tlog.debug("fs_weight_9803 Seq2=%s",Seq2)\n\t\tlocal Seq3=string.sub(hex,41,42)\n\t\tlog.debug("fs_weight_9803 Seq3=%s",Seq3)\n\t\tlocal Seq4=string.sub(hex,43,44)\n\t\tlog.debug("fs_weight_9803 Seq4=%s",Seq4)\n\t\tlocal  axieSequence =Seq4..Seq3..Seq2..Seq1\n\t\tlog.debug("fs_weight_9803 axieSequence=%s",axieSequence)\n\t\taxieSequence =tonumber(axieSequence,16)\n\t\t--local  axieSequence = iota.hexToFloat(hex,IDX_sequence,'L');   --序列号\n\t    --车型\n\t\tlocal Modle1rist=string.sub(hex,45,47);\n\t\tlocal axieCarModle =toStrHex(Modle1rist)\n\t\tlog.debug("fs_weight_9803 axieCarModle=%s",axieCarModle)\n\t\tlocal axieRoadway = iota.hexToUShort(hex,IDX_Roadway,'L') --车道号\n\t\tlocal axieSpeed = iota.hexToUShort(hex,IDX_Speed,'L') --速度\n\t    log.debug("fs_weight_9803 axieSpeed=%s",axieSpeed)\n\t\tlocal axieWeight1 = iota.hexToShort(hex,IDX_AxieWeight1,'L') --轴一P1重量\n\t\tlocal axieWeight2 = iota.hexToShort(hex,IDX_AxieWeight2,'L')  --轴二p1重量\n\t\tlocal axieWeight3 = iota.hexToShort(hex,IDX_AxieWeight3,'L')  --轴三p1重量\n\t\tlocal axieWeight4 = iota.hexToShort(hex,IDX_AxieWeight4,'L')\n\t\tlocal axieWeight5 = iota.hexToShort(hex,IDX_AxieWeight5,'L')\n\t\tlocal axieWeight6 = iota.hexToShort(hex,IDX_AxieWeight6,'L')\n\t\tlocal axieWeight7 = iota.hexToShort(hex,IDX_AxieWeight7,'L')\n\t\tlocal axieWeight8 = iota.hexToShort(hex,IDX_AxieWeight8,'L')\n\t\tlocal axieWeight9 = iota.hexToShort(hex,IDX_AxieWeight9,'L')\n\t\tlocal axieWeight10 = iota.hexToShort(hex,IDX_AxieWeight10,'L')\n\t\tlocal axieWeight11 = iota.hexToShort(hex,IDX_AxieWeight11,'L')\n\t\tlocal axieWeight12 = iota.hexToShort(hex,IDX_AxieWeight12,'L')\n\t\tlocal axieWeight13 = iota.hexToShort(hex,IDX_AxieWeight13,'L')\n\t\tlocal axieWeight14 = iota.hexToShort(hex,IDX_AxieWeight14,'L')\n\t\tlocal axieWeight15 = iota.hexToShort(hex,IDX_AxieWeight15,'L')\n\t\tlocal axieWeight16 = iota.hexToShort(hex,IDX_AxieWeight16,'L')\n\t\tlocal axieWeight17 = iota.hexToShort(hex,IDX_AxieWeight17,'L')\n\t\tlocal axieWeight18 = iota.hexToShort(hex,IDX_AxieWeight18,'L')\n\t\tlocal axieWeight19 = iota.hexToShort(hex,IDX_AxieWeight19,'L')\n\t\tlocal axieWeight20 = iota.hexToShort(hex,IDX_AxieWeight20,'L')\n\t\tlocal  axieTotalBase1 = iota.hexToShort(hex,IDX_TotalBase1,'L'); -- 轴距一\n\t\tlocal  axieTotalBase2 = iota.hexToShort(hex,IDX_TotalBase2,'L'); -- 轴距二\n\t\tlocal  axieTotalBase3 = iota.hexToShort(hex,IDX_TotalBase3,'L'); -- 轴距三\n\t\tlocal  axieTotalBase4 = iota.hexToShort(hex,IDX_TotalBase4,'L'); -- 轴距四\n\t\tlocal  axieTotalBase5 = iota.hexToShort(hex,IDX_TotalBase5,'L'); -- 轴距五\n\t\tlocal  axieTotalBase6 = iota.hexToShort(hex,IDX_TotalBase6,'L'); -- 轴距六\n\t\tlocal  axieTotalBase7 = iota.hexToShort(hex,IDX_TotalBase7,'L'); -- 轴距七\n\t\tlocal  axieTotalBase8 = iota.hexToShort(hex,IDX_TotalBase8,'L'); -- 轴距八\n\t\tlocal  axieTotalBase9 = iota.hexToShort(hex,IDX_TotalBase9,'L'); -- 轴距九\n\t\tlocal  axieCarlength= iota.hexToShort(hex, IDX_Carlength,'L'); -- 车长\n\t\tlocal  axieEffective= iota.hexToShort(hex, IDX_Effective,'L'); -- 有效值\n\t\tlocal  axieTemp= iota.hexToShort(hex,IDX_Temp,'L'); --温度\n    \tlog.debug("fs_weight_9803 axieTemp=%s",axieTemp);\n\t\tif  axieTemp~= nil then\n     axieTemp = axieTemp -100\n    end\n\t\tlocal  axieWeight = iota.hexToUInt(hex,IDX_Weight,'L');  --重量\n\t\tlocal  axieCardirection= iota.hexToShort(hex,IDX_Cardirection,'L') --方向\n\t\tout.data = {\n\t\t           CMD =axiCMD,\n\t\t\tCardirection = axieCardirection,\n\t\t\tSequence = axieSequence,\n\t\t\tshaftnum=axisnum,\n\t\t\taxieCarModle1rist=axieCarModle,\n      \n            axieRoadway= axieRoadway,\n\t\t\tSpeed=axieSpeed,\n            axieWeight1 = axieWeight1,\n            axieWeight2= axieWeight2,\n            axieWeight3= axieWeight3,\n            axieWeight4= axieWeight4,\n            axieWeight5= axieWeight5,\n            axieWeight6= axieWeight6,\n            axieWeight7= axieWeight7,\n            axieWeight8= axieWeight8,\n\t\t\taxieWeight9= axieWeight9,\n\t\t\taxieWeight10= axieWeight10,\n\t\t\taxieWeight11= axieWeight11,\n\t\t\taxieWeight12= axieWeight12,\n\t\t\taxieWeight13= axieWeight13,\n\t\t\taxieWeight14= axieWeight14,\n\t\t\taxieWeight15= axieWeight15,\n\t\t\taxieWeight16= axieWeight16,\n\t\t\taxieWeight17= axieWeight17,\n\t\t\taxieWeight18= axieWeight18,\n\t\t\taxieWeight19= axieWeight19,\n\t\t\taxieWeight20= axieWeight20,\n\t\t\taxieTotalBase1=axieTotalBase1,\n            axieTotalBase2=axieTotalBase2,\n            axieTotalBase3=axieTotalBase3,\n           axieTotalBase4=axieTotalBase4,\n            axieTotalBase5=axieTotalBase5,\n            axieTotalBase6=axieTotalBase6,\n           axieTotalBase7=axieTotalBase7,\n          axieTotalBase8=axieTotalBase8,\n\t\t\taxieTotalBase9=axieTotalBase9,\n\t\t\tCarlength=axieCarlength,\n            Sensor=axieSensor,            \n            temperature = axieTemp,\n\t\t\tEffective = axieEffective,\n\t\t\tWeight= axieWeight,\n\t\t\tTime=recordTime\n        }\t\t\n\t\t\n\t\t--out.time=recordTime\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\t\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\nIsValid=function(data)\n    log.debug('BK_WaterLevel开始校验数据')\n    \n    if iota.hexToUShort(data,IDX_Sensor,'L') == 0x01  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n  if iota.hexToUShort(data,axiStart,'L') == 0x02  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug('BK_WaterLevel数据校验通过')\n    return true\n--crc\nend\n\n\n	INLINE	2019-05-13 16:10:10.396+08	2019-05-14 09:31:29.124+08	2019-05-13	\N
7fa97af4-4ccf-4d47-9e33-776ec9f952cc	test	\N		1.0	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	f	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	Lua	start=function()\n local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n            local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n            datatimeHexStr = year .. month\n log.debug("datatimeHexStr=%s",datatimeHexStr)\n\nend	INLINE	2019-05-13 17:01:19.796+08	2019-05-15 14:41:10.659+08	2019-05-13	\N
60523f46-1b58-4910-8a1f-7a111e1e0ccb	BSIL-MICRO-MCU	\N		1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	--//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    if subdevices ~= nil then\n        log.debug('BGK_4000:LUA:subdevices : data is =%s', json.encode(subdevices))\n        for index, child in pairs(subdevices) do\n            if json.encode(device.uplink.props) ~= 'null' then\n                moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                channelNo = tonumber(child.uplink.props.channel)\n                log.debug('BGK_4000 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n            else\n                moduleNo = child.props.moduleId\n                channelNo = child.props.channelId\n                log.debug('BGK_4000 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n            end\n\n            log.debug('BGK_4000:模块%s通道%s的deviceId是%s：', moduleNo, channelNo, tostring(child.id))\n            --log.debug("BGK_4000:子通道设备原型child=%s",json.encode(child))\n            local cmdstr = string.format('%02d', tonumber(moduleNo)) .. '21' .. string.format('%02d', tonumber(channelNo))\n            log.debug('BGK_4000:模块%s通道%s的cmdstr是：%s', moduleNo, channelNo, cmdstr)\n            local lcr_str = LCR(cmdstr)\n            lcr_str = string.upper(lcr_str)\n             --转大写字符\n            log.debug('BGK_4000:模块%s通道%s的lcr_str是：%s', moduleNo, channelNo, lcr_str)\n            local request_asciiStr = ':' .. cmdstr .. lcr_str\n            log.debug('BGK_4000:模块%s通道%s的request_asciiStr是：%s', moduleNo, channelNo, request_asciiStr)\n            local buff = toHexStr(request_asciiStr)\n            buff = iota.appendHexByte(buff, 0x0d, endian)\n            buff = iota.appendHexByte(buff, 0x0a, endian)\n            ok, resp = ctx:ssend(buff, 15000)\n            local result = '{}'\n            if ok and type(resp) ~= 'table' then --and json.encode(resp)~="null"\n                log.debug('BGK_4000:模块%s通道%s的数据接收成功,开始解析=%s,type=%s,json.encode=%s,type(resp)==table=%s', moduleNo, channelNo, resp, type(resp), json.encode(resp), type(resp) == 'table')\n                result = unmarshall(resp, child, moduleNo, channelNo)\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('BGK_4000:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n            end\n        end\n    else\n        log.debug('BGK_4000 subdevices是nil')\n        return nil\n    end\n\n    log.debug('BGK_4000 out序列化')\n    local resultData = json.encode(out)\n    log.debug('BGK_4000 out序列化结果 : out is =%s', json.encode(out))\n    ctx:done(resultData)\nend\n\n--3A3031323130312B302E3030303030202B39393737363036440D0A\n--moduleId=1，channelId=1\n-- "frequency": 0,\n--"phy": -80.6607188196787,\n--"temperature": -71.01792619970792\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = childDevice.id,\n        type = 1\n    }\n\n    log.debug('BGK_4000:模块%s通道%s的deviceId是：%s', subModuleId, subChannelId, json.encode(childDevice))\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    if ErrorCode then\n        --码流转string\n        local responseStr = toStrHex(hex)\n        log.debug('BGK_4000:模块%s通道%s的解析字符串是：%s', subModuleId, subChannelId, responseStr)\n        local freStr = string.sub(responseStr, 8, 15)\n        local freq = tonumber(freStr)\n        local data1 = tonumber(string.format('%5.3f', freq))\n        local resistanceStr = string.sub(responseStr, 16, 23)\n        local dResistance = tonumber(resistanceStr)\n        log.debug('BGK_4000:模块%s通道%s的原始值是：freStr=%s,resistanceStr=%s', subModuleId, subChannelId, freStr, resistanceStr)\n        --阻值转温度计算公式常数A,B,C\n        local A = 1.4051\n        local B = 2.369\n        local C = 1.019\n        local temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n        temp = tonumber(string.format('%3.2f', temp))\n        local Phy\n        if childDevice.uplink.capabilities[1].formula.metaid == '60039eec-76e3-47ec-9024-32d1bbd55287' then --振弦公式 metaid\n            local k = childDevice.uplink.capabilities[1].formula.props.K or nil\n            local kt = childDevice.uplink.capabilities[1].formula.props.Kt or nil\n            local f0 = childDevice.uplink.capabilities[1].formula.props.Fo or nil\n            local t0 = childDevice.uplink.capabilities[1].formula.props.To or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s', subModuleId, subChannelId, k, kt, f0, t0, freq, temp)\n            if k ~= nil and kt ~= nil and f0 ~= nil and t0 ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '121058ad-ddc3-41a9-bd75-36e58162a204' then --基康倾角仪转换公式D=G×L(R1-R0)  metaid\n            local Rx0 = childDevice.uplink.capabilities[1].formula.props.Rx0 or nil\n            local Ry0 = childDevice.uplink.capabilities[1].formula.props.Ry0 or nil\n            local G = childDevice.uplink.capabilities[1].formula.props.G or nil\n            local L = childDevice.uplink.capabilities[1].formula.props.L or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：Rx0=%s,Ry0=%s,G=%s,L=%s', subModuleId, subChannelId, Rx0, Ry0, G, L)\n            if Rx0 ~= nil and Ry0 ~= nil and G ~= nil and L ~= nil then\n                anglex = data1\n                changedx = G * L * (data1 - Rx0)\n                angley = dResistance\n                changedy = G * L * (dResistance - Ry0)\n                log.debug('BGK_4000:模块%s通道%s的anglex=%s,angley=%s', subModuleId, subChannelId, anglex, angley)\n            end\n        end\n\n        if childDevice.uplink.capabilities[1].formula.metaid == '1a7e610f-1da2-4a2c-bbce-2faa2ead0ba9' then --模拟量线性转换数字量公式\n            local dH = childDevice.uplink.capabilities[1].formula.props.dH or nil\n            local dL = childDevice.uplink.capabilities[1].formula.props.dL or nil\n            local aH = childDevice.uplink.capabilities[1].formula.props.aH or nil\n            local aL = childDevice.uplink.capabilities[1].formula.props.aL or nil\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：dH=%s,dL=%s,aH=%s,aL=%s', subModuleId, subChannelId, dH, dL, aH, aL)\n            if dH ~= nil and dL ~= nil and aH ~= nil and aL ~= nil then\n                Phy = (dH - dL) / (aH - aL) * (data1 - aL) + dL\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n        if childDevice.uplink.capabilities[1].formula.metaid == '5c22c26c-2a9e-439f-b585-2d5e1031fc23' then --定制公式   P=K2*(R1-R0)^2+K1*(R1-R0)+C\n            local K1 = childDevice.uplink.capabilities[1].formula.props.K1 or nil\n            local K2 = childDevice.uplink.capabilities[1].formula.props.K2 or nil\n            local R0 = childDevice.uplink.capabilities[1].formula.props.R0 or nil\n            local C = childDevice.uplink.capabilities[1].formula.props.C or nil\n            local P = childDevice.uplink.capabilities[1].formula.props.P or 1 --用于原始数据转换 比例\n            log.debug('BGK_4000:模块%s通道%s的公式计算参数是：K1=%s,K2=%s,R0=%s,C=%s,P=%s', subModuleId, subChannelId, K1, K2, R0, C, P)\n            if K1 ~= nil and K2 ~= nil and R0 ~= nil and C ~= nil then\n                R1 = freq ^ P\n                Phy = K2 * (R1 - R0) ^ 2 + K1 * (R1 - R0) + C\n                Phy = tonumber(string.format('%6.3f', Phy))\n                log.debug('BGK_4000:模块%s通道%s的phy是：%s', subModuleId, subChannelId, Phy)\n            end\n        end\n\n        subData.data = {\n            frequency = freq,\n            modulus = data1, --模拟量\n            temperature = temp,\n            physicalvalue = Phy, --物理量\n            anglex = anglex,\n            angley = angley,\n            changedx = changedx,\n            changedy = changedy\n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\nLCR = function(buff)\n    log.debug('BGK_4000:lcr buff=%s', buff)\n    local lcr = 0\n    for i = 0, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    log.debug('BGK_4000:lcr累加结果%s', tonumber(lcr))\n    lcr = lcr % 255\n    local value = 0xff - lcr + 1\n    local lcrResult_str = string.sub(string.format('%#x', value), 3, -1)\n     --去除0x\n    log.debug('BGK_4000:lcr校验结果%s', lcrResult_str)\n    return lcrResult_str\nend\n\nIsValid = function(data, moduleId, channelId)\n    log.debug('BGK_4000:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n    if data == nil or string.len(data) / 2 ~= 27 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('BGK_4000:模块%s通道%s  数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n    if iota.hexToByte(data, 0, 'B') ~= 0x3a or iota.hexToByte(data, 25, 'B') ~= 0x0d or iota.hexToByte(data, 26, 'B') ~= 0x0a then\n        errcode = 1001\n        errormsg = 'Hex CMD False '\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n\n    --码流转string\n    local checkStr = toStrHex(data)\n    log.debug('BGK_4000:模块%s通道%s 数据校验：checkStr=%s', moduleId, channelId, checkStr)\n    local moduleStr = string.sub(checkStr, 2, 3)\n    local channelStr = string.sub(checkStr, 6, 7)\n    local error_index=string.sub(checkStr, 8, 8)\n    if tonumber(moduleStr) ~= tonumber(moduleId) then\n        errormsg = string.format('Invalid acq moduleId=%s[%s]', moduleStr, moduleId)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Invalid acq moduleId=%s', moduleId, channelId, moduleStr)\n        return false\n    end\n\n    if tonumber(channelStr) ~= tonumber(channelId) then\n        errormsg = string.format('Invalid acq channelId=%s[%s]', channelStr, channelId)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s 数据校验失败：Invalid acq channelId=%s', moduleId, channelId, channelStr)\n        return false\n    end\n\n    if error_index == 'E' then\n        errormsg = string.format('error data=%s[%s]',data,checkStr)\n        errcode = 1004\n        log.debug('BGK_4000:模块%s通道%s  数据校验失败 %s', moduleId, channelId, errormsg)\n        return false\n    end\n\n    log.debug('BGK_4000:模块%s通道%s校验数据通过！！！', moduleId, channelId)\n    return true\nend\n\ngetIndex = function(data) --用于IsValid\n    local len = string.len(data) / 2\n    for n = 1, len do\n        local value = string.sub(data, 2 * n - 1, 2 * n)\n        if value == '0a' then\n            return n\n        end\n    end\n    return 0\nend\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-05-14 14:14:05.819+08	2019-05-22 18:04:54.072+08	2019-05-22	\N
f4925c79-04d0-42e2-b326-cf291ed7589d	shjy_temp	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x16, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local physicalvalue\t= iota.hexToFloat(hex,3,'B')\n        \n       \n        out.data = {\n\t\t\tphysicalvalue=tonumber(string.format("%0.3f",physicalvalue))\n        }\n    log.debug("shjy_temp: 结果=%s",physicalvalue)\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-06-21 16:28:42.209+08	2019-07-17 16:30:00.967+08	2018-06-21	\N
4f00f469-4a6a-41a1-94fa-7f669cfbed12	fs_trwsd_mx	\N	土壤温湿度 华汉维科技(淘宝妙昕）	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//D:\\SVN\\201909项目\\土壤温湿度变送器资料\\485型土壤温湿度传感器使用说明书.doc\nstart=function()\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n    buff=iota.appendHexWord(buff, 2 ,endian)               -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian)               -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("fs_trwsd_mx  out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \tlocal humidy= iota.hexToShort(hex,3,'B')/10\n        local Temp = iota.hexToShort(hex,5,'B')/10\n            \n        out.data = {\n            temperature=Temp,\n           \thumidity = humidy\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_trwsd_mx 开始校验数据 %s',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_trwsd_mx  数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend\n	INLINE	2019-09-16 16:38:52.705+08	2019-11-26 14:23:00.86+08	2019-09-16	\N
aa948108-11fb-414d-a182-29cbc7bf1cce	mas_qixing_wl	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n    log.debug("start %s, ctx=", "mas_qixin.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("mas_qixin 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("mas_qixin 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x01 = 采集\n  \tbuff=iota.appendHexWord(buff, 0x16, endian)   \n\tbuff=iota.appendHexWord(buff, 0x12, endian)   \n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("mas_qixin:发送数据=%s",buff)\n   local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tlog.debug("mas_qixin 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n    end\n    \nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n\n\t--   2   2   1      4     4       2\n\t-- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n\t--000107DE8112121213131313E1F9  \n\t-- moduleId=           结果0,0\n\t--print("parsing data", hex)\n\tlocal pressure = iota.hexToFloat(hex,3,'B');\n\tlocal temperature = iota.hexToFloat(hex,35,'B');\n\tlog.debug("mas_qixin 接收数据pressure=%s,temperature=%s",pressure,temperature)\n\tout.data = {\n\t\tpressure=pressure,\n\t\ttemperature = temperature\n\t};\n\n    return json.encode(out)\nend\n \n\n	INLINE	2019-09-10 17:04:45.652+08	2019-09-10 17:04:45.652+08	2019-09-10	\N
c36c2c03-92b0-41b0-bcdc-9c867e0da2f7	bjdh_temperature	\N	温度 含水量	1.0	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f	24ba1243-7e9a-4449-891c-e85657f257b5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug(" load script %s, moduleId=%s", " BJdh.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" BJdh 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" BJdh 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n\tlog.debug(" BJdh buff=%s",buff)\n    buff=buff.."0300000002"\n\tlog.debug(" BJdh bufff=%s",buff)\n    buff=iota.appendHexCrc(buff, "L",0)               -- 2: CRC\n\tlog.debug(" BJdh buff2=%s",buff)\n    ok,resp=ctx:ssend(buff,20000)  --发送指令\n    --local result="{}"\n    if ok then\n\tlog.debug(" BJdh aaaaa")\n        result = unmarshall(resp)\n        log.debug(" BJdh result0=%s",result)\n       -- print(string.format("out=%s,data=%s",resp, result))\n    else\n        log.debug(" BJdh cccc")\n    end\n\tlog.debug(" BJdh result1=%s",result)\n\n    ctx:done(result)\nend\n\n\nunmarshall=function(hex)\n  \tlocal out={\n        --type = 1,\n        data ={},\n        result = {}\n    }\n\tlog.debug(" BJdh vvvv")\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n\t\tlog.debug("BJdh there")\n        local temph = iota.hexToByte(hex,3,'B')\n\t\tlog.debug("BJdh temph=%s",temph)\n\t\tlocal templ = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("BJdh templ=%s",templ)\n\t\tlocal tempu= iota.hexToUShort(hex,3,'B')\n\t\tlocal temp\n\t\tif temph==0xFF then\n\t\t\tlog.debug("BJdh temph=0xFF")\n\t\t\t temp=(tempu-65535-1)/100\n\t\telse\n\t\t\t temp = (temph*256+templ)/100\n\t\t\tlog.debug("BJdh temph~=0xFF")\n\t\t\tlog.debug("BJdh tempp=%s",temp)\n\t\tend\n\t\tlog.debug("BJdh temp=%s",temp)\n\t\tlocal caph = iota.hexToByte(hex,5,'B')\n\t\tlocal capl = iota.hexToByte(hex,6,'B')\n\t\tlocal cap =(caph*256+capl)/100\n\t\tlocal data=''\n\t\tlog.debug("BJdh cap=%s",cap)\n        out.data = {\n            capacity=cap,\n\t\t\ttemperature=temp\n        }\n\t\tlog.debug("BJdh data=%s",data)\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data)\n    log.debug(' BJdh 开始校验数据')\n\tif string.len(data)/2 ~=9 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\t return false\t\n\tend\n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug(' BJdh 数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2019-05-13 10:57:57.137+08	2019-06-05 14:03:49.335+08	2019-05-13	\N
d873976f-2150-4a9e-8f8f-5b68dcdd0420	shjy_temp_ BK-J02AD	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_Pressure_1", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_Pressure_1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_Pressure_1 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length = iota.hexToShort(hex,3,'B') * 0.005\n        \n       \n        out.data = {\n\t\t\tlength=tonumber(string.format('%0.3f',length))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_Pressure_1 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_Pressure_1 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-06-27 16:09:51.484+08	2019-06-27 16:30:22.434+08	2019-06-27	\N
5f0c707c-93b6-4f19-b3e8-4788a8c6e077	shutai_receive_DT143	\N		1.0	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	f	0fdb9c51-6450-4966-9f8f-4a0af9a70f00	Lua	--//D:\\SVN\\201808项目\\20180828项目资料提交\\3、北京数泰项目--康飞\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n    ctx:asend("010203")\n    log.debug("shutaiDT14300  device=%s", json.encode(device))\nend\n\nonData=function(hex,index)\n    log.debug("shutaiDT14300  hex=%s[%s] type(index)=[%s]",hex,index,type(index))\n    if index==2 then\n       ok=ctx:asend("670d0a") --"g/n/r"  DT运行当前工作计划\n       ctx:sleep(1)\n       ok=ctx:asend("2f480d0a") --"/H/n/r"  DT 按照指定格式 上报数据\n    end\n\t--log.debug("shutaiDT14300  device =%s", json.encode(device))\n  \n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=HextoStr(hex)\n        log.debug("shutaiDT14300  sData= %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,";")\n        local allResponseCount=table_leng(allResponse)\n        --移除表内的“”和nil\n        for i=allResponseCount,1,-1 do\n            v=allResponse[i]\n            if v=='' or v==nil or string.len(v)<10 then\n            table.remove(allResponse,i)\n            --log.debug("shutaiDT14300  表内的“”和nil 移除元素k=%s v=%s",i,v)\n            end\n        end\n\n        --分析单类数据\n        local resplength=table_leng(allResponse)\n        local phys={} --存储所有通道物理量\n        local moduleNo   --模块号 \n        local dateTimeStr\n        local timenow\n        for k,v in ipairs(allResponse) do\n            dataIndex=string.sub(v,1,1)--单条数据首字母   D为设备信息 ，A为数据\n\n            if dataIndex=='D' then\n                local otherData=Split(v,',')\n                 moduleNo=otherData[2]\n                 local dateStr=otherData[4]\n                 local timeStr=otherData[5]\n                 dateTimeStr=string.format("%s %s",dateStr,timeStr)\n                 timenow=unixtimestamp(dateTimeStr)\n            elseif dataIndex=='A' then\n                 local singleData=Split(v,',')\n                 for sensorKey,sensorValue in ipairs(singleData) do\n                    if sensorKey>2 then\n                        phys[sensorKey-2]=singleData[sensorKey]\n                    end\n                 end\n            end\n        end\n\n        --匹配数据部分\n                                     \t\t\t\n        -- local childDevice={}--测试用\n        -- childDevice.id=123  --测试用\n\n        for index,childDevice in pairs(device.dnlinks[1].devices) do\n            log.debug("shutaiDT14300  遍历子设备 是否匹配设备child=%s",json.encode(childDevice))\n             \n            local channelStrCheck=childDevice.uplink.props.channel\n            log.debug("shutaiDT14300  子设备模块通道 接口获取 c=%s ",channelStrCheck)\n            local relatedChannel= Split(channelStrCheck,',')\n            local valueNum=table_leng(relatedChannel)\n            \n            if childDevice.props.sensortype=='zx' then\n                local Frequency_index=tonumber(relatedChannel[1])\n                local Temperature_index=tonumber(relatedChannel[2])\n                local Frequency=tonumber(phys[Frequency_index])\n                local Temperature=tonumber(phys[Temperature_index])\n                if childDevice.uplink.capabilities[1].formula.metaid == "ff2de59e-fd95-42c6-93cc-d827da25dd0c" then  --在iota中查找\n\n                    local K = childDevice.uplink.capabilities[1].formula.props.K  \n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    --  log.debug("shutaiDT14300  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K ==nil or Kt ==nil or Fo==nil or To==nil then\n                        Phy=nil\n                        -- log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                    else\n                         --log.debug("shutaiDT14300  振弦通道[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n                        Phy = K*(Frequency^2-Fo^2)+Kt*(Temperature-To)\n                        --log.debug("shutaiDT14300 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                                        data={\n                                            frequency=tonumber(string.format("%0.3f",Frequency)),\n                                            temperature=tonumber(string.format("%0.2f",Temperature)),\n                                            physicalvalue=tonumber(string.format("%0.3f",Phy)),\n                                            },\n                                        device=childDevice.id,\n                                        time=timenow,\n                                        type=1                       \n                                        }\n                       -- log.debug("shutaiDT14300: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end  \n\t\t\telseif childDevice.props.sensortype=='dw' then\n\t\t\t     local Resistance_index=tonumber(relatedChannel[15])\n\t\t\t\t local Resistance=phys[Resistance_index]\n\t\t\t\t \n\t\t\t\t if childDevice.uplink.capabilities[1].formula.metaid == "5a40c554-1256-4aec-b591-0202fc0f267a" then\n\t\t\t\t \n\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a\n                    local b = childDevice.uplink.capabilities[1].formula.props.b\n\t\t\t\t\tif a==nil or b==nil  then\n\t\t\t\t\tPhy=nil\t\t\t\t\n\t\t\t\t\telse  \t\t\t\t\t\n\t\t\t\t  local y=a*Math.Log(Resistance)+b\n\t\t\t\t  local data1 = {\n                            data={\n                                Y=tonumber(string.format("%0.3f",y)),\n                             \n                                resistance=tonumber(string.format("%0.3f",Resistance))\n                                },\n                            device=childDevice.id,\n                            time=timenow,\n                            type=1                       \n                            }\n\t\t\t\t\t\t\t table.insert(out.data,data1)\n                    end \n                end\t\t\t\t\t\t\t\t\t\t\t\n            elseif childDevice.props.sensortype=='dy' then\n                \n\n                \n                local Temperature_index=tonumber(relatedChannel[1])\n                local Vx_index=tonumber(relatedChannel[2])\n                local Vy_index=tonumber(relatedChannel[3])\n                local Temperature=tonumber(phys[Temperature_index])\n                local Vx=phys[Vx_index]\n                local Vy=phys[Vy_index]\n                \n                \n                if childDevice.uplink.capabilities[1].formula.metaid == "ed2744e0-eecf-42f0-8732-65fcd7e46d24" then  --在iota中查找\n\n                    local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n                    local Ky = childDevice.uplink.capabilities[1].formula.props.Ky                         \n                    local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n                    --  log.debug("shutaiDT14300 倾角通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n                    if Kx ==nil or Ky==nil or Vo==nil then\n                        Phy=nil\n                    --      log.debug("shutaiDT14300  倾角通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n                    else\n                        --   log.debug("shutaiDT14300  倾角通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n                        local AngleX = Kx*(Vx-Vo)\n                        local AngleY = Ky*(Vy-Vo)\n                    --    log.debug("shutaiDT14300 倾角通道[%s] AngleX=%s,AngleY=%s Temperature=%s",channelStrCheck,AngleX,AngleY,Temperature)\n                        local data1 = {\n                            data={\n                                anglex=tonumber(string.format("%0.3f",AngleX)),\n                                angley=tonumber(string.format("%0.3f",AngleY)),\n                                temperature=tonumber(string.format("%0.3f",Temperature))\n                                },\n                            device=childDevice.id,\n                            time=timenow,\n                            type=1                       \n                            }\n                        --   log.debug("shutaiDT14300: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data,data1)\n                    end \n                end\n\t\t\t\n            elseif childDevice.props.sensortype=='standard' then\n                local value1_index=tonumber(relatedChannel[1])\n                local value1=tonumber(phys[value1_index])\t\n\t\t\t\tlocal value2\n\t\t\t\tif valueNum>1 then\n\t\t\t\t\tlocal value2_index=tonumber(relatedChannel[2])\n\t\t\t\t\tvalue2=tonumber(phys[value2_index])\t\n\t\t\t\t\tvalue2=tonumber(string.format("%0.2f",value2))\n\t\t\t\t\t\n\t\t\t\tend\n                log.debug("shutaiDT14300  standard通道[%s] Temperature=%s",channelStrCheck,Temperature)\n                local data1 = {\n                    data={ \n                        physicalvalue=tonumber(string.format("%0.2f",value1)),\n\t\t\t\t\t\tphysicalvalue2=value2\n                        },\n                    device=childDevice.id,\n                    time=timenow,\n                    type=1                       \n                    }\n                log.debug("shutaiDT14300  standard通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                table.insert(out.data,data1)\n            end\n        \n            \n       end\n\n    else\n        ok=ctx:asend("2f480d0a") --"/H/n/r"  DT 按照指定格式 上报数据\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    log.debug("shutaiDT14300  resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n\n\nIsValid=function(alldata)\n    log.debug("shutaiDT14300  校验开始")\n    if string.len(alldata) <10   then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n        return false\n    end\n\n    if string.sub(alldata,1,4)~='442c' then\n\t   errormsg = 'allData header is invalid'\n        errcode = 1001\n        return false\n\t\n\tend\n\n    log.debug("shutaiDT14300  校验通过")\n    return true\nend\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nunixtimestamp=function(datestr)\n    -- 2018/4/28 16:10:12\n\tlog.debug("shutaiDT14300  datestr=%s",datestr)\n    local datelist = Split(datestr, " ");\n    local datebegin = Split(datelist[1], "/");\n    local dateend = Split(datelist[2], ":");\n    local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n    local hour = tonumber(dateend[1]);\n    local minute = tonumber(dateend[2]);\n    local second = tonumber(dateend[3]);\n    --log.debug("shutaiDT14300 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\t--log.debug("shutaiDT14300 timenum=%s",timenum)\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\t--log.debug("shutaiDT14300 recordTime=%s",recordTime)\n\treturn recordTime\nend	INLINE	2018-09-06 18:21:18.004+08	2019-12-30 16:58:58.179+08	2018-09-06	\N
bcbc3e2c-937e-4348-9c55-b9516e4782de	BDS-NH3	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\n--//氨气传感器FS-BDS-AQ通讯协议\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "BAS_ACQ.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\tlog.debug("BDS_AQ 设备模块通道 接口获取 m=%s",moduleNo)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\tlog.debug("BDS_AQ 设备模块通道 属性获取 m=%s",moduleNo)\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n    buff=iota.appendHexWord(buff, 16 ,endian)               -- 2: 氨气\n\tbuff=iota.appendHexWord(buff, 1 ,endian)               -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n  \tlog.debug("BDS_AQ buff m=%s",buff)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    \tlog.debug("BDS_AQ resp m=%s",resp)\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        local NH3 = iota.hexToShort(hex,3,'B');            \n        out.data = {\n            NH3=NH3\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('BDS_AQ 开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('BDS_AQ 数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend	INLINE	2019-04-17 17:21:18.145+08	2019-11-22 13:54:09.194+08	2019-04-17	\N
00e607a1-c022-4399-9cd1-54d2dc2705d3	mas_idau_log	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start = function()\n    --log.debug("mas_idau_log:device=%s",json.encode(device))\n    --log.debug("mas_idau_log:subdevice=%s",json.encode(device.dnlinks[1]))\n    local linkcnt = #(device.dnlinks)\n    --log.debug("mas_idau_log:linkcnt=%s",linkcnt)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop_log = {\n        M = "c_shell",\n        P = {} -- Get Log\n    }\n\tmop_log.P.C = "cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"\n\t\n\n    req.payload = json.encode(mop_log)\n    --log.debug("mas_idau_log:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\t--log.debug("mas_idau_log:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n\n	INLINE	2019-09-24 11:53:02.195+08	2020-04-17 09:23:21.074+08	2019-09-24	\N
b6e60de9-b636-4381-896d-151d57a4b604	xmxd_qj	\N		1.0	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal aa=''\n\t \n    aa=iota.appendHexByte(aa, 0xFF, endian)                  --1： 帧头\n    aa=iota.appendHexByte(aa, 0x41, endian)\n    aa=iota.appendHexByte(aa, 0x58, endian)\n    aa=iota.appendHexByte(aa, 0x4a, endian)\n    aa=iota.appendHexWord(aa, 2, endian)                     -- 2: 类型=1\n    aa=iota.appendHexWord(aa, device.uplink.props.module, endian)         -- 3: 模块号\n    aa=iota.appendHexByte(aa, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    aa=iota.appendHexCrc(aa, endian ,0)   \n    bb='0d245f'\n\tbb=iota.appendHexWord(bb, device.props.loraid, 'L')\n\tbb=bb .. aa\n\tlog.debug('xmxdz_qj bb=%s', bb)\n\tlocal lcr_str = CS(bb)\n\tlog.debug('xmxdz_qj lcr_str=%s', lcr_str)\n\tbuff='fe0d245f'\n\tbuff=iota.appendHexWord(buff, device.props.loraid, 'L')\n\tbuff= buff .. aa\n\tbuff=iota.appendHexByte(buff, lcr_str, endian)\n\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n   \n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n   local moduleStr=device.uplink.props.module\n   local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local xDataint = iota.hexToInt(hex,30,'B')\n        local yDataint = iota.hexToInt(hex,34,'B')\n        local zDataint = iota.hexToInt(hex,38,'B')\n        local tempint = iota.hexToShort(hex,42,'B')\n\t\t\n        local xData = iota.hexToInt(hex,16,'B')/1000.0;\n        local yData = iota.hexToInt(hex,20,'B')/1000.0;\n        local zData = iota.hexToInt(hex,24,'B')/1000.0;\n        local temp = iota.hexToShort(hex,28,'B')/100.0;\n        out.data = {\n            anglex=xData,\n            angley=yData,\n            anglez=zData,\n            temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n        };\n      \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\nIsValid=function(data,deviceModule)\nlog.debug("xmxdz_qj data=%s [%s] ",data,deviceModule)\n    if data == nil  then\n        errormsg = 'xmxdz_qj:Data is nil'\n        errcode = 1001\n    \tlog.debug("xmxdz_qj [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,12,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('xmxdz_qj module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("xmxdz_qj [%s] %s",deviceModule,errormsg)\n        return false\n    end\nif iota.hexToByte(data,14,'B') ~= 0x80  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug("xmxdz_qj [%s] 校验通过",deviceModule)\n    return true\n  \nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\t\n    end     \n\tlog.debug('xmxdz_qj lcr=%s', lcr)\n\t\n  local value= string.format("%#x",lcr)\n  log.debug('xmxdz_qj value=%s', value)\n  --local byte = string.sub(value,string.len(value)-1,string.len(value))\n  \n  return value\nend \n\n\n \n\n	INLINE	2021-02-24 11:13:39.07+08	2021-02-24 11:13:39.07+08	2021-02-24	\N
f6ebffcf-2f2a-41fa-a36b-d997b8584c39	fs_liquidLevel_9006	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--‪D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n  \tlog.debug("L1001k,%s",json.encode(device))\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22（0x16）\n--采集温度的偏移地址为38-39 默认是38（0x26）\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE);  -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);  --功能码  0x03采集        \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n    if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); --  压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); --  温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature)),\n        physicalvalue=tonumber(string.format('%0.3f',pressure)) --传感器有的建立错误，用了physicalvalue\n\t\t}\n\telse\n        out.result = {code=errcode,msg=errormsg} \n\tend\n  \tlog.debug('fs_liquidLevel_9006:result=%s', json.encode(out))\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen < 36  then\n        errormsg = string.format('无效的数据长度=%s≠36',checkLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据指令≠03')\n        errcode = 1003\n        return false\n    end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n    if moduleNoCheckStr ~= tostring(checkModule) then \t\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2019-01-23 17:44:22.364+08	2020-09-07 17:56:33.673+08	2019-01-23	\N
422d3308-b4d9-4181-b705-7d81342c46a7	hnxr-DAS	\N	河南新睿的项目 有改动协议	1.0	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	f	e3714b5a-b240-4f8f-a8c3-9067a3fffb04	Lua	\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "hnxr.lua", device.uplink.props.module or "[nil]")\n\tlog.debug('hnxr device=%s', json.encode(device))\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n    buff="2453"\n\t\n    ok,resp=ctx:ssend(buff,4000)  --发送指令\n    local result =""\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    else\t\t\n    end\n\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        local freq1 = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("hnxr freq1=%s",freq1)\n\t\tlocal freq2 = iota.hexToByte(hex,5,'B')\n\t\tlog.debug("hnxr freq2=%s",freq2)\n        local frequency = (freq1*256 + freq2)/10\n\t\tlog.debug("hnxr frequency=%s",frequency)\n    \tlog.debug('hnxr device=%s', json.encode(device))\n\t\tlocal k = device.props.k\n\t\tlog.debug("hnxr qr k=%s",k)\n\t\tlocal f0 =  device.props.f0\n\t\tlog.debug("hnxr qr f0=%s",f0)\n\t\tif k ~= nil and f0 ~= nil then\n\t\t\tPhy = k * ( f0 ^ 2 - frequency ^ 2)\n\t\t\tlog.debug("hnxr qr Phy=%s",Phy)\n\t\tend\n        out.data = {\n            frequency=frequency,\n\t\t\tphysicalvalue = Phy\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n  \tlog.debug("hnxr: result=%s",json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n   log.debug("hnxr: moduleNo_check=%s",json.encode(tostring(moduleNo_check) ))\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,0,'B') ~= 0xAA  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,6,'B')) then\n    \n    log.debug("hnxr: tall=%s",json.encode(tostring(iota.hexToByte(data,6,'B')) ))\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\nonData=function(data) \n  end\n	INLINE	2019-05-15 10:39:04.586+08	2019-05-31 15:36:47.636+08	2019-05-15	\N
59fbaf94-9851-45b3-ad97-ec1a8a7ff764	hnxinrui_DAS	\N	采集仪	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "hnxr.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("hnxr 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff="$S"\n\tlog.debug("hnxr buff=%s",buff)\n    ok,resp=ctx:ssend(buff,4000)  --发送指令\n    local result="{}"\n    if ok then\n\t\tlog.debug("hnxr aaa")\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n\t\t\n    end\n\tlog.debug("hnxr: result=%s",json.encode(result))\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\tlog.debug("hnxr moduleStr=%s",moduleStr)\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        local freq1 = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("hnxr freq1=%s",freq1)\n\t\tlocal freq2 = iota.hexToByte(hex,5,'B')\n\t\tlog.debug("hnxr freq2=%s",freq2)\n        local frequency = (freq1*256 + freq2)/10\n\t\tlog.debug("hnxr frequency=%s",frequency)\n        out.data = {\n            frequency=frequency\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('BK_WaterLevel开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,0,'B') ~= 0xAA  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,6,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('BK_WaterLevel数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2019-04-19 16:21:36.05+08	2019-05-15 10:33:46.115+08	2019-04-19	\N
b9716d39-3f65-4cd7-9fb9-4214e050b117	shjy_DAS_BK-ZXC01A	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//02 协议分析/2016-09-23/BGK协议 v2.0.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\nstart = function()\n    log.debug('load script %s, moduleId=%s', 'BGK_4000', device.props.moduleId or '[nil]')\n    local endian = 'L'\n    local buff = ''\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    if subdevices ~= nil then\n        log.debug('shjy_DAS_BK-ZXC01A:LUA:subdevices : data is =%s', json.encode(subdevices))\n        for index, child in pairs(subdevices) do\n            if json.encode(device.uplink.props) ~= 'null' then\n                moduleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                channelNo = tonumber(child.uplink.props.channel)\n                log.debug('shjy_DAS_BK-ZXC01A 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n            else\n                moduleNo = child.props.moduleId\n                channelNo = child.props.channelId\n                log.debug('shjy_DAS_BK-ZXC01A 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s', moduleNo, channelNo, json.encode(child.uplink.props))\n            end\n\n            log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的deviceId是%s：', moduleNo, channelNo, tostring(child.id))\n    \n           \n\t\t\tlocal request_asciiStr = '?'\n\t\t\tbuff = toHexStr(request_asciiStr)\n            log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的buff是：%s', moduleNo, channelNo, buff)\n            buff = buff .. moduleNo .. '574d'\n            buff = iota.appendHexByte(buff, channelNo, endian)\n            buff = iota.appendHexByte(buff, 0x0d, endian)\n            buff = iota.appendHexByte(buff, 0x0a, endian)\n            ok, resp = ctx:ssend(buff, 15000)\n            local result = '{}'\n            if ok then\n               \n                result = unmarshall(resp, child, moduleNo, channelNo)\n                 --解析单条数据\n                table.insert(out.data, result)\n            else\n                log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的数据接收失败', moduleNo, channelNo)\n            end\n        end\n    else\n        log.debug('shjy_DAS_BK-ZXC01A subdevices是nil')\n        return nil\n    end\n\n    log.debug('shjy_DAS_BK-ZXC01A out序列化')\n    local resultData = json.encode(out)\n    log.debug('shjy_DAS_BK-ZXC01A out序列化结果 : out is =%s', json.encode(out))\n    ctx:done(resultData)\nend\n\n\n\nunmarshall = function(hex, childDevice, subModuleId, subChannelId)\n    local subData = {\n        data = {},\n        device = childDevice.id,\n        type = 1\n    }\n\n    log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s的deviceId是：%s', subModuleId, subChannelId, json.encode(childDevice))\n    local ErrorCode = IsValid(hex, subModuleId, subChannelId)\n    if ErrorCode then\n    \n       \n        local Phy1= iota.hexToUShort(hex,10,'B')\n\t\tlocal Phy2= iota.hexToUShort(hex,12,'B')\n        local temp = iota.hexToUShort(hex,14,'B')/10\n        temp = tonumber(string.format('%0.1f', temp))\n      \n  \n        subData.data = {\n            physicalvalue1 = Phy1,\n        \n            temperature = temp,\n            physicalvalue2 = Phy2, --物理量\n       \n        }\n    else\n        subData.result = {code = errcode, msg = errormsg}\n    end\n    return subData\nend\n\n\n\nIsValid = function(data, moduleId, channelId)\n    log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s开始校验数据=%s', moduleId, channelId, data)\n    if data == nil or string.len(data) / 2 ~= 20 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s  数据校验失败：Data is nil or invalid length', moduleId, channelId)\n        return false\n    end\n    local data_channelId=iota.hexToByte(data,9,'B')\n    if tonumber(channelId) ~= tonumber(data_channelId) then\t\n       errormsg = 'Invalid acq channelId'\n       errcode = 1004\n       log.debug("shjy_DAS_BK-ZXC01A  m=%s,c=%s,数据通道号错误[%s]",channelId,channelId,data_channelId)\n       return false\n    end\n    log.debug('shjy_DAS_BK-ZXC01A:模块%s通道%s校验数据通过！！！', moduleId, channelId)\n    return true\nend\n\n\n\n--HEX字符串->ascii字符串\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\n	INLINE	2019-09-24 13:50:15.899+08	2019-09-24 15:04:15.173+08	2019-09-24	\N
d751e738-d74f-476e-8ba3-f25bb264bea3	lefu_temp_LFZX001	\N		1.0	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	f	9842b3d6-0a7d-4d67-84be-d0132d1b3e30	Lua	start=function()\n    log.debug("lefu_temp_LFZX001.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("lefu_temp_LFZX001 [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n    }\n    --ff41584a23313832363036333634323923ffffffffffffff000500020cf15b0b9ffe01211111ffffffffF38Feeee\n\t\n\t--ff41584a38393836303430333130313837313838333139340001072d0cf05cff1b540001042d01f40ac705e700c8c1c6eeee\n\t\n\t--ff41584a3839383630343033313031383731383833313934000107000cf05cfa05730001042f00c80b6ca192eeee\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t    local fre1 = iota.hexToShort(hex,36,'B')\n        local fre2 = iota.hexToShort(hex,38,'B')/1000\n\t\tlocal fre = fre1+fre2\n        local temp= iota.hexToShort(hex,40,'B')/100\n\t\tlocal Phy1= iota.hexToShort(hex,42,'B')\n        log.debug("lefu_temp_LFZX001 Phy1=%s",Phy1)\n\t\tlocal Phy2 = iota.hexToShort(hex,44,'B')/1000\n         log.debug("lefu_temp_LFZX001 Phy2=%s",Phy2)\n\t\tlocal Phy = Phy1 + Phy2\n        log.debug("lefu_temp_LFZX001 Phy=%s",Phy)\n        out.data = {                \n            frequency=fre,\n\t\t\ttemperature=temp,\n\t\t    physicalvalue=Phy\n        }\n        local resultData =json.encode(out)\n        log.debug("lefu_temp_LFZX001 [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'lefu_temp_LFZX001:Data is nil'\n        errcode = 1001\n    \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local length= iota.hexToByte(data,28,'B')\n    if (string.len(data)/2~=(length+38)) then\n        errormsg = 'lefu_temp_LFZX001:Data length is wrong'\n        errcode = 1001\n    \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataModule= iota.hexToShort(data,26,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anfang_settlement_1 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local sensorType= iota.hexToShort(data,24,'B')\n    if (sensorType~=1) then\n        errormsg = 'lefu_temp_LFZX001:sensorType is wrong'\n        errcode = 1001\n        log.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local subdata=string.sub(data,1,-9)\n    local crc=iota.appendHexCrc(subdata, 'B' ,0)\n    log.debug("lefu_temp_LFZX001.lua: crc, ctx=%s",crc)\n    local subdatacrc=string.sub(data,1,-5)\n    log.debug("lefu_temp_LFZX001.lua: subdatacrc, ctx=%s",subdatacrc)\n    if (string.lower(crc)~=string.lower(subdatacrc)) then\n        errormsg = 'lefu_temp_LFZX001:crc is wrong'\n        errcode = 1001\n    \tlog.debug("lefu_temp_LFZX001 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    log.debug("lefu_temp_LFZX001 [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \n	INLINE	2019-06-06 14:25:20.572+08	2019-06-11 11:48:00.414+08	2019-06-06	\N
859643c7-00d8-449b-b686-520bd72d1ae3	faith_mop	\N		1.0	064081fe-2c2c-40ca-9d46-c654a2adb949	064081fe-2c2c-40ca-9d46-c654a2adb949	f	064081fe-2c2c-40ca-9d46-c654a2adb949	Lua	start = function()\n local cmd = capability.param\n log.debug("MOP:linkcnt=%s",cmd)\n update_mop(cmd)\n    ctx:done(json.encode(out))\nend\n\n\n--需要配置更新\nupdate_mop = function(command)\n    log.debug("MOP: update_mop command=%s",command)\n\n\n local tosend = StrtoHex(command)\n local ok, ack = ctx:ssend(tosend, 4000)\n log.debug("MOP : mop_sensor ssend ack:%s ok:%s",json.encode(ack),ok)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = HextoStr(ack)\n        }\n    }\n log.debug("MOP : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n --判断输入类型\n if (type(hex)~="string") then\n  return nil,"hex2str invalid input type"\n end\n --拼接字符串\n local index=1\n local ret=""\n for index=1,hex:len() do\n     local str = string.format("%02X",hex:sub(index):byte())\n     if str == '0A' or str =='0a' then\n        str = '0d0a'        \n       end \n     if index == hex:len() then\n        str = str..'0d0a'\n       end\n     ret=ret..str\n end\n return ret\nend	INLINE	2019-06-25 18:00:22.649+08	2019-06-25 18:00:22.649+08	2019-06-25	\N
aaaefada-5903-40c6-96d7-98e2aae78d81	cdajmop	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	start = function()\n    local endian = 'B'\n\tlocal buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\n    local closTime=string.format('%04x', tonumber(device.props.closTime)*10)\n    log.debug("cdajmop closTime=%s",closTime)\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff = buff .. '1000030002040004' .. closTime\n\t--buff=iota.appendHexWord(buff,moduleNo, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)    \n\n    log.debug("cdajmop buff=%s", buff)\n    local ok, ack = ctx:ssend(buff, 20000)\n\t\n\t    out = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = iota.hexToByte(ack,0,'B')\n        }\n    }\n\n\t\n\tlog.debug("cdajmop out=%s",json.encode(out))\n\n\n    ctx:done(json.encode(out))\nend\n\n\n	INLINE	2020-12-24 17:57:28.162+08	2020-12-25 09:01:12.922+08	2020-12-24	\N
31ae2751-5181-4ccf-9763-d2ddfd55726d	dianbiao_cjy	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： \n\nstart=function()\n    --log.debug("fs_1401 root device = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local addressTables={0x14,0x1BF,0x36A,0515}\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\t\n\t\t\tlocal moduleNo=tonumber(child.uplink.props.module) \n\t\t\tlocal channelNo=tonumber(child.uplink.props.channel)\n\t\n\t\t\tlocal buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)              -- 1: 功能码\n\t\t\tbuff=iota.appendHexWord(buff, addressTables[channelNo],endian)               -- 2: 数据地址\n\t\t\tbuff=iota.appendHexWord(buff, 42 ,endian)                --2：读取数据长度42\n\t\t\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlog.debug("fs_2401 module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\t\t\t\t\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("fs_2401 module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("fs_2401\tsubdevices是nil")\n    \treturn nil\n    end\n\tlocal resultData =json.encode(out)\n  \tlog.debug("fs_2401 module=%s,result=%s .",moduleNo,json.encode(out))\n    ctx:done(resultData)\nend\n\n\n\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("fs_2401 module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\t--A项电压\n    \tlocal A_phase_volt= iota.hexToUShort(hex,3,'B')/10\n        local B_phase_volt = iota.hexToUShort(hex,5,'B')/10\n        local C_phase_volt = iota.hexToUShort(hex,7,'B')/10\n        --AC线电压\n   \t\tlocal AC_line_volt= iota.hexToUShort(hex,9,'B')/10\n        local BC_line_volt = iota.hexToUShort(hex,11,'B')/10\n        local CA_line_volt = iota.hexToUShort(hex,13,'B')/10\n    \t--相电流\n    \tlocal A_phase_current= iota.hexToUShort(hex,15,'B')/100\n        local B_phase_current = iota.hexToUShort(hex,17,'B')/100\n        local C_phase_current = iota.hexToUShort(hex,19,'B')/100\n        local total_phase_current=iota.hexToUShort(hex,21,'B')/100\n        \n        --有功功率\n    \tlocal A_active_power=iota.hexToUInt(hex,23,'B')/1000\n   \t\tlocal B_active_power=iota.hexToUInt(hex,27,'B')/1000\n    \tlocal C_active_power=iota.hexToUInt(hex,31,'B')/1000\n    \tlocal total_active_power=iota.hexToUInt(hex,35,'B')/1000\n    \n    \t--无功功率\n    \tlocal A_reactive_power=iota.hexToUInt(hex,39,'B')/1000\n   \t\tlocal B_reactive_power=iota.hexToUInt(hex,43,'B')/1000\n    \tlocal C_reactive_power=iota.hexToUInt(hex,47,'B')/1000\n    \tlocal total_reactive_power=iota.hexToUInt(hex,51,'B')/1000\n    \n        --视在功率\n    \tlocal A_apparent_power=iota.hexToUInt(hex,55,'B')/1000\n   \t\tlocal B_apparent_power=iota.hexToUInt(hex,59,'B')/1000\n    \tlocal C_apparent_power=iota.hexToUInt(hex,63,'B')/1000\n    \tlocal total_apparent_power=iota.hexToUInt(hex,67,'B')/1000\n    \n    \t--功率因数\n    \tlocal A_power_factor=iota.hexToUShort(hex,71,'B')/1000\n   \t\tlocal B_power_factor=iota.hexToUShort(hex,73,'B')/1000\n    \tlocal C_power_factor=iota.hexToUShort(hex,75,'B')/1000\n    \tlocal total_power_factor=iota.hexToUShort(hex,77,'B')/1000\n    \n    \t--功率方向\n    \tlocal power_director=iota.hexToUShort(hex,79,'B')\n   \t\tlocal frequency=iota.hexToUShort(hex,81,'B')/100\n    \tlocal total_energy=iota.hexToUInt(hex,83,'B')/100\n    \n        subData.data = {\n         A_phase_volt=A_phase_volt,\n         B_phase_volt = B_phase_volt,\n         C_phase_volt = C_phase_volt,\n        --AC线电压\n   \t\t --AC_line_volt= AC_line_volt,\n         --BC_line_volt = BC_line_volt,\n         --CA_line_volt = CA_line_volt,\n    \t--相电流\n    \t A_phase_current= A_phase_current,\n         B_phase_current =B_phase_current,\n         C_phase_current = C_phase_current,\n         total_phase_current=total_phase_current,\n        \n        --有功功率\n    \t A_active_power=A_active_power,\n   \t\t B_active_power=B_active_power,\n    \t C_active_power=C_active_power,\n    \t total_active_power=total_active_power,\n    \n    \t--无功功率\n    \t --A_reactive_power=A_reactive_power,\n   \t\t --B_reactive_power=B_reactive_power,\n    \t --C_reactive_power=C_reactive_power,\n    \t --total_reactive_power=total_reactive_power,\n    \n        --视在功率\n    \t-- A_apparent_power=A_apparent_power,\n   \t\t-- B_apparent_power=B_apparent_power,\n    \t-- C_apparent_power=C_apparent_power,\n    \t-- total_apparent_power=total_apparent_power,\n    \n    \t--功率因素\n    \t A_power_factor=A_power_factor,\n   \t\t B_power_factor=B_power_factor,\n    \t C_power_factor=C_power_factor,\n    \t total_power_factor=total_power_factor,\n    \n    \t--功率方向\n    \t --power_director=power_director,\n   \t\t frequency=frequency,\n    \t total_energy=total_energy\n        };\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_2401 开始校验数据 %s',data)\n    if data == nil or string.len(data)/2~=89 then\n        errormsg = string.format('数据包长度无效=%s[%s]',string.len(data)/2,89)\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2),16) then\t\n        errormsg = string.format('模块号=%s≠%s',moduleNo_check,tonumber(string.sub(data,1,2),16) )\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_2401  数据校验通过')\n    return true\n--crc\nend	INLINE	2021-02-24 17:34:49.958+08	2021-02-25 13:51:03.675+08	2021-02-24	\N
74a206a6-e3d1-475d-8c0b-a2a3730a97d7	sdgs_file_transfer	\N		1.0	9b82d18b-98eb-4042-bb16-f05b923a0688	9b82d18b-98eb-4042-bb16-f05b923a0688	f	9b82d18b-98eb-4042-bb16-f05b923a0688	Lua	start = function()\n    log.debug('sdgs_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('sdgs_file_transfer  recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("sdgs_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('sdgs_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('sdgs_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --log.debug('sdgs_file_transfer  content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                   -- log.debug('sdgs_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'V1' then --直角棱镜\n                        local rst = {\n                            data = {\n                                physicalvalue = jsondata.RV[1],\n                                \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    --log.debug('sdgs_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n    log.debug('sdgs_file_transfer 查询子设备 moduleid=%s', moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(moduleid) then\n                log.debug('sdgs_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n            end\n        end\n        --log.debug('sdgs_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug('sdgs_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-04-23 13:42:56.099+08	2019-04-24 17:10:35.815+08	2019-04-23	\N
355f91df-bf0d-44d9-94bd-e14e89545f4d	rcb_zx	\N		1.0	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	f	a002a7f5-f9ea-42a5-83d0-5f63f88e3b87	Lua	start = function()\n    log.debug('rcb_zx   device=%s',json.encode(device))\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id or device.uplink.props.module \n    log.debug('rcb_zx [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    local bodydata = json.decode(bodydataStr)\n\n    local deviceId = bodydata.deviceId\n    local timenum= tonumber(bodydata.unixtime)\n    local url = httpbody.URL\n    log.debug('rcb_zx [%s] url=%s type=%s', moduleNo, url, type(url))\n\n    --获取实时数据\n    local datas = bodydata.data\n    for k, v in pairs(datas) do\n        local deviceUnitNo = v.deviceUnitNo\n        local device_Info = Split(deviceUnitNo,'_')\n        local channelId = device_Info[2] --模块号\n        local freq = v.frequency\n        local temperature = v.temperature\n        local childDevice = getDeviceInfo(channelId+1)--对方通道号从0开始\n        if childDevice ~= nil then\n            if childDevice.uplink.capabilities[1].formula.metaid == '5ffcc514-3e04-44e3-824a-c732c656a8c7' then --温度公式\n                local k = childDevice.uplink.capabilities[1].formula.props.K \n                local f0 = childDevice.uplink.capabilities[1].formula.props.fo\n                \n                log.debug('rcb_zx module=%s,channel=%s [%s] formula params ：k=%s,f0=%s,freq=%s', moduleNo, channelId, childDevice.id, k,  f0,  freq)\n                if k ~= nil and f0 ~= nil then\n                    Phy = k * (f0 ^ 2 - freq ^ 2) -- + kt * (temp - t0)\n                end\n                local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n                local data1 = {\n                    data = {\n                        frequency = freq,\n                        temperature = temperature,\n                        physicalvalue = Phy\n                    },\n                    device = childDevice.id,\n                    type = 1,\n                    time=recordTime\n                }\n                log.debug('rcb_zx  m=%s,c=%s  data1=%s', tostring(moduleNo), tostring(channelId), json.encode(data1))\n                table.insert(out.data, data1)\n            end\n        end\n    end\n\n    asend_HttpResponse()\n    local result=json.encode(out)\n  log.debug('rcb_zx  m=%s, result=%s', tostring(moduleNo),result)\n    ctx:notify(result)\nend\n\nasend_HttpResponse = function()\n    ack = {type = 'http', code = 200, body = '{}'}\n    ctx:asend(ack)\nend\n\n--获取传感器信息\nfunction getDeviceInfo(datachannel)\n    log.debug('rcb_zx 查询子设备 datachannel=%s', datachannel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local deviceChannel = subdevice.uplink.props.channel\n            if tostring(deviceChannel) == tostring(datachannel) then\n                --log.debug('rcb_zx c=%s,2匹配到设备=%s', deviceChannel, json.encode(subdevice))\n                return subdevice\n            else\n            end\n        end\n        log.debug('rcb_zx has no device datachannel=%s', datachannel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('rcb_zx has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n	INLINE	2019-04-25 15:00:54.171+08	2019-05-15 14:55:53.478+08	2019-04-25	\N
03803ee6-5a4a-4ef6-8356-de63aef554b3	fs_oxy	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_oxy:load script %s, moduleId=%s", "fs_oxy", device.moduleId or "[nil]")   \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_oxy 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_oxy 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_oxy:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_oxy:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x03);             -- 1: 2 设备类型，温湿度=1\t\t\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x08, BE);  -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'B',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_oxy:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\t\tlocal data2 = iota.hexToFloat(data, 7, 'B',6);\n\t\tlocal data3 = iota.hexToFloat(data, 11, 'B',6);\n\t\tlocal data4 = iota.hexToFloat(data, 15, 'B',6);\n\n\n\t\tout.data = {\n\t\tso2 = data1,\n\t\tnox = data2,\n\t\tpm_25 = data3,\n\t\tpm10 = data4\n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('fs_oxy:开始校验数据%s',data)\n    local startbyte = iota.hexToByte(data,0,'B');\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n  \tlocal endbyte = iota.hexToByte(data,31,'B');\n    if data == nil or string.len(data)/2 ~= 32 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte  ~= 0xDF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_oxy:数据校验通过')\n    return true\n--crc\nend\n\nonData=function(msg)\nend\n\n	INLINE	2019-06-18 15:30:37.119+08	2019-06-18 15:30:37.119+08	2019-06-18	\N
e62cf4a9-9e5c-434a-9a65-08ec2efd13fb	fs_stink	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_stink:load script %s, moduleId=%s", "fs_stink", device.moduleId or "[nil]")   \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_stink 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_stink 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_stink:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_stink:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n\tlog.debug("fs_stink:result=%s",result)\n\tctx:notify(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x03);             -- 1: 2 设备类型，温湿度=1\t\t\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x08, BE);  -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'L',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_stink:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n    local hour = os.date("%H")\n    local min = os.date("%M")\n\tlocal acqnumber = tonumber(hour)\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\t\tlocal data2 = iota.hexToFloat(data, 7, 'B',6);\n\t\tlocal data3 = iota.hexToFloat(data, 11, 'B',6);\n\t\tlocal data4 = iota.hexToFloat(data, 15, 'B',6);\n\n\n\t\tout.data = {\n\t\tNH3 = data1,\n\t\tH2S = data2,\n\t\tVOCS = data3,\n\t\tOdor = data4,\n      \t_acq_number\t= acqnumber \n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('fs_stink:开始校验数据%s',data)\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n    if data == nil or string.len(data)/2 ~= 21 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif  devicetype ~= 0x03  then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToByte(data,0,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToByte(data,0,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_stink:数据校验通过')\n    return true\n--crc\nend\n\nonData=function(msg)\nend\n\n	INLINE	2019-06-18 15:40:06.778+08	2019-07-17 20:49:56.236+08	2019-06-18	\N
317e6f80-0f02-444c-b8ef-eb079795edb5	shjy_temp_BK—DC100	\N	沉降	1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	\n--老版本协议 数据9个字节 新版本13个 加了4个字节的温度   本协议是老版本\nstart=function()\n    log.debug("start %s, moduleId=%s", "jm_lvdt_1550.lua",device.props.moduleId or 'nil')\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x23, endian)                   \n    buff=iota.appendHexByte(buff, 0x2b, endian)  \n\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK—DC100 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("shjy_temp_BK—DC100 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\n\t\n    if string.len(moduleNo)<6 then\n        local strlen=6-string.len(moduleNo)\n    \tfor i=1,strlen do\n          moduleNo='0'..moduleNo\n       end  \n    end\n     buff= buff..toHexStr(string.sub(moduleNo,1,1)) \n  buff= buff..toHexStr(string.sub(moduleNo,2,2))\n  buff= buff..toHexStr(string.sub(moduleNo,3,3))\n  buff= buff..toHexStr(string.sub(moduleNo,4,4))\n  buff= buff..toHexStr(string.sub(moduleNo,5,5))\n  buff= buff..toHexStr(string.sub(moduleNo,6,6))\n  log.debug("shjy_temp_BK—DC100 moduleId=%s send: %s",moduleNo or 'nil',buff)\n    ok,resp=ctx:ssend(buff,60000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    \tlog.debug("shjy_temp_BK—DC100 moduleId=%s result= %s",moduleNo,result)\n    \t ctx:done(result)\n    else\n        log.debug("shjy_temp_BK—DC100 moduleId=%s 数据采集失败 resp=%s",moduleNo or 'nil',resp)\n    end\n   \nend\n\nunmarshall=function(hex,moduleStr)\n    --245961485949634863   moduleId=1\n    --"level":1095.05,\n   \n    log.debug("shjy_temp_BK—DC100 moduleId=%s recv: %s",moduleStr or 'nil',hex)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        \n \n    \n       local level=((tonumber(string.sub(hex,3,4),16)-48)*16+(tonumber(string.sub(hex,5,6),16)-48)+(tonumber(string.sub(hex,7,8),16)-48)*16*16*16+(tonumber(string.sub(hex,9,10),16)-48)*16*16)/100\n      local level0=((tonumber(string.sub(hex,11,12),16)-48)*16+(tonumber(string.sub(hex,13,14),16)-48)+(tonumber(string.sub(hex,15,16),16)-48)*16*16*16+(tonumber(string.sub(hex,17,18),16)-48)*16*16)/100\n       out.data = {\n        level=level,\n        level0=level0\n       }\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    log.debug("shjy_temp_BK—DC100 moduleId=%s 校验数据 data= %s",moduleCheck,data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        log.debug('shjy_temp_BK—DC100:模块%s数据校验失败Data is nil or invalid length[%s] hex=%s',moduleCheck,string.len(data)/2,data)\n        return false\n    end\n  log.debug('CMD=%s',iota.hexToByte(data,0,'B'))\n    if iota.hexToByte(data,0,'B') ~= 0x24 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n    \tlog.debug('shjy_temp_BK—DC100:模块%s数据校验失败 Hex CMD False hex=%s',moduleCheck,data)\n        return false\n    end\n\n    log.debug("shjy_temp_BK—DC100 moduleId=%s 校验通过 data= %s",moduleCheck,data)\n    return true\n--crc\nend\n\n  -- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n	INLINE	2019-05-15 10:50:15.394+08	2019-05-24 08:48:53.476+08	2019-05-15	\N
2e277b9b-effb-448b-bf14-4b257466ef22	shyf_temp_DZ-IGASQ	\N		1.0	6879ee09-86fe-48d2-a3ff-bd5395d66a27	6879ee09-86fe-48d2-a3ff-bd5395d66a27	f	6879ee09-86fe-48d2-a3ff-bd5395d66a27	Lua	start=function()\n    ok=ctx:asend("010203")\nend\n--2000001001022000203200340123013204450201025505002100003500000000000000000000000000d2a2\nonData=function(hex)\n    local moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n    log.debug("shyf_temp_DZ-IGASQ [%s] 收到数据=%s", moduleNo,hex)\n\tlog.debug("shyf_temp_DZ-IGASQ [%s] device =%s",moduleNo, json.encode(device))\n    local out={\n        data ={},\n        result = {}\n    }\n\t\n\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n\tif ErrorCode then\n\t\tlog.debug('shyf_temp_DZ-IGASQ [%s] 数据有效',moduleNo)\n\t\t\n\t\tlocal Concentration={}\n\t\tlocal index=0\n\t\tfor i=1,9,1 do\t\t\n\t\t\tindex=9+(i-1)*2\n\t\t\tif i==8 then   --温度（4字节）\n\t\t\t\tlocal temp_str=string.sub(hex,51,54)..string.sub(hex,49,50)\n\t\t\t\tlog.debug("shyf_temp_DZ-IGASQ [%s]  temp_str=%s",moduleNo,temp_str)\n\t\t\t\t\n\t\t\t\tConcentration[i]=tonumber(temp_str,16)*(-1)^tonumber(string.sub(hex,47,48),16)               \n\t\t\telseif i==9 then\n\t\t\t    \n\t\t\t\tindex=index+2\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t\telse\n\t\t\t\tConcentration[i]=iota.hexToUShort(hex,index,'L',3);\n\t\t    end\n\t\tend\n\t   log.debug("shyf_temp_DZ-IGASQ [%s]  Concentration=%s",moduleNo,json.encode(Concentration))\n\t   local k=0\n\t    for k_index,v in pairs(Concentration) do\n\t\t\n\t\t\tif k_index==1 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ug/m3"; --PM2.5\n\t\t\t   elseif k_index==2 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ug/m3"; --PM10\n\t\t\t   elseif k_index==3 then\n\t\t\t   k=1.0\n\t\t\t   unit = "ppb"; --SO2\n\t\t\t   elseif k_index==4 then\n\t\t\t   k=1.0\n\t\t\t   unit = "dB"; --noise\n\t\t\t   elseif k_index==5 then\n\t\t\t   k=0.001\n\t\t\t   unit = "ppm"; --CO\n\t\t\t   elseif k_index==6 then\n\t\t\t   k=1\n\t\t\t   unit = "ppb"; --O3\n\t\t\t   elseif k_index==7 then\n\t\t\t   k=0.001\n\t\t\t   unit = "ppm"; --TVOC\n\t\t\t   elseif k_index==8 then\n\t\t\t   k=0.1\n\t\t\t   unit = "℃"; --温度\n\t\t\t   elseif k_index==9 then\n\t\t\t   k=0.1\n\t\t\t   unit = "℃"; --湿度\n\t\t\t   else\n\t\t\t   log.debug('shyf_temp_DZ-IGASQ  [%s] 无匹配数据类型',moduleNo)\t\t    \n\t\t\tend\n\t\t\tConcentration[k_index]=tonumber(string.format("%0.3f",v*k))\t\n\t\t\tlog.debug('shyf_temp_DZ-IGASQ  [%s] k_index=%s ,Concentration[k_index]=%s',moduleNo,k_index,Concentration[k_index])\n           \n\t\tend\n\t\t\n\t\tout.data = {\n                PM25=Concentration[1],  --pm2.5\n\t\t\t\tPM10=Concentration[2],\n\t\t\t\tSO2=Concentration[3],\n\t\t\t\tnoise=Concentration[4],\n\t\t\t\tCO=Concentration[5],\n\t\t\t\tO3=Concentration[6],\n\t\t\t\tTVOC=Concentration[7],\n\t\t\t\ttemperature=Concentration[8],\n\t\t\t\thumidity=Concentration[9],\n        }\n\t\tlog.debug('shyf_temp_DZ-IGASQ  [%s] out.data=%s',moduleNo,json.encode(out.data))\t\n\telse\n        out.result = {code = errorcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    ctx:notify(resultData)\nend\n\nIsValid=function(data,moduleNoStr)\n    log.debug("shyf_temp_DZ-IGASQ [%s] 校验数据=%s",moduleNoStr,data)\n\tlocal datalength=string.len(data)\n\tif string.len(data)/2 ~=43 then\n\t    errormsg = 'data length is wrong'\n        errorcode = 1001\n\t\tlog.debug("shyf_temp_DZ-IGASQ [%s] data length is wrong[%s] ",moduleNoStr,string.len(data)/2)\n        return false\n    end\n\t\n   log.debug("shyf_temp_DZ-IGASQ [%s] 校验通过",moduleNoStr)\n    return true\nend\n\n\n\n	INLINE	2019-06-25 11:40:08.738+08	2019-06-25 11:41:04.515+08	2019-06-25	\N
59a4437d-8333-47be-9f2a-72705db84885	testHttpget	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('td_http 设备原型=%s' ,json.encode(device))\n    local req = {\n        type = 'http',\n        url = 'http://gtd.vp.cn/dataChart/queryShareDataList.do?username=tdjgjkjc&password=TJU123456&idType=0&dataType=0&startTime=2020-12-31+16:39:17&endTime=2020-12-31+17:49:17&idCode=0000e7e8c8ca', \n        method = 'post',\n\n    }\n\treq.ContentType = 'application/json'\n\t\n    local moduleNo=device.props.moduleNo\n\tlog.debug('lk_http moduleNo=%s', moduleNo)\n\n\n\t--local aa=os.time()\n\t--local endTime = os.date('%Y-%m-%d %H:%M:%S', aa)\n   -- log.debug('td_http:  endTime=%s', endTime)\n   -- local beginTimestr = aa-4200\n\t--local startTime = os.date('%Y-%m-%d %H:%M:%S', beginTimestr)\n    --log.debug('td_http:  startTime=%s', startTime)\n\t\n\t\n    --req.url=string.format(req.url,startTime,endTime,moduleNo)\n\tlog.debug('lk_http url=%s', req.url)\n  \n    local ok,ack = ctx:ssend(req, 4000)\n  log.debug('lk_http ok=%s,ack=%s', ok,json.encode(ack))\n end	INLINE	2021-01-04 09:18:27.77+08	2021-01-04 09:38:38.516+08	2021-01-04	\N
0b43e37d-9ca2-428c-b636-ea381d1645e3	T420	\N	采集单元-T420（16通道）	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--//20180809新增项目资料提交\\上海隼星--边坡监测--康飞\\T440振弦采集仪接口协议.docx\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\nstart = function()\n    -- log.debug("load script %s, moduleId=%s", "sxcg_3400.lua", device.props.moduleId or "[nil]")\n    -- log.debug("sxcg_3400:".."LUA: ctx is =%s", json.encode(device))\n    ok, resp = ctx:asend('01020304')\n    -- log.debug("sxcg_3400:".."测试下发01020304正常")\nend\n\nonData =\n    function(hex)\n    log.debug('sxcg_3400收到数据=%s', hex)\n    log.debug('sxcg_3400 device =%s', json.encode(device))\n    log.debug('sxcg_3400subdevices  data is =%s', json.encode(device.dnlinks[1].devices))\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    local ModuleChar = 'M=' --振弦\n    local DigChar = 'Di' --测斜\n    local VoltageChar = 'V=' --电压\n    local CurrentChar = 'I=' --电流\n    local WaterChar = 'Wa' --水文\n    local ResistanceChar = 'R=' --电阻(差阻)\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = toStrHex(hex)\n        log.debug('sxcg_3400:sData是 %s', sData)\n        --获取子字符串表\n        local allResponse = Split(sData, '\\n')\n        --移除表内的“”和nil\n        for k, v in ipairs(allResponse) do\n            if v == '' or v == nil then\n                table.remove(allResponse, k)\n                log.debug('sxcg_3400:' .. '表内的“”和nil 移除元素为 ' .. tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k, v in ipairs(allResponse) do\n            local singleData = Split(v, ' ')\n            --移除单类数据中的空\n            for kk, vv in ipairs(singleData) do\n                if vv == '' or vv == nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove(singleData, kk)\n                end\n            end\n\n            if k > 1 then\n                local temp1 = singleData[2 + 1]\n                local moudleStr = string.sub(singleData[2 + 1], 2, 2)\n                local moduleNo = tonumber(moudleStr)\n                --解析单条数据\n                for kkk, vvv in ipairs(singleData) do\n                    log.debug('sxcg_3400:遍历解析单条数据 键=' .. tostring(kkk) .. ' 值=' .. tostring(vvv))\n\n                    local type_sensor = string.sub(string.gsub(singleData[kkk], '%d', ''), 1, 2)\n                    log.debug('sxcg_3400: type_sensor=' .. type_sensor)\n                    if string.len(type_sensor) >= 2 then\n                        --频率\n                        if type_sensor == ModuleChar then\n                            --local length = string.len(singleData[kkk]) - 3\n                            local tempLength = string.len(singleData[kkk + 1]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Module = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local tempData = string.sub(singleData[kkk + 1], 4, 4 + tempLength)\n                            local Frequency = math.sqrt(Module * 1000)\n                            local Temp\n                            local Phy\n                            if IsNumberic(tempData) then\n                                Temp = tonumber(tempData)\n                            else\n                                Temp = 0\n                            end\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s原型childDevice=%s', moduleNo, channelNo, json.encode(childDevice))\n                                log.debug('sxcg_3400:(振弦)子设备 模块%s,通道%s deviceId=%s ', moduleNo, channelNo, tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:振弦模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                    else\n                                        log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                        local Fi = Module --经过厂家确认  公式带入的是模数\n                                        Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                elseif childDevice.uplink.capabilities[1].formula.metaid == 'a6bc41f8-f061-4714-acd6-7b839a4559fc' then\n                                    --角度公式\n                                    log.debug('sxcg_3400 振弦转角度 当前的Frequency是:%s,%s', Frequency, Temp)\n                                    local Fi = Module --经过厂家确认  公式带入的是模数\n                                    Phy = (Fi * 10 - 125000) / 3600\n                                    log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                else\n                                    log.debug('sxcg_3400 模块%s,通道%s当前无匹配公式', moduleNo, channelNo)\n                                end\n                            else\n                                log.debug('sxcg_3400:(振弦)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            --log.debug("sxcg_3400:振弦模块：公式%s",device.formula)\n\n                            local data1 = {\n                                data = {\n                                    frequency = tonumber(string.format('%0.3f', Frequency)),\n                                    temperature = tonumber(string.format('%0.2f', Temp)),\n                                    physicalvalue = tonumber(string.format('%0.3f', Phy))\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            log.debug('sxcg_3400:(振弦) Phy结果=%s', Phy)\n                            table.insert(out.data, data1)\n                        end\n\n                        --电压\n                        if type_sensor == VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Voltage = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local Phy\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(电压)子设备原形childDevice=%s', json.encode(childDevice))\n                                log.debug('sxcg_3400:(电压)子设备deviceId: ' .. tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:电压模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Voltage=%s', moduleNo, channelNo, Voltage)\n                                    else\n                                        log.debug('sxcg_3400 当前的Voltage=%s', Voltage)\n                                        local Fi = Voltage\n                                        Phy = K1 * Fi - (K1 * Fo)  + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                end\n                            else\n                                log.debug('sxcg_3400:(电压)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            local data1 = {\n                                data = {\n                                    voltage = Voltage,\n                                    physicalvalue = Phy\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            table.insert(out.data, data1)\n                        end\n\n                        --电流\n                        if type_sensor == CurrentChar then\n                            local length = string.len(singleData[kkk]) - 3\n                            local channelNo = tonumber(string.sub(singleData[kkk], 2, 2), 16)\n                            local Current = tonumber(string.sub(singleData[kkk], 4, -1))\n                            local Phy\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n                            local deviceId\n                            if childDevice ~= nil then\n                                deviceId = childDevice.id\n                                log.debug('sxcg_3400:(电流)子设备原形childDevice=%s', json.encode(childDevice))\n                                log.debug('sxcg_3400:(电流)子设备deviceId: ' .. tostring(deviceId))\n                                local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                    ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                                    local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                    log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                    if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                        Phy = nil\n                                        log.debug('sxcg_3400   模块%s,通道%s 当前的Current=%s', moduleNo, channelNo, Current)\n                                    else\n                                        log.debug('sxcg_3400 当前的Current=%s', Current)\n                                        local Fi = Current\n                                        Phy = K1 * Fi - (K1 * Fo) + Po\n                                        log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                    end\n                                end\n                            else\n                                log.debug('sxcg_3400:(电流)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                            end\n\n                            local data1 = {\n                                data = {\n                                    current = Current,\n                                    physicalvalue = Phy\n                                },\n                                device = deviceId,\n                                type = 1\n                            }\n                            table.insert(out.data, data1)\n                        end\n\n                        --水文\n                        if type_sensor == WaterChar then\n                            local Phy\n                            if string.sub(singleData[kkk], 1, 6) == 'Water1' then\n                                local waterData = GetSWData(singleData, kkk)\n\n                                for i = 1, 8, 1 do\n                                    --获取通道设备deviceId\n                                    local childDevice = getDeviceInfo(moduleNo, i)\n                                    --\n                                    local deviceId\n                                    if childDevice ~= nil then\n                                        deviceId = childDevice.id\n                                        log.debug('sxcg_3400:(水文)子设备原形childDevice=%s', json.encode(childDevice))\n                                        log.debug('sxcg_3400:(水文)子设备deviceId: ' .. tostring(deviceId))\n                                        local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                        if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                            ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                            local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                            local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                            local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                            local To = childDevice.uplink.capabilities[1].formula.props.To\n                                            local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                            log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                            if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                                Phy = nil\n                                                log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                            else\n                                                log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                                local Fi = waterData[i]\n                                                Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                                log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                            end\n                                        end\n                                    else\n                                        log.debug('sxcg_3400:(水文)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(i))\n                                    end\n                                    local data1 = {\n                                        data = {\n                                            waterdata = waterData[i],\n                                            physicalvalue = Phy\n                                        },\n                                        device = deviceId,\n                                        type = 1\n                                    }\n                                    table.insert(out.data, data1)\n                                end\n                            end\n                        end\n\n                        --测斜\n                        if type_sensor == DigChar then\n                            local Phy\n                            local Temp\n                            if (string.sub(singleData[kkk], 1, 3) .. string.sub(singleData[kkk], 5, 5)) == 'Dig=' then\n                                local channelNo = tonumber(string.sub(singleData[kkk], 4, 4), 16)\n                                local Inclination = tonumber(string.sub(singleData[kkk], 6, -1))\n                                --获取通道设备deviceId\n                                local childDevice = getDeviceInfo(moduleNo, channelNo)\n                                local deviceId\n                                if childDevice ~= nil then\n                                    deviceId = childDevice.id\n                                    log.debug('sxcg_3400:(测斜)子设备原形childDevice=%s', json.encode(childDevice))\n                                    log.debug('sxcg_3400:(测斜)子设备deviceId: ' .. tostring(deviceId))\n                                    local formulaId = childDevice.uplink.capabilities[1].formula.metaid\n                                    if formulaId == '904ee015-6df9-4626-90bd-2c3cc6e78f63' then\n                                        ----P=K1*(Fi-Fo)+Kt(Ti-To)+Po\n                                        local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n                                        local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                                        local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                                        local To = childDevice.uplink.capabilities[1].formula.props.To\n                                        local Po = childDevice.uplink.capabilities[1].formula.props.Po\n                                        log.debug('sxcg_3400:电流模块： 模块%s,通道%s 公式参数=k1=%s,Fo=%s,To=%s,Po=%s', moduleNo, channelNo, K1, Fo, To, Po)\n                                        if K1 == nil or Fo == nil or Kt == nil or To == nil or Po == nil then\n                                            Phy = nil\n                                            log.debug('sxcg_3400   模块%s,通道%s 当前的Frequency是:%s,%s', moduleNo, channelNo, Frequency, Temp)\n                                        else\n                                            log.debug('sxcg_3400 当前的Frequency是:%s,%s', Frequency, Temp)\n                                            local Fi = Inclination\n                                            Phy = K1 * Fi - (K1 * Fo) + Kt * (Temp - To) + Po\n                                            log.debug('sxcg_3400 模块%s,通道%s当前的Phy是:%s', moduleNo, channelNo, Phy)\n                                        end\n                                    end\n                                else\n                                    log.debug('sxcg_3400:(测斜)子设备deviceId为nil:m=%s,c=%s', tostring(moduleNo), tostring(channelNo))\n                                end\n\n                                local data1 = {\n                                    data = {\n                                        inclination = Inclination,\n                                        temperature = Temp,\n                                        physicalvalue = Phy\n                                    },\n                                    device = deviceId,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('sxcg_3400resultData=%s,hex=%s', json.encode(out), hex)\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo =\n    function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("sxcg_3400 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('sxcg_3400 查询传感器的下行设备 json.encode(child.dnlinks)=%s,=={}？=%s', json.encode(child.dnlinks), json.encode(child.dnlinks) == '{}')\n            --log.debug("sxcg_3400:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                --log.debug("sxcg_3400 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n            else\n                --log.debug("sxcg_3400 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('sxcg_3400:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('sxcg_3400: m=%s,c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('sxcg_3400:' .. '校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length = getIndex(alldata)\n    local data = string.sub(alldata, 1, length * 2)\n    --log.debug("data:"..data)\n    local plu16 = {}\n    plu16[0] = string.sub(data, -8, -7)\n    plu16[1] = string.sub(data, -6, -5)\n    --local plusSum16Hi, plusSum16Lo = iota.hexCheckPlusSum16(data, 0, length - 4)\n    -- log.debug("sxcg_3400:".."plu16[0]是："..plu16[0])\n    -- log.debug("sxcg_3400:".."plu16[1]是："..plu16[1])\n    -- log.debug("sxcg_3400:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("sxcg_3400:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n    --   errormsg = 'checkPlusSum16 is false'\n    -- errcode = 1004\n    -- return false\n    -- end\n\n    log.debug('sxcg_3400:' .. '校验通过')\n    return true\nend\n\ngetIndex = function(data) --用于IsValid\n    local len = string.len(data) / 2\n    for n = 1, len do\n        local value = string.sub(data, 2 * n - 1, 2 * n)\n        if value == '0a' then\n            return n\n        end\n    end\n    return 0\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nGetSWData = function(sData, j)\n    local SW = {}\n\n    local Water1 = tonumber(string.sub(sData[j], 8, -1))\n    local Base1 = tonumber(string.sub(sData[j + 1], 7, -1))\n\n    local Water2 = tonumber(string.sub(sData[j + 2], 8, -1))\n    local Base2 = tonumber(string.sub(sData[j + 3], 7, -1))\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j + 4], 13, -1))\n    local Direction = tonumber(string.sub(sData[j + 5], 11, -1))\n\n    local AverWinSpeed = tonumber(string.sub(sData[j + 6], 14, -1))\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j + 7], 18, -1))\n\n    local NowDirection = tonumber(string.sub(sData[j + 8], 11, -1))\n    local AccRain = tonumber(string.sub(sData[j + 9], 9, -1))\n\n    SW[1] = Water1 / 100 + Base1\n    SW[2] = Water2 / 100 + Base2\n    SW[3] = MaxWinSpeed\n    SW[4] = Direction\n    SW[5] = AverWinSpeed\n    SW[6] = RealTImeWinSpeed\n    SW[7] = NowDirection\n    SW[8] = AccRain\n    return SW\nend	INLINE	2019-09-29 16:16:30.277+08	2019-10-15 10:59:47.697+08	2019-09-29	\N
f24b6f4a-a267-40b7-aca0-1971f916bd81	test_humi_mop_09	\N		1.0	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f	f9927e7e-69c2-439e-916f-4981e6821dfa	Lua	start = function()\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\n    --log.debug('test_humi_mop_0901  测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n    log.debug('test_humi_mop_0901    device=%s', json.encode(device))\n    local deviceId = device.props.device_id\n    --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n    local paramStr = capability.param\n    log.debug('test_humi_mop_0901   [%s] capability=%s', deviceId, paramStr)\n    local paramData = json.decode(paramStr)\n\n    if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n        local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n        if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断，由于涉及到是否redis存储成功\n            sendMsgToDeviceTopic(app_cmd)\n        end\n    else\n        log.debug('test_humi_mop_0901   [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n    end\n    local result = json.encode(out)\n    ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n    --将指令发送到  设备的topic\n    local dev_topic = msg.ID .. '_device_rece'\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n    log.debug('test_humi_mop_0901   [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n    local cmd = {}\n    cmd.from = 'server'\n    cmd.ID = id\n    cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n    cmd.code = code\n    cmd.cmd = cmdType\n    if cmdType == 267 then --app查询功能\n        if code == 4 then --定时任务查询\n            local redis_key = cmd.ID .. '_air_taskconfig'\n            local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n            --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n            local array_taskConfigs = {}\n            for _, v in pairs(redis_taskConfigs) do\n                if v.looptype ~= nil then\n                    v.looptype = byte2bin(v.looptype)\n                    --taskID转为实际id\n                    local real_tsakId = tonumber(_)\n                    --app查询得到实际的id\n                    local jia_tsakId = tonumber(v.task, 16)\n                    local hexEn = string.format('%02x', tonumber(v.en))\n                    v.task = tonumber(real_tsakId)\n                    v.en = hexEn\n                end\n                table.insert(array_taskConfigs, v)\n            end\n\n            out.data.params = array_taskConfigs\n            log.debug('test_humi_mop_0901 [%s]  out.data.params=%s', cmd.ID, json.encode(array_taskConfigs))\n        elseif code == 15 then --报警阈查询   设备只有PM2.5\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n            out.data.params = redis_alarmConfigs\n        end\n    elseif cmdType == 523 then\n        if code == 1 then --初始化 id  即修改id\n            cmd.id = newconfig\n        elseif code == 2 then --修改电源开关\n            cmd.params = newconfig\n        elseif code == 3 then --风速挡位设置\n            cmd.params = newconfig\n        elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改  或者使能\n            --taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串  '10',  平台需要转换成16\n            if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n                newconfig.looptype = getlooptype(newconfig.looptype)\n            end\n            local isDouble = true\n            local isTask_on = true\n            local isTask_off = true\n            if newconfig.time_on == nil then\n                isDouble = false\n                isTask_on = false\n            end\n            if newconfig.time_off == nil then\n                isDouble = false\n                isTask_off = false\n            end\n            if newconfig.task == 255 then\n                --255  任务号自增\n\n                newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n            else\n                --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n                local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n                newconfig.task = doubleTaskId\n            end\n            cmd.params = newconfig\n        elseif code == 6 then --定时删除设置\n            newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后，在监听协议中更新redis\n            cmd.params = newconfig\n        elseif code == 7 then --杀菌灯开关控制\n            cmd.params = newconfig\n        elseif code == 8 then --负离子开关控制\n            cmd.params = newconfig\n        elseif code == 9 then --加湿器开关控制\n            cmd.params = newconfig\n        elseif code == 10 then --加湿器挡位设置\n            cmd.params = newconfig\n        elseif code == 11 then --设备模式控制\n            cmd.params = newconfig\n        elseif code == 12 then --童锁开关控制\n            cmd.params = newconfig\n        elseif code == 13 then --远程升级 app发起 然后  平台redis存储升级包 ，平台与设备交互，上报升级状态\n            binCache.params = getPackageList(newconfig.binBuff)\n            binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n            --将升级包存储 redis\n            local redis_key_bin = cmd.ID .. '_air_bin'\n            local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n            if isSetOK == true then\n                log.debug('test_humi_mop_0901   [%s][code=%s] 准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n                local dataObject = cmd\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 513加湿器  257  净化器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.hard = getBinHard(newconfig.binName)\n                 --防止为空16=0x10 初始版本\n                dataObject.params.soft = getBinSoft(newconfig.binName)\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                dataObject.params.CRC = binCache.params.CRC\n                log.debug('test_humi_mop_0901   [%s][code=%s]  准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n                sendMsgToTopic(dataObject, 'device')\n            else\n                log.debug('test_humi_mop_0901   [%s][code=%s]  存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n            end\n        elseif code == 15 then --报警阈值设置   设备只有PM2.5\n            cmd.params = newconfig\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            --同时平台留存一份 后续app or设备 同步所有定时任务用\n            setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n            log.debug('test_humi_mop_0901   [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n        elseif code == 17 then --加湿器 恒湿设置\n            cmd.params = newconfig\n        end\n    end\n\n    return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    log.debug('test_humi_mop_0901  进入固件升级发送函数  [%s][code=%s]', msg.ID, msg.code)\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    log.debug('test_humi_mop_0901  固件升级发送函数  [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    log.debug('test_humi_mop_0901   [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    local cmd_code = cmd_obj.code\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n\n    local tb = redis_taskConfigs[tsakId]\n    return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('test_humi_mop_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 then --添加或修改\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('test_humi_mop_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('test_humi_mop_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('test_humi_mop_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        redis_taskConfigs[tsakId] = nil\n        log.debug('test_humi_mop_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('test_humi_mop_0901   [%s][code=%s]  r1=%s[%s],r1ok=%s  key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('test_humi_mop_0901   [%s][code=%s]    taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('test_humi_mop_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n    return r1ok\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr) / 2\n    local count = len / 1024\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n    --添加整个文件校验\n    local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n    local allcrc = string.sub(allAppendCrc16, -4, -1)\n    packageParams.CRC = tonumber(allcrc, 16)\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n    local redis_key = cmd.ID .. '_air_taskconfig'\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n    for i = 2, 15, 2 do --01  只有1 且1是便捷任务  23  45  67  89 ab cd ef  是7组其他任务\n        local task_k = tostring(i)\n        if redis_taskConfigs[task_k] == nil then\n            local taskid_new = i --默认是单任务的 task\n            local kk\n            if isDouble then --如果是双任务   双任务 以开任务号为准\n                kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n                taskid_new = tonumber(kk, 16)\n            elseif isOn then\n                kk = string.format('%01x', tonumber(task_k)) .. '0'\n                taskid_new = tonumber(kk, 16)\n            elseif isOff then\n                kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n                taskid_new = tonumber(kk, 16)\n            end\n            log.debug('test_humi_mop_0901   自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n            return taskid_new\n        end\n    end\n    return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('test_humi_mop_0901   使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\ngetlooptype = function(str)\n    local slen = string.len(str)\n    local looptype_num = 0\n    if slen == 8 then\n        for i = 0, 7, 1 do\n            local index = -1 * (i + 1)\n            local one = string.sub(str, index, index)\n            --print('one='..one)\n            if one == '1' then\n                looptype_num = looptype_num + 2 ^ i\n            --print('looptype_num='..one)\n            end\n        end\n    end\n    local int_num = tonumber(string.format('%d', looptype_num))\n    return int_num\nend\n\nfunction byte2bin(n)\n    local t = {}\n    for i = 7, 0, -1 do\n        t[#t + 1] = math.floor(n / 2 ^ i)\n        n = n % 2 ^ i\n    end\n    return table.concat(t)\nend\n\ngetBinSoft = function(binName)\n    local soft_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'S' then\n                soft_version = tonumber(string.sub(value, 2, -1))\n                return soft_version\n            end\n        end\n    end\n    return soft_version\nend\n\ngetBinHard = function(binName)\n    local Hard_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'H' then\n                Hard_version = tonumber(string.sub(value, 2, -1))\n                return Hard_version\n            end\n        end\n    end\n    return Hard_version\nend\n\nsplit = function(s, delim)\n    if type(delim) ~= 'string' or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n        local pos = string.find(s, delim, start, true) -- plain find\n        if not pos then\n            break\n        end\n\n        table.insert(t, string.sub(s, start, pos - 1))\n        start = pos + string.len(delim)\n    end\n    table.insert(t, string.sub(s, start))\n\n    return t\nend	INLINE	2020-10-10 10:47:58.776+08	2020-12-02 11:15:54.579+08	2020-10-10	\N
f54ae30e-c52b-4a68-92a6-87a72741467a	shszsj_115	\N		1.0	e2534302-c06d-4ddf-8857-7011bfdde945	e2534302-c06d-4ddf-8857-7011bfdde945	f	e2534302-c06d-4ddf-8857-7011bfdde945	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shszsj_115", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x19, 'L')\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shszsj_115 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n    \n\t\tlocal temperature=iota.hexToFloat(hex,3,'B')\n        out.data = {\n\t\t\n\t\t\ttemperature=tonumber(string.format('%0.1f',temperature))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shszsj_115 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shszsj_115 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-11-05 13:21:57.292+08	2019-11-05 13:22:35.043+08	2019-11-05	\N
1d3ad5d8-27b3-4b70-ac2c-fbd67ddd48cf	yx_liquidLevel_9006	\N		1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--‪D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪--岳晓静\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22（0x16）\n--采集温度的偏移地址为38-39 默认是38（0x26）\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE);  -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);  --功能码  0x03采集        \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n    if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); --  压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); --  温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature))\n\t\t}\n\telse\n        out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\t--[[local checkLen=string.len(data)/2\n    if data == nil or checkLen~= 41  then\n        errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n        errcode = 1002\n        return false\n    end]]--\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据指令≠03')\n        errcode = 1003\n        return false\n    end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n    if moduleNoCheckStr ~= tostring(checkModule) then \t\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2019-08-27 08:56:53.667+08	2020-04-13 13:22:57.822+08	2019-08-27	\N
84196675-5121-45c9-999a-65cddab21183	BKtsqk77	\N		1.0	158a00b4-7170-4f1e-acd7-81e38c57b8da	158a00b4-7170-4f1e-acd7-81e38c57b8da	f	158a00b4-7170-4f1e-acd7-81e38c57b8da	Lua	start = function()\n  log.debug('BKtsqk77 device=>%s', json.encode(device))\nend\n\nonData = function(hex)\n    --主动上传式\n    log.debug('BKtsqk77 Received=>%s', hex)\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n   --- 这个模拟测量的时候用到的方法\n\tlocal hex=HextoStr(hex)   --将16转换成字符串\n    local moduleNoStr = device.uplink.props.module \t\n\tlog.debug("BKtsqk77: 采集仪模块号moduleNoStr=%s",moduleNoStr)\n\t--local subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\t\tlog.debug("BKtsqk77: 码流数据转换成字符串hex=%s",hex)\n    local channelDatas = {}\n    local ErrorCode = IsValid(hex, moduleNoStr)\n\t\n\t\n    if ErrorCode then\n\t\tlocal qkt=string.sub(hex,3,-1)  --去掉开头，\n\t\t log.debug('BKtsqk77:去掉开头的码流qkt=%s', qkt)\n\t\tlocal sp='||'\t--分隔符||\n\t\tlog.debug('BKtsqk77:分割符spsp=%s', sp)\n\t\tlocal sArray=split(qkt,sp)\n\t\tlog.debug('BKtsqk77:分割码流6666sArray=%s', json.encode(sArray))\n\t\t--这里table表中第一个值是空的，k=1  v=空\n\t\t for k,v in pairs(sArray) do\n\t\t log.debug('BKtsqk77:各个传感器的码流v=%s', v)\n\t\t --2/0.000736/0.947368/201911111053/49/##    传感器的码流\n\t\t \n\t\t local sw='/'  --分割符  /  \n\t\t local AArray=split(v,sw)\n\t\t log.debug('BKtsqk77:这个时候得到单个设备的码流的AArray=%s', json.encode(AArray))\n\t\t\t\t for k,vt in pairs(AArray) do\n\t\t\t\t\tlocal wp='_'  --分割符  _\n\t\t\t\t\tlocal AArrayw=split(vt,wp)\n\t\t\t\t\tlog.debug('BKtsqk77:这个时候得到单个设备的码流的通道值AArrayw=%s', json.encode(AArrayw))\n\t\t\t\t\tlocal tdz = tonumber(AArrayw[2])       --得到通道值\n\t\t\t\t\tlog.debug('BKtsqk77:最后截取的通道值是68686769tdz=%s', tdz)\n\t\t\t\t\tlocal childDevice = getDeviceInfo(moduleNoStr, tdz)\n\t\t\t\t\tphysicalvalue = AArray[2] --这个是物理量的值\n\t\t\t\t\tlog.debug('BKtsqk77:各个传感器的物理量11111=%s', physicalvalue)\n\t\t\t\t\tfrequency=AArray[3]  --这个是频率的值\n\t\t\t\t\tlog.debug('BKtsqk77:各个传感器的物理量2222=%s', frequency)\n\t\t\t\t\tif  childDevice~= nil   then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\tlocal data1 = {\n                        data = {\n                            physicalvalue =physicalvalue,\n\t\t\t\t\t\t\tfrequency=frequency\n\t\t\t\t\t\t\t\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n\t\t\t\t\t\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t     end\n\t\t \n\t\t end\n\n\n   else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('BKtsqk77 resultData=%s', resultData)\n    ctx:notify(resultData)\n\n\n\t\n\n\n\t\nend\n\n\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("BKtsqk77 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('BKtsqk77:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n               -- log.debug('BKtsqk77 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('BKtsqk77 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('BKtsqk77:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('BKtsqk77:  subdevices是nil')\n        return nil\n    end\nend\n\nIsValid = function(data, module_device)\n    local datalen = string.len(data)\n\t--or datalen < 46\n    if data == nil  then\n        errormsg = string.format('数据长度无效=%s', datalen)\n        errcode = 1002\n        return false\n    end\n\n    if string.sub(data, 1, 2) ~= '||' or string.sub(data, -2, -1) ~= '##' then\n       errcode = 1003\n       errormsg = string.format('数据帧头帧尾无效')\n       return false\n   end\n\n \n    log.debug('BKtsqk77:校验通过')\n    return true\nend\n\n\n\nsplit=function(input, delimiter)\n    input = tostring(input)\n    delimiter = tostring(delimiter)\n    if (delimiter=='') then return false end\n    local pos,arr = 0, {}\n    for st,sp in function() return string.find(input, delimiter, pos, true) end do\n        table.insert(arr, string.sub(input, pos, st - 1))\n        pos = sp + 1\n    end\n    table.insert(arr, string.sub(input, pos))\n    return arr\nend\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n	INLINE	2019-11-14 14:44:38.04+08	2019-11-27 10:17:32.842+08	2019-11-14	\N
882d3fe2-780a-4da9-adaf-8d1395b022cd	SMTN-M11	\N		1.0	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	f	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	Lua	--北京思莫特\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "SMTN-M11_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("SMTN-M11 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("SMTN-M11 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--下发码流   01 03 00 00 00 1e c5 c2\n\t\tbuff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x1e, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)  \n\t\tlog.debug("SMTN-M11 下发码流111 buff=%s",buff)\n\n\n    ok,resp=ctx:ssend(buff,30000)     --下发的码流\n   \n\tif ok then              --下发是否成功\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n\t\t\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n--01033C000800010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C59E\n\n--01 03 3C 0008 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 C59E\nunmarshall=function(hex,moduleStr)\n  \tlocal out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\tlocal index_485_1 =3  --第一个数据的开头位置\n\tlocal index_485_2 =5  --第二个数据的开头位置\n\t\n\tlog.debug('SMTN-M11 [%s] 000000hex=%s', hex,moduleStr)\n\t\n\tlocal channelDatas = {}  --放数据的\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\t\t\n\t\t--local numsj=iota.hexToShort(hex,2,'B');\n\t---\tlog.debug('SMTN-M11 [%s] 11111111111numsj=%s', numsj)\n\t\t--local numofzx=string.sub(hex, 5, 8)\n\t\t--log.debug('SMTN-M11 [%s] 1111numofzx=%s', numofzx)\n\t\t\n\t\tfor i = 1, 15, 1 do\n\t\t\n\t\t--第一个是纵向移值，第二个是横向移值\n\t\t       local dataCGS={iota.hexToShort(hex, index_485_1+(i - 1) * 4, 'B')/10,iota.hexToShort(hex, index_485_2+(i - 1) * 4, 'B')/10}\n\t\t\t\tchannelDatas[i] = dataCGS\n\t\t\t\tlog.debug('SMTN-M11 [%s] 7878787878channelDatas[i]=%s', json.encode(channelDatas[i]))\n\t\t\n        end\n\t\tlog.debug('SMTN-M11  放数据的地方numsj=%s', json.encode(channelDatas))\n\t\t\n\t\t\n\t\t  local moduleNo=device.uplink.props.module \n\t\tlocal subdevices=device\n\t\t log.debug('SMTN-M11 [%s] 获取采5343654366集仪下子设备列表天天umsj=%s', json.encode(subdevices))\n\t\t\n\t\t--遍历表，从表中取数据\n\t\tfor k, v in pairs(channelDatas) do\n\t\tlog.debug('SMTN-M11   子设备的东西模块号111=%s,通道号=%s', moduleNo,k)\n\t\tlog.debug('SMTN-M11   子设备的通道号和数据222=%s,通道号=%s',json.encode(v),k)\n\t\t\n\t\tlocal childDevice = getDeviceInfo(moduleNo,k)\n\t\tlog.debug('SMTN-M11   取那些111kba=%s',json.encode(childDevice))\n\t\t\n\t\tlocal deviceId\n\t\tif childDevice ~= nil then\n\t\t\n\t\tlocal  Ydisplacement= channelDatas[k][1]   --纵向位移\n\t\tlocal Xdisplacement= channelDatas[k][2]   --横向位移\n\t\t\n\t\t \n\t\t --local phy=kA*(frequency ^ 2 - kFo ^ 2) +kB*(frequency - kFo)\n\t\tdeviceId = childDevice.id\n           log.debug('SMTN-M11:子设备原形childDevice=%s', json.encode(childDevice))\n\t\tlocal data1 = {\n                        data = {\n                            Xdisplacement = Xdisplacement,\n\t                        Ydisplacement= Ydisplacement\n\t\t\t\t\t\t\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\telse\n\t\t\t log.debug('SMTN-M11  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\t\t\n\t\t\t\t\t\n\t\tend\n\t\t\n\t\t--\n\t\t\n\t\t\n\t\tend\n\t\t\n\n       \n       \n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\tlog.debug('SMTN-M11   最后数据的返回=%s',json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('SMTN-M11开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if data == nil or string.len(data) / 2 ~= 65 then\n        errormsg = 'Data is nil or invalidLen=' .. string.len(data) / 2\n        errcode = 1001\n        return false\n    end\n \n    log.debug('SMTN-M11 数据校验通过')\n    return true\n\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n\t\t\t\n\tlog.debug('SMTN-M11   进入采集仪下面的子设备的通道号3434=%s',channelNoId)\n\tlog.debug('SMTN-M11   进入采集仪下面的子设备的模块号号3434=%s',moduleNoId)\n\tlog.debug('SMTN-M11   444进入采集仪下面的子设备的数据=%s',json.encode(device.dnlinks[1].devices))\n    if device.dnlinks[1].devices ~= nil then\n\t\tlog.debug('SMTN-M11   444进入采集仪下面的子设备的数据=%s',json.encode(device.dnlinks[1].devices))\n        log.debug("SMTN-M11 555查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('SMTN-M11:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug("SMTN-M11 666查询m=%s c=%s 子设备的模块号",moduleStrCheck)\n                channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug("SMTN-M11 777查询m=%s c=%s 子设备的通道号",channelStrCheck)\n               -- log.debug('SMTN-M11 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('SMTN-M11 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('SMTN-M11:  m=%s c=%s 匹配到 子设备原形3344343child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('SMTN-M11:  subdevices是nil')\n        return nil\n    end\nend\n\n\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n	INLINE	2019-11-22 09:48:20.449+08	2019-11-27 14:35:14.194+08	2019-11-22	\N
8565ec35-5b7e-4dde-8536-dd450d4c26a0	test_humi_0901	\N		1.0	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f	f9927e7e-69c2-439e-916f-4981e6821dfa	Lua	start = function()\n    --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n    --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n    --local crc16str = string.sub(appendCrc16, -4, -1)\n    --local crc16 = tonumber(crc16str, 16)\n    -- log.debug('test_humi_0901 校验16=%s', crc16)\n    log.debug('test_humi_0901 device=%s', json.encode(device))\n    --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    local receiveStr = mq_body.payload\n    log.debug('test_humi_0901   receiveStr=%s', receiveStr)\n    --解析数据\n    local dataObject = json.decode(receiveStr)\n    log.debug('test_humi_0901  [%s][code=%s]  receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n    if dataObject ~= nil then\n        --判断数据源 是appProxy 还是 device\n        --设备数据类型\n        -- code:0x01 设备信息上报\n        -- code:0x02 心跳上报\n        -- code:0x03 周期上报  设备数据与状态\n        -- code:0x04 报警上报\n        -- code:0x05 时间同步上报\n        if dataObject.from == 'device' then\n            if dataObject.cmd == 1035 and dataObject.result == 0 then\n                if dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n                    --将设置成功的有效任务 存进redis\n                    local newconfig = dataObject.params\n                    taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n                    --将 dataObject 发给 app作为响应\n                    dataObject.params.result = dataObject.result\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 2 then --电源开关\n                    local powerlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.powerlock = powerlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 7 then --杀菌灯开关回应\n                    local uvlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.uvlock = uvlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 10 then --加湿器挡位\n                    local gear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.humigear = gear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠 3恒湿\n                    local mode = dataObject.params.mode\n                    dataObject.params = {}\n                    dataObject.params.mode = mode\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 12 then --童锁开关回应\n                    local childlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.childlock = childlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 13 then --远程升级触发后，设备回应 要第几包，平台按需发送\n                    if dataObject.params.frame == 1 then --设备请求第一包的时候  平台重新获取redis 做缓存\n                        local redis_key_bin = dataObject.ID .. '_air_bin'\n                        --更新 升级 固件 缓存\n                        binCache = getRedisValue_obj(redis_key_bin, dataObject)\n                    end\n                    --升级文件流 缓存,拆解成多个小包\n                    -- binCache.buff = dataObject.params.binBuff\n                    -- binCache.size = string.len(binCache.buff)\n                    -- binCache.params = getPackageList(binCache.buff)\n                    log.debug(\n                        'test_humi_0901  [%s][code=%s]  平台收到 设备升级 回应，准备下发升级包[第%s/%s包]',\n                        dataObject.ID,\n                        dataObject.code,\n                        dataObject.params.frame,\n                        binCache.params.count\n                    )\n\n                    --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2：准备升级3：升级中4：完成升级\n\n                    --设备准备升级 or 升级中 发送固件包\n                    if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n                        if dataObject.params.frame ~= nil then\n                            dataObject.from = 'server'\n                            dataObject.cmd = 523\n                            local frameIndex = dataObject.params.frame\n                            dataObject.params = {}\n                            dataObject.params.type = 2 --服务器正在升级设备\n                            dataObject.params.frame = frameIndex\n\n                            local sub_bin = binCache.params.subList[frameIndex]\n\n                            if sub_bin ~= nil then\n                                dataObject.params.bin = sub_bin.buff\n                                dataObject.params.len = sub_bin.len\n                                dataObject.params.crc16 = sub_bin.checkint\n                            end\n\n                            --数据发送到appProxy    binCache.params.count\n                            sendMsgToTopic(dataObject, 'device')\n                        end\n                        dataObject.params.updateState = 'isworking' --升级中\n                    elseif dataObject.params.sign == 4 then\n                        if dataObject.params.msg == 2 then\n                            dataObject.params.updateState = 'ok' -- 完成升级\n                        else\n                            dataObject.params.updateState = 'fail'\n                        end\n                    elseif dataObject.params.sign == 1 then\n            \t\t\t--dataObject.params.updateState = 'ok'\n                        dataObject.params.updateState = 'fail' --先让他们走流程 写死ok\n                    end\n                    dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 17 then --加湿器挡位\n                    local fixhumi = dataObject.params.value\n                    dataObject.params = {}\n                    dataObject.params.fixhumi = fixhumi\n                    sendMsgToTopic(dataObject, 'app')\n                end\n            elseif dataObject.cmd == 63499 then\n                if dataObject.code == 1 then --软硬件 版本主动上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 2 then --心跳上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 3 then\n                    --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n                    if dataObject.params ~= nil then\n                        out.data.temperature = tonumber(string.format('%0.2f', dataObject.params.TEMP))\n                        out.data.humidity = dataObject.params.HUMI\n                        out.data.pm1 = dataObject.params.PM1_0\n                        out.data.pm25 = dataObject.params.PM2_5\n                        out.data.pm10 = dataObject.params.PM10\n                        out.data.ch2o = dataObject.params.CH2O --甲醛\n                        out.data.tvoc = dataObject.params.TVOC --有机气态物质\n                        out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 总雾化水位 唐露芝20200928 qq群确认\n\n                        out.data.powerlock = dataObject.params.power --开关\n                        out.data.windgear = dataObject.params.wind --风速挡位  0:自动,1：1档，2：2档，3：3档， 4：4档\n                        out.data.timcnt = dataObject.params.timcnt --定时个数\n                        out.data.uvlock = dataObject.params.UV --UV杀菌灯开关  1：打开   0：关闭\n                        out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态  1：打开   0：关闭\n                        out.data.humilock = dataObject.params.humista --加湿器开关状态      1：打开   0：关闭\n                        out.data.humigear = dataObject.params.humigear -- 加湿器挡位  1:L1 2:L2 3:L3 4:L4\n                        out.data.wchargelock = dataObject.params.wcharge --无线充电开关  1：打开   0：关闭\n                        out.data.childlock = dataObject.params.chlock --童锁开关状态1：打开   0：关闭\n\n                        out.data.fixhumi = dataObject.params.fixhumi --恒湿开关状态  1：打开 0：关闭\n                        out.data.water = dataObject.params.water --水位感应开关  0:正常 1:缺水\n                        out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠 3恒湿\n                        out.data.hard = dataObject.params.hard --硬件版本号\n                        out.data.soft = dataObject.params.soft --软件版本号\n                    else\n                        log.debug(\n                            'test_humi_0901   [%s][code=%s]  dataObject.params =nil',\n                            dataObject.ID,\n                            dataObject.code\n                        )\n                    end\n                    dataObject.params = out.data\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 then --报警上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 5 then --时间同步 服务器\n                    local timeNow = getTime()\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n                    dataObject.params.date = timeNow\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                elseif dataObject.code == 6 then --定时任务同步 服务器\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n\n                    --读取redis\n                    local redis_key = dataObject.ID .. '_air_taskconfig'\n                    local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n                    local array_taskConfigs = {}\n                    for _, v in pairs(redis_taskConfigs) do\n                        --如果是 同时开关任务，设备同步的时候，任务号要分开 丢弃\n                        --if v.time_on and v.time_off then\n                           -- v.task = transferDoubleTaskId(v.task, true, false, false)\n                        --end\n                        table.insert(array_taskConfigs, v)\n                    end\n                    dataObject.params = array_taskConfigs\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                end\n            end\n        elseif dataObject.from == 'app' then --测试使用  实际app不会发\n            if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n                log.debug('test_humi_0901 [%s][code=%s] 平台收到 app升级 通知，准备 通知 设备', dataObject.ID, dataObject.code)\n                --升级文件流 缓存,拆解成多个小包\n                --binCache.buff = dataObject.params.binBuff\n                --binCache.params = getPackageList(binCache.buff)\n                binCache.params = getPackageList(dataObject.params.binBuff)\n                binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                --数据发送到appProxy    周期上报的数据 code= 13和\n                log.debug(\n                    'test_humi_0901   [%s][code=%s][binCache.updateTime=%s]  开始通知 设备 升级',\n                    dataObject.ID,\n                    dataObject.code,\n                    binCache.updateTime\n                )\n                sendMsgToTopic(dataObject, 'device')\n            end\n        elseif dataObject.from == 'clear' then\n            clearTask(dataObject.ID)\n        else\n            log.debug('test_humi_0901  [%s][code=%s]  非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n        end\n    else\n        log.debug('test_humi_0901 dataObject =nil')\n    end\n\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('test_humi_0901 result=%s', json.encode(out))\n    if next(out.data) ~= nil or next(out.result) ~= nil then\n        ctx:notify(resultData)\n    end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 2048\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n        --发给app的时候  软件版本比如17要改成1.1\n        if msg.params.soft ~= nil then\n            msg.params.soft = softNumbertoVersion(msg.params.soft)\n      \t\tmsg.params.hard = softNumbertoVersion(msg.params.hard)\n        end\n        msg.params.bin = nil --节省资源\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug(\n        'test_humi_0901   [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n        msg.ID,\n        msg.code,\n        binCache.updateTime,\n        topic,\n        msgStr,\n        ok,\n        ack\n    )\nend\n\nackToDevice = function(rawDataObject)\n    local topic = rawDataObject.ID .. '_device_rece'\n    rawDataObject.from = 'server'\n    rawDataObject.packid = os.time()\n    rawDataObject.cmd = 64011\n    rawDataObject.params = 'null'\n    rawDataObject.result = 0\n    local msgStr = json.encode(rawDataObject)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug(\n        'test_humi_0901   服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n        rawDataObject.ID,\n        topic,\n        msgStr,\n        ok,\n        ack\n    )\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetTime = function()\n    local timenum = os.time()\n    local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n    --空气净化器最后还要带 周几下去\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    --local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n\n    local week = getWeek_comm(year, month, day)\n    local recordTime = string.format('%s %s', dateStr, week)\n    return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n    if m == 1 or m == 2 then\n        m = m + 12\n        y = y - 1\n    end\n    local m1, _ = math.modf(3 * (m + 1) / 5)\n    local m2, _ = math.modf(y / 4)\n    local m3, _ = math.modf(y / 100)\n    local m4, _ = math.modf(y / 400)\n\n    local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n    local weekTab = {\n        ['0'] = 1,\n        ['1'] = 2,\n        ['2'] = 3,\n        ['3'] = 4,\n        ['4'] = 5,\n        ['5'] = 6,\n        ['6'] = 0 --周日是 0\n    }\n    return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('test_humi_0901   [%s][code=%s]  [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug(\n            'test_humi_0901   [%s][code=%s]  [getRedis]  taskConfig读取失败  r1=%s,r1ok=%s',\n            logObject.ID,\n            logObject.code,\n            r1,\n            r1ok\n        )\n    end\n    return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug(\n        'test_humi_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s',\n        cmd_obj.ID,\n        tsakId,\n        redis_taskConfigs,\n        json.encode(redis_taskConfigs),\n        type(redis_taskConfigs)\n    )\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 or cmd_code == 5 then --添加或修改  或取消任务\n        --如果是自增任务的设备返回 先解析任务id\n        if taskConfig.time_on then --只要on大于0 必然 任务id >16\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 1, 1)\n            -- 避免单任务取到0的情况\n            log.debug('test_humi_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        elseif taskConfig.time_on == nil then\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 2, 2)\n            -- 避免单任务取到0的情况\n            log.debug('test_humi_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        end\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('test_humi_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('test_humi_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug(\n            'test_humi_0901   [%s][code=%s] redis_taskConfigs=%s',\n            cmd_obj.ID,\n            cmd_obj.code,\n            json.encode(redis_taskConfigs)\n        )\n    elseif cmd_code == 6 then --删除任务\n        local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n        redis_taskConfigs[real_tsakId] = nil\n        log.debug('test_humi_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n    for key, value in pairs(redis_tasks) do\n        if value.task == delete_id then\n            return key\n        end\n    end\n    log.debug('home_humi_0901   无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug(\n        'test_humi_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s,key=%s,setValue=%s',\n        logObject.ID,\n        logObject.code,\n        r1,\n        r1ok,\n        key,\n        setValue\n    )\n    return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('test_humi_0901    任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n    local clear_key = string.format('%s_air_taskconfig', deviceID)\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    local r1, r1ok = redis.set(clear_key, clearValue)\n    --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n    local hex_str = string.format('%02x', soft_num)\n    local s10 = string.sub(hex_str, 1, 1)\n    local s1 = string.sub(hex_str, 2, 2)\n    local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n    return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n    local k = string.format('%s,%s', signid, msgid)\n    local msgs = {\n        ['1,1'] = '不支持升级',\n        ['1,2'] = '已是最新版本',\n        ['1,3'] = '其他错误',\n        ['2,1'] = '升级A区域',\n        ['2,2'] = '升级B区域',\n        ['3,1'] = '校验错误重发',\n        ['3,2'] = '校验正确发下一帧',\n        ['4,1'] = '升级出错',\n        ['4,2'] = '升级成功'\n    }\n    return msgs[k]\nend	INLINE	2020-10-10 10:48:16.211+08	2020-12-10 10:27:49.161+08	2020-10-10	\N
a2ce557c-f74e-451f-a870-a06438208343	fs_ss2	\N		1	1b2d8739-627e-4b7d-9480-3eee6e9396fe	1b2d8739-627e-4b7d-9480-3eee6e9396fe	f	1b2d8739-627e-4b7d-9480-3eee6e9396fe	Lua	start=function()\n    --log.debug("fs_microPower_2 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fs_microPower_2 devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fs_microPower_2 recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        --log.debug("fs_microPower_2 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        --log.debug("fs_microPower_2 datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n            log.debug("fs_microPower_2 解析dat r1= %s", dathex)\n            ParseFileDat(dathex)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                --log.debug("fs_microPower_2 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                --log.debug("fs_microPower_2 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            --log.debug("fs_microPower_2 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("fs_microPower_2  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("fs_microPower_2 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\t--log.debug("fs_microPower_2 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToUShort(data,22,'B')\n\t\t\tlog.debug("fs_microPower_2 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_2 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            --log.debug("fs_microPower_2 devices crc =%s",crc)\n      \t\t--log.debug("fs_microPower_2 dtuid time2")\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("fs_microPower_2 crc %s r1 %s setting%s" ,crc,r1,setting)\n        \t\tlog.debug("fs_microPower_2 dtuid time")\n        \t\tlocal hour= os.date("%H")\n        \t\tlog.debug("fs_microPower_2 dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fs_microPower_2 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fs_microPower_2  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fs_microPower_2 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_2 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fs_microPower_2 deviceid:%s 设备休眠",device.uplink.props.id)\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlog.debug("fs_microPower_2 sensorCount=%s",sensorCount)\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fs_microPower_2 powerstr=%s",powerstr)\n      \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\t\t\t\t\n                firststart=firststart+datalength\t\t\n\t\t\t\tlog.debug("fs_microPower_2 firststart=%s",firststart)\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n\t\t\t\tlog.debug("fs_microPower_2 sensorType=%s",sensorType)\t\t\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n\t\t\t\tlog.debug("fs_microPower_2 module=%s  channel=%s",module,channel)\t\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\t\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fs_microPower_2 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n              \t\t\t\trst.data.temperature = nil              \n              \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 振弦 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\t--log.debug("fs_microPower_2 acqnum %s",  acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\t--log.debug("fs_microPower_2 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_2 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n         \t\t\t if protocalCode==9101 then     --拉线位移\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 位移 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n\t\t\t\t\t\t--log.debug("fs_microPower_2 yc ")\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n                  \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_2 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_2 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\t--log.debug("fs_microPower_2 dataresult %s", json.encode(out))\n            end \n            log.debug("fs_microPower_2 out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            --log.debug("fs_microPower_2: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("fs_microPower_2 : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_2 subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("fs_microPower_2 : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("fs_microPower_2 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_2  baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fs_microPower_2  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n                --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                --buff=iota.appendHexWord(buff, 0x4248, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\tlog.debug("fs_microPower_2  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("fs_microPower_2  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fs_microPower_2 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then          \tlog.debug("fs_microPower_2 subdevice=%s",subdevice)      \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_microPower_2 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_microPower_2 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("fs_microPower_2 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fs_microPower_2 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("fs_microPower_2  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("fs_microPower_2 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("fs_microPower_2 begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        --log.debug("fs_microPower_2 finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_microPower_2 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_2 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_microPower_2 cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("fs_microPower_2 not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    --log.debug("fs_microPower_2 len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        --log.debug("fs_microPower_2 te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    --log.debug("fs_microPower_2 sum %s", sum)\n   return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n        return "00000000"\n    end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数：22.8125 转成二进制10110.1101，左移4位 1.01101101\n    --E=4 ，再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n	INLINE	2020-11-05 09:18:57.918+08	2020-11-05 09:26:24.818+08	2020-11-05	\N
c215dabb-ce81-4a73-944f-e8c239a45a80	bjzhtk_01	\N		1.0	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	f	10b1641f-9368-4783-ab0f-85301fbe0b57	Lua	start = function()\n    --log.debug('bjzhtk_01 start moudleid=%s', device.props.pointId or 'nil')\n    local req = {\n        type = 'http',\n        url = '', --http://123.57.47.163:8008/eelink/api/getGHDatas\n        method = 'get'\n    }\n    local endTimestr=os.time()\n\tlocal endTime = os.date('%Y%m%d%H%M%S', endTimestr)\n    local beginTimestr = endTimestr-300\n\tlocal beginTime = os.date('%Y%m%d%H%M%S', beginTimestr)\n    req.url = device.props.dataUrl .. '?code=' .. device.props.code .. '&address=' .. device.props.address .. '&start=' .. beginTime .. '&end=' .. endTime\n    log.debug('bjzhtk_01:  url=%s', req.url)\n    log.debug('bjzhtk_01:设备原型device=%s' ,json.encode(device))\n\n    req.ContentType = 'application/json'\n\n  \n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('bjzhtk_01:  ok=%s', ok)\n    else\n        log.debug('bjzhtk_01:  ok=%s,token=%s', ok, ack.body)\n    end\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\t\n\t\t\tif not ok or ack == nil then\n\t\t\t\tout.result = {\n\t\t\t\t\tcode = 1002,\n\t\t\t\t\tmsg = 'timeout'\n\t\t\t\t}\n\t\t\telse --OK\n\t\t\t\tif ack.code == 200 and ack.body ~= '' then -- http应答\n\t\t\t\t\tlocal dataTable = json.decode(ack.body)\n\t\t\t\t\t  log.debug('bjzhtk_01:  dataTable=%s', dataTable)\n                    local alldataTables = dataTable.data\n\t\t\t\t\n                    log.debug('bjzhtk_01:  alldataTables=%s', json.encode(alldataTables))\n\t\t\t\t\n\t\t\t\t\tlocal moduleNo = device.uplink.props.module\n\t\t\t\t\tlog.debug('bjzhtk_01:  moduleNo=%s', moduleNo)\n                    for k, v in ipairs(alldataTables) do\n                        log.debug('bjzhtk_01 k=%s, value=%s', k, json.encode(v))\n                        local moduleNostr = v.address\n\t\t\t\t\t\t--if tostring(moduleNo)==tostring(moduleNostr) then\n                        local alldataTable = v.report\n\t\t\t\t\t\tlog.debug('bjzhtk_01:  alldataTable=%s', json.encode(alldataTable))\n\t\t\t\t\t\tfor kk, vv in ipairs(alldataTable) do\n                            log.debug('bjzhtk_01 kk=%s, value=%s', kk, json.encode(vv))\n                         \n                                local signal =tonumber(string.sub(vv.signal,1,-2))\n                                local voltage = tonumber(vv.voltage)/1000\n                                local sensorStatus = tonumber(vv.sensorStatus)\n\t\t\t\t\t\t\t\t   local anglex = tonumber(vv.angleX)\n                                local angley = tonumber(vv.angleY)\n                                local anglez = tonumber(vv.angleZ)\n\t\t\t\t\t\t\t\t   local accelerationx\t = tonumber(vv.accelerationX)\n                                local accelerationy\t = tonumber(vv.accelerationY)\n                                local accelerationz = tonumber(vv.accelerationZ)\n\t\t\t\t\t\t\t\tlocal timenow=(vv.collectTime)\n\t\t\t\t\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo,1)\t\n\t\t\t\t\t\t\t\tlog.debug('bjzhtk_01  childDevice=%s',json.encode(childDevice))  \n\n\t\t\t\t\t\t\tif\tchildDevice~=nil  then\n                                local data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t             \n\t\t\t\t\t\t                signal = signal,\n\t\t\t\t\t\t\t\t\t\tvoltage=voltage,\n\t\t\t\t\t\t\t\t\t\tsensorStatus=sensorStatus,\n\t\t\t\t\t\t\t\t\t\tanglez=anglez,\n\t\t\t\t\t\t\t\t\t\tanglex = anglex,\n                                        angley = angley,\n\t\t\t\t\t\t\t\t\t\taccelerationx=accelerationx,\n\t\t\t\t\t\t\t\t\t\taccelerationy=accelerationy,\n\t\t\t\t\t\t\t\t\t\taccelerationz=accelerationz\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\ttime=timenow,\n                                    device=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1 \t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t   \n                                table.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tlog.debug("bjzhtk_01:  out=%s",json.encode(out))\n\t\t\t\t\t\t\t--return out\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tend     \n                    end\n\t\t\t\tend        \n\t\t\tend \n\t\t\t   ctx:done(json.encode(out))\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("bjzhtk_01:  subdevices是nil")\n    return nil\n    end\nend\n\n\n	INLINE	2020-07-03 15:21:48.25+08	2020-07-22 10:16:32.812+08	2020-07-03	\N
72c2b126-5e58-47eb-89ee-fe0b05c628b6	FSQZY_file_transfer	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('FSQZY_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('FSQZY_file_transfer  recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("FSQZY_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('FSQZY_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('FSQZY_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --log.debug('FSQZY_file_transfer  content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                    log.debug('FSQZY_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height =jsondata.RV[3]--,\n                                --eastingDiff = 1000*jsondata.RV[4],\n                                --northingDiff = 1000*jsondata.RV[5],\n                                --heightDiff = 1000*jsondata.RV[6]\n                               \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    log.debug('FSQZY_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n    log.debug('FSQZY_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(data_moduleid) then\n                log.debug('FSQZY_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n        \t\tlog.debug('FSQZY_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n            end\n        end\n        log.debug('FSQZY_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('FSQZY_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-11-05 14:17:46.551+08	2020-07-31 16:43:32.318+08	2019-11-05	\N
789632f0-828c-4e10-992b-03b466bd7bb4	njxtkj_1406_zx	\N	巡天科技四通道采集仪	1.0	a59371d0-7a5c-473a-83f2-41b31b9096e1	a59371d0-7a5c-473a-83f2-41b31b9096e1	f	a59371d0-7a5c-473a-83f2-41b31b9096e1	Lua	--//04 项目资料/2017-05/南京基泰/四通道模块通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n可用函数包:\nlog: 日志\nconvertor: 转换\nconn: 链接\n全局变量:\nctx: (只读)\ndevice => {}   //设备信息\nprotocol=> {}  //协议信息\ninterface=> {} //接口信息\nssend: 同步发送数据\nasend: 异步发送数据\ndone: 完成处理.\nnotify: 通知结果\n]]\n\nstart=function ()\n\t\tlog.debug("start %s, ctx=%s", "geot_1406_ZX.lua",json.encode(device.props.moduleId))\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("njxtkj_1406_zx 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("njxtkj_1406_zx 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n\t\n\t    --ff6100010014830102032030213122322333f51a\n\t\tbuff=iota.appendHexByte(buff, 0xFF, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x61, endian)\n        buff=iota.appendHexWord(buff, moduleNo, endian) -- 模块号                \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x14, endian)\n        buff=iota.appendHexByte(buff, 0x83, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x01, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x20, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x30, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x21, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x31, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x22, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x32, endian)\t\n\t\tbuff=iota.appendHexByte(buff, 0x23, endian)\t\t\t\n\t\tbuff=iota.appendHexByte(buff, 0x33, endian)\t\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok=ctx:asend(buff)\n   log.debug("njxtkj_1406_zx:下发完成buff=%s",buff)\nend\n--moduleId=98 通道1  通道2  通道3  通道4\n--ff6000620027100144595bd8cc024456de1600036494187c4011648ae3c74512649a99054211648ae3c74512649a99054211648ae3c74512649a990542116444e59d5d126444e59d5d0480\n--前3组0 \n--第4组\n--"frequency": 1355.3293337783257,\n--"temperature": 1836.917603\nonData=function (hex)\t\n\tlog.debug("njxtkj_1406_zx Received=>%s",hex)\n\tlocal out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal ErrorCode = IsValid(hex)\n\tif ErrorCode then\n\t\tlocal moduleNo = iota.hexToShort(hex,2,'B')\n\t\tlog.debug("njxtkj_1406_zx:moduleNo=%s",moduleNo)\n\t\t\t\t--local moduleNo=1\n\t\tlocal IDX_DIRECTION_X=27;\n\t\t\n\t\tfor i=0,3,1 do\n\t\t\t local vibrate = iota.hexToFloat(hex, IDX_DIRECTION_X + i*2 * 6,'L');\n\t\t\t local Frequency = math.sqrt(vibrate * 1000);\n             local Temp = iota.hexToFloat(hex, IDX_DIRECTION_X + (i*2 + 1) * 6,'L');\n\t\t\t --循环插入单通道数据表\n\t\t\t \n\t\t\t--获取通道设备deviceId \n             local channelNo=i+1\n             log.debug("njxtkj_1406_zx:模块号=%s,通道号=%s",moduleNo,channelNo)\n             local childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\t\t\t--\n             local deviceId\n             if childDevice~=nil then\n               \tdeviceId=childDevice.id\n                log.debug("njxtkj_1406_zx:(振弦)子设备原形childDevice=%s",json.encode(childDevice))\n              \tlog.debug("njxtkj_1406_zx:(振弦)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t--if childDevice.device.formula=="P=K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt(Ti-To)" then  --公式目前无法获取\n                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n           \t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n           \t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("njxtkj_1406_zx:(振弦)子设备:m=%s,c=%s：公式参数=%s,%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To,Kt)\n                    if K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n                        Phy=nil\n                   \t\tlog.debug("njxtkj_1406_zx:模块号=%s,通道号=%s  参数无效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                    else\n                  \t\tlog.debug("njxtkj_1406_zx:模块号=%s,通道号=%s  参数有效 当前的Frequency是:%s,Temp是%s",moduleNo,channelNo,Frequency,Temp)\n                        local Fi=vibrate\n         \t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n                        log.debug("njxtkj_1406_zx:模块号=%s,通道号=%s 当前的Phy是:%s",moduleNo,channelNo,Phy)\n                    end \n\t\t\t\t--else\n\t\t\t\t--log.debug("geot_1406_ZX:(振弦)子设备:m=%s,c=%s device.formula为nil"..tostring(moduleNo),tostring(channelNo))\n               -- end\n             else\n                log.debug("njxtkj_1406_zx (振弦)子设备:m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n            end\n\t\t\tlocal data1={\n\t\t\t            data={\n\t\t\t\t\t\t\tfrequency=tonumber(string.format("%5.3f",Frequency)),\n\t\t\t\t\t\t\ttemperature=tonumber(string.format("%5.3f",Temp)),\n                  \t\t\tphysicalvalue=tonumber(string.format("%5.3f",Phy)),\n\t\t\t\t\t\t\t},\n\t\t\t\tdevice=deviceId,\n        \t\t\t\ttype=1 ,\n\t\t\t}\n\t\t\ttable.insert(out.data,data1)\t\t \n\t\tend\t\t\t\t\t\t\t\t\t\t\t\n\telse\n\t\tout.result = {code=errcode,msg=errormsg} \n\tend\n\tlocal resultData =json.encode(out)\n   log.debug("njxtkj_1406_zx resultData=%s",resultData)\n\tctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("njxtkj_1406_zx 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("njxtkj_1406_zx:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("njxtkj_1406_zx 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("njxtkj_1406_zx 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("njxtkj_1406_zx:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("njxtkj_1406_zx:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function (data)\n\tlog.debug('njxtkj_1406_zx:开始校验数据%s',data)\n    if data == nil or string.len(data)/2 ~= 75 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n        return false\n    end\n\n\tif iota.hexToByte(data,0,'B') ~= 0xFF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\t\n    log.debug('njxtkj_1406_zx:校验通过')\n\treturn true\n\t\nend	INLINE	2019-08-27 09:52:48.146+08	2019-08-27 15:33:39.262+08	2019-08-27	\N
4f321706-bd7a-449d-bdb1-45b1985db560	njgye_yb	\N		1.0	55ecba2d-f3da-4ebb-b58d-7cc16522faad	55ecba2d-f3da-4ebb-b58d-7cc16522faad	f	55ecba2d-f3da-4ebb-b58d-7cc16522faad	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "njgye_yb.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\n   \n    buff=iota.appendHexWord(buff, 0x01, endian)\n\tbuff=iota.appendHexByte(buff, 0x0e, endian)\n\t\tbuff=iota.appendHexByte(buff, 0x01, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0x02, endian)\n\t\t\t\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\t\t\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n    buff=iota.appendHexWord(buff, 0, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexWord(buff, 0, endian)  \n    buff=iota.appendHexWord(buff, 0, endian)  \t-- 4: 指令: 0x01 = 采集\n    \tlocal lcr_str = CS(buff)                   -- 5: CRC\n\t\tbuff=iota.appendHexWord(buff, lcr_str, endian)  \t-- 4: 指令: 0x01 = 采集\n\t\tbuff='4654' .. buff\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==38) then\n\t    local symbol=string.sub(hex,27,28)\n\t\tlocal lcrs=tonumber(string.sub(hex,29,34),16)\n\t\tlocal lcrss=tonumber('1000000',16)\n\t\tlog.debug("njgye_yb lcrs是:%s",lcrs)\n        local physicalvalue\t = iota.hexToInt(hex,13,'B')/10\n\t\tif symbol=='00' then\n\t\t  physicalvalue=physicalvalue\n\t\telseif symbol=='ff' then\n\t\t\n\t\t\tphysicalvalue=(lcrs-lcrss)/10\n\t\tend\n        \n       \n        out.data = {\n            physicalvalue\t=physicalvalue\t        \n            \n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n    return value\nend \n \n\n	INLINE	2020-10-19 14:43:47.837+08	2020-11-05 11:46:03.796+08	2020-10-19	\N
bedc480a-4a97-488a-a948-b0a7713bdf92	rtu_disater	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("rtu_disater start , ctx=")\nend\n\n\nonData=function(hex)\n    log.debug("rtu_disater Data=%s",json.encode(hex.payload))\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\tlocal a=hex.payload\n    log.debug("rtu_disater a=%s",a)\n\tlocal aa=toHexStr(a)\n    log.debug("rtu_disater aa=%s",aa)\n    local b=string.sub(aa,7,-1)\n\tlocal bb=HextoStr(b)\n    log.debug("rtu_disater bb=%s",bb)\n\tlocal js=json.decode(bb)\n    --log.debug("rtu_disater js=%s",js)\n    local dataTable = js['datapoints']\n\tlog.debug("rtu_disater dataTable=%s",json.encode(dataTable))\n\tif dataTable~=nil then\n    for k,v in ipairs(dataTable) do\n        local deviceinfo=v.name\n\t\t--log.debug("rtu_disater deviceinfo=%s",deviceinfo)\n\t\tlocal alldata=v.points\n\t\t--log.debug("rtu_disater alldata=%s",json.encode(alldata))\n\t\tlocal cmd=Split(deviceinfo,'_')\n\t\tlocal moduleNo = cmd[1]\n\t\t--log.debug("rtu_disater moduleNo=%s",moduleNo)\n\t\tlocal channelNo =cmd[2] \n\t\t--log.debug("rtu_disater channelNo=%s",channelNo)\n\t    \n\t\t\n\t\tfor kk,vv in ipairs(alldata) do\n\t\t\tlocal timestr = tonumber(vv.at)/1000\n\t\t\tlog.debug("rtu_disater channelNo=%s",channelNo)\n\t\t\tlocal T = os.date('%Y-%m-%dT%H:%M:%S+08:00', timestr)\n\t\t\tlog.debug("rtu_disater T=%s",T)\n\t\t\tlocal datavalue=vv.value\n\t   \n\t\t\tlocal childDevice=getDeviceInfos(moduleNo,channelNo)\n\t\t\tlog.debug("rtu_disater childDevice=%s",json.encode(childDevice))\n\t\t\tif childDevice~=nil and childDevice ~= {} then \n\t   \n\t\t\tlog.debug("rtu_disater sensor=%s",childDevice.props.sensortype)\n\t\t\tif childDevice.props.sensortype=="cx" then   --测斜\n\t\t\t\tlocal datavaluetab=Split(datavalue,',')\n\t\t\t\t--log.debug("rtu_disater cx=")\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tanglex = tonumber(datavaluetab[1]),\n\t\t\t\t\t\tangley= tonumber(datavaluetab[2])\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T    \n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\tend\n\t\t\t--[[if childDevice.props.sentype=="rainfall" then   --雨量\n\t\t\t\tlog.debug("rtu_disater rainfall=%s,T=%s",valuestr,T)\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tphysicalvalue = tonumber(datavalue)\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T\n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("rtu_disater rainfall=%s",json.encode(data1))\n\t\t\tend\t]]--\n\t\t\tif childDevice.props.sensortype=="standard485" then   \n\t\t\t\t--log.debug("rtu_disater standard485=%s,T=%s",valuestr,T)\n\t\t\t\tlocal data1 ={\n\t\t\t\t\tdata={\n\t\t\t\t\t\tphysicalvalue = tonumber(datavalue)\n\t\t\t\t\t},\n\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=T\n\t\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("rtu_disater standard485=%s",json.encode(data1))\n\t\t\tend\t\n    \n\t\t\tend\n\t\tend\n\t      \n\tend \n\telse\n\treturn nil\n\tend\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("rtu_disater result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId)  then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("cdaj_wy:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2020-08-27 15:44:14.507+08	2020-11-26 16:03:29.604+08	2020-08-27	\N
3628b3d2-595b-4889-a7a6-8b68f2953389	jdrk_smoke_2019	\N		1.0	4a675a7d-e35c-478e-b8f1-ae01437c8281	4a675a7d-e35c-478e-b8f1-ae01437c8281	f	4a675a7d-e35c-478e-b8f1-ae01437c8281	Lua	--‪D:\\SVN\\201907项目\\烟感安心云3.0\\485型光电感烟火灾探测报警器说用说明书.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "jdrk_smoke_2019.lua",json.encode(device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module \n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("jdrk_smoke_2019,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n--010300030001740a\n--01030200017984\n--0正常  1 报警\nunmarshall=function(hex,moduleNoStr)\n    log.debug("jdrk_smoke_2019 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local alarmCode =iota.hexToUShort(hex,3,'B')\n    \n        out.data = {           \n            alarmCode=alarmCode\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("jdrk_smoke_2019 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,deviceModule)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 7 then\n        errormsg = string.format('无效的数据长度=%s≠7',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(deviceModule) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,deviceModule)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2019-07-31 10:02:10.943+08	2019-07-31 10:12:48.9+08	2019-07-31	\N
1754774a-4f79-43b6-a352-99329d760806	hzyy_http1	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    log.debug('hzyy_http1   device=%s', json.encode(device))\n\tlog.debug('hzyy_http1   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_http1', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_http1 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    \n\tlocal sn=bodypkg['sn']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\tlocal tilt_z_init=bodypkg['tilt_z_init']\n\tlocal tilt_y_init=bodypkg['tilt_y_init']\n\tlocal tilt_x_init=bodypkg['tilt_x_init']\n\t\n\tlocal tilt_x_cur=bodypkg['tilt_x_cur']\n\tlocal tilt_z_cur=bodypkg['tilt_z_cur']\n    local tilt_y_cur=bodypkg['tilt_y_cur']\n\t\n\tlocal acc_x_cur=bodypkg['acc_x_cur']\n\tlocal acc_z_cur=bodypkg['acc_z_cur']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\t\n\t\t\n\t\tif tonumber(sn) == tonumber(moduleNo) then\n\t\t\tout.data={\n\t\t\t\tacc_x_cur=acc_x_cur,\n\t\t\t\tacc_z_cur=acc_z_cur,\n\t\t\t\tacc_y_cur=acc_y_cur,\n\t\t\t\ttilt_x_init=tilt_x_init,\n\t\t\t\ttilt_y_init=tilt_y_init,\n\t\t\t\ttilt_z_init=tilt_z_init,\n\t\t\t\ttilt_z_cur=tilt_z_cur,\n\t\t\t\ttilt_x_cur=tilt_x_cur,\n\t\t\t\ttilt_y_cur=tilt_y_cur\n\t\t\t\n\t        }\n\t\n\t   \n\t\n\tend\n\n\n        log.debug('hzyy_http1 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2020-09-04 14:54:00.71+08	2020-09-04 14:54:00.71+08	2020-09-04	\N
2f3066b9-d373-419e-9dac-5c0797ed3112	shjy_temp_BK-SW01A	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-SW01A", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-SW01A 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, 'L')\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x01, 'L')\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp_BK-YL01 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length = iota.hexToUShort(hex,3,'B')*1.6/20\n        out.data = {\n\t\t\t--length=tonumber(string.format('%0.1f',rainfall))\n\t\t\tlength=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp_BK-SW01A 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp_BK-SW01A1 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-09-11 10:19:00.533+08	2019-09-11 10:51:51.274+08	2019-09-11	\N
02d1f418-8a60-4813-9f25-40a1661c2e91	Inclination_Sensor	\N	倾斜角度传感器，采集倾斜角 	1.0	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	Lua	--[[\n协议号: 1.0;\n协议名: modbus 倾斜传感器通信协议.\n]]--liankang\nstart=function ()\n    log.debug("start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t \n\tok,resp=ctx:ssend(sendBuff, 9600) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\t-- 8字节. 大字序  0104000000 02 71 cb 模块1\n\t--    模块号\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 1:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 2:  读取寄存器地址00 02\n    buff=iota.appendHexByte(buff, 0x02, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);-- 3:  \t读取寄存器数量00 02\n\tbuff=iota.appendHexByte(buff, 0x02, BE);\n\tlocal temp=buff;--交换CRC16高低位\n\ttemp=iota.appendHexCrc(temp, 'B' ,0)   --CRC16\n\tlocal crcH=string.sub(temp,-2,-1)\n\tlocal crcL=string.sub(temp,-4,-3)\n\tbuff=buff..crcH;\n\tbuff=buff..crcL;\t\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n-- 正确回复  0503040001E422252A  倾斜角度 -2.95度\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tlocal ErrorCode = IsValid(da)\n\tif ErrorCode then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=1001,msg=message}\n\t\tout.data = {}\n\telse\n\t\t\n\t\tlog.debug("数据有效")\n\t\tlog.debug(string.format('decode: %s', data));\n\t\t\n\t\t-- 计算原始值，把16进制子串转换成number类型的值\n\t\tlocal inclinationVal = iota.hexToInt(data, 3, 'B');\t\n\t\t-- 计算结果，倾斜角度\n\t\tlocal inclination = (inclinationVal - 125000) / 360\n\t\t\n\t\tout.data = {\n\t\tinclination = inclination,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction IsValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 8   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 1001\n\t\treturn true\n\tend\n\t\n\treturn false\n\t\nend	INLINE	2019-10-22 16:45:49.018+08	2019-10-23 16:38:25.793+08	2019-10-22	\N
2d86b406-e166-4523-941f-89ceeadbf7f7	home_airclear_0901	\N		1.0	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	Lua	start = function()\n    --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n    --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n    --local crc16str = string.sub(appendCrc16, -4, -1)\n    --local crc16 = tonumber(crc16str, 16)\n    -- log.debug('home_airclear_0901 校验16=%s', crc16)\n    log.debug('home_airclear_0901 device=%s', json.encode(device))\n    --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    local receiveStr = mq_body.payload\n    log.debug('home_airclear_0901   receiveStr=%s', receiveStr)\n    --解析数据\n    local dataObject = json.decode(receiveStr)\n    log.debug('home_airclear_0901  [%s][code=%s]  receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n    if dataObject ~= nil then\n        --判断数据源 是appProxy 还是 device\n        --设备数据类型\n        -- code:0x01 设备信息上报\n        -- code:0x02 心跳上报\n        -- code:0x03 周期上报  设备数据与状态\n        -- code:0x04 报警上报\n        -- code:0x05 时间同步上报\n        if dataObject.from == 'device' then\n            if dataObject.cmd == 1035 and dataObject.result == 0 then\n                if dataObject.code == 2 then --电源开关\n                    local powerlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.powerlock = powerlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 3 then --风速挡位\n                    local windgear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.windgear = windgear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n                    --将设置成功的有效任务 存进redis\n                    local newconfig = dataObject.params\n                    taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n                    --将 dataObject 发给 app作为响应\n                    dataObject.params.result = dataObject.result\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 7 then --杀菌灯开关回应\n                    local uvlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.uvlock = uvlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 8 then --负氧离子\n                    local NegativeO2lock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.NegativeO2lock = NegativeO2lock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 9 then --加湿器开关\n                    local humilock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.humilock = humilock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 10 then --加湿器挡位\n                    local gear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.humigear = gear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠\n                    local mode = dataObject.params.mode\n                    dataObject.params = {}\n                    dataObject.params.mode = mode\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 12 then --童锁开关回应\n                    local childlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.childlock = childlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 13 then --远程升级触发后，设备回应 要第几包，平台按需发送\n                    if dataObject.params.frame == 1 then --设备请求第一包的时候  平台重新获取redis 做缓存\n                        local redis_key_bin = dataObject.ID .. '_air_bin'\n                        --更新 升级 固件 缓存\n                        binCache = getRedisValue_obj(redis_key_bin, dataObject)\n                    end\n                    --升级文件流 缓存,拆解成多个小包\n                    -- binCache.buff = dataObject.params.binBuff\n                    -- binCache.size = string.len(binCache.buff)\n                    -- binCache.params = getPackageList(binCache.buff)\n                    log.debug('home_airclear_0901  [%s][code=%s]  平台收到 设备升级 回应，准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n                    --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2：准备升级3：升级中4：完成升级\n\n                    --设备准备升级 or 升级中 发送固件包\n                    if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n                        if dataObject.params.frame ~= nil then\n                            dataObject.from = 'server'\n                            dataObject.cmd = 523\n                            local frameIndex = dataObject.params.frame\n                            dataObject.params = {}\n                            dataObject.params.type = 2 --服务器正在升级设备\n                            dataObject.params.frame = frameIndex\n\n                            local sub_bin = binCache.params.subList[frameIndex]\n\n                            if sub_bin ~= nil then\n                                dataObject.params.bin = sub_bin.buff\n                                dataObject.params.len = sub_bin.len\n                                dataObject.params.crc16 = sub_bin.checkint\n                            end\n\n                            --数据发送到appProxy    binCache.params.count\n                            sendMsgToTopic(dataObject, 'device')\n                        end\n                        dataObject.params.updateState = 'isworking' --升级中\n                    elseif dataObject.params.sign == 4 then\n                        if dataObject.params.msg == 2 then\n                            dataObject.updateState = 'ok' -- 完成升级\n                        else\n                            dataObject.params.updateState = 'fail'\n                        end\n                    elseif dataObject.params.sign == 1 then\n                        dataObject.params.updateState = 'fail'\n                    end\n                    dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 15 then --报警阈值设置回应\n                    local result = dataObject.result\n                    dataObject.params = {}\n                    dataObject.params.result = result --0代表设置成功\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 17 then --恒湿设置回应\n                    local fixhumi = dataObject.params.value\n                    dataObject.params = {}\n                    dataObject.params.fixhumi = fixhumi\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 19 then --智能开关设定回应\n                    dataObject.params.smartlock = dataObject.params.en\n                    dataObject.params.PM2_5H = dataObject.params.up\n                    dataObject.params.PM2_5L = dataObject.params.down\n                    sendMsgToTopic(dataObject, 'app')\n                end\n            elseif dataObject.cmd == 63499 then\n                if dataObject.code == 1 then --软硬件 版本主动上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 2 then --心跳上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 3 then\n                    --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n                    if dataObject.params ~= nil then\n                        out.data.temperature = tonumber(string.format('%0.1f', dataObject.params.TEMP))\n                        out.data.humidity = dataObject.params.HUMI\n                        out.data.PM2_5H = dataObject.params.PM2_5H --pm2.5上限\n                        out.data.pm25 = dataObject.params.PM2_5\n                        out.data.PM2_5L = dataObject.params.PM2_5L --pm2.5下限\n                        out.data.ch2o = dataObject.params.CH2O --甲醛\n                        out.data.tvoc = dataObject.params.TVOC --有机气态物质\n                        out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 本次开机加湿量 L 唐露芝20200928 qq群确认\n                        out.data.airs = dataObject.params.airs --本次净化量\n\n                        out.data.powerlock = dataObject.params.power --开关\n                        out.data.windgear = dataObject.params.wind --风速挡位  0:自动,1：1档，2：2档，3：3档， 4：4档\n                        --out.data.timcnt = dataObject.params.timcnt --定时个数\n                        out.data.uvlock = dataObject.params.UV --UV杀菌灯开关  1：打开   0：关闭\n                        out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态  1：打开   0：关闭\n                        out.data.humilock = dataObject.params.humista --加湿器开关状态      1：打开   0：关闭\n                        out.data.humigear = dataObject.params.humigear -- 加湿器挡位  1:L1 2:L2 3:L3 4:L4\n                        out.data.clean = dataObject.params.clean --净化开关  1：打开   0：关闭\n                        out.data.childlock = dataObject.params.chlock --童锁开关状态1：打开   0：关闭\n                        out.data.smartlock = dataObject.params.smart --智能开关状态1：打开   0：关闭\n\n                        out.data.USE_M = dataObject.params.USE_M --滤芯使用时间(分钟)\n                        out.data.CLEAN_M = dataObject.params.CLEAN_M --净化时长(分钟)\n                        out.data.qtime = dataObject.params.qtime --设备端的定时关小时数，最大12H\n                        out.data.water = dataObject.params.water --水位感应开关  0:正常 1:缺水\n                        out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠\n                        out.data.hard = dataObject.params.hard --硬件版本号\n                        out.data.soft = dataObject.params.soft --软件版本号\n                    else\n                        log.debug('home_airclear_0901   [%s][code=%s]  dataObject.params =nil', dataObject.ID, dataObject.code)\n                    end\n                    dataObject.params = out.data\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 then --报警上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 5 then --时间同步 服务器\n                    local timeNow = getTime()\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n                    dataObject.params.date = timeNow\n                    sendMsgToTopic(dataObject, 'device')\n                elseif dataObject.code == 6 then --定时任务同步 服务器\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n\n                    --读取redis\n                    local redis_key = dataObject.ID .. '_airclaen_taskconfig'\n                    local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n                    local array_taskConfigs = {}\n                    for _, v in pairs(redis_taskConfigs) do\n                        --如果是 同时开关任务，设备同步的时候，任务号要分开  丢弃\n                        --if v.time_on and v.time_off then  \n                            --v.task = transferDoubleTaskId(v.task, true, false, false)\n                        --end\n                        table.insert(array_taskConfigs, v)\n                    end\n                    dataObject.params = array_taskConfigs\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                end\n            end\n        elseif dataObject.from == 'app' then --测试使用  实际app不会发\n            if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n                log.debug('home_airclear_0901 [%s][code=%s] 平台收到 app升级 通知，准备 通知 设备', dataObject.ID, dataObject.code)\n                --升级文件流 缓存,拆解成多个小包\n                --binCache.buff = dataObject.params.binBuff\n                --binCache.params = getPackageList(binCache.buff)\n                binCache.params = getPackageList(dataObject.params.binBuff)\n                binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                --数据发送到appProxy    周期上报的数据 code= 13和\n                log.debug('home_airclear_0901   [%s][code=%s][binCache.updateTime=%s]  开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n                sendMsgToTopic(dataObject, 'device')\n            end\n        elseif dataObject.from == 'clear' then\n            clearTask(dataObject.ID)\n        else\n            log.debug('home_airclear_0901  [%s][code=%s]  非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n        end\n    else\n        log.debug('home_airclear_0901 dataObject =nil')\n    end\n\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('home_airclear_0901 result=%s', json.encode(out))\n    if next(out.data) ~= nil or next(out.result) ~= nil then\n        ctx:notify(resultData)\n    end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 2048\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n        --发给app的时候  软件版本比如17要改成1.1\n        if msg.params.soft ~= nil then\n            msg.params.soft = softNumbertoVersion(msg.params.soft)\n            msg.params.hard = softNumbertoVersion(msg.params.hard)\n        end\n        msg.params.bin = nil --节省资源\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n    local topic = rawDataObject.ID .. '_device_rece'\n    rawDataObject.from = 'server'\n    rawDataObject.packid = os.time()\n    rawDataObject.cmd = 64011\n    rawDataObject.params = 'null'\n    rawDataObject.result = 0\n    local msgStr = json.encode(rawDataObject)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetTime = function()\n    local timenum = os.time()\n    local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n    --空气净化器最后还要带 周几下去\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    --local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n\n    local week = getWeek_comm(year, month, day)\n    local recordTime = string.format('%s %s', dateStr, week)\n    return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n    if m == 1 or m == 2 then\n        m = m + 12\n        y = y - 1\n    end\n    local m1, _ = math.modf(3 * (m + 1) / 5)\n    local m2, _ = math.modf(y / 4)\n    local m3, _ = math.modf(y / 100)\n    local m4, _ = math.modf(y / 400)\n\n    local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n    local weekTab = {\n        ['0'] = 1,\n        ['1'] = 2,\n        ['2'] = 3,\n        ['3'] = 4,\n        ['4'] = 5,\n        ['5'] = 6,\n        ['6'] = 0 --周日是 0\n    }\n    return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('home_airclear_0901   [%s][code=%s]  [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('home_airclear_0901   [%s][code=%s]  [getRedis]  taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('home_airclear_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 or cmd_code == 5 then --添加或修改  或取消任务\n        --如果是自增任务的设备返回 先解析任务id\n        if taskConfig.time_on then --只要on大于0 必然 任务id >16\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 1, 1)\n            -- 避免单任务取到0的情况\n            log.debug('home_airclear_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        elseif taskConfig.time_on == nil then\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 2, 2)\n            -- 避免单任务取到0的情况\n            log.debug('home_airclear_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        end\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_airclear_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('home_airclear_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('home_airclear_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n        redis_taskConfigs[real_tsakId] = nil\n        log.debug('home_airclear_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n    for key, value in pairs(redis_tasks) do\n        if value.task == delete_id then\n            return key\n        end\n    end\n    log.debug('home_airclear_0901   无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('home_airclear_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n    return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('home_airclear_0901    任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n    local clear_key = string.format('%s_airclaen_taskconfig', deviceID)\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    local r1, r1ok = redis.set(clear_key, clearValue)\n    --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n    local hex_str = string.format('%02x', soft_num)\n    local s10 = string.sub(hex_str, 1, 1)\n    local s1 = string.sub(hex_str, 2, 2)\n    local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n    return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n    local k = string.format('%s,%s', signid, msgid)\n    local msgs = {\n        ['1,1'] = '不支持升级',\n        ['1,2'] = '已是最新版本',\n        ['1,3'] = '其他错误',\n        ['2,1'] = '升级A区域',\n        ['2,2'] = '升级B区域',\n        ['3,1'] = '校验错误重发',\n        ['3,2'] = '校验正确发下一帧',\n        ['4,1'] = '升级出错',\n        ['4,2'] = '升级成功'\n    }\n    return msgs[k]\nend	INLINE	2020-11-09 13:49:02.191+08	2020-12-10 10:30:48.566+08	2020-11-09	\N
a595a911-e18d-44ff-8e67-a303b74de84f	fs-gnss-json	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    local moduleNo = device.uplink.props.id --模块\n    --log.debug('fs_gnss_json [%s] device=%s',moduleNo,jaon.encode(device))\nend\n--说明：gnss设备的URL 是可配置的\n--body 数据里面的字段  product    projectId   deviceId  都是在现场设备上配置写死的 \nonData =function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('fs_gnss_json [%s] device=%s',moduleNo,json.encode(device))\n    log.debug('fs_gnss_json [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    local bodydata = json.decode(bodydataStr)\n    local projectId = bodydata.projectId\n    --local serverIP = '218.3.126.49'\n    --local port = '19700'\n    --local serverTime = getTimeNowStr()\n    local url = httpbody.URL\n    --log.debug('fs_gnss_json [%s] url=%s type=%s', moduleNo, url, type(url))\n\n        --获取实时数据\n\t\tlocal projectId = bodydata.projectId\n        local deviceId = bodydata.deviceId \n  \t\tlocal x = bodydata.x \n  \t\tlocal y = bodydata.y \n  \t\tlocal z = bodydata.z \n  \t\tlocal dx = bodydata.dx \n  \t\tlocal dy = bodydata.dy \n  \t\tlocal dz = bodydata.dz\n  \n        local RTime = bodydata.time            --时刻   \n       \n         \n\n        out.data = {\n            --projectId = projectId,\n            --deviceId = deviceId,\n    \t\tx = x,\n    \t\ty = y,\n    \t\tz = z,\n    \t\tdx = dx,\n            dy = dy,\n            dz = dz\n        }\n        out.time = unixtimestamp(RTime, deviceId)\n  \t\tlocal resultStr=json.encode(out)\n        log.debug('fs_gnss_json [%s] json.encode(out)=%s', moduleNo,resultStr)\n        asend_HttpResponse()\n        ctx:notify(resultStr)\nend\n\nasend_HttpResponse = function()\n    ack = {type = 'http', code = 200, body = '{}'}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_gnss_json datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_gnss_json year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('fs_gnss_json [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend	INLINE	2020-07-23 13:38:34.445+08	2020-08-27 10:44:26.134+08	2020-07-23	\N
e27702ac-0d69-44e4-96bc-ccb3bc117406	file_weight_fs	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n\tlog.debug("weight_file : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\t--log.debug("weight_file : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("weight_file: unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("weight_file : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("weight_file : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("weight_file : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("weight_file deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\t--log.debug("weight_file begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n            -- if pos >= strLen  then\n                -- log.debug("weight_file outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n            -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\t--log.debug("weight_file finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\t--log.debug("weight_file deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\t--log.debug("weight_file not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("weight_file : content  =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("weight_file  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",((tonumber(jsondata.T)-28800000)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='wsd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidity= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("weight_file:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("weight_file  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='cx' then\n\t\t\t\t\t\tlog.debug("weight_file  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tanglex = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tangley = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\ttemperature = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='lf' then\n\t\t\t\t\t\tlog.debug("weight_file  lf=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = jsondata.RV[1] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='pressure' then\n\t\t\t\t\t\tlog.debug("weight_file  pressure=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tvoltage= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n                    if childDevice.props.sensortype=="yc" then --压差\n\t\t\t\t\t\tlog.debug("weight_file  yc=%s",json.encode(childDevice))\n                        local data3 ={\n                            data={\n                                pressure=jsondata.RV[1] or 0,\n                                temperature = jsondata.RV[2] or 0,\n                \t\t\t\tssagee =jsondata.PV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60))        \n                            }\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data3),data3.time,jsondata.T)\t\t\t\n                        table.insert(out.data,data3)\n                    end\t\t\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        log.debug("weight_file  zx=%s",json.encode(childDevice))\n                        local data4={\n                            data={\n                                    physicalvalue = jsondata.PV[1] or 0,\n                                    frequency=jsondata.RV[1],\n                                    temperature=jsondata.RV[2],\n                                    am=jsondata.RV[3],\n                \t\t\t\t\twaterlevel=jsondata.PV[1],\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data4),data4.time,jsondata.T)\t\n                            table.insert(out.data,data4)\n                    end\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='bj' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  bj=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tarch= jsondata.RV[1],\n\t\t\t\t\t\t\t\ttunnelface= jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='laser' then\n\t\t\t\t\t\tlog.debug("ct_file_transfer  laser=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength= jsondata.RV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("ct_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\n\t\t\t\t\tif childDevice.props.sensortype=='qixiangzhan' then\n\t\t\t\t\t\tlog.debug("weight_file  qixiangzhan=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\ttemp= jsondata.RV[1],\n\t\t\t\t\t\t\t\thumidy= jsondata.RV[2],\n\t\t\t\t\t\t\t\tnoise= jsondata.RV[3],\n\t\t\t\t\t\t\t\tpm25= jsondata.RV[4],\n\t\t\t\t\t\t\t\tpm10= jsondata.RV[5]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='weight' then\n\t\t\t\t\t\tlog.debug("fs_file_transfer  weight=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal axies = {\n\t\t\t\t\t\t\t\tjsondata.SRT[9],\n\t\t\t\t\t\t\t\tjsondata.SRT[10],\n\t\t\t\t\t\t\t\tjsondata.SRT[11],\n\t\t\t\t\t\t\t\tjsondata.SRT[12],\n\t\t\t\t\t\t\t\tjsondata.SRT[13],\n\t\t\t\t\t\t\t\tjsondata.SRT[14],\n\t\t\t\t\t\t\t\tjsondata.SRT[15],\n\t\t\t\t\t\t\t\tjsondata.SRT[16],\n\t\t\t\t\t\t\t\tjsondata.SRT[17],\n\t\t\t\t\t\t\t\tjsondata.SRT[18]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tgrossWeight = jsondata.SRT[1],\n\t\t\t\t\t\t\t\tdirection = jsondata.SRT[5],\n\t\t\t\t\t\t\t\taxisnum = jsondata.SRT[3],\n\t\t\t\t\t\t\t\tcmsLength = jsondata.SRT[6],\n\t\t\t\t\t\t\t\tcarType = jsondata.SRT[4],\n\t\t\t\t\t\t\t\ttotalBase = jsondata.SRT[7],\n\t\t\t\t\t\t\t\taxieSpeed = jsondata.SRT[2],\n\t\t\t\t\t\t\t\tcrossRoad = jsondata.M,\n\t\t\t\t\t\t\t\toverload = "无",\n\t\t\t\t\t\t\t\tlicence = jsondata.SRT[8],\n\t\t\t\t\t\t\t\taxieWeight = json.encode(axies)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("fs_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\n\t\t\t\t\tif childDevice.props.sensortype=='fsfx' then\n\t\t\t\t\t\tlog.debug("weight_file  fsfx=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twinddirection = jsondata.RV[1],\n\t\t\t\t\t\t\t\twindspeed = jsondata.RV[2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--log.debug("weight_fileout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("weight_file line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("weight_file: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("weight_file:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\t--log.debug("weight_file: device = %s",json.encode(device))\n\tif device.dnlinks ~= nil then\n    \tlog.debug("weight_file: device.dnlinks ~= nil")\n\t\tlocal subdevices = device.dnlinks[1].devices\n    \tlog.debug("weight_file: subdevices %s",json.encode(subdevices))\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("weight_file:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("weight_file:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("weight_file:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\t--log.debug("weight_file:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("weight_file:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\t--log.debug("weight_file:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\t--log.debug("weight_file:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\t--log.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("weight_file has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("weight_file has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\nfunction unicode2gb2312(src)\n\tlocal map_tb={["冀"] = "BCBD",["豫"] = "D4A5",["云"] = "D4C6",["辽"] = "C1C9",["黑"] = "BADA",["湘"] = "CFE6",["皖"] = "CDEE",\n                  ["鲁"] = "C2B3",["新"] = "D0C2",["苏"] = "CBD5",["浙"] = "D5E3",["赣"] = "B8D3",["鄂"] = "B6F5",["桂"] = "B9F0", \n                  ["甘"] = "B8CA",["晋"] = "BDFA",["蒙"] = "C3C9",["陕"] = "C9C2",["吉"] = "BCAA",["闽"] = "C3F6",["贵"] = "B9F3", \n                  ["粤"] = "D4C1",["青"] = "C7E0",["藏"] = "B2D8",["川"] = "B4A8",["宁"] = "C4FE",["琼"] = "C7ED",["渝"] = "D3E5", \n                  ["京"] = "BEA9",["津"] = "BDF2",["沪"] = "BBA6",["深"] = "C9EE",["学"] = "D1A7",["无"] = "CEDE"}\t\n\tfor k,v in pairs(map_tb) do\n        if v == string.format("%X",tonumber(src,16)) then\n            return k\n        end\n    end\n    return " "\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2019-08-05 09:32:23.776+08	2021-02-02 14:24:55.148+08	2019-08-05	\N
e44f9a31-032c-40f5-9598-6ecbae372f1e	gx_temphumi_7001	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--D:\\SVN\\201907项目\\工讯水准仪3.0\\土壤含水计协议.doc\n--// PMO/02 产品协议/SavoirCloud/01 协议/4月第3周/北京宝力马传感技术有限公司/通讯协议WS302M2A-5温湿度变送器使用说明书V3.0.1(中英)-华为专用-北京宝力马传感技术有限公司.pdf\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "gx_temphumi_7001", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("gx_temphumi_7001 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("gx_temphumi_7001 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("gx_temphumi_7001 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--1203040025001908f3\n--moduleId=18    \n--"humidity": 2.5,\n--"temp": 3.7\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local temp = iota.hexToShort(hex,5,'B')/10.0\n        local humidity = iota.hexToShort(hex,3,'B')/10.0\n       \n        out.data = {\n\t\t\ttemperature=temp,\n\t\t\thumidity=humidity\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('gx_temphumi_7001 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('gx_temphumi_7001 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-08-06 10:56:41.435+08	2019-08-06 13:23:33.233+08	2019-08-06	\N
1c891c2f-0cd5-433b-93f1-11b7f54f9ca0	home_humi_0901	\N		1.0	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	Lua	start = function()\n    --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n    --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n    --local crc16str = string.sub(appendCrc16, -4, -1)\n    --local crc16 = tonumber(crc16str, 16)\n    -- log.debug('home_humi_0901 校验16=%s', crc16)\n    log.debug('home_humi_0901 device=%s', json.encode(device))\n    --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    local receiveStr = mq_body.payload\n    log.debug('home_humi_0901   receiveStr=%s', receiveStr)\n    --解析数据\n    local dataObject = json.decode(receiveStr)\n    log.debug('home_humi_0901  [%s][code=%s]  receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n    if dataObject ~= nil then\n        --判断数据源 是appProxy 还是 device\n        --设备数据类型\n        -- code:0x01 设备信息上报\n        -- code:0x02 心跳上报\n        -- code:0x03 周期上报  设备数据与状态\n        -- code:0x04 报警上报\n        -- code:0x05 时间同步上报\n        if dataObject.from == 'device' then\n            if dataObject.cmd == 1035 and dataObject.result == 0 then\n                if dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n                    --将设置成功的有效任务 存进redis\n                    local newconfig = dataObject.params\n                    taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n                    --将 dataObject 发给 app作为响应\n                    dataObject.params.result = dataObject.result\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 2 then --电源开关\n                    local powerlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.powerlock = powerlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 7 then --杀菌灯开关回应\n                    local uvlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.uvlock = uvlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 10 then --加湿器挡位\n                    local gear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.humigear = gear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠 3恒湿\n                    local mode = dataObject.params.mode\n                    dataObject.params = {}\n                    dataObject.params.mode = mode\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 12 then --童锁开关回应\n                    local childlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.childlock = childlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 13 then --远程升级触发后，设备回应 要第几包，平台按需发送\n                    if dataObject.params.frame == 1 then --设备请求第一包的时候  平台重新获取redis 做缓存\n                        local redis_key_bin = dataObject.ID .. '_air_bin'\n                        --更新 升级 固件 缓存\n                        binCache = getRedisValue_obj(redis_key_bin, dataObject)\n                    end\n                    --升级文件流 缓存,拆解成多个小包\n                    -- binCache.buff = dataObject.params.binBuff\n                    -- binCache.size = string.len(binCache.buff)\n                    -- binCache.params = getPackageList(binCache.buff)\n                    log.debug('home_humi_0901  [%s][code=%s]  平台收到 设备升级 回应，准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n                    --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2：准备升级3：升级中4：完成升级\n\n                    --设备准备升级 or 升级中 发送固件包\n                    if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n                        if dataObject.params.frame ~= nil then\n                            dataObject.from = 'server'\n                            dataObject.cmd = 523\n                            local frameIndex = dataObject.params.frame\n                            dataObject.params = {}\n                            dataObject.params.type = 2 --服务器正在升级设备\n                            dataObject.params.frame = frameIndex\n\n                            local sub_bin = binCache.params.subList[frameIndex]\n\n                            if sub_bin ~= nil then\n                                dataObject.params.bin = sub_bin.buff\n                                dataObject.params.len = sub_bin.len\n                                dataObject.params.crc16 = sub_bin.checkint\n                            end\n\n                            --数据发送到appProxy    binCache.params.count\n                            sendMsgToTopic(dataObject, 'device')\n                        end\n                        dataObject.params.updateState = 'isworking' --升级中\n                    elseif dataObject.params.sign == 4 then\n                        if dataObject.params.msg == 2 then\n                            dataObject.params.updateState = 'ok' -- 完成升级\n                        else\n                            dataObject.params.updateState = 'fail'\n                        end\n                    elseif dataObject.params.sign == 1 then\n                        dataObject.params.updateState = 'fail'\n                    end\n                    dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 17 then --加湿器挡位\n                    local fixhumi = dataObject.params.value\n                    dataObject.params = {}\n                    dataObject.params.fixhumi = fixhumi\n                    sendMsgToTopic(dataObject, 'app')\n                end\n            elseif dataObject.cmd == 63499 then\n                if dataObject.code == 1 then --软硬件 版本主动上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 2 then --心跳上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 3 then\n                    --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n                    if dataObject.params ~= nil then\n                        out.data.temperature = tonumber(string.format('%0.2f', dataObject.params.TEMP))\n                        out.data.humidity = dataObject.params.HUMI\n                        out.data.pm1 = dataObject.params.PM1_0\n                        out.data.pm25 = dataObject.params.PM2_5\n                        out.data.pm10 = dataObject.params.PM10\n                        out.data.ch2o = dataObject.params.CH2O --甲醛\n                        out.data.tvoc = dataObject.params.TVOC --有机气态物质\n                        out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 总雾化水位 唐露芝20200928 qq群确认\n\n                        out.data.powerlock = dataObject.params.power --开关\n                        out.data.windgear = dataObject.params.wind --风速挡位  0:自动,1：1档，2：2档，3：3档， 4：4档\n                        out.data.timcnt = dataObject.params.timcnt --定时个数\n                        out.data.uvlock = dataObject.params.UV --UV杀菌灯开关  1：打开   0：关闭\n                        out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态  1：打开   0：关闭\n                        out.data.humilock = dataObject.params.humista --加湿器开关状态      1：打开   0：关闭\n                        out.data.humigear = dataObject.params.humigear -- 加湿器挡位  1:L1 2:L2 3:L3 4:L4\n                        out.data.wchargelock = dataObject.params.wcharge --无线充电开关  1：打开   0：关闭\n                        out.data.childlock = dataObject.params.chlock --童锁开关状态1：打开   0：关闭\n\n                        out.data.fixhumi = dataObject.params.fixhumi --恒湿开关状态  1：打开 0：关闭\n                        out.data.water = dataObject.params.water --水位感应开关  0:正常 1:缺水\n                        out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠 3恒湿\n                        out.data.hard = dataObject.params.hard --硬件版本号\n                        out.data.soft = dataObject.params.soft --软件版本号\n                    else\n                        log.debug('home_humi_0901   [%s][code=%s]  dataObject.params =nil', dataObject.ID, dataObject.code)\n                    end\n                    dataObject.params = out.data\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 then --报警上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 5 then --时间同步 服务器\n                    local timeNow = getTime()\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n                    dataObject.params.date = timeNow\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                elseif dataObject.code == 6 then --定时任务同步 服务器\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n\n                    --读取redis\n                    local redis_key = dataObject.ID .. '_air_taskconfig'\n                    local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n                    local array_taskConfigs = {}\n                    for _, v in pairs(redis_taskConfigs) do\n                        --如果是 同时开关任务，设备同步的时候，任务号要分开  丢弃\n                        --if v.time_on and v.time_off then\n                           -- v.task = transferDoubleTaskId(v.task, true, false, false)\n                        --end\n                        table.insert(array_taskConfigs, v)\n                    end\n                    dataObject.params = array_taskConfigs\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                end\n            end\n        elseif dataObject.from == 'app' then --测试使用  实际app不会发\n            if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n                log.debug('home_humi_0901 [%s][code=%s] 平台收到 app升级 通知，准备 通知 设备', dataObject.ID, dataObject.code)\n                --升级文件流 缓存,拆解成多个小包\n                --binCache.buff = dataObject.params.binBuff\n                --binCache.params = getPackageList(binCache.buff)\n                binCache.params = getPackageList(dataObject.params.binBuff)\n                binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                --数据发送到appProxy    周期上报的数据 code= 13和\n                log.debug('home_humi_0901   [%s][code=%s][binCache.updateTime=%s]  开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n                sendMsgToTopic(dataObject, 'device')\n            end\n        elseif dataObject.from == 'clear' then\n            clearTask(dataObject.ID)\n        else\n            log.debug('home_humi_0901  [%s][code=%s]  非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n        end\n    else\n        log.debug('home_humi_0901 dataObject =nil')\n    end\n\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('home_humi_0901 result=%s', json.encode(out))\n    if next(out.data) ~= nil or next(out.result) ~= nil then\n        ctx:notify(resultData)\n    end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 2048\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n        --发给app的时候  软件版本比如17要改成1.1\n        if msg.params.soft ~= nil then\n            msg.params.soft = softNumbertoVersion(msg.params.soft)\n      \t\tmsg.params.hard = softNumbertoVersion(msg.params.hard)\n        end\n        msg.params.bin = nil --节省资源\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_humi_0901   [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n    local topic = rawDataObject.ID .. '_device_rece'\n    rawDataObject.from = 'server'\n    rawDataObject.packid = os.time()\n    rawDataObject.cmd = 64011\n    rawDataObject.params = 'null'\n    rawDataObject.result = 0\n    local msgStr = json.encode(rawDataObject)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_humi_0901   服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetTime = function()\n    local timenum = os.time()\n    local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n    --空气净化器最后还要带 周几下去\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    --local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n\n    local week = getWeek_comm(year, month, day)\n    local recordTime = string.format('%s %s', dateStr, week)\n    return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n    if m == 1 or m == 2 then\n        m = m + 12\n        y = y - 1\n    end\n    local m1, _ = math.modf(3 * (m + 1) / 5)\n    local m2, _ = math.modf(y / 4)\n    local m3, _ = math.modf(y / 100)\n    local m4, _ = math.modf(y / 400)\n\n    local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n    local weekTab = {\n        ['0'] = 1,\n        ['1'] = 2,\n        ['2'] = 3,\n        ['3'] = 4,\n        ['4'] = 5,\n        ['5'] = 6,\n        ['6'] = 0 --周日是 0\n    }\n    return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('home_humi_0901   [%s][code=%s]  [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('home_humi_0901   [%s][code=%s]  [getRedis]  taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('home_humi_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 or cmd_code == 5 then --添加或修改  或取消任务\n        --如果是自增任务的设备返回 先解析任务id\n        if taskConfig.time_on then --只要on大于0 必然 任务id >16\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 1, 1)\n            -- 避免单任务取到0的情况\n            log.debug('home_humi_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        elseif taskConfig.time_on == nil then\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 2, 2)\n            -- 避免单任务取到0的情况\n            log.debug('home_humi_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        end\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_humi_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('home_humi_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('home_humi_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n        redis_taskConfigs[real_tsakId] = nil\n        log.debug('home_humi_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n    for key, value in pairs(redis_tasks) do\n        if value.task == delete_id then\n            return key\n        end\n    end\n    log.debug('home_humi_0901   无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('home_humi_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n    return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('home_humi_0901    任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n    local clear_key = string.format('%s_air_taskconfig', deviceID)\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    local r1, r1ok = redis.set(clear_key, clearValue)\n    --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n    local hex_str = string.format('%02x', soft_num)\n    local s10 = string.sub(hex_str, 1, 1)\n    local s1 = string.sub(hex_str, 2, 2)\n    local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n    return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n    local k = string.format('%s,%s', signid, msgid)\n    local msgs = {\n        ['1,1'] = '不支持升级',\n        ['1,2'] = '已是最新版本',\n        ['1,3'] = '其他错误',\n        ['2,1'] = '升级A区域',\n        ['2,2'] = '升级B区域',\n        ['3,1'] = '校验错误重发',\n        ['3,2'] = '校验正确发下一帧',\n        ['4,1'] = '升级出错',\n        ['4,2'] = '升级成功'\n    }\n    return msgs[k]\nend	INLINE	2020-09-07 16:08:00+08	2020-12-10 10:29:59.053+08	2020-09-07	\N
65bb5b61-48eb-4c5a-aca4-ae21893336b5	IGM100	\N	粉尘监测，智慧应用	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: IGM100\n]]--liankang\nstart=function ()\n    log.debug("IGM100 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("IGM100 encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("IGM100 decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 读取寄存器起始地址 00 00\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x1A, BE);                        -- 读取寄存器数量 26\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果,  直线位移\n-- 正确回复  010311 0012 000B 003E 0001 0001 0000 0000 0000 0000 0000 0000 0014 0001 0002 0001 0000 0000 0000 0000 0000 0000 0000 0000 00F6 0000 0000 CC CC\n-- 0103110012000B003E0001000100000000000000000000000000140001000200010000000000000000000000000000000000F600000000CCCC\n\n-- 原始数据\nfunction protocol_decode(da)\n\t\n\t-- 存储结果\n\tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n        }\n        \n    -- 判断数据有效性\n    if inValid(da) then\n        local message = 'Invalid Msg,'\n        out.result = {code=5001,msg=message}\n        out.data = {}\n    else\n        log.debug("数据有效")\n        \n        local data = string.sub( da, 7, -5);\n        log.debug("IGM100 data ==>"..data)\n        log.debug("IGM100 dataLength ==>"..json.encode(string.len(data)))\n\n        -- 获取告警后的所有数值\n        local valueTab = {}\n        for i = 0, 50, 2 do\n            -- log.debug("IGM100 value value ==>"..json.encode(i)..",,,, "..json.encode(iota.hexToFloat(data, i, 'B')))\n            table.insert(valueTab, iota.hexToUShort(data, i, 'B'))\n        end\n        log.debug("IGM100 valueTab"..json.encode(valueTab))\n        log.debug("IGM100 valueTab==>"..json.encode(table.concat( valueTab, ", ")))\n\n        local unitNameTab = {\n            ["00F6"] = "ppm",\n            ["005F"] = "ppb",\n            ["200E"] = "%LEL",\n            ["380E"] = "%VOL",\n            ["00f6"] = "ppm",\n            ["005f"] = "ppb",\n            ["200e"] = "%LEL",\n            ["380e"] = "%VOL",\n        }\n        -- 暂时未定义 气体类型\n        local equipmentTypeTab = {\n            "其他气体", "ASH3", "BR2", "C7H8",\n            "CH20", "CH4", "CL2", "CLO2","CO", "CO2", "COCL",\n            "ETO", "F2", "GEH4", "H2", "H2S", "HBR", "HCL",\n            "HCN", "HF", "N2", "NH3", "NO", "NO2", "O2",\n            "O3", "PH3","SIH4", "SO2", "TBM", "THT",\n        }\n      \n        local equipmentTypeIndex = valueTab[15]\n        log.debug("IGM100 equipmentTypeIndex"..json.encode(equipmentTypeIndex))\n        local equipmentType = equipmentTypeTab[equipmentTypeIndex]\n        log.debug("IGM100 equipmentType"..json.encode(equipmentType))\n        log.debug("IGM100 unitName==>"..string.sub(data, 93, 96))\n        local unitName = unitNameTab[string.sub(data, 93, 96)]\n        local decimalNum = valueTab[14]\n        local realTimeGasConcentration = valueTab[1] / math.pow(10, decimalNum)\n        local lowAlarmValue = valueTab[2] / math.pow(10, decimalNum)\n\n        out.data = {\n            equipmentType = equipmentType,\n            realTimeGasCon = realTimeGasConcentration,\n            lowAlarmValue = lowAlarmValue,\n            unitName = unitName,\n        };\n    end\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 57 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于57   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n	INLINE	2020-01-08 10:40:50.52+08	2020-01-14 10:26:36.332+08	2020-01-08	\N
d7015097-9fec-4702-89ef-7453ce11b7f8	bjdctk_4005	\N		1.0	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	f	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("bjdctk_4005: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n\n    out={\n        data ={},\n        result = {},\n\t\ttype=1\n    }\n  \n    local moduleNostr= string.sub(hex,7,14)\n\n\tlocal moduleNo = device.uplink.props.module\n\n\t \n\tlocal dateTimeStr=string.sub(hex,21,32)\n\tlocal dateTime=unixtimestamp(dateTimeStr)\n\tlocal serialnum=string.sub(hex,15,18)\n    local commandidentifiy=string.sub(hex,19,20)\n   \n\n\tlocal length=iota.hexToShort(string.sub(hex,49,52), 0, 'B')/100\n\t\t\t\t\n\tout.data={\n\t\tlength=length,\n\t\ttime=dateTime\n\t}\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("bjdctk_4005: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal cmd=''\n\t\n    local timenow=os.date('%Y%m%d%H%M%S', os.time())\n\tlocal timenowstr = string.sub(timenow,3,-1)\n\tcmd='001080' .. moduleNostr .. serialnum .. commandidentifiy .. timenowstr\n\tcmd=iota.appendHexCrc(cmd, 'L' ,0)  \n\tlog.debug("bjdctk_4005: cmd=%s",cmd)\n\tctx:asend(cmd)\n\tend\n\n\n\nunixtimestamp = function(dateTimeStr)\n  \n    local year = 2000+tonumber(string.sub(dateTimeStr,1,2))\n    local month = tonumber(string.sub(dateTimeStr,3,4))\n    local day = tonumber(string.sub(dateTimeStr,5,6))\n    local hour = tonumber(string.sub(dateTimeStr,7,8))\n    local minute = tonumber(string.sub(dateTimeStr,9,10))\n    local second = tonumber(string.sub(dateTimeStr,11,12))\n    --log.debug("shutaisuoying year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("shutaisuoying timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("shutaisuoying recordTime=%s",recordTime)\n    return recordTime\nend\n	INLINE	2020-07-21 15:30:44.255+08	2020-07-27 11:41:58.942+08	2020-07-21	\N
3f78df73-bc71-44fb-8d74-74062d845305	shjy_temp_BK-WSQ01A	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module or device.props.moduleId\n\tlog.debug("jnrs_temphumi_1 moduleNo=%s  interface module=%s, property moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexByte(buff, moduleNo, endian)\n    buff=iota.appendHexByte(buff, 3, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 3, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("send %s, ctx=%s", "jnrs_temphumi_1.lua",buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tctx:done(result)\n\telse\n\t\tlog.debug("jnrs_temphumi_1  SSend error")\n    end\nend\n\nunmarshall=function(hex)\n    log.debug("recv %s, ctx=%s", "jnrs_temphumi_1.lua",hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==22) then\n        \n        -- 0103040292ff9b5a3d\n        --"humi": 65.8,\n\t\t--"temp": -10.1\n        local humi =iota.hexToShort(hex,3,'B')/10\n        local temp =iota.hexToShort(hex,5,'B')/10\n    \tlocal pressure=iota.hexToShort(hex,7,'B')/10\n      \n        out.data = {  \n            temperature=temp,\n            humidity=humi,\n      pressure=pressure\n        };\n    else\n        local message = "Invalid Msg, len is not rigth"\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    log.debug("out=%s, ctx=%s", "jnrs_temphumi_1.lua",json.encode(out))\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2019-09-11 11:53:13.912+08	2019-09-11 15:12:08.329+08	2019-09-11	\N
94a520ed-78d3-4f1c-90d5-aa94871b8642	anXin_wind	\N	安信风速风向 主动上报	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anXin_wind.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anXin_wind [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t   \n        local speed = iota.hexToUShort(hex,24,'B')/100.0\n        local direction = iota.hexToUShort(hex,26,'B')/100.0\n        local angle = iota.hexToShort(hex,28,'B')/100.0\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_wind timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_wind dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          windSpeed=speed,\n            windDirection = direction,\n            windAngle = angle\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anXin_wind [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anXin_wind:Data is nil'\n        errcode = 1001\n    \tlog.debug("anXin_wind [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anXin_wind module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anXin_wind [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anXin_wind [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-24 09:46:02.378+08	2019-12-24 09:46:02.378+08	2019-12-24	\N
ff2477e1-9a33-4ccd-99d4-e1d703b18f39	shjy_temp_BK-FDR-5	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-FDR-5", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, 'L')\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp_BK-FDR-5 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local humidity = iota.hexToUShort(hex,3,'B')/10\n\t\tlocal temperature=iota.hexToUShort(hex,5,'B')/100-20\n        out.data = {\n\t\t\t--length=tonumber(string.format('%0.1f',rainfall))\n\t\t\thumidity=humidity,\n\t\t\ttemperature=tonumber(string.format('%0.1f',temperature))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp_BK-FDR-5 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp_BK-FDR-5 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-09-11 11:32:12.388+08	2019-09-12 09:21:58.472+08	2019-09-11	\N
8465d25a-c85a-41a7-b383-7da1e9c0c55c	httpMQTT	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	\nstart = function()\n    log.debug('httpMQTT   device=%s', json.encode(device))\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('httpMQTT [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    --local id = httpbody.ID\n    --log.debug('httpMQTT  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    --bodydataStr=string.gsub(bodydataStr,',{}',"")\n    log.debug('httpMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n    local bodypkg = json.decode(bodydataStr)\n    local bodydata=bodypkg.pkg\n    local allJsonData = bodydata['实时数据']\n    local RTime = bodydata['时间戳'] --时刻\n    local dataType = bodydata['触发事件']\n    local sn = bodydata.sn\n\n    local allSensorData = {}\n\n    if dataType == '实时数据主动上报' then\n        for k_none, singleSensorValue in pairs(allJsonData) do --遍历每个模块\n            if singleSensorValue['有效标识'] == 'true' then\n                for k, v in pairs(singleSensorValue) do --遍历每个模块\n                    if k ~= '时间戳' and k ~= '有效标识' then\n                        local sensorChannel = tonumber(string.sub(k, -2, -1))\n\n                        -- local sensormodel=string.sub(k,1, 5)\n                        -- if sensormodel=='WD'\n                        if allSensorData[sensorChannel] ~= nil then\n                            allSensorData[sensorChannel] = allSensorData[sensorChannel] .. ',' .. v\n                        else\n                            allSensorData[sensorChannel] = v\n                        end\n                    end\n                end\n            end\n        end\n\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do\n                local deviceId = child.id\n                local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                local devceChannelNo = tonumber(child.uplink.props.channel)\n                local sensorModel = child.props.model\n\n                local data1 = {\n                    data = {},\n                    device = deviceId,\n                    type = 1\n                }\n                data1.time = unixtimestamp(RTime, moduleNo)\n                local sensorData = allSensorData[devceChannelNo]\n                if sensorData ~= nil then\n                    local datas = Split(sensorData, ',')\n                    if sensorModel == 'RN620' then --水准仪\n                        physicalvalue = datas[1]\n                        temperature = datas[2]\n                        data1.data.physicalvalue = tonumber(physicalvalue)\n                        data1.data.temperature = tonumber(temperature)\n                    elseif sensorModel == 'RN300' then --温湿度\n                        temperature = datas[1]\n                        humidity = datas[2]\n                        data1.data.temperature = tonumber(temperature)\n                        data1.data.humidity = tonumber(humidity)\n                    elseif sensorModel == 'RN100' then --风速风向\n                        windspeed = datas[1]\n                        winddirection = datas[2]\n                        data1.data.windspeed = tonumber(windspeed)\n                        data1.data.winddirection = tonumber(winddirection)\n                    else\n                        physicalvalue = datas[1]\n                        data1.data.physicalvalue = tonumber(physicalvalue)\n                    end\n\n                    log.debug('geot_3300:(振弦) Phy结果=%s', Phy)\n                    table.insert(out.data, data1)\n                end\n            end\n        end\n\n        \n\n        log.debug('httpMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n    end\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(timenum, moduleNoStr)\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', tonumber(timenum)/1000)\n    log.debug('httpMQTT [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n	INLINE	2019-06-19 17:32:24.446+08	2019-08-07 10:24:26.842+08	2019-06-19	\N
5923b1b8-42ae-4618-a4b7-7b994f29e69b	fs_peopleCounter_985	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	 --start = function()\n  \t--local bu='aa01031000000000010105000000000001030603'\n\t--local aa=CS8(0, bu)\n  \t--log.debug('测试校验=%s', aa)\n  \n--     local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n--     sendBuff = protocol_encode(moduleNo)\n\n--     ok, resp = ctx:ssend(sendBuff, 15000)\n--     if ok then\n--         result = protocol_decode(resp, moduleNo)\n--     else\n--         --print("SSend error!")\n--     end\n--     ctx:done(result)\n --end\n\nonData = function(hex)\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    local result = protocol_decode(hex, moduleNo)\n    --判断是否快到0点 清空计数\n    mayClear(moduleNo)\n    log.debug('fs_peopleCounter_985  result=%s', result)\n    ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n    local hourNow = tonumber(os.date('%H'))\n    local minuteNow = tonumber(os.date('%M'))\n    if hourNow == 23 and minuteNow > 50 then --23点50后清空数据\n        local clearBuff = protocol_encode(moduleNo)\n        ctx:asend(clearBuff)\n    end\nend\n\nfunction protocol_encode(moduleNoStr)\n    local BE = 'B'\n    local buff = 'aa'\n    buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n    buff = iota.appendHexByte(buff, 0x04, BE) --\n    buff = iota.appendHexByte(buff, 0x01, BE)\n    buff = iota.appendHexByte(buff, 0x01, BE)\n    buff = buff .. CS8(0, buff)\n    buff = iota.appendHexByte(buff, 0x55, BE)\n    return buff\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复   aa010310000000000101050000000000010306035255\n--原始数据   --"inCount": 1150,\n-- "outCount": 1363\nfunction protocol_decode(hex, moduleNoCheck)\n    local data = hex\n    --存储结果\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    log.debug(data)\n    --判断数据有效性\n    local ErrorCode = IsValid(hex, moduleNoCheck)\n    if ErrorCode then\n        local inBytesStr = string.sub(hex, 2 * 4 + 1, 2 * 4 + 16)\n        local outBytesStr = string.sub(hex, 2 * 12 + 1, 2 * 12 + 16)\n        log.debug('fs_peopleCounter_985  inBytesStr=%s', inBytesStr)\n        local inCount = getCount(inBytesStr) --  :进人数\n        local outCount = getCount(outBytesStr) --  :出人数\n\n        out.data = {\n            inCount = inCount,\n            outCount = outCount,\n            stayCount = inCount - outCount\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    log.debug('fs_peopleCounter_985   开始校验 data=%s', data)\n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen ~= 22 then\n        errormsg = string.format('数据长度无效=%s≠22', dataLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data, 2, 'B') ~= 0x03 then\n        errormsg = 'CMD is not right'\n        errcode = 1003\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 1, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n    local lcr = 0\n    for i = start, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    local value = bit.band(lcr, 0x7f)\n    return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n    local bytes_len = string.len(bytes_8) / 2\n    local count = 0\n    for i = 0, bytes_len - 1, 1 do\n        local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n        count = count + num * math.pow(10, i)\n    end\n    return count\nend	INLINE	2020-11-03 18:02:45.299+08	2020-11-05 14:11:49.98+08	2020-11-03	\N
94967c5c-2d6e-43b6-b3c4-8f35a82641c9	shzr_temp_incidence	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	\nstart = function()\n    log.debug('shzr_temp_incidence   device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n    local dataid = device.uplink.props.id\n    log.debug('shzr_temp_incidence [%s]  httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n    --主动上传式\n    --local hex = httpbody.Body\n    local bodyStr = httpbody.Body\n    if bodyStr ~= nil or bodyStr ~= '' then\n        local obj = json.decode(bodyStr)\n        --local hex = obj.pkg\n        --log.debug('shzr_temp_incidence 1111111 [%s] hex=%s', dataid, hex)\n        --调度重启，尝试获取记录结果\n        \n        local out = {\n            type = 1,\n            data = {},\n            result = {}\n        }\n        local messageId_hex\n        local ErrorCode = IsValid(hex, dataid)\n        if ErrorCode then\n            local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n            if dataCounts == 0 or hasCycleTimeUpdated then\n                local getdataCounts = getRedisValue('datacounts')\n                if getdataCounts ~= nil then\n                    dataCounts = dataCounts\n                end\n\n                local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n                if getisCycleTimeUpdated ~= nil then\n                    isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n                end\n            end\n\n            log.debug('shzr_temp_incidence  [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n            dataCounts = (dataCounts + 1) % 0x100 --计数\n            local dataCounts_hex = string.format('%02x', dataCounts)\n            redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n            log.debug('shzr_temp_incidence  [%s]  Received=>%s[%s],', dataid, hex, dataCounts)\n\n            local moduleNo = string.sub(hex, 21, 29)\n            local datatimeHexStr = string.sub(hex, 1, 19)\n\n            local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n            local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n            datatimeHexStr = year .. month .. datatimeHexStr\n            local datetime = hexDateStrToDate(datatimeHexStr)\n            log.debug('shzr_temp_incidence   [%s]  时间datetime=%s', dataid, datetime)\n            local anglex = string.sub(hex, 31, 36)\n\t\t\tlocal angley = string.sub(hex, 38, 42)\n\t\t\tlocal temperature = string.sub(hex, 43, 49)\n          \n\n                        local data1 = {\n                            data = {\n                                anglex = anglex,\n                                angley = angley,\n                               \n                                temperature = temperature\n\t\t\t\t\t\t\t\t\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = datetime\n                        }\n                        table.insert(out.data, data1)\n\n            --返回数据\n            sendAck(dataid, messageId_hex, dataCounts_hex)\n        else\n            out.result = {code = errcode, msg = errormsg}\n        end\n        local resultData = json.encode(out)\n        log.debug('shzr_temp_incidence  [%s] resultData=%s', dataid, resultData)\n\n        ctx:notify(resultData)\n    end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    log.debug('shzr_temp_incidence [%s] 应答=%s', ackID, json.encode(ack))\n    ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n    log.debug('shzr_temp_incidence [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n    --下发返回前  判断 当前设备 cycletime与之前的存储是否一致\n\n    if uplinkmessageid ~= nil then\n        if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n            local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n            asend_HttpResponse(dataId, resp_hex)\n        else\n            --首次收到数据下发采集周期 配置\n            --d000000e1003010102\n            local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n            --log.debug('shzr_temp_incidence [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n            local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n            log.debug('shzr_temp_incidence [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n            asend_HttpResponse(dataId, resp_hex)\n            sendCount_updateTime = sendCount_updateTime + 1\n        end\n    end\nend\n\ngetRedisValue = function(keyStr)\n    log.debug('shzr_temp_incidence getRedisValue,keyStr=%s', keyStr)\n    local keyValue\n    local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n    if r1ok ~= false then\n        keyValue_redis = r1\n        log.debug('shzr_temp_incidence r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n        if keyValue_redis ~= nil then\n            keyValue = tonumber(keyValue_redis)\n        else\n            log.debug('shzr_temp_incidence redis get dataCounts=nil')\n        end\n    else\n        log.debug('shzr_temp_incidence r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n    end\n    return keyValue\nend\n\nIsValid = function(data, d_index)\n    log.debug('shzr_temp_incidence  开始校验数据=%s', data)\n    local datalen = string.len(data) / 2\n    if data == nil or datalen <= 9 then\n        errormsg = string.format('Data is nil or invalid length=%s', datalen)\n        errcode = 1002\n        log.debug('shzr_temp_incidence [%s] errormsg=%s', d_index, errormsg)\n        return false\n    end\n    data = string.sub(data, 17, -1)\n    --去除id\n    local msgId = string.sub(data, 1, 2)\n    local msgtype = string.sub(data, 5, 6)\n    if msgId == '80' and msgtype == 'ff' then --debug信息\n        debugMsg = HextoStr(string.sub(data, 7, -1))\n        errormsg = string.format('debugmsg=%s', debugMsg)\n        errcode = 1003\n        log.debug('shzr_temp_incidence [%s] debugmsg=%s', d_index, errormsg)\n        return false\n    elseif msgId == '80' and msgtype == '01' then --设备ack应答\n        log.debug('shzr_temp_incidence [%s] 设备应答设置成功=%s', d_index, errormsg)\n        redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n    \t --如果平台刚更新配置周期，还未下发指令。设备就返回更新应答， 日志记录这种异常，厂家说可能出现，可能？\n        if dataCounts == 0 or  sendCount_updateTime ~=0 then\n            log.debug('shzr_temp_incidence [%s]  异常 设备更新周期应答  dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n        end\n    end\n    return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n    local bits = {}\n    local byteNum = tonumber(byteStr, 16)\n    local bitsTable = {}\n\n    for i = 8, 1, -1 do\n        local ex = 2 ^ (i - 1)\n        if byteNum >= ex then\n            --print(string.format('i=%s,byteNum=%s',i,byteNum))\n            bitsTable[i] = 1\n            byteNum = byteNum % ex\n        else\n            bitsTable[i] = 0\n        end\n    end\n    return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n    -- 12 04 02 0F 24 38 ==> 18\n    local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n    local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n    local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n    local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n    local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n    local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n    timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('shzr_temp_incidence  timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n    return recordTime\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ndebugErrorMsg = {\n    '电量过低，设备即将无法使用无线通讯，此时设备红灯闪烁',\n    'AIT不合法',\n    'SIT不合法',\n    '传感器端口1打开，但检测不到传感器',\n    '传感器端口2打开，但检测不到传感器',\n    '传感器端口3打开，但检测不到传感器',\n    '传感器端口4打开，但检测不到传感器',\n    '传感器1参数不合法',\n    '传感器2参数不合法',\n    '传感器3参数不合法',\n    '传感器4参数不合法',\n    'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n    '设备温度过高，超过85度',\n    '设备温度过低，低于-45度',\n    '开发错误，已保存至flash',\n    '设备未知原因重启',\n    '设备未知原因重新上电',\n    '端口1/2/3/4传感器频率超出扫频范围，可能造成数据不准确',\n    '传感器端口1/2/3/4打开，但监测不到任何传感器',\n    '错误原因较多，导致错误栈满',\n    '传感器端口1 超过4000HZ',\n    '传感器端口2 超过4000HZ',\n    '传感器端口3 超过4000HZ',\n    '传感器端口4 超过4000HZ',\n    'AIT过小，自动设置为最小值60',\n    'AIT过大，大于最大值2147483647',\n    'ait不为零，但没有端口是打开的',\n    '时间同步超时',\n    '传感器端口均未接传感器'\n}	INLINE	2019-09-12 09:27:25.59+08	2019-09-12 09:31:13.396+08	2019-09-12	\N
19ed6d2e-6e0f-40ef-9930-2d5b67d89d84	anXin_wind_9220	\N	安心风速风向ModBus协议 请求应答	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 4, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==34) then\n        local speed = iota.hexToUShort(hex,9,'B')/100.0\n        local direction = iota.hexToUShort(hex,11,'B')/100.0\n        local angle = iota.hexToShort(hex,13,'B')/100.0\n        out.data = {\n            windSpeed=speed,\n            windDirection = direction,\n            windAngle = angle\n        };\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-04 14:19:30.193+08	2019-12-24 09:50:23.465+08	2017-09-02	\N
73c2217f-b7c8-4bed-8cf2-21f591a19dd3	cdaj_zx	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('cdaj_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('cdaj_zx device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    buff = buff .. 'F7601269'\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '0010000102030405060708090A0B0C0D0E0F'\n    --1:指令:采集\n    local wCRCin = 0x0000\n    local wCPoly = 0x1021\n    local wChar = 0\n    local usDataLen = string.len(buff) / 2\n    log.debug('cdaj_zx usDataLen = %s', usDataLen)\n    local var = 0\n    while usDataLen > 0 do\n        var = var + 1\n        wChar = string.sub(buff, var, var + 1)\n        var = var + 1\n        wChar = tonumber(wChar, 16)\n        wChar = bit.lshift(wChar, 8) --左移\n        wCRCin = bit.bxor(wCRCin, wChar)\n        for i = 0, 7 do\n            local value = bit.band(wCRCin, 0x8000)\n            if value > 0 then\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            else\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            end\n        end\n        --log.debug("cdaj_zx END wCRCin = %X",wCRCin)\n        usDataLen = usDataLen - 1\n    end\n    buff = buff .. string.format('%04X', wCRCin)\n    log.debug('cdaj_zx END buff = %s', buff)\n    --ctx:asend(buff)\n    --ctx:sleep(10)\n\t--ctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 60000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('cdaj_zx 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('cdaj_zx child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('cdaj_zx    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \tend\n            end\n        end\n    else\n        log.debug('cdaj_zx 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('cdaj_zx ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('cdaj_zx  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 15, -5)\n    local dataCount = string.len(subDataArea) / 10\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)+1\n        local subData = string.sub(singleChannelDataHex, 3, -1)\n        DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n    \tlog.debug('cdaj_zx  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('cdaj_zx datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[subChannelId+8]\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == '9525b166-34e1-4182-95a9-644a8f98a2d8' then --振弦公式\n           local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n\t\tif childDevice.uplink.capabilities[1].formula.metaid == '55b9e150-f78d-4cbd-a353-f99c4df93cb6' then --振弦公式\n           local A = tonumber(childDevice.uplink.capabilities[1].formula.props.A)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal B = tonumber(childDevice.uplink.capabilities[1].formula.props.B)\n\t\t\t\n --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('cdaj_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if A ~= nil and f0 ~= nil and B ~= nil and freq ~= nil  then\n                Phy = A * (freq ^ 2 - f0 ^ 2)- B * (freq - f0) \n            end\n        end\n        log.debug('cdaj_zx freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                frequency = tonumber(string.format('%0.2f',freq)),\n                physicalvalue = tonumber(string.format('%0.4f',Phy))\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('cdaj_zx has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('cdaj_zx has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('cdaj_zx 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xF7 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('cdaj_zx HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2020-08-03 09:12:05.773+08	2020-11-14 17:23:33.728+08	2020-08-03	\N
1ed92105-cedf-4667-b966-db32e28771c8	GZM_http	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    ok, resp = ctx:ssend('01020304', 5000)\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n    local response_GpsData_bodyStr = '{"cmd":"GZM","data":{},"status":0}'\n    asend_HttpResponse(response_GpsData_bodyStr)\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --log.debug('fs_gzm_2019_http [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n\n    --数据域 内的索引号\n    local ErrorCode = true --IsValid(hex)\n    if ErrorCode then\n        sData = httpbody.Body\n        --log.debug('fs_gzm_2019_http  sData=%s', sData)\n        --获取子字符串表\n        local dataTable = json.decode(sData)\n\n        --log.debug("fs_gzm_2019_http   dataTable=%s",sData)\n\n        --分析单类数据\n        if dataTable ~= nil then\n            for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n                --log.debug("fs_gzm_2019_http   k=%s,sensorValue=%s",k,json.encode(sensorValue))\n                if k >= 1 then\n                    local factorId = tonumber(sensorValue.factorid)\n                    local factorName = getFactorName(factorId)\n                    local moduleNo = tonumber(sensorValue.moduleId)\n                    local channelNo = tonumber(sensorValue.channel)\n                    --log.debug('fs_gzm_2019_http   k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s', k, factorId, factorName, moduleNo, channelNo)\n                    --解析单条数据\n                    for kdata, vdata in ipairs(sensorValue.data) do\n                        --log.debug('fs_gzm_2019_http:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n                        if vdata.value ~= nil then\n                            local anglex = tonumber(vdata.value[1])\n                            local angley = tonumber(vdata.value[2])\n                            --log.debug('fs_gzm_2019_http   factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n                            local force  --轴力\n\n                            local length_cj  --模板沉降\n                            local length_sp  --水平位移\n\n                            if factorId == 0 then --模板沉降\n                                length_cj = tonumber(vdata.value[3])\n                            elseif factorId == 1 then --水平位移\n                                length_sp = tonumber(vdata.value[3])\n                            elseif factorId == 2 then --轴力\n                                force = tonumber(vdata.value[3])\n                            else\n                                --log.debug('fs_gzm_2019_http   factorId=%s,type=%s', factorId, type(factorId))\n                            end\n\n                            local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n              \t\t\t\tlocal millisecondStr=string.format("%03d",timeStamp%1000)\n                            local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n              \t\t\t\tlocal recordTimeMill = os.date('%Y-%m-%dT%H:%M:%S', timeStamp)..string.format(".%s+08:00",millisecondStr)\n                            --log.debug('fs_gzm_2019_http   timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n                            --获取通道设备deviceId\n                            local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n                            local deviceId\n                            if childDevice ~= nil then\n                                --log.debug("fs_gzm_2019_http: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n                                deviceId = childDevice.id\n                                local data1 = {\n                                    data = {\n                                        x = anglex,\n                                        y = angley,\n                                        force = force,\n                                        settling = length_cj,\n                                        displacement = length_sp,\n                    \t\t\t\t\trecordTime=recordTimeMill --ET处理用，iota时间精度秒，不够\n                                    },\n                                    device = deviceId,\n                                    time = recordTime,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                            else\n                                --log.debug('fs_gzm_2019_http:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n                            end\n\n                        end\n                    end\n                end\n            end\n        else\n            log.debug('fs_gzm_2019_http 数据不完整')\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    --log.debug('fs_gzm_2019_http resultData=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("fs_gzm_2019_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("fs_gzm_2019_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                --log.debug('fs_gzm_2019_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n            else\n                --log.debug('fs_gzm_2019_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    --log.debug('fs_gzm_2019_http:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fs_gzm_2019_http   m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('fs_gzm_2019_http  校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        log.debug('fs_gzm_2019_http   校验失败 Data is nil')\n        return false\n    end\n\n    if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n        errormsg = 'CMD is wrong'\n        errcode = 1002\n        log.debug('fs_gzm_2019_http   校验失败 CMD is wrong')\n        return false\n    end\n\n    log.debug('fs_gzm_2019_http   校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = string.sub(hex, 2 * i - 1, 2 * i)\n        local ascii = string.char(tonumber(bi, 16))\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetFactorName = function(num)\n    local NO = tonumber(num + 1)\n    local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n    local FactorName = FactorNames[NO]\n    return FactorName\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-08-08 16:08:01.978+08	2020-03-30 09:12:10.609+08	2019-08-08	\N
42a8a720-4b36-48e4-bcee-4d0a0c439162	fdd	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    log.debug("fsidd  [%s]  jiexi",device.uplink.props.id)\n  end\n  \nonData=function(data)\n    --local jdata=json.encode(data)\n    --log.debug("fsidd  data=%s",json.encode(data))\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  --log.debug("fsidd  payload=%s", data.payload)\n                  parseData(data.payload)\n            elseif  data.ext==".m" then\n                  --log.debug("fsidd.m  payload=%s", data.payload)\n          \t\t  parseDiag(data.payload)\n          \telse \n          \t\t--log.error("fsidd:type is not.d/.m %s", data.name)\n            end\n        else\n            --log.error("fsidd:not a d file .d", data.ext)\n        end\n    else\n        --log.error("fsidd:data is nil")\n    end\nend\nfunction parseData(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  \n    local djs=Split(js,'\\r')\n    --log.debug("fsidd  jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            --log.debug("fsidd  dj=%s",v)\n            --log.debug("fsidd:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and dj.R =="0" then\n                \n                local childDevice=getDeviceInfo(dj.S)\n\t\t\t\t--log.debug("fsidd  ceshiyixia1")\n                --log.debug("fsidd  childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("fsidd:ceshiyixia2")\n                    --log.debug("fsidd  dj.PV1=%s",dj.PV[1])\n\n                    if childDevice.props.sensortype=="cx" then   --测斜\n            \t\t\tlocal xvalue = dj.RV[1]\n            \t\t\tif xvalue == 0 then \n              \t\t\t\txvalue = nil\n              \t\t\tend\n                        local data1 ={\n                            data={\n                                anglex = xvalue,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                       --log.debug("fsidd  ceshi_zx")\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("fsidd  outdata4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\n                end\n            else\n                --log.debug("fsidd  dj=nil")\n            end\n        else\n            --log.debug("fsidd   v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    --log.debug("fsidd   ".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\nend\nfunction parseDiag(js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {},\n        type=2\n    }    \n    local dataresult= json.encode(dj.R.P.R)\n    --log.debug("parsing diag dataresult = %s",dataresult)\n\tout.data.R = dataresult\n    --log.debug("parsing diag file = %s",json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n  \n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        --log.debug("fsidd  deviceInfo=%s",json.encode(device))\n        for i,link in pairs(device.dnlinks) do\n            --log.debug("fsidd:link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("fsidd:node=%s",json.encode(node))\n                for k,sublink in pairs(node.dnlinks) do\n                    --log.debug("fsidd:sublink=%s",json.encode(sublink))\n                    for u,subdevice in pairs(sublink.devices) do\n                        --log.debug("fsidd:sensor=%s",json.encode(subdevice))\n                        if subdevice.uplink.props.sensorid == sensorId then\n                           -- log.debug("fsidd:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId)              \t\t\t\t\n                            resensor = subdevice\n              \t\t\t\t--log.debug("fsidd:ceshiyixia1 %s",sensorId)\n              \t\t\t\treturn resensor\n                        end \n                    end\n                end\n            end\n        end          \n    end\n  \t--log.debug("fsidd  ceshiyixia2 %s",sensorId)\n\t--log.debug("fsidd   f_sensor %s",json.encode(resensor))\n    return resensor\nend	INLINE	2019-09-03 16:51:15.174+08	2020-04-16 10:01:53.714+08	2019-09-03	\N
da54c48b-cda7-4c3d-a765-aca040ac84cc	fs_nb_iota	\N		1	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    log.debug("fs_nb_iota : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fs_nb_iota devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fs_nb_iota recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        log.debug("fs_nb_iota 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("fs_nb_iota datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n            log.debug("fs_nb_iota 解析dat r1= %s", dathex)\n            ParseFileDat(dathex)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                log.debug("fs_nb_iota 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                log.debug("fs_nb_iota 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            log.debug("fs_nb_iota 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fs_nb_iota  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fs_nb_iota 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\tlog.debug("fs_nb_iota 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToShort(data,22,'B')\n\t\t\tlog.debug("fs_nb_iota 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_nb_iota version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            log.debug("fs_nb_iota devices crc =%s",crc)\n      \t\tlog.debug("fs_nb_iota dtuid time2")\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("fs_nb_iota crc %s r1 %s setting%s" ,crc,r1,setting)\n        \t\tlog.debug("fs_nb_iota dtuid time")\n        \t\tlocal hour= os.date("%H")\n        \t\tlog.debug("fs_nb_iota dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fs_nb_iota 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fs_nb_iota  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fs_nb_iota 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_nb_iota 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fs_nb_iota deviceid:%s 设备休眠",device.uplink.props.id)\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_nb_iota powerstr=%s",powerstr)\n      \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fs_nb_iota 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n              \t\t\t\trst.data.temperature = nil              \n              \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 振弦 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug("fs_nb_iota acqnum %s",  acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\tlog.debug("fs_nb_iota 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n         \t\t\t if protocalCode==9101 then     --拉线位移\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 位移 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n\t\t\t\t\t\tlog.debug("fs_nb_iota yc ")\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n                  \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_nb_iota 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_nb_iota 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\tlog.debug("fs_nb_iota dataresult %s", json.encode(out))\n            end \n            log.debug("fs_nb_iota out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            log.debug("fs_nb_iota: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("fs_nb_iota : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\tlog.debug("fs_nb_iota subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("fs_nb_iota : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("fs_nb_iota : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_nb_iota  baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fs_nb_iota  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n                --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                --buff=iota.appendHexWord(buff, 0x4248, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\tlog.debug("fs_nb_iota  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("fs_nb_iota  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fs_nb_iota 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then          \tlog.debug("fs_nb_iota subdevice=%s",subdevice)      \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_nb_iota has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_nb_iota has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_nb_iota has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_nb_iota has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("fs_nb_iota  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("fs_nb_iota deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("fs_nb_iota begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        log.debug("fs_nb_iota finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\tlog.debug("fs_nb_iota r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_nb_iota powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fs_nb_iota cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("fs_nb_iota not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    log.debug("fs_nb_iota len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("fs_nb_iota te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    log.debug("fs_nb_iota sum %s", sum)\n   return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n        return "00000000"\n    end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数：22.8125 转成二进制10110.1101，左移4位 1.01101101\n    --E=4 ，再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n	INLINE	2020-08-03 11:52:03.095+08	2020-08-03 11:52:03.095+08	2020-08-03	\N
665fbc53-4bab-4fc7-9bdd-aaa63fc834f7	cdaj_wy	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	start= function()\nend\n\nonData = function(resp)\n\n    log.debug('cdaj_wy device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n  \n\n    \n\t\tlocal ErrorCode = IsValid(resp)\n\t\tif ErrorCode then\n\t\t\tlocal sData= HextoStr(resp)\n\t\t\tlog.debug('cdaj_wy sData是 %s', sData)\n\t\t\tlocal nodenum=device.props.nodenum \n\t\t\tlog.debug('cdaj_wy nodenum是 %s', nodenum)\n\t\t\tlocal allResponse1 = split(sData, nodenum)\n\t\t\tlog.debug('cdaj_wy allResponse1是 %s', json.encode(allResponse1))\n\t\t\tlocal allResponse2 = split(allResponse1[2], '*')\n\t\t\tlocal allResponse = allResponse2[1]\n\t\t\tlog.debug("cdaj_wy allResponse=%s",json.encode(allResponse))\n\t\t\tlocal allSubData = split(allResponse, ',')\n\t\t\tlog.debug('cdaj_wy allSubData=%s', json.encode(allSubData))\n\n\t\n\t\t\tlocal dataCount =  table.getn(allSubData) / 10\n\t\t\tlog.debug('cdaj_wy  dataCount=%s', dataCount)\n\t\t\n\t\t\tfor i = 1, dataCount do\n\t\t\t\t\n\t\t\t\tlocal channelmoduleNo=tonumber(allSubData[i*10-9])\n\t\t\t\tlocal voltage=tonumber(allSubData[i*10-8])\n\t\t\t\tlocal temperature=tonumber(allSubData[i*10-7])\n\t\t\t\tlocal xAcceleration=tonumber(allSubData[i*10-6])\n\t\t\t\tlocal yAcceleration=tonumber(allSubData[i*10-5])\n\t\t\t\tlocal zAcceleration=tonumber(allSubData[i*10-4])\n\t\t\t\tlocal xCoordinate=tonumber(allSubData[i*10-3])\n\t\t\t\tlocal yCoordinate=tonumber(allSubData[i*10-2])\n\t\t\t\tlocal zCoordinate=tonumber(allSubData[i*10-1])\n\t\t\t\tlocal rotateAngle=tonumber(allSubData[i*10])\n\t\t\t\t\n\t\t\t\tlocal childDevice = getDeviceInfos(channelmoduleNo,1)\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif\tchildDevice~=nil  then\n\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t        \n\t\t\t\n\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\ttemperature=temperature,\n                            zAcceleration = zAcceleration,\n                            yAcceleration = yAcceleration,\n                            xAcceleration = xAcceleration,\n\t\t\t\t\t\t    voltage = voltage,\n\t\t\t\t\t\t\trotateAngle = rotateAngle,\n\t\t\t\t\t\t\tyCoordinate = yCoordinate,\n\t\t\t\t\t\t\tzCoordinate = zCoordinate,\n\t\t\t\t\t\t\txCoordinate = xCoordinate\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tend\n\t\t\t\t\n\t\t\tend\n\t\telse\n\t\t\tlog.debug('cdaj_wy 数据无效=%s', resp)\n\t\t\tout.result = {code = ercode, msg = erormsg}\n\t\tend\n    \n\n    local resultData = json.encode(out)\n    log.debug('cdaj_wy  resultData=%s', resultData)\n   ctx:notify(resultData)\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("cdaj_wy:  subdevices是nil")\n    return nil\n    end\nend\nIsValid = function(alldata) \n    log.debug('cdaj_wy 校验开始')\n    if string.len(alldata) < 10 then\n        errormsg = string.format('返回数据[%s],校验长度<10',alldata)\n        errcode = 1002\n        return false\n    end\n\n    log.debug('cdaj_wy 校验通过')\n    return true\nend\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%01X', bi)\n    end\n    return hex\nend\nsplit=function (input, delimiter)\n    input = tostring(input)\n    delimiter = tostring(delimiter)\n    if (delimiter=='') then return false end\n    local pos,arr = 0, {}\n    for st,sp in function() return string.find(input, delimiter, pos, true) end do\n        table.insert(arr, string.sub(input, pos, st - 1))\n        pos = sp + 1\n    end\n    table.insert(arr, string.sub(input, pos))\n    return arr\nend\n--string split函数\nSplitt = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2020-07-31 11:06:44.072+08	2020-11-03 11:41:38.255+08	2020-07-31	\N
bf5e7a15-517b-48a1-bf79-b5ffd7bc9e6c	testhttp	\N		v2	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f	a971c084-cc83-4e41-80f6-c8de9df9b9d6	Lua	function start(){\n    }	INLINE	2020-12-31 16:16:21.701+08	2020-12-31 16:16:21.701+08	2020-12-31	\N
66a372b9-f1df-4802-9cf7-e522c85dbbf6	JFCUD－5M	\N	采集仪	1.0	123d97a2-af89-4fcd-87be-bf4e587c1495	123d97a2-af89-4fcd-87be-bf4e587c1495	f	123d97a2-af89-4fcd-87be-bf4e587c1495	Lua	--丹东\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "JFCUD5M_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("JFCUD5M 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("JFCUD5M 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\tbuff=buff.."000000000000000000000000"   --下发码流 12个00\n\t\n\tbuff=buff.."030D02"    --下发码流  03   0D   02(这里的02是下发所有点的)\n    buff=iota.appendHexByte(buff, tonumber(moduleNo), 'endian')           -- 2: 模块号\n\t\tlog.debug("JFCUD5M 下发码流111 buff=%s",buff)\n\n\n    ok,resp=ctx:ssend(buff,30000)     --下发的码流\n   \n\tif ok then              --下发是否成功\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n\t\t\n    end                              \n    -- ctx:asend("hello")\n    ctx:done(result)    --协议完成打ctx:done ()\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\tlocal index_485_1 =3  --第一个数据的开头位置\n\tlocal index_485_2 =8  --第一个数据的结尾位置\n\tlog.debug('JFCUD5M [%s] 000000hex=%s', hex,moduleStr)\n\t\n\tlocal channelDatas = {}  --放数据的\n\tlocal channelDatasssss = {}\n    local ErrorCode = IsValid(hex,moduleStr)   --判断是否符合厂家协议\n    if ErrorCode then \n\t\t\n\t\tlocal numsj=iota.hexToShort(hex,2,'B');\n\t\tlog.debug('JFCUD5M [%s] 11111111111numsj=%s', numsj)\n\t\tlocal numofzx=string.sub(hex, 5, 8)\n\t\tlog.debug('JFCUD5M [%s] 1111numofzx=%s', numofzx)\n\t\t\n\t\tfor i = 1, 32, 1 do\n\t\t--分割字符串  00 40 96\n\t\t\t\tchannelDatas[i]=string.sub(hex, index_485_1+(i-1) * 6, index_485_2+(i-1) * 6)--这里是取了3个字节的字符串\n\t\t\t\tlog.debug('JFCUD5M [%s] 7878787878channelDatas[i]=%s', channelDatas[i])\n\t\t\n\t\t\t\tlocal kt=string.sub(channelDatas[i],1,2)\n\t\t\t\tlog.debug('JFCUD5M [%s] 90909090kt=%s', kt)\n\t\t\t\t\n\t\t\t\t\n\t\t      if kt=='40' then    --频率\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\t\n\t\t\t\tlog.debug('JFCUD5M [%s] 232323232323channelDatasssss[i]=%s', channelDatasssss[i])\n\t\t\t  elseif kt=='80'  then  --正的温度\n\t\t\t     channelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t  elseif kt=='81' then--负的温度\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t\telseif kt=='7f' then  --没有数据\n\t\t\t\tchannelDatasssss[i]=iota.hexToUShort(channelDatas[i],1, 'B')/10\n\t\t\t\t\n\t\t\t  end\n\t\t\t\t\n\t\t\n        end\n\t\tlog.debug('JFCUD5M [%s] 放数据的地方numsj=%s', json.encode(channelDatasssss))\n\t\t\n\t\t  local moduleNo=device.uplink.props.module \n\t\t\n\t\t--遍历表，从表中取数据\n\t\tfor k, v in pairs(channelDatasssss) do\n\t\tlog.debug('JFCUD5M   子设备的东西模块号=%s,通道号=%s', moduleNoStr, k)\n\t\tlog.debug('JFCUD5M   子设备的通道号和数据=%s,通道号=%s',v,k)\n\t\t\n\t\tlocal childDevice = getDeviceInfo(moduleNo, k)\n\t\tlog.debug('JFCUD5M   取那些kba=%s',json.encode(childDevice))\n\t\t\n\t\t \n\t\tlog.debug('JFCUD5M   子设备的数据3333333=%s,通道号=%s',frequency)\n\t\tlocal deviceId\n\t\tif childDevice ~= nil then\n\t\t\n\t\tlocal kB = childDevice.uplink.capabilities[1].formula.props.B\n\t\tlocal kFo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\tlocal kA = childDevice.uplink.capabilities[1].formula.props.A \n\t\t\n\t\t\t--PΔ＝A(F2－F02)+B(F－F0)    公式\n\t\t frequency= channelDatasssss[k]   --频率值\n\t\t local phy=kA*(frequency ^ 2 - kFo ^ 2) +kB*(frequency - kFo)\n\t\tdeviceId = childDevice.id\n           log.debug('JFCUD5M:子设备原形childDevice=%s', json.encode(childDevice))\n\t\tlocal data1 = {\n                        data = {\n                            frequency = channelDatasssss[k],\n\t                        physicalvalue= phy\n\t\t\t\t\t\t\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\telse\n\t\t\t log.debug('JFCUD5M  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\t\t\n\t\t\t\t\t\n\t\tend\n\t\t\n\t\t--\n\t\t\n\t\t\n\t\tend\n\t\t\n\n       \n       \n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\tlog.debug('JFCUD5M   最后数据的返回=%s',json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('JFCUD5M开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,0,'B') ~= 0x60 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n \n    log.debug('JFCUD5M 数据校验通过')\n    return true\n\nend\n\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        log.debug('JFCUD5M   这里是获取采集仪下面的设备信息=%s',json.encode(device.dnlinks[1].devices))\n\t\tlog.debug('JFCUD5M   进入采集仪get方法模块号=%s',moduleNoId)\n\t\tlog.debug('JFCUD5M   进入采集仪get方法通道号=%s',channelNoId)\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('JFCUD5M:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug('JFCUD5M   进入采集仪1111111=%s',moduleStrCheck)\n                channelStrCheck = child.uplink.props.channel\n\t\t\t\tlog.debug('JFCUD5M   进入采集仪2222222=%s',channelStrCheck)\n               -- log.debug('JFCUD5M 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n\t\t\t\tlog.debug('JFCUD5M   进入采集仪333333=%s',moduleStrCheck)\n                channelStrCheck = child.props.channelId\n\t\t\t\tlog.debug('JFCUD5M   进入采集仪444444=%s',channelStrCheck)\n                --log.debug('JFCUD5M 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\t\t\t\t\tlog.debug('JFCUD5M   这里是从上面下来的通道=%s',channelNoId)\t\n\t\t\t\t\tlog.debug('JFCUD5M   进入采集仪这里是采集仪下面设备的通道=%s',channelStrCheck)\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('JFCUD5M   进入采集仪匹配通道号=%s',channelStrCheck,channelNoId,json.encode(child))\n                    return child\n                end\n          \n        end\n    else\n        log.debug('JFCUD5M:  subdevices是nil')\n        return nil\n    end\nend\n\n\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n	INLINE	2019-11-04 09:21:33.406+08	2019-11-21 09:28:21.613+08	2019-11-04	\N
9a5c7ac8-776a-4dd5-a224-c083f94292e6	soilmop	\N		1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	start = function()\n  \n\tlocal cmd = capability.param\n\tlog.debug("soilmop linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n    log.debug("soilmop:request=%s", req)\n    local ok, ack = ctx:ssend(req, 20000)\n\t\n\t    out = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = HextoStr(ack)\n        }\n    }\n\n\t\n\tlog.debug("soilmop out=%s",json.encode(out))\n\tlog.debug("soilmop responde=%s", HextoStr(ack))\n\n    ctx:done(json.encode(out))\nend\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend	INLINE	2019-10-16 14:47:58.591+08	2019-12-04 13:32:43.684+08	2019-10-16	\N
9de4617d-9968-4e94-9982-75e55cba6adf	dhdz_DAS_DH8221	\N		1.0	56c7bc15-9ef6-4a82-984f-27e061f13a51	56c7bc15-9ef6-4a82-984f-27e061f13a51	f	56c7bc15-9ef6-4a82-984f-27e061f13a51	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('dhdz_DAS_DH8221   device=%s', json.encode(device))\n\tout = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local buff = ''\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    buff = buff .. '0400000030'\n    buff=iota.appendHexCrc(buff, 'L' ,0) \n\n    local result = '{}'\n   \n    ok, resp = ctx:ssend(buff, 4000)\n\n    if ok then\n        local ErrorCode = IsValid(resp,moduleNo)\n\t\tif ErrorCode then\n\t\t\tlog.debug('dhdz_DAS_DH8221 数据有效=%s', resp)\n\t\t\tallSubData = getAllDatas(resp)\n\t\t\t--发送指令\n\t\t\tlocal subdevices = device.dnlinks[1].devices\n\n\t\t\tif subdevices ~= nil then\n\t\t\t\tfor index, child in pairs(subdevices) do \n\t\t\t\tlog.debug('dhdz_DAS_DH8221 child=%s', json.encode(child))\n\t\t\t\t\tchannelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\tif allSubData[channelNo]~=nil then\n\t\t\t\t\t\tlog.debug('dhdz_DAS_DH8221 解析通道%s数据', channelNo)\n\t\t\t\t\t\tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n\t\t\t\t\t\ttable.insert(out.data, result)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tlog.debug('dhdz_DAS_DH8221 数据无效=%s', resp)\n\t\t\tout.result = {code = ercode, msg = erormsg}\n\t\tend\n\t\t\n\tend\n\n    local resultData = json.encode(out)\n    log.debug('dhdz_DAS_DH8221 resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 7, -5)\n\tlog.debug('dhdz_DAS_DH8221 subDataArea=%s', subDataArea)\n    local dataCount = string.len(subDataArea) / 4\n\tlog.debug('dhdz_DAS_DH8221 dataCount=%s', dataCount)\n    for i = 1, 32,1 do\n\t    log.debug('dhdz_DAS_DH8221  i是%s',i)\n        DataList[i] = iota.hexToUShort(hexStr, (i - 1) * 2 + 3, 'B')\n\t\tlog.debug('dhdz_DAS_DH8221 DataList[%s]=%s',i,DataList[i])\n    end\n\treturn DataList\nend\n\nunmarshall = function(childDevice, data, subChannelId, moduleNoStr)\n    log.debug('dhdz_DAS_DH8221 cc=%s, m=%s, recv =%s,c=%s',childDevice,moduleNoStr, data,subChannelId)\n    local subData = {\n        data = {},\n        result = {},\n\t\tdevice = '',\n        type = 1\n    }\n\t\n    local f=data[subChannelId]\n\tlocal freq=f/10\n\n           \n   if childDevice ~= nil then\n     \n        singleData = {\n            data = {\n\t\t\t  \n                frequency\t = tonumber(string.format('%0.2f',freq))\n           \n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n\nIsValid = function(data, deviceModule)\n    local dataModule = iota.hexToByte(data, 0, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的数据模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\n    --crc\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("dhdz_DAS_DH8221 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            local moduleStrCheck = child.uplink.props.module --模块 通道 接口获取\n            local channelStrCheck = child.uplink.props.channel\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) then\n                log.debug('dhdz_DAS_DH8221  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('dhdz_DAS_DH8221  m=%s c=%s 无匹配子设备', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\n	INLINE	2019-09-30 09:57:51.835+08	2019-10-09 17:38:05.796+08	2019-09-30	\N
597ac084-8a80-4f12-9a5b-73d7910331ff	fs_qixing_wl	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--?D:\\SVN\\201901项目\\20190104新项目资料提交\\江西飞尚--静力水准仪--岳晓静\\静力水准仪FS-JLSZ-V1.00通讯协议.docx\n\nstart=function ()\n\t out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n\tlocal sendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\telse\n\t\tout.result = {code=1001,msg='采集超时'} \n\t\tresult=json.encode(out)\n\tend\n\tctx:done(result)\nend\n\n\nfunction protocol_encode(moduleNoStr)\n--采集压力的偏移地址为22-23 默认是22（0x16）\n--采集温度的偏移地址为38-39 默认是38（0x26）\n\tlocal BE='B'\n\tlocal buff='';  \n\tbuff=iota.appendHexByte(buff, moduleNoStr, BE);  -- 3:  模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);  --功能码  0x03采集        \n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x16, BE);\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x12, BE); --读取18个寄存器\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)   --CRC16\n\treturn buff\nend\n--模块号 17\n--1103001600122693\n--11032441b30e9a000000000000000042c800000000000041200000471335004a6a96fcc04fb2cb31\n\nfunction protocol_decode(hex,moduleNoCheck)\n \n\tlocal data = hex;\n\n\t--判断数据有效性\t\t\t\n\tlocal ErrorCode = IsValid(data,moduleNoCheck)\n    if ErrorCode then\n\tlocal pressure = iota.hexToFloat(data, 3,'B'); --  压强\n\tlocal temperature = iota.hexToFloat(data, 35,'B'); --  温度\t\t\t\n\t\tout.data = {\n\t\tpressure=tonumber(string.format('%0.3f',pressure)),\n\t\ttemperature=tonumber(string.format('%0.2f',temperature))\n\t\t}\n\telse\n        out.result = {code=errcode,msg=errormsg} \n\tend\n\t return json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 41  then\n        errormsg = string.format('无效的数据长度=%s≠41',checkLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据指令≠03')\n        errcode = 1003\n        return false\n    end\n\tlocal checkModule=iota.hexToByte(data,0,'B')\n    if moduleNoCheckStr ~= tostring(checkModule) then \t\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoCheckStr)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n	INLINE	2019-07-02 15:39:32.86+08	2019-12-07 10:46:36.289+08	2019-07-02	\N
51fd07fa-e516-466b-8ca2-c4baffc0a1d2	mas-gnss	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start = function()\n    local moduleNo = device.uplink.props.id --模块\n    --log.debug('mas_gnss [%s] device=%s',moduleNo,jaon.encode(device))\nend\n\nonData =function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('mas_gnss [%s] device=%s',moduleNo,json.encode(device))\n    log.debug('mas_gnss [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    local bodydata = json.decode(bodydataStr)\n    local projectId = bodydata.projectId\n    --local serverIP = '218.3.126.49'\n    --local port = '19700'\n    --local serverTime = getTimeNowStr()\n    local url = httpbody.URL\n    --log.debug('mas_gnss [%s] url=%s type=%s', moduleNo, url, type(url))\n\n        --获取实时数据\n\t\tlocal projectId = bodydata.projectId\n        local deviceId = bodydata.deviceId \n  \t\tlocal x = bodydata.x \n  \t\tlocal y = bodydata.y \n  \t\tlocal z = bodydata.z \n  \t\tlocal dx = bodydata.dx \n  \t\tlocal dy = bodydata.dy \n  \t\tlocal dz = bodydata.dz\n  \n        local RTime = bodydata.time            --时刻   \n       \n         \n\n        out.data = {\n            projectId = projectId,\n            deviceId = deviceId,\n    \t\tx = x,\n    \t\ty = y,\n    \t\tz = z,\n    \t\tdx = dx,\n            dy = dy,\n            dz = dz\n        }\n        out.time = unixtimestamp(RTime, deviceId)\n  \t\tlocal resultStr=json.encode(out)\n        log.debug('mas_gnss [%s] json.encode(out)=%s', moduleNo,resultStr)\n        asend_HttpResponse()\n        ctx:notify(resultStr)\nend\n\nasend_HttpResponse = function()\n    ack = {type = 'http', code = 200, body = '{}'}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('mas_gnss [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n	INLINE	2018-12-08 15:11:17.96+08	2020-07-23 11:21:43.509+08	2018-12-08	\N
da525217-b5fb-4776-ab3b-d91165192839	GZM	\N		1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	--//\n\nstart = function()\n    ok, resp = ctx:ssend('01020304', 5000)\nend\n\nonData = function(hex)\n    --log.debug("fs_gzm_2018 收到数据=%s", hex)\n    --log.debug("fs_gzm_2018 device =%s", json.encode(device))\n    --log.debug("fs_gzm_2018subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\nlog.debug("[soip:40001:99998888] %d bytes. ", string.len(hex))\n  \n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = HextoStr(hex)\n        log.debug('fs_gzm_2018:sData是 %s', sData)\n        --获取子字符串表\n        local dataTable = json.decode(sData)\n\n        --log.debug("fs_gzm_2018   dataTable=%s",json.encode(dataTable))\n\n        --分析单类数据\n        if dataTable ~= nil then\n            for k, sensorValue in ipairs(dataTable.allNodeDatas) do\n                --log.debug("fs_gzm_2018   k=%s,sensorValue=%s",k,json.encode(sensorValue))\n                if k >= 1 then\n                    local factorId = tonumber(sensorValue.factorid)\n                    local factorName = getFactorName(factorId)\n                    local moduleNo = tonumber(sensorValue.moduleId)\n                    local channelNo = tonumber(sensorValue.channel)\n                    log.debug(\n                        'fs_gzm_2018   k=%s,factorId=%s,factorName=%s,moduleNo=%s,channelNo=%s',\n                        k,\n                        factorId,\n                        factorName,\n                        moduleNo,\n                        channelNo\n                    )\n                    --解析单条数据\n                    for kdata, vdata in ipairs(sensorValue.data) do\n                        --log.debug('fs_gzm_2018:遍历解析单条数据 键=' .. tostring(kdata) .. ' 值=' .. json.encode(vdata))\n\n                        local anglex = tonumber(vdata.value[1])\n                        local angley = tonumber(vdata.value[2])\n                        --log.debug('fs_gzm_2018   factorid=%s,vdata.value[3]=%s', factorId, vdata.value[3])\n                        local force  --轴力\n\n                        local length_cj  --模板沉降\n                        local length_sp  --水平位移\n\n                        if factorId == 0 then --模板沉降\n                            length_cj = tonumber(vdata.value[3])\n                        elseif factorId == 1 then --水平位移\n                            length_sp = tonumber(vdata.value[3])\n                        elseif factorId == 2 then --轴力\n                            force = tonumber(vdata.value[3])\n                        else\n                            --log.debug('fs_gzm_2018   factorId=%s,type=%s', factorId, type(factorId))\n                        end\n\n                        local timeStamp = tonumber(vdata.time) / 1000 --时间戳\n                        local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamp)\n                        --log.debug('fs_gzm_2018   timeStamp=%s,recordTime=%s', timeStamp, recordTime)\n                        --获取通道设备deviceId\n                        local childDevice = getDeviceInfo(moduleNo, channelNo)\n\n                        local deviceId\n                        if childDevice ~= nil then\n                            --log.debug("fs_gzm_2018: %s节点 模块%s,通道%s原型childDevice=%s",factorName,moduleNo,channelNo,json.encode(childDevice))\n                            deviceId = childDevice.id\n                        else\n                            --log.debug('fs_gzm_2018:%s节点 deviceId为nil:m=%s,c=%s', factorName, moduleNo, channelNo)\n                        end\n\n                        local data1 = {\n                            data = {\n                                x = anglex,\n                                y = angley,\n                                force = force,\n                                settling = length_cj,\n                                displacement = length_sp\n                            },\n                            device = deviceId,\n                            time = recordTime,\n                            type = 1\n                        }\n                        table.insert(out.data, data1)\n                    end\n                end\n            end\n        else\n            log.debug('fs_gzm_2018 数据不完整')\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('[99998888] fs_gzm_2018 resultData=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("fs_gzm_2018 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("fs_gzm_2018:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n                --log.debug('fs_gzm_2018 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n                --log.debug('fs_gzm_2018 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    --log.debug('fs_gzm_2018:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('fs_gzm_2018: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('fs_gzm_2018  校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        log.debug('fs_gzm_2018: 校验失败 Data is nil')\n        return false\n    end\n\n    if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n        errormsg = 'CMD is wrong'\n        errcode = 1002\n        log.debug('fs_gzm_2018: 校验失败 CMD is wrong')\n        return false\n    end\n\n    log.debug('fs_gzm_2018: 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = string.sub(hex,2*i-1,2*i)\n        local ascii=string.char(tonumber(bi,16))\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetFactorName = function(num)\n    local NO = tonumber(num + 1)\n    local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n    local FactorName = FactorNames[NO]\n    return FactorName\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-08-09 15:04:12.604+08	2019-08-09 15:28:25.709+08	2019-08-09	\N
4de81ee8-2530-4c2b-82ee-aa3fa3a8b381	EC-111	\N	EC-1型风速风向仪	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "EC-111 ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("EC-111 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("EC-111  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\t\t\n\t\tlog.debug('EC-111 %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("EC-111  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--FF0300000002D1D5\n--FF0304009E003A0401\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local direction = iota.hexToShort(hex,3,'B')\n\t\tlog.debug('EC-111  %s 风速',direction)\n\t\tlocal speed = iota.hexToShort(hex,5,'B')/10\n\t\tlog.debug('EC-111  %s 风向',speed)\n\t\t\n\t\t\n       \n       \n        out.data = {\n\t\t\twindspeed=speed,\n\t\t\twinddirection=direction,\t\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('EC-111 %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('EC-111 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-09-29 11:59:24.941+08	2019-09-30 16:20:24.248+08	2019-09-29	\N
dfa3967f-3c30-459f-82f0-7d8efa88fb05	RT-1	\N	RH-1型温度计	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--// 风速风向传感器\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "RT-1 ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("RT-1 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("RT-1  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\t\t\n\t\tlog.debug('RT-1 %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("RT-1  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--FF0300000002D1D5\n--FF030416760DFF44BE \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local humidy = iota.hexToShort(hex,5,'B')/100\n\t\tlog.debug('RT-1  %s 湿度',humidy)\n\t\tlocal Temp = iota.hexToShort(hex,3,'B')/100-40\n\t\tlog.debug('RT-1  %s  温度',Temp)\n\t\t\n\t\t\n       \n       \n        out.data = {\n\t\t\thumidy=humidy,\n\t\t\tTemp=Temp,\t\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('RT-1 %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('RT-1 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-09-29 11:59:59.379+08	2019-09-30 16:46:17.751+08	2019-09-29	\N
b8f43fbc-56bf-4061-9284-e22cdb48e41b	hzyy_gnss_file_trans	\N		1.0	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	f	19b1d47b-fcca-4fd9-8bc0-0cab3b2675e2	Lua	start = function()\n    log.debug('hzyy_gnss_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('hzyy_gnss_file_transfer  recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("hzyy_gnss_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('hzyy_gnss_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('hzyy_gnss_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --log.debug('hzyy_gnss_file_transfer  content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                    log.debug('hzyy_gnss_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height =jsondata.RV[3]--,\n                                --eastingDiff = 1000*jsondata.RV[4],\n                                --northingDiff = 1000*jsondata.RV[5],\n                                --heightDiff = 1000*jsondata.RV[6]\n                               \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    log.debug('hzyy_gnss_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n    log.debug('hzyy_gnss_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(data_moduleid) then\n                log.debug('hzyy_gnss_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n        \t\tlog.debug('hzyy_gnss_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n            end\n        end\n        log.debug('hzyy_gnss_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('hzyy_gnss_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2020-09-11 14:14:59.448+08	2020-09-11 14:16:43.42+08	2020-09-11	\N
bac4bba9-6af2-401c-b42c-9f1bd2d62728	idau_file_diag	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    --log.debug("fs_idau_file:jiexi")\n  end\n  \nonData=function(data)\n    --local jdata=json.encode(data)\n    --log.debug("fs_idau_file:data=%s",json.encode(data))\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  --log.debug("fs_idau_file:payload=%s", data.payload)\n                  parseData(data.payload)\n            elseif  data.ext==".m" then\n                  --log.debug("fs_idau_file.m:payload=%s", data.payload)\n          \t\t  parseDiag(data.payload)\n          \telse \n          \t\t--log.error("fs_idau_file:type is not.d/.m %s", data.name)\n            end\n        else\n            --log.error("fs_idau_file:not a d file .d", data.ext)\n        end\n    else\n        --log.error("fs_idau_file:data is nil")\n    end\nend\nfunction parseData(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  \n    local djs=Split(js,'\\r')\n    --log.debug("fs_idau_file:jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            --log.debug("fs_idau_file:dj=%s",v)\n            --log.debug("fs_idau_file:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and dj.R =="0" then\n                --log.debug("fs_idau_file:ceshiyixia1")\n                local childDevice=getDeviceInfo(dj.S)\n                --log.debug("fs_idau_file:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("fs_idau_file:ceshiyixia2")\n                    --log.debug("fs_idau_file:dj.PV1=%s",dj.PV[1])\n\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                physicalvalue = dj.PV[1] or 0,\n                                frequency=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        --log.debug("fs_idau_file:ceshi_zx")\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S",(tonumber(dj.T)/1000))  \n                            }\n            \t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n              \t\t\t\tdata4.data.temperature = nil              \n              \t\t\tend\n\t\t\t\t\t\tlocal status = dj.R\n\t\t\t\t\t\tif tonumber(status) == 140104 then\n\t\t\t\t\t\t\tdata4.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif tonumber(status) == 140105 then\n\t\t\t\t\t\t\tdata4.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\t--log.debug("fs_idau_file:out data4=%s",json.encode(data4))\n\t\t\t\t\t\ttable.insert(out.data,data4)\n                    end\n\n                end\n            else\n                --log.debug("fs_idau_file:dj=nil")\n            end\n        else\n            --log.debug("fs_idau_file:v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    log.debug("fs_idau_file:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\nend\nfunction parseDiag(js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {},\n        type=2\n    }\n    \n    local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n    log.debug("parsing diag file = %s",json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n  \n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        --log.debug("fs_idau_file:deviceInfo=%s",json.encode(device))\n        for i,link in pairs(device.dnlinks) do\n            --log.debug("fs_idau_file:link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("fs_idau_file:node=%s",json.encode(node))\n                for k,sublink in pairs(node.dnlinks) do\n                    --log.debug("fs_idau_file:sublink=%s",json.encode(sublink))\n                    for u,subdevice in pairs(sublink.devices) do\n                        --log.debug("fs_idau_file:sensor=%s",json.encode(subdevice))\n                        if subdevice.uplink.props.sensorid == sensorId then\n                            --log.debug("fs_idau_file:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId)\n                            resensor = subdevice\n                        end \n                    end\n                end\n            end\n        end          \n    end\n    return resensor\nend\n\n\n\n	INLINE	2018-03-09 09:41:56.466+08	2020-04-15 10:47:35.593+08	2018-03-09	\N
15d206c2-cc6e-46f4-ba70-f8d642edcea1	MASYTSWJC	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("MASYTSWJC: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    --log.debug("MASYTSWJC: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=1\n    }\nlocal moduleNonum=device.uplink.props.module\n    local sData= HextoStr(hex)\n    log.debug("MASYTSWJC: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],';END;')\n\t log.debug("MASYTSWJC: spliteData2=%s",json.encode(spliteData2))\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\tlog.debug("MASYTSWJC: spliteData3=%s",json.encode(spliteData3))\n\t\n\tlocal allData2=Split(spliteData3[8],':')\n\tlocal allData=Split(allData2[2],'_')\n\tlocal sensornum=allData[1]\n\tlocal length=tonumber(allData[2])\n\t\n\tlog.debug("MASYTSWJC: %s length=%s",allData[2],length)\n  if moduleNonum==moduleNo then\n      out.data = {\n            length=length\n        }\n\t end\n\t\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("MASYTSWJC: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\t\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function (input, delimiter)\n    input = tostring(input)\n    delimiter = tostring(delimiter)\n    if (delimiter=='') then return false end\n    local pos,arr = 0, {}\n    for st,sp in function() return string.find(input, delimiter, pos, true) end do\n        table.insert(arr, string.sub(input, pos, st - 1))\n        pos = sp + 1\n    end\n    table.insert(arr, string.sub(input, pos))\n    return arr\nend\n\n\n	INLINE	2020-11-10 14:38:20.896+08	2020-11-10 16:01:49.64+08	2020-11-10	\N
5a0243a8-8564-4245-86a7-c477a66eeb15	fs_node_weather2	\N		2.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	function start() \nlog.debug("fs_node2 LUA:start %s", "idau_node_oxy.lua")\nend\n\nonData=function(msg)\n\tif (msg == nil or msg.type == nil) then\n\t\t--log.error("onData(nil)!!!")\n\telseif (msg.type == "upload") then -- 文件上传进度\n\t\ton_file_upload(msg)\n\telseif (msg.type == "idau/file") then -- 收到数据文件\n    \tlog.error("fs_node2:dtuid=%s,idau/file=%s",device.uplink.props.id,msg)\n\t\ton_data_file(msg)\n\telseif (msg.type == "idau/mop") then -- MOP 消息, wakeup等.\n\t\tlocal mop = json.decode(msg.payload)\n\t\t--log.error("fs_node2:dtuid=%s,msgid=%s,file_mop=%s",device.uplink.props.id,msg.id,json.encode(mop))\n\t\tif (mop == nil) then\n\t\t\t--log.error("onData: mop is nil!")\n\t\tend\n\t\tif (mop.M == "c_wakeup") then\n\t\t\tlocal updatecfg = true --初次配置\n\t\t\tlocal r1,ok = redis.get(device.id.."_fdset")\n\t\t\t--判断是否配置，否就是初次配置\n\t\t\tlocal strdevice= toHexStr(json.encode(device))\n\t\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\t\tlocal crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("fs_node2 dtuid=%s,crc1= %s ,r1 = %s",device.uplink.props.id,crc,r1)\n\t\t\tif ok and r1~=nil then\n\t\t\t\tif crc == r1 then --配置无变动，无需下发\n\t\t\t\t\tupdatecfg = false\t\n          \t\t\tlog.debug("fs_node2 dtuid=%s    配置无变动，无需下发",device.uplink.props.id)\n          \t\telse\n          \t\t\tlog.debug("fs_node2 dtuid=%s    配置变动，需要下发",device.uplink.props.id)\n\t\t\t\tend\n        \n\t\t\tend\t\t\t\n\t\t\t--log.error("fs_node2:redis setting sec")\n\t\t\tlocal updatefw,okey = redis.get(device.id.."_fwset") -- 判断是否需要更新固件，还未处理\n\t\t\tif okey and updatefw == "redis: nil" then\n\t\t\t\tupdatefw = false\n\t\t\tend\n\t\t\tlocal diag = false\n\t\t\t--log.error("fs_node2:diag = false")\n\t\t\tif device.uplink.props.diag == "true" then\n\t\t\t\t--log.error("fs_node2:diag = true")\n\t\t\t\tdiag = true\n\t\t\tend\n\t\t\tdeal_mop_wakeup(msg,updatecfg, updatefw,diag) --处理wakeup\n\t\t\tif diag == true then \n        \t\tctx:sleep(1)\n\t\t\t\tupdate_diag()\n\t\t\tend\n\t\t\tif (updatecfg) then -- 需要更新配置\n                --log.debug("fs_node2 dtuid=%s    开始下发配置",device.uplink.props.id)\n\t\t\t\tupdate_config()\n\t\t\tend\n      \t\t--log.debug("fs_node2 updatefw %s",updatefw)\n\t\t\tif (tostring(updatefw) == "true") then -- 需要更新固件\n\t\t\t\tupdate_fw(msg)\n\t\t\tend\n\t\telseif (mop.M == "c_sensor") then -- 配置上传应答\n\t\t\t--log.debug("fs_node2 c_sensor ack")\n\t\telseif (mop.M == "c_data") then --MOP 指令数据解析\n\t\t\tparse_Data(msg,true)\t\n\t\tend\n\tend\nend\n\n--文件上传进度\nfunction on_file_upload(msg)\n--log.debug("fs_node2： on_file_upload: file: progress=%3.2f, status=%d", p.progress, p.status)\n-- 发送完毕.\nif (p.status == 0 and p.progress == 1.00) then\n\t-- 此处可以 ctx:notify 一个能力数据出去\n\t--log.debug("fs_node2： file uploaded in %d seconds.", p.duration)\n\t-- 发送开始更新指令.\n\tlocal mop = {\n\t\tM = "c_pgupdate",\n\t\tO = "UP",\n\t\tP = {\n\t\t\tV = p.fi.ext.ver, -- ver.\n\t\t\tF = p.fi.name, -- file\n\t\t\tR = true -- reboot\n\t\t}\n\t}\n\tlocal req = {\n\t\ttype = "idau",\n\t\tpayload = json.encode(mop)\n\t}\n\t--log.debug("fs_node2：Notify device to update fw...")\n\tlocal ok, ack = ctx:ssend(req, 3000)\n\tif (ok) then\n\t\t-- Done\n\t\tredis.set(device.id.."_fwset",tostring(false))\n\tend\nend\nend\n\n--需要配置更新 上传固件逻辑\nfunction update_fw(msg)\n\t--log.debug("fs_node2 update fw for device: %s", device.id)\n\t-- TODO 固件更新信息, 应该通过其他的能力调用, 写入到Redis后, 在这里取出来, 譬如: redis.hget(device.id,"fwinfo")\n\tlocal fwinfo_get = json.encode(redis.get(device.id,"fwinfo"))\n\tif fwinfo_get == nil then\n\t\tlocal fwinfo = {\n\t\t\turl = "http://localhost:9070/fw/test.jpg",\n\t\t\tname = "test.jpg",\n\t\t\tsize = 22824,\n\t\t\tdate = "2018-11-14 20:01:02",\n\t\t\tmd5 = "3768a0dd6faabd7a1c4419dac71db6ca",\n\t\t\tnotify = 1, -- 0=极少通知(开始,结束,错误), 1=每包\n\t\t\text = {\n\t\t\t\tver = 1234,\n\t\t\t\tcompress = 0, --0=none, 1=msg compress, 2=file compress.\n\t\t\t\tpkg = 1024 -- 分包\n\t\t\t}\n\t\t}\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\t--log.debug("fs_node2 ctx:upload =>%s %s", fwinfo.name, ok, err)\n\telse \n\t\tlocal fwinfo = fwinfo_get\n\t\t-- 开始上传.\n\t\tlocal ok, err = ctx:upload(fwinfo) --\n\t\t--log.debug("fs_node2 ctx:upload =>%s %s", fwinfo.name, ok, err)\n\tend\nend\n\n--收到数据文件\non_data_file=function(data)\n    local jdata=json.encode(data)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  log.debug("fs_node2:payload=%s", toStrHex(data.payload))\n                  parseData(toStrHex(data.payload))\n            elseif  data.ext==".m" then\n                  --log.debug("fs_node2.m:payload=%s", toStrHex(data.payload))\n          \t\t  parseDiag(toStrHex(data.payload))\n          \telse \n          \t\t--log.error("fs_node2:type is not.d/.m %s", data.name)\n            end\n        else\n           -- log.error("fs_node2:not a d file .d", data.ext)\n        end\n    else\n        --log.error("fs_node2:data is nil")\n    end\nend\n\nfunction parse_Data(js,bmop)\n    out={\n        data ={},\n        result = {},\n        type=2\n    }\n\n\tlocal msgid = js.id\n\n\tlocal mop = json.decode(js.payload)\n\t--log.debug("fs_node2:mop=%s",json.encode(mop))\n\tlocal oxydevice = {}\n    for k,v in ipairs(mop.P) do\n        if v~='' and v~=nil then\n            local dj=mop.P[k]\n            log.debug("fs_node2:dtuid %s  dj=%s",device.uplink.props.id,json.encode(v))\n            log.debug("fs_node2:dtuid %s sen=%s",device.uplink.props.id,dj.S)\n            --if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then -- 临时去除结果判定。\n      \t\tif dj~=nil and dj ~= '' then\n                local childDevice=getDeviceInfo(dj.S)\n                log.debug("fs_node2: dtuid %s childDevice=%s",device.uplink.props.id,json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("fs_node2:dj.PV1=%s",dj.PV[1])\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1] or 0,\n                                    temperature=dj.RV[2] or 0,\n                                    am=dj.RV[3] or 0\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("fs_node2:out data4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="kq" then --AM2305模组\n\t\t\t\t\t\tlocal sensorId = tostring(dj.S)\n\t\t\t\t\t\tlocal ch = string.sub(sensorId,-1,-1)\n\t\t\t\t\t\tif ch == "4" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:AM2305模组")\n\t\t\t\t\t\t\tlocal data5={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\ttemp=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\thum=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,  \n\t\t\t\t\t\t\t\ttype="am2305", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data5=%s",json.encode(data5))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data5)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "1" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM100模组")\n\t\t\t\t\t\t\tlocal data6={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm100=dj.PV[1]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm100", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data6=%s",json.encode(data6))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data6)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif  ch == "5" then --PM2.5,PM10模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM2.5,PM10模组")\n\t\t\t\t\t\t\tlocal data7={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm25=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tpm10=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm10", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data7=%s",json.encode(data7))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data7)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "3" then --GPS模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:GPS模组")\n\t\t\t\t\t\t\tlocal data8={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tlang=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tlong=dj.PV[1]\n\t\t\t\t\t\t\t\t\t\t--time_bj=dj.PV[3]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="gps", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data8=%s",json.encode(data8))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data8)\n\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\tif ch == "2" then --AQI模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:AQI模组")\n\t\t\t\t\t\t\tlocal data9={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tCO=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tO3=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n\t\t\t\t\t\t\t\t\t\tSO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\t\tVOC=dj.PV[5]                                                                       \n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="aqi", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data9=%s",json.encode(data9))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data9)\n\t\t\t\t\t\tend\t\t\t\n                    end\t\t\t\n                end\n            else\n                --log.debug("fs_node2:dj=nil")\n            end\n        else\n           --log.debug("fs_node2:v is nil v=%s",json.decode(v))\n        end\n\n    end\n\tlog.debug("fs_node2 resultData : oxydevice is =%s", json.encode(oxydevice))\n\t-- 组合空气设备数据\n\tif json.encode(oxydevice) ~= "null" then\n\t\t   CombineData(oxydevice)\n\tend\n\t--log.debug("fs_node2 resultData 1: data is =%s", json.encode(out))\n    local resultData =json.encode(out)\n    log.debug("fs_node2 dtuid: %s resultData : data is =%s",device.uplink.props.id,json.encode(out))\n    ctx:notify(resultData)\n\t\t-- 发送应答.\n\tif bmop == true then\n\t\tlocal mopack = {\n\t\t\tM = "c_data",\n\t\t\tR = 0\n\t\t}\n\t\tlocal msgack = {\n\t\t\ttype = "idau",\n\t\t\tid = msgid, -- 消息ID, 重要!!!\n\t\t\tack = true, -- ack.(本消息是个应答)\n\t\t\tpayload = json.encode(mopack) -- 消息荷载: MOP\n\t\t}\n\t\t-- very important! 节点会等待这个消息, 用于判定通讯状态.\n\t\t--log.debug("fs_node2 data ack sent: %s", json.encode(msgack))\n\t\tctx:asend(msgack)\n\tend\nend\n\nfunction parseData(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal oxydevice = {}\n    local djs=Split(js,'\\n')\n    --log.debug("fs_node2:jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            log.debug("fs_node2:dj=%s",json.encode(v))\n            --log.debug("fs_node:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and tostring(dj.R) =="0" then\n                local childDevice=getDeviceInfo(dj.S)\n                --log.debug("fs_node2:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("fs_node2:dj.PV1=%s",dj.PV[1])\n\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("fs_node2:out data4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="kq" then --空气\n\t\t\t\t\t\tlocal sensorId = tostring(dj.S)\n\t\t\t\t\t\tlocal ch = string.sub(sensorId,-1,-1)\n\t\t\t\t\t\tif ch == "4" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:AM2305模组")\n\t\t\t\t\t\t\tlocal data5={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\ttemp=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\thum=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,  \n\t\t\t\t\t\t\t\ttype="am2305", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data5=%s",json.encode(data5))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data5)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "1" then\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM100模组")\n\t\t\t\t\t\t\tlocal data6={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm100=dj.PV[1]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm100", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("fs_node2:out data6=%s",json.encode(data6))\n\t\t\t\t\t\t\ttable.insert(oxydevice,data6)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif  ch == "5" then --PM2.5,PM10模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:PM2.5,PM10模组")\n\t\t\t\t\t\t\tlocal data7={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tpm25=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tpm10=dj.PV[2]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="pm10", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data7=%s",json.encode(data7))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data7)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif ch == "3" then --GPS模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:GPS模组")\n\t\t\t\t\t\t\tlocal data8={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tlang=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tlong=dj.PV[1]\n\t\t\t\t\t\t\t\t\t\t--time_bj=dj.PV[3]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="gps", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data8=%s",json.encode(data8))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data8)\n\t\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\t\tif ch == "2" then --AQI模组\n\t\t\t\t\t\t\t--log.debug("fs_node2:AQI模组")\n\t\t\t\t\t\t\tlocal data9={\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\tCO=dj.PV[1],\n\t\t\t\t\t\t\t\t\t\tO3=dj.PV[2],\n\t\t\t\t\t\t\t\t\t\tNO2=dj.PV[3],\n\t\t\t\t\t\t\t\t\t\tSO2=dj.PV[4],\n\t\t\t\t\t\t\t\t\t\tVOC=dj.PV[5]                                                                       \n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype="aqi", \n\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t--log.debug("fs_node2:out data9=%s",json.encode(data9))\n\t\t\t\t\t\t\t\ttable.insert(oxydevice,data9)\n\t\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\n                    end\n\t\t\t\n                end\n            else\n                --log.debug("fs_node2:dj=nil")\n            end\n        else\n            --log.debug("fs_node2:v is nil v=%s",json.decode(v))\n        end\n\n    end\n\t--log.debug("fs_node2 resultData : oxydevice is =%s", json.encode(oxydevice))\n\t-- 组合空气设备数据\n\tif json.encode(oxydevice) ~= "null" then\n\t\tCombineData(oxydevice)\n\tend\n    local resultData =json.encode(out)\n    log.debug("fs_node2:".."LUA:resultData dtuid %s : data is =%s",device.uplink.props.id, json.encode(out))\n    ctx:notify(resultData)\nend\n\nfunction parseDiag(js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {},\n        type=2\n    }\n    \n    local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n    log.debug("fs_node2 parsing diag file = %s",json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n\n\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(sensorId)\n\tlocal sensorstr = tostring(sensorId)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do        \t\t\n                if tostring(subdevice.id) == tostring(sensorId)then   \n\t\t\t\t\tlog.debug("fs_node2 1oxy:%s subdevice.id: %s",device.uplink.props.id,tostring(subdevice.id))\n                    return subdevice\n\t\t\t\telseif tostring(subdevice.id) == string.sub(sensorstr,1,-2) then  --找不到传感器\n\t\t\t\t\tlog.debug("fs_node2 oxy:%s subdevice.id: %s",device.uplink.props.id,tostring(subdevice.id))\n\t\t\t\t\toxygendevice = subdevice\n                    return subdevice\n                end    \n            end\n        end\n       -- log.debug("fs_node2 has no devic e sensorid=%s ",sensorId)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fs_node2 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n--需要诊断\nupdate_diag = function()\n  \t--log.debug("fs_node2_mop:dtuid %s  diag=%s",device.uplink.props.id,device.uplink.props.diag)\n      local req_diag={\n        type = "idau",\n        payload = ""\n    }\n\tlocal mop_diag = {\n        M = "c_diag",\n        O = "DIAG",\n        P = {\n            D = "root",\n            SYNC = true\n        } -- 荷载\n    }\n\n\treq_diag.payload= json.encode(mop_diag)\n\tlog.debug("fs_node2_mop:request=%s", json.encode(req_diag))\n\tlocal ok, ack = ctx:ssend(req_diag, 30000)\n\tlocal repdiag = json.decode(ack.payload)\n  \tlocal res = nil\n  \tif repdiag.P == nil then\n    \tres = nil\n    elseif  repdiag.P.R == nil then\n\t\tres = nil\n    elseif repdiag.P.R.root == nil then\n        res = nil\n    else\n       res = repdiag.P.R.root\n    end\n\t--log.debug("fs_node2_mop:reponde1=%s", json.encode(ack))\n\t--log.debug("fs_node2_mop:reponde2=%s", json.encode(res))\n\tresult = {\n\t\tresult = nil,\n\t\ttype = 1,\n\t\tdata = {\n\t\t\tR = res,\n\t\t\t_data_type = "diag"\n\t\t}\t\t\n\t}\n\tlog.debug("fs_node2_mop: dtuid %s parsing diag mop = %s",device.uplink.props.id,json.encode(ack))\n\tctx:notify(json.encode(result))\nend\n\n--需要配置更新\nupdate_config = function()\n    --log.debug("fs_node2_mop: update_config device=%s",json.encode(device))\n\tlocal str= toHexStr(json.encode(device))\n\tstr=iota.appendHexCrc(str, 'B' ,0)\n\tlocal crc = string.sub(str,-4,-1)\n    local linkcnt = #(device.dnlinks)\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local req_sensor={\n        type = "idau",\n        payload = ""\n    }\n    local mop_sensor = {\n        M = "c_sensor",\n        O = "S",\n        P = {\n\t\t\tnetwork ={},\n\t\t\tsensors = {}\n\t\t} -- 荷载\n    } \n    local req_diag={\n        type = "idau",\n        payload = ""\n    }\n\n\n\tlocal dmodel = 0 \n\tif tostring(device.uplink.props.dm) == 'MOP' then\n\t\tdmodel = 1\n\tend\n\tlog.debug("fs_node2:network")\n\t--采集间隔下移到传感器\n\tlocal networks={\n\t\tDI = tonumber(device.uplink.props.dis) or 5, -- 设备属性: 采集间隔. 默认30分钟\n\t\tCD = tonumber(device.uplink.props.cd) or 30,--冷起延迟(秒)\n\t\tWD = tonumber(device.uplink.props.wd) or 60,--热起延迟(秒)\n\t\tDM = dmodel --数据上传模式(0=文件,1=mop)\n\t}\n  \tmop_sensor.P.network= networks\n\n\t--配置Json构建\n    for i = 1, linkcnt, 1 do -- 一个link, 一个节点\n\t\t--log.debug("fs_node2_mop: update_config linkcnt=%d",linkcnt)\n        local link = device.dnlinks[i]\n        local devicecnt = #(link.devices) --传感器或者空气采集仪\n\t\t--log.debug("fs_node2_mop: update_config devicecnt=%d",devicecnt)\n\t\tfor k = 1,devicecnt,1 do\n\t\t\tlocal isoxy = false\n\t\t\tif device.dnlinks[i].devices[k].props.sensortype == "kq" then\n\t\t\t\tisoxy = true\n\t\t\tend\n\t\t\tif isoxy then\n\t\t\t\tlocal oxycount = 0\n\t\t\t\tlocal channeltable = {}\n\t\t\t\tlocal nametable = {}\n\t\t\t\tlocal pctable = {}\n\t\t\t\tlocal posttable = {}\n\t\t\t\tlocal pretable = {}\n\t\t\t\tlocal paramtable = {}\n\t\t\t\tif device.dnlinks[i].devices[k].props.aqi_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,2)\n\t\t\t\t\ttable.insert(nametable,"AQI模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.aqi_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.aqi_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.aqi_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p1)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p2)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p3)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p4)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p5)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p6)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p7)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.aqi_p8)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.pm10_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,5)\n\t\t\t\t\ttable.insert(nametable,"PM2.5,PM10模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.pm10_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.pm10_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.pm10_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm10_p1)\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm10_p2)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.pm100_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,1)\n\t\t\t\t\ttable.insert(nametable,"PM100模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.pm100_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.pm100_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.pm100_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,device.dnlinks[i].devices[k].props.pm100_p1)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.gps_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,3)\n\t\t\t\t\ttable.insert(nametable,"GPS模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.gps_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.gps_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.gps_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\n\t\t\t\tend\n\t\t\t\tif device.dnlinks[i].devices[k].props.am2305_rd == "true" then\n\t\t\t\t\toxycount = oxycount + 1\n\t\t\t\t\ttable.insert(channeltable,4)\n\t\t\t\t\ttable.insert(nametable,"AM2305模组")\n\t\t\t\t\ttable.insert(pctable,device.dnlinks[i].devices[k].props.am2305_pc)\n\t\t\t\t\ttable.insert(posttable,device.dnlinks[i].devices[k].props.am2305_post)\n\t\t\t\t\ttable.insert(pretable,device.dnlinks[i].devices[k].props.am2305_pre)\n\t\t\t\t\tlocal tabledata = {}\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\ttable.insert(tabledata,0)\n\t\t\t\t\tparamtable[oxycount] = tabledata\t\n\t\t\t\tend\n\t\t\t\tfor l = 1, oxycount, 1 do\t\t\t\t\n\t\t\t\t\t--log.debug("fs_node2: dnjson oxycount=%d",oxycount)\n\t\t\t\t\tlocal sen = device.dnlinks[i].devices[k]\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.ID=%s",tostring(sen.id)..tostring(channeltable[l]))\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.PA.SC=%s",json.encode(paramtable))\n\t\t\t\t\t--log.debug("fs_node2: dnjson sen.PA.SC=%s",paramtable[l][1])\n\t\t\t\t\t\n\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\tID = tostring(sen.id)..tostring(channeltable[l]),--传感器ID\n\t\t\t\t\n\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\tSC= channeltable[l] or 0,--通道号\n\t\t\t\t\t\t\tM= channeltable[l] or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t}, \n\t\t\t\t\t\tN = nametable[l], --传感器说明\n\t\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1=\t\t\t\t\t\n\t\t\t\t\t\tPN = tonumber(pctable[l]) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\tEN = tonumber(1), --是否启用\n\t\t\t\t\t\tED = tonumber(posttable[l]) or 0, --执行前延迟(485作用)\n\t\t\t\t\t\tRD = tonumber(pretable[l]) or 0,--读取前延迟\n\t\t\t\t\t\tCF =  "",--公式编码, 485平台计算为空\n\t\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\ttonumber(paramtable[l][1]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][2]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][3]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][4]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][5]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][6]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][7]) or 0,\n\t\t\t\t\t\t\t\ttonumber(paramtable[l][8]) or 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t--log.debug("fs_node2: dnjson sensors=%s",json.encode(sensor))\n\t\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n\t\t\t\tend\n\t\t\t\t--log.debug("fs_node2: dnjson sensors=%s",json.encode(mop_sensor.P.sensors))\n\t\t\telse\n\t\t\t\tfor j = 1, devicecnt, 1 do\t\t\t\t\n\t\t\t\t\tlocal sen = device.dnlinks[i].devices[j]\t\t\t\t\n\t\t\t\t\tlocal sensor = {\n\t\t\t\t\t\tID = tostring(sen.id),--传感器ID\n\t\t\t\t\n\t\t\t\t\t\tPA ={ --物理地址\n\t\t\t\t\t\t\tSC= tonumber(sen.uplink.props.channel) or 0,--通道号\n\t\t\t\t\t\t\tM= tonumber(sen.uplink.props.module) or 0--模块号: 485端口模块号 \n\t\t\t\t\t\t\t--SC=,-- 子通道号: 485端口子通道号\n\t\t\t\t\t\t}, \n\t\t\t\t\t\tN = sen.name, --传感器说明\n\t\t\t\t\t\t--DIS = tonumber(sen.uplink.props.dis) or 1,--采样间隔系数. 默认1=\t\t\t\t\t\n\t\t\t\t\t\tPN = tonumber(sen.props.protocolcode) or 0 ,--协议号: 和安心云DAC解码协议保持一致.\n\t\t\t\t\t\tEN = tonumber(sen.uplink.props.enabled =="false" and 0 or 1), --是否启用\n\t\t\t\t\t\tED = tonumber(sen.uplink.props.postdelay) or 0, --执行前延迟(485作用)\n\t\t\t\t\t\tRD = tonumber(sen.uplink.props.predelay) or 0,--读取前延迟\n\t\t\t\t\t\tCF =  "",--公式编码, 485平台计算为空\n\t\t\t\t\t\tCP = {  --计算参数, 按顺序提供必需参数. \n\t\t\t\t\t\t\t\ttonumber(sen.props.p1) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p2) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p3) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p4) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p5) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p6) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p7) or 0,\n\t\t\t\t\t\t\t\ttonumber(sen.props.p8) or 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttable.insert(mop_sensor.P.sensors, sensor)\n\t\t\t\tend\n\t\t\tend\n\t\t\t--log.debug("fs_node2_mop: bulid OK=%s",sensorcnt)\n\t\tend\n\t\t--log.debug("fs_node2_mop: bulid OK=%s",sensorcnt)\n    end\n\n\treq_sensor.payload= json.encode(mop_sensor)\n\tlog.debug("fs_node2 dtuid=%s  下发配置requestsensor=%s",device.uplink.props.id, json.encode(req_sensor))\n\tlocal ok, ack = ctx:ssend(req_sensor, 4000)\n  \tlog.debug("fs_node2  dtuid=%s 下发配置返回req_sensor ssend ack:%s ok:%s",device.uplink.props.id,json.encode(ack),ok)\n\tif ok == true then\n\t\tlocal str= toHexStr(json.encode(device))\n\t\tstr=iota.appendHexCrc(str, 'B' ,0)\n\t\tlocal crc = string.sub(str,-4,-1)\n\t\tlog.debug("fs_node2 : crc2= %s",crc)\n\t\tredis.set(device.id.."_fdset", tostring(crc))\n\tend\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\t--log.debug("fs_node2 : ack= %s",result.data.ack)\n    ctx:notify(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend\n\n--处理wakeup\nfunction deal_mop_wakeup(msg,cfg,vercfg,diag)\n    local wakeup_req = {\n        type = "idau",\n    \tack =true,\n    \tid =msg.id,\n        payload = ""\n    }\n    local mop_wakeup = {\n        M = "c_wakeup",\n        P = {\n            updatecfg = cfg,\n            updatefw = vercfg,\n\t\t\tupdatediag = diag\n        } -- 荷载\n    }\n\twakeup_req.payload = json.encode(mop_wakeup)\n  \tlog.debug("fs_node2:dtuid=%s deal_mop_wakeup=%s",device.uplink.props.id, json.encode(wakeup_req))\n\tlocal ok,ack=ctx:ssend(wakeup_req,3000)\nend\n\nCombineData=function(datas)\n\t\n\tlocal datatable={\n\t\tdata={\n\n\t\t\t},\n\t\tdevice=oxygendevice.id,\n\t\ttype=1\n\t}\n\tlocal timedate = nil\n\tfor k,v in pairs(datas) do\n\t\tif tostring(v.type) == "am2305" then\n\t\t\tdatatable.data.temperature = tonumber(v.data.temp)\n\t\t\tdatatable.data.humidity = tonumber(v.data.hum)\t\t\t\n\t\telseif tostring(v.type) == "pm100" then\n\t\t\tdatatable.data.pm100 = tonumber(v.data.pm100)\n\t\telseif tostring(v.type) == "pm10" then\n\t\t\tdatatable.data.pm2_5 = tonumber(v.data.pm25)\n\t\t\tdatatable.data.pm10 = tonumber(v.data.pm10)\n      \t\ttimedate = v.time\n\t\telseif tostring(v.type) == "gps" then\n\t\t\tdatatable.data.longitude = tonumber(v.data.long)\n\t\t\tdatatable.data.latitude = tonumber(v.data.lang)\n\t\t\t--datatable.data.time = v.data.time_bj\n\t\telseif tostring(v.type) == "aqi" then\n\t\t\tdatatable.data.so2 = tonumber(v.data.SO2)\n\t\t\tdatatable.data.no2 = tonumber(v.data.NO2)\n\t\t\tdatatable.data.o3 = tonumber(v.data.O3)\n\t\t\tdatatable.data.co = tonumber(v.data.CO)/1000\n\t\t\tdatatable.data.voc= tonumber(v.data.VOC)\n\t\tend\n\tend\n\tdatatable.time = timedate\n\t--log.debug("fs_node2: imerdate = %s",tostring(timedate))\n\t--log.debug("fs_node2:DataTable = %s",json.encode(datatable))\n\ttable.insert(out.data,datatable)\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend	INLINE	2019-01-29 10:15:21.503+08	2020-09-27 17:37:21.395+08	2019-01-29	\N
94b82699-1d71-4853-aecc-891554e0b963	FS_lLVDT_9101	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考： Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n    local moduleNo=device.uplink.props.module \n\tif tonumber(moduleNo) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = '无效的模块号>255'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, moduleNo, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)\n    buff=iota.appendHexWord(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x01, endian)                 --1: CMD 1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\n--070302ffdf302c  module=7\n--"length": -3.0\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_lvdt_9101    ata=%s",hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        -- 170302fffd71f6\n    \n        local elongation = iota.hexToShort(hex,3,'B')/10\n        out.data = {\n            length=elongation\n        }\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n  log.debug(string.sub(data,1,12))\n    if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n        errcode = 1002\n        return false\n    end\n    local  checkModule=iota.hexToByte(data,0,'B')\n    if moduleNoStrCheck ~= tostring(checkModule) then\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoStrCheck)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n\n	INLINE	2019-11-21 13:56:28.046+08	2019-11-21 13:59:09.416+08	2019-11-21	\N
3dbcecc3-94de-4b19-b3fc-4ee1220c4e79	anXin_acc_2006	\N	安信加速度  请求应答	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 9, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==46) then\n        local xData = iota.hexToFloat(hex,9,'B');\n        local yData = iota.hexToFloat(hex,13,'B');\n        local zData = iota.hexToFloat(hex,17,'B');\n        out.data = {\n            xDgree=xData,\n            yDgree=yData,\n            zDgree=zData\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-01 17:14:19.066+08	2019-12-24 10:51:36.356+08	2017-09-01	\N
e9f04fcd-34ad-4e77-919a-cce8ac4c19e9	Sound&Light_Alarm	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('Sound&Light_Alarm =%s', json.encode(device))\n  \tlocal paramData = capability.param\n   log.debug('Sound&Light_Alarm     paramData=%s',paramData)\n   \n   local hexCmd_soundLight='7eff063a008100fe40ef'\n   \n   if paramData=='1' then --只播放一遍\n\t\thexCmd_soundLight='7eff063a000100ef'\n    --hexCmd_soundLight='7eff063a000100fe40ef'\n   end\n    \n    ok = ctx:asend(hexCmd_soundLight)\n    local out={\n        data ={paramData=paramData},\n        result = {}\n    }\n   local resultData1= json.encode(out)\n    ctx:done(resultData1)\nend\nonData=function(data)\n    local out={\n        data ={},\n        result = {}\n    }\n   log.debug('Sound&Light_Alarm  receiveData=%s',data)\n   local data1 = {\n                data = {\n                         hex = data\n                        },\n                 }\n    table.insert(out.data, data1)\n    local resultData= json.encode(out)\n    ctx:notify(resultData)\nend	INLINE	2019-08-19 10:01:38.978+08	2020-08-04 17:16:17.365+08	2019-08-19	\N
8433558f-70af-4169-92f9-e1a6413d6801	anXin_acc	\N	安信加速度 主动上报	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anXin_acc.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anXin_acc [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t   \n       \n\t\tlocal xData = iota.hexToFloat(hex,24,'B');\n        local yData = iota.hexToFloat(hex,28,'B');\n        local zData = iota.hexToFloat(hex,32,'B');\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_acc timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_acc dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          xDgree=xData,\n            yDgree=yData,\n            zDgree=zData\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anXin_acc [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anXin_acc:Data is nil'\n        errcode = 1001\n    \tlog.debug("anXin_acc [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anXin_acc module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anXin_acc [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anXin_acc [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-24 11:00:12.914+08	2019-12-24 11:00:12.914+08	2019-12-24	\N
ea741512-cf76-4546-8b90-3cea1faf6018	anxin_file_transfer	\N	dx，dat    	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n\tlog.debug("anxin_file_transfer : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n\tif data ~=nil then\n\t\tif data.type == "idau/file" then\n\t\t\tif data.ext==".d" or data.ext==".dx" then\n\t\t\t\tlog.debug("anxin_file_transfer : recvd content = %s",data.payload)\n\t\t\t\tParseFileD(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("anxin_file_transfer : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\t\tif data.ext==".dat" then\n\t\t\t\t--log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n\t\t\t\tParseFileDat(data.payload)\n\t\t\t\t--else\n\t\t\t\t--log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n\t\t\tend\n\t\telse\n\t\t\tlog.error("anxin_file_transfer : content type is not file, error recvd type is %s", data.type)\n\t\tend\n\telse\n\t\tlog.error("anxin_file_transfer : recvd content is nil")\n\tend\nend\n\nfunction ParseFileDat(dathex)\n\tlog.debug("anxin_file_transfer : datlen=%s" , string.len(dathex))\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlocal offset = 0\n\tlocal t = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal l = iota.hexToShort(dathex,offset,'B')\n\toffset = offset + 2\n\tlocal version = iota.hexToByte(dathex,offset,'B') -- 版本号\n\toffset = offset + 1\n\tlocal channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n\toffset = offset + 1\n\tlocal deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n\tlocal subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n\tif subdevice ~= nil then\n\t\toffset = offset + 2\n\t\tlocal samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n\t\toffset = offset + 4\n\t\tlocal filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n\t\toffset = offset + 4\n\t\tlocal gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n\t\toffset = offset + 1\n\t\tlocal triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n\t\toffset = offset + 1\n\t\tlocal year = iota.hexToByte(dathex,offset,'B')+2000\n\t\toffset = offset + 1\n\t\tlocal mon = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal day = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal hour = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal min = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\tlocal sec = iota.hexToByte(dathex,offset,'B')\n\t\toffset = offset + 1\n\t\toffset = offset + 12\n\t\tlocal Ldata = iota.hexToInt(dathex,offset,'B')\n\t\toffset = offset + 4\n\t\tlog.debug("anxin_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal strLen = string.len(dathex)\n\t\tlocal floatcount = (strLen/2-40)/4\n\t\tlog.debug("anxin_file_transfer begin parse")\n\t\tlocal vols = {}\n\t\tfor i= 1, floatcount do\n\t\t\t--offset=40+(i-1)*4\n\t\t\tlocal subdat=string.sub(dathex,73+i*8,80+i*8)\n\t\t\t\n            -- if pos >= strLen  then\n                -- log.debug("anxin_file_transfer outofrange offset=%s floatcount=%s, strlen=%s",offset, floatcount, strLen)\n            -- end\n\t\t\tvols[i]= iota.hexToFloat(subdat,0,'L',6)\n\t\tend\n\t\tlog.debug("anxin_file_transfer finish parse")\n\n\t\tlocal rst = {\n\t\t\tdata={\n\t\t\t\t_data_type='vib',\n\t\t\t\tphysicalvalue=vols,\n\t\t\t\tsampleFreq=samplefreq,\n\t\t\t\tfilterFreq=filterfreq,\n\t\t\t\tgainAmplifier=gainamplifier,\n\t\t\t\ttriggerType=triggertype,\n\t\t\t\tversion=version\n\t\t\t},\n\t\t\tdevice=subdevice.id,\n\t\t\ttype=1,\n\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))\n\t\t}\n\t\ttable.insert(out.data,rst)\n\t\tlog.debug("anxin_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n\t\tctx:notify(json.encode(out))\n\telse\n\t\tlog.debug("anxin_file_transfer not found device module=%s channel=%s",deviceId,channel)\n\tend\nend\n\nfunction ParseFileD(content)\n\tlocal out={\n\t\tdata ={},\n\t\tresult = {},\n\t\ttype=2\n\t}\n\tlog.debug("anxin_file_transfer : content  =%s", content)\n\tlocal jsons=Split(content,'\\r')\n\tfor k,v in pairs(jsons) do\n\t\tif v~=nil and v~='' then\n\t\t\tlocal jsondata = json.decode(v)\n\t\t\tif jsondata~=nil and jsondata ~='' then\n\t\t\t\tlocal childDevice=getDeviceInfo(jsondata.M,jsondata.C)\n\t\t\t\tif childDevice ~=nil then\n\t\t\t\t\tlog.debug("anxin_file_transfer  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\tif childDevice.props.sensortype=='gnss' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.RV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n          \t\t\tif childDevice.props.sensortype=='gnss_t500' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tx = jsondata.PV[1] or 0,\n\t\t\t\t\t\t\t\ty = jsondata.PV[2] or 0,\n\t\t\t\t\t\t\t\tz = jsondata.PV[3] or 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000)-3600*8)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='zd' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tppv = jsondata.RV[1] or 0,\n\t\t\t\t\t\t\t\tpv = jsondata.RV[2] or 0,\n\t\t\t\t\t\t\t\trms = jsondata.RV[3] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\n\t\t\t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twavelength = jsondata.RV[1],\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transfer:out data=%s",json.encode(data))\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\t\tif childDevice.props.sensortype=='standard485' then\n\t\t\t\t\t\tlog.debug("anxin_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tphysicalvalue= jsondata.PV[1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog.debug("anxin_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer line=%s childDevice is nil",k)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tlog.debug("anxin_file_transfer: dataresult: %s", json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n\tlog.debug("anxin_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tif device.dnlinks ~= nil then\n\t\tlocal subdevices = device.dnlinks[1].devices\n\t\tfor i,subdevice in pairs(subdevices)  do\n\n\t\t\tlocal submodule=subdevice.uplink.props.module\n\t\t\t--判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n\t\t\t\tlog.debug("baian_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t\tfor k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t--log.debug("baian_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t--log.debug("baian_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\tlocal sensormodule=sub_subdevice.uplink.props.module\n\t\t\t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channel\n\t\t\t\t\t\tif tostring(sensormodule) == tostring(moduleid) and tonumber(sensorchannel)==tonumber(channel) then\n\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s,c=%s 3 拜安匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\n\t\t\t\t\t\t\treturn sub_subdevice\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug("baian_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\telse\n\n\t\t\t\tlocal subchannel=subdevice.uplink.props.channel\n\t\t\t\tlog.debug("anxin_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n\t\t\t\tif tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then\n\t\t\t\t\tlog.debug("anxin_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n\t\t\t\t\treturn subdevice\n\t\t\t\telse\n\t\t\t\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlog.debug("anxin_file_transfer has no device module=%s channel=%s",moduleid,channel)\n\t\treturn nil -- 没有找到匹配的传感器\n\telse\n\t\tlog.debug("anxin_file_transfer has no subdevices.")\n\t\treturn nil -- 没有子设备\n\tend\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n\tlocal nFindStartIndex = 1\n\tlocal nSplitIndex = 1\n\tlocal nSplitArray = {}\n\twhile true do\n\t\tlocal nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n\t\tif not nFindLastIndex then\n\t\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n\t\t\tbreak\n\t\tend\n\t\tnSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n\t\tnFindStartIndex = nFindLastIndex + string.len(szSeparator)\n\t\tnSplitIndex = nSplitIndex + 1\n\tend\n\treturn nSplitArray\nend\n\n	INLINE	2018-03-27 14:34:11.322+08	2020-09-11 15:03:33.07+08	2018-03-27	\N
bcca6d57-3df9-4b61-8c7a-71402f47b612	test_dahua_meter	\N	测试大华电表	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	-- 测试通过\n\nonData=function (httpRecv)  --httpRecv \n\t--主动上传式\n    local out={\n\ttype = 1,\n\tdata ={},\n\tresult = {},\n    }\n    log.debug("dahuaMeter type helloWorld test")\n    log.debug("dahuaMeter type = %s httpRecv => %s", type(httpRecv),httpRecv)  -- httpRecv表，包含Body，eventTime, ID\n    if nil == httpRecv.Body then\n        local message = 'Invalid Msg'\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    else\n        local httpBodyStr = httpRecv.Body           \n        log.debug("dahuaMeter type = %s httpBodyStr => %s", type(httpBodyStr), json.encode(httpBodyStr))  -- httpBodyStr字符串\n        local httpBody = json.decode(httpBodyStr)\n        log.debug("dahuaMeter type = %s httpBody => %s", type(httpBody), json.encode(httpBody))  -- httpBody表，包含 data等\n        \n        if nil == httpBody.service.data then\n            local message = 'Invalid Msg httpBody.service.data is nil'\n            out.result = {code=1001,msg=message}\n            out.data = {}\n        else\n            local bodyService = httpBody.service \n            log.debug("dahuaMeter type = %s bodyService => %s", type(bodyService), json.encode(bodyService)) -- bodyService表\n\n            local bodyServiceData = bodyService.data\n            log.debug("dahuaMeter type = %s bodyServiceData => %s", type(bodyServiceData), json.encode(bodyServiceData)) -- \n            if nil == bodyServiceData.Length or nil == bodyServiceData.Value or nil == bodyService.eventTime then\n                local message = 'Invalid Msg '\n                out.result = {code=1001,msg=message}\n                out.data = {}\n            else\n                local dataLength = bodyServiceData.Length\n                if 95 > dataLength then\n                    local message = 'Invalid Msg heart pack'\n                    out.result = {code=1001,msg=message}\n                    out.data = {}\n                else\n                    local heartPackStr = bodyServiceData.Value\n                    log.debug("dahuaMeter type = %s heartPackStr=>%s", type(heartPackStr), heartPackStr)     -- heartPacketStr ==> "Heart Pack,53F33333,3518B8B8CCCC,33183333333333,63E9333333,44E95756,54E93433,43C348473333,csq:03"\n\n                    local dateStr = bodyService.eventTime\n                    log.debug("dahuaMeter type = %s dateStr=>%s", type(dateStr), dateStr)\n                    recvTime = dateStrToDate(dateStr)\n                    log.debug("dahuaMeter type = %s recvTime=>%s", type(recvTime), json.encode(recvTime))     \n                    -- 分割成表\n                    local delim = ","\n                    local heartPackTab = split(heartPackStr, delim)\n                    log.debug("dahuaMeter type = %s heartPackTab=>%s", type(heartPackTab), json.encode(heartPackTab)) \n                    -- 处理heartPack数据（减去33H，并倒置）\n                    local handledData = {}\n                    for i = 1, 7 do\n                        handledData[i] = handle(heartPackTab[i + 1])\n                    end\n                    log.debug("dahuaMeter type = %s handledData=>%s", type(handledData), json.encode(handledData)) \n\n                    out.data = {\n                        statusWord = table.concat(handledData[1], "", 1, 2),\n                        remainAnergy = tonumber(table.concat(handledData[2], "", 1, 4)) / 100,\n                        purchaseAnergy = tonumber(table.concat(handledData[3], "", 1, 3)) / 100,\n                        purchaseTimes = tonumber(table.concat(handledData[3], "", 4, 5)),\n                        instantActivePower = tonumber(table.concat(handledData[4], "", 1, 3)) / 10000,\n                        APhaseVoltage = tonumber(table.concat(handledData[5], "", 1, 2)) / 10,\n                        APhaseCurrent = tonumber(table.concat(handledData[6], "", 1, 2)) / 100,\n                        totalPower = tonumber(table.concat(handledData[7], "", 1, 4)) / 100,\n                    }\n                    log.debug("dahuaMeter  out.data=>%s", json.encode(out.data))\n                    out["divice"] = httpRecv.ID\n                    out["time"] = recvTime\n                end\n            end\n        end\n    end\n    \n    ack = {type = 'http', code = 200, body = 'ok'}\n    ctx:asend(ack)\n    local resultData = json.encode(out)\n    ctx:notify(resultData)\nend\n\n\n-- 将字符串分割成表\nsplit=function(s, delim)\n    if type(delim) ~= "string" or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n        local pos = string.find(s, delim, start, true) -- plain find\n        if not pos then\n            break\n        end\n\n        table.insert (t, string.sub (s, start, pos - 1))\n        start = pos + string.len (delim)\n    end\n    table.insert (t, string.sub (s, start))\n\n    return t\nend\n\n\n-- @将数据去掉标识位，减去33H，并且倒置 43C3AC6B3333  ==> 00003879\n-- @传入参数recvTables收到的原始数据\n-- @返回值为处理好的数据表\nhandle = function(dataStr)\n\tlocal result = {}\n\tlen = #dataStr\n\tprint("lenth is %d", len)\n\tfor i = 1, len - 4, 2 do\n        local tmpStr = string.sub(dataStr, -(i + 1), -i)\n        --log.debug("dahuaMeter type = %s tmpStr=>%s", type(tmpStr), json.encode(tmpStr))\n        tmpStr = "0x"..tmpStr\n       -- log.debug("dahuaMeter type = %s string.format=>%s", type(string.format("%#2x", tmpStr - 0x33)), json.encode(string.format("%02x", tmpStr - 0x33)))\n        local Str = string.sub(string.format("%02x", tmpStr - 0x33), 1, 2)\n        --log.debug("dahuaMeter type = %s Str=>%s", type(Str), json.encode(Str))\n\t\ttable.insert(result, Str)\n\tend\n\treturn result\nend\n\n-- 转换时间格式\ndateStrToDate=function(dateStr)\n    -- 20191121T013415Z\n    local year = tonumber(string.sub(dateStr,1,4));\n\tlocal month = tonumber(string.sub(dateStr,5,6));\n\tlocal day = tonumber(string.sub(dateStr,7,8));\n    local hour = tonumber(string.sub(dateStr,10,11));\n    local minute = tonumber(string.sub(dateStr,12,13));\n    local second = tonumber(string.sub(dateStr,14,15));\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%SZ",timenum)\n\treturn recordTime\nend\n\n	INLINE	2019-11-19 11:31:14.055+08	2019-12-04 15:46:19.736+08	2019-11-19	\N
74d1b296-4f53-442e-84f0-f0bfbd6358af	FS-FSFXY-Z	\N	风速风向-z协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-FSFXY-Z\n]]--liankang\nstart=function ()\n    log.debug("FSFSFXYZ start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FSFSFXYZ encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FSFSFXYZ decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x82, BE);                        -- 主从标志 82\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 长度指令 02\n\tbuff=iota.appendHexByte(buff, 0x01, BE);                        -- 指令号\n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- 操作码\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x05, BE);                        -- 读取寄存器数量 00 05\n\tlocal crcHex = CheckXor(buff);\n    buff=iota.appendHexByte(buff, crcHex, BE);                      -- CRC1\t\n    log.debug("FSFSFXYZ buff = "..buff) \n\treturn buff \nend\n\n-- decode   \n-- returns: 结果   "windDirection": 18.04,"windSpeed": 18.04\n-- 正确回复  86010C01001F000000000000000000000000419051EC419051EC0000000032  \nfunction protocol_decode(da)\n\t\n\tlocal dataStr = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataStr)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n        local temperature = iota.hexToFloat(dataStr, 6, 'B', 2)\n        local humidity = iota.hexToFloat(dataStr, 10, 'B', 2)\n        local pressure = iota.hexToFloat(dataStr, 14, 'B', 2)\n\t\tlocal windSpeed = iota.hexToFloat(dataStr, 18, 'B', 2 )\n\t\tlocal windDirection = iota.hexToFloat(dataStr, 22, 'B', 2)\n\t\tlocal accumulatedRainfall = iota.hexToFloat(dataStr, 26, 'B', 2)\n\n\t\tout.data = {\n\t\t\twindSpeed = windSpeed,\n\t\t\twindDirection = windDirection,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 31 or iota.hexToByte(data, 3,'B') ~= 0x01 then -- 字节长度不等于 31  或者 读第二个字节，功能码不等于01\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\t-- 校验风速风向有效性\n\tlocal checkBit = iota.hexToByte(data, 5, 'B')\n\tlog.debug("FSFSFXYZ checkBit = "..json.encode(checkBit))\n\tif 0 == bit:_and(checkBit, 0x08) then\n\t\tlog.debug("FSFSFXYZ 风速数据无效")\n\t\treturn true\n\tend\n\tif 0 == bit:_and(checkBit, 0x10) then\n\t\tlog.debug("FSFSFXYZ 风风向数据无效")\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\n--异或校验\nCheckXor=function(hex)  \n    local len = string.len(hex)/2\n    local pp = 0\n    for i =0,len-1 do\n        local bi = iota.hexToByte(hex,i,'B')\n        pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n    end\n    return pp\nend 	INLINE	2019-12-12 11:28:06.36+08	2019-12-12 16:57:31.211+08	2019-12-12	\N
c181aae9-13e2-43f6-b18b-8de08bcb6181	JM_1547777	\N		1.0	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	f	5b2dc320-50f8-4461-87fc-03b66e3e5e4c	Lua	start=function ()\n\tlog.debug("load script %s, moduleId=%s", "JM_1547777", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlog.debug("JM_1547777:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("JM_1547777 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("JM_1547777 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n   local sr=moduleNo..'A'\n\n\n\t local str_check=getCheckStr(sr)\t\n\t buff_str= '#'..moduleNo..'A'\n\t buff=StrToHex(buff_str)..str_check\n     buff=iota.appendHexByte(buff, 0x21, 'B')  --0x21=!\n     log.debug("JM_1547777:模块%s的采集仪采集指令=%s ",moduleNo,buff) \n\t\t\t\tlog.debug('JM_1547777:下发的buff模块%s的rbuff是：%s', buff)\n\t\t\tok, resp = ctx:ssend(buff, 60000)\n\t if ok then\t   \n\t\t--log.debug("JM_1547777:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp)   \n         result = ParseResult(resp,out,moduleNo)\t\n\t else\n    \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("JM_1547777:模块%s的采集数据 接收失败",moduleNo)    \n\t end\n     local resultData =json.encode(result)\n     log.debug("JM_1547777:out序列化结果 : out is =%s", resultData)\n     ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t--  二次解析\n\tlocal devicechnum = 2  --这里标记传感器编码  数字不对\n\tlocal devicechnumdate = 3   --这里是标记传感器数据    数字不对    \n\t\n\tlocal channelDatas = {}   --这个用来放传感器数据的\n\tlog.debug("JM_1547777: m=%s,接收传感器数据1111 Received=>%s",moduleNoStr,hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('JM_1547777:hex=%s', hex)\n\t\tlocal sr=string.sub(hex,3,-1)\n\t\tlocal sq=string.sub(sr,1,-3)\n\t\tlog.debug('JM_1547777:处理末尾hex=%s', sq)\n\t\tlocal sp='54'   --这里是分割各个传感器\n\t\tlocal sArray=Split(sq,sp)\n\t\tlog.debug('JM_1547777:数组sArray=%s', json.encode(sArray))\n\t\t for k,v in pairs(sArray) do\n\t       --这个是分割码流后的各个传感器的码流\n\t\t log.debug('JM_1547777:各个传感器的码流v=%s', v)\n\t\t if  v~='' then \n\t\t \n\t\t local b=string.sub(v,29,44)--传感器设备编号\n\t\t  log.debug('JM_1547777:传感器编号的码流b=%s', b)\n\t\t local sArrays=Splits(b) --将传感器设备编号分割成俩个\n\t\t\t\tlocal num=0           --累加计算\n\t\t\t\tfor k,vr in pairs(sArrays) do\n\t\t\t\ttennum=tonumber(vr, 16) \n\t\t\t\t\tnum=num+tennum\n\t\t\t\t\tend\n\t\t\t\tprint(num)\n\t\t\t\tlog.debug('JM_1547777:传感器编号的码流num=%s', num)\n\t\t\t\tlocal numb=num\n\t\t\t\tlog.debug('JM_1547777:传感器编号的码流和numb=%s', numb)\n\n           local c=numb%128+128 --传感器校验算法\n\t\t   log.debug('JM_1547777:传感器编号的码流校验值c=%s', c)\n           local d=string.format("%#x",c) --校验码由10进制转化成16进制\n\t\t   log.debug('JM_1547777:传感器编号的码流校验值由10进制转换成16进制d=%s', d)\n           local f=string.sub(d,3,4)  --计算得到校验码   截取16进制后2位\n\t\t  log.debug('JM_1547777:截取传感器编号的码流校验值后俩位f=%s', f)\n\t\t  log.debug('JM_1547777:已经运算到了校验码时各个传感器的码流v=%s', v)\n\t\t  local bb=string.sub(v,45,46)--码流里的校验码  \n          log.debug('JM_1547777:码流里的校验码bb=%s', bb)     \t--感觉这块没有用\t   \n\t\t  local ab=string.find(v, "b0")  --找到B0下标\n\t\t  log.debug('JM_1547777:找到b0下标ab=%s', ab) \n\t\t  local bbb=ab-5                   --得到数据1最后一个字节的下标\n\t\t  log.debug('JM_1547777:得到数据1最后一个字节的下标bbb=%s', bbb)\n\t\t  local phy=string.sub(v,47,bbb) --得到数据1数据\n\t\t  log.debug('JM_1547777:得到数据1数据phy=%s', phy) \n\t\t   \n\t\t  local physicalvalue=HextoStr(phy)/100  --得到数据1的ascll\n\t\t  log.debug('JM_1547777:得到数据1的ascll数据physicalvalue=%s', physicalvalue) \n\n\t\t  local dd=ab+2\n\t\t  log.debug('JM_1547777:得到数据3字节的下标dd=%s', dd)\n          local tempera=string.sub(v,dd,-3)--得到数据3的数据\n\t\t  log.debug('JM_1547777:得到传感器tempera=%s', tempera)\n\t\t \n\t\t  local temperature=(HextoStr(tempera)-500)/10    --得到数据3的ascll\n\t\t  log.debug('JM_1547777:得到数据3的ascll tempera=%s', temperature)\n\t\t  local _twophys = {physicalvalue,temperature}   --物理量和温度的存放地\n\t\t  local deviceids=HextoStr(b)   --设备编号的ascll\n\t\t  channelDatas[deviceids]=_twophys  --将设备编号，传感器数据装入table表里\t \n          log.debug('JM_1547777:数组channelDatas=%s', json.encode(channelDatas))\n\n\t\t  end \n\t\t  \n\t     end\n\t\t \n\t\t \n\t\t \n\t\t for k,v  in pairs(channelDatas)  do\n\t\t\tlog.debug('JM_1547777:数组与下面设备连接channelDatas=%s', json.encode(channelDatas))\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNoStr, k)\n              log.debug('JM_1547777  接入的子设备childDevice=%s', json.encode(childDevice))\n\t\t\t\t\t\t--phyvalue=channelDatas[k]   --将表中的传感器对应编号的数据给了phyvalue\n\t\t\t\t\tphyvalue=channelDatas[k][1]\t\n\t\t\tlog.debug('JM_1547777:第一个数据中phyvalue=%s k=%s', phyvalue,k)\n\t\t\t        temperature=channelDatas[k][2]\t\n\t\t\tlog.debug('JM_1547777:第二个数据中temperature=%s  k=%s', temperature,k)\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n                        data = {\n                            physicalvalue = channelDatas[k][1],\n\t\t\t\t\t\t\ttemperature = channelDatas[k][2]\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n                        },\n                        device = childDevice.id,\n                        type = 1\n                    }\n\t\t\t\t\t table.insert(out.data, data1)\n\t\t\t\t\telse\n\t\t\t\t\tlog.debug('JM_1547777  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\n\t\t\t\t\t\t\n\t\t \n\t\t \n\t\t end \n\n\telse\n\t    log.debug('JM_1547777  m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n  \treturn out\nend\nLCR = function(buff)\n    log.debug('JM_1547777:lcr buff=%s', buff)\n    local lcr = 0\n    for i = 0, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    log.debug('JM_1547777:lcr累加结果%s', tonumber(lcr))\n    lcr = lcr % 128 + 128\n    log.debug('JM_1547777:lcr校验结果%s', lcr)\n    return lcr\nend\ngetCheckStr=function(sr)\n    local srlen=string.len(sr)\n    local check=0\n\t for i=1,srlen,1 do\n\t     local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n     check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check)   \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n    local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t    local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t    length=j\n\t\t\tbreak\n\t\tend\n\t  \n\tend\n    return length\nend\n\n\n\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('JM_1547777  m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n   --if data == nil or string.len(data)/2 < 3 then\n     --   errormsg = string.format('无效的数据，长度=%s',string.len(data)/2)\n     --   errcode = 1002\n     --   return false\n   -- end\n\n\t--if string.sub(data,1,2) ~= '24' then\n    --  --  errcode = 1003\n     --   errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n     --   return false\n   -- end\t\n\t--local dataLength=string.len(data)/2\n\t\n\t--if string.sub(data,-2,-1) ~= '21' then\n     --   errcode = 1004\n   --     errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n   --     return false\n   -- end\t\n   -- log.debug('JM_1547777  m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n--分割16进制，将其分割成俩个  \nSplits=function(szFullString)\n  \tk=string.len(szFullString)\n    local nSplitArray = {}\n   for i=1,k/2 do\n\t\t\n    nSplitArray[i]=string.sub(szFullString,2*i-1,2*i)\n\t\t\n\tend\n\treturn nSplitArray\nend\n\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n--获取采集仪下面的通道信息\ngetDeviceInfos = function(moduleNoId, channelNoId)\nlog.debug('JM_1547777:进入设备对应数据 moduleNoId=%s', moduleNoId)\nlog.debug('JM_1547777:进入设备对应数据 channelNoId=%s', channelNoId)\n      local channelNoId=string.sub(channelNoId,3,-1) --上面下来的设备编号带俩个00\n\t  log.debug('JM_1547777:上面传感器下来中带00已经去掉的设备编号 channelNoId=%s', channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("JM_1547777 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n\t\tlog.debug('JM_1547777:连接前端device.dnlinks[1].devices=%s', json.encode(device.dnlinks[1].devices))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('JM_1547777:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            log.debug('JM_1547777:上面传感器下来的设备编号 channelNoId=%s', channelNoId)\n\t\t\tlocal moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号111111 moduleStrCheck=%s', moduleStrCheck)\n\t\t\t\t\n\t\t\t\tchannelStrChecks=child.uplink.props.channel     \n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号678656 channelStrChecks=%s', channelStrChecks)\t\t\t\t\t\t\t\n                channelStrCheck = child.props.deviceid   \n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号111113242421 channelStrCheck=%s', channelStrCheck)\n               -- log.debug('JM_1547777 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.deviceid\n\t\t\t\tlog.debug('JM_1547777:传感器的设备编号222222 channelStrCheck=%s', channelStrCheck)\n                --log.debug('JM_1547777 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n         log.debug('JM_1547777 进入设备对应数据2345322 channelNoId=%s', channelNoId)\n         log.debug('JM_1547777:传感器的设备编号7890 channelStrCheck=%s', tostring(channelStrCheck))\n         log.debug('JM_1547777:传感器的设备编号4567 channelNoId=%s', tostring(channelNoId))\n            --if tostring(channelStrCheck) == tostring(channelNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    --log.debug('JM_1547777:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            --end\n        end\n    else\n        log.debug('JM_1547777:  subdevices是nil')\n        return nil\n    end\nend	INLINE	2019-10-08 17:03:56.541+08	2019-11-12 16:21:08.726+08	2019-10-08	\N
057c429b-10f7-4447-b6ad-d4cf05e6346d	zhgd_qiti_1266	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//\nstart = function()\n    local endian = 'B'\n    local buff = ''\n\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n    buff = iota.appendHexByte(buff, 3, endian) -- 1: 指令: 0x03 = 采集\n    buff = iota.appendHexByte(buff, 0x20, endian) --\n    buff = iota.appendHexByte(buff, 0, endian) -- 2:1通道气体\n    buff = iota.appendHexByte(buff, 0, endian) --\n    buff = iota.appendHexByte(buff, 3, endian) -- 2:寄存器个数\n    buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n\n    ok, resp = ctx:ssend(buff, 15000)\n    local result = '{}'\n    if ok then\n        result = unmarshall(resp, moduleNo)\n        log.debug(string.format('zhgd_qiti_1266  out=%s,data=%s', resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n--01 03 20 00 00 03 0E 0B   这个指令读取6的通道数据   是指有温湿度的设备会返回6个通道数据加温湿度数据  如果没有温湿度的设备 就只返回6个通道数据\n-- 01031000000084083800007fd27fe40078000f2f0e\n\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall = function(hex, moduleStr)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleStr)\n    if ErrorCode then\n        local dataList = {}\n        for i = 1, 8, 1 do\n            local value = iota.hexToShort(hex, 3+(i-1)*2, 'B')\n            log.debug('zhgd_qiti_1266 i=%s,value=%s', i, value)\n            table.insert(dataList, i, value)\n        end\n\n        out.data = {\n            co = dataList[1],\n            ch4 = dataList[2],\n            h2s = dataList[3],\n            o3 = dataList[4],\n            temperature = dataList[7],\n            humidity = dataList[8]\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNo_check)\n    log.debug('zhgd_qiti_1266 开始校验数据 %s', data)\n    if data == nil or string.len(data) / 2 ~= 21 then\n        errormsg = string.gormat('数据长度校验失败=[%s]≠21', string.len(data) / 2)\n        errcode = 1002\n        return false\n    end\n\n    if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n        errormsg = '功能码不是03'\n        errcode = 1003\n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data, 1, 2)) then\n        errormsg = '无效的模块号'\n        errcode = 1004\n        return false\n    end\n    log.debug('zhgd_qiti_1266  数据校验通过')\n    return true\n    --crc\nend\n\nonData = function()\nend\n	INLINE	2020-12-08 16:24:12.844+08	2020-12-08 17:00:38.578+08	2020-12-08	\N
f6f994b6-8f83-43f9-bfb0-7118d5368555	qianxun	\N	千寻	1.0	a971c084-cc83-4e41-80f6-c8de9df9b9d6	a971c084-cc83-4e41-80f6-c8de9df9b9d6	f	a971c084-cc83-4e41-80f6-c8de9df9b9d6	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"code\\":0,\\"data\\":[{\\"pointId\\":5248,\\"x\\":0.234,\\"recordTime\\":\\"1509529352810\\"}]}"\n}\nsik=S000000G3EE\nappsecret=6f1ee1f754f29f0580dba40215a8f6f98e1c8fc5c80bcbb21d65c44d47b51b7e\n]]--\nstart=function()\n    log.debug("device=%s", json.encode(device))\n    local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n    \ttype= "http",\n    \turl="http://openapi.qxwz.com/rest/%s/sik/%s?_sign=%s&request=%s",\n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }\n    local param={\n      pointId= tonumber(device.props.pointId),\n      pageNo=1,  \n      pageSize=1, \n    }\n    local sign,ts=crypto.qx(apiname, device.uplink.props.sik or "FF", device.uplink.props.appsecret or "FF", json.encode(param))\n   log.debug("qianxun  sik=%s, appsecret=%s, sign=%s, ts=%s", device.uplink.props.sik, device.uplink.props.appsecret, sign,ts) \n    req.url=string.format(req.url, apiname, device.uplink.props.sik, sign,url.escape(json.encode(param) )\n  --url.escape(json.encode(param))\n    req.header["wz-acs-timestamp"] = ts\n\n    log.debug("qianxun :%s",req.url)\n \n\tlocal ok,ack=ctx:ssend(req,4000)\n    log.debug("qianxun result=%s,ack=%s", ok,json.encode(ack))\n\tlocal out={\n        type = 1,\n    }  \n    if not ok or ack==nil then\n         out.result={\n          code=1002,\n          msg="timeout",\n        }\n    else --OK\n      if ack.code==200 and ack.body ~="" then -- http应答: 200\n        qx=json.decode(ack.body) -- 有数据\n     -- print("qx=", json.encode(qx))\n       --log.debug("qx.code=%d", qx.code)\n        qxresult = qx.code or 99999 -- 系统错误\n        if qxresult == 0 then -- 调用成功\n           local items =  #qx.data or 0\n           log.debug("totalItems=%d", items)\n           if items > 0 then\n              local item= qx.data[1] -- 最新一条\n              if item ~= nil then\n                out.data={\n                    -- 解析数据.\n                    x=item.x or 0,\n                    y=item.y or 0,\n                    z=item.z or 0,\n                    pointId=item.pointId or 0,\n                    recordTime=item.recordTime or "",\n                }\n                if out.data.recordTime ~="" then\n                   out.data.recordTime=os.date("%Y-%m-%d %H:%M:%S",tonumber(out.data.recordTime)/1000)\n                end\n              end\n            end\n        else -- 调用失败 - 错误.\n          out.result={\n            code = qx.code,\n            msg  = qx.message,\n          }\n        end\n      end\n    end\n--print("result = ", json.encode(out))  \n\tctx:done(json.encode(out)) \nend\n 	INLINE	2017-12-12 13:45:52.527+08	2020-12-08 15:00:15.087+08	2017-12-12	\N
6ad511e5-d6e0-49dc-81ad-934729e589bb	httpMQTtwu	\N		1.0	736d5c22-d6ac-4577-9782-0f95345ea1d5	736d5c22-d6ac-4577-9782-0f95345ea1d5	f	736d5c22-d6ac-4577-9782-0f95345ea1d5	Lua	\nstart = function()\n    log.debug('httpMQTtwu   device=%s', json.encode(device))\n\tlog.debug('httpMQTtwu   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpMQTtwu [%s] 1111111111111moduleNo', tonumber(moduleNo))\n    log.debug('httpMQTtwu', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n    --local id = httpbody.ID\n    --log.debug('httpMQTtwu  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    --bodydataStr=string.gsub(bodydataStr,',{}',"")\n    log.debug('httpMQTtwu [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\tlog.debug('httpMQTtwu  count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpMQTtwu [%s] count 11111111长度', count)\n     count = count + 1\n\t end\n\t log.debug('httpMQTtwu [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal timeStamps=bodypkg['time']\n\tlog.debug('httpMQTtwu [%s] 时间戳5555555imeStamps', tonumber(timeStamps))\n    local datapack = bodypkg['data'] \n\t log.debug('httpMQTtwu [%s] json.encode(out)=%s', json.encode(datapack))\n\t\n\n        local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do\n                local deviceId = child.id\n                local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n                local devceChannelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n              for indexs, childs in pairs(datapack) do\n\t\t\t\t\tlocal sss=childs.serial_number --设备的通道号\n\t\t\t\t\t\n\t\t\t\t\tlocal data1 = {\n                    data = {},\n                    device = deviceId,\n                    type = 1\n                }\n\t\t\t\t\tif  tonumber(devceChannelNo)=tonumber(sss)  then\n\t\t\t\t\tlocal aaaa=childs.source_data\n\t\t\t\t\ttable.insert(out.data, data1)\n\t\t\t\t\tend\n\t\t\t\t\t\n\t\t\t  \n\t\t\t  end\n\n           \n   \n\t\t\t\t\n \n            end\n        end\n\n        \n\n        log.debug('httpMQTtwu [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend\n\n	INLINE	2019-10-30 09:04:33.496+08	2019-10-30 14:56:26.869+08	2019-10-30	\N
07acceff-18ad-4f11-97b8-894121af0622	httpserveralar	\N	异物入侵	1.0	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	f	3dbe5a25-b1cf-486d-81aa-b4e584fb2c5c	Lua	\nstart = function()\n    log.debug('httpserveralar   device=%s', json.encode(device))\n\tlog.debug('httpserveralar   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n   local out={\n        type = 1,\n       -- data ={_data_type="capture",R={}},\n\t\t data = {},\n        result = {}\n    }\n\t\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\tlog.debug('httpserveralar [%s] 1111111111111moduleNo', tonumber(moduleNo))\n    log.debug('httpser222222', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n    --local id = httpbody.ID\n    --log.debug('httpserveralar  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    --bodydataStr=string.gsub(bodydataStr,',{}',"")\n    log.debug('httpserveralar [%s] 3333333bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\t\n\tlog.debug('httpserveralar [%s] 打印bodypkg1111=%s', json.encode(bodypkg))\n\t\n\t--这里1\n\t--if next(bodypkg) == nil then \n\t--ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t--ctx:asend(ack)\t\n\t--return\n\t--end \n\t--这里1\n\tlog.debug('httpserveralar  count 长度之前', 1111111111111111111)\n\t--[[local count='0'\n\tfor k,v in pairs(bodypkg) do\n\tlog.debug('httpserveralar [%s] count 11111111长度', count)\n     count = count + 1\n\t end\n\t log.debug('httpserveralar [%s] count 长度', count)\n\t if count~=6 then \n\t ack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\t ctx:asend(ack)\n\t return\n\t end ]]--\n\n\tlocal alarmSite=bodypkg['alarmSite']\n\t--alarmSite=os.date("%Y-%m-%d %H:%M %S", alarmSite)\n\tlog.debug('httpserveralar [%s] 时间戳5555555imeStamps', tonumber(alarmSite))\n\t\t  alarmSite=alarmSite..'000'\n    log.debug('httpserveralar [%s] 毫秒级时间戳5555555imeStamps', tonumber(alarmSite))\n    local alarmMsg = bodypkg['alarmMsg'] --报警信息      int\n\tlog.debug('httpserveralar [%s] 报警信息666666666alarmMsg', bodypkg['alarmMsg'])\n    local alarmPic = bodypkg['alarmPic']--异物入侵截图    \n\tlog.debug('httpserveralar [%s] 异物入侵截图  7777777alarmPic', bodypkg['alarmPic'])\t\n\tlocal alarmRange = bodypkg['alarmRange']--//距离   float \n\tlog.debug('httpserveralar [%s] 距离88888888trainYOffsets', alarmRange)\n\t\n\t\n\tout.data = {\n           _data_type='capture',\n\t\t    alarmSite=alarmSite,\n\t\t\talarmMsg=alarmMsg,\n\t\t\talarmPic=alarmPic,\n\t\t\talarmRange=alarmRange\n        }\n\n\n        \n\t\t\n\t\t--11\n\t\t\n\t\t\n\n        log.debug('httpserveralar [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend\n\n	INLINE	2019-10-22 14:56:39.177+08	2020-01-16 16:50:15.12+08	2019-10-22	\N
9ef827cd-6659-4099-b834-218954121f3e	MqttTest	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("mqtt_test start , ctx=")\nend\n\n\nonData=function(hex)\n    log.debug("mqtt_test Data=%s",json.encode(hex.payload))\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("mqtt_test result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)    \n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n	INLINE	2019-12-04 17:46:51.37+08	2019-12-06 16:34:09.682+08	2019-12-04	\N
e717a755-bd92-4ee0-877c-d12780487661	lrk642	\N		1.0	bfe504c8-b84a-43ec-831a-5ce698db9950	bfe504c8-b84a-43ec-831a-5ce698db9950	f	bfe504c8-b84a-43ec-831a-5ce698db9950	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("lrk642: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("lrk642: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\n    local sData= HextoStr(hex)\n    log.debug("lrk642: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],';END')\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t log.debug("lrk642: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\tlog.debug("lrk642: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("lrk642: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1))   \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2) + Kt*(temperature-T0)\n\t\t\t\tend            \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\ttemperature=temperature,\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\tlog.debug("lrk642:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\tlog.debug('lrk642  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif  type_sensor=='CX' then\n\t\t\tlog.debug('lrk642  Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t        local cexieData=Split(cexie[2],',')\n\t\t\tlog.debug('lrk642   cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\tlog.debug('lrk642   模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+32)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\tlog.debug('lrk642   测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\tlog.debug('lrk642:子设备原形childDevice=%s', json.encode(childDevice))\n\n           \n                    local data1 = {\n                        data = {\n                           physicalvalue=physicalvalue\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n               \n               \n\t\t\t\telse\n\t\t\t\t\tlog.debug('lrk642  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t    end \n\tend \n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("lrk642: result=%s",json.encode(out))\n    ctx:notify(resultData)\nend\n\n\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("lrk642:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2019-11-14 15:52:24.584+08	2019-12-10 13:29:41.162+08	2019-11-14	\N
53dcd683-cb5d-4ac5-9c53-d5305893edd5	Park_Server	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    ok, resp = ctx:ssend('01020304', 5000)\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n\nonData = function(httpbody, index)\n    local response_GpsData_bodyStr = '{"cmd":"Park","data":{},"status":0}'\n    asend_HttpResponse(response_GpsData_bodyStr)\n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\n    --log.debug('bs_park_http [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n\n    --数据域 内的索引号\n    local ErrorCode = true --IsValid(hex)\n    if ErrorCode then\n\t\tlocal moduleNo = device.uplink.props.id --模块\n        sData = httpbody.Body\n        log.debug('bs_park_http  sData=%s', sData)\n        --获取子字符串表\n\t\tlocal cmds = Split(sData, ',')\n\t\tlog.debug('bs_park_http  sizeof')\n\t\tlocal count = (cmds and #cmds) or 0\n\t\tlog.debug('bs_park_http  sData length =%s', count)\n\t\tlocal num = Split(cmds[1], '=')\n\t\tlocal use_lot = Split(cmds[2], '=')\n\t\tlocal timespan = Split(cmds[3], '=')\n\t\tif count > 3 then --车辆出入记录\n\t\t\tlocal card_id = Split(cmds[1], '=')\n\t\t\tlocal kind_id = Split(cmds[2], '=')\n\t\t\tlocal car_cp = Split(cmds[3], '=')\n\t\t\tlocal car_model = Split(cmds[4], '=')\n\t\t\tlocal carno = Split(cmds[5], '=')\n\t\t\tlocal username = Split(cmds[6], '=')\n\t\t\tlocal sex = Split(cmds[7], '=')\n\t\t\tlocal idcard = Split(cmds[8], '=')\n\t\t\tlocal phone = Split(cmds[9], '=')\n\t\t\tlocal homeaddress = Split(cmds[10], '=')\n\t\t\tlocal Cwno = Split(cmds[11], '=')\n\t\t\tlocal in_time = Split(cmds[12], '=')\n\t\t\tlocal out_time = Split(cmds[13], '=')\n\t\t\tlocal parked_zkfee = Split(cmds[14], '=')\n\t\t\ttimespan = Split(cmds[15], '=')\n\t\t\tout.data = {\n\t\t\t\tcard_id = card_id[2],\n\t\t\t\tkind_id = kind_id[2],\n\t\t\t\tcar_cp = car_cp[2],\n\t\t\t\tcar_model = car_model[2],\n\t\t\t\tcarno = carno[2],\n\t\t\t\tusername = username[2],\n\t\t\t\tsex = sex[2],\n\t\t\t\tidcard = idcard[2],\n\t\t\t\tphone = phone[2],\n\t\t\t\thomeaddress = homeaddress[2],\n\t\t\t\tCwno = wno[2],\n\t\t\t\tin_time = in_time[2],\n\t\t\t\tout_time = out_time[2],\n\t\t\t\tparked_zkfee = tonumber(parked_zkfee[2])\n\t\t\t}\n\t\t\tout.time = unixtimestamp(timespan[2], moduleNo)\n\t\t\tlog.debug('bs_park_http time = %s',cmds[3])\n\t\telse --停车位数量\n\t\t\tout.data = {\n\t\t\t\tnum = tonumber(num[2]),\n\t\t\t\tuse_lot=tonumber(use_lot[2])\n\t\t\t}\n\t\t\tout.time = unixtimestamp(timespan[2], moduleNo)\n\t\t\tlog.debug('bs_park_http time = %s',cmds[3])\n\t\tend\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('bs_park_http resultData=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("bs_park_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("bs_park_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                --log.debug('bs_park_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.channel\n            else\n                --log.debug('bs_park_http 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.channelId\n            end\n\n            if tostring(moduleStrCheck) == tostring(moduleNoId) then\n                if tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    --log.debug('bs_park_http:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('bs_park_http: m=%s c=%s subdevices是nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(alldata)\n    log.debug('bs_park_http  校验开始')\n    if alldata == nil then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        log.debug('bs_park_http: 校验失败 Data is nil')\n        return false\n    end\n\n    if string.sub(alldata, 1, 8) ~= '7b22616c' and string.sub(alldata, -2, -1) ~= '7d' then\n        errormsg = 'CMD is wrong'\n        errcode = 1002\n        log.debug('bs_park_http: 校验失败 CMD is wrong')\n        return false\n    end\n\n    log.debug('bs_park_http: 校验通过')\n    return true\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = string.sub(hex, 2 * i - 1, 2 * i)\n        local ascii = string.char(tonumber(bi, 16))\n        str = str .. ascii\n    end\n    return str\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('bs_park_http [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n\tlog.debug('bs_park_http  Split')\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetFactorName = function(num)\n    local NO = tonumber(num + 1)\n    local FactorNames = {'沉降', '水平', '轴力', '倾斜'}\n    local FactorName = FactorNames[NO]\n    return FactorName\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend	INLINE	2019-09-29 14:14:34.049+08	2019-10-10 17:35:08.475+08	2019-09-29	\N
83f972a0-ce28-4095-a775-1d9627256ed9	shjy_temp_BK-YL01	\N		1.0	49441bc3-dbb9-4880-b691-70b9c5644a9d	49441bc3-dbb9-4880-b691-70b9c5644a9d	f	49441bc3-dbb9-4880-b691-70b9c5644a9d	Lua	--//E:\\SVN\\201806项目\\20180615下周项目\\20180615下周项目\\上海建岩科技有限公司20180614\\\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shjy_temp_BK-YL01", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shjy_temp_BK-YL01 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, 'L')\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, 'L')\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shjy_temp_BK-YL01 SSend error!")\n        end\n        ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local rainfall = iota.hexToUInt(hex,3,'B')/10\n        --local rainfall2 = iota.hexToShort(hex,5,'B')/10\n        --local rainfall=rainfall2+rainfall1\n        out.data = {\n\t\t\trainfall=tonumber(string.format('%0.1f',rainfall))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shjy_temp_BK-YL01 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shjy_temp_BK-YL01 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2019-08-12 10:04:10.257+08	2019-08-12 11:47:51.521+08	2019-08-12	\N
08e016e1-21f3-4a45-a960-89e5d91211d9	http_rydw	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	onData = function(hex)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local moduleNoid = device.uplink.props.id\n    log.debug('http_rydw [%s] hex.Body=%s type=%s', moduleNoid, hex.Body, type(hex.Body))\n\n    local card_data = {}\n    local body = json.decode(hex.Body)\n    local oneData = {}\n    for _, value in pairs(body.datastreams) do\n        oneData[value.id] = value.value\n    end\n\n    if oneData.card_id ~= nil then\n        local child_device = getDeviceInfo(oneData.card_id)\n        if child_device ~= nil then\n            local data1 = {\n                data = {\n                    --单位为米，在基站前方（靠近洞口）为负数，在基站后方（更深入洞口）为正数，（对应基站左或右，左为负，右为正）\n                    distance = oneData.distance,\n                    --标签状态 0正常 1电压低 2紧急报警\n                    state = oneData.state,\n                    --基站ID号\n                    station_id = oneData.device_id\n                },\n                device = child_device.id,\n                type = 1\n            }\n            table.insert(out.data, data1)\n        end\n    end\n    asend_HttpResponse()\n    log.debug('http_rydw [%s] json.encode(out)=%s', moduleNoid, json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\ngetDeviceInfo = function(channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("http_rydw 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("http_rydw 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            channelNoId = child.card_id\n            --log.debug('http_rydw 子设备通道 c=%s ', channelStrCheck)\n\n            if channelStrCheck == channelNoId then\n                --log.debug('http_rydw   name=%s  匹配到 子设备', channelNoId)\n                return child\n            end\n        end\n    else\n        return nil\n    end\nend\n\n\nasend_HttpResponse = function()\n    ack = {type = 'http', code = 200, body = '{}'}\n    ctx:asend(ack)\nend	INLINE	2020-12-09 11:06:34.018+08	2020-12-09 14:45:35.369+08	2020-12-09	\N
4a3ea0f9-d431-492c-85b8-ceac278b1456	scg_Vibrating_1400	\N		1.0	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	f	19fa25f4-9ba9-4e93-9025-e67b34db9cf7	Lua	\nstart = function()\n    log.debug('scg_Vibrating_1400   device=%s', json.encode(device))\nend\n\nlocal dataCounts = 0\n\n--0102030405060708190a17323a000000060201365906c7ba   -- 1和4通道\n--0102030405060708150a17323a000000060201365906c7ba \t  -- 1和3通道\nlocal isCycleTimeUpdated = 0\n\nlocal sendCount_updateTime = 0\nonData = function(httpbody)\n    local dataid = device.uplink.props.id\n    log.debug('scg_Vibrating_1400 [%s]  httpbody===>%s[%s],', dataid, json.encode(httpbody), dataCounts)\n    --主动上传式\n    --local hex = httpbody.Body\n    local bodyStr = httpbody.Body\n    if bodyStr ~= nil or bodyStr ~= '' then\n        local obj = json.decode(bodyStr)\n        local hex = obj.pkg\n        log.debug('scg_Vibrating_1400 1111111 [%s] hex=%s', dataid, hex)\n        --调度重启，尝试获取记录结果\n        \n        local out = {\n            type = 2,\n            data = {},\n            result = {}\n        }\n        local messageId_hex\n        local ErrorCode = IsValid(hex, dataid)\n        if ErrorCode then\n            local hasCycleTimeUpdated = (isCycleTimeUpdated ~= tonumber(device.props.cycletime))\n            if dataCounts == 0 or hasCycleTimeUpdated then\n                local getdataCounts = getRedisValue('datacounts')\n                if getdataCounts ~= nil then\n                    dataCounts = dataCounts\n                end\n\n                local getisCycleTimeUpdated = getRedisValue('iscycletimeupdated')\n                if getisCycleTimeUpdated ~= nil then\n                    isCycleTimeUpdated = tonumber(getisCycleTimeUpdated) --上次的采集周期\n                end\n            end\n\n            log.debug('scg_Vibrating_1400  [%s] dataCounts=%s,LastCycleTimeUpdated=%s,props.cycletime=%s,hasCycleTimeUpdated=%s', dataid, dataCounts, isCycleTimeUpdated, device.props.cycletime, hasCycleTimeUpdated)\n            dataCounts = (dataCounts + 1) % 0x100 --计数\n            local dataCounts_hex = string.format('%02x', dataCounts)\n            redis.set(device.id .. 'datacounts', tostring(dataCounts)) --存储记录\n            log.debug('scg_Vibrating_1400  [%s]  Received=>%s[%s],', dataid, hex, dataCounts)\n\n            local moduleNo = string.sub(hex, 1, 16)\n            messageId_hex = string.sub(hex, 17, 18)\n            log.debug('scg_Vibrating_1400  [%s]  moduleNo=%s,messageId_hex=%s', dataid, moduleNo, messageId_hex)\n\n            --解析messageID\n            local messageId_bitTable = getBits(messageId_hex)\n            local datatimeHexStr = string.sub(hex, 19, 26)\n\n            local year = string.format('%02x', tonumber(os.date('%y', os.time())))\n            local month = string.format('%02x', tonumber(os.date('%m', os.time())))\n            datatimeHexStr = year .. month .. datatimeHexStr\n            local datetime = hexDateStrToDate(datatimeHexStr)\n            log.debug('scg_Vibrating_1400   [%s]  时间datetime=%s', dataid, datetime)\n            local dataArea = string.sub(hex, 27, -1)\n            log.debug('scg_Vibrating_1400   [%s]  dataArea=%s', dataid, dataArea)\n\n            --遍历\n            for i = 1, 8, 1 do\n                local voltage\n                local Frequency\n                local Resistance\n                local LnR\n                local temperature\n                local deviceId\n                local len_dataArea = string.len(dataArea)\n                if messageId_bitTable[i] == 1 and len_dataArea >= dataTypesLen[i] then --当前标志位数据存在\n                    if i < 5 then --频率数据\n                        local subData = string.sub(dataArea, 1, 10)\n                        dataArea = string.sub(dataArea, 11, -1)\n                        local frequency_str = string.sub(subData, 1, 6)\n                        local resistance_Str = string.sub(subData, 7, 10)\n\n                        Frequency = tonumber(frequency_str, 16) / 100\n                        Resistance = tonumber(resistance_Str, 16)\n                        LnR = math.log(Resistance)\n\n                        --循环插入单通道数据表\n\n                        --获取通道设备deviceId\n                        local channelNo = i\n                        log.debug('scg_Vibrating_1400 [%s] 模块号=%s,通道号=%s,frequency_str=%s[%s],resistance_Str=%s[%s]', dataid, moduleNo, channelNo, frequency_str, Frequency, resistance_Str, Resistance)\n                        local childDevice = getDeviceInfo(moduleNo, channelNo)\n                        --\n\n                        if childDevice ~= nil then\n                            deviceId = childDevice.id\n                            log.debug('scg_Vibrating_1400  (振弦)子设备原形childDevice=%s', json.encode(childDevice))\n                            log.debug('scg_Vibrating_1400  (振弦)子设备deviceId: ' .. tostring(deviceId))\n\n                \n                                local a = childDevice.uplink.capabilities[1].formula.props.A\n                                local b = childDevice.uplink.capabilities[1].formula.props.B\n                                local c = childDevice.uplink.capabilities[1].formula.props.C\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n                                local g = childDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\t\t\t\tlocal e= childDevice.uplink.capabilities[1].formula.props.E\n\t\t\t\t\t\t\t\tlocal f0= childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal k= childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal t0= childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\t\t\t\t\t\n                                log.debug('scg_Vibrating_1400  [%s] (振弦)子设备:m=%s,c=%s：公式参数a=%s,b=%s,c=%s', dataid, moduleNo, channelNo, a, b, c)\n                                if a ~= nil and b ~= nil and c ~= nil then\n                                    temperature = 1 / (a + b * LnR + c * LnR ^ 3) - 273.2 --无温度补偿\n                                    temperature = tonumber(string.format('%0.2f', temperature))\n                                    log.debug('scg_Vibrating_1400 [%s]  模块号=%s,通道号=%s   当前的temperature=%s', dataid, moduleNo, channelNo, temperature)\n                                end\n\t\t\t\t\t\t\t    if childDevice.uplink.capabilities[1].formula.metaid == 'd3c03d95-0625-44e5-a097-d371daa46150' then --混凝土结构\n\t\t\n\t\t\t\t\t\t\t\t\tif g ~= nil and e ~= nil and k ~= nil and f0 ~= nil and t0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = g * e *( Frequency ^ 2 - f0 ^ 2)+ k * (temperature - t0)\n\t\t\t\t\t\t\t\t  \n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'abc52bef-269a-4be1-82f0-5d3626a3ca44' then --钢结构\n\t\t\t\t\t\t\t\t\t--local y1= childDevice.uplink.capabilities[1].formula.props.Y1\n\t\t\t\t\t\t\t\t\t--local y2= childDevice.uplink.capabilities[1].formula.props.Y2\n\t\t\t\t\t\t\t\t\tif  g ~= nil and e ~= nil and f0 ~= nil then\n\t\t\t\t\t\t\t\t\t\tphy = g * e *( Frequency ^ 2 - f0 ^ 2)\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n                        else\n                            log.debug('scg_Vibrating_1400  [%s] (振弦)子设备:m=%s,c=%s deviceId为nil', dataid, moduleNo, channelNo)\n                        end\n                        local data1 = {\n                            data = {\n                                frequency = Frequency,\n                                resistance = Resistance,\n                                voltage = voltage,\n                                temperature = temperature,\n\t\t\t\t\t\t\t\tphysicalvalue=phy\n                            },\n                            device = deviceId,\n                            type = 1,\n                            time = datetime\n                        }\n                        table.insert(out.data, data1)\n                    else --电压  错误码  心跳 扩展\n                        local subData = string.sub(dataArea, 1, 2)\n                        dataArea = string.sub(dataArea, 3, -1)\n                        if i == 5 then --电压数据\n                            voltage = (tonumber(subData, 16) + 175) / 100\n                        elseif i == 6 then --错误码\n                            debug_code = 1003\n                            debug_msg = subData .. '_' .. debugErrorMsg[tonumber(subData, 16)]\n                            out.result = {code = debug_code, msg = debug_msg}\n                        end\n                    end\n                end\n            end\n\n            --返回数据\n            sendAck(dataid, messageId_hex, dataCounts_hex)\n        else\n            out.result = {code = errcode, msg = errormsg}\n        end\n        local resultData = json.encode(out)\n        log.debug('scg_Vibrating_1400  [%s] resultData=%s', dataid, resultData)\n\n        ctx:notify(resultData)\n    end\nend\n\nasend_HttpResponse = function(ackID, bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    log.debug('scg_Vibrating_1400 [%s] 应答=%s', ackID, json.encode(ack))\n    ctx:asend(ack)\nend\nsendAck = function(dataId, uplinkmessageid, uplinkDataCounter)\n    log.debug('scg_Vibrating_1400 [%s] uplinkmessageid=%s,uplinkDataCounter=%s', dataId, uplinkmessageid, uplinkmessageid)\n\n    --下发返回前  判断 当前设备 cycletime与之前的存储是否一致\n\n    if uplinkmessageid ~= nil then\n        if tonumber(isCycleTimeUpdated) == tonumber(device.props.cycletime) or sendCount_updateTime > 10 then\n            local resp_hex = '800301' .. uplinkmessageid .. uplinkDataCounter\n            asend_HttpResponse(dataId, resp_hex)\n        else\n            --首次收到数据下发采集周期 配置\n            --d000000e1003010102\n            local cycleTime = string.format('%08x', tonumber(device.props.cycletime))\n            --log.debug('scg_Vibrating_1400 [%s] 下发 cycleTime=%s ,isCycleTimeUpdated=%s', dataId, cycleTime, isCycleTimeUpdated)\n            local resp_hex = 'd0' .. cycleTime .. '0301' .. uplinkmessageid .. uplinkDataCounter\n            log.debug('scg_Vibrating_1400 [%s] 下发 resp_hex=%s,cycleTime=%s ,isCycleTimeUpdated=%s,sendCount_updateTime=%s', dataId, resp_hex, cycleTime, isCycleTimeUpdated, sendCount_updateTime)\n            asend_HttpResponse(dataId, resp_hex)\n            sendCount_updateTime = sendCount_updateTime + 1\n        end\n    end\nend\n\ngetRedisValue = function(keyStr)\n    log.debug('scg_Vibrating_1400 getRedisValue,keyStr=%s', keyStr)\n    local keyValue\n    local r1, r1ok = redis.get(device.id .. keyStr) --获取上次记录时间\n    if r1ok ~= false then\n        keyValue_redis = r1\n        log.debug('scg_Vibrating_1400 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n        if keyValue_redis ~= nil then\n            keyValue = tonumber(keyValue_redis)\n        else\n            log.debug('scg_Vibrating_1400 redis get dataCounts=nil')\n        end\n    else\n        log.debug('scg_Vibrating_1400 r1=%s,r1ok=%s[%s],%s=%s', r1, r1ok, type(r1ok), keyStr, keyValue_redis)\n    end\n    return keyValue\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("getDeviceInfo:".."LUA:device.dnlinks[1].devices : data is =%s", json.encode(device.dnlinks[1].devices))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            if child.uplink.props.module == tostring(moduleNoId) then\n                if child.uplink.props.channel == tostring(channelNoId) then\n                    --log.debug('scg_Vibrating_1400  m=%s,c=%s 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('scg_Vibrating_1400  m=%s,c=%s subdevices=nil', moduleNoId, channelNoId)\n        return nil\n    end\nend\n\nIsValid = function(data, d_index)\n    log.debug('scg_Vibrating_1400  开始校验数据=%s', data)\n    local datalen = string.len(data) / 2\n    if data == nil or datalen <= 9 then\n        errormsg = string.format('Data is nil or invalid length=%s', datalen)\n        errcode = 1002\n        log.debug('scg_Vibrating_1400 [%s] errormsg=%s', d_index, errormsg)\n        return false\n    end\n    data = string.sub(data, 17, -1)\n    --去除id\n    local msgId = string.sub(data, 1, 2)\n    local msgtype = string.sub(data, 5, 6)\n    if msgId == '80' and msgtype == 'ff' then --debug信息\n        debugMsg = HextoStr(string.sub(data, 7, -1))\n        errormsg = string.format('debugmsg=%s', debugMsg)\n        errcode = 1003\n        log.debug('scg_Vibrating_1400 [%s] debugmsg=%s', d_index, errormsg)\n        return false\n    elseif msgId == '80' and msgtype == '01' then --设备ack应答\n        log.debug('scg_Vibrating_1400 [%s] 设备应答设置成功=%s', d_index, errormsg)\n        redis.set(device.id .. 'iscycletimeupdated', tostring(device.props.cycletime)) --存储记录\n    \t --如果平台刚更新配置周期，还未下发指令。设备就返回更新应答， 日志记录这种异常，厂家说可能出现，可能？\n        if dataCounts == 0 or  sendCount_updateTime ~=0 then\n            log.debug('scg_Vibrating_1400 [%s]  异常 设备更新周期应答  dataCounts=%s,sendCount_updateTime=%s,ackdata=%s', d_index,dataCounts,sendCount_updateTime,data)\n        end\n    end\n    return true\nend\n\ndataTypesLen = {5, 5, 5, 5, 1, 1, 1, 0}\n\ngetBits = function(byteStr)\n    local bits = {}\n    local byteNum = tonumber(byteStr, 16)\n    local bitsTable = {}\n\n    for i = 8, 1, -1 do\n        local ex = 2 ^ (i - 1)\n        if byteNum >= ex then\n            --print(string.format('i=%s,byteNum=%s',i,byteNum))\n            bitsTable[i] = 1\n            byteNum = byteNum % ex\n        else\n            bitsTable[i] = 0\n        end\n    end\n    return bitsTable\nend\n\nhexDateStrToDate = function(dateStr)\n    -- 12 04 02 0F 24 38 ==> 18\n    local year_ = 2000 + tonumber(string.sub(dateStr, 1, 2), 16)\n    local month_ = tonumber(string.sub(dateStr, 3, 4), 16)\n    local day_ = tonumber(string.sub(dateStr, 5, 6), 16)\n    local hour_ = tonumber(string.sub(dateStr, 7, 8), 16)\n    local minute_ = tonumber(string.sub(dateStr, 9, 10), 16)\n    local second_ = tonumber(string.sub(dateStr, 11, 12), 16)\n\n    timenum = os.time({year = year_, month = month_, day = day_, hour = hour_, min = minute_, sec = second_})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('scg_Vibrating_1400  timenum=%s,recordTime=%s, year_=%s,month_=%s,day_=%s,hour_=%s,minute_=%s,second_=%s',timenum,recordTime,year_,month_,day_,hour_,minute_,second_)\n    return recordTime\nend\n\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ndebugErrorMsg = {\n    '电量过低，设备即将无法使用无线通讯，此时设备红灯闪烁',\n    'AIT不合法',\n    'SIT不合法',\n    '传感器端口1打开，但检测不到传感器',\n    '传感器端口2打开，但检测不到传感器',\n    '传感器端口3打开，但检测不到传感器',\n    '传感器端口4打开，但检测不到传感器',\n    '传感器1参数不合法',\n    '传感器2参数不合法',\n    '传感器3参数不合法',\n    '传感器4参数不合法',\n    'MESSAGEID不合法/MESSAGEID与数据长度不对应',\n    '设备温度过高，超过85度',\n    '设备温度过低，低于-45度',\n    '开发错误，已保存至flash',\n    '设备未知原因重启',\n    '设备未知原因重新上电',\n    '端口1/2/3/4传感器频率超出扫频范围，可能造成数据不准确',\n    '传感器端口1/2/3/4打开，但监测不到任何传感器',\n    '错误原因较多，导致错误栈满',\n    '传感器端口1 超过4000HZ',\n    '传感器端口2 超过4000HZ',\n    '传感器端口3 超过4000HZ',\n    '传感器端口4 超过4000HZ',\n    'AIT过小，自动设置为最小值60',\n    'AIT过大，大于最大值2147483647',\n    'ait不为零，但没有端口是打开的',\n    '时间同步超时',\n    '传感器端口均未接传感器'\n}	INLINE	2019-05-07 15:53:30.838+08	2021-01-15 13:45:15.977+08	2019-05-07	\N
7edb13cb-08e0-4c27-91cc-153a1af8a708	gn_mcu32	\N		1.0	c465666b-2fe0-4d50-9d21-74d919571ab4	c465666b-2fe0-4d50-9d21-74d919571ab4	f	c465666b-2fe0-4d50-9d21-74d919571ab4	Lua	--//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n    -- log.debug("load script %s, moduleId=%s", "gn_mcu32.lua", device.props.moduleId or "[nil]")\n     -- log.debug("gn_mcu32:".."LUA: ctx is =%s", json.encode(device))\n    ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("gn_mcu32:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n    --log.debug("gn_mcu32收到数据=%s", hex)\n\t--log.debug("gn_mcu32 device =%s", json.encode(device))\n    --log.debug("gn_mcu32subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    local ModuleChar = "M=";--振弦\n    local DigChar = "Di";--测斜\n    local VoltageChar = "V=";--电压\n    local CurrentChar = "I=";--电流\n    local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=toStrHex(hex)\n        --log.debug("gn_mcu32:sData是 %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,'\\n')\n        --移除表内的“”和nil\n        for k,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n            table.remove(allResponse,k)\n                --log.debug("gn_mcu32:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k,v in ipairs(allResponse) do\n            local singleData=Split(v,' ')\n            --移除单类数据中的空 \n            for kk,vv in ipairs(singleData) do\n                if vv=='' or vv==nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove (singleData,kk)\n                end\n            end\n\n            if k>1 then\n                local temp1=singleData[2+1]\n                local moudleStr=string.sub(singleData[2+1],2,2)\n                local moduleNo=tonumber(moudleStr)\n                --解析单条数据\n                for kkk,vvv in ipairs(singleData) do\n                    --log.debug("gn_mcu32:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n                  \n                    local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n                    --log.debug("gn_mcu32: type_sensor="..type_sensor) \n                    if string.len(type_sensor) >=2 then\n                       --频率\n                        if type_sensor==ModuleChar then\n                            local length = string.len(singleData[kkk]) - 3;\n                            local tempLength = string.len(singleData[kkk + 1]) - 3;\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local Module =tonumber(string.sub(singleData[kkk],4, -1))\n                            local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n                            local Frequency = math.sqrt(Module*1000);\n                            local Temp;\n                            local Phy\n              \t\t\t    local Length\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:振弦模块： 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K ==nil or F0==nil or Kt==nil or T0==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32   模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tPhy=K*(Frequency^2 - F0^2) + Kt*(Temp-T0)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:振弦模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n                        --电压\n                        if type_sensor== VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t     \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend                                     \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n                       \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                            \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n                     \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend            \n                        \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                          \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend                          \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk);                            \n  \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("gn_mcu32:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t   local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t   --log.debug("gn_mcu32:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t   local Fi=waterData[i]         \n\t\t\t\t\t\t\t\t\t\t   Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t   --log.debug("gn_mcu32:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend   \n\t\t\t\t\t\t\t\t\telse\n                                   -- log.debug("gn_mcu32:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)                                \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n                        end\n\n                        --测斜\n                        if type_sensor==DigChar then\n\t\t\t\t\t        local Phy\n\t\t\t\t\t        local Length\n\t\t\t\t\t        local Temp\n                            if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n                                local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n                                local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n                                --获取通道设备deviceId\n                \t\t\t    local childDevice=getDeviceInfo(moduleNo,channelNo)\n                \t\t\t    local deviceId\n                                if childDevice~=nil then\n               \t\t\t\t\t    deviceId=childDevice.id\n                             \t    --log.debug("gn_mcu32:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n              \t\t\t\t        --log.debug("gn_mcu32:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n                                   -- log.debug("gn_mcu32:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination         \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend            \n                         \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length            \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1                         \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻（差阻）\n                        if type_sensor==ResistanceChar then\n\t\t\t\t\t        --local R1Length = string.len(singleData[kkk]) - 3;  --取消\n                            --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n                            local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n                            local Temp;\n                            local Phy\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s  f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s  Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s  b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s  a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s  Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil  then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n                  \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n                                      Phy =f*(R1/r1 -Zo)+b*Temp\n                                      --log.debug("gn_mcu32: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n                    \t\t\t\telse\n                              \t\t\t --log.debug("gn_mcu32: 数据无效 m=%s,c=%s, r1=0")\n                                          break\n                  \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("gn_mcu32:差阻模块  m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n                    end\n\t\t\t\tend\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    --log.debug("gn_mcu32resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("gn_mcu32 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     --log.debug("gn_mcu32:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("gn_mcu32 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t  -- log.debug("gn_mcu32 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t --log.debug("gn_mcu32:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n      -- log.debug("gn_mcu32:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    --log.debug("gn_mcu32 校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length=getIndex(alldata)\n    local data=string.sub(alldata,1,length*2)\n    --log.debug("data:"..data)\n    local plu16={}\n    plu16[0]=string.sub(data,-8,-7)\n    plu16[1]=string.sub(data,-6,-5)\n    local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n    -- log.debug("gn_mcu32:".."plu16[0]是："..plu16[0])\n    -- log.debug("gn_mcu32:".."plu16[1]是："..plu16[1])\n    -- log.debug("gn_mcu32:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("gn_mcu32:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n     --   errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    --log.debug("gn_mcu32 校验通过")\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nGetSWData=function(sData,j)\n    local SW={}\n\n    local Water1 = tonumber(string.sub(sData[j],8,-1));\n    local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n    local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n    local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n    local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n    local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n    \n    local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n    local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n    SW[1] = Water1/100 + Base1;\n    SW[2] = Water2/100 + Base2;\n    SW[3] = MaxWinSpeed;\n    SW[4] = Direction;\n    SW[5] = AverWinSpeed;\n    SW[6] = RealTImeWinSpeed;\n    SW[7] = NowDirection;\n    SW[8] = AccRain;\n    return SW;\nend	INLINE	2019-10-14 09:31:13.857+08	2019-10-14 10:23:32.715+08	2019-10-14	\N
77db0016-b199-4659-8d88-718b7c6f5f12	ceshi	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function ()\n\tlog.debug("load script %s, moduleId=%s", "ceshi", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlog.debug("ceshi:LUA:根设备devices : data is =%s", json.encode(device)) \n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("ceshi 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("ceshi 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\t\n    \t    local cmdstr = tonumber(moduleNo) .. 'A'\n\t\t\tlog.debug('ceshi:模块%s的cmdstr是：%s', moduleNo, cmdstr)\n\t\t\tlocal cmdstr_asi = toHexStr(cmdstr)\n\t\t\tlocal lcr_str = LCR(cmdstr_asi)\n\t\t\tlcr_str=string.format("%x",lcr_str)\n          \n\t\t\tlog.debug('ceshi:模块%s通道%s的lcr_str是：%s', moduleNo, channelNo, lcr_str)\n\t\t\tlocal request_asciiStr = '#' .. cmdstr\n\t\t\tlocal last_str = '!'\n\t\t\tlast_str = toHexStr(last_str)\n\t\t\tlog.debug('ceshi:模块%s的request_asciiStr是：%s', moduleNo, request_asciiStr)\n\t\t\tlocal buff = toHexStr(request_asciiStr).. lcr_str .. last_str\n \n\t\t\tok, resp = ctx:ssend(buff, 60000)\n\t if ok then\t   \n\t\t--log.debug("ceshi:模块%s的采集仪采集数据接收成功,开始解析resp=%s ",moduleNo,resp)   \n         result = ParseResult(resp,out,moduleNo)\t\n\t else\n    \tout.result = {code=1001,msg='采集超时'} \n\t\tlog.debug("ceshi:模块%s的采集数据 接收失败",moduleNo)    \n\t end\n     local resultData =json.encode(result)\n     log.debug("ceshi:out序列化结果 : out is =%s", resultData)\n     ctx:done(resultData)\t\nend\n\n--2454323031373131303630333430ad433031a439b93230353530fc2d34333333fa3632359d433032a539b932343330398231303933cd343837a3433033a639b9323534333031323239ce3631339a433034a739b932313539398a2d33353132f8353839a6433035a839b93232313137fd2d363532ca3632359d433036a939b93335333131fd3130323634fd3633319a433037aa39b93230373030f92d31313233f4363139a0433039ac39b933303738398b36333535d33633349d433130a439b932383833368b34343131ca363339a2433131a539b93139353031802d323939398a3630389e433132a639b932353135358231303133c536303197433133a739b932373537318631383530ce36313097433134a839b93234323536832d353833cd363638a421\nParseResult=function(hex,out,moduleNoStr)\n\n\t--  二次解析\n\tlocal devicechnum = 2  --这里标记传感器编码  数字不对\n\tlocal devicechnumdate = 3   --这里是标记传感器数据    数字不对    \n\t\n\tlocal channelDatas = {}   --这个用来放传感器数据的\n\tlog.debug("ceshi: m=%s,接收传感器数据1111 Received=>%s",moduleNoStr,hex)\n\tlocal ErrorCode = IsValid(hex,moduleNoStr)\n\tif ErrorCode then\n\t\tlog.debug('ceshi:hex=%s', hex)\n\t\tlocal sr=string.sub(hex,3,-1)\n\t\tlocal sq=string.sub(sr,1,-3)\n\t\tlog.debug('ceshi:处理末尾hex=%s', sq)\n\t\tlocal sp='54'   --这里是分割各个传感器\n\t\tlocal sArray=Split(sq,sp)\n\t\tlog.debug('ceshi:数组sArray=%s', json.encode(sArray))\n\t\t for k,v in pairs(sArray) do\n\t       --这个是分割码流后的各个传感器的码流\n\t\t log.debug('ceshi:各个传感器的码流v=%s', v)\n\t\t if  v~='' then \n\t\t \n\t\t local b=string.sub(v,29,44)--传感器设备编号\n\t\t  log.debug('ceshi:传感器编号的码流b=%s', b)\n\t\t local sArrays=Splits(b) --将传感器设备编号分割成俩个\n\t\t\t\tlocal num=0           --累加计算\n\t\t\t\tfor k,vr in pairs(sArrays) do\n\t\t\t\ttennum=tonumber(vr, 16) \n\t\t\t\t\tnum=num+tennum\n\t\t\t\t\tend\n\t\t\t\tprint(num)\n\t\t\t\tlog.debug('ceshi:传感器编号的码流num=%s', num)\n\t\t\t\tlocal numb=num\n\t\t\t\tlog.debug('ceshi:传感器编号的码流和numb=%s', numb)\n\n           local c=numb%128+128 --传感器校验算法\n\t\t   log.debug('ceshi:传感器编号的码流校验值c=%s', c)\n           local d=string.format("%#x",c) --校验码由10进制转化成16进制\n\t\t   log.debug('ceshi:传感器编号的码流校验值由10进制转换成16进制d=%s', d)\n           local f=string.sub(d,3,4)  --计算得到校验码   截取16进制后2位\n\t\t  log.debug('ceshi:截取传感器编号的码流校验值后俩位f=%s', f)\n\t\t  log.debug('ceshi:已经运算到了校验码时各个传感器的码流v=%s', v)\n\t\t  local bb=string.sub(v,45,46)--码流里的校验码  \n          log.debug('ceshi:码流里的校验码bb=%s', bb)     \t--感觉这块没有用\t   \n\t\t  local ab=string.find(v, "b0")  --找到B0下标\n\t\t  log.debug('ceshi:找到b0下标ab=%s', ab) \n\t\t  local bbb=ab-5                   --得到数据1最后一个字节的下标\n\t\t  log.debug('ceshi:得到数据1最后一个字节的下标bbb=%s', bbb)\n\t\t  local phy=string.sub(v,47,bbb) --得到数据1数据\n\t\t  log.debug('ceshi:得到数据1数据phy=%s', phy) \n\t\t   \n\t\t  local physicalvalue=HextoStr(phy)/100  --得到数据1的ascll\n\t\t  log.debug('ceshi:得到数据1的ascll数据physicalvalue=%s', physicalvalue) \n\n\t\t  local dd=ab+2\n\t\t  log.debug('ceshi:得到数据3字节的下标dd=%s', dd)\n          local tempera=string.sub(v,dd,-3)--得到数据3的数据\n\t\t  log.debug('ceshi:得到传感器tempera=%s', tempera)\n\t\t \n\t\t  local temperature=(HextoStr(tempera)-500)/10    --得到数据3的ascll\n\t\t  log.debug('ceshi:得到数据3的ascll tempera=%s', temperature)\n\t\t  local _twophys = {physicalvalue,temperature}   --物理量和温度的存放地\n\t\t  local deviceids=HextoStr(b)   --设备编号的ascll\n\t\t  channelDatas[deviceids]=_twophys  --将设备编号，传感器数据装入table表里\t \n          log.debug('ceshi:数组channelDatas=%s', json.encode(channelDatas))\n\n\t\t  end \n\t\t  \n\t     end\n\t\t \n\t\t \n\t\t \n\t\t for k,v  in pairs(channelDatas)  do\n\t\t\tlog.debug('ceshi:数组与下面设备连接channelDatas=%s', json.encode(channelDatas))\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNoStr, k)\n\t\t\t\t\t\t--phyvalue=channelDatas[k]   --将表中的传感器对应编号的数据给了phyvalue\n\t\t\t\tif\tchildDevice~=nil then\n\t\t\t\t\tlocal data1 = {\n                        data = {\n                            physicalvalue = channelDatas[k][1],\n\t\t\t\t\t\t\ttemperature = channelDatas[k][2],\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n\t\t\t\t\t table.insert(out.data, data1)\n\t\t\t\t\telse\n\t\t\t\t\tlog.debug('ceshi  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\t\t\t\n\t\t \n\t\t \n\t\t end \n\n\telse\n\t    log.debug('ceshi  m=%s,数据校验失败',moduleNo)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n  \treturn out\nend\nLCR = function(buff)\n    log.debug('ceshi:lcr buff=%s', buff)\n    local lcr = 0\n    for i = 0, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2 * i, 2 * (i + 1)), 16)\n    end\n    log.debug('ceshi:lcr累加结果%s', tonumber(lcr))\n    lcr = lcr % 128 + 128\n    log.debug('ceshi:lcr校验结果%s', lcr)\n    return lcr\nend\ngetCheckStr=function(sr)\n    local srlen=string.len(sr)\n    local check=0\n\t for i=1,srlen,1 do\n\t     local byteStr=StrToHex(string.sub(sr,i,i))\n\t\t check=check+tonumber(byteStr,16)\t \n\t end\n     check=check % 128+128\n\t local checkStr\n\t checkStr=string.format("%x",check)   \n\t return checkStr\nend\nGetCodelen=function(num_str,buff_response)\n    local num=tonumber(num_str)\n\tlocal length=0\n\tlocal buff_length=string.len(buff_response)/2\n\tfor j=0,buff_length-num,1 do\n\t    local Y_str=string.sub(buff_response,2*(num+j)+1,2*(num+j)+2)\n\t\tlocal Y=tonumber(Y_str,16)\n\t\tif Y>=128 then\n\t\t    length=j\n\t\t\tbreak\n\t\tend\n\t  \n\tend\n    return length\nend\n\n\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("ceshi 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     log.debug("ceshi:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\tlog.debug("ceshi 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t   log.debug("ceshi 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t log.debug("ceshi:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n       log.debug("ceshi:  subdevices是nil")\n    \treturn nil\n    end\nend\n\n\n\nIsValid=function(data,moduleNoStrCheck)\n\tlog.debug('ceshi  m=%s,开始校验数据 data=%s',moduleNoStrCheck,data)\n    if data == nil or string.len(data)/2 < 3 then\n        errormsg = string.format('无效的数据，长度=%s',string.len(data)/2)\n        errcode = 1002\n        return false\n    end\n\n\tif string.sub(data,1,2) ~= '24' then\n        errcode = 1003\n        errormsg = string.format('回复数据的 帧头≠0x24[%s]',string.sub(data,1,2))\n        return false\n    end\t\n\tlocal dataLength=string.len(data)/2\n\t\n\tif string.sub(data,-2,-1) ~= '21' then\n        errcode = 1004\n        errormsg = string.format('回复数据的 帧尾≠0x21[%s]',string.sub(data,-2,-1))\n        return false\n    end\t\n    log.debug('ceshi  m=%s,校验通过',moduleNoStrCheck)\n\treturn true\nend\n\n -- 字符串 -> Hex\nStrToHex=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n-- Hex-> 字符串 \nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n--分割16进制，将其分割成俩个  \nSplits=function(szFullString)\n  \tk=string.len(szFullString)\n    local nSplitArray = {}\n   for i=1,k/2 do\n\t\t\n    nSplitArray[i]=string.sub(szFullString,2*i-1,2*i)\n\t\t\n\tend\n\treturn nSplitArray\nend\n\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = tonumber(string.sub(hex, i * 2 - 1, i * 2), 16)\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n--获取采集仪下面的通道信息\ngetDeviceInfos = function(moduleNoId, channelNoId)\nlog.debug('ceshi:进入设备对应数据 moduleNoId=%s', moduleNoId)\nlog.debug('ceshi:进入设备对应数据 channelNoId=%s', channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("ceshi 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n\t\tlog.debug('ceshi:连接前端device.dnlinks[1].devices=%s', json.encode(device.dnlinks[1].devices))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug('ceshi:查询m=%s c=%s子设备 是否匹配设备child=%s', tostring(moduleNoId), tostring(channelNoId), json.encode(child))\n            log.debug('ceshi:上面传感器下来的设备编号 channelNoId=%s', channelNoId)\n\t\t\tlocal moduleStrCheck\n            local channelStrCheck\n            if json.encode(child.uplink.props) ~= 'null' then\n                moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n                channelStrCheck = child.uplink.props.deviceid  \n\t\t\t\tlog.debug('ceshi:传感器的设备编号111111 channelStrCheck=%s', channelStrCheck)\n               -- log.debug('ceshi 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            else\n                moduleStrCheck = child.props.moduleId\n                channelStrCheck = child.props.deviceid\n\t\t\t\tlog.debug('ceshi:传感器的设备编号222222 channelStrCheck=%s', channelStrCheck)\n                --log.debug('ceshi 子设备模块通道 属性获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            end\n    log.debug('ceshi:进入设备对应数据 channelNoId=%s', channelNoId)\n            if tostring(channelStrCheck) == tostring(channelNoId) then\n                if tostring(channelStrCheck) == tostring(channelNoId) then\n                    log.debug('ceshi:  m=%s c=%s 匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                    return child\n                end\n            end\n        end\n    else\n        log.debug('ceshi:  subdevices是nil')\n        return nil\n    end\nend	INLINE	2019-10-10 09:55:56.167+08	2019-10-14 14:16:13.479+08	2019-10-10	\N
bdad7976-f666-4911-997a-031ebe9ccdf5	soil_history	\N	历史数据上报\n	1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	start = function()\n \n\tlocal start=device.props.start\n\tlocal stop=device.props.stop\n\t--local cmd = capability.param\n\tlocal cmd = 'COPYD start=' .. start ..  ' end=' .. stop ..  ' format=fixed '\n\tlog.debug("soil_history linkcnt=%s",cmd)\n\tlocal req = StrtoHex(cmd)\n\n    log.debug("soil_history request=%s", req)\n    local ok, hex = ctx:ssend(req, 20000)\n\t    local result = '{}'\n        if ok then\t   \n\t\tlog.debug("soil_history  采集仪采集数据接收成功,hex=%s ",hex)   \n         result = ParseResult(hex)\t\n\t    else\n    \tresult = {code=1001,msg='采集超时'} \n\t\t\n\t end\n     local resultData =json.encode(result)\n     log.debug("soil_history out序列化结果 : out is =%s", resultData)\n     ctx:done(resultData)\nend\n\n\nParseResult =function(hex)\n  \n\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData = HextoStr(hex)\n        log.debug('soil_history  sData是 %s', sData)\n        --获取子字符串表\n        local allResponse = Split(sData, ';')\n    log.debug("soil_history allResponse=%s",json.encode(allResponse))\n        local allResponseCount = table_leng(allResponse)\n        --移除表内的“”和nil\n        for i = allResponseCount, 1, -1 do\n            v = allResponse[i]\n            if v == '' or v == nil or string.len(v) < 10 then\n                table.remove(allResponse, i)\n                log.debug('soil_history 表内的“”和nil 移除元素k=%s v=%s', i, v)\n            end\n        end\n\n        --分析单类数据\n        local resplength = table_leng(allResponse)\n        log.debug("soil_history resplength=%s",resplength)\n        local phys = {} --存储所有通道物理量\n        local moduleNo  --模块号\n        local dateTimeStr\n        local timenow\n        for k, v in ipairs(allResponse) do\n\t\t log.debug("soil_history k=%s,v=%s",k,v)\n            dataIndex = string.sub(v, 1, 1)\n             --单条数据首字母   D为设备信息 ，A为数据\n\n            if dataIndex == 'D' then\n                local otherData = Split(v, ',')\n                moduleNo = otherData[2]\n                local dateStr = otherData[4]\n                local timeStr = otherData[5]\n                dateTimeStr = string.format('%s %s', dateStr, timeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\tlog.debug('soil_history timenow=%s', timenow)\n            elseif dataIndex == 'A' then\n                local singleData = Split(v, ',')\n                for sensorKey, sensorValue in ipairs(singleData) do\n                    if sensorKey > 2 then\n                        phys[sensorKey - 2] = singleData[sensorKey]\n                    end\n                end\n            end\n        end\n\n        --匹配数据部分\n\n        -- local childDevice={}--测试用\n        -- childDevice.id=123  --测试用\n\n        for index, childDevice in pairs(device.dnlinks[1].devices) do\n\t\t    log.debug('soil_history 主设备 device=%s', json.encode(device.dnlinks[1].devices))\n            log.debug('soil_history 遍历子设备 是否匹配设备child=%s', json.encode(childDevice))\n\n            local channelStrCheck = childDevice.uplink.props.channel\n            log.debug('soil_history 子设备模块通道 接口获取 c=%s ', channelStrCheck)\n            local relatedChannel = Split(channelStrCheck, ',')\n            local valueNum = table_leng(relatedChannel)\n\n            if childDevice.props.sensortype == 'zx' then\n                local Frequency_index = tonumber(relatedChannel[1])\n                local Temperature_index = tonumber(relatedChannel[2])\n                local Frequency = tonumber(phys[Frequency_index])\n                local Temperature = tonumber(phys[Temperature_index])\n        \t\tlog.debug("soil_history  振弦通道[%s]",channelStrCheck)\n                if childDevice.uplink.capabilities[1].formula.metaid == '0d1ad29d-fa86-4af0-bf45-16a19f2fd8d9' then --在iota中查找\n                    local K = childDevice.uplink.capabilities[1].formula.props.K\n                    local Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n                    local Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n                    local To = childDevice.uplink.capabilities[1].formula.props.To\n                    log.debug("soil_history  振弦通道[%s] 公式参数 k=%s,Kt=%s,Fo=%s,To=%s",channelStrCheck,K,Kt,Fo,To)\n                    if K == nil or Kt == nil or Fo == nil or To == nil then\n                        log.debug("soil_history  振弦通道[%s] f=%s,t=%s 参数项为nil",channelStrCheck,Frequency,Temperature)\n                        Phy = nil\n                    else\n                        log.debug("soil_history  振弦通道11111111[%s] f=%s,t=%s",channelStrCheck,Frequency,Temperature)\n\t\t\t\t\t\tif tostring(Temperature) ~= "nil" then\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) + Kt * (Temperature - To)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPhy = K * (Frequency ^ 2 - Fo ^ 2) \n\t\t\t\t\t\tend\n                        log.debug("soil_history 振弦通道[%s]当前的Phy=%s,f=%s",channelStrCheck,Phy,Frequency)\n                        local data1 = {\n                            data = {\n                                frequency = tonumber(string.format('%0.3f', Frequency)),\n                                temperature = tonumber(string.format('%0.2f', Temperature)),\n                                physicalvalue = tonumber(string.format('%0.3f', Phy))\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soil_history: 振弦通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            elseif childDevice.props.sensortype == 'dy' then\n                local Vx_index = tonumber(relatedChannel[1])\n                local Vx = phys[Vx_index]\n                local Vy\n                local Temperature\n                if valueNum == 2 then\n                    local Temperature_index = tonumber(relatedChannel[2])\n                    Temperature = tonumber(phys[Temperature_index])\n                elseif valueNum == 3 then\n                    local Vy_index = tonumber(relatedChannel[2])\n                    local Temperature_index = tonumber(relatedChannel[3])\n                    Vy = phys[Vy_index]\n                    Temperature = tonumber(phys[Temperature_index])\n                    Temperature = tonumber(string.format('%0.3f', Temperature))\n                end\n\n                if childDevice.uplink.capabilities[1].formula.metaid == '5116bca0-de6b-4f0b-b995-31c9801ee401' then --在iota中查找\n                    local Kx = childDevice.uplink.capabilities[1].formula.props.Kx\n                    local Ky = childDevice.uplink.capabilities[1].formula.props.Ky\n                    local Vo = childDevice.uplink.capabilities[1].formula.props.Vo\n\n                    --  log.debug("soil_history 电压通道[%s] 公式参数 Kx=%s,Ky=%s,Vo=%s",channelStrCheck,Kx,Ky,Vo)\n                    if Kx == nil or Ky == nil or Vo == nil then\n                        --      log.debug("soil_history  电压通道[%s] Vx=%s,Vy=%s 参数项为nil",channelStrCheck,Vx,Vy)\n                        Phy = nil\n                    else\n                        --   log.debug("soil_history  电压通道[%s] Vx=%s,Vy=%s",channelStrCheck,Vx,Vy)\n                        local value1 = Kx * (Vx - Vo)\n                        value1 = tonumber(string.format('%0.3f', value1))\n\n                        local value2\n                        if valueNum == 3 then\n                            value2 = Ky * (Vy - Vo)\n                            value2 = tonumber(string.format('%0.3f', value2))\n                        end\n                        -- log.debug("soil_history 电压通道[%s] value1=%s,AngleY=%s Temperature=%s",channelStrCheck,value1,value2,Temperature)\n                        local data1 = {\n                            data = {\n                                voltage=Vx,\n                                physicalvalue = value1,\n                                physicalvalue2 = value2,\n                                temperature = Temperature\n                            },\n                            device = childDevice.id,\n                            time = timenow,\n                            type = 1\n                        }\n                        log.debug("soil_history: 倾角通道[%s]data=%s",channelStrCheck,json.encode(data1))\n                        table.insert(out.data, data1)\n                    end\n                end\n            elseif childDevice.props.sensortype == 'standard' then\n                local value1_index = tonumber(relatedChannel[1])\n                local Value1 = tonumber(phys[value1_index])\n                Value1 = tonumber(string.format('%0.2f', Value1))\n                local Value2\n                local Temperature\n                if valueNum == 2 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n                    log.debug('soil_history standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                elseif valueNum == 3 then\n                    local value2_index = tonumber(relatedChannel[2])\n                    Value2 = tonumber(phys[value2_index])\n                    Value2 = tonumber(string.format('%0.2f', Value2))\n\n                    local value3_index = tonumber(relatedChannel[3])\n                    value3 = tonumber(phys[value3_index])\n                    value3 = tonumber(string.format('%0.2f', value3))\n                    Temperature = value3\n                    log.debug('soil_history standard通道[%s] Temperature=%s', channelStrCheck, Temperature)\n                end\n                local data1 = {\n                    data = {\n                        physicalvalue = Value1,\n                        physicalvalue2 = Value2,\n                        temperature = Temperature\n                    },\n                    device = childDevice.id,\n                    time = timenow,\n                    type = 1\n                }\n                log.debug('soil_history: standard通道[%s]data=%s', channelStrCheck, json.encode(data1))\n                table.insert(out.data, data1)\n            end\n        end\n  \n    local resultData = json.encode(out)\n    log.debug('soil_history resultData=%s,hex=%s', json.encode(out), hex)\n\t\tout.result = {code=errcode,msg=errormsg}\n\tend\n  \treturn out\nend\n\nIsValid = function(alldata)\n    log.debug('soil_history 校验开始')\n    if string.len(alldata) < 10 then\n        errormsg = 'allData is invalid'\n        errcode = 1001\n        return false\n    end\n\n    if string.sub(alldata, 1, 4) ~= '442c' then\n        errormsg = 'allData header is invalid'\n        errcode = 1001\n        return false\n    end\n\n    log.debug('soil_history 校验通过')\n    return true\nend\n\n\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\nIsNumberic = function(s)\n    local n = tonumber(s)\n    if n then\n        return true\n    end\n    return false\nend\n\nunixtimestamp = function(datestr)\n    -- 2018/4/28 16:10:12\n    log.debug('soil_history datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '/')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    --log.debug("soil_history year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soil_history timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soil_history recordTime=%s",recordTime)\n    return recordTime\nend\n\n\n\n\n\n\n\n\n\n\n--字符串ascii->字符\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n--字符串ascii->字符\nStrtoHex=function(hex)\n\t--判断输入类型\n\tif (type(hex)~="string") then\n\t\treturn nil,"hex2str invalid input type"\n\tend\n\t--拼接字符串\n\tlocal index=1\n\tlocal ret=""\n\tfor index=1,hex:len() do\n    \tlocal str = string.format("%02X",hex:sub(index):byte())\n    \tif str == '0A' or str =='0a' then\n      \t\tstr = '0d0a'      \t\t\n      \tend\t\n    \tif index == hex:len() then\n      \t\tstr = str..'0d0a'\n      \tend\n    \tret=ret..str\n\tend\n\treturn ret\nend	INLINE	2019-02-22 15:22:56.817+08	2019-12-05 17:13:41.859+08	2019-02-22	\N
f1a05ee2-3ba7-4b39-bdcb-b48d605eeb39	anXin_liquid_1932	\N	安信液压  请求应答	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 8, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==34) then\n        local pressure = iota.hexToInt(hex,9,'B')/1000.0;\n        local temp = iota.hexToShort(hex,13,'B')/100.0;      \n        out.data = {\n            pressure=pressure,           \n            temperature\t=temp\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-04 14:22:46.875+08	2019-12-24 11:26:51.494+08	2017-09-04	\N
b7f5077d-347e-478e-b86a-78a1b8929d25	anxin_inclinometer	\N	安信 测斜     主动上报	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_inclinometer.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_inclinometer [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t   local xData = iota.hexToShort(hex,24,'B')/1000.0;\n        local yData = iota.hexToShort(hex,26,'B')/1000.0;\n        local zData = iota.hexToShort(hex,28,'B')/1000.0;\n        local temp = iota.hexToShort(hex,30,'B')/100.0; \n       \n\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_inclinometer timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_inclinometer dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t      \n                out={\n\t\t\t\t    data={ \n\t\t\t\t          anglex=xData,\n                      angley=yData,\n                       anglez=zData,\n            temperature=temp\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t } \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_inclinometer [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_inclinometer:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_inclinometer [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_inclinometer module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_inclinometer [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_inclinometer [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-24 11:44:23.234+08	2019-12-24 13:27:25.985+08	2019-12-24	\N
f280eb1c-31e4-4c9e-94b7-1de7919c1855	zy_inclination_1503	\N		1.0	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	4fd9bf53-3722-4a0e-9145-178e3be83216	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 22, endian)             -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("zy_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("zy_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n        local scale = 1000000.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \tanglex = xa,\n           \tangley = ya\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('zy_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('zy_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-04-10 14:51:40.86+08	2020-04-10 14:51:40.86+08	2020-04-10	\N
0d0916bd-221d-433b-8e40-ea4728310292	fs_weather	\N	实际设备-山东仁科测控	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--D:\\SVN\\202004项目\\气象多要素百叶箱使用说明书.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "fs_weather.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n    buff=iota.appendHexByte(buff, 0xf4, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x08, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fs_weather,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n--010301f400080000\n--0103160292ff9b000300040005000600070008FFFF\n--temperature:-10.1\n--humility:65.8\n--\n--\n--\n--\n--\n--\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_weather m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local humidity =iota.hexToShort(hex,3,'B')/10\n    \tlocal temperature =iota.hexToShort(hex,5,'B')/10\n    \tlocal noise =iota.hexToShort(hex,7,'B')/10\n    \tlocal pm25 =iota.hexToShort(hex,9,'B')\n    \tlocal pm10 =iota.hexToShort(hex,11,'B')\n    \tlocal pressure =iota.hexToShort(hex,13,'B')/10\n    \tlocal intensity =iota.hexToInt(hex,15,'B')\n        out.data = {           \n            temperature=temperature,\n      \t\thumidity=humidity,\n      \t\tnoise=noise,\n      \t\tpm25=pm25,\n      \t\tpm10=pm10,\n      \t\tpressure=pressure,\n      \t\tintensity=intensity\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_weather m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 21 then\n        errormsg = string.format('无效的数据长度=%s≠21',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2020-04-08 10:03:03.792+08	2020-04-08 11:24:05.875+08	2020-04-08	\N
408b3be5-3a50-4c01-8432-9de0ecd0607a	T-780	\N	激光收敛计（激光位移传感器T-780）	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "T-780 ", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t--低字节在前    01 03 00 a3 00 02     34 29\n\t--低字节在前    01030400002710 E0 0F\n\t\tlocal moduleNo\n\t\tif json.encode(device.uplink.props) ~= 'null' then\n\t\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\tlog.debug("T-780 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\t\tmoduleNo=device.props.moduleId\t\t\n\t\t\tlog.debug("T-780  设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\t\tend\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0xa3, endian)\n  \t\tbuff=iota.appendHexByte(buff, 0x00, endian)  \t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n\t\t\n\t\tlog.debug('T-780 %s buff111111',buff)\n\t\t\n\t\t\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("T-780  SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01 03 04 00 00 27 10 E0 0F\n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n\t\t\t\n        local displacement = iota.hexToUInt(hex,3,'B')/10\n\t\tlog.debug('T-780  displacement=%s',displacement)\n\t\n\t\t\n\t\t\n       \n       \n        out.data = {\n\t\t\tdisplacement=displacement\n\t\t\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('T-780 %s 开始校验数据',data)\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n \n    log.debug('T-780 数据校验通过')\n    return true\n\nend\n\n\n\t\n   \n	INLINE	2019-09-29 16:17:26.118+08	2020-04-14 13:57:58.241+08	2019-09-29	\N
60b3c120-3fc4-4e3f-b5ec-85d4a53b72af	SCT726T30	\N	数字型双轴倾角计	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "SCT726T30",device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t    --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n        log.debug("SCT726T30 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, 0x68, endian) \n        buff=iota.appendHexByte(buff, 0x04, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n         buff=iota.appendHexByte(buff,CS(1,buff),endian)   \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("SCT726T30 SSend error!")\n        end\n        ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        local signx = tonumber(string.sub(hex,9,9))\n        \n        local anglex = tonumber(string.sub(hex,10,16))/10000\n        local signy = tonumber(string.sub(hex,17,17))\n        local angley = tonumber(string.sub(hex,18,24))/10000\n        if signx==1 then\n            anglex=anglex*-1\n        end\n        if signy==1 then\n            angley=angley*-1\n        end\n       \n        out.data = {\n            anglex=anglex,\n            angley=angley\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('SCT726T30 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('SCT726T30 数据校验通过')\n    return true\n--crc\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n\n\t\n   \n\n	INLINE	2019-09-29 11:20:13.485+08	2019-10-15 09:52:50.601+08	2019-09-29	\N
46f179ce-6108-4ecd-a414-a184cb2b5de4	fs_llj	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\n\nstart=function ()\n\tlog.debug("fs_llj:load script %s, moduleId=%s", "fs_llj", device.moduleId or "[nil]")   \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("fs_llj 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("fs_llj 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("fs_llj:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("fs_llj:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n  \tlog.debug("fs_llj:result=%s",result)\n\tctx:notify(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tlocal module = tonumber(moduleNo_str)\n\tbuff=iota.appendHexByte(buff, module);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x03);             -- 1: 2 设备类型，温湿度=1\t\t\n\tbuff=buff.."0003";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexWord(buff, 0x02, BE);  -- 2: 3/4 模块号\n\tbuff = iota.appendHexCrc(buff,'L',0)\n\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("fs_llj:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n    local hour = os.date("%H")\n    local min = os.date("%M")\n\tlocal acqnumber = tonumber(hour)\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal data1 = iota.hexToFloat(data, 3, 'B',6);\n\n\t\tout.data = {\n\t\trunoff = data1,\n      \t_acq_number = acqnumber\n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('fs_llj:开始校验数据%s',data)\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif  devicetype ~= 0x03  then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToByte(data,0,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToByte(data,0,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_llj:数据校验通过')\n    return true\n--crc\nend\n\nonData=function(msg)\nend\n\n	INLINE	2019-07-09 14:59:47.907+08	2019-07-17 19:24:23.018+08	2019-07-09	\N
ea8db328-6c73-45bd-ae5e-07dc714dab2c	jb_water_1103	\N		1.0	808e0822-39be-47f9-b409-837e6d913d53	808e0822-39be-47f9-b409-837e6d913d53	f	808e0822-39be-47f9-b409-837e6d913d53	Lua	start = function()\n    log.debug('load script %s, moduleId=%s', 'jb_water_1104', device.uplink.props.module or '[nil]')\n    local buff = ''\n    local result = '{}'\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n    log.debug('jb_water_1104 设备模块  m==%s ', moduleNo)\n\n\n        buff = iota.appendHexByte(buff, moduleNo, 'L')\n        buff = iota.appendHexByte(buff, 0x03, 'B')\n        buff = iota.appendHexWord(buff, 0x02, 'B')\n        buff = iota.appendHexWord(buff, 0x02, 'B')\n        buff = iota.appendHexCrc(buff, 'L', 0)\n\n        ok, resp = ctx:ssend(buff, 10000)\n        log.debug('jb_water_1104  发送 读取 数据读取指令=%s', buff)\n\n        log.debug('jb_water_1104  接收数据=%s', resp)\n        if ok then\n            result = unmarshall_temp(resp, moduleNo)\n        else\n            log.debug('jb_water_1104   数据采集失败')\n        end\n\tlog.debug('jb_water_1104  result %s', result)\n    ctx:done(result)\nend\n--01030400000064fbd8   1m\n--01030400000384faa0   9m\n\nunmarshall_temp = function(hex, moduleStr)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleStr)\n    if ErrorCode then\n        local length = iota.hexToShort(hex, 5, 'B') / 100\n        out.data = {\n            length = length\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, moduleNo_check)\n    log.debug('jb_water_1104 开始校验数据=%s', data)\n    if data == nil or string.len(data) / 2 ~=9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n\n    if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n        errcode = 1002\n        errormsg = '返回功能码不是0x03'\n        return false\n    end\n    local dataModule = tostring(iota.hexToByte(data, 0, 'B'))\n    if moduleNo_check ~= dataModule then\n        errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]', dataModule, moduleNo_check)\n        errcode = 1004\n        return false\n    end\n    log.debug('jb_water_1104 数据校验通过')\n    return true\n    --crc\nend\n	INLINE	2019-10-29 10:58:10.96+08	2020-03-23 11:09:35.062+08	2019-10-29	\N
4930470c-205d-414f-aa01-bf60c835c3c9	SCT716T	\N	梁式测斜仪	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\nfunction    bit:_not(a)  \n    local   op1=self:d2b(a)  \n    local   r={}  \n  \n    for i=1,32 do  \n        if  op1[i]==1   then  \n            r[i]=0  \n        else  \n            r[i]=1  \n        end  \n    end  \n    return  self:b2d(r)  \nend --bit:_not  \n\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "SCT726T30",device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t    --68 04 00 04 08 \n\t\n\t\tlocal moduleNo = device.uplink.props.module --模块 通道 优先接口获取\t\t\n        log.debug("SCT726T30 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, 0x68, endian) \n        buff=iota.appendHexByte(buff, 0x04, endian) \n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x04, endian)            \n         buff=iota.appendHexByte(buff,CS(1,buff),endian)   \n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("SCT726T30 SSend error!")\n        end\n        ctx:done(result)\nend\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n        local signx = tonumber(string.sub(hex,9,9))\n        \n        local anglex = tonumber(string.sub(hex,10,16))/10000\n        local signy = tonumber(string.sub(hex,17,17))\n        local angley = tonumber(string.sub(hex,18,24))/10000\n        if signx==1 then\n            anglex=anglex*-1\n        end\n        if signy==1 then\n            angley=angley*-1\n        end\n       \n        out.data = {\n            angle=anglex\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('SCT726T30 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 17 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,2,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('SCT726T30 数据校验通过')\n    return true\n--crc\nend\n\nCS=function(start,buff)\n    local lcr = 0\n    for i = start, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))%0xffff\n    end     \n    local value= bit:_and(lcr,0xff)   \n    return value\nend \n\n\n\t\n   \n\n	INLINE	2019-09-29 11:19:11.056+08	2019-10-15 11:37:50.895+08	2019-09-29	\N
c6b0bea6-fc62-4662-910e-2a3d247a1bcb	anXin_liquid	\N	安信 液压     主动上报	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anXin_liquid.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anXin_liquid [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t   local pressure = iota.hexToInt(hex,24,'B')/1000.0;\n        local temp = iota.hexToShort(hex,28,'B')/100.0;    \n       \n\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anXin_liquid timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anXin_liquid dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          pressure=pressure,           \n            temperature\t=temp\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anXin_liquid [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anXin_liquid:Data is nil'\n        errcode = 1001\n    \tlog.debug("anXin_liquid [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anXin_liquid module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anXin_liquid [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anXin_liquid [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-24 11:29:56.518+08	2019-12-24 11:30:30.869+08	2019-12-24	\N
e61f0ab0-2501-4b75-81d9-2efecc3e4bbb	fs_gprs_test	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    log.debug("fs_gprs : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fs_gprs devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fs_gprs recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        log.debug("fs_gprs 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("fs_gprs datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            log.debug("fs_gprs 解析dat r1= %s", r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                log.debug("fs_gprs 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                log.debug("fs_gprs 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            log.debug("fs_gprs 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fs_gprs  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fs_gprs 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\tlog.debug("fs_gprs 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToShort(data,22,'B')\n\t\t\tlog.debug("fs_gprs 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_gprs version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            log.debug("fs_gprs devices crc =%s",crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("fs_gprs crc %s r1 %s setting%s" ,crc,r1,setting)\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fs_gprs 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_gprs 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fs_gprs  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_gprs 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fs_gprs 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_gprs 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fs_gprs 设备休眠")\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_gprs powerstr=%s",powerstr)\n      \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\tlog.debug("fs_gprs r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fs_gprs 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n              \t\t\t\trst.data.temperature = nil              \n              \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fs_gprs 振弦 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\tlog.debug("fs_gprs acqnum %s",  acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\tlog.debug("fs_gprs 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n         \t\t\t if protocalCode==9101 then     --拉线位移\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 位移 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n\t\t\t\t\t\tlog.debug("fs_gprs yc ")\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fs_gprs 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n                  \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_gprs 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\tlog.debug("fs_microPower_1 dataresult %s", json.encode(out))\n            end \n            log.debug("fs_microPower_1 out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            log.debug("fs_microPower_1: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("fs_microPower_1 : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_1 subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("fs_microPower_1 : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("fs_microPower_1 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_1  baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fs_microPower_1  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\tlog.debug("fs_microPower_1  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("fs_microPower_1  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fs_microPower_1 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then          \tlog.debug("fs_microPower_1 subdevice=%s",subdevice)      \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("fs_microPower_1  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("fs_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("fs_microPower_1 begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        log.debug("fs_microPower_1 finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\tlog.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fs_microPower_1 cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("fs_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    log.debug("fs_microPower_1 len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("fs_microPower_1 te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    log.debug("fs_microPower_1 sum %s", sum)\n   return 0xffff-sum\nend\n\n	INLINE	2019-12-12 16:59:11.949+08	2020-04-02 17:08:47.346+08	2019-12-12	\N
f2ec840a-2e0c-4178-91e8-8b5b44009561	fs_idau_cloudvibrate	\N	提取云振动i文件解析	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    log.debug("fs_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    log.debug("fs_idau_cloudvibrate  [%s] recvd =%s",data.name ,json.encode(data))\n   \t--log.debug("fs_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".dat" then\n               --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n               ParseFileDat(data.payload)\n            else\n                log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              log.error("fs_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("fs_idau_cloudvibrate : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("fs_idau_cloudvibrate : dat content  =%s,len =%s", dathex,string.len(dathex)/2)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("fs_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\t\tlocal valuek = tonumber(subdevice.props.k) or 1\n\t\tif valuek == 0 then\n\t\t\tvaluek = 1\n\t\tend\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("fs_idau_cloudvibrate begin parse count=%s",floatcount)\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4       \n      \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1)\n      \t\tlocal value = iota.hexToFloat(data,0,'L',6) / (valuek)\t\t\t\n\t\t\tvols[i] = tonumber(string.format("%.6f",value))\n            --vols[i]= iota.hexToFloat(data,0,'L',6) / (valuek)\n        end\n        --log.debug("fs_idau_cloudvibrate finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        --log.debug("fs_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("fs_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("fs_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fs_idau_cloudvibrate has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n	INLINE	2018-03-29 15:22:03.254+08	2020-08-11 10:18:32.422+08	2018-03-29	\N
19b75009-14b8-45df-8924-0cc8d5a5ea89	ludeng	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--AES128\n--require('bit')-----------------------------------------------------------------------------\nlocal bit = {data32 = {}}\nfor i = 1, 32 do\n    bit.data32[i] = 2 ^ (32 - i)\nend\n\nfunction bit:d2b(arg)\n    local tr = {}\n    for i = 1, 32 do\n        if arg >= self.data32[i] then\n            tr[i] = 1\n            arg = arg - self.data32[i]\n        else\n            tr[i] = 0\n        end\n    end\n    return tr\nend --bit:d2b\n\nfunction bit:b2d(arg)\n    local nr = 0\n    for i = 1, 32 do\n        if arg[i] == 1 then\n            nr = nr + 2 ^ (32 - i)\n        end\n    end\n    return nr\nend --bit:b2d\n\nfunction bit:_or(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n\n    for i = 1, 32 do\n        if op1[i] == 1 or op2[i] == 1 then\n            r[i] = 1\n        else\n            r[i] = 0\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction bit:_xor(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n    for i = 1, 32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction bit:_and(a, b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r = {}\n\n    for i = 1, 32 do\n        if op1[i] == 1 and op2[i] == 1 then\n            r[i] = 1\n        else\n            r[i] = 0\n        end\n    end\n    return self:b2d(r)\nend --bit:_and\n\nfunction bit:_rshift(a, n)\n    local op1 = self:d2b(a)\n    local r = self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i = 1, n do\n            for i = 31, 1, -1 do\n                op1[i + 1] = op1[i]\n            end\n            op1[1] = 0\n        end\n        r = op1\n    end\n    return self:b2d(r)\nend --bit:_rshift\n\nfunction bit:_lshift(a, n)\n    local op1 = self:d2b(a)\n    local r = self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i = 1, n do\n            for i = 1, 31 do\n                op1[i] = op1[i + 1]\n            end\n            op1[32] = 0\n        end\n        r = op1\n    end\n    return self:b2d(r)\nend --bit:_lshift\n\nfunction bit:_not(a)\n    local op1 = self:d2b(a)\n    local r = {}\n\n    for i = 1, 32 do\n        if op1[i] == 1 then\n            r[i] = 0\n        else\n            r[i] = 1\n        end\n    end\n    return self:b2d(r)\nend --bit:_not\n\n--local util = require('aeslua.util')--------------------------------------------------------------------------------------------\n\nlocal util = {}\nfunction util.byteParity(byte)\n    byte = bit:_xor(byte, bit:_rshift(byte, 4))\n    byte = bit:_xor(byte, bit:_rshift(byte, 2))\n    byte = bit:_xor(byte, bit:_rshift(byte, 1))\n    return bit:_and(byte, 1)\nend\n\n--\n-- get byte at position index\n--\nfunction util.getByte(number, index)\n    if (index == 0) then\n        return bit:_and(number, 0xff)\n    else\n        return bit:_and(bit:_rshift(number, index * 8), 0xff)\n    end\nend\n\n--\n-- put number into int at position index\n--\nfunction util.putByte(number, index)\n    if (index == 0) then\n        return bit:_and(number, 0xff)\n    else\n        return bit:_lshift(bit:_and(number, 0xff), index * 8)\n    end\nend\n\n--\n-- convert byte array to int array\n--\nfunction util.bytesToInts(bytes, start, n)\n    local ints = {}\n    for i = 0, n - 1 do\n        ints[i] =\n            util.putByte(bytes[start + (i * 4)], 3) + util.putByte(bytes[start + (i * 4) + 1], 2) +\n            util.putByte(bytes[start + (i * 4) + 2], 1) +\n            util.putByte(bytes[start + (i * 4) + 3], 0)\n    end\n    return ints\nend\n\n--\n-- convert int array to byte array\n--\nfunction util.intsToBytes(ints, output, outputOffset, n)\n    n = n or #ints\n    for i = 0, n do\n        for j = 0, 3 do\n            output[outputOffset + i * 4 + (3 - j)] = util.getByte(ints[i], j)\n        end\n    end\n    return output\nend\n\n--\n-- convert bytes to hexString\n--\nfunction util.bytesToHex(bytes)\n    local hexBytes = ''\n\n    for i, byte in ipairs(bytes) do\n        hexBytes = hexBytes .. string.format('%02x ', byte)\n    end\n\n    return hexBytes\nend\n\n--\n-- convert data to hex string\n--\nfunction util.toHexString(data)\n    local type = type(data)\n    if (type == 'number') then\n        return string.format('%08x', data)\n    elseif (type == 'table') then\n        return util.bytesToHex(data)\n    elseif (type == 'string') then\n        local bytes = {string.byte(data, 1, #data)}\n\n        return util.bytesToHex(bytes)\n    else\n        return data\n    end\nend\n\nfunction util.padByteString(data, pkcs)\n    --以8个字节为一组，如果数据不足8位，则以8位做对齐\n    --缺少6个字节，则需要补充6个字节的06，达到8位长度\n    --补充对齐后 FF FF 06 06 06 06 06 06\n    local paddingLength = math.ceil(#data / 16) * 16 - #data\n    local padding = ''\n    --以8个字节为一组，如果数据不足8位，则以8位做对齐，末尾填充缺少的字节数量\n    --\n    if (pkcs == 'PKCS5') then\n        for i = 1, paddingLength do\n            padding = padding .. string.char(paddingLength)\n        end\n    end\n\n    return data .. padding\nend\n\nfunction util.properlyDecrypted(data)\n    local random = {string.byte(data, 1, 4)}\n\n    if (random[1] == random[3] and random[2] == random[4]) then\n        return true\n    end\n\n    return false\nend\n\nfunction util.unpadByteString(data)\n    if (not util.properlyDecrypted(data)) then\n    --return nil\n    end\n\n    local len = string.len(data)\n\n    --计算原来数据长度\n    local dataLength =\n        util.putByte(string.byte(data, -1), 3) + util.putByte(string.byte(data, -6), 2) +\n        util.putByte(string.byte(data, -7), 1) +\n        util.putByte(string.byte(data, -8), 0)\n\n    return string.sub(data, 1, 8 + dataLength) --截去数据\nend\n\nfunction util.xorIV(data, iv)\n    for i = 1, 16 do\n        data[i] = bit:_xor(data[i], iv[i])\n    end\nend\n\n-------------------------------------------------------------------------------------------------------------aeslua--1\n---require('aeslua')\nlocal aeslua = {}\n--local ciphermode = require('aeslua.ciphermode')-------------------------------------------------------------------------------------------------------\nlocal ciphermode = {}\n\n--\nlocal aes = {}\n--require('aeslua.aes')\n-------------------------------------------------------------------------------------------------------------------\n--????\n\n--local gf = require("aeslua.gf");------------------------------------------------------------------------------------------\nlocal gf = {}\ngf.n = 0x100\ngf.ord = 0xff\ngf.irrPolynom = 0x11b\ngf.exp = {}\ngf.log = {}\n\n--\n-- add two polynoms (its simply xor)\n--\nfunction gf.add(operand1, operand2)\n    return bit:_xor(operand1, operand2)\nend\n\n--\n-- subtract two polynoms (same as addition)\n--\nfunction gf.sub(operand1, operand2)\n    return bit:_xor(operand1, operand2)\nend\n\n--\n-- inverts element\n-- a^(-1) = g^(order - log(a))\n--\nfunction gf.invert(operand)\n    -- special case for 1\n    if (operand == 1) then\n        return 1\n    end\n    -- normal invert\n    local exponent = gf.ord - gf.log[operand]\n    return gf.exp[exponent]\nend\n\n--\n-- multiply two elements using a logarithm table\n-- a*b = g^(log(a)+log(b))\n--\nfunction gf.mul(operand1, operand2)\n    if (operand1 == 0 or operand2 == 0) then\n        return 0\n    end\n\n    local exponent = gf.log[operand1] + gf.log[operand2]\n    if (exponent >= gf.ord) then\n        exponent = exponent - gf.ord\n    end\n    return gf.exp[exponent]\nend\n\n--\n-- divide two elements\n-- a/b = g^(log(a)-log(b))\n--\nfunction gf.div(operand1, operand2)\n    if (operand1 == 0) then\n        return 0\n    end\n    -- TODO: exception if operand2 == 0\n    local exponent = gf.log[operand1] - gf.log[operand2]\n    if (exponent < 0) then\n        exponent = exponent + gf.ord\n    end\n    return gf.exp[exponent]\nend\n\n--\n-- print logarithmic table\n--\nfunction gf.printLog()\n    for i = 1, gf.n do\n        print('log(', i - 1, ')=', gf.log[i - 1])\n    end\nend\n\n--\n-- print exponentiation table\n--\nfunction gf.printExp()\n    for i = 1, gf.n do\n        print('exp(', i - 1, ')=', gf.exp[i - 1])\n    end\nend\n\n--\n-- calculate logarithmic and exponentiation table\n--\nfunction gf.initMulTable()\n    local a = 1\n\n    for i = 0, gf.ord - 1 do\n        gf.exp[i] = a\n        gf.log[a] = i\n\n        -- multiply with generator x+1 -> left shift + 1\n        a = bit:_xor(bit:_lshift(a, 1), a)\n\n        -- if a gets larger than order, reduce modulo irreducible polynom\n        if a > gf.ord then\n            a = gf.sub(a, gf.irrPolynom)\n        end\n    end\nend\n\ngf.initMulTable()\n\n--local util = require('aeslua.util')----------------------------------------------------------------------------\n\n--\n-- Implementation of AES with nearly pure lua (only bitlib is needed)\n--\n-- AES with lua is slow, really slow :-)\n--\n\n--local public = {}\n--local private = {}\n\n--aeslua.aes = public\n\n-- some constants\naes.ROUNDS = 'rounds'\naes.KEY_TYPE = 'type'\naes.ENCRYPTION_KEY = 1\naes.DECRYPTION_KEY = 2\n\n-- aes SBOX\naes.SBox = {}\naes.iSBox = {}\n\n-- aes tables\naes.table0 = {}\naes.table1 = {}\naes.table2 = {}\naes.table3 = {}\n\naes.tableInv0 = {}\naes.tableInv1 = {}\naes.tableInv2 = {}\naes.tableInv3 = {}\n\n-- round constants\naes.rCon = {\n    0x01000000,\n    0x02000000,\n    0x04000000,\n    0x08000000,\n    0x10000000,\n    0x20000000,\n    0x40000000,\n    0x80000000,\n    0x1b000000,\n    0x36000000,\n    0x6c000000,\n    0xd8000000,\n    0xab000000,\n    0x4d000000,\n    0x9a000000,\n    0x2f000000\n}\n\n--\n-- affine transformation for calculating the S-Box of AES\n--\nfunction aes.affinMap(byte)\n    mask = 0xf8\n    result = 0\n    for i = 1, 8 do\n        result = bit:_lshift(result, 1)\n\n        parity = util.byteParity(bit:_and(byte, mask))\n        result = result + parity\n\n        -- simulate roll\n        lastbit = bit:_and(mask, 1)\n        mask = bit:_and(bit:_rshift(mask, 1), 0xff)\n        if (lastbit ~= 0) then\n            mask = bit:_or(mask, 0x80)\n        else\n            mask = bit:_and(mask, 0x7f)\n        end\n    end\n\n    return bit:_xor(result, 0x63)\nend\n\n--\n-- calculate S-Box and inverse S-Box of AES\n-- apply affine transformation to inverse in finite field 2^8\n--\nfunction aes.calcSBox()\n    for i = 0, 255 do\n        if (i ~= 0) then\n            inverse = gf.invert(i)\n        else\n            inverse = i\n        end\n        mapped = aes.affinMap(inverse)\n        aes.SBox[i] = mapped\n        aes.iSBox[mapped] = i\n    end\nend\n\n--\n-- Calculate round tables\n-- round tables are used to calculate shiftRow, MixColumn and SubBytes\n-- with 4 table lookups and 4 xor operations.\n--\nfunction aes.calcRoundTables()\n    for x = 0, 255 do\n        byte = aes.SBox[x]\n        aes.table0[x] =\n            util.putByte(gf.mul(0x03, byte), 0) + util.putByte(byte, 1) + util.putByte(byte, 2) +\n            util.putByte(gf.mul(0x02, byte), 3)\n        aes.table1[x] =\n            util.putByte(byte, 0) + util.putByte(byte, 1) + util.putByte(gf.mul(0x02, byte), 2) +\n            util.putByte(gf.mul(0x03, byte), 3)\n        aes.table2[x] =\n            util.putByte(byte, 0) + util.putByte(gf.mul(0x02, byte), 1) + util.putByte(gf.mul(0x03, byte), 2) +\n            util.putByte(byte, 3)\n        aes.table3[x] =\n            util.putByte(gf.mul(0x02, byte), 0) + util.putByte(gf.mul(0x03, byte), 1) + util.putByte(byte, 2) +\n            util.putByte(byte, 3)\n    end\nend\n\n--\n-- Calculate inverse round tables\n-- does the inverse of the normal roundtables for the equivalent\n-- decryption algorithm.\n--\nfunction aes.calcInvRoundTables()\n    for x = 0, 255 do\n        byte = aes.iSBox[x]\n        aes.tableInv0[x] =\n            util.putByte(gf.mul(0x0b, byte), 0) + util.putByte(gf.mul(0x0d, byte), 1) +\n            util.putByte(gf.mul(0x09, byte), 2) +\n            util.putByte(gf.mul(0x0e, byte), 3)\n        aes.tableInv1[x] =\n            util.putByte(gf.mul(0x0d, byte), 0) + util.putByte(gf.mul(0x09, byte), 1) +\n            util.putByte(gf.mul(0x0e, byte), 2) +\n            util.putByte(gf.mul(0x0b, byte), 3)\n        aes.tableInv2[x] =\n            util.putByte(gf.mul(0x09, byte), 0) + util.putByte(gf.mul(0x0e, byte), 1) +\n            util.putByte(gf.mul(0x0b, byte), 2) +\n            util.putByte(gf.mul(0x0d, byte), 3)\n        aes.tableInv3[x] =\n            util.putByte(gf.mul(0x0e, byte), 0) + util.putByte(gf.mul(0x0b, byte), 1) +\n            util.putByte(gf.mul(0x0d, byte), 2) +\n            util.putByte(gf.mul(0x09, byte), 3)\n    end\nend\n\n--\n-- rotate word: 0xaabbccdd gets 0xbbccddaa\n-- used for key schedule\n--\nfunction aes.rotWord(word)\n    local tmp = bit:_and(word, 0xff000000)\n    return (bit:_lshift(word, 8) + bit:_rshift(tmp, 24))\nend\n\n--\n-- replace all bytes in a word with the SBox.\n-- used for key schedule\n--\nfunction aes.subWord(word)\n    return util.putByte(aes.SBox[util.getByte(word, 0)], 0) + util.putByte(aes.SBox[util.getByte(word, 1)], 1) +\n        util.putByte(aes.SBox[util.getByte(word, 2)], 2) +\n        util.putByte(aes.SBox[util.getByte(word, 3)], 3)\nend\n\n--\n-- generate key schedule for aes encryption\n--\n-- returns table with all round keys and\n-- the necessary number of rounds saved in [aes.ROUNDS]\n--\nfunction aes.expandEncryptionKey(key)\n    local keySchedule = {}\n    local keyWords = math.floor(#key / 4)\n\n    if ((keyWords ~= 4 and keyWords ~= 6 and keyWords ~= 8) or (keyWords * 4 ~= #key)) then\n        print('Invalid key size: ', keyWords)\n        return nil\n    end\n\n    keySchedule[aes.ROUNDS] = keyWords + 6\n    keySchedule[aes.KEY_TYPE] = aes.ENCRYPTION_KEY\n\n    for i = 0, keyWords - 1 do\n        keySchedule[i] =\n            util.putByte(key[i * 4 + 1], 3) + util.putByte(key[i * 4 + 2], 2) + util.putByte(key[i * 4 + 3], 1) +\n            util.putByte(key[i * 4 + 4], 0)\n    end\n\n    for i = keyWords, (keySchedule[aes.ROUNDS] + 1) * 4 - 1 do\n        local tmp = keySchedule[i - 1]\n\n        if (i % keyWords == 0) then\n            tmp = aes.rotWord(tmp)\n            tmp = aes.subWord(tmp)\n\n            local index = math.floor(i / keyWords)\n            tmp = bit:_xor(tmp, aes.rCon[index])\n        elseif (keyWords > 6 and i % keyWords == 4) then\n            tmp = aes.subWord(tmp)\n        end\n\n        keySchedule[i] = bit:_xor(keySchedule[(i - keyWords)], tmp)\n    end\n\n    return keySchedule\nend\n\n--\n-- Inverse mix column\n-- used for key schedule of decryption key\n--\nfunction aes.invMixColumnOld(word)\n    local b0 = util.getByte(word, 3)\n    local b1 = util.getByte(word, 2)\n    local b2 = util.getByte(word, 1)\n    local b3 = util.getByte(word, 0)\n\n    return util.putByte(\n        gf.add(gf.add(gf.add(gf.mul(0x0b, b1), gf.mul(0x0d, b2)), gf.mul(0x09, b3)), gf.mul(0x0e, b0)),\n        3\n    ) +\n        util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b2), gf.mul(0x0d, b3)), gf.mul(0x09, b0)), gf.mul(0x0e, b1)), 2) +\n        util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b3), gf.mul(0x0d, b0)), gf.mul(0x09, b1)), gf.mul(0x0e, b2)), 1) +\n        util.putByte(gf.add(gf.add(gf.add(gf.mul(0x0b, b0), gf.mul(0x0d, b1)), gf.mul(0x09, b2)), gf.mul(0x0e, b3)), 0)\nend\n\n--\n-- Optimized inverse mix column\n-- look at http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf\n-- TODO: make it work\n--\nfunction aes.invMixColumn(word)\n    local b0 = util.getByte(word, 3)\n    local b1 = util.getByte(word, 2)\n    local b2 = util.getByte(word, 1)\n    local b3 = util.getByte(word, 0)\n\n    local t = bit:_xor(b3, b2)\n    local u = bit:_xor(b1, b0)\n    local v = bit:_xor(t, u)\n    v = bit:_xor(v, gf.mul(0x08, v))\n    w = bit:_xor(v, gf.mul(0x04, bit:_xor(b2, b0)))\n    v = bit:_xor(v, gf.mul(0x04, bit:_xor(b3, b1)))\n\n    return util.putByte(bit:_xor(bit:_xor(b3, v), gf.mul(0x02, bit:_xor(b0, b3))), 0) +\n        util.putByte(bit:_xor(bit:_xor(b2, w), gf.mul(0x02, t)), 1) +\n        util.putByte(bit:_xor(bit:_xor(b1, v), gf.mul(0x02, bit:_xor(b0, b3))), 2) +\n        util.putByte(bit:_xor(bit:_xor(b0, w), gf.mul(0x02, u)), 3)\nend\n\n--\n-- generate key schedule for aes decryption\n--\n-- uses key schedule for aes encryption and transforms each\n-- key by inverse mix column.\n--\nfunction aes.expandDecryptionKey(key)\n    local keySchedule = aes.expandEncryptionKey(key)\n    if (keySchedule == nil) then\n        return nil\n    end\n\n    keySchedule[aes.KEY_TYPE] = aes.DECRYPTION_KEY\n\n    for i = 4, (keySchedule[aes.ROUNDS] + 1) * 4 - 5 do\n        keySchedule[i] = aes.invMixColumnOld(keySchedule[i])\n    end\n\n    return keySchedule\nend\n\n--\n-- xor round key to state\n--\nfunction aes.addRoundKey(state, key, round)\n    for i = 0, 3 do\n        state[i] = bit:_xor(state[i], key[round * 4 + i])\n    end\nend\n\n--\n-- do encryption round (ShiftRow, SubBytes, MixColumn together)\n--\nfunction aes.doRound(origState, dstState)\n    dstState[0] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.table0[util.getByte(origState[0], 3)], aes.table1[util.getByte(origState[1], 2)]),\n            aes.table2[util.getByte(origState[2], 1)]\n        ),\n        aes.table3[util.getByte(origState[3], 0)]\n    )\n\n    dstState[1] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.table0[util.getByte(origState[1], 3)], aes.table1[util.getByte(origState[2], 2)]),\n            aes.table2[util.getByte(origState[3], 1)]\n        ),\n        aes.table3[util.getByte(origState[0], 0)]\n    )\n\n    dstState[2] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.table0[util.getByte(origState[2], 3)], aes.table1[util.getByte(origState[3], 2)]),\n            aes.table2[util.getByte(origState[0], 1)]\n        ),\n        aes.table3[util.getByte(origState[1], 0)]\n    )\n\n    dstState[3] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.table0[util.getByte(origState[3], 3)], aes.table1[util.getByte(origState[0], 2)]),\n            aes.table2[util.getByte(origState[1], 1)]\n        ),\n        aes.table3[util.getByte(origState[2], 0)]\n    )\nend\n\n--\n-- do last encryption round (ShiftRow and SubBytes)\n--\nfunction aes.doLastRound(origState, dstState)\n    dstState[0] =\n        util.putByte(aes.SBox[util.getByte(origState[0], 3)], 3) +\n        util.putByte(aes.SBox[util.getByte(origState[1], 2)], 2) +\n        util.putByte(aes.SBox[util.getByte(origState[2], 1)], 1) +\n        util.putByte(aes.SBox[util.getByte(origState[3], 0)], 0)\n\n    dstState[1] =\n        util.putByte(aes.SBox[util.getByte(origState[1], 3)], 3) +\n        util.putByte(aes.SBox[util.getByte(origState[2], 2)], 2) +\n        util.putByte(aes.SBox[util.getByte(origState[3], 1)], 1) +\n        util.putByte(aes.SBox[util.getByte(origState[0], 0)], 0)\n\n    dstState[2] =\n        util.putByte(aes.SBox[util.getByte(origState[2], 3)], 3) +\n        util.putByte(aes.SBox[util.getByte(origState[3], 2)], 2) +\n        util.putByte(aes.SBox[util.getByte(origState[0], 1)], 1) +\n        util.putByte(aes.SBox[util.getByte(origState[1], 0)], 0)\n\n    dstState[3] =\n        util.putByte(aes.SBox[util.getByte(origState[3], 3)], 3) +\n        util.putByte(aes.SBox[util.getByte(origState[0], 2)], 2) +\n        util.putByte(aes.SBox[util.getByte(origState[1], 1)], 1) +\n        util.putByte(aes.SBox[util.getByte(origState[2], 0)], 0)\nend\n\n--\n-- do decryption round\n--\nfunction aes.doInvRound(origState, dstState)\n    dstState[0] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.tableInv0[util.getByte(origState[0], 3)], aes.tableInv1[util.getByte(origState[3], 2)]),\n            aes.tableInv2[util.getByte(origState[2], 1)]\n        ),\n        aes.tableInv3[util.getByte(origState[1], 0)]\n    )\n\n    dstState[1] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.tableInv0[util.getByte(origState[1], 3)], aes.tableInv1[util.getByte(origState[0], 2)]),\n            aes.tableInv2[util.getByte(origState[3], 1)]\n        ),\n        aes.tableInv3[util.getByte(origState[2], 0)]\n    )\n\n    dstState[2] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.tableInv0[util.getByte(origState[2], 3)], aes.tableInv1[util.getByte(origState[1], 2)]),\n            aes.tableInv2[util.getByte(origState[0], 1)]\n        ),\n        aes.tableInv3[util.getByte(origState[3], 0)]\n    )\n\n    dstState[3] =\n        bit:_xor(\n        bit:_xor(\n            bit:_xor(aes.tableInv0[util.getByte(origState[3], 3)], aes.tableInv1[util.getByte(origState[2], 2)]),\n            aes.tableInv2[util.getByte(origState[1], 1)]\n        ),\n        aes.tableInv3[util.getByte(origState[0], 0)]\n    )\nend\n\n--\n-- do last decryption round\n--\nfunction aes.doInvLastRound(origState, dstState)\n    dstState[0] =\n        util.putByte(aes.iSBox[util.getByte(origState[0], 3)], 3) +\n        util.putByte(aes.iSBox[util.getByte(origState[3], 2)], 2) +\n        util.putByte(aes.iSBox[util.getByte(origState[2], 1)], 1) +\n        util.putByte(aes.iSBox[util.getByte(origState[1], 0)], 0)\n\n    dstState[1] =\n        util.putByte(aes.iSBox[util.getByte(origState[1], 3)], 3) +\n        util.putByte(aes.iSBox[util.getByte(origState[0], 2)], 2) +\n        util.putByte(aes.iSBox[util.getByte(origState[3], 1)], 1) +\n        util.putByte(aes.iSBox[util.getByte(origState[2], 0)], 0)\n\n    dstState[2] =\n        util.putByte(aes.iSBox[util.getByte(origState[2], 3)], 3) +\n        util.putByte(aes.iSBox[util.getByte(origState[1], 2)], 2) +\n        util.putByte(aes.iSBox[util.getByte(origState[0], 1)], 1) +\n        util.putByte(aes.iSBox[util.getByte(origState[3], 0)], 0)\n\n    dstState[3] =\n        util.putByte(aes.iSBox[util.getByte(origState[3], 3)], 3) +\n        util.putByte(aes.iSBox[util.getByte(origState[2], 2)], 2) +\n        util.putByte(aes.iSBox[util.getByte(origState[1], 1)], 1) +\n        util.putByte(aes.iSBox[util.getByte(origState[0], 0)], 0)\nend\n\n--\n-- encrypts 16 Bytes\n-- key           encryption key schedule\n-- input         array with input data\n-- inputOffset   start index for input\n-- output        array for encrypted data\n-- outputOffset  start index for output\n--\nfunction aes.encrypt(key, input, inputOffset, output, outputOffset)\n    --default parameters\n    inputOffset = inputOffset or 1\n    output = output or {}\n    outputOffset = outputOffset or 1\n\n    local state = {}\n    local tmpState = {}\n\n    if (key[aes.KEY_TYPE] ~= aes.ENCRYPTION_KEY) then\n        print('No encryption key: ', key[aes.KEY_TYPE])\n        return\n    end\n\n    state = util.bytesToInts(input, inputOffset, 4)\n    aes.addRoundKey(state, key, 0)\n\n    local round = 1\n    while (round < key[aes.ROUNDS] - 1) do\n        -- do a double round to save temporary assignments\n        aes.doRound(state, tmpState)\n        aes.addRoundKey(tmpState, key, round)\n        round = round + 1\n\n        aes.doRound(tmpState, state)\n        aes.addRoundKey(state, key, round)\n        round = round + 1\n    end\n\n    aes.doRound(state, tmpState)\n    aes.addRoundKey(tmpState, key, round)\n    round = round + 1\n\n    aes.doLastRound(tmpState, state)\n    aes.addRoundKey(state, key, round)\n\n    return util.intsToBytes(state, output, outputOffset)\nend\n\n--\n-- decrypt 16 bytes\n-- key           decryption key schedule\n-- input         array with input data\n-- inputOffset   start index for input\n-- output        array for decrypted data\n-- outputOffset  start index for output\n---\nfunction aes.decrypt(key, input, inputOffset, output, outputOffset)\n    -- default arguments\n    inputOffset = inputOffset or 1\n    output = output or {}\n    outputOffset = outputOffset or 1\n\n    local state = {}\n    local tmpState = {}\n\n    if (key[aes.KEY_TYPE] ~= aes.DECRYPTION_KEY) then\n        print('No decryption key: ', key[aes.KEY_TYPE])\n        return\n    end\n\n    state = util.bytesToInts(input, inputOffset, 4)\n    aes.addRoundKey(state, key, key[aes.ROUNDS])\n\n    local round = key[aes.ROUNDS] - 1\n    while (round > 2) do\n        -- do a double round to save temporary assignments\n        aes.doInvRound(state, tmpState)\n        aes.addRoundKey(tmpState, key, round)\n        round = round - 1\n\n        aes.doInvRound(tmpState, state)\n        aes.addRoundKey(state, key, round)\n        round = round - 1\n    end\n\n    aes.doInvRound(state, tmpState)\n    aes.addRoundKey(tmpState, key, round)\n    round = round - 1\n\n    aes.doInvLastRound(tmpState, state)\n    aes.addRoundKey(state, key, round)\n\n    return util.intsToBytes(state, output, outputOffset)\nend\n\n-- calculate all tables when loading this file\naes.calcSBox()\naes.calcRoundTables()\naes.calcInvRoundTables()\n\n--local buffer = require('aeslua.buffer')------------------------------------------------------------------------\n\nlocal buffer = {}\n\nfunction buffer.new()\n    return {}\nend\n\nfunction buffer.addString(stack, s)\n    table.insert(stack, s)\n    for i = #stack - 1, 1, -1 do\n        if #stack[i] > #stack[i + 1] then\n            break\n        end\n        stack[i] = stack[i] .. table.remove(stack)\n    end\nend\n\nfunction buffer.toString(stack)\n    for i = #stack - 1, 1, -1 do\n        stack[i] = stack[i] .. table.remove(stack)\n    end\n    return stack[1]\nend\n\n--local public = {}\n\n--aeslua.ciphermode = public\n\n--\n-- Encrypt strings\n-- key - byte array with key\n-- string - string to encrypt\n-- modefunction - function for cipher mode to use\n--\nfunction ciphermode.encryptString(key, data, modeFunction)\n    local iv = {string.byte('zq7AZEXlnz65IEaW', 1, 16)}\n    --iv or {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66} --{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}--\n    local keySched = aes.expandEncryptionKey(key)\n    local encryptedData = buffer.new()\n\n    for i = 1, #data / 16 do\n        local offset = (i - 1) * 16 + 1\n        local byteData = {string.byte(data, offset, offset + 15)}\n        modeFunction(keySched, byteData, iv)\n\n        buffer.addString(encryptedData, myunpackStr(byteData))\n        --string.char(unpack(byteData))\n    end\n\n    return buffer.toString(encryptedData)\nend\n\nfunction myunpackStr(tableHex)\n    local AsciiStr = ''\n    for i = 1, #tableHex, 1 do\n        -- print("i="..i.."  v="..tableHex[i])\n        AsciiStr = AsciiStr .. string.char(tableHex[i])\n    end\n    return AsciiStr\nend\n\n--\n-- the following 4 functions can be used as\n-- modefunction for encryptString\n--\n\n-- Electronic code book mode encrypt function\nfunction ciphermode.encryptECB(keySched, byteData, iv)\n    aes.encrypt(keySched, byteData, 1, byteData, 1)\nend\n\n-- Cipher block chaining mode encrypt function\nfunction ciphermode.encryptCBC(keySched, byteData, iv)\n    util.xorIV(byteData, iv)\n\n    aes.encrypt(keySched, byteData, 1, byteData, 1)\n\n    for j = 1, 16 do\n        iv[j] = byteData[j]\n    end\nend\n\n-- Output feedback mode encrypt function\nfunction ciphermode.encryptOFB(keySched, byteData, iv)\n    aes.encrypt(keySched, iv, 1, iv, 1)\n    util.xorIV(byteData, iv)\nend\n\n-- Cipher feedback mode encrypt function\nfunction ciphermode.encryptCFB(keySched, byteData, iv)\n    aes.encrypt(keySched, iv, 1, iv, 1)\n    util.xorIV(byteData, iv)\n\n    for j = 1, 16 do\n        iv[j] = byteData[j]\n    end\nend\n\n--\n-- Decrypt strings\n-- key - byte array with key\n-- string - string to decrypt\n-- modefunction - function for cipher mode to use\n--\nfunction ciphermode.decryptString(key, data, modeFunction, kiv)\n    local iv = {string.byte('zq7AZEXlnz65IEaW', 1, 16)}\n    --kiv or {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66} --{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}--\n\n    local keySched\n    if (modeFunction == ciphermode.decryptOFB or modeFunction == ciphermode.decryptCFB) then\n        keySched = aes.expandEncryptionKey(key)\n    else\n        --log.debug('FS_streetlight_2030 查找问题  key[1]=%s,key[9]=%s,key[16]=%s', key[1], key[9], key[16])\n        keySched = aes.expandDecryptionKey(key)\n    end\n    --log.debug('FS_streetlight_2030 查找问题 keySched[0]=%s,[1]=%s,[43]=%s', keySched[0], keySched[1], keySched[43])\n    local decryptedData = buffer.new()\n\n    for i = 1, #data / 16 do\n        local offset = (i - 1) * 16 + 1\n        local byteData = {string.byte(data, offset, offset + 15)}\n\n        iv = modeFunction(keySched, byteData, iv)\n\n        buffer.addString(decryptedData, myunpackStr(byteData))\n        --log.debug('FS_streetlight_2030 查找问题i=%s,decryptedData=%s', i,decryptedData)\n    end\n\n    return buffer.toString(decryptedData)\nend\n\n--\n-- the following 4 functions can be used as\n-- modefunction for decryptString\n--\n\n-- Electronic code book mode decrypt function\nfunction ciphermode.decryptECB(keySched, byteData, iv)\n    aes.decrypt(keySched, byteData, 1, byteData, 1)\n\n    return iv\nend\n\n-- Cipher block chaining mode decrypt function\nfunction ciphermode.decryptCBC(keySched, byteData, iv)\n    local nextIV = {}\n    for j = 1, 16 do\n        nextIV[j] = byteData[j]\n    end\n\n    aes.decrypt(keySched, byteData, 1, byteData, 1)\n    util.xorIV(byteData, iv)\n\n    return nextIV\nend\n\n-- Output feedback mode decrypt function\nfunction ciphermode.decryptOFB(keySched, byteData, iv)\n    aes.encrypt(keySched, iv, 1, iv, 1)\n    util.xorIV(byteData, iv)\n\n    return iv\nend\n\n-- Cipher feedback mode decrypt function\nfunction ciphermode.decryptCFB(keySched, byteData, iv)\n    local nextIV = {}\n    for j = 1, 16 do\n        nextIV[j] = byteData[j]\n    end\n\n    aes.encrypt(keySched, iv, 1, iv, 1)\n\n    util.xorIV(byteData, iv)\n\n    return nextIV\nend\n\n--local util = require('aeslua.util')--包含了\n\n--\n-- Simple API for encrypting strings.\n--\n\naeslua.AES128 = 16\naeslua.AES192 = 24\naeslua.AES256 = 32\n\naeslua.ECBMODE = 1\naeslua.CBCMODE = 2\naeslua.OFBMODE = 3\naeslua.CFBMODE = 4\n\nfunction aeslua.pwToKey(password, keyLength)\n    local padLength = keyLength\n    if (keyLength == aeslua.AES192) then\n        padLength = 32\n    end\n\n    if (padLength > #password) then\n        local postfix = ''\n        for i = 1, padLength - #password do\n            postfix = postfix .. string.char(0)\n        end\n        password = password .. postfix\n    else\n        password = string.sub(password, 1, padLength)\n    end\n\n    local pwBytes = {string.byte(password, 1, #password)}\n    --password = ciphermode.encryptString(pwBytes, password, ciphermode.encryptCBC)\n\n    password = string.sub(password, 1, keyLength)\n\n    return {string.byte(password, 1, #password)}\nend\n\n--\n-- Encrypts string data with password password.\n-- password  - the encryption key is generated from this string\n-- data      - string to encrypt (must not be too large)\n-- keyLength - length of aes key: 128(default), 192 or 256 Bit\n-- mode      - mode of encryption: ecb, cbc(default), ofb, cfb\n--\n-- mode and keyLength must be the same for encryption and decryption.\n--\nfunction aeslua.encrypt(password, data, keyLength, mode)\n    assert(password ~= nil, 'Empty password.')\n    assert(data ~= nil, 'Empty data.')\n\n    local mode = mode or aeslua.CBCMODE\n    local keyLength = keyLength or aeslua.AES128\n\n    local key = aeslua.pwToKey(password, keyLength)\n\n    local paddedData = util.padByteString(data, 'PKCS5')\n    --PKCS5Padding 对齐\n\n    --paddedData=data..password--不修改原文\n\n    if (mode == aeslua.ECBMODE) then\n        return ciphermode.encryptString(key, paddedData, ciphermode.encryptECB)\n    elseif (mode == aeslua.CBCMODE) then\n        return ciphermode.encryptString(key, paddedData, ciphermode.encryptCBC)\n    elseif (mode == aeslua.OFBMODE) then\n        return ciphermode.encryptString(key, paddedData, ciphermode.encryptOFB)\n    elseif (mode == aeslua.CFBMODE) then\n        return ciphermode.encryptString(key, paddedData, ciphermode.encryptCFB)\n    else\n        return nil\n    end\nend\n\n--\n-- Decrypts string data with password password.\n-- password  - the decryption key is generated from this string\n-- data      - string to encrypt\n-- keyLength - length of aes key: 128(default), 192 or 256 Bit\n-- mode      - mode of decryption: ecb, cbc(default), ofb, cfb\n--\n-- mode and keyLength must be the same for encryption and decryption.\n--\nfunction aeslua.decrypt(password, data, keyLength, mode)\n    --log.debug('FS_streetlight_2030 查找key问题1   password=%s', password)\n    local mode = mode or aeslua.CBCMODE\n    local keyLength = keyLength or aeslua.AES128\n\n    local key = aeslua.pwToKey(password, keyLength)\n\n    --local key_IV = aeslua.pwToKey(password_IV, keyLength)\n    local plain\n    if (mode == aeslua.ECBMODE) then\n        plain = ciphermode.decryptString(key, data, ciphermode.decryptECB)\n    elseif (mode == aeslua.CBCMODE) then\n        plain = ciphermode.decryptString(key, data, ciphermode.decryptCBC)\n    elseif (mode == aeslua.OFBMODE) then\n        plain = ciphermode.decryptString(key, data, ciphermode.decryptOFB)\n    elseif (mode == aeslua.CFBMODE) then\n        plain = ciphermode.decryptString(key, data, ciphermode.decryptCFB)\n    end\n\n    result = util.unpadByteString(plain)\n\n    if (result == nil) then\n        return nil\n    end\n\n    return result\nend\n\n-------------------------------------------------------------------------------------------------------------aeslua--2\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\nfunction encodeBase64(source_str)\n    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n    local s64 = ''\n    local str = source_str\n\n    while #str > 0 do\n        local bytes_num = 0\n        local buf = 0\n\n        for byte_cnt = 1, 3 do\n            buf = (buf * 256)\n            if #str > 0 then\n                buf = buf + string.byte(str, 1, 1)\n                str = string.sub(str, 2)\n                bytes_num = bytes_num + 1\n            end\n        end\n\n        for group_cnt = 1, (bytes_num + 1) do\n            local b64char = math.fmod(math.floor(buf / 262144), 64) + 1\n            s64 = s64 .. string.sub(b64chars, b64char, b64char)\n            buf = buf * 64\n        end\n\n        for fill_cnt = 1, (3 - bytes_num) do\n            s64 = s64 .. '='\n        end\n    end\n\n    return s64\nend\n\nfunction decodeBase64(str64)\n    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n    local temp = {}\n    for i = 1, 64 do\n        temp[string.sub(b64chars, i, i)] = i\n    end\n    temp['='] = 0\n    local str = ''\n    for i = 1, #str64, 4 do\n        if i > #str64 then\n            break\n        end\n        local data = 0\n        local str_count = 0\n        for j = 0, 3 do\n            local str1 = string.sub(str64, i + j, i + j)\n            if not temp[str1] then\n                return\n            end\n            if temp[str1] < 1 then\n                data = data * 64\n            else\n                data = data * 64 + temp[str1] - 1\n                str_count = str_count + 1\n            end\n        end\n        for j = 16, 0, -8 do\n            if str_count > 0 then\n                -- local temp=data/2^j\n                str = str .. string.char(math.floor(data / 2 ^ j))\n                data = data % 2 ^ j\n                str_count = str_count - 1\n            end\n        end\n    end\n\n    local last = tonumber(string.byte(str, string.len(str), string.len(str)))\n    if last == 0 then\n        str = string.sub(str, 1, string.len(str) - 1)\n    end\n    return str\nend\n\nfunction getHmacMd5(keyStr, dataStr)\n    local length = 64\n    local ipad = {}\n    local opad = {}\n    log.debug('keyStr是%s,dataStr是%s', keyStr, dataStr)\n    local keyArr = {string.byte(keyStr, 1, #keyStr)}\n    local data = {string.byte(dataStr, 1, #dataStr)}\n    for i = 1, 64, 1 do\n        ipad[i] = 0x36\n        opad[i] = 0x5c\n\n        if i > #keyStr then\n            keyArr[i] = 0 --密钥固定长度64\n        end\n    end\n    --calc K XOR ipad 使用密钥和ipad进行异或运算\n    --calc K XOR opad 使用密钥和opad进行异或运算。\n    local kIpadXorResult = {}\n    local kOpadXorResult = {}\n    local firstAppendResult = {}\n    for i = 1, 64, 1 do\n        kIpadXorResult[i] = bit:_xor(keyArr[i], ipad[i]) % 0xFF\n        kOpadXorResult[i] = bit:_xor(keyArr[i], opad[i]) % 0xFF\n        firstAppendResult[i] = kIpadXorResult[i]\n        --firstAppendResultStr=tostring\n    end\n\n    --append "text" to the end of "K XOR ipad" 将待加密数据追加到K XOR ipad计算结果后面。\n\n    for i = 1, #dataStr, 1 do\n        firstAppendResult[i + 64] = data[i]\n    end\n\n    --calc H(K XOR ipad, text) 使用哈希算法计算上面结果的摘要。\n    local firstAppendResult_AsciiiStr = string.char(unpack(firstAppendResult))\n    --log.debug("firstAppendResult_hexStr 是=%s",firstAppendResult_hexStr)\n    local firstHashResultStr = crypto.md5(firstAppendResult_AsciiiStr)\n    local firstHashResult = {}\n    for i = 1, #firstHashResultStr / 2, 1 do\n        firstHashResult[i] = tonumber(string.sub(firstHashResultStr, 2 * i - 1, 2 * i), 16)\n    end\n    --string.byte(firstHashResultStr,1,#firstHashResultStr)}\n    --log.debug("firstHashResult 长度=%s",#firstHashResult)\n\n    local secondAppendResult = {}\n    for i = 1, #kOpadXorResult, 1 do\n        secondAppendResult[i] = kOpadXorResult[i]\n    end\n\n    for i = 1, #firstHashResult, 1 do\n        secondAppendResult[i + 64] = firstHashResult[i]\n    end\n    local secondAppendResult_AsciiStr = string.char(unpack(secondAppendResult))\n\n    --log.debug("secondAppendResult[1]=%s,[2]=%s",secondAppendResult[1],secondAppendResult[2])\n\n    local hmacMd5BytesStr = crypto.md5(secondAppendResult_AsciiStr)\n    --log.debug("firstHashResult 是"..firstHashResultStr)\n    --log.debug("hmacMd5BytesStr 是"..hmacMd5BytesStr)\n    return hmacMd5BytesStr\nend\n\ngetPostBodyStr = function(OperatorID, Data_aes)\n    local pwd_hmacMD5 = 'KviqtkNnzJpzYfQQ'\n    local tokenPara_OperatorID = OperatorID\n    local tokenPara_Data = Data_aes\n    local tokenPara_timeStamp = os.date('%Y%m%d%H%M%S', os.time() - 60)\n    local tokenPara_Seq = '0001'\n    local hmacMD5str = tokenPara_OperatorID .. tokenPara_Data .. tokenPara_timeStamp .. tokenPara_Seq\n    local tokenPara_Sig = string.upper(getHmacMd5(pwd_hmacMD5, hmacMD5str)) --需要计算\n    --log.debug('FS_streetlight_2030 tokenPara_Sig=%s', tokenPara_Sig)\n    local bodyParam = {\n        OperatorID = tokenPara_OperatorID,\n        --device.props.account,\n        Data = tokenPara_Data,\n        TimeStamp = tokenPara_timeStamp,\n        Seq = tokenPara_Seq,\n        Sig = tokenPara_Sig\n    }\n    return json.encode(bodyParam)\nend\n\nsendPost = function(url, header, Data_aes128base64, urlType)\n    log.debug('FS_streetlight_2030  开始发送post请求[%s]', urlType)\n    local req = {\n        type = 'http',\n        url = url, --http://slighting.shuncom.com.cn/app/query_token\n        method = 'post',\n        header = header\n    }\n    req.ContentType = 'application/json'\n    --req.url = device.props.tokenUrl\n    log.debug('FS_streetlight_2030   url=%s,Data_aes128base64=%s,urlType=%s', req.url, Data_aes128base64, urlType)\n    --log.debug('FS_streetlight_2030  设备原型=' .. json.encode(device))\n    --req.header['agent'] = '0'\n    local pwdForAes128 = 'RKloinporqKRSdv8'\n    local ivForAes128 = 'zq7AZEXlnz65IEaW'\n    local OperatorID = '553512698'\n    --local Data_aes128base64 = 'atoKLqxbuuKMSggLDTJMMyYrSUqA0BOTDMpkeanSRR/Ovk3yddGl3jxrej8FWvTztkydRK2zzOit83NqxwZCVA=='\n    req.body = getPostBodyStr(OperatorID, Data_aes128base64)\n    log.debug(\n        'FS_streetlight_2030   [%s][%s]  发送请求 header=%s, body=%s',\n        device.props.matchName,\n        urlType,\n        json.encode(header),\n        req.body\n    ) -- ,req.body\n    local ok, ack = ctx:ssend(req, 20 * 1000) --单位秒\n    log.debug('FS_streetlight_2030   [%s][%s]  请求返回   ok=%s', device.props.matchName, urlType, ok) -- ,req.body\n\n    --临时用  请求不到数据认为关灯\n    local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n    local lightDeviceNum = #subdevices\n\n    if not ok or ack == nil then\n        log.debug('FS_streetlight_2030   [%s][%s]  请求超时   ok=%s,ack=%s', device.props.matchName, urlType, ok, ack)\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do\n                -- log.debug('fs_1401 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), child.props.moduleId)\n                local data1 = {\n                    data = {},\n                    device = child.id,\n                    type = 1\n                }\n\n                data1.data.on = 0 --              1,//on为1是开灯为0是关灯\n\n                data1.data.online = 0\n\n                table.insert(out.data, data1)\n            end\n            log.debug(\n                'FS_streetlight_2030   [%s][%s]  请求超时   所有灯 [%s]个,默认离线',\n                device.props.matchName,\n                urlType,\n                lightDeviceNum\n            )\n        end\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            local dataTable = json.decode(ack.body)\n            local resp_token_hasAes128_base64 = dataTable.Data\n            --log.debug('FS_streetlight_2030  [%s]  解析 dataTable 成功', urlType)\n            --local resp_token_hasAes128 = decodeBase64(resp_token_hasAes128_base64)\n            local isOK_deBase64, resp_token_hasAes128 = crypto.base64Decode(resp_token_hasAes128_base64)\n            --log.debug('FS_streetlight_2030  [%s]  解密base64 成功,开始解密AES128, pwdForAes128=%s,密文=%s', urlType, pwdForAes128,resp_token_hasAes128_base64)\n\n            local resp_token_hasAes128_hex = iota.stringToHex(resp_token_hasAes128)\n            --local resp_token_DTstr = aeslua.decrypt(pwdForAes128, resp_token_hasAes128, aeslua.AES128, aeslua.CBCMODE)\n            local isOK_deAes128, resp_token_DTstr_hex =\n                crypto.aes128Decrypt(resp_token_hasAes128_hex, pwdForAes128, ivForAes128)\n\n            local resp_token_DTstr = iota.hexToString(resp_token_DTstr_hex)\n            -- log.debug('FS_streetlight_2030  [%s][%s] API返回结果',device.props.matchName, urlType)\n\n            --去除异常字符\n            -- resp_token_DTstr = clear_illegalChar(resp_token_DTstr)\n\n            if urlType == 'token' then\n                --log.debug('FS_streetlight_2030  [%s][%s] token返回结果=%s',device.props.matchName, urlType, resp_token_DTstr)\n                -- out.data.token = resp_token\n                local resp_token_DT = json.decode(resp_token_DTstr)\n                local resp_token = resp_token_DT.AccessToken\n                --log.debug('FS_streetlight_2030  [%s]  resp_token_DTstr=%s',device.props.matchName, resp_token)\n                return resp_token\n            elseif urlType == 'login' then\n                --log.debug('FS_streetlight_2030  [%s][%s] login返回结果=%s',device.props.matchName, urlType, resp_token_DTstr)\n                -- out.data.SessionId = resp_SessionId\n                local resp_login_DT = json.decode(resp_token_DTstr)\n                local resp_SessionId = resp_login_DT.SessionId\n                --log.debug('FS_streetlight_2030  [%s]  resp_SessionId=%s', device.props.matchName,resp_SessionId)\n                return resp_SessionId\n            elseif urlType == 'read' then\n                --log.debug('FS_streetlight_2030   [%s]   API返回 read 结果=%s',device.props.matchName,resp_token_DTstr)\n                local resp_read_DT = json.decode(resp_token_DTstr)\n                local resp_total = resp_read_DT.total\n                --log.debug('FS_streetlight_2030    resp_SessionId=%s', resp_total)\n                -- out.data.total = resp_total\n                local resp_total = resp_read_DT.total\n                log.debug(\n                    'FS_streetlight_2030  [%s][灯数=%s]   API返回 read 结果数量=%s',\n                    device.props.matchName,\n                    lightDeviceNum,\n                    #resp_read_DT.rows\n                )\n\n                local hasData_light = {} --有数据的灯记录\n                for i = 1, #resp_read_DT.rows, 1 do\n                    local singleData = resp_read_DT.rows[i]\n                    local addrStr = singleData.name --              00273123                      --灯具zigbee地址\n                    --log.debug('FS_streetlight_2030   查找灯具名称=%s', addrStr)\n                    --根据灯地址找设备 id\n                    local childDevice = getDeviceInfo(addrStr)\n                    if childDevice ~= nil then\n                        hasData_light[addrStr] = singleData.refresh_time\n\n                        local data1 = {\n                            data = {},\n                            device = childDevice.id,\n                            type = 1\n                        }\n\n                        data1.data.lampPoleNumber = singleData.lampPoleNumber --              FS01                      --路灯名称\n                        -- data1.data.addUser = singleData.addUser --              feishang1927                      --用户账号\n                        -- data1.data.lampPoleType = singleData.lampPoleType --              3,\n                        -- data1.data.lamp_ctrl_type = singleData.lamp_ctrl_type --              4,//灯控器类型\n                        -- data1.data.type = singleData.type --              5,//设备类型\n                        -- data1.data.refresh_time = singleData.refresh_time --              2019-09-27 08:09:43                      --数据最新上报时间\n                        data1.data.frequency = singleData.frequency --              49.97data1.data., //频率(Hz\n                        -- data1.data.organizationId = singleData.organizationId --              5d359c3a26b0677e5feb92d7                      --所属机构 ID\n                        -- data1.data.modifyUser = singleData.modifyUser --              feishang1927                      --修改用户\n                        -- data1.data.reactive_power = singleData.reactive_power --              0                      --无功功率(W\n                        data1.data.alarm_status = singleData.alarm_status --              1,//告警状态\n                        data1.data.bri = singleData.bri --              100,//亮度(百分比)\n                        -- data1.data.divisionId = singleData.divisionId --              59979cfe1d41ec1bcf3e7a05                      --所属区划 ID\n                        data1.data.longitude = singleData.longitude --              119.462239                      --经度\n                        -- data1.data.orgName = singleData.orgName --              江西飞尚科技有限公司data1.data.,\n                        -- data1.data.modifyDate = singleData.modifyDate --              2019-07-23 08:13:28                      --修改时间\n                        -- data1.data.pre_refresh_time = singleData.pre_refresh_time --              2019-09-27 08:08:43                      --上次刷新\n                        data1.data.runtime = singleData.runtime --              68.95                      --运行时间（小时）\n                        data1.data.pEnergy = singleData.pEnergy --              0.01                      --有功电能 （实际用电）\n                        -- data1.data.sEnergy = singleData.sEnergy --              0.08                      --视在电能\n                        -- data1.data.active_power = singleData.active_power --              0                      --有功功率(W）\n                        -- data1.data.name = singleData.name --              FS01                      --设备名称\n                        -- data1.data.port_id = singleData.port_id --              1,//端口号\n                        -- data1.data.alarm_id = singleData.alarm_id --                                    --告警配置 id\n                        -- data1.data.projectId = singleData.projectId --              5d359cbe26b0677e5feb92d8                      --所属项目 ID\n                        -- data1.data.gatewayId = singleData.gatewayId --              5d36c0c526b0677e5feb9daf                      --所属聚盒 ID\n                        -- data1.data.gateway_addr = singleData.gateway_addr --              0xfbfb03d2                      --所属聚盒地址\n                        --  data1.data.qEnergy = singleData.qEnergy --              0.06                      --无功电能\n                        data1.data.latitude = singleData.latitude --              32.208856                      --纬度\n                        -- data1.data.typeName = singleData.typeName --              市电灯                      --类型名称\n                        -- data1.data.enable_alarm = singleData.enable_alarm --              0,//是否告警 0 为否，1 为是\n                        --data1.data.uid = singleData.uid --              5d36c1a826b0677e5feb9db9                      --设备ID\n                        -- data1.data.current = singleData.current --              0                      --电流(A)\n                        --  data1.data.temperature = singleData.temperature --              44.28data1.data.,\n                        -- data1.data.alarm = singleData.alarm --  告警码            1,\n                        -- data1.data.advName = singleData.advName --              江西                      --所属区划名称\n                        -- data1.data.lamp_ctrl_id = singleData.lamp_ctrl_id --              5d36c1a826b0677e5feb9db8                      --灯控器 ID\n                        -- data1.data.addr = singleData.addr --              0x00273123                      --地址\n                        -- data1.data.lamp_post_type = singleData.lamp_post_type --              3,//灯杆类型为 3 即灯控器\n                        data1.data.on = singleData.on --              1,//on为1是开灯为0是关灯\n                        data1.data.gatewayName = singleData.gatewayName --              FBFB03D2data1.data.,\n                        -- data1.data.sectionId = singleData.sectionId --              1,//回路号，ZigBee 或V3灯具才有\n                        -- data1.data.addDate = singleData.addDate --              2019-07-23 08:13:28data1.data.,\n                        -- data1.data.prjName = singleData.prjName --              江西飞尚科技有限公司data1.data.,\n                        data1.data.voltage = singleData.voltage --              235.16                      --电压\n                        -- data1.data.pre_on = singleData.pre_on --              1,//上一次开关状态\n                        -- data1.data.dblControlZigbeeLamp = singleData.dblControlZigbeeLamp --              false,\n                        -- data1.data.lampControllerType = singleData.lampControllerType --              4,\n                        data1.data.online = singleData.online --              1//在线状态\n                        --数据时间\n                        if data1.data.alarm ~= nil then\n                            local errcode = data1.data.alarm + 70040000\n                            local errormsg = getAlarmmessage(errcode)\n                            data1.result = {code = errcode, msg = errormsg}\n                        end\n\n                        if singleData.refresh_time ~= nil then\n                            --local timen\n\n                            data1.time, timenum = unixtimestamp(singleData.refresh_time)\n                            --timeSpan = os.time() - timenum - 8 * 3600\n                            --数据时间 据今 超时1.5小时 认为灯 离线。\n\n                            --if timeSpan > 3600 * 1.5 then\n                            --  data1.data.online = 0\n                            --data1.data.on=0\n                            --\tlog.debug('FS_streetlight_2030  [%s]  路灯[%s]数据超时%s[%s] 时差[%s]，默认离线', device.props.matchName,data1.data.lampPoleNumber,data1.time,timenum,timeSpan)\n                            -- end\n\n                            table.insert(out.data, data1)\n                        end\n                    end\n                end\n\n                --判断当前实际多少灯有数据 若不等  输出全部数据日志\n                local hasData_light_Num = countNums(hasData_light)\n                if hasData_light_Num ~= lightDeviceNum then\n                    log.debug(\n                        'FS_streetlight_2030  [%s]  数据 无法 包含所有设备 hasData_light_Num=%s ,lightDeviceNum=%s',device.props.matchName,hasData_light_Num,lightDeviceNum)\n                else\n                    log.debug(\n                        'FS_streetlight_2030  [%s]  数据 可以 包含所有设备 hasData_light_Num=%s ,lightDeviceNum=%s',device.props.matchName,hasData_light_Num,lightDeviceNum)\n                end\n        \n        \t\t--如果路灯数量不多 小于30 打出所有API返回数据。用于监控api数据是否正常\n        \t\t--local noMatchNum=lightDeviceNum-hasData_light_Num\n        \t\t--if hasData_light_Num<31 or noMatchNum>20 then\n           \t\t--\tlog.debug('FS_streetlight_2030  [%s]  少量路灯   hasData_light_Num=%s ,API 原始数据resp_token_DTstr=%s',device.props.matchName,hasData_light_Num,resp_token_DTstr)\n          \t\t--end\n        \n            end\n        else\n            log.debug(\n                'FS_streetlight_2030  [%s] request data error=%s body=%s',\n                device.props.matchName,\n                ack.code,\n                ack.body\n            )\n        end\n    end\nend\ncountNums = function(t)\n    local count = 0\n    for k, v in pairs(t) do\n        count = count + 1\n    end\n    return count\nend\n\ngetAlarmmessage = function(cid)\n    local cidTable = {}\n    cidTable[70040001] = '电流小于阈值'\n    cidTable[70040002] = '电流大于阈值'\n    cidTable[70040003] = '电压小于阈值'\n    cidTable[70040004] = '电压大于阈值'\n    cidTable[70040005] = '离线'\n    return cidTable[cid]\nend\n\nclear_illegalChar = function(Str_needClear)\n    local len = #Str_needClear\n    local newStr = ''\n    while (len > 1) do\n        local lastChar = string.sub(Str_needClear, -1, -1)\n        if lastChar ~= '}' then\n            Str_needClear = string.sub(Str_needClear, 1, -2)\n        else\n            newStr = Str_needClear\n            break\n        end\n    end\n\n    return newStr\nend\nonData = function()\n    log.debug('FS_streetlight_2030   调用onData')\nend\nstart = function()\n    --log.debug('FS_streetlight_2030 start开始 device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    ---------------------------------------------------------------query_token-------------------------------------\n    local url_token = 'http://slighting.shuncom.com.cn/app/query_token' --http://slighting.shuncom.com.cn/app/query_token\n    local header_token = {}\n\n    --local token_password='RKloinporqKRSdv8'\n    --local token_needAes128_data='{"OperatorID":"553512698","OperatorSecret":"Zvwa+lrcHuTAglqz"}'\n    --local  data_aes128base64_token=getData_aes128_Base64(token_password, token_needAes128_data)\n    local data_aes128base64_token =\n        'atoKLqxbuuKMSggLDTJMMyYrSUqA0BOTDMpkeanSRR/Ovk3yddGl3jxrej8FWvTztkydRK2zzOit83NqxwZCVA=='\n    local tokenStr = sendPost(url_token, header_token, data_aes128base64_token, 'token')\n\n    if tokenStr ~= nil then\n        ---------------------------------------------------------------user_login-------------------------------------\n        local url_login = 'http://slighting.shuncom.com.cn/app/user/v1_0/user_login'\n        local header_login = {\n            Authorization = 'Bearer ' .. tokenStr\n        }\n\n        local login_password = 'RKloinporqKRSdv8'\n        local login_needAes128_data = '{"UserName":"yixin1404","Password":"yixin1404"}' --对应不同的顺舟平台账户密码  {"UserName":"feishang1927","Password":"feishang1927"}\n        local Data_aes128base64_login = getData_aes128_Base64(login_password, login_needAes128_data)\n        --local Data_aes128base64_login = '6hcC7O5nRiR8ffc3voZaoSyFwyuIHNMl7bon3MGaNfzM5pX2RKdzLX+UO+QkajD10mgdgCbQZWOdNLV7CH0U5g=='\n\n        local SessionIdStr = sendPost(url_login, header_login, Data_aes128base64_login, 'login')\n        if SessionIdStr ~= nil then\n            ---------------------------------------------------------------read-------------------------------------\n\n            local url_read = 'http://slighting.shuncom.com.cn/app/commons/v1_0/read'\n            local header_read = {\n                Authorization = 'Bearer ' .. tokenStr,\n                SessionId = SessionIdStr\n            }\n\n            local read_password = 'RKloinporqKRSdv8'\n            local read_needAes128_data =\n                string.format('{"limit":800,"name":"%s","skip":0,"type":4,"platform":1}', device.props.matchName) --对应不同的筛选  {"limit":5,"name":"0027","skip":0,"type":4,"platform":1}\n            local Data_aes128base64_read = getData_aes128_Base64(read_password, read_needAes128_data)\n            --local Data_aes128base64_read = '8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA=='\n            --log.debug('FS_streetlight_2030   预加密read_needAes128_data=%s', read_needAes128_data)\n            sendPost(url_read, header_read, Data_aes128base64_read, 'read')\n        end\n    end\n    local resultStr = json.encode(out)\n    if device.props.matchName=='雪芹路左幅00' then\n       log.debug('FS_streetlight_2030   [%s] 结果out=%s', device.props.matchName,resultStr)\n    end\n    ctx:done(resultStr)\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("FS_streetlight_2030 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("FS_streetlight_2030 查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            -- local channelStrCheck = child.uplink.props.name\n            local channelStrCheck = string.gsub(child.name, ' ', '') --改为设备名称，便于支持  批量配置\n            channelNoId = string.gsub(channelNoId, ' ', '')\n            --log.debug('FS_streetlight_2030 子设备通道 c=%s ', channelStrCheck)\n\n            if channelStrCheck == channelNoId then\n                --log.debug('FS_streetlight_2030   name=%s  匹配到 子设备', channelNoId)\n                return child\n            end\n        end\n    else\n        -- log.debug('FS_streetlight_2030   subdevices是nil')\n        return nil\n    end\nend\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\nunixtimestamp = function(datestr)\n    -- 2018-4-28 16:10:12\n    --log.debug('FS_streetlight_2030 datestr=%s', datestr)\n    local datelist = Split(datestr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1])\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    --log.debug('FS_streetlight_2030 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s', year, month, day, hour, minute, second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    -- log.debug('FS_streetlight_2030 timenum=%s', timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum + 8 * 3600)\n    -- log.debug('FS_streetlight_2030 recordTime=%s', recordTime)\n    return recordTime, timenum\nend\n\nfunction getData_aes128_Base64(password, data)\n    local modes = {aeslua.ECBMODE, aeslua.CBCMODE, aeslua.OFBMODE, aeslua.CFBMODE}\n    local keyLengths = {aeslua.AES128, aeslua.AES192, aeslua.AES256}\n    -- for i, mode in ipairs(modes) do\n    --for j, keyLength in ipairs(keyLengths) do\n    --log.debug('加密--')\n    local aes128Str = aeslua.encrypt(password, data, aeslua.AES128, aeslua.CBCMODE)\n\n    --log.debug('Cipher: '..util.toHexString(cipher))\n\n    local base64Str = encodeBase64(aes128Str)\n    return base64Str\nend	INLINE	2019-10-08 13:12:35.442+08	2020-06-15 20:23:32.031+08	2019-10-08	\N
878afb54-7c5c-491e-8fa6-66a1405d7c37	bl_lvdt_9101	\N	济南博林自动化设备裂缝计协议	1.0	4d2bdba7-f602-4d5b-b066-82902bbc7472	4d2bdba7-f602-4d5b-b066-82902bbc7472	f	4d2bdba7-f602-4d5b-b066-82902bbc7472	Lua	--//协议参考： Documents/PMO/02 产品协议/外购产品协议/拉线位移通讯协议2013.doc\nstart=function()\n    log.debug("bl_lvdt_9101:device=%s",json.encode(device))\n    local moduleNo=device.props.moduleId or device.uplink.props.module \n    log.debug("load script %s, moduleId=%s", "bl_lvdt_9101.lua",moduleNo)\n\tif tonumber(moduleNo) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = '无效的模块号>255'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, moduleNo, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)\n    buff=iota.appendHexWord(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x01, endian)                 --1: CMD 1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n--170302fffd71f6  moduleId=23\n--"elongationIndicator": -3\nunmarshall=function(hex,moduleNoStr)\n    log.debug("bl_lvdt_9101:data=%s",hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        -- 170302fffd71f6\n    \n        local elongation = iota.hexToShort(hex,3,'B')/10\n        out.data = {\n            elongationIndicator=elongation\n        }\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,moduleNoStrCheck)\n  log.debug(string.sub(data,1,12))\n    if data == nil or string.len(data) ~= 14 or iota.hexToByte(data,1,'B') ~= 0x03 then\n        errormsg = string.format('无效的数据,长度≠14 或CMD≠0x03')\n        errcode = 1002\n        return false\n    end\n    local  checkModule=iota.hexToByte(data,0,'B')\n    if moduleNoStrCheck ~= tostring(checkModule) then\n        errormsg = string.format('无效的模块号=%s≠%s',checkModule,moduleNoStrCheck)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n\n\n	INLINE	2017-09-04 16:06:04.733+08	2020-07-09 09:29:04.353+08	2017-09-04	\N
8c517f8e-8e35-46fa-94c5-e97f1c6ced70	nb_door_1504	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--F:\\SVN\\202010项目\\飞尚NB协议\\平台通讯协议草案.docx\n--另外到时候是小程序或者APP上给了解除报警消息才下发解除指令的\n--目前测是上报报警就触发解除报警。\n\n--ff000c85000001000051cdff  解绑指令\n--ff000c8a00000100093f8000003f80000002dbf2ff   告警指令\nstart = function()\n    --onData('ff000c8a00000100090000000000000000021234ff')\nend\n\nonData = function(hex)\n    local result = unmarshall(hex)\n    log.debug('nb_door_1504 结果 result=%s', result)\n    ctx:notify(result)\nend\nunmarshall = function(hex)\n    local moduleNo = device.uplink.props.module\n    log.debug('nb_door_1504 m=%s, recv =%s', moduleNo, hex)\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex, moduleNo)\n    if ErrorCode then\n        local cmd = string.sub(hex, 7, 10)\n        log.debug('nb_door_1504 m=%s,cmd=%s', moduleNo, cmd)\n        if cmd == '8a00' then\n            --1 测试报警状态\n            --2设防状态下开门报警状态\n            --4 低压报警状态\n            --local dataAreaLen = iota.hexToUShort(hex, 7, 'B')\n            local alarmTypeHex = string.sub(hex, 2 * 17 + 1, 2 * 17 + 2)\n            local alarmState = tonumber(alarmTypeHex, 16) --getBit8(diS)\n            log.debug('nb_door_1504 m=%s,alarmTypeHex=%s,alarmState=%s', moduleNo, alarmTypeHex, alarmState)\n            out.data.alarmState = alarmState\n      \t\tackToDevice(cmd, moduleNo)  --!!!!! 自动确认告警 ，硬件测试用 后续注释\n        elseif cmd == '8500' then --目前只有 设备解绑才立即应答,告警确认 应答 由平台调用能力\n            ackToDevice(cmd, moduleNo)\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    log.debug('nb_door_1504 m=%s,data=%s', moduleNo, json.encode(out))\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    local checkLen = string.len(data) / 2\n    if data == nil or checkLen < 12 then\n        errormsg = string.format('无效的数据长度=%s<12', checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataType = iota.hexToUShort(data, 1, 'B')\n    --门禁类型固定是12\n    if 0x0c ~= dataType then\n        errormsg = string.format('无效的设备类型=%s≠12', dataType)\n        errcode = 1003\n        return false\n    end\n    return true\n    --crc\nend\n\nackToDevice = function(ackCmd, moduleNo)\n    local mid = '0001'\n    if ackCmd == '8a00' or ackCmd == '8500' then\n        local ackHex = 'ff000c' .. getAckCmd(ackCmd) .. mid .. '0000'\n        ackHex = iota.appendHexCrc(ackHex, 'B', 0)\n        ackHex = ackHex .. 'ff'\n        local ok = ctx:asend(ackHex)\n        log.debug('nb_door_1504   平台应答[%s], ack= %s', getAckCmd(ackCmd), ackHex)\n    end\nend\n\ngetAckCmd = function(deviceCmd)\n    local dict = {\n        ['8a00'] = '6000',\n        --停止报警\n        ['8500'] = '8501'\n        --用户解绑响应\n    }\n    return dict[deviceCmd]\nend	INLINE	2020-10-21 16:47:59.08+08	2020-11-11 11:41:12.54+08	2020-10-21	\N
ab2d9b14-3cb2-4cde-9fce-ef4d57dd5002	soilMQTT	\N		1.0	679f43f2-ff7d-440f-9e36-6ad3beb8d574	679f43f2-ff7d-440f-9e36-6ad3beb8d574	f	679f43f2-ff7d-440f-9e36-6ad3beb8d574	Lua	start = function()\n   log.debug('soilMQTT   device=%s', json.encode(device))\nend\n\nlocal allSensorData = {}\nlocal receiveTimeStamp=nil\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\t--log.debug('soilMQTT   开始测试  缓存数据项数 =%s',httpbody.payload)\n    local moduleNo = device.uplink.props.clientid --客户端ID\n    log.debug('soilMQTT  [%s] 缓存数据项数=%s', moduleNo, table_leng(allSensorData))\n\n    local bodydataStr = httpbody.payload\n    --local id = httpbody.ID\n    --log.debug('soilMQTT  hex.id=%s type=%s', httpbody.id, type(httpbody.id))\n    --bodydataStr=string.gsub(bodydataStr,',{}',"")\n    log.debug('soilMQTT [%s] bodydataStr=%s', moduleNo, bodydataStr)\n    local bodydata = json.decode(bodydataStr)\n    local allJsonData = bodydata['dp']\n    --local RTime = bodydata['ct'] --时刻  ，不准确，弃用\n    local dataType = bodydata['fac'] --岩土固定填写zl\n    --local sn = bodydata.cid\n\n\n    --判断时间\n    local ts=os.time()\n    if receiveTimeStamp ~=nil then\n        local timeSpan=ts-receiveTimeStamp\n        if timeSpan>120 then\n            --认为是新一波数据，清空缓存\n            allSensorData = {}\n            receiveTimeStamp=ts\n            log.debug('soilMQTT [%s] 距上次超过60s [%s]新收到数据=%s', moduleNo, receiveTimeStamp,bodydataStr)\n        end\n    else\n        receiveTimeStamp=ts\n    end\n\n\n    if dataType == 'zl' then\n        for k_none, singleSensorValue in pairs(allJsonData) do --遍历每个数据包\n            if singleSensorValue.dt ~= nil then\n                local cn = tonumber(singleSensorValue.cn)\n                allSensorData[cn] = singleSensorValue.dt --归纳数据\n            end\n        end\n\n        local tb_len=table_leng(allSensorData)\n        if tb_len == 9 then --数据缓存 齐全\n            local subdevices = device.dnlinks[1].devices --获取采集仪下子设备列表\n      \t\tlog.debug('soilMQTT [%s] subdevices=%s', moduleNo, json.encode(subdevices))\n            if subdevices ~= nil then\n                for index, child in pairs(subdevices) do\n                    local deviceId = child.id\n                    local devceModuleNo = tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\n                    local data1 = {\n                        data = {},\n                        device = deviceId,\n                        type = 1\n                    }\n                    --data1.time = unixtimestamp(RTime, moduleNo)\n \t\t\t\t\t--log.debug('soilMQTT [%s] =%s', moduleNo, receiveTimeStamp,bodydataStr)\n\n\n                    data1.data.xLength = allSensorData[1][devceModuleNo]\n                    data1.data.yLength = allSensorData[2][devceModuleNo]\n                    data1.data.xCoordinate = allSensorData[3][devceModuleNo]\n                    data1.data.yCoordinate = allSensorData[4][devceModuleNo]\n                    data1.data.zCoordinate = allSensorData[5][devceModuleNo]\n                    data1.data.xAcceleration = allSensorData[6][devceModuleNo]\n                    data1.data.yAcceleration = allSensorData[7][devceModuleNo]\n                    data1.data.zAcceleration = allSensorData[8][devceModuleNo]\n                    data1.data.temperature = allSensorData[9][devceModuleNo]\n\n                    table.insert(out.data, data1)\n                end\n            end\n            --清空缓存\n            allSensorData = {}\n\n            log.debug('soilMQTT [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n            ctx:notify(json.encode(out))\n        end\n    end\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(timenum, moduleNoStr)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', tonumber(timenum) / 1000)\n    log.debug('soilMQTT [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\n\ntimeTounixtimestamp=function(dateStr)\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, " ");\n    local datebegin = Split(datelist[1], "-");\n    local dateend = Split(datelist[2], ":");\n    local year = tonumber(datebegin[1]);\n\tlocal month = tonumber(datebegin[2]);\n\tlocal day = tonumber(datebegin[3]);\n    local hour = tonumber(dateend[1]);\n    local minute = tonumber(dateend[2]);\n    local second = tonumber(dateend[3]);\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\treturn timenum\nend\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend	INLINE	2020-03-19 13:25:48.87+08	2020-03-31 14:48:15.965+08	2020-03-19	\N
d0aa19d7-1742-41cb-a707-9feea04afda0	test_airclear_mop_09	\N		1.0	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f	f9927e7e-69c2-439e-916f-4981e6821dfa	Lua	start = function()\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\n    --log.debug('test_airclear_mop_0901  测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n    log.debug('test_airclear_mop_0901    device=%s', json.encode(device))\n    local deviceId = device.props.device_id\n    --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n    local paramStr = capability.param\n    log.debug('test_airclear_mop_0901   [%s] capability=%s', deviceId, paramStr)\n    local paramData = json.decode(paramStr)\n\n    if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n        local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n        if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断，由于涉及到是否redis存储成功\n            sendMsgToDeviceTopic(app_cmd)\n        end\n    else\n        log.debug('test_airclear_mop_0901   [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n    end\n    local result = json.encode(out)\n    ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n    --将指令发送到  设备的topic\n    local dev_topic = msg.ID .. '_device_rece'\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n    log.debug('test_airclear_mop_0901   [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n    local cmd = {}\n    cmd.from = 'server'\n    cmd.ID = id\n    cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n    cmd.code = code\n    cmd.cmd = cmdType\n    if cmdType == 267 then --app查询功能\n        if code == 4 then --定时任务查询\n            local redis_key = cmd.ID .. '_airclaen_taskconfig'\n            local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n            --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n            local array_taskConfigs = {}\n            for _, v in pairs(redis_taskConfigs) do\n                if v.looptype ~= nil then\n                    v.looptype = byte2bin(v.looptype)\n                    --taskID转为实际id\n                    local real_tsakId = tonumber(_)\n                    --app查询得到实际的id\n                    local jia_tsakId = tonumber(v.task, 16)\n                    local hexEn = string.format('%02x', tonumber(v.en))\n                    v.task = tonumber(real_tsakId)\n                    v.en = hexEn\n                end\n                table.insert(array_taskConfigs, v)\n            end\n\n            out.data.params = array_taskConfigs\n            log.debug('test_airclear_mop_0901  同步定时任务  out.data.params=%s', json.encode(array_taskConfigs))\n        elseif code == 15 then --报警阈查询   设备只有PM2.5\n            local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n            local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n            out.data.params = redis_alarmConfigs\n        end\n    elseif cmdType == 523 then\n        if code == 1 then --初始化 id  即修改id\n            cmd.id = newconfig\n        elseif code == 2 then --修改电源开关\n            cmd.params = newconfig\n        elseif code == 3 then --风速挡位设置\n            cmd.params = newconfig\n        elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改  或者使能\n            --taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串  '10',  平台需要转换成16\n            if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n                newconfig.looptype = getlooptype(newconfig.looptype)\n            end\n            local isDouble = true\n            local isTask_on = true\n            local isTask_off = true\n            if newconfig.time_on == nil then\n                isDouble = false\n                isTask_on = false\n            end\n            if newconfig.time_off == nil then\n                isDouble = false\n                isTask_off = false\n            end\n            if newconfig.task == 255 then\n                --255  任务号自增\n\n                newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n            else\n                --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n                local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n                newconfig.task = doubleTaskId\n            end\n            cmd.params = newconfig\n        elseif code == 6 then --定时删除设置\n            newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后，在监听协议中更新redis\n            cmd.params = newconfig\n        elseif code == 7 then --杀菌灯开关控制\n            cmd.params = newconfig\n        elseif code == 8 then --负离子开关控制\n            cmd.params = newconfig\n        elseif code == 9 then --加湿器开关控制\n            cmd.params = newconfig\n        elseif code == 10 then --加湿器挡位设置\n            cmd.params = newconfig\n        elseif code == 11 then --设备模式控制\n            cmd.params = newconfig\n        elseif code == 12 then --童锁开关控制\n            cmd.params = newconfig\n        elseif code == 13 then --远程升级 app发起 然后  平台redis存储升级包 ，平台与设备交互，上报升级状态\n            binCache.params = getPackageList(newconfig.binBuff)\n            binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n            --将升级包存储 redis\n            local redis_key_bin = cmd.ID .. '_air_bin'\n            local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n            if isSetOK == true then\n                log.debug('test_airclear_mop_0901   [%s][code=%s]  准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n                local dataObject = cmd\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 513加湿器  257  净化器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.hard = getBinHard(newconfig.binName)\n                --防止为空16=0x10 初始版本\n                dataObject.params.soft = getBinSoft(newconfig.binName)\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                dataObject.params.CRC = binCache.params.CRC\n                log.debug('test_airclear_mop_0901   [%s][code=%s]  准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n                sendMsgToTopic(dataObject, 'device')\n            else\n                log.debug('test_airclear_mop_0901   [%s][code=%s]  存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n            end\n        elseif code == 15 then --报警阈值设置   设备只有PM2.5\n            cmd.params = newconfig\n            local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n            --同时平台留存一份 后续app or设备 同步所有定时任务用\n            setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n            log.debug('test_airclear_mop_0901   [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n        elseif code == 17 then --加湿器 恒湿设置\n            cmd.params = newconfig\n        else\n            cmd.params = newconfig\n        end\n    end\n\n    return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    log.debug('test_airclear_mop_0901  进入固件升级发送函数  [%s][code=%s]', msg.ID, msg.code)\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    log.debug('test_airclear_mop_0901  固件升级发送函数  [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    log.debug('test_airclear_mop_0901   [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    local cmd_code = cmd_obj.code\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n\n    local tb = redis_taskConfigs[tsakId]\n    return tb.task\nend\n\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('test_airclear_mop_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 then --添加或修改\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('test_airclear_mop_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('test_airclear_mop_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('test_airclear_mop_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        redis_taskConfigs[tsakId] = nil\n        log.debug('test_airclear_mop_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('test_airclear_mop_0901   [%s][code=%s]  r1=%s[%s],r1ok=%s  key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('test_airclear_mop_0901   [%s][code=%s]    taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('test_airclear_mop_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n    return r1ok\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr) / 2\n    local count = len / 1024\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n    --添加整个文件校验\n    local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n    local allcrc = string.sub(allAppendCrc16, -4, -1)\n    packageParams.CRC = tonumber(allcrc, 16)\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n    local redis_key = cmd.ID .. '_airclaen_taskconfig'\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n    for i = 2, 15, 2 do --01  只有1 且1是便捷任务  23  45  67  89 ab cd ef  是7组其他任务\n        local task_k = tostring(i)\n        if redis_taskConfigs[task_k] == nil then\n            local taskid_new = i --默认是单任务的 task\n            local kk\n            if isDouble then --如果是双任务   双任务 以开任务号为准\n                kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n                taskid_new = tonumber(kk, 16)\n            elseif isOn then\n                kk = string.format('%01x', tonumber(task_k)) .. '0'\n                taskid_new = tonumber(kk, 16)\n            elseif isOff then\n                kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n                taskid_new = tonumber(kk, 16)\n            end\n            log.debug('test_airclear_mop_0901   自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n            return taskid_new\n        end\n    end\n    return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('test_airclear_mop_0901   使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\ngetlooptype = function(str)\n    local slen = string.len(str)\n    local looptype_num = 0\n    if slen == 8 then\n        for i = 0, 7, 1 do\n            local index = -1 * (i + 1)\n            local one = string.sub(str, index, index)\n            --print('one='..one)\n            if one == '1' then\n                looptype_num = looptype_num + 2 ^ i\n            --print('looptype_num='..one)\n            end\n        end\n    end\n    local int_num = tonumber(string.format('%d', looptype_num))\n    return int_num\nend\n\nfunction byte2bin(n)\n    local t = {}\n    for i = 7, 0, -1 do\n        t[#t + 1] = math.floor(n / 2 ^ i)\n        n = n % 2 ^ i\n    end\n    return table.concat(t)\nend\n\ngetBinHard = function(binName)\n    local Hard_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'H' then\n                Hard_version = tonumber(string.sub(value, 2, -1))\n                return Hard_version\n            end\n        end\n    end\n    return Hard_version\nend\n\n\ngetBinSoft = function(binName)\n    local soft_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'S' then\n                soft_version = tonumber(string.sub(value, 2, -1))\n                return soft_version\n            end\n        end\n    end\n    return soft_version\nend\n\nsplit = function(s, delim)\n    if type(delim) ~= 'string' or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n        local pos = string.find(s, delim, start, true) -- plain find\n        if not pos then\n            break\n        end\n\n        table.insert(t, string.sub(s, start, pos - 1))\n        start = pos + string.len(delim)\n    end\n    table.insert(t, string.sub(s, start))\n\n    return t\nend	INLINE	2020-11-11 17:18:57.535+08	2020-12-02 11:24:20.664+08	2020-11-11	\N
e9f68832-4caa-4bbb-a61d-29e1e6b33016	shzr_550D	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n\nstart=function()\n    log.debug("start %s, ctx=%s", "shzr_RN55D.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("shzr_RN55D 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n    buff='aa08' .. moduleNo .. '03000000bb'\n \n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("shzr_RN55D  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shzr_RN55D m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n\t\n        local symbol=string.sub(hex,9,10)\n\t\t\n        local physicalvalue =string.sub(hex,11,16)\n\t\tif symbol=='00' then\n\t\t    physicalvalue=tonumber(physicalvalue)\n\t\telseif symbol=='01' then\n\t\t\n\t\t\tphysicalvalue=-1*tonumber(physicalvalue)\n\t\tend\n        log.debug("shzr_RN55D  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            physicalvalue=physicalvalue/10\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shzr_RN55D m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    --[[if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end]]--\n    return true\n--crc\nend\n\n \n\n	INLINE	2020-10-28 10:10:42.639+08	2020-11-11 16:53:05.247+08	2020-10-28	\N
a83bd7a7-d18e-480b-b0df-40bc78fcc3a9	home_humi_mop_09	\N		1.0	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	Lua	start = function()\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    --local r1, r1ok = redis.set('00000001_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_air_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_air_taskconfig', clearValue)\n    --log.debug('home_humi_mop_0901  测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n    log.debug('home_humi_mop_0901    device=%s', json.encode(device))\n    local deviceId = device.props.device_id\n    --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n    local paramStr = capability.param\n    log.debug('home_humi_mop_0901   [%s] capability=%s', deviceId, paramStr)\n    local paramData = json.decode(paramStr)\n\n    if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n        local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n        if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断，由于涉及到是否redis存储成功\n            sendMsgToDeviceTopic(app_cmd)\n        end\n    else\n        log.debug('home_humi_mop_0901   [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n    end\n    local result = json.encode(out)\n    log.debug('home_humi_mop_0901   [%s]  返回APP 控制结果=%s', deviceId, result)\n    --ctx:sleep(1)\n    ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n    --将指令发送到  设备的topic\n    local dev_topic = msg.ID .. '_device_rece'\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n    log.debug('home_humi_mop_0901   [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n    local cmd = {}\n    cmd.from = 'server'\n    cmd.ID = id\n    cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n    cmd.code = code\n    cmd.cmd = cmdType\n    if cmdType == 267 then --app查询功能\n        if code == 4 then --定时任务查询\n            local redis_key = cmd.ID .. '_air_taskconfig'\n            local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n            --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n            local array_taskConfigs = {}\n            for _, v in pairs(redis_taskConfigs) do\n                if v.looptype ~= nil then\n                    v.looptype = byte2bin(v.looptype)\n                    --taskID转为实际id\n                    local real_tsakId = tonumber(_)\n                    --app查询得到实际的id\n                    local jia_tsakId = tonumber(v.task, 16)\n                    local hexEn = string.format('%02x', tonumber(v.en))\n                    v.task = tonumber(real_tsakId)\n                    v.en = hexEn\n                end\n                table.insert(array_taskConfigs, v)\n            end\n\n            out.data.params = array_taskConfigs\n            log.debug('home_humi_mop_0901   out.data.params=%s', json.encode(array_taskConfigs))\n        elseif code == 15 then --报警阈查询   设备只有PM2.5\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n            out.data.params = redis_alarmConfigs\n        end\n    elseif cmdType == 523 then\n        if code == 1 then --初始化 id  即修改id\n            cmd.id = newconfig\n        elseif code == 2 then --修改电源开关\n            cmd.params = newconfig\n        elseif code == 3 then --风速挡位设置\n            cmd.params = newconfig\n        elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改  或者使能\n            --taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串  '10',  平台需要转换成16\n            if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n                newconfig.looptype = getlooptype(newconfig.looptype)\n            end\n            local isDouble = true\n            local isTask_on = true\n            local isTask_off = true\n            if newconfig.time_on == nil then\n                isDouble = false\n                isTask_on = false\n            end\n            if newconfig.time_off == nil then\n                isDouble = false\n                isTask_off = false\n            end\n            if newconfig.task == 255 then\n                --255  任务号自增\n\n                newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n            else\n                --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n                local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n                newconfig.task = doubleTaskId\n            end\n            cmd.params = newconfig\n        elseif code == 6 then --定时删除设置\n            newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后，在监听协议中更新redis\n            cmd.params = newconfig\n        elseif code == 7 then --杀菌灯开关控制\n            cmd.params = newconfig\n        elseif code == 8 then --负离子开关控制\n            cmd.params = newconfig\n        elseif code == 9 then --加湿器开关控制\n            cmd.params = newconfig\n        elseif code == 10 then --加湿器挡位设置\n            cmd.params = newconfig\n        elseif code == 11 then --设备模式控制\n            cmd.params = newconfig\n        elseif code == 12 then --童锁开关控制\n            cmd.params = newconfig\n        elseif code == 13 then --远程升级 app发起 然后  平台redis存储升级包 ，平台与设备交互，上报升级状态\n            binCache.params = getPackageList(newconfig.binBuff)\n            binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n            --将升级包存储 redis\n            local redis_key_bin = cmd.ID .. '_air_bin'\n            local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n            if isSetOK == true then\n                log.debug('home_humi_mop_0901   [%s][code=%s]  准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n                local dataObject = cmd\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 513加湿器  257  净化器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.hard = getBinHard(newconfig.binName)\n                --防止为空16=0x10 初始版本\n                dataObject.params.soft = getBinSoft(newconfig.binName)\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                dataObject.params.CRC = binCache.params.CRC\n                log.debug('home_humi_mop_0901   [%s][code=%s]  准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n                sendMsgToTopic(dataObject, 'device')\n            else\n                log.debug('home_humi_mop_0901   [%s][code=%s]  存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n            end\n        elseif code == 15 then --报警阈值设置   设备只有PM2.5\n            cmd.params = newconfig\n            local redis_key_alarm = cmd.ID .. '_air_alarmconfig'\n            --同时平台留存一份 后续app or设备 同步所有定时任务用\n            setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n            log.debug('home_humi_mop_0901   [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n        elseif code == 17 then --加湿器 恒湿设置\n            cmd.params = newconfig\n        end\n    end\n\n    return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    log.debug('home_humi_mop_0901  进入固件升级发送函数  [%s][code=%s]', msg.ID, msg.code)\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    log.debug('home_humi_mop_0901  固件升级发送函数  [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    log.debug('home_humi_mop_0901   [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    local cmd_code = cmd_obj.code\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n\n    local tb = redis_taskConfigs[tsakId]\n    return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_air_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('home_humi_mop_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 then --添加或修改\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_humi_mop_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('home_humi_mop_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('home_humi_mop_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        redis_taskConfigs[tsakId] = nil\n        log.debug('home_humi_mop_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('home_humi_mop_0901   [%s][code=%s]  r1=%s[%s],r1ok=%s  key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('home_humi_mop_0901   [%s][code=%s]    taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('home_humi_mop_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n    return r1ok\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr) / 2\n    local count = len / 1024\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n    --添加整个文件校验\n    local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n    local allcrc = string.sub(allAppendCrc16, -4, -1)\n    packageParams.CRC = tonumber(allcrc, 16)\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n    local redis_key = cmd.ID .. '_air_taskconfig'\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n    for i = 2, 15, 2 do --01  只有1 且1是便捷任务  23  45  67  89 ab cd ef  是7组其他任务\n        local task_k = tostring(i)\n        if redis_taskConfigs[task_k] == nil then\n            local taskid_new = i --默认是单任务的 task\n            local kk\n            if isDouble then --如果是双任务   双任务 以开任务号为准\n                kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n        \t\ttaskid_new = tonumber(kk, 16)\n            elseif isOn then\n                kk = string.format('%01x', tonumber(task_k)) .. '0'\n                taskid_new = tonumber(kk, 16)\n            elseif isOff then\n                kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n                taskid_new = tonumber(kk, 16)\n            end\n            log.debug('home_humi_mop_0901   自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n            return taskid_new\n        end\n    end\n    return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('home_humi_mop_0901   使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\ngetlooptype = function(str)\n    local slen = string.len(str)\n    local looptype_num = 0\n    if slen == 8 then\n        for i = 0, 7, 1 do\n            local index = -1 * (i + 1)\n            local one = string.sub(str, index, index)\n            --print('one='..one)\n            if one == '1' then\n                looptype_num = looptype_num + 2 ^ i\n            --print('looptype_num='..one)\n            end\n        end\n    end\n    local int_num = tonumber(string.format('%d', looptype_num))\n    return int_num\nend\n\nfunction byte2bin(n)\n    local t = {}\n    for i = 7, 0, -1 do\n        t[#t + 1] = math.floor(n / 2 ^ i)\n        n = n % 2 ^ i\n    end\n    return table.concat(t)\nend\n\ngetBinHard = function(binName)\n    local Hard_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'H' then\n                Hard_version = tonumber(string.sub(value, 2, -1))\n                return Hard_version\n            end\n        end\n    end\n    return Hard_version\nend\n\ngetBinSoft = function(binName)\n    local soft_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'S' then\n                soft_version = tonumber(string.sub(value, 2, -1))\n                return soft_version\n            end\n        end\n    end\n    return soft_version\nend\n\nsplit = function(s, delim)\n    if type(delim) ~= 'string' or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n        local pos = string.find(s, delim, start, true) -- plain find\n        if not pos then\n            break\n        end\n\n        table.insert(t, string.sub(s, start, pos - 1))\n        start = pos + string.len(delim)\n    end\n    table.insert(t, string.sub(s, start))\n\n    return t\nend	INLINE	2020-09-07 16:08:49.804+08	2021-01-19 18:09:57.766+08	2020-09-07	\N
544ff068-a704-41f2-aebc-72d263f455a1	test_airclear_0901	\N		1.0	f9927e7e-69c2-439e-916f-4981e6821dfa	f9927e7e-69c2-439e-916f-4981e6821dfa	f	f9927e7e-69c2-439e-916f-4981e6821dfa	Lua	start = function()\n    --local str="484f0020d54200083f710008b96600083b710008d56100087b7e000800000000000000000000000000000000997400089163000800000000cd71000809760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000875760008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008417a0008c97a0008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef420008ef42000800f002f800f092f80aa090e8000c82448344aaf10107da4501d100f087f8aff2090ebae80f0013f0010f18bffb1a43f001031847ecba00000cbb0000103a24bf78c878c1fad8520724bf30c830c144bf04680c60704700000023002400250026103a28bf78c1fbd8520728bf30c148bf0b6070476e2900f09184702900f0878166290bf02a8065290bf0278067290bf0248061290bf0238003681b0a28bf41f08001692900f0f880642900f0f580752900f0f2806f2900f08587782900f05381e92900f01f87e42900f01c87f52900f01987ef2900f08287f82900f052810368db0928bf41f08001632900f0a086732900f0a586e32901f09581f32901f09a81002070471fb50af0e3ff00f075ff0400002000210af0c8f9401c6060002000210af0d8f9e0601fbd10b510bd01f015fa1146fff7e7ff05f029f801f033fa03b4fff7f2ff03bc01f033fa00000948804709480047fee7fee7fee7fee7fee7fee7fee7fee7fee7fee704480549054a064b704700000d7600088941000848490020484f0020484b0020484b002010b5044600f086fb0068005dc00602d504f1200010bd204610bd00001cb50c46064b7b4469460090204600f018fe04460020694600f026fe20461cbd5f0c00000fb41cb5084b06aa7b4469460090059800f005fe04460020694600f013fe20461cbc5df814fb0000390c000070b5044685690068c10601d5302600e02026c00707d070bdd4e9012130469047206a401c20626d1ef6d570bd70b5044685690078c00707d170bdd4e9012120209047206a401c20626d1ef6d570bd70b50c460546012a05d02878800600d5ea69002302e0012305e05b1c934202d2e05c0028f9d1a869e618c01aa861286a1844"\n    --local appendCrc16 = iota.appendHexCrc(str, 'B', 0)\n    --local crc16str = string.sub(appendCrc16, -4, -1)\n    --local crc16 = tonumber(crc16str, 16)\n    -- log.debug('home_airclear_0901 校验16=%s', crc16)\n    log.debug('home_airclear_0901 device=%s', json.encode(device))\n    --onData('')\nend\n\nlocal binCache = {params = {subList = {}}}\n--固件升级包 缓存结构\n--binCache ={params = {subList = {}}, updateTime = '2020-09-23 06:01:06',size=12345678,count=20}\nonData = function(mq_body)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    local receiveStr = mq_body.payload\n    log.debug('home_airclear_0901   receiveStr=%s', receiveStr)\n    --解析数据\n    local dataObject = json.decode(receiveStr)\n    log.debug('home_airclear_0901  [%s][code=%s]  receiveStr=%s', dataObject.ID, dataObject.code, receiveStr)\n    if dataObject ~= nil then\n        --判断数据源 是appProxy 还是 device\n        --设备数据类型\n        -- code:0x01 设备信息上报\n        -- code:0x02 心跳上报\n        -- code:0x03 周期上报  设备数据与状态\n        -- code:0x04 报警上报\n        -- code:0x05 时间同步上报\n        if dataObject.from == 'device' then\n            if dataObject.cmd == 1035 and dataObject.result == 0 then\n                if dataObject.code == 2 then --电源开关\n                    local powerlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.powerlock = powerlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 3 then --风速挡位\n                    local windgear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.windgear = windgear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 or dataObject.code == 5 or dataObject.code == 6 then --设备返回的 定时设置应答\n                    --将设置成功的有效任务 存进redis\n                    local newconfig = dataObject.params\n                    taskCacheUpdate(dataObject.ID, newconfig, dataObject)\n                    --将 dataObject 发给 app作为响应\n                    dataObject.params.result = dataObject.result\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 7 then --杀菌灯开关回应\n                    local uvlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.uvlock = uvlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 8 then --负氧离子\n                    local NegativeO2lock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.NegativeO2lock = NegativeO2lock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 9 then --加湿器开关\n                    local humilock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.humilock = humilock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 10 then --加湿器挡位\n                    local gear = dataObject.params.gear\n                    dataObject.params = {}\n                    dataObject.params.humigear = gear\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 11 then --设备工作模式 0自动 1手动 2睡眠\n                    local mode = dataObject.params.mode\n                    dataObject.params = {}\n                    dataObject.params.mode = mode\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 12 then --童锁开关回应\n                    local childlock = dataObject.params.onoff\n                    dataObject.params = {}\n                    dataObject.params.childlock = childlock\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 13 then --远程升级触发后，设备回应 要第几包，平台按需发送\n                    if dataObject.params.frame == 1 then --设备请求第一包的时候  平台重新获取redis 做缓存\n                        local redis_key_bin = dataObject.ID .. '_air_bin'\n                        --更新 升级 固件 缓存\n                        binCache = getRedisValue_obj(redis_key_bin, dataObject)\n                    end\n                    --升级文件流 缓存,拆解成多个小包\n                    -- binCache.buff = dataObject.params.binBuff\n                    -- binCache.size = string.len(binCache.buff)\n                    -- binCache.params = getPackageList(binCache.buff)\n                    log.debug('home_airclear_0901  [%s][code=%s]  平台收到 设备升级 回应，准备下发升级包[第%s/%s包]', dataObject.ID, dataObject.code, dataObject.params.frame, binCache.params.count)\n\n                    --dataObject.params.updateState = dataObject.params.sign -- 1:拒绝升级2：准备升级3：升级中4：完成升级\n\n                    --设备准备升级 or 升级中 发送固件包\n                    if dataObject.params.sign == 2 or dataObject.params.sign == 3 then\n                        if dataObject.params.frame ~= nil then\n                            dataObject.from = 'server'\n                            dataObject.cmd = 523\n                            local frameIndex = dataObject.params.frame\n                            dataObject.params = {}\n                            dataObject.params.type = 2 --服务器正在升级设备\n                            dataObject.params.frame = frameIndex\n\n                            local sub_bin = binCache.params.subList[frameIndex]\n\n                            if sub_bin ~= nil then\n                                dataObject.params.bin = sub_bin.buff\n                                dataObject.params.len = sub_bin.len\n                                dataObject.params.crc16 = sub_bin.checkint\n                            end\n\n                            --数据发送到appProxy    binCache.params.count\n                            sendMsgToTopic(dataObject, 'device')\n                        end\n                        dataObject.params.updateState = 'isworking' --升级中\n                    elseif dataObject.params.sign == 4 then\n                        if dataObject.params.msg == 2 then\n                            dataObject.updateState = 'ok' -- 完成升级\n                        else\n                            dataObject.params.updateState = 'fail'\n                        end\n                    elseif dataObject.params.sign == 1 then\n                        dataObject.params.updateState = 'fail'\n                    end\n                    dataObject.params.flag = getSoftUpdateMsg(dataObject.params.sign, dataObject.params.msg)\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 15 then --报警阈值设置回应\n                    local result = dataObject.result\n                    dataObject.params = {}\n                    dataObject.params.result = result --0代表设置成功\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 17 then --恒湿设置回应\n                    local fixhumi = dataObject.params.value\n                    dataObject.params = {}\n                    dataObject.params.fixhumi = fixhumi\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 19 then --智能开关设定回应\n                    dataObject.params.smartlock = dataObject.params.en\n                    dataObject.params.PM2_5H = dataObject.params.up\n                    dataObject.params.PM2_5L = dataObject.params.down\n                    sendMsgToTopic(dataObject, 'app')\n                end\n            elseif dataObject.cmd == 63499 then\n                if dataObject.code == 1 then --软硬件 版本主动上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 2 then --心跳上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 3 then\n                    --ackToDevice(dataObject)--取消数据应答20200928 与硬件确认\n                    if dataObject.params ~= nil then\n                        out.data.temperature = tonumber(string.format('%0.1f', dataObject.params.TEMP))\n                        out.data.humidity = dataObject.params.HUMI\n                        out.data.PM2_5H = dataObject.params.PM2_5H --pm2.5上限\n                        out.data.pm25 = dataObject.params.PM2_5\n                        out.data.PM2_5L = dataObject.params.PM2_5L --pm2.5下限\n                        out.data.ch2o = dataObject.params.CH2O --甲醛\n                        out.data.tvoc = dataObject.params.TVOC --有机气态物质\n                        out.data.fogs = tonumber(string.format('%0.1f', dataObject.params.fogs)) -- 本次开机加湿量 L 唐露芝20200928 qq群确认\n                        out.data.airs = dataObject.params.airs --本次净化量\n\n                        out.data.powerlock = dataObject.params.power --开关\n                        out.data.windgear = dataObject.params.wind --风速挡位  0:自动,1：1档，2：2档，3：3档， 4：4档\n                        --out.data.timcnt = dataObject.params.timcnt --定时个数\n                        out.data.uvlock = dataObject.params.UV --UV杀菌灯开关  1：打开   0：关闭\n                        out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态  1：打开   0：关闭\n                        out.data.humilock = dataObject.params.humista --加湿器开关状态      1：打开   0：关闭\n                        out.data.humigear = dataObject.params.humigear -- 加湿器挡位  1:L1 2:L2 3:L3 4:L4\n                        out.data.clean = dataObject.params.clean --净化开关  1：打开   0：关闭\n                        out.data.childlock = dataObject.params.chlock --童锁开关状态1：打开   0：关闭\n                        out.data.smartlock = dataObject.params.smart --智能开关状态1：打开   0：关闭\n\n                        out.data.USE_M = dataObject.params.USE_M --滤芯使用时间(分钟)\n                        out.data.CLEAN_M = dataObject.params.CLEAN_M --净化时长(分钟)\n                        out.data.qtime = dataObject.params.qtime --设备端的定时关小时数，最大12H\n                        out.data.water = dataObject.params.water --水位感应开关  0:正常 1:缺水\n                        out.data.mode = dataObject.params.mode --设备工作模式 0自动 1手动 2睡眠\n                        out.data.hard = dataObject.params.hard --硬件版本号\n                        out.data.soft = dataObject.params.soft --软件版本号\n                    else\n                        log.debug('home_airclear_0901   [%s][code=%s]  dataObject.params =nil', dataObject.ID, dataObject.code)\n                    end\n                    dataObject.params = out.data\n                    sendMsgToTopic(dataObject, 'app')\n                elseif dataObject.code == 4 then --报警上报\n                    ackToDevice(dataObject)\n                elseif dataObject.code == 5 then --时间同步 服务器\n                    local timeNow = getTime()\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n                    dataObject.params.date = timeNow\n                    sendMsgToTopic(dataObject, 'device')\n                elseif dataObject.code == 6 then --定时任务同步 服务器\n                    dataObject.from = 'server'\n                    dataObject.cmd = 64011\n                    dataObject.params = {}\n\n                    --读取redis\n                    local redis_key = dataObject.ID .. '_airclaen_taskconfig'\n                    local redis_taskConfigs = getRedisValue_obj(redis_key, dataObject)\n                    local array_taskConfigs = {}\n                    for _, v in pairs(redis_taskConfigs) do\n                        --如果是 同时开关任务，设备同步的时候，任务号要分开  丢弃\n                        --if v.time_on and v.time_off then\n                            --v.task = transferDoubleTaskId(v.task, true, false, false)\n                        --end\n                        table.insert(array_taskConfigs, v)\n                    end\n                    dataObject.params = array_taskConfigs\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                end\n            end\n        elseif dataObject.from == 'app' then --测试使用  实际app不会发\n            if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n                log.debug('home_airclear_0901 [%s][code=%s] 平台收到 app升级 通知，准备 通知 设备', dataObject.ID, dataObject.code)\n                --升级文件流 缓存,拆解成多个小包\n                --binCache.buff = dataObject.params.binBuff\n                --binCache.params = getPackageList(binCache.buff)\n                binCache.params = getPackageList(dataObject.params.binBuff)\n                binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                --数据发送到appProxy    周期上报的数据 code= 13和\n                log.debug('home_airclear_0901   [%s][code=%s][binCache.updateTime=%s]  开始通知 设备 升级', dataObject.ID, dataObject.code, binCache.updateTime)\n                sendMsgToTopic(dataObject, 'device')\n            end\n        elseif dataObject.from == 'clear' then\n            clearTask(dataObject.ID)\n        else\n            log.debug('home_airclear_0901  [%s][code=%s]  非法数据 =%s', dataObject.ID, dataObject.code, receiveStr)\n        end\n    else\n        log.debug('home_airclear_0901 dataObject =nil')\n    end\n\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('home_airclear_0901 result=%s', json.encode(out))\n    if next(out.data) ~= nil or next(out.result) ~= nil then\n        ctx:notify(resultData)\n    end\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 2048\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n        --发给app的时候  软件版本比如17要改成1.1\n        if msg.params.soft ~= nil then\n            msg.params.soft = softNumbertoVersion(msg.params.soft)\n            msg.params.hard = softNumbertoVersion(msg.params.hard)\n        end\n        msg.params.bin = nil --节省资源\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n    local topic = rawDataObject.ID .. '_device_rece'\n    rawDataObject.from = 'server'\n    rawDataObject.packid = os.time()\n    rawDataObject.cmd = 64011\n    rawDataObject.params = 'null'\n    rawDataObject.result = 0\n    local msgStr = json.encode(rawDataObject)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', rawDataObject.ID, topic, msgStr, ok, ack)\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetTime = function()\n    local timenum = os.time()\n    local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n    --空气净化器最后还要带 周几下去\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    --local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n\n    local week = getWeek_comm(year, month, day)\n    local recordTime = string.format('%s %s', dateStr, week)\n    return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n    if m == 1 or m == 2 then\n        m = m + 12\n        y = y - 1\n    end\n    local m1, _ = math.modf(3 * (m + 1) / 5)\n    local m2, _ = math.modf(y / 4)\n    local m3, _ = math.modf(y / 100)\n    local m4, _ = math.modf(y / 400)\n\n    local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n    local weekTab = {\n        ['0'] = 1,\n        ['1'] = 2,\n        ['2'] = 3,\n        ['3'] = 4,\n        ['4'] = 5,\n        ['5'] = 6,\n        ['6'] = 0 --周日是 0\n    }\n    return weekTab[tostring(iWeek)]\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('home_airclear_0901   [%s][code=%s]  [getRedis] r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('home_airclear_0901   [%s][code=%s]  [getRedis]  taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('home_airclear_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 or cmd_code == 5 then --添加或修改  或取消任务\n        --如果是自增任务的设备返回 先解析任务id\n        if taskConfig.time_on then --只要on大于0 必然 任务id >16\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 1, 1)\n            -- 避免单任务取到0的情况\n            log.debug('home_airclear_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        elseif taskConfig.time_on == nil then\n            local hexTaskId = string.format('%02x', tonumber(tsakId))\n            local real_tsakId = string.sub(hexTaskId, 2, 2)\n            -- 避免单任务取到0的情况\n            log.debug('home_airclear_0901   自增任务 首次插入 real_tsakId=%s[%s]', real_tsakId, type(real_tsakId))\n            tsakId = real_tsakId\n        end\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_airclear_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('home_airclear_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('home_airclear_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n\telseif cmd_code == 6 then --删除任务\n        local real_tsakId = get_delete_id(redis_taskConfigs, tonumber(tsakId))\n        redis_taskConfigs[real_tsakId] = nil\n        log.debug('home_airclear_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\nget_delete_id = function(redis_tasks, delete_id)\n    for key, value in pairs(redis_tasks) do\n        if value.task == delete_id then\n            return key\n        end\n    end\n    log.debug('home_airclear_0901   无法删除任务 delete_id=%s 没有匹配项目', delete_id)\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('home_airclear_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s,key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, key, setValue)\n    return r1ok\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('home_airclear_0901    任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\n\n--清空redis的 task缓存\nclearTask = function(deviceID)\n    local clear_key = string.format('%s_airclaen_taskconfig', deviceID)\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    local r1, r1ok = redis.set(clear_key, clearValue)\n    --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\nend\n\nsoftNumbertoVersion = function(soft_num)\n    local hex_str = string.format('%02x', soft_num)\n    local s10 = string.sub(hex_str, 1, 1)\n    local s1 = string.sub(hex_str, 2, 2)\n    local number_str = string.format('%s.%s', tonumber(s10, 16), tonumber(s1, 16))\n    return number_str\nend\n\ngetSoftUpdateMsg = function(signid, msgid)\n    local k = string.format('%s,%s', signid, msgid)\n    local msgs = {\n        ['1,1'] = '不支持升级',\n        ['1,2'] = '已是最新版本',\n        ['1,3'] = '其他错误',\n        ['2,1'] = '升级A区域',\n        ['2,2'] = '升级B区域',\n        ['3,1'] = '校验错误重发',\n        ['3,2'] = '校验正确发下一帧',\n        ['4,1'] = '升级出错',\n        ['4,2'] = '升级成功'\n    }\n    return msgs[k]\nend	INLINE	2020-11-11 17:18:23.999+08	2020-12-10 10:28:24.022+08	2020-11-11	\N
f01703db-289c-4463-a196-f8487c24252b	fs_laser_9505	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	\nstart=function()\n    local endian = 'B'\n    local buff=''        \n    buff = iota.appendHexByte(buff, 0x3a, endian)\n    buff = iota.appendHexByte(buff, device.uplink.props.module, endian)\n    buff = iota.appendHexByte(buff, 0x05, endian)\n    buff = iota.appendHexByte(buff, 0x00, endian)\n    local byte = iota.hexCheckPlusSum(buff, 0, 3)\n    buff = buff..string.format("%02X",byte) \n    buff = iota.appendHexByte(buff, 0x0d, endian)\n    buff = iota.appendHexByte(buff, 0x0a, endian)\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n        result = unmarshall(resp)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n--3a0105010204000905550d0a     module=1\n--"length": 12.409500000000001\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local Data ={}\n        local resp = ""\n        local len = Calculation(hex)\n        out.data = {\n            length = len\n        }\n    else\n        message = 'Invalid Msg, len='..string.len(hex)\n        out.result = {code = errcode, msg = message}\n    end\n    return json.encode(out)\nend\n\nIsValid=function(data)\n    if data == nil or string.len(data)/2 ~= 12 then \n        errormsg = 'Data is nil or Length not right'\n        errcode = 1002\n        return false\n    elseif iota.hexToByte(data,0,'B') ~= 0x3a or iota.hexToByte(data,10,'B') ~= 0x0d or iota.hexToByte(data,11,'B') ~= 0x0a then\n        errormsg = 'Data is Invalid'\n        errcode = 1003\n        return false\n    else \n        return true\n    end\n    --iota.checkPlusSum16\n\n    return true\n--crc\nend\n\n\nfunction Calculation(data)\n    local len = 0\n    for i=0, string.len(data)/2 -1 do\n        if i>=3 and i<9 then\n            if i == 3 then \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 10)\n            elseif i == 4 then\n                len = len + tonumber(iota.hexToByte(data,i,'B'))\n            elseif i == 5 then\n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.1)\n            elseif i == 6 then\n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.01)\n            elseif i == 7 then \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.001)\n            else \n                len = len + tonumber(iota.hexToByte(data,i,'B') * 0.0001)\n            end\n        end\n    end\n    return len \nend	INLINE	2019-11-21 16:05:21.285+08	2019-11-21 16:05:21.285+08	2019-11-21	\N
1a7ebe09-0b00-4bb6-834e-2e0a6899f3d2	T440	\N	复制的隼星	1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--//04 项目资料/2017-07/南京基泰沉降监测项目/MCU32数据采集说明书.pdf\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--32个通道\n--测试536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3355494e2056313d322e3334352056323d302e3030332049333d32302e3030302049343d302e3030302056353d302e39382049363d312e35362049373d322e3134352056383d312e323030201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n--24个通道\n--536e3d30303030312041697220543d2d2d2d202020537570706c793d31322e372008750d0a31362f30382f30332031303a30313a3036204d3143584e20446967313d2d37333320446967323d3020446967333d3020446967343d3020446967353d3020446967363d3020446967373d3020446967383d3020103f0a31362f30382f30332031303a30313a3036204d325a584e204d313d363534372e352054313d32352e38204d323d323835312e372054323d32362e31204d333d302e302054333d2d2d2d204d343d302e302054343d2d2d2d204d353d302e302054353d2d2d2d204d363d302e302054363d2d2d2d204d373d302e302054373d2d2d2d204d383d302e302054383d2d2d2d201a3f0d0a30382f30332031303a3031204d3453574e205761746572313d343039352042617365313d313230302e3035205761746572323d31342042617365323d332e3132204d617857696e53706565643d31302e3220446972656374696f6e3d3930204176657257696e53706565643d332e35205265616c54496d6557696e53706565643d302e3120446972656374696f6e3d323730204163635261696e3d30303132332e35201a3f0d0a\n start=function()\n    -- log.debug("load script %s, moduleId=%s", "cdaj_440.lua", device.props.moduleId or "[nil]")\n     -- log.debug("cdaj_440:".."LUA: ctx is =%s", json.encode(device))\n    ok,resp=ctx:ssend("01020304",15000)\n   -- log.debug("cdaj_440:".."测试下发01020304正常")\n end\n\nonData=function(hex)\n    --log.debug("cdaj_440收到数据=%s", hex)\n\t--log.debug("cdaj_440 device =%s", json.encode(device))\n    --log.debug("cdaj_440subdevices  data is =%s", json.encode(device.dnlinks[1].devices))\n\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n    local ModuleChar = "M=";--振弦\n    local DigChar = "Di";--测斜\n    local VoltageChar = "V=";--电压\n    local CurrentChar = "I=";--电流\n    local WaterChar = "Wa";--水文\n\tlocal ResistanceChar="R=";--电阻(差阻)\n\n\n    --数据域 内的索引号\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        sData=toStrHex(hex)\n        --log.debug("cdaj_440:sData是 %s",sData)\n        --获取子字符串表\n        local allResponse=Split(sData,'\\n')\n        --移除表内的“”和nil\n        for k,v in ipairs(allResponse) do\n            if v=='' or v==nil then\n            table.remove(allResponse,k)\n                --log.debug("cdaj_440:".."表内的“”和nil 移除元素为 "..tostring(allResponse[k]))\n            end\n        end\n\n        --分析单类数据\n        for k,v in ipairs(allResponse) do\n            local singleData=Split(v,' ')\n            --移除单类数据中的空 \n            for kk,vv in ipairs(singleData) do\n                if vv=='' or vv==nil then\n                    --print("移除元素为 ",singleData[kk])\n                    table.remove (singleData,kk)\n                end\n            end\n\n            if k>1 then\n                local temp1=singleData[2+1]\n                local moudleStr=string.sub(singleData[2+1],2,2)\n                local moduleNo=tonumber(moudleStr)\n                --解析单条数据\n                for kkk,vvv in ipairs(singleData) do\n                    log.debug("cdaj_440:遍历解析单条数据 键="..tostring(kkk).." 值="..tostring(vvv))\n                  \n                    local type_sensor=string.sub(string.gsub(singleData[kkk],"%d",""),1,2)\n                    log.debug("cdaj_440: type_sensor="..type_sensor) \n                    if string.len(type_sensor) >=2 then\n                       --频率\n                        if type_sensor==ModuleChar then\n                            local length = string.len(singleData[kkk]) - 3;\n                            local tempLength = string.len(singleData[kkk + 1]) - 3;\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local Module =tonumber(string.sub(singleData[kkk],4, -1))\n                            local tempData = string.sub(singleData[kkk+1],4, 4+tempLength);\n                            local Frequency = math.sqrt(Module*1000);\n                            local Temp;\n                            local Phy\n              \t\t\t    local Length\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备 模块%s,通道%s原型childDevice=%s",moduleNo,channelNo,json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备 模块%s,通道%s deviceId=%s ",moduleNo,channelNo,tostring(deviceId))\n\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:振弦模块： 模块%s,通道%s 公式参数=%s,%s,%s,%s,%s",moduleNo,channelNo,K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440   模块%s,通道%s 当前的Frequency是:%s,%s",moduleNo,channelNo,Frequency,Temp)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Module  --经过厂家确认  公式带入的是模数\n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440 模块%s,通道%s当前的Phy是:%s",moduleNo,channelNo,Phy)\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(振弦)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("cdaj_440:振弦模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tfrequency=tonumber(string.format("%0.3f",Frequency)),\n\t\t\t\t\t\t\t\t\ttemperature=tonumber(string.format("%0.2f",Temp)),\n\t\t\t\t\t\t\t\t\tphysicalvalue=tonumber(string.format("%0.3f",Phy)),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlog.debug("cdaj_440:(振弦) Phy结果=%s",Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n\n                        --电压\n                        if type_sensor== VoltageChar then\n                            local length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Voltage =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t     \n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电压模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块当前的Voltage是:%s,%s",Voltage,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Voltage         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电压模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend                                     \t \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t--log.debug("cdaj_440:(电压)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n                       \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={voltage=Voltage,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                            \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend\n                     \n\t\t\t\t\t\t--电流\n\t\t\t\t\t\tif type_sensor==CurrentChar then\n\t\t\t\t\t\t\tlocal length = string.len(singleData[kkk]) - 3;\n\t\t\t\t\t\t\tlocal channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n\t\t\t\t\t\t\tlocal Current =tonumber(string.sub(singleData[kkk],4, -1))\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\t--获取通道设备deviceId\n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tlocal Temp=0;--电流模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\tlocal Fi=Current         \n\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:电流模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\tend            \n                        \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(电流)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={current=Current,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                          \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\tend                          \n\n\t\t\t\t\t\t--水文\n\t\t\t\t\t\tif type_sensor==WaterChar then\n\t\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\t\tif string.sub(singleData[kkk],1,6)== "Water1" then\n\t\t\t\t\t\t\t\tlocal waterData = GetSWData(singleData, kkk);                            \n  \n\t\t\t\t\t\t\t\tfor i=1,8,1 \n\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t--获取通道设备deviceId \n\t\t\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,i)\n\t\t\t\t\t\t\t\t\t--\n\t\t\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(水文)子设备原形childDevice=%s",json.encode(childDevice))\n\t\t\t\t\t\t\t\t\t\tlog.debug("cdaj_440:(水文)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\t\tlocal K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:水文模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t   local Temp=0;--水文模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t   --log.debug("cdaj_440:水文模块当前的Current是:%s,%s",Current,Temp)\n\t\t\t\t\t\t\t\t\t\t   local Fi=waterData[i]         \n\t\t\t\t\t\t\t\t\t\t   Phy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t   --log.debug("cdaj_440:水文模块当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\t\tend   \n\t\t\t\t\t\t\t\t\telse\n                                   -- log.debug("cdaj_440:(水文)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(i))\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\tlocal data1={\n\t\t\t\t\t\t\t\t\t\tdata={waterdata = waterData[i],\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\t\ttype=1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data1)                                \n\t\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\tend\t\n                        end\n\n                        --测斜\n                        if type_sensor==DigChar then\n\t\t\t\t\t        local Phy\n\t\t\t\t\t        local Length\n\t\t\t\t\t        local Temp\n                            if (string.sub(singleData[kkk],1,3)..string.sub(singleData[kkk],5,5))== "Dig=" then\n                                local channelNo = tonumber(string.sub(singleData[kkk],4, 4),16);\n                                local Inclination =tonumber(string.sub(singleData[kkk],6, -1))\n                                --获取通道设备deviceId\n                \t\t\t    local childDevice=getDeviceInfo(moduleNo,channelNo)\n                \t\t\t    local deviceId\n                                if childDevice~=nil then\n               \t\t\t\t\t    deviceId=childDevice.id\n                             \t    --log.debug("cdaj_440:(测斜)子设备原形childDevice=%s",json.encode(childDevice))\n              \t\t\t\t        --log.debug("cdaj_440:(测斜)子设备deviceId: "..tostring(deviceId))\n\t\t\t\t\t\t\t\t\n                                    local K1 = childDevice.uplink.capabilities[1].formula.props.K1\n\t\t\t\t\t\t\t\t\tlocal K2 = childDevice.uplink.capabilities[1].formula.props.K2\n\t\t\t\t\t\t\t\t\tlocal K3 = childDevice.uplink.capabilities[1].formula.props.K3\n\t\t\t\t\t\t\t\t\tlocal Fo = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\t\t\t\t\t\tlocal Kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\t\t\t\t\t\tlocal To = childDevice.uplink.capabilities[1].formula.props.To\n                                   -- log.debug("cdaj_440:测斜模块公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\t\t\t\t\t\tif K1 ==nil or K2 ==nil or K3 ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tTemp=0;--测斜模块无温度 默认温度0\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:当前的Frequency是:%s,%s",Inclination,Temp)\n\t\t\t\t\t\t\t\t\t\tlocal Fi=Inclination         \n\t\t\t\t\t\t\t\t\t\tPhy = K1*Fi+K2*Fi^2+K3*Fi^3-(K1*Fo+K2*Fo^2+K3*Fo^3)+Kt*(Temp-To)\n\t\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:当前的Phy是:%s",Phy)\n\t\t\t\t\t\t\t\t\tend            \n                         \t \n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t--log.debug("cdaj_440:(测斜)子设备deviceId为nil:m=%s,c=%s",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\t\tdata={inclination=Inclination,\n\t\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\t\tphysicalvalue=Phy,\n\t\t\t\t\t\t\t\t\t\tlength=Length            \t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\t\ttype=1                         \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t--电阻（差阻）\n                        if type_sensor==ResistanceChar then\n\t\t\t\t\t        --local R1Length = string.len(singleData[kkk]) - 3;  --取消\n                            --local r1Length = string.len(singleData[kkk + 1]) - 3; --取消\n                            local channelNo = tonumber(string.sub(singleData[kkk],2, 2),16);\n                            local R1 =tonumber(string.sub(singleData[kkk],4, -1))\n                            local r1 = tonumber(string.sub(singleData[kkk+1],4, -1))\n                            local Temp;\n                            local Phy\n                            if IsNumberic(tempData) then\n\t\t\t\t\t\t\t\tTemp=tonumber(tempData)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tTemp=0;\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--获取通道设备deviceId                     \n\t\t\t\t\t\t\tlocal childDevice=getDeviceInfo(moduleNo,channelNo)             \t\t\t\n\n\t\t\t\t\t\t\tlocal deviceId\n\t\t\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\t\t\tdeviceId=childDevice.id\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s 原形childDevice=%s",tostring(moduleNo),tostring(channelNo),json.encode(childDevice))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s deviceId=%s ",tostring(moduleNo),tostring(channelNo),tostring(deviceId))\n\n\t\t\t\t\t\t\t\tlocal f = childDevice.uplink.capabilities[1].formula.props.f\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s  f!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Zo = childDevice.uplink.capabilities[1].formula.props.Zo \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s  Zo!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal b = childDevice.uplink.capabilities[1].formula.props.b \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s  b!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal a = childDevice.uplink.capabilities[1].formula.props.a \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s  a!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\tlocal Ro = childDevice.uplink.capabilities[1].formula.props.Ro \n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s  Ro!=nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s 参数=%s,%s,%s,%s,%s",tostring(moduleNo),tostring(channelNo),f,Zo,b,a,Ro)\n\t\t\t\t\t\t\t\tif f ==nil or Zo ==nil or b ==nil or a==nil or Ro==nil  then\n\t\t\t\t\t\t\t\t\tPhy=nil\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tTemp=a*(R1+r1-Ro)\n                  \t\t\t\t\tif tonumber(ri)~=0 then\t\t\t\n                                      Phy =f*(R1/r1 -Zo)+b*Temp\n                                      --log.debug("cdaj_440: m=%s,c=%s, 当前的R1=%s,r1=%s,Temp=%s,Phy=%s",tostring(moduleNo),tostring(channelNo),R1,r1,Temp,Phy)\n                    \t\t\t\telse\n                              \t\t\t --log.debug("cdaj_440: 数据无效 m=%s,c=%s, r1=0")\n                                          break\n                  \t\t\t\t\tend\t\n\t\t\t\t\t\t\t\tend            \n                               \n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块m=%s,c=%s deviceId为nil",tostring(moduleNo),tostring(channelNo))\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块：公式%s",device.formula)\n\t\t\t\t\t\t  \n\t\t\t\t\t\t\tlocal data1 = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tResistor1=R1,\n\t\t\t\t\t\t\t\t\tResistor2=r1,\n\t\t\t\t\t\t\t\t\ttemperature=Temp,\n\t\t\t\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t--log.debug("cdaj_440:差阻模块  m=%s,c=%s Phy结果=%s",tostring(moduleNo),tostring(channelNo),Phy)\n\t\t\t\t\t\t\ttable.insert(out.data,data1)\t\t\t\t\t\t\n\t\t\t\t\t\tend\n\n                    end\n\t\t\t\tend\n            end\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    local resultData =json.encode(out)\n    --log.debug("cdaj_440resultData=%s,hex=%s", json.encode(out),hex)\n    ctx:notify(resultData)\n\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n        --log.debug("cdaj_440 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t     --log.debug("cdaj_440:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\t\t--log.debug("cdaj_440 子设备模块通道 接口获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\t  -- log.debug("cdaj_440 子设备模块通道 属性获取 m=%s,c=%s ",moduleStrCheck,channelStrCheck)\n\t\t\tend\n\t\t\t \n        \tif tostring(moduleStrCheck)==tostring(moduleNoId) then\n\t\t  \t  if tostring(channelStrCheck)== tostring(channelNoId) then\n                \n          \t\t --log.debug("cdaj_440:  m=%s c=%s 匹配到 子设备原形child=%s",moduleNoId,channelNoId,json.encode(child))\n                 return child\n           \t  end\n       \t \tend\n\t\tend\n    else\n      -- log.debug("cdaj_440:  subdevices是nil")\n    \treturn nil\n    end\nend\n\nIsValid=function(alldata)\n    --log.debug("cdaj_440 校验开始")\n    if alldata == nil  then\n        errormsg = 'allData is nil'\n        errcode = 1001\n        return false\n    end\n\n    local length=getIndex(alldata)\n    local data=string.sub(alldata,1,length*2)\n    --log.debug("data:"..data)\n    local plu16={}\n    plu16[0]=string.sub(data,-8,-7)\n    plu16[1]=string.sub(data,-6,-5)\n    local plusSum16Hi,plusSum16Lo = iota.hexCheckPlusSum16(data,0,length-4);\n    -- log.debug("cdaj_440:".."plu16[0]是："..plu16[0])\n    -- log.debug("cdaj_440:".."plu16[1]是："..plu16[1])\n    -- log.debug("cdaj_440:".."plusSum16Hi是："..tostring(plusSum16Hi))\n    -- log.debug("cdaj_440:".."plusSum16Lo是："..tostring(plusSum16Lo))\n    --if tonumber(plu16[0],16)~=plusSum16Hi or tonumber(plu16[1],16)~=plusSum16Lo then\n     --   errormsg = 'checkPlusSum16 is false'\n      -- errcode = 1004\n      -- return false\n   -- end\n\n    --log.debug("cdaj_440 校验通过")\n    return true\nend\n\ngetIndex=function(data)--用于IsValid\n    local len=string.len(data)/2\n    for n =1,len do \n        local value=string.sub(data,2*n-1,2*n)\n        if value=='0a' then\n            return n;\n      end\n    end\n    return 0;\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\nend\n\n\n--string split函数\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ntable_leng=function(t)\n        local leng=0\n        for k, v in pairs(t) do\n          leng=leng+1\n        end\n    return leng;\nend\n\n\nIsNumberic=function(s)\n    local n = tonumber(s);\n    if n then\n     return true;   \n    end\n    return false;\n\nend\n\nGetSWData=function(sData,j)\n    local SW={}\n\n    local Water1 = tonumber(string.sub(sData[j],8,-1));\n    local Base1 = tonumber(string.sub(sData[j+1],7,-1));\n\n    local Water2 = tonumber(string.sub(sData[j+2],8,-1));\n    local Base2 = tonumber(string.sub(sData[j+3],7,-1));\n\n    local MaxWinSpeed = tonumber(string.sub(sData[j+4],13,-1));\n    local Direction = tonumber(string.sub(sData[j+5],11,-1));\n\n    local AverWinSpeed = tonumber(string.sub(sData[j+6],14,-1));\n    local RealTImeWinSpeed = tonumber(string.sub(sData[j+7],18,-1));\n    \n    local NowDirection = tonumber(string.sub(sData[j+8],11,-1));\n    local AccRain = tonumber(string.sub(sData[j+9],9,-1));\n\n    SW[1] = Water1/100 + Base1;\n    SW[2] = Water2/100 + Base2;\n    SW[3] = MaxWinSpeed;\n    SW[4] = Direction;\n    SW[5] = AverWinSpeed;\n    SW[6] = RealTImeWinSpeed;\n    SW[7] = NowDirection;\n    SW[8] = AccRain;\n    return SW;\nend	INLINE	2019-11-11 14:52:18.549+08	2019-11-22 11:42:32.332+08	2019-11-11	\N
e24b60a8-2b3d-40d5-8841-f40c4aed5c8c	anXin_inclino_1550	\N	安信测斜   请求应答	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 2, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n--采集ff41584a0002000101379cBF9C\n--应答FF41584A000200018000000134FFFFFFFFD238   moduleId=1\n--"Temp": -0.01,\n--"xDgree": 0,\n--"yDgree": 0.308,\n--"zDgree": -0.001\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==19) then\n        --   2   2   1      4     4       2\n        -- \n        \n        --print("parsing data", hex)\n        local xData = iota.hexToShort(hex,9,'B')/1000.0;\n        local yData = iota.hexToShort(hex,11,'B')/1000.0;\n        local zData = iota.hexToShort(hex,13,'B')/1000.0;\n        local temp = iota.hexToShort(hex,15,'B')/100.0;\n        out.data = {\n            anglex=xData,\n            angley=yData,\n            anglez=zData,\n            temperature\t=temp\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-09-04 14:18:44.969+08	2019-12-24 13:15:06.526+08	2017-09-02	\N
a77bb1f1-95da-410e-8bdc-3b9d2ac3424c	数据处理	\N		1	d41427b1-5907-4063-88c6-422f4f478d1f	d41427b1-5907-4063-88c6-422f4f478d1f	f	d41427b1-5907-4063-88c6-422f4f478d1f	Lua	func main()\nend	INLINE	2020-03-20 11:16:58.766+08	2020-03-20 11:16:58.766+08	2020-03-20	\N
09cac49f-47cf-46e1-989b-87ca089ba58b	mukuntech_TempHumi_1	\N	牧坤温湿度	1.0	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	f	c2c410a3-06e2-4e2f-a86b-2b29ad8a3eca	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n \nstart=function()\n    log.debug("start %s, ctx=%s", "mukuntech_TempHumi_1.lua",json.encode(device.props.moduleId))\nend\n--AA01040703EB305E8B    moduleId=1\n--"humi": 48,\n--"temp": 100.3\n\nonData=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n\n    local out={\n        data ={},\n        result = {}\n    }\n    log.debug("mukuntech_TempHumi_1  recv=%s",hex)\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        local moduleNo = iota.hexToByte(hex,1,'B')\n    \n        local modulenumber= tonumber(device.uplink.props.module)\n        local valCmd = iota.hexToByte(hex,3,'B')     \n        if valCmd == 0x07 and moduleNo==modulenumber  then\n\n            local temp = iota.hexToShort(hex,4,'B') / 10.0\n            local humi = iota.hexToByte(hex,6,'B') \n            out.data = {               \n                temp=temp,\n                humi=humi\n            }\n\n            local resultData =json.encode(out)\n            log.debug("mukuntech_TempHumi_1  recv %s",json.encode(out))\n            ctx:notify(resultData)\n        else\n            out.result = {code = 1001, msg = "Is not validated"}\n        end\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n   \nend\n\nIsValid=function(data)\n    if data == nil  then\n        errormsg = 'Data is nil'\n        errcode = 1001\n        return false\n    end\n    --iota.checkPlusSum16\n    return true\n--crc\nend\n\n\n\n	INLINE	2017-11-01 16:30:03.843+08	2020-03-20 18:33:33.913+08	2017-10-28	\N
235a942c-f4b2-48dc-8c48-25d92e7832d4	FS-YLJ-Z	\N	雨量计	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-YLJ-Z\n]]--liankang\nstart=function ()\n    log.debug("FSYLJZ start %s",json.encode(device))\n    log.debug("FSYLJZ device.id %s",type(device.id))      -- c704f492-5723-40a1-a070-40f22c46a908\n\n\n    -- 当前时间上一个小时对应的时间\n    lastHour = os.time() - 3600                             \n    lastDateStr = os.date("%Y-%m-%d-%H-%M-%S", lastHour)                    -- 2019-12-10-11-28-25\n    log.debug("FSYLJZ lastDateStr = %s", lastDateStr)\n    lastYearNum = tonumber(string.sub(lastDateStr, 3, 4));       \n\tlastMonthNum = tonumber(string.sub(lastDateStr, 6, 7));      \n\tlastDayNum = tonumber(string.sub(lastDateStr, 9, 10));       \n    lastHourNum = tonumber(string.sub(lastDateStr, 12, 13));     \n\n    -- 读取数据\n    local sendBuffHour = protocol_encode_hour()\n\tlog.debug("FSYLJZ encoded")\n    local okHour, respHour = ctx:ssend(sendBuffHour, 16000) -- 第二个参数超时时间\n\tif okHour then\n\t\tresult=protocol_decode_hour(respHour)\n\t\tlog.debug("FSYLJZ decoded") \n\telse\n\t\t--print("SSend error!")\n    end\n\n    ctx:sleep(1)\n\n    -- 当前时间\n    timeNow = os.time()\n    dateStr = os.date("%Y-%m-%d-%H-%M-%S", timeNow)                    -- 2019-12-10-11-28-25\n    log.debug("FSYLJZ dateStr = %s", dateStr)\n    yearNum = tonumber(string.sub(dateStr, 3, 4));       \n    monthNum = tonumber(string.sub(dateStr, 6, 7));      \n    dayNum = tonumber(string.sub(dateStr, 9, 10));       \n    hourNum = tonumber(string.sub(dateStr, 12, 13));\n    minuteNum = tonumber(string.sub(dateStr, 12, 13));     \n\n    -- 更新时间\n    local needSet = needSetTime(7)   -- 每隔几天需要更新设备时间 和 redis记录时间\n    if needSet then\n        local sendBuffTime = protocol_encode_set_time()     -- 回复AA 05 10 00 BF   AA051000BF\n        local okSetTime, respSetTime = ctx:ssend(sendBuffTime, 16000)\n        if okSetTime then\n            if redis.set(device.id.."_lastTime", tostring(timeNow)) then\n                log.debug("FSYLJZ redis.set succsess") \n            else\n                log.debug("FSYLJZ redis.set failed") \n            end\n        else \n            log.debug("FSYLJZ protocol_encode_set_time failed") \n        end\n    end\n\n\n\tctx:done(result)\nend\n\nfunction protocol_encode_hour()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x55, BE);                        -- 标记 55\n\tbuff=iota.appendHexByte(buff, 0x0A, BE);                        -- 长度 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        -- 类型 00\n    buff=iota.appendHexByte(buff, lastYearNum, BE);                     -- 年\n    buff=iota.appendHexByte(buff, lastMonthNum, BE);                    -- 月\n    buff=iota.appendHexByte(buff, lastDayNum, BE);                      -- 日\n    buff=iota.appendHexByte(buff, lastHourNum, BE);                     -- 时\n    buff=iota.appendHexByte(buff, 0x01, BE);                        -- 小时数                                                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- CRC0\n    local crcHex = CheckXor(buff);\n    buff=iota.appendHexByte(buff, crcHex, BE);                      -- CRC1\t\n    log.debug("FSYLJZ bufflast ="..json.encode(buff))\n\treturn buff\nend\n\n\nfunction protocol_encode_set_time()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0x55, BE);                        -- 标记 55\n\tbuff=iota.appendHexByte(buff, 0x05, BE);                        -- 长度 03\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 类型 00\n    buff=iota.appendHexByte(buff, yearNum, BE);                     -- 年\n    buff=iota.appendHexByte(buff, monthNum, BE);                    -- 月\n    buff=iota.appendHexByte(buff, dayNum, BE);                      -- 日\n    buff=iota.appendHexByte(buff, hourNum, BE);                     -- 时\n    buff=iota.appendHexByte(buff, minuteNum, BE);                   -- 分                                                        \n    buff=iota.appendHexByte(buff, 0x00, BE);                        -- CRC0\n    local crcHex = CheckXor(buff);\n    buff=iota.appendHexByte(buff, crcHex, BE);                      -- CRC1\t\n    log.debug("FSYLJZ buffnow ="..json.encode(buff))\n\treturn buff\nend\n\n-- decode   \n-- returns: 结果\n-- 正确回复  AA0D000A0C0108001C200100A8 雨量 "hourRainfall": 71.68,"temperature": 28.8\nfunction protocol_decode_hour(daHour)\n\t\n    local dataHour = daHour\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataHour)\n\t-- 判断数据有效性\n\tif inValidHour(daHour) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n    else\n        local hourRainfall = iota.hexToShort(dataHour, 7, 'L') / 100\n       -- local temperature = iota.hexToShort(dataHour, 9, 'L') / 10\n\n\t\tout.data = {\n\t\t\thourRainfall = hourRainfall,        \n           -- temperature = temperature,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\n\n\nfunction needSetTime(days)\n    local r1,r1ok = redis.get(device.id.."_lastTime")  --获取上次记录时间\n    if r1ok then\n        log.debug("FSYLJZ lastTime type = "..type(r1)..json.encode(r1))\n        local lastTime = r1\n        if (timeNow - lastTime) / (24 * 3600) > days then\n            return true\n        else\n            return false\n        end\n    else\n        return true\n    end\nend\n    \n\n\nfunction inValidHour(data)\n    if string.len(data) / 2 ~= 13 or iota.hexToByte(data, 2,'B') ~= 0x00 then -- 长度不等于 13   或者 读第三个字节，功能码不等于00\n        log.debug("FSYLJZ buff ="..json.encode(iota.hexToByte(data, 3,'B')))\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n\n\n--bit 操作\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\nend --bit:_and\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\n--异或校验\nCheckXor=function(hex)  \n    local len = string.len(hex)/2\n    local pp = 0\n    for i =0,len-1 do\n        local bi = iota.hexToByte(hex,i,'B')\n        pp = bit:_and(bit:_xor(bi,pp) , 0x000000ff)\n    end\n    return pp\nend \n	INLINE	2019-12-10 17:29:22.688+08	2019-12-30 16:06:37.158+08	2019-12-10	\N
00d10ef2-fbec-43f8-826a-f65d31a13e3d	yx_tempHum_1101	\N	复制的飞尚的	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--[[\n协议号: 1101;\n协议名: modbus 温湿度.\n]]--\n--协议参考文档： “统一协议-V2012-04-28.xls”\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\n\nstart=function ()\n  log.debug("yx_1101:load script %s, moduleId=%s", "yx_1101", device.moduleId or "[nil]")\n  \n  \n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("yx_1101 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("yx_1101 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\tsendBuff=protocol_encode(moduleNo)\n\n\tok,resp=ctx:ssend(sendBuff,15000)\n\tlog.debug("yx_1101:发送数据=%s",sendBuff)\n\tlocal result=""\n\tif ok then\n\t\tresult=protocol_decode(resp,moduleNo)\n\t\tlog.debug("yx_1101:接收数据=%s",resp)\n\telse\n        local errorOut={\n        data ={},\n        result = {}\n        }\n\t\terrorOut.result = {code=1001,msg='采集超时'} \n        result=json.encode(errorOut)\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode(moduleNo_str)\n\t-- 32字节. 大字序\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, 0xFC);             -- 1: 1 帧头 去：FC，回 FD\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 2 设备类型，温湿度=1\t\n\tbuff=iota.appendHexWord(buff, moduleNo_str, BE);  -- 2: 3/4 模块号\n\tbuff=buff.."00".."00";                          -- 1 1 : 5/6 无用\n\tbuff=iota.appendHexByte(buff, 0x01);             -- 1: 7 指令\n\tfor i = 8,30 do                                 -- 1: 8/30 填写0\n\t\tbuff=buff.."00";\n\t\ti = i+1;\n\tend\n\tlocal crc = checkCRC8(buff,2)\n  \tcrc =PadLeft(2,0,crc)\n\tbuff=buff..crc          -- 1: 31 CRC8  加总异或，2-30\n  --log.debug('yx_1101:CRC8 Buff = %s',crc)\n\tbuff=iota.appendHexByte(buff, 0xCF);             -- 1: 32 结尾\n\t--log.debug("yx_1101:start %s, ctx=%s ", "yx_1101.lua",buff)\n\treturn buff\nend\n\n-- decode\n-- returns: 结果, 原始值, 计算后值\n--正确回复  FD01002300000100005541CC000000000000000000000000000000000000C4DF\n--temp=25.5 Hum=0.85     module=35\nfunction protocol_decode(da,moduleNoCheck)\n \n\tlocal data = da;\n\t\n\t--存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\nlog.debug("yx_1101:收到数据%s",data)\n\t--判断数据有效性\t\t\t\n\t--0xFD固定帧头，01是温湿度设备类型   0xDF固定帧尾\n  local ErrorCode = IsValid(data,moduleNoCheck)\n  if ErrorCode then \n\n    log.debug("数据有效")\n\t\t--计算温湿度\n\t\tlocal humH = iota.hexToByte(data, 8, 'B');\n        log.debug("yx_1101:humH等于:%s",humH)\n\t\tlocal humL = iota.hexToByte(data, 9, 'B');\n    log.debug("yx_1101:humL等于:%s",humL)\n\t\tlocal hum = (humH*256 + humL) / 100.0;\n\t\tlocal temp = iota.hexToFloat(data, 10, 'B');\n    log.debug("yx_1101:temp等于:%s",temp)\n\n\t\tout.data = {\n\t\ttemp=temp,\n\t\thumid= hum\n\t\t};\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n\treturn json.encode(out)\nend\n\nIsValid=function(data,moduleNoCheckStr)\n    log.debug('yx_1101:开始校验数据%s',data)\n    local startbyte = iota.hexToByte(data,0,'B');\n  \tlocal devicetype = iota.hexToByte(data,1,'B');\n  \tlocal endbyte = iota.hexToByte(data,31,'B');\n    if data == nil or string.len(data)/2 ~= 32 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n  \tif startbyte ~= 0xFD or devicetype ~= 0x01 or endbyte  ~= 0xDF then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNoCheckStr) ~= iota.hexToUShort(data,2,'B') then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNoCheckStr,iota.hexToUShort(data,2,'B'))\n        errcode = 1004\n        return false\n    end\n    log.debug('yx_1101:数据校验通过')\n    return true\n--crc\nend\n\nfunction checkCRC8(val,start)\n    local CRC8Table ={\n            0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,\n            157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,\n            35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,\n            190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,\n            70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,\n            219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,\n            101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,\n            248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,\n            140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,\n            17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,\n            175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,\n            50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,\n            202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,\n            87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,\n            233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,\n            116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53\n        }\n    local c = 0\n    for  i = start, string.len(val)/2 do\n        local b = iota.hexToByte(val,i-1,'B')\n        local index = bit:_xor(c,b)\n        c = CRC8Table[index+1];\n    end\n    local crc8 = string.format("%X",c)\n    return crc8\nend\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n\n	INLINE	2020-04-13 16:34:01.273+08	2020-04-13 16:34:20.004+08	2020-04-13	\N
6fc5be55-5544-4595-8414-95be244eb503	fs-idau-file	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    --log.debug("fsidaufile  [%s] jiexi",device.id)\n    ctx:asend("010203")\n  end\n  \nonData=function(data)\n    local jdata=json.encode(data)\n    log.debug("fsidaufile data=%s",json.encode(data))\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  --log.debug("fsidaufile payload=%s", data.payload)\n                  parseData(data.payload,data.name)\n            elseif  data.ext==".m" then\n                  --log.debug("fsidaufile.m dtu: %s  payload=%s",data.name,data.payload)\n          \t\t  parseDiag(data.name,data.payload)\n          \telse \n          \t\t--log.error("fsidaufile  type is not.d/.m %s", data.name)\n            end\n        else\n            --log.error("fsidaufile  not a d file .d", data.ext)\n        end\n    else\n        --log.error("fsidaufile  data is nil")\n    end\nend\nfunction parseData(js,filename)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  \n    local djs=Split(js,'\\r')\n    --log.debug("fsidaufile data.name %s jsoncount=%s", filename,#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            log.debug("fsidaufile= %s:dj=%s", filename,v)\n            --log.debug("fsidaufile  [%s] dj=%s",device.id,json.encode(dj))\n            if dj~=nil and dj ~= '' and dj.R =="0" then\n                --log.debug("fsidaufile:ceshiyixia1 = %s", filename)\n                local childDevice=getDeviceInfo(dj.S,filename)\n                --log.debug("fsidaufile= %s childDevice=%s", filename,json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("fsidaufile:ceshiyixia2")\n                    --log.debug("fsidaufile= %s  dj.PV1=%s", filename,dj.PV[1])\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="noise" then --噪声\n                        --log.debug("fsidaufile  noise")\n                        local data4={\n                            data={\n                                    ein = dj.RV[1],\n                                    minnf=dj.RV[2],\n                                    maxnf=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("fsidaufile data.name %s  out data4=%s",filename,json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\t\t\t\t\t\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        --log.debug("fsidaufile  ceshi_zx")\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n\t\t\t\t\t\t\t--log.debug("fsidaufile status %s",status)\n            \t\t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n                                data4.data.temperature = nil              \n                            end\n                            --log.debug("fsidaufile data.name %s  out data4=%s",filename,json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\n                end\n            else\n                --log.debug("fsidaufile  dj=nil")\n\t\t\t\t\n\t\t\t\tif dj~=nil and dj ~= '' then\n\t\t\t\t\tlocal childDevice=getDeviceInfo(dj.S,filename)\n\t\t\t\t\tif childDevice~=nil and childDevice ~= {} then \n\t\t\t\t\t\tif childDevice.props.sensortype=="zx" then --振弦\n\t\t\t\t\t\t\tlog.debug("fsidaufile filename %s ceshi_zx",filename)\n\t\t\t\t\t\t\tlocal data4={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = dj.PV[1] or 0,\n\t\t\t\t\t\t\t\t\tfrequency=dj.RV[1],\n\t\t\t\t\t\t\t\t\ttemperature=dj.RV[2],\n\t\t\t\t\t\t\t\t\tam=dj.RV[3]\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1, \n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlocal status = dj.R\n\t\t\t\t\t\t\tlog.debug("fsidaufile filename %s , dj.R %s",filename,status)\n\t\t\t\t\t\t\tif data4.data.temperature == 200 or data4.data.temperature == -200 then\n\t\t\t\t\t\t\t\tdata4.data.temperature = nil              \n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--log.debug("fsidaufile filename %s , status %s",filename,status)\n\t\t\t\t\t\t\tif tonumber(status) == 140104 then\n\t\t\t\t\t\t\t\tdata4.result = {code=30010023,msg="频率线短路"}\n\t\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif tonumber(status) == 140105 then\n\t\t\t\t\t\t\t\tdata4.result = {code=30010022,msg="频率线断路"}\n\t\t\t\t\t\t\t\tdata4.data ={}\n\t\t\t\t\t\t\tend\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,data4)\n\t\t\t\t\t\t\t--log.debug("fsidaufile filename %s , out %s",filename,json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        else\n            --log.debug("fsidaufile  v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    --log.debug("fsidaufile data.name= %s data is =%s",filename, json.encode(out))\n    ctx:notify(resultData)\nend\nfunction parseDiag(name,js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {},\n        type=2\n    }\n    \n    local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n    --log.debug("fsidaufile  name: %s  parsing diag file = %s",name,json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n  \n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId,filename)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n        for i,link in pairs(device.dnlinks) do\n            --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("fsidaufile: = %s node=%s",filename,json.encode(node))\n        \t\tif node.dnlinks ~= nil then\n                  for k,sublink in pairs(node.dnlinks) do\n                      --log.debug("fsidaufile:=%s sublink=%s",filename,json.encode(sublink))\n                      for u,subdevice in pairs(sublink.devices) do\n                          --log.debug("fsidaufile: = %s sensor=%s",filename,json.encode(subdevice))\n                          if subdevice.uplink.props.sensorid == sensorId then\n                              --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n                              resensor = subdevice\n                          end \n                      end\n                  end\n          \t\tend\n            end\n        end          \n    end\n    return resensor\nend	INLINE	2018-03-08 18:59:42.191+08	2021-01-08 10:55:57.23+08	2018-03-08	\N
eb847cf6-6311-40ea-85ff-6ad19edc36da	yx_laser_9509	\N	复制的飞尚的	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--//02 协议分析/2017-01/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "yx_laser_9509", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 0x02, endian)             \t\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_laser_9509 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_laser_9509 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n \t-- local moduleNo=device.props.moduleId or device.uplink.props.module\n\tlog.debug("yx_laser_9509 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff,moduleNo, endian)  -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)             \t-- 3: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x2E, endian)                -- 4: 指令: 是否加热，设置量程等  目前设置为0\n    buff=iota.appendHexCrc(buff, endian ,0)               \t-- 5: CRC\n\n    ok,resp=ctx:ssend(buff,50000)\n     log.debug('yx_laser_9509:发送数据=%s',buff)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n    \tlog.debug('yx_laser_9509:接收数据=%s',resp)\n    else\n\t  log.debug('yx_laser_9509:数据采集失败')\n    end\n    ctx:done(result)\nend\n\n\n\n--0002042C812E003D947D8141C900009EF77809000000000000000004CA\n--module=1068\n--"distance": 0.073,\n--"temperature": 25.12\nunmarshall=function(hex,moduleStr)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local  Distance = iota.hexToFloat(hex,7,'B',3);\n        local Temp = iota.hexToFloat(hex,11,'B',2);\n        out.data = {\n             distance =Distance,\n             length=Distance,--统一输出用\n            temperature=Temp\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('yx_laser_9509:开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 29 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n  \t local moduleNo_Data=tostring(iota.hexToShort(data,2,'B'))\n    if moduleNo_check ~= moduleNo_Data then\t\n        errormsg = string.format('数据的模块号与传感器不匹配%s[%s]',moduleNo_Data,moduleNo_check)\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2020-04-13 16:44:32.943+08	2020-04-13 16:44:32.943+08	2020-04-13	\N
24d5f318-b4a2-480f-bb83-c0d0ec08730d	weiyun_file_transfer	\N		1.0	650f75b2-4e3f-4393-8edb-0308c73e15b6	650f75b2-4e3f-4393-8edb-0308c73e15b6	f	650f75b2-4e3f-4393-8edb-0308c73e15b6	Lua	start=function()\n    log.debug("weiyun_file_transfer : devices network =%s", json.encode(device))\n     log.debug("weiyun_file_transfer   get Start ")\nend\n\nonData=function(data)\n     log.debug("weiyun_file_transfer   解析data ")\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" or data.ext==".dx" then\n                log.debug("weiyun_file_transfer : recvd content = %s",data.payload)\n                ParseFileD(data.payload)\n            --else\n                --log.error("weiyun_file_transfer : unsupported file type: %s", data.ext)\n            end\n            if data.ext==".dat" then\n                --log.debug("fs_idau_cloudvibrate : recvd content = %s",data.payload)\n                ParseFileDat(data.payload)\n             --else\n                 --log.error("fs_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              log.error("weiyun_file_transfer : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("weiyun_file_transfer : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("weiyun_file_transfer : dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("weiyun_file_transfer deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("weiyun_file_transfer begin parse")\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n        end\n        log.debug("weiyun_file_transfer finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        log.debug("weiyun_file_transfer deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("weiyun_file_transfer not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction ParseFileD(content)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    log.debug("weiyun_file_transfer : content  =%s", content)\n    local jsons=Split(content,'\\r')\n\t\n\t\n    for k,v in pairs(jsons) do\n        if v~=nil and v~='' then\n            local jsondata = json.decode(v)            \n            if jsondata~=nil and jsondata ~='' then\n                local childDevice=getDeviceInfo(jsondata.M,jsondata.C)              \n                if childDevice ~=nil then\n          \t\t\tlog.debug("weiyun_file_transfer  设备类型=%s,%s",childDevice.props.sensortype,json.encode(childDevice))\n\t\t\t\t\t\n                    if childDevice.props.sensortype=='gnss' then\n                        local rst = {\n                            data={\n                                x = jsondata.RV[1] or 0,\n                                y = jsondata.RV[2] or 0,\n                                z = jsondata.RV[3] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        table.insert(out.data,rst)\t\n                    end\n                    if childDevice.props.sensortype=='zd' then\n                        local rst = {\n                            data={\n                                ppv = jsondata.RV[1] or 0, \n                                pv = jsondata.RV[2] or 0, \n                                rms = jsondata.RV[3] or 0,                             \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n          \n          \t\t\tif childDevice.props.sensortype=='gdgs' then\n\t\t\t\t\tlocal Phy\n\t\t\t\t\tlocal wavelength=tonumber(string.format('%0.3f',jsondata.RV[1]))\n\t\t\t\t\tlocal A = childDevice.uplink.capabilities[1].formula.props.A\t\n\t\t\t\t    local B = childDevice.uplink.capabilities[1].formula.props.B\n\t\t\t\t\tif A ==nil or B==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy=(wavelength-A)/B\n\t\t\t\t\tend   \n                        local rst = {\n                            data={\n                                wavelength = wavelength,\n                                physicalvalue= tonumber(string.format('%0.3f',Phy))                           \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))    \n                        }\n                        log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n          \t\t\tif childDevice.props.sensortype=='gdgszx' then\n                        local rst = {\n                            data={\n                                physicalvalue = jsondata.PV[1],\n                                temperature= jsondata.PV[2]                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(jsondata.T)/1000))    \n                        }\n                        log.debug("weiyun_file_transfer:out data=%s",json.encode(data))\n                        table.insert(out.data,rst)\n                    end\n                    if childDevice.props.sensortype=='standard485' then\n            \t\t\tlog.debug("weiyun_file_transfer  standard485=%s",json.encode(childDevice))\n\t\t\t\t\t\tlocal rst = {\n                            data={                              \n                                physicalvalue= jsondata.PV[1]                              \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+16:00",(tonumber(jsondata.T)/1000))   \n                        }\n                        log.debug("weiyun_file_transferout data=%s,time=%s,T=%s",json.encode(data),rst.time,jsondata.T)\n                        table.insert(out.data,rst)\n                    end\n                else\n                    log.debug("weiyun_file_transfer line=%s childDevice is nil",k)\n                end\n            end\n        end\n    end\n   log.debug("weiyun_file_transfer: dataresult: %s", json.encode(out))\n   ctx:notify(json.encode(out)) \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n  \tlog.debug("weiyun_file_transfer:查询子设备: moduleid=%s,channel=%s", moduleid,channel)\n\tlog.debug("weiyun_file_transfer:查询设备: device=%s",json.encode(device))\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices \nlog.debug("weiyun_file_transfer:查询子设备: subdevices=%s", json.encode(subdevices))\t\t\n        for i,subdevice in pairs(subdevices)  do\n\t\t\n\t\t\tlocal submodule=subdevice.uplink.props.module\n      \t\t --判断是否是3层采集仪结构\n\t\t\tif json.encode(subdevice.dnlinks)~="{}" then\n        \t\tlog.debug("weiyun_file_transfer:三层结构 m=%s, 设备=%s",submodule,json.encode(subdevice))\n\t\t\t   for k,sublink in pairs(subdevice.dnlinks) do\n\t\t\t\t\t\tlog.debug("weiyun_file_transfer:sublink=%s",json.encode(sublink))\n\t\t\t\t\t\tfor u,sub_subdevice in pairs(sublink.devices) do\n\t\t\t\t\t\t\tlog.debug("weiyun_file_transfer:sensor=%s",json.encode(subdevice))\n\t\t\t\t\t\t\tlocal sensornodeId=sub_subdevice.uplink.props.nodeid\n            \t\t\t\tlocal sensorchannel=sub_subdevice.uplink.props.channelid\n\t\t\t\t\t\t\tif tostring(sensorchannel) == tostring(moduleid) and tonumber(sensornodeId)==tonumber(channel) then\n\t\t\t\t\t\t\t\tlog.debug("weiyun_file_transfer:m=%s,c=%s 3匹配到设备=%s",moduleid,channel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn sub_subdevice\n              \t\t\t\telse\n              \t\t\t\t\t--log.debug("weiyun_file_transfer:m=%s[%s],c=%s[%s] 3 拜安未匹配到设备=%s",moduleid,sensormodule,channel,sensorchannel,json.encode(sub_subdevice))\n\t\t\t\t\t\t\tend \n\t\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\n\t\t    else\n              \n              local subchannel=subdevice.uplink.props.channel\n        \t\tlog.debug("weiyun_file_transfer:两层结构 m=%s,c=%s 设备=%s",submodule,subchannel,json.encode(subdevice))\n              if tostring(submodule) == tostring(moduleid) and tonumber(subchannel) == tonumber(channel) then \n                 log.debug("weiyun_file_transfer:m=%s,c=%s 2安信匹配到设备=%s",moduleid,channel,json.encode(subdevice))\n                  return subdevice\n              else\n                  log.debug("weiyun_file_transfer has no device module=%s channel=%s,[submodule=%s,subchannel=%s]",moduleid,channel,submodule,subchannel)\n              end \n        \tend\n        end\n        log.debug("weiyun_file_transfer has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("weiyun_file_transfer has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n	INLINE	2020-05-20 09:33:23.075+08	2020-06-18 16:20:15.856+08	2020-05-20	\N
6f1a07b6-95d7-4f53-b373-fd5c75edb587	fzmas_micro_zy	\N		1.0	4fd9bf53-3722-4a0e-9145-178e3be83216	4fd9bf53-3722-4a0e-9145-178e3be83216	f	4fd9bf53-3722-4a0e-9145-178e3be83216	Lua	start=function()\n    log.debug("fzmas_micro_zy : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fzmas_micro_zy devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fzmas_micro_zy recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        log.debug("fzmas_micro_zy 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("fzmas_micro_zy datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            log.debug("fzmas_micro_zy 解析dat r1= %s", r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                log.debug("fzmas_micro_zy 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                log.debug("fzmas_micro_zy 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            log.debug("fzmas_micro_zy 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\tlog.debug("fzmas_micro_zy  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("fzmas_micro_zy 版本固件 %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\tlog.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            log.debug("fzmas_micro_zy devices crc =%s",crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("fzmas_micro_zy crc %s r1 %s setting%s" ,crc,r1,setting)\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fzmas_micro_zy 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fzmas_micro_zy  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fzmas_micro_zy 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fzmas_micro_zy 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fzmas_micro_zy 设备休眠")\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fzmas_micro_zy powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n\t\t\t\tlog.debug("fzmas_micro_zy XDATA=%s",string.sub(data,firststart,firststart+datalength))\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy=0\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data = {}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 振弦11111111 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 静力水准仪 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlog.debug("fzmas_micro_zy 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fzmas_micro_zy 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\tlog.debug("fzmas_micro_zy dataresult %s", json.encode(out))\n            end \n            log.debug("fzmas_micro_zy out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            log.debug("fzmas_micro_zy: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("fzmas_micro_zy : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\tlog.debug("fzmas_micro_zy subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("fzmas_micro_zy : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("fzmas_micro_zy : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fzmas_micro_zy  baudrate =%s databits %s parity %s stopbits ",baudrate,databits,parity,stopbits)\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fzmas_micro_zy  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\tlog.debug("fzmas_micro_zy  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("fzmas_micro_zy  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fzmas_micro_zy 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fzmas_micro_zy has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fzmas_micro_zy has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fzmas_micro_zy has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fzmas_micro_zy has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("fzmas_micro_zy  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("fzmas_micro_zy deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("fzmas_micro_zy begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        log.debug("fzmas_micro_zy finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("fzmas_micro_zy r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fzmas_micro_zy powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("fzmas_micro_zy cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("fzmas_micro_zy not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    log.debug("fzmas_micro_zy len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("fzmas_micro_zy te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    log.debug("fzmas_micro_zy sum %s", sum)\n   return 0xffff-sum\nend\n\n	INLINE	2020-04-09 15:42:21.049+08	2020-04-22 10:11:43.808+08	2020-04-09	\N
6fc0b1e0-2f7e-4f84-ba23-54ab0519b6b5	http_post_get	\N	post获取token， get获取实时数据信息	1.0	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	Lua	start=function()\n    log.debug("http_post_get_1.0 start moudleid=%s", device.uplink.id or "nil")\n    local req = \n    {\n        type= "http",\n        url='',  --https://api.yespowering.cn/login/\n    \tmethod="post",\n        header={}\n    }\n\n    req.url=device.uplink.props.tokenurl\n    log.debug("http_post_get_1.0:  url=%s",req.url)\n    log.debug("http_post_get_1.0:设备原型="..json.encode(device))\n    req.header["agent"] = '0'\n\treq.header["language"] = 'zh'\n\treq.header["brandid"] = '38'\n    req.ContentType='application/json'\n        \n    local param = {\n        account= device.uplink.props.account,\n        pw=device.uplink.props.pw\n    }\n\treq.body = json.encode(param)\n    log.debug("http_post_get_1.0="..json.encode(param))\n    local ok,ack=ctx:ssend(req,4000) -- ssend\n\n    if ack==nil then\n        log.debug("http_post_get_1.0:  ok=%s",ok)\n    else\n        log.debug("http_post_get_1.0:  ok=%s, ack.body=%s",ok,ack.body)\n    end\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    if not ok or ack.body == nil or #ack.body == 0 then  --如果tokenurl错误，返回ok = true，ack.body = ""\n        out.result={\n        code=1002,\n        msg="timeout",\n    }\n    else --OK  \n        local dataTable=json.decode(ack.body) --json字符串转换为表\n        log.debug("http_post_get_1.0：ack.body = "..json.encode(ack.body))\n        if dataTable.code == 0 then -- http应答 \n            local token=dataTable.data.userinfo.token\n            log.debug("http_post_get_1.0:  token = %s " ,token)\n            log.debug("http_post_get_1.0 ack = %s",ack.body)\n\n            Sleep(1)\n                --请求数据\n            local datareq = {\n                        type= "http",\n                        url='',  --url=https://api.yespowering.cn/dev/data  \n                        method="get",\n                        header={}\n                    }\n            local boxId = device.uplink.props.boxid\n            datareq.url = device.uplink.props.dataurl.."?box_id="..boxId\n            log.debug("http_post_get_1.0:  data url=%s",datareq.url)\n            --log.debug("设备原型="..json.encode(device))\n            datareq.header["agent"] = '0'\n            datareq.header["language"] = 'zh'\n            datareq.header["brandid"] = '38'\n            datareq.header["token"] = token\n            datareq.ContentType = 'application/json'\n\t\t\t\t\n            --get发送\n            local dataok,dataack=ctx:ssend(datareq,4000)\n\t\t\t\n\t\t\tif not dataok or dataack == nil or #dataack.body == 0 then\n\t\t\t\tout.result={\n\t\t\t\tcode=1002,\n\t\t\t\tmsg="timeout",\n\t\t\t\t}\n            else --OK\n                alldataTable = json.decode(dataack.body)  -- 有数据\n                log.debug("http_post_get_1.0  dataack.body="..dataack.body)\n\t\t\t\tif alldataTable.code == 0 then -- http应答\n\t\t\t\t\tlocal instant_data = alldataTable.data.instant_data\n                    -- local model = alldataTable.data.model   --获取云盒类型\n                    log.debug("http_post_get_1.0  instant_data = "..json.encode(instant_data))\n                    for k, v in ipairs(instant_data) do\n                        --log.debug("http_post_get_1.0  instant_data= "..json.encode(v))\n                        -- 获取子设备编号\n                        local moduleNo = v.order_id\n                        -- 获取通道设备deviceId\n                        local childDevice = getDeviceInfo(moduleNo, 1)  -- 模块号，channelNoid\n                        if childDevice == nil  then -- 子设备信息为空\n                        out.result={\n                            code=1002,\n                            msg="subdevices is nil",\n                            }\n                        else  --子设备信息不为空\n                            local dataTmp = {\n                                type = 1,\n                                time = v.datatime,\n                                data = {\n                                    temp = tonumber(v.temp),\n                                    press = tonumber(v.stress_c)\n                                },\n                                device = childDevice.id\n                            }\n                            -- 将子设备信息填入返回结果\n                            table.insert(out.data, dataTmp) \n                        end\n                    end\n                end\t\n            end\n        end\n    end\n\tctx:done(json.encode(out))\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("http_post_get_1.0： 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            --log.debug("http_post_get_1.0:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n\n            moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck = child.uplink.props.channel\n            --log.debug('http_post_get_1.0： 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tonumber(moduleStrCheck) == tonumber(moduleNoId) then\n                log.debug('http_post_get_1.0：  m=%s  c= %s匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('http_post_get_1.0:  subdevices是nil')\n        return nil\n    end\nend\n\n\nSleep=function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do end\nend	INLINE	2019-10-28 16:07:47.133+08	2019-10-31 15:29:20.384+08	2019-10-28	\N
049512a4-e7cf-44a4-a31c-1165cfb143b9	httpTestAPI	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('httpTestAPI   LUA http server start')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {}\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n  \tlog.debug('httpTestAPI [%s] httpbody=%s type=%s', moduleNo, json.encode(httpbody), type(httpbody))\n    log.debug('httpTestAPI [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n\n    out.data = {\n        hex = bodydataStr\n    }\n    log.debug('httpTestAPI [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n  \n    asend_HttpResponse('313233343536')\n    ctx:notify(json.encode(out))\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body = bodyString}\n    ctx:asend(ack)\nend\n	INLINE	2019-04-22 14:07:43.468+08	2021-01-27 14:28:47.004+08	2019-04-22	\N
8b310a31-95ae-4f4a-bf8e-231f892b9dfe	mas-iadu-file	\N	数据解析	1	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start=function()\n    log.debug("masidaufile:jiexi")\n  end\nlocal index_id=device.uplink.props.id \nonData=function(data)\n    --local jdata=json.encode(data)\n    --log.debug("masidaufile [%s] data=%s",index_id,data)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  log.debug("masidaufile [%s] payload=%s",index_id ,data.payload)\n                  parseData(data.payload)\n            elseif  data.ext==".m" then\n                  log.debug("masidaufile_m : payload=%s", data.payload)\n          \t\t  parseDiag(data.payload)\n          \telse \n          \t\tlog.error("masidaufile:type is not.d/.m %s", data.name)\n            end\n        else\n            log.error("masidaufile:dtuid=%s,not a d file .d %s,payload=%s",device.uplink.props.id, data.ext,data.payload)\n        end\n    else\n        log.error("masidaufile:data is nil")\n    end\nend\nfunction parseData(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  \n    local djs=Split(js,'\\r')\n    log.debug("masidaufile:jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            log.debug("masidaufile:dj=%s",v)\n            --log.debug("masidaufile:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and dj.R =="0" then\n                local childDevice=getDeviceInfo(dj.S)\n                log.debug("masidaufile:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("masidaufile:dj.PV1=%s",dj.PV[1])\n                    if childDevice.props.sensortype=="cx" then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                                _acq_number=dj.N or 1000\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="lf" then   --裂缝\n                        local data1 ={\n                            data={\n                                length = dj.RV[1] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    if childDevice.props.sensortype=="wsd" then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\n                    if childDevice.props.sensortype=="cj" then --激光测距\n                        local data2 ={\n                            data={\n                                length = dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n\t\t\t\t\tif childDevice.props.sensortype=="sw" then --水位\n\t\t\t\t\t\tlocal data3 ={\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure=dj.RV[1] or 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,data3)\n\t\t\t\t\tend\n                    if childDevice.props.sensortype=="yc" then --压差\n                        local data3 ={\n                            data={\n                                pressure=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        --log.debug("masidaufile:ceshi_zx")\n\t\t\t\t\t\tif childDevice.props.downer ~= nil then\n\t\t\t\t\t\t\tdn = tonumber(childDevice.props.downer) \n\t\t\t\t\t\t\tup = tonumber(childDevice.props.upper)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdn = -9999\n\t\t\t\t\t\t\tup = 99999\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif dj.RV[1] >= dn then \n\t\t\t\t\t\t\tif dj.RV[1] <= up then \n\t\t\t\t\t\t\t\tlocal data4={\n\t\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\t\t\tphysicalvalue = dj.PV[1] or 0,\n\t\t\t\t\t\t\t\t\t\t\tfrequency=dj.RV[1],\n\t\t\t\t\t\t\t\t\t\t\ttemperature=dj.RV[2],\n\t\t\t\t\t\t\t\t\t\t\tam=dj.RV[3]\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\t\ttype=1, \n\t\t\t\t\t\t\t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlog.debug("masidaufile:out data4=%s",json.encode(data4))\n\t\t\t\t\t\t\t\t\ttable.insert(out.data,data4)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n            \t\tend\n                end\n            else\n                log.debug("masidaufile:dj=nil")\n            end\n        else\n            log.debug("masidaufile:v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    log.debug("masidaufile [%s] data is =%s", index_id,json.encode(out))\n    ctx:notify(resultData)\nend\nfunction parseDiag(js)\n  local dj=json.decode(js)\n  if dj~=nil then\n\tlocal out={\n        data ={_data_type = "diag", R={}},\n        result = {dropped=true},\n        type=2        \n    }\n    \n    local dataresult= json.encode(dj.R.P.R)\n\tout.data.R = dataresult\n    log.debug("masidaufile_m parsing diag file = %s",json.encode(out))\n    ctx:notify(json.encode(out))\n  end\nend\n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n  \n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        --log.debug("masidaufile:deviceInfo=%s",json.encode(device))\n        for i,link in pairs(device.dnlinks) do\n            --log.debug("masidaufile:link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("masidaufile:node=%s",json.encode(node))\n                for k,sublink in pairs(node.dnlinks) do\n                   -- log.debug("masidaufile:sublink=%s",json.encode(sublink))\n                    for u,subdevice in pairs(sublink.devices) do\n                        --log.debug("masidaufile [%s] sensor=%s",index_id,json.encode(subdevice))\n                        if subdevice.uplink.props.sensorid == sensorId then\n                            ---log.debug("masidaufile [%s] final_sensor %s=%s",index_id,subdevice.uplink.props.sensorid,sensorId)\n                            resensor = subdevice\n                        end \n                    end\n                end\n            end\n        end          \n    end\n    return resensor\nend\n\n\n\n	INLINE	2018-03-15 13:38:13.969+08	2020-05-20 11:52:18.638+08	2018-03-15	\N
93ce2d16-f3f1-4070-91a9-9daefba27430	qaz123	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--//01 协议文档/5月第3周/上海华测创时/振弦采集仪通讯协议.doc\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n     log.debug("start %s, moduleId=%s channel = %s ", "qaz123",device.uplink.props.module or 'nil',device.uplink.props.channel or 'nil')\nlocal endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tif subdevices ~=nil then\n        log.debug("qaz123 根设备 名称 : data is =%s", device.name)\n        log.debug("qaz123 根设备devices : data is =%s", json.encode(device))\n    \tfor index,child in pairs(subdevices) do\n\t\t    log.debug("qaz123 子设备subdevices=%s : data is =%s", index,json.encode(child))\n      \t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\tlog.debug("qaz123 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("qaz123 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n        \t--local channelNo=tonumber(child.props.channelId or child.uplink.props.channel)\t\t\t           \n\t\t\t--local moduleNo = tonumber(child.props.moduleId or child.uplink.props.module)\n            log.debug("qaz123 模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n\t\t\t\n\t\t\tlocal buff=''\n\t\t\tbuff=iota.appendHexByte(buff, 0x48, endian)      \n\t\t\tbuff=iota.appendHexByte(buff, 0x43, endian)      \n\t\t\tbuff=iota.appendHexWord(buff, moduleNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\n\t\t\tbuff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n\t\t\tbuff=iota.appendHexWord(buff, 0, endian) \n\t\t\tbuff=iota.appendHexWord(buff, 0, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0, endian)\n\t\t\tbuff=iota.appendHexCrc(buff, endian ,0) \n\t\t\tbuff=iota.appendHexByte(buff, 0xAF, endian) \t\t\t\t\t\t\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\tlocal result='{}'\n\t\t\tif ok then\t\n            log.debug("qaz123 模块%s通道%s的数据接收成功,开始解析",moduleNo,channelNo)    \n\t\t\tresult = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n\t\t\ttable.insert(out.data,result)\n\t\t\telse\n\t\t\tlog.debug("qaz123 模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n\t\t\tend\n        end      \n\t\t\n    else\n\t\tlog.debug("qaz123 subdevices是nil")\n    \treturn nil\n    end\n\t\t\n\tlocal resultData =json.encode(out)\n    log.debug("qaz123  out序列化结果 : out is =%s", json.encode(out))\n    ctx:done(resultData)\t\n\t\n\t\nend\n--4843000015040301a8774945000000000000000000006778af\n--K=1\n--F0=2\n--Kt=3\n--T0=4\n--moduleId=5380\n--channelId=1\n--formula=ε=ε=K*(Fi^2-Fo^2)+Kt*(Ti-To)\n--"phy": -16,\n--"frequency": -1.3727142151112332e-14,\n--"temperature": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=subDevice.props.moduleId or subDevice.uplink.props.module\n\t--local subChannelId=subDevice.props.channelId or child.uplink.props.channel\n\tlog.debug("qaz123:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n    local ErrorCode = IsValid(hex,tostring(subModuleId),tostring(subChannelId))\n    if ErrorCode then     \n \n        \n\t\tlocal Frequency = iota.hexToFloat(hex, 8,'B',32); -- 65=1100101\n        local Temp = iota.hexToFloat(hex, 12,'B',2);\n\t\tlog.debug("qaz123:模块%s通道%s的原始值是：freq=%s,Temp=%s",subModuleId,subChannelId,freq,Temp)\n        log.debug("qaz123:模块%s通道%s的参数值是：=%s",subModuleId,subChannelId,json.encode(subDevice.uplink.capabilities[1].formula))\n        \n\t\tlocal Phy=0\n        if subDevice.uplink.capabilities[1].formula.metaid == '2bd2a601-c351-4e47-bbbe-9a787efd6026' then --在iota中查找 --振弦公式\t\t\n\t\t\t\tlocal K = subDevice.uplink.capabilities[1].formula.props.K\n\n\t\t\t\tlocal Fo = subDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t\tlocal Kt = subDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t\tlocal To = subDevice.uplink.capabilities[1].formula.props.To\n\t\t\t\tlog.debug("qaz123:振弦模块：公式48参数=%s,%s,%s,%s,%s",K1,K2,K3,Fo,To)\n\t\t\t\tif K ==nil or Fo==nil or Kt==nil or To==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\tlog.debug("qaz123 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\telse\n\t\t\t\t\tlog.debug("qaz123 当前的Frequency是:%s,%s",Frequency,Temp)\n\t\t\t\t\tlocal Fi=Frequency \n\t\t\t\t\tPhy = K*Fi^2-(K*Fo^2)+Kt*(Temp-To)\n\t\t\t\t\tlog.debug("当前的Phy是:%s",Phy)\n\t\t\t\tend            \n\t\n\t\tsubData.data={\n\t\t\t\t\tfrequency=string.format("%0.3f",Frequency),\n\t\t\t\t\ttemperature=string.format("%0.3f",Temp),\n                  \tphysicalvalue=string.format("%0.3f",Phy)\n\t\t\t\t\t}\n\t\tend\n\t\tif subDevice.uplink.capabilities[1].formula.metaid == '8102b4e7-9f04-43f0-a644-5b89c281f52f' then --在iota中查找\n                 \n                    local R0 = subDevice.uplink.capabilities[1].formula.props.R0\n\t\t\t\t\tlocal G = subDevice.uplink.capabilities[1].formula.props.G\n\t\t\t\t\tlog.debug("qaz123:电阻模块：公式48参数=%s,%s",R0,G)\n\t\t\t\t\tlocal A=1.4051*10^(-3)\n\t\t\t\t\tlocal B=2.369*10^(-4)\n\t\t\t\t\tlocal C=1.019*10^(-7)\n\t\t\t\t\tlocal a=1.0/3\n\t\t\t\t\tlocal y=1/(Temp+273.2)-A\n\t\t\t\t\tlog.debug("qaz123 当前的y是:%s",y)\n\t\t\t\t\tlocal yy=(y/2/C)^2+(B/3/C)^3\n\t\t\t\t\tlog.debug("qaz123 当前的yy是:%s",yy)\n\t\t\t\t\tlocal yy1=y/2/C+math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("qaz123 当前的yy1是:%s",yy1)\n\t\t\t\t\tlocal yy2=y/2/C-math.pow(yy,0.5)\n\t\t\t\t\tlog.debug("qaz123 当前的yy2是:%s",yy2)\n\t\t\t\t\t\n\t\t\t\t\tlocal yyy1=math.pow(yy1,a)\n\t\t\t\t\tlog.debug("qaz123 当前的yyy1是:%s",yyy)\n\t\t\t\t\tlocal yyy2=0\n\t\t\t\t\tif yy2<0 then\n\t\t\t\t\t\tyyy2=-math.pow(-yy2,a)\n\t\t\t\t\t\n\t\t\t\t\telse\n\t\t\t\t\t\tyyy2=math.pow(yy2,a)\n\t\t\t\t\n\t\t\t\t    end\n\t\t\t\t\tlocal yyy=yyy1+yyy2\n\t\t\t\t\tlog.debug("qaz123 当前的yyy是:%s",yyy)\n\t\t\t\t\tlocal R=math.exp(yyy)-18\n\t\t\t\t\tlog.debug("qaz123 当前的电阻是:%s",R)\n\t\t\t\t\tif G ==nil or R0==nil then\n\t\t\t\t\t\tPhy=nil\n\t\t\t\t\telse\n\t\t\t\t\t\tPhy =G*(R-R0)\n\t\t\t\t\t\tlog.debug("当前的应变是:%s",Phy)\n\t\t\t\t\tend \n        subData.data={\n\t\t\t\t\tresistance=string.format("%0.2f",R),\n\t\t\t\t\n                  \tphysicalvalue=string.format("%0.2f",Phy)\n\t\t\t\t\t}\t\t\t\t\n\t\tend\n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n    log.debug('qaz123:模块%s通道%s开始校验数据',moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 25 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('qaz123:模块%s通道%s  数据 长度校验失败：Data is nil or invalid length=%s',moduleId,channelId,string.len(data)/2)\n        return false\n    end\n    if iota.hexToByte(data,0,'B') ~= 0x48 or iota.hexToByte(data,1,'B') ~= 0x43 or iota.hexToByte(data,24,'B') ~= 0xaf then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n\t\tlog.debug('qaz123:模块%s通道%s 数据校验失败：Hex CMD False：错误码=1003',moduleId,channelId)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,4,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('qaz123:模块%s通道%s 模块号校验失败：Invalid acq moduleId=%s',moduleId,channelId,moduleStr)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,7,'B'))\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('qaz123:模块%s通道%s 通道号校验失败：Invalid acq channelId=%s',moduleId,channelId,channelStr)\n\t\treturn false\n\tend\t\t\n    log.debug('qaz123:模块%s通道%s校验数据通过！！！',moduleId,channelId)\n    return true\nend	INLINE	2020-05-13 13:36:39.028+08	2020-05-14 11:08:48.817+08	2020-05-13	\N
bf8622e9-ad0d-4cad-9f25-2e601f7fdee2	危大工程光栅仪	\N	采集仪协议，下面挂载传感器	1.0	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	f	b7a8e100-b8fb-4135-a1b5-00a91da6da3f	Lua	--[[\n协议号: 1.0;\n协议名: NZD-FBG-A02\n]]--liankang\nstart=function ()\n    log.debug("NZDFBGA02 start")\nend\nonData=function(recvHex)\n\t--主动上传式\n    local out={\n\ttype = 2,\n\tdata ={},\n\tresult = {}\n    }\n    \n    log.debug("NZDFBGA02 Received=>%s", recvHex)\n    log.debug("NZDFBGA02 device = "..json.encode(device))\n\n    -- 判断数据是否有效\n    if inValid(recvHex) then\n        local message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n    else\n        -- 解析时间\n        local recvTime = unixtimestamp(recvHex)\n        log.debug("NZDFBGA02 Received=>"..recvTime)\n\n        -- 判断有是几通道\n        local channelNum = channelNumFun(recvHex)\n        log.debug("NZDFBGA02 Received=>"..json.encode(channelNum))\n        -- 获取所有波长数据\n        local waveLenDataTab = getWaveLengthTable(channelNum, recvHex)\n        log.debug("NZDFBGA02 table=>"..json.encode(waveLenDataTab))\n\n        -- 将数据和对应的设备id插入到out.data表中\n        for channelNoId = 1, channelNum, 1 do\n            for moduleNoId = 1, 30, 1 do\n                -- 查找子设备id\n                local childDevice = getDeviceInfo(channelNoId, moduleNoId)\n                if childDevice == nil  then -- 子设备信息为空\n                    out.result={\n                        code=1002,\n                        msg="subdevices is nil",\n                        }\n                else  --子设备信息不为空\n                    local dataTmp = {\n                        type = 1,\n                        time = recvTime,\n                        data = {\n                            waveLength = waveLenDataTab[channelNoId][moduleNoId],\n                        },\n                        device = childDevice.id,\n                    }\n                    -- 将子设备信息填入返回结果\n                    log.debug("NZDFBGA02 dataTmp=>"..json.encode(moduleNoId)..json.encode(dataTmp))\n                    table.insert(out.data, dataTmp)\n                end\n            end\n        end\n    end\n    local resultData = json.encode(out)\n    log.debug("NZDFBGA02 resultData=>"..json.encode(resultData))\n    ctx:notify(resultData)\nend\n\n-- 判断数据有效性\nfunction inValid(data)\n    if nil == channelNumFun(data) then  -- 数据长度不在三个通道的长度之间\n        log.debug("NZDFBGA02  buff =DataLENGTH is Invalid")\n        errormsg = 'DataLen is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n    end\n    if iota.hexToByte(data, 6,'B') ~= 0xFF or iota.hexToByte(data, 7,'B') ~= 0x04 then -- 第一个包头的第一个字节，功能码不等于FF， 第一个包头的第二个字节，功能码不等于FF\n        log.debug("NZDFBGA02  buff =DataHEAD is Invalid %x  %x", iota.hexToByte(data, 6,'B'), iota.hexToByte(data, 7,'B'))   \n\n        log.debug("NZDFBGA02  buff =DataHEAD is Invalid "..data) \n        errormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n    end\n    if iota.hexToByte(data, 255,'B') ~= 0x64 or iota.hexToByte(data, 254,'B') ~= 0x6E then -- 第一个包尾最后一个字节不为 64， 第一个包围倒数第二个字节不为6E  \n        log.debug("NZDFBGA02  buff =DataTAIL is Invalid"..json.encode(iota.hexToByte(data, 255,'B'))..json.encode(iota.hexToByte(data, 254,'B')))\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n    end\n\treturn false\nend\n\n-- 将时间字符串转化为时间戳\nunixtimestamp=function(dateStr)\n    -- 12 06 15 11 3B 3A  ==>   18 06 21 17 59 58\n    local year = tonumber(string.sub( dateStr, 1, 2), 16) + 2000;\n\tlocal month = tonumber(string.sub( dateStr, 3, 4), 16);\n\tlocal day = tonumber(string.sub( dateStr, 5, 6), 16);\n    local hour = tonumber(string.sub( dateStr, 7, 8), 16);\n    local minute = tonumber(string.sub( dateStr, 9, 10), 16);\n    local second = tonumber(string.sub( dateStr, 11, 12), 16);\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n    local recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)\n\treturn recordTime\nend\n\nfunction channelNumFun(data)\n    local dataLen = string.len(data)\n    if 506 == dataLen / 2 then\n        return 8;               -- 8通道\n    elseif 1006 == dataLen / 2 then\n        return 16;               -- 16通道\n    elseif 2006 == dataLen / 2 then\n        return 32;               -- 32通道\n    else\n        return nil;               -- 错误\n    end\nend\n\n-- 传入参数 通道数， recvHex\n-- 解析出所有波长数据，按通道分成表返回\n-- ret = { {通道1}， {通道2} 。。。。。}\nfunction getWaveLengthTable(channelNum, data)\n    local ret = {}\n    --log.debug("NZDFBGA02  ret==> "..json.encode(ret))\n    local dataIndex = 11\n    for channelNoId = 1, channelNum, 1 do\n        ret[channelNoId] = {}\n        for moduleNoId = 1, 30, 1 do\n            local tempWaveLen = iota.hexToShort(data, index,'B') / 1000 + 1520\n            --log.debug("NZDFBGA02 tempWaveLen=>"..json.encode(tempWaveLen))\n            table.insert(ret[channelNoId], tempWaveLen)\n            dataIndex = dataIndex + 2\n        end\n        if channelNoId % 4 == 0 then\n            dataIndex = dataIndex + 10\n        end\n    end\n    log.debug("NZDFBGA02 tempWaveLen=>"..json.encode(ret))\n    return ret\nend\n\n-- 获取采集仪下面的通道信息\n-- 传入参数：通道号， 模块号\n-- 返回子设备信息（表）\ngetDeviceInfo = function(channelNoId, moduleNoId)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("NZDFBGA02  查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            local moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            local channelStrCheck = child.uplink.props.channel\n            --log.debug('NZDFBGA02  子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n            \n            if tonumber(moduleStrCheck) == tonumber(moduleNoId)  and tonumber(channelStrCheck) == tonumber(channelNoId) then\n                log.debug('NZDFBGA02   m=%s  c= %s匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('NZDFBGA02   subdevices是nil')\n        return nil\n    end\nend\n\n--[[\n    12 06 15 11 3B 3A    FF 04 F0 01 01     2A372A372A372A372A372A372A372A372A372A372A372A37 ... 00 00 00 00 65 6E 64   FF 04 F0 01 01     2A37 2A37 2A37 2A37 2A37 2A37 2A37 2A37 ... 00 00 00 00 65 6E 64\n原始数据：\n    120615113B3AFF04F001012A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A370000656E642A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A372A37FF04F001010000656E64\n结果：\n    1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,1524.87,\n--]]	INLINE	2019-12-23 14:06:49.759+08	2019-12-24 15:07:45.732+08	2019-12-23	\N
6fc8d8c6-fe8f-42ab-950d-8214817ff43a	fs_magneticflux_1701	\N	磁通量	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--02 协议分析/2017-01/ModBus统一通信协议.xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\n\nstart=function()\n    log.debug("fs_magneticflux_1701:load script %s, moduleId=%s", "fs_magneticflux_1701.lua", device.props.moduleId or "[nil]")   \nlocal endian = 'B'\n   local buff=''\n   local out={\n       data ={},\n       result = {},\n       type=2\n   }\n\n   local subdevices=device.dnlinks[1].devices  --获取采集仪下 子设备列表\n   if subdevices ~=nil then\n      \n       log.debug("fs_magneticflux_1701:LUA:根设备devices : data is =%s", json.encode(device))\n       for index,child in pairs(subdevices) do\n           log.debug("fs_magneticflux_1701:LUA:子设备subdevices=%s : data is =%s", index,json.encode(subdevices))\n           if json.encode(child.uplink.props) ~= 'null' then\n               moduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n               channelNo=tonumber(child.uplink.props.channel)\n               log.debug("fs_magneticflux_1701 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n           else\n              moduleNo=child.props.moduleId\n              channelNo=child.props.channelId \n              log.debug("fs_magneticflux_1701 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n           end\n           log.debug("fs_magneticflux_1701:模块%s通道%s的deviceId是%s：",moduleNo,channelNo,tostring(child.id))\n           \n           local buff=''\n                \n           buff=iota.appendHexWord(buff, 30, endian)             -- 2: 类型=1\n           buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n           buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n           buff=iota.appendHexByte(buff, channelNo, endian)              -- 1: 通道号\n           local Deg = tonumber(child.uplink.capabilities[1].formula.props.Deg) --//是否消磁(Deg;1:消磁，0:不消磁)\n           local Des = tonumber(child.uplink.capabilities[1].formula.props.Des) --//是否判断传感器采集\n           log.debug("fs_magneticflux_1701  m=%s,c=%s  Deg=%s,Des=%s ",moduleNo,channelNo,Deg,Des)\n           local vol = child.uplink.capabilities[1].formula.props.vol -- 激励电压Uj(V)\n           local reg = child.uplink.capabilities[1].formula.props.reg -- 2:理论电阻值(Ω)\n           log.debug("fs_magneticflux_1701  v=%s,r=%s  ",vol,reg)\n           \n           if Deg==1 then\t\t\t\n               if Des==1 then\n               --log.debug("fs_magneticflux_1701:0x1f,Deg=%s,Des=%s",Deg,Des)\n                   buff=iota.appendHexByte(buff, 0x1f, endian)\n               else\n               --log.debug("fs_magneticflux_1701:0x0f,Deg=%s,Des=%s",Deg,Des)\n                   buff=iota.appendHexByte(buff, 0x0f, endian)\n               end\n           else\n               if Des==1 then\n               --log.debug("fs_magneticflux_1701:0x1e,Deg=%s,Des=%s",Deg,Des)\n                   buff=iota.appendHexByte(buff, 0x1e, endian)\n               else\n               --log.debug("fs_magneticflux_1701:0x0e,Deg=%s,Des=%s",Deg,Des)\n                   buff=iota.appendHexByte(buff, 0x0e, endian)\n               end\n           end\n           --1:采集选项\n           buff=iota.appendHexWord(buff, vol, endian) -- 激励电压Uj(V)\n           buff=iota.appendHexWord(buff, reg, endian) -- 2:理论电阻值(Ω)\n           buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n           ok,resp=ctx:ssend(buff,80000)\n           local result='{}'\n           if ok then\t\n           log.debug("fs_magneticflux_1701:模块%s通道%s的数据接收=%s",moduleNo,channelNo,resp)    \n           result = unmarshall(resp,child,moduleNo,channelNo)--解析单条数据\n           table.insert(out.data,result)\n           else\n           log.debug("fs_magneticflux_1701  模块%s通道%s的数据接收失败",moduleNo,channelNo)    \n           end\n       end      \n       \n   else\n       log.debug("fs_magneticflux_1701 subdevices是nil")\n       return nil\n   end\n       \n   local resultData =json.encode(out)\n   log.debug("fs_magneticflux_1701  模块=%s ,out序列化结果 out =%s", moduleNo,json.encode(out))\n   ctx:done(resultData)\t\n   \n   \nend\n\n-- 001E26C6810D6FFDA1011E000D6FFDA141AA000041AA000098F0D20607E107E107140530D2F0F834\n--m=9926  c=1\n--"cableforce": 0,\n--"ctemp": 21.25,\n--"stemp": 21.25,\n--"voltage": 0\nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\n   local subData={\n       data ={},\n       device=subDevice.id,\n       type=1  \n   }\n   \n   --log.debug("fs_magneticflux_1701:模块%s通道%s的deviceId是：%s",subModuleId,subChannelId,subDevice.id)\n   local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n   if ErrorCode then     \n\n       \n\n\n       local vol = iota.hexToFloat(hex,12,'B')\n       local stem = iota.hexToFloat(hex,16,'B')\n       local ctem = iota.hexToFloat(hex,20,'B')\n\n       --公式\n       \n       local force = 0;\n       if subDevice.uplink.capabilities[1].formula.metaid =="3abb17e6-e48f-467d-840e-87a6666ee188" then\n           local kt = subDevice.uplink.capabilities[1].formula.props.Kt\n           local t0 = subDevice.uplink.capabilities[1].formula.props.T0\n           local c0 = subDevice.uplink.capabilities[1].formula.props.C0\n           local c1 = subDevice.uplink.capabilities[1].formula.props.C1\n           local c2 = subDevice.uplink.capabilities[1].formula.props.C2\n           local ktm = subDevice.uplink.capabilities[1].formula.props.Ktm\n           local tc0 = subDevice.uplink.capabilities[1].formula.props.Tc0\n           log.debug("fs_magneticflux_1701 参数 kt=%s,t0=%s,c0=%s,c1=%s,c2=%s,ktm=%s,tc0=%s",kt,t0,c0,c1,c2,ktm,tc0)\n           local volt = vol - kt * (stem - t0) - ktm * (ctem - tc0)     \n           local phy = c2*(volt^2) + c1*volt + c0\n           force = phy\n\t elseif subDevice.uplink.capabilities[1].formula.metaid =="eb23e709-ad84-4257-a0a7-e7bc44e81f29" then --新modbus公式\n\t\t  local kt = subDevice.uplink.capabilities[1].formula.props.Kt\n           local t0 = subDevice.uplink.capabilities[1].formula.props.T0\n           local c0 = subDevice.uplink.capabilities[1].formula.props.C0\n           local c1 = subDevice.uplink.capabilities[1].formula.props.C1\n           local c2 = subDevice.uplink.capabilities[1].formula.props.C2\n           local ktm = subDevice.uplink.capabilities[1].formula.props.Ktm\n           local tc0 = subDevice.uplink.capabilities[1].formula.props.Tc0\n\t\t   local v0 = subDevice.uplink.capabilities[1].formula.props.V0\n\t\t   local f0 = subDevice.uplink.capabilities[1].formula.props.F0\n\t\t   \n           log.debug("fs_magneticflux_1701 参数 kt=%s,t0=%s,c0=%s,c1=%s,c2=%s,ktm=%s,tc0=%s,v0=%s,f0=%s",kt,t0,c0,c1,c2,ktm,tc0,v0,f0)\n           local volt = v0-(vol - kt * (stem - t0) - ktm * (ctem - tc0))     \n           local phy = c2*(volt^2) + c1*volt + c0 + f0\n           force = phy\n      end\n       subData.data = {\n           voltage=vol,\n           stemp = stem,\n           ctemp = ctem,\n           cableforce = force,\n       }       \n   else\n       subData.result = {code=errcode,msg=errormsg} \n   end\n   return subData\nend\n\n\n\nIsValid=function(data,moduleId,channelId)\n   log.debug('fs_magneticflux_1701  m=%s,c=%s,校验数据=%s',moduleId,channelId,data)\n   if data == nil then\n       errormsg = 'Data is nil'\n       errcode = 1002\n       return false\n   end\n  local len=string.len(data)\n  if len <30 then\n       errormsg =string.format('数据长度不足=%s',data)\n       errcode = 1003\n       return false\n   end\n   \n   if (iota.hexToByte(data,1,'B')) ~= 30 then \n       errcode = 1004\n       errormsg = 'Invalid Data' \n       return false\n   end\n   if iota.hexToByte(data,4,'B') ~= 0x81 and iota.hexToByte(data,4,'B') ~= 0xC0 then\n       errcode = 1005\n       errormsg = 'Hex CMD False ' \n       return false\n   end\n   \n   local data_moduleId=tostring(iota.hexToShort(data,2,'B'))\n   if tostring(moduleId) ~= tostring(data_moduleId) then\t\n       errormsg = '无效的模块号'\n       errcode = 1006\n       log.debug("fs_magneticflux_1701 m=%s,c=%s,数据模块号错误[%s]",moduleId,channelId,data_moduleId)\n       return false\n   end\n   \n   \n   local data_channelId=iota.hexToByte(data,9,'B')\n   if tonumber(channelId) ~= tonumber(data_channelId) then\t\n       errormsg = '无效的通道'\n       errcode = 1007\n       log.debug("fs_magneticflux_1701  m=%s,c=%s,数据通道号错误[%s]",moduleId,channelId,data_channelId)\n       return false\n   end\n   \n   \n       \n--crc\n --判断CRC16正确性\n local checkCrc=string.sub(data,-4,-1)\n--log.debug("checkCrc=%s",checkCrc)\n local dataCopy=string.sub(data,1,-5)\n dataCopy=iota.appendHexCrc(dataCopy, 'B' ,0)\n local Crc16=string.sub(dataCopy,-4,-1)\n --log.debug("fs_magneticflux_1701:dataCopy:%s的Crc16=%s",dataCopy,Crc16)\n \n local isCheckCrcOK=string.lower(Crc16)==string.lower(checkCrc)\n if isCheckCrcOK ~=true then \n     log.debug("fs_magneticflux_1701  m=%s,c=%s isCheckCrcOK=%s,Crc_16=%s,checkCrc=%s",moduleId,channelId,isCheckCrcOK,string.lower(Crc16),string.lower(checkCrc))\n   errormsg = 'crc16校验错误'\n   errcode = 1008\n   return false\n end\n log.debug('fs_magneticflux_1701  m=%s,c=%s 数据校验通过',moduleId,channelId)\n  return true\nend	INLINE	2017-08-26 16:10:56.798+08	2020-05-21 18:03:00.485+08	2017-08-24	\N
90c896b2-bf34-4005-91e2-de3860809bc2	AES128Test	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	-- lua AES128/base64 test\nstart=function()\n    body='{"limit":5,"name":"0027","skip":0,"type":4,"platform":1}'\n    key="RKloinporqKRSdv8"\n    iv="zq7AZEXlnz65IEaW"\n    local r1,b=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n    local r2,s1=crypto.base64Encode(b)\n    log.debug("FS_streetlight_2040    r=%s:%s",r2,s1)\n    -- S1=8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA==\n  \n     --T2\n     body='{"cmds":[{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1a826b0677e5feb9db9","code":1,"headSerial": 1,"control":{"devtype":4,"read":1},"addr": "0x00273123"},{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1d226b0677e5feb9dbb","code":1,"headSerial": 2,"control":{"devtype":4,"read":1},"addr": "0x00273137"}],"platform":1}'\n     bs="obzvX6LQDv89QFrs9G9nYDUpAEVy/mH+oMBGDERtjjM+PVu7XyEHVk6zcl517oBEO0ov/wiIPIG8+2qoRaSmC8X0ubB9864HqSRCOrPJ+h1lPYrOette9hgyIYIF1n7w7i0v0kzsRhNekUZZuKIAnb+rwU8ZG0mt1BynaOLFNErGNfxBH6tsDT1Y326IyDp7mS7E14GSUi2txyiJy2lIM7mwjTD7spKGjouFAw1zDcCJvmLepsURMU/8V4rASl6P8wixotANpSg6EfFbcOZlpkd8wmzCpJFv2v57Heo22pUUqd6YHw3UJB2Ncpxoy6KKILHglOU7J5tDEJIratiGYgrrnzj7oUHTgpweVe1LOJ+BjWyuPpWBqCfWm9ewtcBKTCDGdSX6hjCfToDX+R5f4t5K+ndV5M6FcLHe+3S/mnk="\n     key="RKloinporqKRSdv8"\n    iv="zq7AZEXlnz65IEaW" \n    local r1,bs=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n    local r2,bo=crypto.base64Encode(bs)\n    log.debug("FS_streetlight_2040  enc=%s",bo) -- OK\n    \n    local r1,od=crypto.aes128Decrypt(bs,key,iv)\n    local s1=iota.hexToString(od)\n    log.debug("FS_streetlight_2040  orig=%s \\n%s",r1, s1)\n    \n     local out = {\n          data = { str=s1},\n          result = { result=true},\n          type = 1\n      }  \n    \n    ctx:done(json.encode(out))\n  end	INLINE	2019-10-31 11:10:32.828+08	2019-10-31 16:01:51.853+08	2019-10-31	\N
03de22b4-c4d1-4c9e-a808-b9eca6c9e2c3	masfs	\N		1	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "MAS_FS", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("MAS_FS 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x80, endian)            \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("MAS_FS SSend error!")\n        end\n        ctx:done(result)\nend\n--01 80 01 80\n--01 80 04 00 c2 01 00 00 6D F3\n--moduleId=1 \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local speed = iota.hexToShort(hex,4,'L')\n       \n        out.data = {\n            speed=speed/10.0\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('MAS_FS 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x80 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('MAS_FS 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2020-09-28 10:39:49.966+08	2020-09-28 10:39:49.966+08	2020-09-28	\N
171809a1-877d-4ca2-ba5b-f9c0836478bd	AES128Test	\N		1	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	f	f16833ab-a4a4-45f5-9b39-ad2c66e488f6	Lua	-- lua AES128/base64 test\nstart=function()\n    body='{"limit":5,"name":"0027","skip":0,"type":4,"platform":1}'\n    key="RKloinporqKRSdv8"\n    iv="zq7AZEXlnz65IEaW"\n    local r1,b=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n    local r2,s1=crypto.base64Encode(b)\n    log.debug("r=%s:%s",r2,s1)\n    -- S1=8WET6zSFzjG0GjDUaJcnZONSNzH+Mi6vCAixnXnztQ6S9mSlmlFG+zDmFRdAT3LStiegpLNCnYM8lMxTfZrMhA==\n  \n     --T2\n     body='{"cmds":[{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1a826b0677e5feb9db9","code":1,"headSerial": 1,"control":{"devtype":4,"read":1},"addr": "0x00273123"},{"gatewayAddr": "0xFBFB03D2","uid": "5d36c1d226b0677e5feb9dbb","code":1,"headSerial": 2,"control":{"devtype":4,"read":1},"addr": "0x00273137"}],"platform":1}'\n     bs="obzvX6LQDv89QFrs9G9nYDUpAEVy/mH+oMBGDERtjjM+PVu7XyEHVk6zcl517oBEO0ov/wiIPIG8+2qoRaSmC8X0ubB9864HqSRCOrPJ+h1lPYrOette9hgyIYIF1n7w7i0v0kzsRhNekUZZuKIAnb+rwU8ZG0mt1BynaOLFNErGNfxBH6tsDT1Y326IyDp7mS7E14GSUi2txyiJy2lIM7mwjTD7spKGjouFAw1zDcCJvmLepsURMU/8V4rASl6P8wixotANpSg6EfFbcOZlpkd8wmzCpJFv2v57Heo22pUUqd6YHw3UJB2Ncpxoy6KKILHglOU7J5tDEJIratiGYgrrnzj7oUHTgpweVe1LOJ+BjWyuPpWBqCfWm9ewtcBKTCDGdSX6hjCfToDX+R5f4t5K+ndV5M6FcLHe+3S/mnk="\n     key="RKloinporqKRSdv8"\n    iv="zq7AZEXlnz65IEaW" \n    local r1,bs=crypto.aes128Encrypt(iota.stringToHex(body),key,iv)\n    local r2,bo=crypto.base64Encode(bs)\n    log.debug("enc=%s",bo) -- OK\n    \n    local r1,od=crypto.aes128Decrypt(bs,key,iv)\n    local s1=iota.hexToString(od)\n    log.debug("orig=%s \\n%s",r1, s1)\n    \n     local out = {\n          data = {},\n          result = { result=true},\n          type = 1\n      }  \n    \n    ctx:done(json.encode(out))\n  end	INLINE	2019-10-31 16:28:50.507+08	2019-10-31 16:28:50.507+08	2019-10-31	\N
81741880-ebc8-42d9-bf53-1c6def33376c	fs_microPower_1	\N	微功耗	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    --log.debug("fs_microPower_1 : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fs_microPower_1 devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fs_microPower_1 recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        --log.debug("fs_microPower_1 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        --log.debug("fs_microPower_1 datfileback %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n            log.debug("fs_microPower_1 解析dat r1= %s", dathex)\n            ParseFileDat(dathex)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                --log.debug("fs_microPower_1 接收dat datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                --log.debug("fs_microPower_1 接收dat r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power = iota.hexToByte(data,13,'B')\n            --log.debug("fs_microPower_1 剩余电量  %s", power)\n\t\t\tlocal setting = iota.hexToByte(data,14,'B')\n\t\t\t--log.debug("fs_microPower_1  通道配置版本号 %s", setting)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\t--log.debug("fs_microPower_1 版本固件 %s", ver)\n\t\t\tlocal backlog =iota.hexToShort(data,15,'B')\n\t\t\t--log.debug("fs_microPower_1 积压数据 %s", tostring(backlog))\n\t\t\tlocal wakeup =iota.hexToUShort(data,22,'B')\n\t\t\tlog.debug("fs_microPower_1 节点苏醒次数 %s", tostring(wakeup))\t\t\t\t\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_backlog", tostring(backlog))\n\t\t\tredis.set(device.id.."_wakeup", tostring(wakeup))\t\t\t\n\t\t\tlocal version = string.format("%0.2f",ver)\n\t\t\tlocal v = Split(version,'.')\n\t\t\tlocal vlen = v[2].length\n\t\t   \n\t\t\tif vlen == 1 then\n\t\t\t  version = version.."0"\n\t\t\telseif vlen == 0 then\n\t\t\t  version = version..".00"\n\t\t\tend\n\t\t\t--log.debug('fs_microPower_1 version=%s', version)\t\t\t\n\t\t\tredis.set(device.id.."_version", version)\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            --log.debug("fs_microPower_1 devices crc =%s",crc)\n      \t\t--log.debug("fs_microPower_1 dtuid time2")\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n\t\t\t    log.debug("fs_microPower_1 crc %s r1 %s setting%s" ,crc,r1,setting)\n        \t\tlog.debug("fs_microPower_1 dtuid time")\n        \t\tlocal hour= os.date("%H")\n        \t\tlog.debug("fs_microPower_1 dtuid %s hour %s",device.uplink.props.id,tostring(hour))\n                if crc == r1 and setting ~= 0xFF then\n                    log.debug("fs_microPower_1 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("fs_microPower_1  配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("fs_microPower_1 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("fs_microPower_1 苏醒帧返回 %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("fs_microPower_1 deviceid:%s 设备休眠",device.uplink.props.id)\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver="V"..r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\t--log.debug("fs_microPower_1 powerstr=%s",powerstr)\n      \n\t\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\t\tlocal backlog = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tbacklog=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\t\tend\n\t\t\t\n\t\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\t\tlocal wakeup = 0\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\twakeup=r1\n\t\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\t\tend\t\t\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\tlocal tb = {\n\t\t\t\t\t\t\tR=tostring(backlog),\n\t\t\t\t\t\t\tWTS=tostring(wakeup)\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\ttable.insert(rst.data.R.node,tb)\t\t\t\t\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n                firststart=firststart+datalength\t\t\t\t\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n\t\t\t\t\tif childDevice~=nil then\n\t\t\t\t\t\tlocal Phy\n\t\t\t\t\t\tlocal k = childDevice.uplink.props.k or 0\n\t\t\t\t\t\tlocal kt = childDevice.uplink.props.kt or 0\t\t\t\t\t\t\n\t\t\t\t\t\tlocal f0 = childDevice.uplink.props.f0 or 0\n\t\t\t\t\t\tlocal t0 = childDevice.uplink.props.t0 or 0\t\t\n\t\t\t\t\t\tlocal status = iota.hexToByte(data,firststart+11,'B')\n\t\t\t\t\t\tif k~=nil and f0~=nil then\n\t\t\t\t\t\t\tlocal freq = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\tlocal temp = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\t\tend\t\t\n\t\t\t\t\t\t--log.debug("fs_microPower_1 振弦 Phy =%s, deviceid %s", Phy,childDevice.id)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\tam = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B'),\n\t\t\t\t\t\t\t\tphysicalvalue = Phy\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\tif rst.data.temperature == 200 or rst.data.temperature == -200 then\n              \t\t\t\trst.data.temperature = nil              \n              \t\t\tend\n\t\t\t\t\t\tif status == 1 then\n\t\t\t\t\t\t\trst.result = {code=30010022,msg="频率线断路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif status == 2 then\n\t\t\t\t\t\t\trst.result = {code=30010023,msg="频率线短路"}\n              \t\t\t\trst.data ={}\n\t\t\t\t\t\tend\t\t\t\t\t\t\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 振弦 %s",  json.encode(out))\n\t\t\t\t\tend\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n          \t\t\tlocal protocalCode=iota.hexToShort(data,firststart+6,'B')\n\t\t\t\t\tlocal hour = os.date("%H")\n\t\t\t\t\tlocal min = os.date("%M")\n\t\t\t\t\tlocal acqnum = hour*2+1\n\t\t\t\t\tif tonumber(min) >= 30 then\n\t\t\t\t\t\tacqnum = acqnum+1\n\t\t\t\t\tend\n\t\t\t\t\t--log.debug("fs_microPower_1 acqnum %s",  acqnum)\n\t\t\t\t\tif childDevice~=nil then\t\n\t\t\t\t\t\tif protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\t\t--log.debug("fs_microPower_1 测斜 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tanglex = iota.hexToFloat(data,firststart+12,'B',2),\n\t\t\t\t\t\t\t\t\tangley = iota.hexToFloat(data,firststart+16,'B',2),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B',2),\n\t\t\t\t\t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\tlog.debug("fs_microPower_1 测斜 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n    \n         \t\t\t if protocalCode==9101 then     --拉线位移\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 位移 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 位移 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 裂缝 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 裂缝 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==9218 then     --风速\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tspeed = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风速 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9219 then     --风向\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tdirection = iota.hexToFloat(data,firststart+12,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 风向 %s",  json.encode(out))\n\t\t\t\t\t\tend\n                    end\n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\thumidity = iota.hexToFloat(data,firststart+16,'B') \n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n    \n                    if protocalCode==9002  then     --压差\n\t\t\t\t\t\t--log.debug("fs_microPower_1 yc ")\n                        local childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tphysicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\tfrequency = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+20,'B')\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 静力水准仪 %s, deviceid: %s", module,childDevice.id)\n\t\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n                  \t\t\t\t\t_acq_number=acqnum\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\t--log.debug("fs_microPower_1 水位 %s, deviceid %s", module,childDevice.id)\n\t\t\t\t\t\tif childDevice~=nil then \n\t\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\t\t--temperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t\t\tpressure=iota.hexToFloat(data,firststart+12,'B')--兼容老设备\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\t\t\t--log.debug("fs_microPower_1 水位 %s",  json.encode(out))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n\t\t\t\t--log.debug("fs_microPower_1 dataresult %s", json.encode(out))\n            end \n            log.debug("fs_microPower_1 out %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            --log.debug("fs_microPower_1: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("fs_microPower_1 : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n\t\t\tlog.debug("fs_microPower_1 subdevice =%s",json.encode(subdevice))\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("fs_microPower_1 : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.frequency, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tlog.debug("fs_microPower_1 : begin setting")\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tlog.debug("fs_microPower_1  baudrate =%s databits %s parity %s stopbits %s sensor %s",baudrate,databits,parity,stopbits,json.encode(subdevice))\n\t\t\t\tlocal setting\n\t\t\t\tif baudrate == nil then\n\t\t\t\t\tsetting = tonumber(subdevice.uplink.props.baudrate) + tonumber(subdevice.uplink.props.databits) * math.pow(2, 2) + tonumber(subdevice.uplink.props.parity) * math.pow(2, 4) + tonumber(subdevice.uplink.props.stopbits) * math.pow(2, 6)\n\t\t\t\telse\n                setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n\t\t\t\tend\n                log.debug("fs_microPower_1  setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\t\t\t\tlocal shex = FloatToHex(tonumber(subdevice.uplink.props.samplefreq))\n\t\t\t\tbuff=buff..shex\n\t\t\t\tlocal fhex = FloatToHex(tonumber(subdevice.uplink.props.filterfreq))\n\t\t\t\tbuff=buff..fhex\n                --buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                --buff=iota.appendHexWord(buff, 0x4248, 'B')\n                --buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n\t\t\t\tlog.debug("fs_microPower_1  ssend request =%s",ack)\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("fs_microPower_1  deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("fs_microPower_1 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then          \tlog.debug("fs_microPower_1 subdevice=%s",subdevice)      \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("fs_microPower_1 has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("fs_microPower_1 has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("fs_microPower_1  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("fs_microPower_1 deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("fs_microPower_1 begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        --log.debug("fs_microPower_1 finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_microPower_1 r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_microPower_1 powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_microPower_1 cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("fs_microPower_1 not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    --log.debug("fs_microPower_1 len %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        --log.debug("fs_microPower_1 te %s", te)\n        sum = sum+ tonumber(te)\n    end\n    --log.debug("fs_microPower_1 sum %s", sum)\n   return 0xffff-sum\nend\n\n\nfunction FloatToHex( floatNum )\n\tlocal S = 0\n\tlocal E = 0\n\tlocal M = 0\n\tif floatNum == 0 then\n        return "00000000"\n    end\n\tlocal num1,num2 = math.modf(floatNum/1)\n\tlocal InterPart = num1\n \n\tif floatNum > 0 then\n\t\tS = 0 * 2^31\n\telse\n\t\tS = 1 * 2^31\n\tend\n\tlocal intercount = 0\n\trepeat\n\t\tnum1 = math.modf(num1/2)\n\t\tintercount = intercount + 1\n\tuntil (num1 == 0)\n \n\tE = intercount - 1\n\tlocal Elen = 23 - E\n\tInterPart = InterPart % (2^E)\n\tInterPart = InterPart * (2^Elen)\n \n\tE = E + 127\n\tE = E * 2^23\n \n\tfor i=1,Elen do\n\t\tnum2 = num2 * 2\n\t\tnum1,num2 = math.modf(num2/1)\n\t\tM = M + num1 * 2^(Elen - i)\n\tend\n \n\tM = InterPart + M\n \n\t--E值为整数部分转成二进制数后左移位数：22.8125 转成二进制10110.1101，左移4位 1.01101101\n    --E=4 ，再加上127 就为所需E值\n\t--010000011 01101101 000000000000000\n \n\tlocal Result = S + E + M\n \n\tResult = string.format("%08X",Result)\n\treturn Result\nend\n	INLINE	2018-07-12 09:39:49.871+08	2020-09-15 10:27:00.529+08	2018-07-12	\N
d40397c6-b9b9-46ff-b3c5-535d14068a52	bjca_zdwy	\N		1.0	17e2c509-1128-42d6-89b5-5058d7a2a5cd	17e2c509-1128-42d6-89b5-5058d7a2a5cd	f	17e2c509-1128-42d6-89b5-5058d7a2a5cd	Lua	start= function()\nend\n\nonData = function(resp)\n\n    log.debug('bjca_zdwy device=%s', json.encode(device))\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n\tlocal moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    local ErrorCode = IsValidOut(resp,moduleNo)\n    if ErrorCode then\n\t\t--local moduleNostr=toStrHex(string.sub(resp,15,42))\n\t\t--log.debug('bjca_zdwy  moduleNostr=%s', moduleNostr)\n\t\tlocal timenow=unixtimestamp(string.sub(resp,15,30))\n\t\tlog.debug('bjca_zdwy  timenow=%s', timenow)\n\t\tlocal anglex=iota.hexToInt(resp,33,'B')/10^7\n\t\tlocal angley=iota.hexToInt(resp,37,'B')/10^7\n\t\tlocal anglez=iota.hexToInt(resp,41,'B')/10^7\n\t\tlocal temp=iota.hexToShort(resp,47,'B')/100\n\t\tlocal voltage=iota.hexToUShort(resp,51,'B')/100\n\t\t\n\t\t--if moduleNostr==moduleNo then\n\t    out={\n\t\t\tdata={\n\t\t\t\tanglex=anglex,\n\t\t\t\tangley=angley,\n\t\t\t\tanglez=anglez,\n\t\t\t\ttemperature\t=temp,\n\t\t\t\tvoltage=voltage\n\t\t\n\t\t\t},\n\t\t\ttime=timenow\n\t\t}\n         -- end\n    else\n        log.debug('bjca_zdwy 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('bjca_zdwy  resultData=%s', resultData)\n   ctx:notify(resultData)\nend\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\n\nunixtimestamp = function(datestr)\n\n    local year = 2000+iota.hexToByte(datestr,0,'B')\n    local month = iota.hexToByte(datestr,1,'B')\n    local day = iota.hexToByte(datestr,2,'B')\n    local hour = iota.hexToByte(datestr,3,'B')\n    local minute = iota.hexToByte(datestr,4,'B')\n    local second = iota.hexToByte(datestr,5,'B')\n\n    --log.debug("bjca_zdwy year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    log.debug("bjca_zdwy timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug("bjca_zdwy recordTime=%s",recordTime)\n    return recordTime\nend\nIsValidOut = function(checkdata)\n    log.debug('bjca_zdwy 开始校验数据=%s', checkdata)\n\t\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xFE then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('bjca_zdwy HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend\n\n	INLINE	2020-12-24 14:35:03.949+08	2020-12-25 15:06:15.085+08	2020-12-24	\N
c413c8f4-fa5b-4e63-94e2-eb857285fcb1	MASSWCJQ	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("MASSWCJQ: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    --log.debug("MASSWCJQ: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=1\n    }\n    local moduleNonum=device.uplink.props.module\n    local sData= HextoStr(hex)\n    log.debug("MASSWCJQ: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],'END;')\n\t log.debug("MASSWCJQ: spliteData2=%s",json.encode(spliteData2))\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\tlog.debug("MASSWCJQ: spliteData3=%s",json.encode(spliteData3))\n\tlocal rcvd=Split(spliteData3[1],':')\n\t\n\tlocal allData2=Split(spliteData3[8],':')\n\tlocal allData=Split(allData2[2],'_')\n\tlocal sensornum=allData[1]\n\tlocal length=tonumber(allData[2])\n\t\n\tlog.debug("MASSWCJQ: %s length=%s",allData[2],length)\n    if moduleNonum==moduleNo then\n      out.data = {\n            length=length\n        }\n\t \n\tend\n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("MASSWCJQ: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal timenowstr=os.time()\n\tlocal timenow = os.date('%Y%m%d%H%M%S', timenowstr)\n\n\tlocal returnTime=device.props.returnTime\n\tlocal acqinterval=device.props.acqinterval\n\tlocal dkey=device.props.dkey\n\tlocal bps=device.props.bps\n\tlocal sa=device.props.sa\n\tlocal port=device.props.port\n  \tlocal cmd ='$MAS$;DSN:' .. moduleNo .. ';SD:' .. timenow .. ';HCJG:' .. returnTime .. ';CJJG:' .. acqinterval .. ';BPS:' .. bps .. ';DQ1:' .. sensornum .. '_5;' .. 'SA:' .. sa .. ';PORT:' .. port .. ';END;'\n\tlog.debug("MASSWCJQ: cmd=%s",cmd)\n\tif rcvd[1]~='RCVD' then\n\tctx:asend(toHexStr(cmd))\n\tend\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function (input, delimiter)\n    input = tostring(input)\n    delimiter = tostring(delimiter)\n    if (delimiter=='') then return false end\n    local pos,arr = 0, {}\n    for st,sp in function() return string.find(input, delimiter, pos, true) end do\n        table.insert(arr, string.sub(input, pos, st - 1))\n        pos = sp + 1\n    end\n    table.insert(arr, string.sub(input, pos))\n    return arr\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("MASSWCJQ:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2020-11-10 09:51:41.356+08	2020-11-13 14:53:32.316+08	2020-11-10	\N
5b0a47a2-57f5-4eb6-8c6c-81d16d0bf508	fs_laser_9510	\N	通测意达协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//激光传感器FS-JGCJY-XX-B通讯协议\nstart=function()\n    local endian = 'B'\n    local buff=''          \t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  -- 2: 模块号\n    buff=iota.appendHexByte(buff, 0x64, endian)  \n    buff=iota.appendHexByte(buff, 0x72, endian)\n\tbuff=iota.appendHexByte(buff, 0x2d, endian)\n\tbuff=iota.appendHexByte(buff, 0x7a, endian)\t\n\tbuff=iota.appendHexByte(buff, 0x5a, endian)\t\t\n\tbuff=iota.appendHexByte(buff, 0x28, endian)              \n    local xorSum=iota.hexCheckXorSum(buff, 0,7)  \n log.debug("fs_laser_9510  校验 XOR=%s ",xorSum)\nbuff=iota.appendHexByte(buff, xorSum, endian)\t\n    ok,resp=ctx:ssend(buff,50000)\n     log.debug('fs_laser_9510  发送数据=%s',buff)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n    \tlog.debug('fs_laser_9510  接收数据=%s',resp)\n    else\n\t  log.debug('fs_laser_9510  数据采集失败')\n    end\n    ctx:done(result)\nend\n\n--0164722d7a5a2832\n--module=1\n--01647230313233343524\n\n--"length": 0.012345\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n        local asciiStr=HextoStr(string.sub(hex,7,18))\n        log.debug('fs_laser_9510  asciiStr=%s',asciiStr)\n        local  int100 = string.sub(asciiStr,1,1)*100;\n        local  int10= string.sub(asciiStr,2,2)*10;\n        local  int1 = string.sub(asciiStr,3,3);\n       local  int01 = string.sub(asciiStr,4,4)/10;\n      local  int001 = string.sub(asciiStr,5,5)/100;\n      local  int0001 = string.sub(asciiStr,6,6)/1000;\n      local length=int100+int10+int1+int01+int001+int0001\n        out.data = {\n             length =length/1000  --转换单位m\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_laser_9510  开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x64 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n  \tlocal moduleNo_data=iota.hexToByte(data,0,'B')\n    if moduleNo_check ~= tostring(moduleNo_data) then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,moduleNo_data)\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n\nend\n\n\nHextoStr=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n      local bi = iota.hexToByte(hex,i-1,'B')\n      local ascii =string.format("%c",bi)\n      str=str..ascii\n    end\n    return str\n  end	INLINE	2019-11-21 14:20:32.435+08	2019-11-26 09:54:07.094+08	2019-11-21	\N
0f1f4851-c5be-432e-82bc-babc64646eed	FS-TRS-XX-Z	\N	投入式水位计	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-TRS-XX-Z\n]]--liankang\nstart=function ()\n    log.debug("FS-TRS-XX-Z start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("FS-TRS-XX-Z encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("FS-TRS-XX-Z decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n    buff=iota.appendHexByte(buff, 0x01, BE);                        -- 读取寄存器起始地址 00 01\n\tbuff=iota.appendHexByte(buff, 0x00, BE);                        \n\tbuff=iota.appendHexByte(buff, 0x05, BE);                        -- 读取寄存器数量 00 05\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\t\n      log.debug("FS-TRS-XX-Z buff = "..buff) \n\treturn buff\nend\n\n-- decode   \n-- returns: 结果,  水位，水温，水压\n-- 正确回复  01 03 0A 00 00 03 E8 00 6C 00 00 03 E8 F8 04  裂缝距离 displacement : -3.0578\n-- 原始数据  01030A000003E8006C000003E8F804\nfunction protocol_decode(da)\n\t\n\tlocal dataStr = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(dataStr)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n        local waterLev = iota.hexToInt(dataStr, 3, 'B')\n        local waterTemp = iota.hexToShort(dataStr, 7, 'B') / 10\n        local waterPres = iota.hexToInt(dataStr, 9, 'B')\n\n\t\tout.data = {\n            waterLever = waterLev/1000,\n            waterTemperature = waterTemp,\n            waterPresure = waterPres,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 15 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 15  或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n	INLINE	2019-12-11 15:14:01.543+08	2019-12-25 14:12:19.777+08	2019-12-11	\N
56eeb5a2-332c-49e7-af24-4cc3649580b6	home_airclear_mop_09	\N		1.0	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	Lua	start = function()\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    --清除redis使用\n    --local ab = {}\n    --local clearValue = json.encode(ab)\n    --local r1, r1ok = redis.set('00000001_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000002_airclaen_taskconfig', clearValue)\n    --local r1, r1ok = redis.set('00000005_airclaen_taskconfig', clearValue)\n    --log.debug('home_airclear_mop_0901  测试 ab=%s, type=%s,clearValue=%s', json.encode(ab), type(ab), clearValue)\n    log.debug('home_airclear_mop_0901    device=%s', json.encode(device))\n    local deviceId = device.props.device_id\n    --获取 app代理调度能力时 携带的参数 依此判断是何种能力\n    local paramStr = capability.param\n    log.debug('home_airclear_mop_0901   [%s] capability=%s', deviceId, paramStr)\n    local paramData = json.decode(paramStr)\n\n    if (paramData ~= nil and paramData.code ~= nil and paramData.params ~= nil) then\n        local app_cmd = cmd_to_MCU(deviceId, paramData.code, paramData.params, paramData.cmd)\n        if paramData.cmd ~= 267 and app_cmd.code ~= 13 then --查询功能 只查服务器缓存 不下发指令到 设备,设备升级单独判断，由于涉及到是否redis存储成功\n            sendMsgToDeviceTopic(app_cmd)\n        end\n    else\n        log.debug('home_airclear_mop_0901   [%s] paramData 数据内容不正确=%s', deviceId, json.encode(paramData))\n    end\n    local result = json.encode(out)\n    --ctx:sleep(1)\n    ctx:done(result)\nend\n\nsendMsgToDeviceTopic = function(msg)\n    --将指令发送到  设备的topic\n    local dev_topic = msg.ID .. '_device_rece'\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = dev_topic})\n    log.debug('home_airclear_mop_0901   [%s] cmd 发送 dev_topic=[%s] body=%s 完毕 okdev=%s,ack=%s', msg.ID, dev_topic, msgStr, ok, ack)\nend\n\n--净化器 配置指令\nlocal binCache = {params = {}}\ncmd_to_MCU = function(id, code, newconfig, cmdType)\n    local cmd = {}\n    cmd.from = 'server'\n    cmd.ID = id\n    cmd.type = tonumber(device.props.sensorType) -- 257 空气净化器  ，513加湿器\n    cmd.code = code\n    cmd.cmd = cmdType\n    if cmdType == 267 then --app查询功能\n        if code == 4 then --定时任务查询\n            local redis_key = cmd.ID .. '_airclaen_taskconfig'\n            local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n\n            --由于lua的array 键值 一动就变成对象 只能用一个新table 存之前数据 当作 array 下发\n            local array_taskConfigs = {}\n            for _, v in pairs(redis_taskConfigs) do\n                if v.looptype ~= nil then\n                    v.looptype = byte2bin(v.looptype)\n                    --taskID转为实际id\n                    local real_tsakId = tonumber(_)\n                    --app查询得到实际的id\n                    local jia_tsakId = tonumber(v.task, 16)\n                    local hexEn = string.format('%02x', tonumber(v.en))\n                    v.task = tonumber(real_tsakId)\n                    v.en = hexEn\n                end\n                table.insert(array_taskConfigs, v)\n            end\n\n            out.data.params = array_taskConfigs\n            log.debug('home_airclear_mop_0901  同步定时任务  out.data.params=%s', json.encode(array_taskConfigs))\n        elseif code == 15 then --报警阈查询   设备只有PM2.5\n            local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n            local redis_alarmConfigs = getRedisValue_obj(redis_key_alarm, cmd)\n            out.data.params = redis_alarmConfigs\n        end\n    elseif cmdType == 523 then\n        if code == 1 then --初始化 id  即修改id\n            cmd.id = newconfig\n        elseif code == 2 then --修改电源开关\n            cmd.params = newconfig\n        elseif code == 3 then --风速挡位设置\n            cmd.params = newconfig\n        elseif code == 4 or code == 5 then --定时任务设置--添加 or 修改  或者使能\n            --taskCacheUpdate(cmd.ID, newconfig, cmd)  --设备确认成功后，在监听协议中更新redis\n            newconfig.en = tonumber(newconfig.en, 16) -- app传的是字符串  '10',  平台需要转换成16\n            if newconfig.looptype ~= 'null' and newconfig.looptype ~= nil then\n                newconfig.looptype = getlooptype(newconfig.looptype)\n            end\n            local isDouble = true\n            local isTask_on = true\n            local isTask_off = true\n            if newconfig.time_on == nil then\n                isDouble = false\n                isTask_on = false\n            end\n            if newconfig.time_off == nil then\n                isDouble = false\n                isTask_off = false\n            end\n            if newconfig.task == 255 then\n                --255  任务号自增\n\n                newconfig.task = craetTaskId(cmd, isDouble, isTask_on, isTask_off)\n            else\n                --如果是修改双任务 有定时开的 就是前面是1 的 那么发给设备的时候要注意taskid格式\n                local doubleTaskId = transferDoubleTaskId(newconfig.task, isDouble, isTask_on, isTask_off)\n                newconfig.task = doubleTaskId\n            end\n            cmd.params = newconfig\n        elseif code == 6 then --定时删除设置\n            newconfig.task = getTaskId(cmd.ID, newconfig, cmd) --设备确认成功后，在监听协议中更新redis\n            cmd.params = newconfig\n        elseif code == 7 then --杀菌灯开关控制\n            cmd.params = newconfig\n        elseif code == 8 then --负离子开关控制\n            cmd.params = newconfig\n        elseif code == 9 then --加湿器开关控制\n            cmd.params = newconfig\n        elseif code == 10 then --加湿器挡位设置\n            cmd.params = newconfig\n        elseif code == 11 then --设备模式控制\n            cmd.params = newconfig\n        elseif code == 12 then --童锁开关控制\n            cmd.params = newconfig\n        elseif code == 13 then --远程升级 app发起 然后  平台redis存储升级包 ，平台与设备交互，上报升级状态\n            binCache.params = getPackageList(newconfig.binBuff)\n            binCache.updateTime = os.date('%Y-%m-%d %H:%M:%S', os.time())\n            --将升级包存储 redis\n            local redis_key_bin = cmd.ID .. '_air_bin'\n            local isSetOK = setRedisValue_obj(redis_key_bin, binCache, cmd)\n            if isSetOK == true then\n                log.debug('home_airclear_mop_0901   [%s][code=%s]  准备触发固件升级[%s]', cmd.ID, cmd.code, newconfig.binName)\n                local dataObject = cmd\n                dataObject.from = 'server'\n                dataObject.type = tonumber(device.props.sensorType) -- 513加湿器  257  净化器\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.hard = getBinHard(newconfig.binName)\n                --防止为空16=0x10 初始版本\n                dataObject.params.soft = getBinSoft(newconfig.binName)\n                dataObject.params.type = 1 --服务器发起升级申请\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                dataObject.params.CRC = binCache.params.CRC\n                log.debug('home_airclear_mop_0901   [%s][code=%s]  准备触发固件升级--开始发指令 dataObject=%s', cmd.ID, cmd.code, json.encode(dataObject))\n                sendMsgToTopic(dataObject, 'device')\n            else\n                log.debug('home_airclear_mop_0901   [%s][code=%s]  存储失败 isSetOK=%s[type=%s]', cmd.ID, cmd.code, type(isSetOK))\n            end\n        elseif code == 15 then --报警阈值设置   设备只有PM2.5\n            cmd.params = newconfig\n            local redis_key_alarm = cmd.ID .. '_airclaen_alarmconfig'\n            --同时平台留存一份 后续app or设备 同步所有定时任务用\n            setRedisValue_obj(redis_key_alarm, newconfig, cmd)\n            log.debug('home_airclear_mop_0901   [%s][code=%s] redis_set完成=%s', cmd.ID, cmd.code)\n        elseif code == 17 then --加湿器 恒湿设置\n            cmd.params = newconfig\n        else\n            cmd.params = newconfig\n        end\n    end\n\n    return cmd\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    log.debug('home_airclear_mop_0901  进入固件升级发送函数  [%s][code=%s]', msg.ID, msg.code)\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = 'shushijia_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    log.debug('home_airclear_mop_0901  固件升级发送函数  [%s][code=%s] topic=%s', msg.ID, msg.code, topic)\n    msg.packid = os.time()\n    local msgStr = json.encode(msg)\n    log.debug('home_airclear_mop_0901   [%s][code=%s] msgStr=%s', msg.ID, msg.code, msgStr)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   固件升级发送函数 [%s][code=%s][binCache.updateTime=%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, msg.code, binCache.updateTime, topic, msgStr, ok, ack)\nend\n\ngetTaskId = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    local cmd_code = cmd_obj.code\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n\n    local tb = redis_taskConfigs[tsakId]\n    return tb.task\nend\n\ntaskCacheUpdate = function(devId, taskConfig, cmd_obj)\n    local redis_key = devId .. '_airclaen_taskconfig'\n    --同时平台留存一份 后续app or设备 同步所有定时任务用\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd_obj)\n    --判断 任务 id是否存在 存在就更新\n    local tsakId = tostring(taskConfig.task)\n    log.debug('home_airclear_mop_0901   [%s]  排查异常 tsakId=%s,redis_taskConfigs=%s,redis_taskConfigs=%s,type=%s', cmd_obj.ID, tsakId, redis_taskConfigs, json.encode(redis_taskConfigs), type(redis_taskConfigs))\n    local cmd_code = cmd_obj.code\n    if cmd_code == 4 then --添加或修改\n        if redis_taskConfigs[tsakId] ~= nil then\n            redis_taskConfigs[tsakId] = taskConfig\n            log.debug('home_airclear_mop_0901   非首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n        else\n            log.debug('home_airclear_mop_0901   首次插入tsakId=%s[%s]', tsakId, type(tsakId))\n            --table.insert(redis_taskConfigs, tsakId, taskConfig)\n            redis_taskConfigs[tsakId] = taskConfig\n        end\n\n        log.debug('home_airclear_mop_0901   [%s][code=%s] redis_taskConfigs=%s', cmd_obj.ID, cmd_obj.code, json.encode(redis_taskConfigs))\n    elseif cmd_code == 6 then --删除任务\n        redis_taskConfigs[tsakId] = nil\n        log.debug('home_airclear_mop_0901   删除任务 tsakId=%s', tsakId)\n    end\n    setRedisValue_obj(redis_key, redis_taskConfigs, cmd_obj)\nend\n\ngetRedisValue_obj = function(key, logObject)\n    local r1, r1ok = redis.get(key) --获取上次记录时间\n    log.debug('home_airclear_mop_0901   [%s][code=%s]  r1=%s[%s],r1ok=%s  key=%s', logObject.ID, logObject.code, r1, type(r1), r1ok, key)\n\n    local params = {}\n    if r1ok and r1 ~= nil and r1 ~= 'null' then\n        local taskConfig = json.decode(r1)\n        params = taskConfig\n    else\n        log.debug('home_airclear_mop_0901   [%s][code=%s]    taskConfig读取失败  r1=%s,r1ok=%s', logObject.ID, logObject.code, r1, r1ok)\n    end\n    return params\nend\n\nsetRedisValue_obj = function(key, setValueObject, logObject)\n    local setValue = json.encode(setValueObject)\n    local r1ok, r1 = redis.set(key, setValue)\n    log.debug('home_airclear_mop_0901   [%s][code=%s] [setRedis]  r1=%s,r1ok=%s[type=%s],key=%s,setValue=%s', logObject.ID, logObject.code, r1, r1ok, type(r1ok), key, setValue)\n    return r1ok\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n\n--升级文件流 拆解成 1024 字节 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr) / 2\n    local count = len / 1024\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n    --添加整个文件校验\n    local allAppendCrc16 = iota.appendHexCrc(allPackageStr, 'B', 0)\n    local allcrc = string.sub(allAppendCrc16, -4, -1)\n    packageParams.CRC = tonumber(allcrc, 16)\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 2048 + 1\n        local end_index = start_index + 2047 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1a' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n\n        local subAppendCrc16 = iota.appendHexCrc(subPackage, 'B', 0)\n        local subcrc = string.sub(subAppendCrc16, -4, -1)\n        local subCheck = tonumber(subcrc, 16)\n        local subBin = {}\n        subBin.len = string.len(subPackage) / 2\n        subBin.buff = subPackage\n        subBin.checkint = subCheck\n        packageParams.subList[i] = subBin\n    end\n    return packageParams\nend\n\ncraetTaskId = function(cmd, isDouble, isOn, isOff)\n    local redis_key = cmd.ID .. '_airclaen_taskconfig'\n    local redis_taskConfigs = getRedisValue_obj(redis_key, cmd)\n    for i = 2, 15, 2 do --01  只有1 且1是便捷任务  23  45  67  89 ab cd ef  是7组其他任务\n        local task_k = tostring(i)\n        if redis_taskConfigs[task_k] == nil then\n            local taskid_new = i --默认是单任务的 task\n            local kk\n            if isDouble then --如果是双任务   双任务 以开任务号为准\n                kk = string.format('%01x', tonumber(task_k)) .. string.format('%01x', tonumber(task_k) + 1)\n        \t\ttaskid_new = tonumber(kk, 16)\n            elseif isOn then\n                kk = string.format('%01x', tonumber(task_k)) .. '0'\n                taskid_new = tonumber(kk, 16)\n            elseif isOff then\n                kk = '0' .. string.format('%01x', tonumber(task_k) + 1) --新建的关任务=同组的开任务号+1\n                taskid_new = tonumber(kk, 16)\n            end\n            log.debug('home_airclear_mop_0901   自增任务id taskid_new=%s,kk=%s,i=%s', taskid_new, kk, i)\n            return taskid_new\n        end\n    end\n    return 255 --自增失败传255\nend\n\ntransferDoubleTaskId = function(appTaskId, isDouble, isOn, isOff)\n    local task_k = tonumber(appTaskId)\n\n    local taskid_new = 255 --默认是单任务的 task\n    local kk\n    if isDouble then --如果是 同时开关任务  关任务号就是开任务号+1\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n    elseif isOn then\n        kk = string.format('%01x', task_k) .. '0'\n        taskid_new = tonumber(kk, 16)\n    elseif isOff then\n        kk = '0' .. string.format('%01x', task_k)\n        taskid_new = tonumber(kk, 16)\n    end\n    log.debug('home_airclear_mop_0901   使能 任务id taskid_new=%s,kk=%s', taskid_new, kk)\n    return taskid_new\nend\ngetlooptype = function(str)\n    local slen = string.len(str)\n    local looptype_num = 0\n    if slen == 8 then\n        for i = 0, 7, 1 do\n            local index = -1 * (i + 1)\n            local one = string.sub(str, index, index)\n            --print('one='..one)\n            if one == '1' then\n                looptype_num = looptype_num + 2 ^ i\n            --print('looptype_num='..one)\n            end\n        end\n    end\n    local int_num = tonumber(string.format('%d', looptype_num))\n    return int_num\nend\n\nfunction byte2bin(n)\n    local t = {}\n    for i = 7, 0, -1 do\n        t[#t + 1] = math.floor(n / 2 ^ i)\n        n = n % 2 ^ i\n    end\n    return table.concat(t)\nend\n\ngetBinHard = function(binName)\n    local Hard_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'H' then\n                Hard_version = tonumber(string.sub(value, 2, -1))\n                return Hard_version\n            end\n        end\n    end\n    return Hard_version\nend\n\ngetBinSoft = function(binName)\n    local soft_version\n    if binName ~= nil then\n        --文件名 例 KQJSQ_SD01.H016.S016.A.201012.bin\n        local split_names = split(binName, '.')\n        for key, value in pairs(split_names) do\n            local head_str = string.sub(value, 1, 1)\n            if head_str == 'S' then\n                soft_version = tonumber(string.sub(value, 2, -1))\n                return soft_version\n            end\n        end\n    end\n    return soft_version\nend\n\nsplit = function(s, delim)\n    if type(delim) ~= 'string' or string.len(delim) <= 0 then\n        return\n    end\n\n    local start = 1\n    local t = {}\n    while true do\n        local pos = string.find(s, delim, start, true) -- plain find\n        if not pos then\n            break\n        end\n\n        table.insert(t, string.sub(s, start, pos - 1))\n        start = pos + string.len(delim)\n    end\n    table.insert(t, string.sub(s, start))\n\n    return t\nend	INLINE	2020-11-16 16:16:49.462+08	2021-01-19 18:09:41.772+08	2020-11-16	\N
d2931056-a908-4f70-af66-8ba3a1cfc6d7	ZHXQ_camera_Alarm	\N	智慧小区摄像头告警	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	local recordTime\nlocal rkey\nlocal rTokenkey\nstart = function()\n    local req = {\n        type = 'http', --注意 这里不管https还是http都写 http\n        url = '',\n        method = 'post'\n        -- header = {}\n    }\n  \tlog.debug('yinshiyunC  iota测试日志')\n    log.debug('yinshiyunC  os.time()=%s', os.time())\n    rkey = device.id .. '_endTime'\n    rTokenkey = device.id .. '_token'\n    local rvalue = tonumber(getRedisValue(rkey))\n    local rTokenAndTimeStr=getRedisValue(rTokenkey)\n    log.debug('yinshiyunC    rTokenAndTimeStr type=[%s][%s]%s',type(rTokenAndTimeStr),rTokenAndTimeStr==nil,rTokenAndTimeStr)\n    local tokenStr\n    if rTokenAndTimeStr~= nil then\n        local rtt=Split(rTokenAndTimeStr,'===')\n        local tokenExpireTime=tonumber(rtt[2])\n        if tokenExpireTime/1000>(os.time()-3600*24) then --token未过期\n             tokenStr=rtt[1]\n             log.debug('yinshiyunC    redis获取[tokenExpireTime=%s]token=%s',tokenExpireTime,tokenStr)\n        else\n            log.debug('yinshiyunC    开始获取新token')\n            tokenStr=getNewToken()\n\n        end\n    else\n        tokenStr=getNewToken()\n        log.debug('yinshiyunC    rTokenAndTimeStr=%s',rTokenAndTimeStr)\n    end\n\n    if rToken ~= nil then\n        recordTime = tonumber(rvalue)\n    else\n        recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n    end\n\n \n    if rvalue ~= nil then\n        recordTime = tonumber(rvalue)\n    else\n        recordTime = (os.time() - 60 * 30) * 1000 --首次 默认获取 前30分钟数据\n    end\n    local param = {\n        accessToken = tokenStr,--'at.a6diemkr7z1uw3ax1ok8da21czi5iudv-35zqn4u8a4-0h04249-wrhgenopd',\n        deviceSerial = device.props.deviceSerial,\n        pageSize = 1, -- 只获取一个最新告警\n        pageStart = 0,\n        startTime = tonumber(string.sub(tostring(recordTime),1,-2)),\n         -- 萤石云接口故障，开始时间不能精确到毫秒，不然没有customerInfo\n        endTime = os.time() * 1000,\n        status = 2, -- 告警消息状态：2-所有，1-已读，0-未读，默认为0（未读状态）\n        alarmType = -1 -- 告警类型，默认为-1（全部）\n    }\n    --req.url = string.format('https://open.ys7.com/api/lapp/alarm/device/list?accessToken=%s&deviceSerial=%s&pageSize=%s&pageStart=0&startTime=%s&endTime=%s&status=2&alarmType=-1', param.accessToken, param.deviceSerial, param.pageSize, param.startTime, param.endTime)\n    req.url = string.format('https://open.ys7.com/api/lapp/device/info?accessToken=%s&deviceSerial=%s', param.accessToken, param.deviceSerial)\n    log.debug('yinshiyunC  deviceSerial=%s', param.deviceSerial)\n    log.debug('yinshiyunC req=%s', json.encode(req))\n    log.debug('yinshiyunC url=%s', req.url)\n    --log.debug('yinshiyunC 设备原型=%s', json.encode(device))\n\n    --req.ContentType = 'application/x-www-form-urlencoded'--'application/json'  --'application/x-www-form-urlencoded'\n\n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('yinshiyunC    ack==nil')\n    else\n        log.debug('yinshiyunC    ok=%s,ack=%s', ok, ack.body)\n    end\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    if not ok or ack == nil then\n        log.debug('yinshiyunC    not ok,ack=%s', json.encode(ack))\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            log.debug('yinshiyunC ack=%s', ack.body)\n            --out.data, dtime = parseAckStr(ack.body)\n            out.time = dTimeGet(ack.body)\n            --out.time = os.date('%Y-%m-%dT%H:%M:%S+08:00');\n\t    local alarmmsg = statusGet(ack.body)\n\t    if alarmmsg == '设备离线' then\n\t\t    out.result = {\n                code = 70040005,\n                msg = string.format('产生：%s', alarmmsg)\n\t\t    }\n\t    else\n\t\t    out.result = {}\n\t    end\n        else\n            log.debug('yinshiyunC    request data error code=%s body=%s', ack.code, ack.body)\n        end\n    end\n    log.debug('yinshiyunC   out=%s', json.encode(out))\n    ctx:done(json.encode(out))\nend\n\nstatusGet = function(ackDataStr)\n    local dataTable = json.decode(ackDataStr)\n    local status = dataTable.data.status\n    if status == 0 then\n       return '设备离线'\n    else\n       return '设备在线'\n    end\nend\n\ndTimeGet = function(ackDataStr)\n    local dataTable = json.decode(ackDataStr)\n    local timenum = dataTable.data.updateTime\n    return unixtimestampToTime(timenum)\nend\n    \nparseAckStr = function(ackDataStr)\n    local resultTable = {}\n    local dataTime\n    local dataTable = json.decode(ackDataStr)\n    local total = dataTable.page.total\n\n    --Sleep(1)\n\n    local rt_data = dataTable.data\n\n    for k, v in ipairs(rt_data) do\n        --log.debug('yinshiyunC k=%s, value=%s', k, json.encode(v))\n\n        local alarmDeviceName = v.alarmName\n        local alarmType = v.alarmType\n        local alarmTime = v.alarmTime\n        dataTime = unixtimestampToTime(alarmTime / 1000)\n\n        local isChecked = v.isChecked --是否已读：0-未读，1-已读\n\n        local moduleId = v.deviceSerial --设备序列号\n\n        local alarmPicUrl = v.alarmPicUrl --告警图片地址\n        local customerType = v.customerType --透传设备参数类型  可以看作告警类型，温度报警 or 火点报警    "hightemperature"\n        local customerInfo = v.customerInfo --  "type=1006|preid=0|ruleid=0|temp=23.96C"\n\n        log.debug('yinshiyunC  m=%s   告警信息=%s', moduleId, customerInfo)\n\n        local temperature\n\n        if customerType == 'hightemperature' then\n            --温度阈值告警,解析温度\n            local tempindex = string.find(customerInfo, 'temp=') + 5\n            local tempStr = string.sub(customerInfo, tempindex, -2)\n            temperature = tonumber(tempStr)\n        end\n\n        resultTable = {\n            alarmDeviceName = alarmDeviceName,\n            alarmType = alarmType,\n            isChecked = isChecked,\n            alarmPicUrl = alarmPicUrl,\n            customerType = customerType,\n            temperature = temperature,\n            customerInfo = customerInfo\n            --recordTime=recordTime,\n            --endTime=os.time()*1000\n        }\n\n        --time = timenow\n\n        --更新endTime\n        if alarmTime > recordTime then\n            setRedisValue(rkey, alarmTime)\n        else\n            log.debug('yinshiyunC redis不更新 ')\n        end\n    end\n    log.debug('yinshiyunC   resultTable=%s', json.encode(resultTable))\n    return resultTable, dataTime\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(moduleid, channel)\n    --log.debug("yinshiyunC   查询 传感器ID: moduleid=%s,channel=%s", moduleid,channel)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        --log.debug("yinshiyunC   查询 节点层 设备device=%s",json.encode(subdevices))\n\n        for i, link in pairs(device.dnlinks) do\n            --log.debug("yinshiyunC   link=%s",json.encode(link))\n            for j, node in pairs(link.devices) do\n                --log.debug("yinshiyunC  node=%s",json.encode(node))\n                --log.debug("yinshiyunC  模块号(节点) node.uplink.props.node_id=%s",node.uplink.props.node_id)\n                local moduleNo = node.uplink.props.module\n                if moduleNo == tostring(moduleid) then\n                    for k, sublink in pairs(node.dnlinks) do\n                        --log.debug("yinshiyunC  sublink=%s",json.encode(sublink))\n                        for u, subdevice in pairs(sublink.devices) do\n                            --log.debug("yinshiyunC  sensor=%s",json.encode(subdevice))\n\n                            if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                                log.debug('yinshiyunC    m=%s,c=%s 匹配到设备=%s', moduleid, channel, json.encode(subdevice))\n\n                                return subdevice\n                            end\n                        end\n                    end\n                end\n            end\n        end\n\n        --log.debug("yinshiyunC has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("yinshiyunC has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\nunixtimestampToTime = function(timenum)\n    --log.debug('yinshiyunC timenum=%s', timenum)\n    local unixtime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum/1000)\n    --log.debug('yinshiyunC recordTime=%s', recordTime)\n    return unixtime\nend\n\ngetRedisValue = function(redisKey)\n    local redisValue\n\n    local r1, r1ok = redis.get(redisKey) --获取上次记录时间\n    log.debug('yinshiyunC r1=%s,r1ok=%s', r1, r1ok)\n    if r1ok and r1 ~= nil then\n        redisValue = r1\n       log.debug('yinshiyunC r1=%s,r1ok=%s, get redisValue[%s]=%s', r1, r1ok, redisKey,redisValue)\n    end\n    return redisValue\nend\n\nsetRedisValue = function(redisKey, redisValue)\n    local r1, r1ok = redis.set(redisKey, tostring(redisValue))\n    log.debug('yinshiyunC   r1=%s,r1ok=%s, set redisValue=%s', r1, r1ok, redisValue)\nend\n\n\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n\ngetNewToken=function()\n    local newToken\n    local req_token = {\n        type = 'http', \n        url = '',\n        method = 'post'\n        -- header = {}\n    }\n    local param_token = {\n        appKey = '5d16a667e1c2423d9d0d634f781810b4',\n        appSecret = '0cc4e1ec4e6a53ea3dabeb09cd5f468b'\n       \n    }\n    req_token.url = string.format('https://open.ys7.com/api/lapp/token/get?appKey=%s&appSecret=%s', param_token.appKey, param_token.appSecret)\n\n    log.debug('yinshiyunC url=%s', req_token.url)\n    local ok, ack = ctx:ssend(req_token, 4000)\n\n    if ack.code == 200 and ack.body ~= '' then -- http应答\n        log.debug('yinshiyunC  ackBody_token=%s', ack.body)\n        local dataTable = json.decode(ack.body)\n        newToken = dataTable.data.accessToken\n        local newTokenAndExpireTime=string.format("%s===%s",newToken,dataTable.data.expireTime)\n        setRedisValue(rTokenkey, newTokenAndExpireTime)--记录新的newToken===ExpireTime\n\n    else\n        log.debug('yinshiyunC    request token error code=%s body=%s', ack.code, ack.body)\n    end\n\n\n    log.debug('yinshiyunC    newToken=%s', newToken)\n    return newToken\nend	INLINE	2020-10-15 15:30:04.064+08	2020-10-20 16:36:34.787+08	2020-10-15	\N
03873ea1-66d7-41ed-b78c-f41b3ba37eff	xmxd_liquidLevel_195	\N	传感器协议	1.0	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n--\\201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\nstart=function()\n    log.debug("start %s, ctx=%s", "xmxd_liquidLevel_1950.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("xmxd_liquidLevel_1950 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    -- 水位2  水温1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("xmxd_liquidLevel_1950,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("xmxd_liquidLevel_1950  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n    log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal temperature =iota.hexToShort(hex,5,'B')/100\n\t\t\n        log.debug("xmxd_liquidLevel_1950  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            length=length,\n\t\t\ttemperature=temperature\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2018-09-10 10:16:08.968+08	2020-11-20 10:11:48.415+08	2018-09-10	\N
25647db7-386a-466c-b9a3-41ad27518265	ES11	\N	无眼界科技温湿度	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: ES11\n]]--liankang\nstart=function ()\n    --log.debug("ES11 start %s, ctx=%s",json.encode(device))\n\tsendBuff=protocol_encode()\n\tlog.debug("ES11 encoded")\n\tok,resp=ctx:ssend(sendBuff, 15000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\tlog.debug("ES11 decoded=%s",resp)\n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff=iota.appendHexByte(buff, 0x03, BE);                        -- 功能码 03\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n    buff=iota.appendHexByte(buff, 0x07, BE);                        -- 读取寄存器起始地址 00 07 温湿度\n\tbuff=iota.appendHexByte(buff, 0x00, BE);\n\tbuff=iota.appendHexByte(buff, 0x02, BE);                        -- 读取寄存器数量 00 02\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)                            -- CRC16 小端字节序\n\treturn buff\nend\n\n-- decode\n-- returns: 结果,  直线位移\n--   01 03 04 00 33 2B FF 54 8C(长度为51.172mm)\n-- 01030400332BFF548C\n-- 原始数据\nfunction protocol_decode(da)\n\tlocal data = da;\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\tlog.debug(data)\n\t-- 判断数据有效性\n\tif inValid(da) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlog.debug("数据有效")\n\t\tlocal hexLenStr = string.sub(data, 7, 14)\n\t\tlocal temp = iota.hexToShort(hexLenStr, 0, 'B') \t-- 温度\n\t\tlocal humi = iota.hexToUShort(hexLenStr, 2, 'B')  -- 湿度\n\t\tlog.debug("ES11 temp =%s, humi = %s  [%s]", temp,humi,da)\n\n\n\t\tout.data = {\n\t\t\ttemperature = temp/10, \n\t\t\thumidity=humi\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif string.len(data)/2 ~= 9 or iota.hexToByte(data, 1,'B') ~= 0x03 then -- 长度不等于 9   或者 读第二个字节，功能码不等于03\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend	INLINE	2020-03-23 17:24:25.283+08	2020-03-24 17:01:18.871+08	2020-03-23	\N
a544b432-a82e-49b3-8f33-1f6e36703a9e	fs_sampler	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\n    --log.debug("fs_sampler : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("fs_sampler devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("fs_sampler recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\t---设置配置\n\tlocal power = iota.hexToByte(data,15,'B')\n\tlocal ver = iota.hexToByte(data,16,'B')\n\tlog.debug("fs_sampler _power=%s ver =%s",power,ver)\n\tredis.set(device.id.."_power", tostring(power))\n\tredis.set(device.id.."_version", tostring(ver))\t\t\n    if string.sub(data,59,60)=='01' and string.sub(data,-12,-11)=='fa' then  --振动数据\n\t\tlocal vibdata = string.sub(data,59,-11)\n\t\tlocal sign=iota.hexToShort(vibdata,6,'B')\n\t\tif sign == 1 or sign ==2 or sign ==3 then\n\t\t\tcacheaxisvib(vibdata)\t\t\n\t\telse\n\t\t\tcachevib(vibdata)\n\t\tend\t\t\n    else -- 非振动数据       \t  \n\t\t--485回应帧\n\t\trespond(1)\t \n\t\tlocal data_body = string.sub(data,59,-11) \n\t\tlocal jsonstr = toStrHex(data_body)\n   \t\tlog.debug("fs_sampler jsondata=%s",jsonstr)\n    \tlocal jsondata = json.decode(jsonstr)\n\t\tlocal acqtime = jsondata.AT\n\t\tlocal acqtimes = Split(acqtime,' ')\n\t\tlocal dates = Split(acqtimes[1],'_')\n\t\tlocal times = Split(acqtimes[2],':')\n\t\tlog.debug("fs_sampler devices acqtime=%s year = %s month=%s day =%s",acqtime,dates[1],dates[2],dates[3])\n\t\tlocal datetime=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = tonumber(dates[1]), month = tonumber(dates[2]), day =tonumber(dates[3]), hour =tonumber(times[1]), min =tonumber(times[2]), sec = tonumber(times[3])}))\n\t\tlocal vl_table =jsondata.VL\t\t\n\t\tlog.debug("fs_sampler devices time=%s",datetime)\n\t\tfor key,value in pairs(vl_table) do\n\t\t\tlocal channel = string.sub(key,-1,-1)\n\t\t\tlocal datas = Split(value,'_')\n\t\t\tlocal sentype = tostring(datas[1])\n\t\t\tlocal module = tostring(datas[2])\n       \t\t\n\t\t\tlocal state = tostring(datas[3])\n\t\t\tlocal cnt = #(datas)\n\t\t\t--Parse()\n\t\t\tlocal xvalue = 0\n\t\t\tlocal yvalue = 0\n\n\t\t\tif cnt > 3 then\n\t\t\t\txvalue = tonumber(datas[4])\n\t\t\t\tif cnt > 4 then\n\t\t\t\t\tyvalue = tonumber(datas[5])\n\t\t\t\tend\n\t\t\tend\n\t\t\t------------------诊断------------------\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\t\t\tlocal rstd = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\t\t\n\t\t\ttable.insert(out.data,rstd)\t\t\t\t\n\t\t\t---------------诊断信息---------------------\t\t\t      \n\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\tif childDevice~=nil then\t\n\t\t\t\tif sentype=="1504" then     --倾斜\n\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\tanglex = xvalue,\n\t\t\t\t\t\t\tangley = yvalue\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime=datetime  \n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tlog.debug("fs_sampler 倾角仪 out=%s",  json.encode(out))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t---其他传感器------\n\t\t\t\t-------------------\n\t\t\tend\n\t\tend\t\t\n\t\tctx:notify(json.encode(out)) \n    end\nend\n\nfunction cachevib(vibdata)\t\n\tlog.debug("fs_sampler 振动数据 vibdata =%s",vibdata)\t\t\n\tlocal package=iota.hexToShort(vibdata,8,'L')\n\tlocal packagecount=iota.hexToShort(vibdata,10,'L')\n\tlocal datpackage=string.sub(vibdata,41,-9)\n\tlocal moduleid=iota.hexToShort(vibdata,16,'L')\n\t--上报包记录,总包1完成记录0,第1包无论重复均直接重置缓存无需过滤,后续包记录对比过滤重复\n\tlocal recpc= redis.get(device.id.."_recpc")\n\tif package ~= recpc then\n\t\t--振动回应帧\n\t\trespond(package)\t \n\t\t\n\t\t--缓存振动数据\n\t\tif package==packagecount then\n\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd")\n\t\t\tlocal dathex=r1..datpackage\n\t\t\tlog.debug("fs_sampler 解析dat r1= %s", dathex)\n\t\t\tParseFileDat(dathex)\n\t\t\tredis.set(device.id.."_recpc", "0")\n\t\telse\n\t\t\tif package==1 then\n\t\t\t\tlocal firstpackage=string.sub(datpackage,-80,-1)\n\t\t\t\tredis.set(device.id.."_mpzd", firstpackage)\n\t\t\t\tlog.debug("fs_sampler 接收dat datpackage= %s", firstpackage)\t\t\t\t\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\telse\n\t\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd")\n\t\t\t\tlog.debug("fs_sampler 接收dat r1= %s package=%s", r1,package)\n\t\t\t\tlocal data=r1..datpackage\n\t\t\t\tredis.set(device.id.."_mpzd", data)\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tredis.set(device.id.."_recpc", tostring(package))\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\t\t\t\n\t\tend\n\tend\nend\n\nfunction cacheaxisvib(vibdata)\t\n\t--log.debug("fs_sampler 振动数据 axisvibdata =%s",vibdata)\t\t\n\tlocal package=iota.hexToShort(vibdata,8,'L')\n\tlocal packagecount=iota.hexToShort(vibdata,10,'L')\n\tlog.debug("fs_sampler 振动数据 package =%s / %s",package,packagecount)\t\n\tlocal datpackage=string.sub(vibdata,41,-9)\n\tlocal moduleid=iota.hexToShort(vibdata,16,'L')\n\tlocal sign=iota.hexToShort(vibdata,6,'B') --xyz轴标识/和校验\n\t\t--上报包记录,总包1完成记录0,第1包无论重复均直接重置缓存无需过滤,后续包记录对比过滤重复\n\tlocal recpc= redis.get(device.id.."_recpc")\n\tif package ~= recpc then\n\t\t--振动回应帧\n\t\trespond(package)\t \n\t\t--缓存振动数据\n\t\tif package==packagecount then\n\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd_"..sign)\n\t\t\tlocal dathex=r1..datpackage\n\t\t\tredis.set(device.id.."_mpzd_"..sign, dathex)\t\t\t\n\t\t\tredis.set(device.id.."_recpc", "0")\t\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_1")\n\t\t\tlocal dathex_x = r1\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_2")\n\t\t\tlocal dathex_y = r1\n\t\t\tr1,ok = redis.get(device.id.."_mpzd_3")\n\t\t\tlocal dathex_z = r1\t\n\t\t\tParseAxisFileDat(dathex_x,dathex_y,dathex_z)\t\t\t\t\n\t\telse\n\t\t\tif package==1 then\n\t\t\t\tlocal firstpackage=string.sub(datpackage,-80,-1)\n\t\t\t\tredis.set(device.id.."_mpzd_1", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_2", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_3", " ")\n\t\t\t\tredis.set(device.id.."_mpzd_"..sign, firstpackage)\t\t\t\t\t\t\t\t\t\n\t\t\t\tlog.debug("fs_sampler 接收dat datpackage= %s", firstpackage)\t\t\t\t\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据首包'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\telse\n\t\t\t\tlocal r1,ok = redis.get(device.id.."_mpzd_"..sign)\n\t\t\t\tlog.debug("fs_sampler 接收dat r1= %s package=%s", r1,package)\n\t\t\t\tlocal data=r1..datpackage\n\t\t\t\tif r1 == " " then\n\t\t\t\t\tdata=datpackage\n\t\t\t\tend\n\t\t\t\tredis.set(device.id.."_mpzd_"..sign, data)\n\t\t\t\tlocal re = {\n\t\t\t\t\tresult = nil,\n\t\t\t\t\ttype = 1,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tack = '振动数据'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tredis.set(device.id.."_recpc", tostring(package))\n\t\t\t\tctx:notify(json.encode(re))\n\t\t\tend\n\t\t\t\n\t\tend\n\tend\nend\nfunction respond(package)\n\n\tlocal dtuid = device.uplink.props.id\t\n\tlocal acktype = 1  -- 1=采集配置     2=固件升级\n\tlocal apc = 1 --总包数//采集配置默认都为1\n\tlocal api = 1 --当前数据包索引(从1开始)\n\t\n\tlocal datatype = 1  --数据类型 //0=二进制，适用于固件升级；1=json，适用于下发采集配置\t\n\n\tlocal ack_body = {\n\t\tMD = 0,\n\t\tUC = 0,\n\t\tPN = package,\n\t\tDT=0\n\t}\n\n\tlocal configtable = {}\n\tlocal configvib = {}\n\tlocal uc = 0 --是否配置\n\tlocal strdevice= toHexStr(json.encode(device))\n\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\tlocal crc=string.sub(strdevice,-4,-1)\t\n\tlocal r1,ok = redis.get(device.id.."_mpset")\n\tif ok and r1~=nil and crc ~= r1 then\t\n\t\tuc = 1\n\tend\n\tlocal ch_key = 1\n\t-------------遍历获取配置信息--------------------\n\tif device.deviceMetaId == "cce5d34b-3464-4566-81e6-3ff2540af13e" then \n\t\tmodestr = "角度模式" --模块模式配置（0为角度模式，1为加速度模式）\n\t\tinterval = device.props.duration  --采集粒度 //以分钟为单位//高/低字节\n\telse\n\t\tmodestr = "加速度模式" --模块模式配置（0为角度模式，1为加速度模式）\n\t\tinterval = device.props.duration  --采集粒度 //以分钟为单位//高/低字节\n\tend\n\n\tlog.debug("fs_sampler dtuid modestr %s interval %s",modestr,interval)\n\t-------------------------------------------------\n\tif uc == 1 and modestr == "加速度模式" then\n\t\tlocal key = "CH"..tostring(ch_key)\n\t\tlog.debug("fs_sampler dtuid key %s",key)\n\t\tlocal dev_inf = device\n\t\tlocal samolepoint = tonumber(dev_inf.props.samplefreq) * tonumber(dev_inf.props.duration)\n\t\tlocal trirmode = 0\n\t\tlog.debug("fs_sampler dtuid samolepoint %s",samolepoint)\n\t\tif dev_inf.props.triggermode  == "绝对值" then\n\t\t\ttrirmode = 0\n\t\tend\n\t\tif dev_inf.props.triggermode  == "上升沿" then\n\t\t\ttrirmode = 1\n\t\tend\n\t\tif dev_inf.props.triggermode  == "下降沿" then\n\t\t\ttrirmode = 2\n\t\tend\n\t\tif dev_inf.props.triggermode  == "峰值" then\n\t\t\ttrirmode = 3\n\t\tend\n\t\tlocal joinmode = 0\n\t\tif dev_inf.props.triggerjoin  == "不参与" then\n\t\t\tjoinmode = 0\n\t\tend\n\t\tif dev_inf.props.triggerjoin  == "参与" then\n\t\t\tjoinmode = 1\n\t\tend\n\t\tlocal amplify = 0\n\t\tif dev_inf.props.amplification == "1" then\n\t\t\tamplify = 0\n\t\tend\n\t\tif dev_inf.props.amplification == "10" then\n\t\t\tamplify = 1\n\t\tend\n\t\tif dev_inf.props.amplification == "100" then\n\t\t\tamplify = 2\n\t\tend\t\t\n\t\tif dev_inf.props.amplification == "1000" then\n\t\t\tamplify = 3\n\t\tend    \n\t\tlocal dasvalue = 1\n\t\tif dev_inf.props.das == 'true' then\n\t\t\tdasvalue = 1\n\t\telse\n\t\t\tdasvalue = 0\n\t\tend\t\t\n\n\t\tconfigvib={\n\t\t\tGA=amplify,\n\t\t\tCI=tonumber(dev_inf.props.duration),--定时采集粒度,\n\t\t\tST=tonumber(dev_inf.props.sduration),--定时触发采样时长,\n\t\t\tTT=tonumber(dev_inf.props.tduration),--加速度触发采样时长,\t\t\t\t\n\t\t\tSF=tonumber(dev_inf.props.samplefreq),--SampleFreq 采样频率\n\t\t\tFF=tonumber(dev_inf.props.filterfreq),--FilterFreq 过滤频率,\n\t\t\tJM=tonumber(dev_inf.props.accelerationrange), -- 加速度量程\n\t\t\tZD=tonumber(dev_inf.props.lagpoint),--LagPoint 滞后点数,\n\t\t\tDA=tonumber(dev_inf.props.dcdriftadj),--DCDriftAdj 直流漂移校准参数,\n\t\t\tDAS=dasvalue,--DAS, 硬件DA启用? ,\n\t\t\tAA=tonumber(dev_inf.props.amplitudeadj),--AmplitudeAdj 幅值修正参数,\n\t\t\tTL=tonumber(dev_inf.props.triglevel),-- TriggerLevel 触发电平,\n\t\t\tTM=trirmode,--TriggerMode触发方式,\n\t\t\tTJ=joinmode,--TriggerJoin 参与触发方式,\n\t\t\tSR=samolepoint ,--SampleRate 采样点数1,\n\t\t}\n\t\tlog.debug("fs_sampler dtuid configvib %s",configvib.GA)\n\tend\t\n\tlog.debug("fs_sampler dtuid modestr %s",modestr)\n\tif modestr == "角度模式" then\n\t\tmode = 0\n\telse\n\t\tmode = 1\n\tend\n\tif mode == 0 then\t\t\n\t\tack_body = {\n\t\t\tMD = mode,\n\t\t\tUC = uc,\n\t\t\tPN = package,\n\t\t\tCV = 13\n\t\t}\n\telse\n\t\tack_body = {\n\t\t\tMD = mode,\n\t\t\tUC = uc,\n\t\t\tZCF= configvib,\n\t\t\tPN = package,\n\t\t\tCV = 13\n\t\t}\n\tend\n\tlocal jdata = json.encode(ack_body)\n\tlog.debug("fs_sampler devices ack =%s",jdata)\n\tlocal jsonbuff = toHexStr(jdata)\n\tlocal bufflen = #(jsonbuff) / 2\n  \tlocal str = "$dw/"--json.encode(data_body)\n\tstr = str..dtuid\n    local buff = toHexStr(str)\n\tbuff=iota.appendHexByte(buff, acktype , 'B')\n\tbuff=iota.appendHexByte(buff, apc , 'B')\n\tbuff=iota.appendHexByte(buff, api , 'B')\n\tbuff=iota.appendHexWord(buff, interval , 'B')\t\n\tbuff=iota.appendHexWord(buff, os.date("%Y"), 'B')    -- 年\n\tbuff=iota.appendHexByte(buff, os.date("%m"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%d"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%H"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%M"), 'B') \n\tbuff=iota.appendHexByte(buff, os.date("%S"), 'B')   --秒\n\tbuff=iota.appendHexByte(buff, datatype , 'B')\n\tbuff=iota.appendHexWord(buff, bufflen , 'B')\n\tbuff=buff..jsonbuff\n\tbuff=iota.appendHexCrc(buff, 'B' ,0)  \n\tlocal end_str = "END"\n    local end_buff = toHexStr(end_str)\n\tbuff= buff..end_buff\n\tlog.debug("fs_sampler[%s] ack_body= %s",dtuid,str)\n\t\n\tctx:asend(buff, 20000)\n\tredis.set(device.id.."_mpset", tostring(crc))\nend\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then          \t\n\t\t\t\t\tlog.debug("fs_sampler subdevice=%s",json.encode(subdevice))      \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("fs_sampler has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("fs_sampler has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("fs_sampler  dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("fs_sampler deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("fs_sampler begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif device.props.das == "true" then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        --log.debug("fs_sampler finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver="V"..r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_backlog")  --获取上次未上传记录\n\t\tlocal backlog\n\t\tif r1ok and r1~=nil then\n\t\t\tbacklog=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_backlog=%s",r1,r1ok,backlog)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_wakeup")  --获取上次记录苏醒次数\n\t\tlocal wakeup\n\t\tif r1ok and r1~=nil then\n\t\t\twakeup=r1\n\t\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_wakeup=%s",r1,r1ok,wakeup)\t\t\t\t\n\t\tend\t\t\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tnode = {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\tlocal tb = {\n\t\t\t\t\t\tR=backlog,\n\t\t\t\t\t\tWTS=wakeup\n\t\t\t\t}\t\n\t\ttable.insert(rstd.data.R.node,tb)\t\t\t\n\t\ttable.insert(out.data,rstd)\n\t\t--log.debug("fs_sampler cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("fs_sampler not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction ParseAxisFileDat(dathex_x,dathex_y,dathex_z)\n\tlog.debug("fs_sampler  dat dathex_x  =%s  dathex_y  =%s dathex_z  =%s", dathex_x,dathex_y,dathex_z)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n\tlocal offset = 5\n    local channel = iota.hexToByte(dathex_x,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex_x,offset,'L') -- 设备ID\t    \n\n\toffset = offset + 2\n\tlocal samplefreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 采样频率\n\toffset = offset + 4\n\tlocal filterfreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 滤波频率\n\toffset = offset + 4\n\tlocal gainamplifier = iota.hexToByte(dathex_x,offset,'B') -- 放大倍数\n\toffset = offset + 1\n\tlocal triggertype = iota.hexToByte(dathex_x,offset,'B') -- 触发方式\n\n\t\n\tlocal vols,time_data= parsevib(dathex_x,dathex_y,dathex_z)\n  \tlog.debug("fs_sampler vols time_data=%s",time_data)\n\t--------------X轴--------------\n\tlocal subdevice = getDeviceInfo(deviceId,1)\n\tlocal vols_x = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_x,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\t\t\n\t}\n\n\tlocal rst = {\n\t\tdata=vols_x,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\t\n\t--------------Y轴--------------\n\tsubdevice = getDeviceInfo(deviceId,2)\n\tlocal vols_y = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_y,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\n\t}\n\n\trst = {\n\t\tdata=vols_y,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\t\n\t--------------Z轴--------------\n\tsubdevice = getDeviceInfo(deviceId,3)\n\tlocal vols_z = {\n\t\t_data_type='vib',\n\t\tphysicalvalue=vols.physicalvalue_z,\n\t\tsampleFreq=samplefreq,\n\t\tfilterFreq=filterfreq,\n\t\tgainAmplifier=gainamplifier,\n\t\ttriggerType=triggertype,\n\t\tversion=version\n\t}\n\n\trst = {\n\t\tdata=vols_z,\n\t\tdevice=subdevice.id,\n\t\ttype=1,\n\t\ttime= time_data\n\t}\n\ttable.insert(out.data,rst)\n\t\n        \n\t--诊断信息\n\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\tlocal power\n\tif r1ok and r1~=nil then\n\t\tpower=r1\n\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\tend\n\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\tlocal ver\n\tif r1ok and r1~=nil then\n\t\tver="V"..r1\n\t\t--log.debug("fs_sampler r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\tend\n\n\tlocal powerstr = string.format("%d%%", power)\n\tlog.debug("fs_sampler powerstr=%s",powerstr)\n\tlocal rstd = {\n\t\tdata={\n\t\t\t_data_type='diag',\n\t\t\tR={\n\t\t\t\tbase ={\n\t\t\t\t\tcc={\n\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tfw={\n\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnode = {\n\n\t\t\t\t}\n\t\t\t}\n\t\t},\t\t\t\t\n\t\tdevice=device.id,\n\t\ttype=1,\n\t\ttime=time  \n\t}\t\t\n\ttable.insert(out.data,rstd)\t\n\t\n \tlog.debug("fs_sampler cloudvibrate=%s",json.encode(out))\n\tctx:notify(json.encode(out))\n\nend\n\nfunction parsevib(dathex_x,dathex_y,dathex_z)\n\tdathex_x = string.gsub(dathex_x, "^%s*(.-)%s*$", "%1")\n\tdathex_y = string.gsub(dathex_y, "^%s*(.-)%s*$", "%1")\n\tdathex_z = string.gsub(dathex_z, "^%s*(.-)%s*$", "%1")\n\tlocal offset = 0\n    local t = iota.hexToShort(dathex_x,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex_x,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex_x,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex_x,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex_x,offset,'L') -- 设备ID\n\tlocal vols_x = {}\n\tlocal vols_y = {}\n\tlocal vols_z = {}\n\tlocal data = {}\n\toffset = offset + 2\n\tlocal samplefreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 采样频率\n\toffset = offset + 4\n\tlocal filterfreq = iota.hexToFloat(dathex_x,offset,'L',4) -- 滤波频率\n\toffset = offset + 4\n\tlocal gainamplifier = iota.hexToByte(dathex_x,offset,'B') -- 放大倍数\n\toffset = offset + 1\n\tlocal triggertype = iota.hexToByte(dathex_x,offset,'B') -- 触发方式\n\toffset = offset + 1\n\tlocal year = iota.hexToByte(dathex_x,offset,'B')+2000\n\toffset = offset + 1\n\tlocal mon = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal day = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal hour = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal min = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\tlocal sec = iota.hexToByte(dathex_x,offset,'B')\n\toffset = offset + 1\n\toffset = offset + 12\n\tlocal Ldata = iota.hexToInt(dathex_x,offset,'B')\n\toffset = offset + 4\n\tlog.debug("fs_sampler deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n\tlocal floatcount = (string.len(dathex_x)/2-40)/4\n\tlog.debug("fs_sampler begin parse")\n\t\n\tlocal mean = 0\n\tfor i= 1, floatcount do\n\t\toffset=40+(i-1)*4        \n\t\tvols_x[i]= iota.hexToFloat(dathex_x,offset,'L',6)\n\t\tmean = mean + vols_x[i]\n\tend\n\tmean = mean/floatcount\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_x[i]=vols_x[i]- mean\n\t\tend\n\tend\t\t\n\t\n\tfloatcount = (string.len(dathex_y)/2-40)/4\n\tmean = 0\n\tfor i= 1, floatcount do\n\t\toffset=(i-1)*4        \n\t\tvols_y[i]= iota.hexToFloat(dathex_y,offset,'L',6)\n\t\tmean = mean + vols_y[i]\n\tend\n\tmean = mean/floatcount\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_y[i]=vols_y[i]- mean\n\t\tend\n\tend\n\tfloatcount = (string.len(dathex_z)/2-40)/4\n\tlog.debug("fs_sampler das30=%s dathex_z =%s", tostring(string.len(dathex_z)),dathex_z)\n\tmean = 0\n\tfor i= 1, floatcount do\n\t\toffset=(i-1)*4        \n\t\tvols_z[i]= iota.hexToFloat(dathex_z,offset,'L',6)\n\t\tmean = mean + vols_z[i]\n\tend\n\tmean = mean/floatcount\t\n\tif device.props.das == "true" then\n\t\tfor i= 1, floatcount do\n\t\t\tvols_z[i]=vols_z[i]- mean\n\t\tend\n\tend\t\t\n\tlog.debug("fs_sampler das32=%s floatcount =%s", device.props.das,tostring(floatcount))\n\tdatatime = os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n\tlog.debug("fs_sampler vols_x=%s datatime =%s", vols_x,tostring(datatime))\n\tdata={\n\t\t_data_type='vib',\n\t\tphysicalvalue_x=vols_x,\n\t\tphysicalvalue_y=vols_y,\n\t\tphysicalvalue_z=vols_z\n\t}\n\n  \tlog.debug("fs_sampler finish time %s",datatime)\n\treturn data,datatime\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2020-12-28 14:13:03.158+08	2021-02-02 09:58:56.168+08	2020-12-28	\N
3c318417-0111-4295-bd59-874a0a5a0cdc	fs_solarRadiation	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--D:\\SVN\\202004项目\\RS-RA-N01-JT太阳辐射用户手册485型.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "fs_solarRadiation.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("fs_solarRadiation,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n--010300000001840a\n--01030200649baf\n--"solarRadiation ":100W/㎡\nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_solarRadiation m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local solarRadiation =iota.hexToUShort(hex,3,'B')\n        out.data = {           \n            solarRadiation=solarRadiation\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_solarRadiation m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 7 then\n        errormsg = string.format('无效的数据长度=%s≠7',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend	INLINE	2020-04-08 09:21:43.469+08	2020-04-08 09:43:52.45+08	2020-04-08	\N
e5116002-4b68-4d33-b40f-4d08dc7c46b1	yx_inclination_1503	\N	复制江西飞尚的测斜仪	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "fs_inclination_1503.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 22, endian)             -- 2: 类型=22\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_1503 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_1503 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n--0016261381F35D42830C36094DFE363C80FFE1F8CFEF40\n--moduleId=9747\n--"temp": 23.81,\n--"xDegree": -30,\n--"yDegree": -1.967921\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n        local scale = 1000000.00;\n        --print("parsing data", hex)\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n            \n        out.data = {\n            temperature=Temp,\n           \tanglex = xa,\n           \tangley = ya\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('yx_1503开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToShort(data,2,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('yx_1503数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-04-03 17:31:03.805+08	2020-04-10 14:50:33.847+08	2020-04-03	\N
48846ad7-8fa9-4e52-85a3-cf76a8f4b8ac	fs_idau_log	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n\n    local req = {\n        type = "idau",\n        payload = ""\n    }\n    local mop_log = {\n        M = "c_shell",\n        P = {} -- Get Log\n    }\n\tmop_log.P.C =  "cp /home/idau/logs/log.txt /home/idau/data/dac/log.txt"--..device.props.lognumber--"rm -f /home/idau/data/dac/log.txt"\n\tlocal param = capability.param\n\tlog.debug("fs_idau_log  param=%s", param)\n\tif param ~= "" then\n\t\tmop_log.P.C = "cp /home/idau/logs/log.txt".."."..param.." /home/idau/data/dac/log.txt".."."..param\n\tend\n\tif param == "rm" then\n\t\tmop_log.P.C = "rm -f /home/idau/data/dac/log.*"\n\tend\n    req.payload = json.encode(mop_log)\n    log.debug("fs_idau_log:request=%s", json.encode(req))\n    local ok, ack = ctx:ssend(req, 20000)\n    result = {\n        result = nil,\n        type = 1,\n        data = {\n            ack = json.encode(ack)\n        }\n    }\n\tlog.debug("fs_idau_log:ack=%s", json.encode(ack))\n\n    ctx:done(json.encode(result))\nend\n\n-- 类型, 1=HOST, 2=Relay, 3=Terminal\nfunction toNodeType(t)\n    if t == "host" then\n        return 1\n    elseif t == "relay" then\n        return 2\n    end\n    return 3\nend	INLINE	2019-09-24 09:51:02.56+08	2020-03-25 10:28:39.271+08	2019-09-24	\N
5e2a3248-7f17-4242-aab3-8f70d28fa922	anxin_zx	\N	安信振弦标准协议    请求应答	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('anxin_zx loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('anxin_zx device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('anxin_zx设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('anxin_zx设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    buff = buff .. 'ff41584a0001'\n    buff = iota.appendHexWord(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '0100'\n    buff=iota.appendHexCrc(buff, endian ,0)                      \n\n    log.debug('anxin_zx END buff = %s', buff)\n    --ctx:asend(buff)\n    --ctx:sleep(10)\n\t--ctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('anxin_zx 数据有效=%s', resp)\n        local  allSubData = getAllDatas(resp)\n\t\tlog.debug('anxin_zx  allSubData=%s',json.encode(allSubData))\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('anxin_zx child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('anxin_zx    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t--end\n            end\n        end\n    else\n        log.debug('anxin_zx 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('anxin_zx ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('anxin_zx  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 19, -5)\n    local dataCount = string.len(subDataArea) / 14\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)\n       \n        DataList[subChannel]= {iota.hexToShort(singleChannelDataHex,1,'B'),iota.hexToShort(singleChannelDataHex,3,'B')/10000,iota.hexToShort(singleChannelDataHex,5,'B')}\n    \tlog.debug('anxin_zx  getAllDatas  DataList[%s]=%s',subChannel,json.encode(DataList[subChannel]))\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('anxin_zx datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n\t\n\n    local freq = datatable[subChannelId][1]+datatable[subChannelId][2]\n    local temp = datatable[subChannelId][3]\n    --if childDevice ~= nil then\n        --if childDevice.uplink.capabilities[1].formula.metaid == '6cea049d-f41a-43f9-9e88-d8aeea9aca7f' then --振弦公式\n            --local k = childDevice.uplink.capabilities[1].formula.props.K\n\n            --local f0 = childDevice.uplink.capabilities[1].formula.props.Fo\n\t\t\t--local kt = childDevice.uplink.capabilities[1].formula.props.Kt\n\t\t\t--local t0 = childDevice.uplink.capabilities[1].formula.props.To\n\n            --log.debug('anxin_zx module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            --if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                --Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            --end\n        --end\n        --log.debug('anxin_zx freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                frequency = tonumber(string.format('%0.2f',freq))\n                --physicalvalue = tonumber(string.format('%0.2f',Phy))\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    --end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('anxin_zx has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('anxin_zx has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('anxin_zx 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xFF then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('anxin_zx HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2019-12-24 16:15:40.752+08	2019-12-25 10:37:53.829+08	2019-12-24	\N
e24c947d-eeba-4895-bad5-f1a03b48bfc7	fs_temp_1102	\N	ModBus统一通信协议	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n    log.debug("start %s, ctx=", "fs_1102.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=tonumber(device.uplink.props.module) --模块 通道 优先接口获取\t\t\t\n\t\tlog.debug("fs_1102 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t moduleNo=device.props.moduleId \n\t\t log.debug("fs_1102 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t--local moduleNo=device.props.moduleId or device.uplink.props.module  \n\t--log.debug("fs_1102 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff, 1, endian)             -- 2: 类型=1\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n  \tbuff=iota.appendHexByte(buff, 0, endian)   \n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n\n    ok,resp=ctx:ssend(buff,15000)\n\tlog.debug("fs_1102:发送数据=%s",buff)\n   local result="{}"\n    if ok then\n        result = unmarshall(resp)\n\t\tlog.debug("fs_1102 接收数据=%s,解析值=%s",resp,result)\n\t\tctx:done(result)\n    end\n    \nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)>=15) then\n        --   2   2   1      4     4       2\n        -- 0001 26C6 81  0D6FFDA1  FFDACFBE  F831\n        --000107DE8112121213131313E1F9  \n        -- moduleId=           结果0,0\n        --print("parsing data", hex)\n        local hum = iota.hexToFloat(hex,9,'B',2);\n        local tem = iota.hexToFloat(hex,5,'B',2);\n        out.data = {\n            temperature=tem,\n            humidity = hum\n        };\n    else\n        local message = string.format('Invalid Msg, hex=%s,len=%s',hex,string.len(hex))\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n \n\n	INLINE	2017-08-26 15:47:24.221+08	2020-11-23 13:57:25.351+08	2017-08-24	\N
68f82401-bc7d-4e16-8f53-5c8e2c3850b7	cdaj_zxjt	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	start= function()\nend\n\nonData = function(resp)\n\n    log.debug('cdaj_zxjt device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n\tlocal moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('cdaj_zx 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('cdaj_zx 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    local ErrorCode = IsValidOut(resp,moduleNo)\n    if ErrorCode then\n        log.debug('cdaj_zxjt 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('cdaj_zxjt child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('cdaj_zxjt    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t--end\n            end\n        end\n    else\n        log.debug('cdaj_zxjt 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    local resultData = json.encode(out)\n    log.debug('cdaj_zxjt  resultData=%s', resultData)\n   ctx:notify(resultData)\nend\n\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('cdaj_zxjt datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[subChannelId+8]\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == '057d8b2b-fafc-4937-897d-deff727f1032' then --振弦公式\n           local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n\t\t\tlog.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n\t\tif childDevice.uplink.capabilities[1].formula.metaid == 'cb006abf-3e22-4ead-830c-5a0a427c4024' then --地应力公式\n           local A = tonumber(childDevice.uplink.capabilities[1].formula.props.A)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal B = tonumber(childDevice.uplink.capabilities[1].formula.props.B)\n\t\t\t\n\t\t\t--log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('cdaj_zxjt module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if A ~= nil and f0 ~= nil and B ~= nil and freq ~= nil  then\n                Phy = A * (freq ^ 2 - f0 ^ 2)- B * (freq - f0) \n            end\n        end\n        log.debug('cdaj_zxjt freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                frequency = tonumber(string.format('%0.2f',freq)),\n                physicalvalue = tonumber(string.format('%0.4f',Phy))\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('cdaj_zxjt has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('cdaj_zxjt has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\nIsValidOut = function(checkdata,deviceModule)\n    log.debug('cdaj_zxjt 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,4,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('cdaj_zxjt module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("cdaj_zxjt [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xF7 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('cdaj_zxjt HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 15, -5)\n    local dataCount = string.len(subDataArea) / 10\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)+1\n        local subData = string.sub(singleChannelDataHex, 3, -1)\n        DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n    \tlog.debug('cdaj_zxjt  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n	INLINE	2020-11-24 11:13:43.698+08	2020-12-14 13:05:10.04+08	2020-11-24	\N
dabe22ea-4084-4385-bfa3-674a09fdea02	fs_szjc2020	\N	外包的水质监测2020	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('fs_szjc2020   device=%s', json.encode(device))\t\n  -- hex1='fe00a532365106383835321408050e26110384001f000c0d160001000000000225022fbb9eef'\n  \n -- ok,resp=ctx:ssend(hex1,10000)\n  \n  -- onData(hex1)\nend\n\n\n\n--fe00a532365106383835321408050e26110384001f000c0d160001000000000225022fbb9eef\nonData=function(hex)\n    local out={\n        data ={},\n        result = {}\n    }\n   log.debug('fs_szjc2020  receiveData=%s',hex)\n   local moduleId=device.uplink.props.module\n   local ErrorCode = IsValid(hex,moduleId)\n   local temp\n   local turbidity\n   local conductivity\n   local PH\n   local oxy\n   local datetime\n   if ErrorCode then    \n\t\t--1408050e2611\n\t    local timeStr=string.sub(hex,23,34)\n\t    datetime=hexDateStrToDate(timeStr)\n\t\tlocal MID=string.sub(hex,39,42)\n    \tlog.debug('fs_szjc2020 [%s]  MID=%s ,timeStr=%s',moduleId,MID,timeStr)\n    \n\t\t--两个字节长度，表示DATA字段消息为何种传感器数据\n\t\t--0x0001： 温度 数据\n\t\t--0x0002： 浊度 数据\n\t\t--0x0004： 电导 数据\n\t\t--0x0008： PH数 据\n\t\t--0x0010： 溶氧 数据\n\t\t\n\t\tlocal len_dataArea=iota.hexToShort(hex,21,'B')\n\t\t\n\t\t\n\t\t\t\n\t\tif MID=='0001' then --温度 2字节\n\t\t\ttemp=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='0002' then --浊度 2字节\n\t\t    turbidity=iota.hexToUShort(hex,23,'B')/10\n\t\telseif MID=='0004' then --电导 4字节\n\t\t    conductivity=iota.hexToUInt(hex,23,'B')/10\n\t\telseif MID=='0008' then --PH  2字节\n\t\t    PH=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='0010' then --溶氧  2字节\n\t\t    oxy=iota.hexToUShort(hex,23,'B')/100\n\t\telseif MID=='001f' then --所有数据\n\t\t\n\t\t\n\t\t\n\t\t\n\t\toxy=iota.hexToUShort(hex,23,'B')/100\n        PH=iota.hexToUShort(hex,25,'B')/100\n       conductivity=iota.hexToUInt(hex,27,'B')/10\n      turbidity=iota.hexToUShort(hex,31,'B')/10\n      temp=iota.hexToUShort(hex,33,'B')/100\n\t\tend\n\t\t\n   else\n     log.debug('fs_szjc2020  校验失败=%s',errormsg)\n   end\n   \n     out.data = {\n                 temperature = temp,\n\t\t\t\t turbidity = turbidity,\n\t\t\t\t conductivity = conductivity,\n\t\t\t\t PH = PH,\n\t\t\t\t oxy = oxy,\n                }\n     out.time=datetime       \n    local resultData= json.encode(out)\n   log.debug('fs_szjc2020  结果=%s ,out.time=%s',resultData,out.time)\n    ctx:notify(resultData)\n    --ctx:done(resultData)\nend\n\n\nIsValid=function(data,device_module)\n\tif data == nil or string.len(data)/2 < 22 then\n        errormsg = '数据为空 或 数据帧长度<22'\n        errcode = 1002\n        return false\n    end\n\tlocal head_foot=string.sub(data,1,2)..string.sub(data,-2,-1)\n\tif head_foot ~='feef' then\t\n        errormsg = string.format('数据帧头 和 尾 %s ≠ fe ef',head_foot)\n\t\terrcode = 1003\n\t\treturn false\n\tend\n  \n  \n\tlocal dataType=string.sub(data,3,6)\n    if dataType ~= '00a5' then\n        errcode = 1004\n        errormsg = '数据类型 ≠ 00a5  ' \n        return false\n    end\n\n\tlocal data_module=string.sub(data,7,22)\n\tif  data_module~= device_module then\t\n        errcode = 1005\n\t\terrormsg = string.format('数据帧模块=%s 与设备模块 %s 不相等',data_module,device_module)\n        return false\n    end\n\t log.debug('fs_szjc2020 [%s] 数据校验成功=%s',device_module,data)\n    return true\nend\n\n\nhexDateStrToDate=function(dateStr)\n    -- 12 04 02 0F 24 38 ==> 18\n    local year = tonumber(string.sub(dateStr,1,2),16)+2000;\n\tlocal month = tonumber(string.sub(dateStr,3,4),16);\n\tlocal day = tonumber(string.sub(dateStr,5,6),16);\n    local hour = tonumber(string.sub(dateStr,7,8),16);\n    local minute = tonumber(string.sub(dateStr,9,10),16);\n    local second = tonumber(string.sub(dateStr,11,12),16);\n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second});\n\tlocal recordTime=os.date("%Y-%m-%dT%H:%M:%S+08:00",timenum)-- +08:00\n  \tlog.debug('fs_szjc2020   数据时间 recordTime=%s',recordTime)\n\treturn recordTime\nend	INLINE	2020-08-05 16:49:23.291+08	2020-08-07 12:53:47.843+08	2020-08-05	\N
6f661bd4-e3b4-493b-b2f8-f266681071e3	anXin_rainfall_1607	\N	安信雨量计（请求应答）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_rainfall_1607.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n\tlocal moduleNo=device.uplink.props.module\n    local buff=''\n    buff=iota.appendHexByte(buff, 0xFF, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0x41, endian)\n    buff=iota.appendHexByte(buff, 0x58, endian)\n    buff=iota.appendHexByte(buff, 0x4a, endian)\n    buff=iota.appendHexWord(buff, 6, endian)                     -- 2: 类型=1\n    buff=iota.appendHexWord(buff, moduleNo, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 0x01, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)                      -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,4000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==34) then\n        --   2   2   1      4     4       2\n        -- 55 0A 00 0E 06 17 0F 01 00 4E\n        \n        --print("parsing data", hex)\n        local hourrain = iota.hexToShort(hex,9,'B');\n        local minrian = iota.hexToInt(hex,11,'B');\n        out.data = {\n            Hourrain=hourrain,\n            Minrian =minrian,\n        };\n        -- out.D = out.DJ; -- json.encode(out.DJ);\n        -- '{"Hourrain":'..hourrain..',"minrian":'..minrian..'}'\n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2017-08-31 19:19:36.692+08	2019-12-23 09:37:42.846+08	2017-08-29	\N
3121e3a3-3ae3-4128-b080-5ad23d044087	bjdctk_2303	\N		1.0	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	f	9fb7fa83-8261-4c7b-bc2f-d21a24bc7105	Lua	start = function()\n    log.debug('bjdctk_2303 start moudleid=%s', device.props.pointId or 'nil')\n    local req = {\n        type = 'http',\n        url = '', \n        method = 'post',\n        header = {}\n    }\n\n    req.url = device.props.tokenUrl\n    log.debug('bjdctk_2303 url=%s', req.url)\n    log.debug('bjdctk_2303 设备原型=%s' ,json.encode(device))\n    req.ContentType = 'application/json'\n\n    local tokenparam = {\n        username = device.props.username,\n        password = device.props.password\n    }\n    req.body = json.encode(tokenparam)\n    log.debug('bjdctk_2303:tokenparam=%s',json.encode(tokenparam))\n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('bjdctk_2303:  ok=%s', ok)\n    else\n        log.debug('bjdctk_2303:  ok=%s,token=%s', ok, ack.body)\n    end\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    if not ok or ack == nil then\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            local dataTable = json.decode(ack.body)\n            local token = dataTable.token\n            log.debug('bjdctk_2303:  token=%s ', token)\n            log.debug('bjdctk_2303 ack=%s', ack.body)\n\n            --Sleep(1)\n            --请求数据\n            local datareq = {\n                type = 'http',\n                url = '', --url=https://api.yespowering.cn/dev/data/?box_id=35E81PV005\n                method = 'post',\n                header = {}\n            }\n\t\t\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\t\t\t--log.debug("bjdctk_2303  subdevices=%s,",json.encode(subdevices))\n\t\t\tif subdevices ~=nil then\n\t\t\t\tfor index,child in pairs(subdevices) do \n\t\t\t\t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\t\t\tchannelNo=tonumber(child.uplink.props.channel)\n\t\t\t\t\t\tlog.debug("bjdctk_2303 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\t\t\telse\n\t\t\t\t\t\tmoduleNo=child.props.moduleId\n\t\t\t\t\t\tchannelNo=child.props.channelId \n\t\t\t\t\tlog.debug("bjdctk_2303 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\t\t\tend \n\t\t\t\t\tdatareq.url = device.props.dataUrl\n\t\t\t\t\tlog.debug('bjdctk_2303:  data url=%s', datareq.url)\n\t\t\t\t\tdatareq.header['token'] = token\n\t\t\t\t\tdatareq.ContentType = 'application/json'\n\t\t\t        local aa=os.time()\n           local endTimestr=aa-36000\n\t                local endTime = os.date('%Y-%m-%d %H:%M:%S', endTimestr)\n          log.debug('bjdctk_2303:  endTime=%s', endTime)\n\t\t\t\t\tlocal beginTimestr = endTimestr-3600\n\t\t\t\t\tlocal beginTime = os.date('%Y-%m-%d %H:%M:%S', beginTimestr)\n           log.debug('bjdctk_2303:  beginTime=%s', beginTime)\n\t\t\t\t\n\t\t\t\t\tlocal dataparam = {\n\t\t\t\t\t\tnode = moduleNo,\n\t\t\t\t\t\tchannel= channelNo,\n\t\t\t\t\t\tstart=beginTime\n\t                    \n\t\t\t\t\t}\n                    dataparam['end'] =endTime\n          log.debug('bjdctk_2303:dataparam=%s',json.encode(dataparam))\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tdatareq.body = json.encode(dataparam)\n\t\t\t\t\tlocal dataok, dataack = ctx:ssend(datareq, 4000)\n\n\t\t\t\t\tif not dataok or dataack == nil then\n\t\t\t\t\t\tout.result = {\n\t\t\t\t\t\tcode = 1002,\n\t\t\t\t\t\tmsg = 'timeout'\n\t\t\t\t\t}\n\t\t\t\t\telse --OK\n\t\t\t\t\t\tif dataack.code == 200 and dataack.body ~= '' then -- http应答\n\t\t\t\t\t\talldataTable = json.decode(dataack.body) -- 有数据\n\t\t\t\t\t\tlocal instant_data = alldataTable.data.list\n                    \n\t\t\t\t\t\tfor k, v in ipairs(instant_data) do\n\t\t\t\t\t\t\tlog.debug('bjdctk_2303 k=%s, value=%s', k, json.encode(v))\n\t\t\t\t\t\t\tlocal angle = tonumber(v.pntValue)\n\t\t\t\t\t\t\tlocal timeStr = v.created\n\t\t\t\t\t\t    \n                                local data1 = {\n                                    data = {\n                                        angle = angle\n                                    },\n                                    device = child.id,\n                                    time = timeStr,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                       \n\t\t\t\t\t\tend\n                  \n                    log.debug('bjdctk_2303  data:%s', json.encode(out))\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlog.debug('bjdctk_2303:  request data error:%s body:%s', ack.code, ack.body)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\n\t\t\t    end      \n\t\t    end\n\n        else\n            log.debug('bjdctk_2303:  request data error:%s body:%s', ack.code, ack.body)\n        end\n    end\n    ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\n\n\n\n	INLINE	2020-07-20 17:55:23.988+08	2020-09-18 14:46:19.656+08	2020-07-20	\N
683ffafc-6cea-44dc-83c5-b16f5227f820	MAS-FYLF	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\nstart = function()\n    log.debug('MAS-FYLF device=>%s', json.encode(device))\nend\n\n--30303030303038303436303030320a4c462b303034312e38386d6d38313037\nonData=function (recvHex)\n\t--主动上传式\n    local out={\n\t--type = 2,\n\tdata ={},\n\tresult = {}\n    }\n    \n\tlocal checkLen=string.len(recvHex)/2\n    log.debug("MASFYLF Received=>%s", recvHex)\n    --log.debug("MASFYLF device = "..json.encode(device))\n    -- 将recvData从十六进制的ascII转换成字符串\n    if nil == recvHex and "" == recvHex then\n        local message = '无效的数据,为空'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telseif checkLen<28 then --字节长度不够\n\t    local errorMessage = '无效的数据,长度小于28'\n\t\tout.result = {code=5001,msg=errorMessage}\n\t\tout.data = {}\n    else\n        local recvStr = toStrHex(recvHex);         -- 11111112222222 LF+0020.76mm8066\n        log.debug("MASFYLF:recvStr=>%s", recvStr)\n        if nil == recvStr and 35 > string.len(recvStr) then\n            local message = 'Invalid Msg, or heartPack'\n            out.result = {code=5001,msg=message}\n            out.data = {}\n        else\n            local index = 1\n            local startIndex = string.find(recvStr, "+") \n      \t\tif startIndex==nil then\n        \t\tstartIndex=string.find(recvStr, "-")\n        \t\tindex=-1\n        \tend\n      \t\t\t\n      \t\tstartIndex=startIndex+1\n            local endIndex = string.find(recvStr, "m") - 1;\n            local crackDistance = index*tonumber(string.sub(recvStr, startIndex+1, endIndex))\n            log.debug("MASFYLF device = "..crackDistance)\n            out.data = {\n                crackDistance = crackDistance,\n            }\n            -- out.device = deviceId\n            local resultData = json.encode(out)\n            ctx:notify(resultData)\n        end\n\n    end\n\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n        local bi = iota.hexToByte(hex,i-1,'B')\n        local ascii =string.format("%c",bi)\n        str=str..ascii\n    end\n    return str\nend\n	INLINE	2019-12-16 17:00:09.565+08	2020-08-06 16:24:00.72+08	2019-12-16	\N
1f34194c-81bb-4957-927c-565b25060aa5	fs_645_1997_K	\N	互感系数K  可以配置	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--68a0a1a2a3a4a568010243c3 +CS   +16H           CS=（68a0a1a2a3a4a56801021090的累加和）\n-- cmd=fefefefe6808440327000068010243c34f16 \nstart=function()\n    log.debug("start %s, ctx=%s", "fs_ammeter.lua",json.encode(ctx.device))\n\n    local endian = 'B'\n    local buff=''\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\n    if string.len(moduleNo)<12 then\n       local lenadd=12-string.len(moduleNo)\n       for i=1,lenadd do\n           moduleNo='0'..string.lower(moduleNo)\n       end\n    end\n    --调换模块号字节序\n    local newModuleNo=exchangeHtoL(moduleNo)\n\tlog.debug("fs_ammeter 设备模块通道 接口获取 m=%s",moduleNo)\n\n\tbuff=string.format("68%s68010243c3",newModuleNo) \n\tbuff="fefefefe"..buff..CheckPlusSum(buff,0,string.len(buff)/2)..'16'\n    log.debug("fs_ammeter,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("fs_ammeter  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--module=000027034408\n--FEFE6808440327000068810643C34C333333B816    =》0.19   \nunmarshall=function(hex,moduleNoStr)\n    log.debug("fs_ammeter m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local hexBCD=string.sub(hex,-6,-5)..string.sub(hex,-8,-7)..string.sub(hex,-10,-9)..string.sub(hex,-12,-11)\n        log.debug("fs_ammeter  m=%s,hexBCD=%s ",moduleNoStr,hexBCD)\n        local totalenergy =tonumber(getData(hexBCD))/100\n\t\tlocal initialvalue=device.props.initial\n    \tlocal k=device.props.K\n        log.debug("fs_ammeter totalenergy=%s,initialvalue=%s,k=%s",totalenergy,initialvalue,k)\n    \tlocal phy\n    \tif k==nil then\n          phy=totalenergy-initialvalue\n      \telse\n          phy=totalenergy * k - initialvalue\n      \tend\n    \n    \tlog.debug("fs_ammeter  m=%s,phy=%s ",moduleNoStr,phy)\n    \tout.data = {           \n                  readingNumber=phy\n              }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("fs_ammeter m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleCheck)\n    local data=string.gsub(data,'fefe','')\n    log.debug("fs_ammeter 校验 data=%s",data)\n    if data == nil or string.len(data)/2 ~= 18 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n    if string.sub(data,1,2) ~='68' or string.sub(data,-2,-1) ~='16' then\t\n        errormsg = 'Invalid acq heade or tail'\n        errcode = 1004\n        return false\n    end\n\t\n    local moduleCheckStr=string.sub(data,3,3+11)\n    moduleCheckStr=exchangeHtoL(moduleCheckStr)\n    if tostring(moduleCheck) ~= moduleCheckStr then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleCheckStr,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    log.debug("fs_ammeter 校验通过 m=%s,data=%s",moduleCheck,data)\n    return true\n--crc\nend\n\nCheckPlusSum=function(hexStr, startIndex, endIndex)\n    log.debug("fs_ammeter校验和 hexStr=%s,startIndex=%s,endIndex=%s ",hexStr,startIndex,endIndex)\n    local sum = 0\n    for i = startIndex, endIndex-1 do\n\t    local byteSte=string.sub(hexStr,i*2+1,i*2+2)\n        --log.debug("fs_ammeter校验和 i=%s, byteSte=%s",i,byteSte)\n        sum = (sum + tonumber(byteSte,16))\n    end        \n    local result = sum % 256\n   log.debug("fs_ammeter 校验和 result=%s hex=%s",result,string.format("%x",result))\n    return string.format("%02x",result)\nend\n\nexchangeHtoL=function(moduleStr)\n  log.debug("fs_ammeter 交换 moduleStr=%s",moduleStr)\n  local length=string.len(moduleStr)/2\n  local newModuleStr=''\n       for i=length-1,0,-1 do\n           newModuleStr = string.sub(moduleStr,-1*(2*i+2),-1*(2*i+1))..newModuleStr\n       end\n  log.debug("fs_ammeter 交换newModuleStr=%s",newModuleStr)\n  return newModuleStr\nend\n\ngetData=function(BCDstr)\n  log.debug("fs_ammeter 获取数据 BCDstr=%s",BCDstr)\n  local e_BCDstr=BCDstr  --exchangeHtoL(BCDstr)\n  local newBCDstr=''\n  local len=string.len(e_BCDstr)/2\n  for i=0,len-1,1 do\n     local rawBCDbyte=string.sub(e_BCDstr,2*i+1,2*i+2)\n     --log.debug("fs_ammeter 获取数据rawBCDbyte=0x%s",rawBCDbyte)\n     local rawdata=tonumber(rawBCDbyte,16)-tonumber('33',16)\n    --log.debug("fs_ammeter 获取数据 rawdata=%s",rawdata)\n     newBCDstr = newBCDstr..string.format('%02x',rawdata)\n    --log.debug("fs_ammeter 获取数据 newBCDstr=%s",newBCDstr)\n  end\n  return newBCDstr\nend	INLINE	2020-08-13 09:47:47.908+08	2020-08-13 09:47:47.908+08	2020-08-13	\N
98c55c29-6b3c-417e-bf4d-f373aef4b061	xmxdz_cx	\N		1.0	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	Lua	start=function()\n    log.debug("xmxdz_cx.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n\tlocal loraid=device.props.loraid\n    log.debug("xmxdz_cx [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr,loraid)\n    if ErrorCode then\n\t   local xData = iota.hexToInt(hex,16,'B')/1000.0;\n        local yData = iota.hexToInt(hex,20,'B')/1000.0;\n        local zData = iota.hexToInt(hex,24,'B')/1000.0;\n        local temp = iota.hexToShort(hex,28,'B')/100.0; \n\t\t\n\t\tlocal xDataint = iota.hexToInt(hex,30,'B')\n        local yDataint = iota.hexToInt(hex,34,'B')\n        local zDataint = iota.hexToInt(hex,38,'B')\n        local tempint = iota.hexToShort(hex,42,'B')\n       \n\n\t    --local timeStr = string.sub(hex,33,60)\n\t\t--log.debug("xmxdz_cx timeStr=%s",timeStr)\n                --dateTimeStr = toStrHex(timeStr)\n\t\t\t\t--log.debug("xmxdz_cx dateTimeStr=%s",dateTimeStr)\n    local timenum = os.time()\n\n    local timenow = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n                --timenow = unixtimestamp(dateTimeStr)\n\t      \n                \n\t\t   out={\n\t\t\t\t    data={ \n\t\t\t\t          anglex=xData,\n            angley=yData,\n            anglez=zData,\n            temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t } \n                     \n                     \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("xmxdz_cx [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n   \n    end  \nend\n\nIsValid=function(data,deviceModule,deviceloraid)\nlog.debug("xmxdz_cx data=%s [%s] ",data,deviceModule)\n    if data == nil  then\n        errormsg = 'xmxdz_cx:Data is nil'\n        errcode = 1001\n    \tlog.debug("xmxdz_cx [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataModule= iota.hexToShort(data,12,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('xmxdz_mop module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n        return false\n    end\n    local dataloraid= iota.hexToShort(data,4,'L')\n    if (deviceloraid~=tostring(dataloraid)) then\n        errormsg = string.format('xmxdz_mop loraid is wrong,dataloraid=%s≠%s',dataloraid,deviceloraid)\n        errcode = 1001\n        log.debug("xmxdz_mop [%s] %s",deviceloraid,errormsg)\n        return false\n    end\n\tif iota.hexToByte(data,14,'B') ~= 0xf0  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug("xmxdz_cx [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2020-10-09 14:19:43.119+08	2020-11-26 09:55:48.083+08	2020-10-09	\N
028bfee5-e1d0-4126-bc16-cb9cb13f7cb2	hdy_file_transfer	\N		1.0	611a5d96-e77e-4ca6-925d-30609b1f57df	611a5d96-e77e-4ca6-925d-30609b1f57df	f	611a5d96-e77e-4ca6-925d-30609b1f57df	Lua	start = function()\n    log.debug('hdy_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n\tlog.error('hdy_file_transfer  data is %s', json.encode(data))\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('hdy_file_transfer .d文件 content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("hdy_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('hdy_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('hdy_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('hdy_file_transfer  内容  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n    log.debug('hdy_file_transfer  k=%s,v=%s',k,v)\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                    log.debug('hdy_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'prism_L' then --直角棱镜\n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height = jsondata.RV[3],\n                                eastingDiff = jsondata.PV[2],\n                                northingDiff = jsondata.PV[1],\n                                heightDiff = jsondata.PV[3],\n                                lengthDiff = jsondata.PV[4]\n                               \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n            \t\telseif  childDevice.props.sensortype == 'prism_L_0' then \n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height = jsondata.RV[3],\n                                eastingDiff = jsondata.PV[1],\n                                northingDiff = jsondata.PV[2],\n                                heightDiff = jsondata.PV[3],\n\t\t\t\t\t\t\t\taddeastingDiff = jsondata.TV[1],\n                                addnorthingDiff = jsondata.TV[2],\n                                addheightDiff = jsondata.TV[3]\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    log.debug('hdy_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n    log.debug('hdy_file_transfer 查询子设备 moduleid=%s', moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(moduleid) then\n                log.debug('hdy_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n            end\n        end\n        log.debug('hdy_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('hdy_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2021-01-07 08:45:15.763+08	2021-01-18 13:04:25.887+08	2021-01-07	\N
795ac977-d4b1-4743-bfe1-ae7830419b5e	hyzz_1012	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_1012   device=%s', json.encode(device))\n\t--log.debug('hzyy_1012   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_1012', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_1012 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1012 [%s] 时间戳', tonumber(timeStamps))\n    local accel_x=tonumber(bodypkg['accel_x'])\n\tlocal accel_y=tonumber(bodypkg['accel_y'])\n\tlocal accel_z=tonumber(bodypkg['accel_z'])\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t xacceleration=accel_x,\n\t yacceleration=accel_y,\n\t zacceleration=accel_z\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_1012 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-28 08:50:05.066+08	2021-01-28 08:57:48.874+08	2021-01-28	\N
5f27ec35-2a3a-4e9c-9813-70525f544cd4	hzyy_http	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    log.debug('hzyy_http   device=%s', json.encode(device))\n\tlog.debug('hzyy_http   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_http', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_http [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    \n\tlocal sn=bodypkg['sn']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\tlocal tilt_z_init=bodypkg['tilt_z_init']\n\tlocal tilt_y_init=bodypkg['tilt_y_init']\n\tlocal tilt_x_init=bodypkg['tilt_x_init']\n\t\n\tlocal tilt_x_cur=bodypkg['tilt_x_cur']\n\tlocal tilt_z_cur=bodypkg['tilt_z_cur']\n    local tilt_y_cur=bodypkg['tilt_y_cur']\n\t\n\tlocal acc_x_cur=bodypkg['acc_x_cur']\n\tlocal acc_z_cur=bodypkg['acc_z_cur']\n\tlocal acc_y_cur=bodypkg['acc_y_cur']\n\t\n\t\n\t\tlocal wire_cur=bodypkg['wire_cur']\n\t\tlocal wire_init=bodypkg['wire_init']\n  local offset=wire_cur-wire_init\n\t\tif tonumber(sn) == tonumber(moduleNo) then\n\t\t\tout.data={\n\t\t\t\tacc_x_cur=acc_x_cur,\n      offset=offset,\n\t\t\t\tacc_z_cur=acc_z_cur,\n\t\t\t\tacc_y_cur=acc_y_cur,\n\t\t\t\ttilt_x_init=tilt_x_init,\n\t\t\t\ttilt_y_init=tilt_y_init,\n\t\t\t\ttilt_z_init=tilt_z_init,\n\t\t\t\ttilt_z_cur=tilt_z_cur,\n\t\t\t\ttilt_x_cur=tilt_x_cur,\n\t\t\t\ttilt_y_cur=tilt_y_cur,\n\t\t\t\twire_init=wire_init,\n\t\t\t\twire_cur=wire_cur\n\t\n\t        }\n\t\n\t   \n\t\n\tend\n\n\n        log.debug('hzyy_http [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2020-09-04 13:22:02.058+08	2020-10-21 09:50:48.901+08	2020-09-04	\N
bcd22974-e902-4447-87c0-bfba8144410b	gx_pressure_6901	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--D:\\SVN\\201901项目\\20190123工讯紧急添加\\MAS-HLS使用说明书.pdf\nstart=function()\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("gx_pressure_6901 设备模块 m=%s  ",moduleNo)\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x16, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n  \tbuff=iota.appendHexByte(buff, 0x12, endian)  \n    --buff=iota.appendHexByte(buff, 0x02, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("gx_pressure_6901,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  ctx:done(errout)\n\tend\nend\n--module=13\n--0d030016001224cf\n--0d032443b6f8ed0000000000000000447a000000000000447a0000487176c64a9d7ffc41faaf0b04cc \n--"pressure": 365.945,\n--"temperature": 31.335\nunmarshall=function(hex,moduleNoStr)\n    log.debug("gx_pressure_6901 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local pressure =iota.hexToFloat(hex,3,'B')\n        local temperature =iota.hexToFloat(hex,35,'B')\n    \n        out.data = {           \n            pressure=tonumber(string.format('%0.3f',pressure)),\n      \t\ttemperature=tonumber(string.format('%0.3f',temperature))\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("gx_pressure_6901 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 41 then --9\n        errormsg = string.format('返回数据长度无效=%s≠41[%s]',string.len(data)/2,data)\n        errcode = 1002\n        return false\n    end\n   \n   local dataMoudle=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataMoudle) then\t\n        errormsg = string.format('模块号无效=%s≠%s[%s]',dataMoudle,moduleCheck,data)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2019-01-24 11:50:35.432+08	2020-06-16 11:30:44.299+08	2019-01-24	\N
20e5b611-c9db-40df-9af4-d3a28d5958f4	anxin_rain	\N	雨量计 主动上报（标准协议）	1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("anxin_rain.lua: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    local moduleStr=device.uplink.props.module\n    log.debug("anxin_rain [%s] Data, ctx=%s",moduleStr,hex)\n    local out={\n        data ={},\n        result = {}\n\t\n    }\n  \n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n\t    local hourrain = iota.hexToShort(hex,24,'B')/100\n        local minrian = iota.hexToShort(hex,26,'B')/100\n\t    local timeStr = string.sub(hex,21,48)\n\t\tlog.debug("anxin_rain timeStr=%s",timeStr)\n                dateTimeStr = toStrHex(timeStr)\n\t\t\t\tlog.debug("anxin_rain dateTimeStr=%s",dateTimeStr)\n                timenow = unixtimestamp(dateTimeStr)\n\t\t\t\t\n\t\t         out={\n\t\t\t\t    data={ \n\t\t\t\t          Hourrain=hourrain,\n                            Minrian =minrian\n\t\t\t\t    },\n\t\t\t\t\ttime=timenow\n\t\t\t\t }\n                            \n                       \n                        \n                  \n                       \t\n        local resultData =json.encode(out)\n        log.debug("anxin_rain [%s] cloudvibrate=%s",moduleStr,json.encode(out))\n        ctx:notify(resultData)\n    else\n        out.result = {code = errcode, msg = errormsg}\n        ctx:done(json.encode(out))\n    end  \nend\n\nIsValid=function(data,deviceModule)\n    if data == nil  then\n        errormsg = 'anxin_rain:Data is nil'\n        errcode = 1001\n    \tlog.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,6,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('anxin_rain module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("anxin_rain [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    log.debug("anxin_rain [%s] 校验通过",deviceModule)\n    return true\n  \nend\n \nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = tonumber(string.sub(datestr,13,14))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n \n    return recordTime\nend\n--HEX字符串->ascii字符串\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = tonumber(string.sub(hex,i*2-1,i*2),16)\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2019-12-18 13:35:30.457+08	2019-12-19 08:50:28.286+08	2019-12-18	\N
cf7c40e3-05b5-4080-9814-8daf77e75127	ct_laser_9507	\N	C型激光测距仪协议	1.0	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	f	912b4b9f-1c00-450b-911e-a85f4c1fe1f5	Lua	-- //04 项目资料/上海地下院/C型激光传感器说明书160924.pdf\nstart = function()\n    log.debug(' load script %s, moduleId=%s', ' BJdh.lua', device.uplink.props.module or '[nil]')\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n\n        log.debug(' whct_CHT-GHLMXXC 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n        log.debug(' whct_CHT-GHLMXXC 设备模块通道 属性获取 m=%s,c=%s  接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n\n    buff = iota.appendHexByte(buff, moduleNo, endian) -- 1: 模块号\n    log.debug(' whct_CHT-GHLMXXC buff=%s', buff)\n    buff = buff .. '0320010002'\n    log.debug(' whct_CHT-GHLMXXC bufff=%s', buff)\n    buff = iota.appendHexCrc(buff, 'L', 0) -- 2: CRC\n    log.debug(' whct_CHT-GHLMXXC buff2=%s', buff)\n    ok, resp = ctx:ssend(buff, 30000) --发送指令\n    --local result="{}"\n    if ok then\n        -- print(string.format("out=%s,data=%s",resp, result))\n        log.debug(' whct_CHT-GHLMXXC aaaaa')\n        result = unmarshall(resp)\n    else\n        local errout = {\n            data = {},\n            result = {}\n        }\n        errout.result = {code = 1001, msg = '采集超时'}\n        result = json.encode(errout)\n    end\n    ctx:done(result)\nend\n\nunmarshall = function(hex, out)\n    out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    log.debug(' whct_CHT-GHLMXXC vvvv')\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then\n        log.debug('whct_CHT-GHLMXXC there')\n\n        local length = iota.hexToUInt(hex,3,'B') / 10000.0\n\n        log.debug('whct_CHT-GHLMXXC length=%s', length)\n        local data = ''\n        out.data = {\n            length = length\n        }\n        log.debug('whct_CHT-GHLMXXC data=%s', data)\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, out)\n    log.debug(' whct_CHT-GHLMXXC 开始校验数据')\n    if data == nil or string.len(data) / 2 ~= 9 then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n\n    if iota.hexToByte(data, 1, 'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False '\n        return false\n    end\n    if iota.hexToByte(data, 3, 'B') == 0x7f and iota.hexToByte(data, 4, 'B') == 0xff and iota.hexToByte(data, 5, 'B') == 0xff and iota.hexToByte(data, 6, 'B') == 0xff then\n        errormsg = 'Invalid Data'\n        errcode = 1001\n        return false\n    end\n    log.debug(' whct_CHT-GHLMXXC 数据校验通过')\n    return true\n    --crc\nend\n	INLINE	2017-09-09 13:52:57.015+08	2019-12-19 10:08:19.004+08	2017-09-09	\N
821360a5-ada6-40f1-987f-4f9e14982c4f	cdaj_yl	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian)                 \n    buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x01, endian)\n \n    buff=iota.appendHexCrc(buff, 'L' ,0)   \n\t \n\n   \n    ok1,resp=ctx:ssend(buff,4000)\n\t \n    local result="{}"\n    if ok1 then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\t\t\n\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==14) then\n        local rainfall\t = iota.hexToUShort(hex,3,'B')/10.0;\n\t\t\n        out.data = {\n            rainfall\t=rainfall\t\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2020-08-13 11:33:20.07+08	2020-08-14 15:22:31.215+08	2020-08-13	\N
7f6d7a19-6752-4542-9a34-7baec15394d5	YS_VW100X	\N		1.0	eb348dfa-0075-47b5-b190-4e10b6c5c6be	eb348dfa-0075-47b5-b190-4e10b6c5c6be	f	eb348dfa-0075-47b5-b190-4e10b6c5c6be	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('YS_VW100X loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('YS_VW100X device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('YS_VW100X 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('YS_VW100X 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n    buff = buff .. 'F7601269'\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n    --1:模块号\n    buff = buff .. '0010000102030405060708090A0B0C0D0E0F'\n    --1:指令:采集\n    local wCRCin = 0x0000\n    local wCPoly = 0x1021\n    local wChar = 0\n    local usDataLen = string.len(buff) / 2\n    log.debug('YS_VW100X usDataLen = %s', usDataLen)\n    local var = 0\n    while usDataLen > 0 do\n        var = var + 1\n        wChar = string.sub(buff, var, var + 1)\n        var = var + 1\n        wChar = tonumber(wChar, 16)\n        wChar = bit.lshift(wChar, 8) --左移\n        wCRCin = bit.bxor(wCRCin, wChar)\n        for i = 0, 7 do\n            local value = bit.band(wCRCin, 0x8000)\n            if value > 0 then\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                wCRCin = bit.bxor(wCRCin, wCPoly) --异或\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            else\n                wCRCin = bit.lshift(wCRCin, 1) --左移\n                if wCRCin > 0xFFFF then\n                    wCRCin = wCRCin - 0x10000\n                end\n            end\n        end\n        --log.debug("YS_VW100X END wCRCin = %X",wCRCin)\n        usDataLen = usDataLen - 1\n    end\n    buff = buff .. string.format('%04X', wCRCin)\n    log.debug('YS_VW100X END buff = %s', buff)\n    --ctx:asend(buff)\n    --ctx:sleep(10)\n\t--ctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 80000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n        log.debug('YS_VW100X 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('YS_VW100X child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t--if allSubData[channelNo]~=nil and allSubData[channelNo]>500 then\n                \tlog.debug('YS_VW100X    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t--end\n            end\n        end\n    else\n        log.debug('YS_VW100X 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('YS_VW100X ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('YS_VW100X  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 15, -5)\n    local dataCount = string.len(subDataArea) / 10\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 10 + 1, (i - 1) * 10 + 10)\n        local channelStr = string.sub(singleChannelDataHex, 2, 2)\n        local subChannel = tonumber(channelStr, 16)+1\n        local subData = string.sub(singleChannelDataHex, 3, -1)\n        DataList[subChannel] = iota.hexToFloat(subData, 0, 'L')\n    \tlog.debug('YS_VW100X  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('YS_VW100X datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[subChannelId+8]\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == '41d90649-a6bb-4671-b100-c37a75836437' then --振弦公式\n           local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('YS_VW100X module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('YS_VW100X module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n\t\t        log.debug('YS_VW100X freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=tonumber(string.format('%0.2f',temp)),\n                frequency = tonumber(string.format('%0.2f',freq)),\n                physicalvalue = tonumber(string.format('%0.4f',Phy))\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('YS_VW100X has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('YS_VW100X has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('YS_VW100X 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0xF7 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('YS_VW100X HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend	INLINE	2020-12-10 15:59:08.478+08	2020-12-22 09:04:15.372+08	2020-12-10	\N
7fcae220-3a13-4230-947b-bb49d6b23b3d	fs_inclinometer_1502	\N		1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "yx_1502", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 21, endian)             -- 2: 类型=21\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("yx_1502 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("yx_1502 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("yx_1502 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)              -- 1: 指令: 0x01 = 采集\n    buff=iota.appendHexCrc(buff, endian ,0)               -- 2: CRC\n\n    log.debug("yx_1502 ssend=%s",buff )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n    \tlog.debug('yx_1502 module %s result = %s',moduleNo,result)\n        ctx:done(result)\n    else\n\n    end\n\nend\n\n\n\n--00152228818FEA0D710E400FCBFFF50877FFF96B7B789E\n--moduleId=8744 \n--"temp": 40.43,\n--"xDegree": -0.718729,\n--"yDegree": -0.431237\n--print("parsing data", hex)\n\n\nunmarshall=function(hex,moduleStr)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local scale=1000000.00;\n        local Temp = iota.hexToShort(hex,11,'B')/100.0;\n        local xa = iota.hexToInt(hex,13,'B')/scale;\n        local ya = iota.hexToInt(hex,17,'B')/scale;\n        out.data = {\n            temperature=Temp,\n            anglex = tonumber(string.format("%5.2f",xa)),\n            angley = tonumber(string.format("%5.2f",ya))\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('yx_1502  module %s 开始校验数据%s',moduleNo_check,data)\n    if data == nil or string.len(data)/2 ~= 23 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n    local dataModule=iota.hexToShort(data,2,'B')\n    if tostring(moduleNo_check) ~= tostring(dataModule) then\t\n        errormsg = string.format('Invalid acq moduleId=%s[%s]',moduleNo_check,dataModule)\n        errcode = 1004\n        return false\n    end\n    log.debug('yx_1502 module %s 数据校验通过',moduleNo_check)\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2020-04-10 15:08:09.981+08	2020-04-10 15:08:09.981+08	2020-04-10	\N
a5fa6229-dace-45db-8d8b-0268e2c892b2	fs_rain_1601	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//D:\\SVN\\201909项目\\RS-YL-N01-1翻斗式雨量计485型用户手册.pdf\nstart=function()\n\t--log.debug("load script %s, moduleId=%s", "fs_rain_1601", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''         \t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t--log.debug("fs_rain_1601 设备模块  m==%s ",moduleNo)\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian)             \n\tbuff=iota.appendHexWord(buff, 0x00, endian) \n\tbuff=iota.appendHexWord(buff, 0x01, endian) \t\n    buff=iota.appendHexCrc(buff, 'L' ,0)            \n\n    ok,resp=ctx:ssend(buff,15000)\n     --log.debug('fs_rain_1601  发送 采集指令=%s',buff)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo)\t   \n    \t--log.debug('fs_rain_1601  接收数据=%s',resp)\n\t\t\n\t\tlocal r1,r1ok = redis.get(device.id.."_clearTime")  --获取上次记录时间\n\t\t--log.debug("fs_rain_1601 读取 r1=%s,r1ok=%s",r1,r1ok)\n\t\tlocal clearTime\n\t\tif r1ok and r1~=nil then\n\t\t\tclearTime=tonumber(r1)\n\t\t\tlocal timeSpan=os.time()-clearTime\n\t\t\t--log.debug("fs_rain_1601 r1=%s,r1ok=%s,clearTime=%s",r1,r1ok,clearTime)\t\n\n\t\t\tif timeSpan>=3600 then\n\t\t\t\tlocal isclearOK=clearCmd(moduleNo)\n\t\t\t\t--log.debug('fs_rain_1601  下发清空[%s]',isclearOK)\n\t\t\telse\n\t\t\t   --log.debug('fs_rain_1601  时间差=[%s]',timeSpan)\n\t\t\tend\n\t\t\t\n\t\telse\n\t\t\tclearTime=os.time()--第一次默认当前时间\n\t\t\tredis.set(device.id.."_clearTime", tostring(clearTime))\n\t\t\t--log.debug("fs_rain_1601 更新 r1=%s,r1ok=%s",r1,r1ok)\n\t\tend\n\t\t\n\t\t\n    else\n\t  --log.debug('fs_rain_1601   数据采集失败')\n    end\n    ctx:done(result)\nend\n\n\n\nclearCmd=function(deviceModule)\n\t --下发 清空雨量\n\t\tlocal buuf_clear=''\n\t\tbuuf_clear=iota.appendHexByte(buuf_clear,deviceModule, endian)  \n\t\tbuuf_clear=iota.appendHexByte(buuf_clear, 0x06, endian)             \n\t\tbuuf_clear=iota.appendHexWord(buuf_clear, 0x00, endian) \n\t\tbuuf_clear=iota.appendHexWord(buuf_clear, 0x5a, endian) \t\n\t\tbuuf_clear=iota.appendHexCrc(buuf_clear, 'L' ,0) \t\n\t   ok1,resp1=ctx:ssend(buuf_clear,15000)\n       log.debug('fs_rain_1601  发送 清空指令=%s',buuf_clear)\n       if ok then\n         if resp1==buuf_clear then\n             return true\n         end\n         else\n         \n       end\n\t    return false\n\nend\n\n--雨量应答   2.7\n\n--010302001bf84f\n\n\n--清零应答  返回和下发一样\n--01060000005a09f1\nunmarshall=function(hex,moduleStr)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local  rain = iota.hexToUShort(hex,3,'B')/10;\n        out.data = {\n             rain = rain\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    --log.debug('fs_rain_1601 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 < 7 or string.len(data)/2 > 7 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1002\n        errormsg = '返回功能码不是0x03' \n        return false\n    end\n  \tlocal dataModule=tostring(iota.hexToByte(data,0,'B'))\n    if moduleNo_check ~= dataModule then\t\n        errormsg = string.format('数据内模块号[%s]不匹配设备模块号[%s]',dataModule,moduleNo_check)\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n 	INLINE	2019-09-29 15:39:36.093+08	2020-04-15 10:44:44.302+08	2019-09-29	\N
0ec2d3bc-8485-4a34-b820-7241990fc394	FS-FSFXY-B	\N	超声波风速风向-B	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n协议号: 1.0;\n协议名: FS-FSFXY-B\n]]--liankang\nstart=function ()\n    --log.debug("FSFSFXYB start %s, ctx=%s", "Inclination_Sensor.lua",json.encode(device))\n\tsendBuff=protocol_encode()\n\t--log.debug("FSFSFXYB encoded") \n\tok,resp=ctx:ssend(sendBuff, 16000) -- 第二个参数超时时间\n\tif ok then\n\t\tresult=protocol_decode(resp)\n\t\t--log.debug("FSFSFXYB decoded") \n\telse\n\t\t--print("SSend error!")\n\tend\n\tctx:done(result)\nend\n\nfunction protocol_encode()\n\tlocal BE='B'\n\tlocal buff='#';\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, BE);  -- 模块号（地址）\n\tbuff = buff.."R\\r"\n\treturn buff \nend\n\n-- decode   \n-- returns: 结果, \n-- 正确回复  >1.8,97.00 \n-- 原始数据  \nfunction protocol_decode(da)\n\t\n\tlocal dataStr = toStrHex(da);\n\t-- 存储结果\n\tlocal out={\n\ttype = 1,\n\tdata ={},\n\tresult = {}\n\t}\n\t--log.debug("FSFSFXYB decoded"..dataStr)\n\t-- 判断数据有效性\n\tif inValid(dataStr) then\n\t\tlocal message = 'Invalid Msg,'\n\t\tout.result = {code=5001,msg=message}\n\t\tout.data = {}\n\telse\n\t\tlocal dotIndex = string.find(dataStr, ",")\n\t\t--log.debug("FSFSFXYB dotIndex ="..json.encode(dotIndex))\n\t\t--log.debug("FSFSFXYB dotIndex ="..string.sub(dataStr, 2, dotIndex - 1))\n\t\t--log.debug("FSFSFXYB dotIndex ="..string.sub(dataStr, dotIndex + 1, string.len(dataStr) -1))\n\t\tlocal windSpeed = tonumber(string.sub(dataStr, 2, dotIndex - 1))\n\t\tlocal windDirection = tonumber(string.sub(dataStr, dotIndex + 1, string.len(dataStr) -1))\n\t\tout.data = {\n\t\t\twindSpeed = windSpeed,\n\t\t\twindDirection = windDirection,\n\t\t};\n\tend\n\treturn json.encode(out)\nend\n\nfunction inValid(data)\n\tif '>' ~= string.sub(data, 1, 1) and nil == data then -- 第一个字符不等于 ">"\n\t\t--log.debug("FSFSFXYB first"..dataStr)\n\t\terrormsg = 'Data is Invalid'\n\t\terrcode = 5001\n\t\treturn true\n\tend\n\treturn false\nend\n\n--字符串ascii->字符\ntoStrHex=function(hex)\n    local len = string.len(hex)/2\n    local str = ''\n    for i =1,len do \n\t\tlocal bi = iota.hexToByte(hex,i-1,'B')\n\t\tlocal ascii =string.format("%c",bi)\n\t\tstr=str..ascii\n\tend\n\treturn str\nend\n	INLINE	2019-12-12 14:17:55.167+08	2020-04-16 09:57:10.726+08	2019-12-12	\N
7fb4d0a4-2890-4ce3-a95d-5e4893fb7b8b	xmxd_mop	\N		1.0	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	f	2cdb8012-dd24-4570-b6c0-be0c8ca414f5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_inclino_1550.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\tlocal aa=''\n\t \n    aa=iota.appendHexByte(aa, 0xFF, endian)                  --1： 帧头\n    aa=iota.appendHexByte(aa, 0x41, endian)\n    aa=iota.appendHexByte(aa, 0x58, endian)\n    aa=iota.appendHexByte(aa, 0x4a, endian)\n    aa=iota.appendHexWord(aa, 2, endian)                     -- 2: 类型=1\n    aa=iota.appendHexWord(aa, device.uplink.props.module, endian)         -- 3: 模块号\n    aa=iota.appendHexByte(aa, 1, endian)                     -- 4: 指令: 0x01 = 采集\n    aa=iota.appendHexCrc(aa, endian ,0)   \n    bb='0d245f'\n\tbb=iota.appendHexWord(bb, device.props.loraid, 'L')\n\tbb=bb .. aa\n\tlog.debug('xmxdz_mop bb=%s', bb)\n\tlocal lcr_str = CS(bb)\n\tlog.debug('xmxdz_mop lcr_str=%s', lcr_str)\n\tbuff='fe0d245f'\n\tbuff=iota.appendHexWord(buff, device.props.loraid, 'L')\n\tbuff= buff .. aa\n\tbuff=iota.appendHexByte(buff, lcr_str, endian)\n\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n   \n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n   local moduleStr=device.uplink.props.module\n   local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then\n        local xDataint = iota.hexToInt(hex,30,'B')\n        local yDataint = iota.hexToInt(hex,34,'B')\n        local zDataint = iota.hexToInt(hex,38,'B')\n        local tempint = iota.hexToShort(hex,42,'B')\n\t\t\n        local xData = iota.hexToInt(hex,16,'B')/1000.0;\n        local yData = iota.hexToInt(hex,20,'B')/1000.0;\n        local zData = iota.hexToInt(hex,24,'B')/1000.0;\n        local temp = iota.hexToShort(hex,28,'B')/100.0;\n        out.data = {\n            anglex=xData,\n            angley=yData,\n            anglez=zData,\n            temperature\t=temp,\n\t\t\txDataint=xDataint,\n\t\t\tyDataint=yDataint,\n\t\t\tzDataint=zDataint,\n\t\t\ttempint=tempint\n        };\n      \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\nIsValid=function(data,deviceModule)\nlog.debug("xmxdz_mop data=%s [%s] ",data,deviceModule)\n    if data == nil  then\n        errormsg = 'xmxdz_mop:Data is nil'\n        errcode = 1001\n    \tlog.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n    local dataModule= iota.hexToShort(data,12,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('xmxdz_mop module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("xmxdz_mop [%s] %s",deviceModule,errormsg)\n        return false\n    end\nif iota.hexToByte(data,14,'B') ~= 0x80  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug("xmxdz_mop [%s] 校验通过",deviceModule)\n    return true\n  \nend\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = bit.bxor(lcr,tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\t\n    end     \n\tlog.debug('xmxdz_mop lcr=%s', lcr)\n\t\n  local value= string.format("%#x",lcr)\n  log.debug('xmxdz_mop value=%s', value)\n  --local byte = string.sub(value,string.len(value)-1,string.len(value))\n  \n  return value\nend \n\n\n \n\n	INLINE	2020-10-09 14:19:16.9+08	2020-11-26 09:44:34.292+08	2020-10-09	\N
f91449ef-9148-402a-835c-2598b132968a	测试协议问题	\N		1.0	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	f	f2b3bb46-fba2-4a7a-a1f9-b88d86826cce	Lua	start=function()\n  local task_k=35\n  local taskid_new = 255 --默认是单任务的 task\n    local kk\n        kk = string.format('%01x', task_k) .. string.format('%01x', task_k + 1)\n        taskid_new = tonumber(kk, 16)\n  log.debug("测试 结果 %s",taskid_new)\n ctx.done({})\nend	INLINE	2020-11-27 14:47:35.728+08	2020-11-27 14:47:35.728+08	2020-11-27	\N
b6893aa5-1010-4f9e-b20e-32084e9115e8	MAS_idau_cloudvibrat	\N	提取云振动i文件解析	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start=function()\n    log.debug("MAS_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    --log.debug("MAS_idau_cloudvibrate : recvd =%s", json.encode(data))\n   \t--log.debug("MAS_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".dat" then\n               --log.debug("MAS_idau_cloudvibrate : recvd content = %s",data.payload)\n               ParseFileDat(data.payload)\n            else\n                --log.error("MAS_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              --log.error("MAS_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        log.error("MAS_idau_cloudvibrate : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("MAS_idau_cloudvibrate : dat content  =%s,len =%s", dathex,string.len(dathex)/2)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("MAS_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("MAS_idau_cloudvibrate begin parse count=%s",floatcount)\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4       \n      \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1)      \t\t\n            vols[i]= iota.hexToFloat(data,0,'L',6)\n        end\n        --log.debug("MAS_idau_cloudvibrate finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        --log.debug("MAS_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("MAS_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("MAS_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("MAS_idau_cloudvibrate has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n	INLINE	2019-10-24 11:26:11.593+08	2020-04-17 09:22:58.79+08	2019-10-24	\N
604cddc0-1aa8-45f7-b0d8-e44a51b1278a	idau_file_diag	\N	诊断	1	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	start=function()\n    log.debug("mas_idau_file:jiexi")\n  end\n  \nonData=function(data)\n    --local jdata=json.encode(data)\n    log.debug("mas_idau_file:data=%s",json.encode(data))\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".d" then\n                  --log.debug("mas_idau_file:payload=%s", data.payload)\n                  parseDiag(data.payload)\n            else\n                --log.error("mas_idau_file:type is not.d %s", data.name)\n            end\n        else\n            --log.error("mas_idau_file:not a d file .d", data.ext)\n        end\n    else\n        --log.error("mas_idau_file:data is nil")\n    end\nend\nfunction parseDiag(js)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n  \n    local djs=Split(js,'\\r')\n    --log.debug("mas_idau_file:jsoncount=%s",#(djs))\n    for k,v in ipairs(djs) do\n        if v~='' and v~=nil then\n            local dj=json.decode(v)\n            --log.debug("mas_idau_file:dj=%s",v)\n            --log.debug("fs_idau_file:sen=%s",dj.S)\n            if dj~=nil and dj ~= '' and dj.R =="0" then\n                --log.debug("mas_idau_file:ceshiyixia1")\n                local childDevice=getDeviceInfo(dj.S)\n                --log.debug("mas_idau_file:childDevice=%s",json.encode(childDevice))\n                if childDevice~=nil and childDevice ~= {} then                 \n                    --log.debug("mas_idau_file:ceshiyixia2")\n                    --log.debug("mas_idau_file:dj.PV1=%s",dj.PV[1])\n\n                    if childDevice.props.sensortype=='cx' then   --测斜\n                        local data1 ={\n                            data={\n                                anglex = dj.RV[1] or 0,\n                                angley= dj.RV[2] or 0,\n                                temperature= dj.RV[3] or 0,  \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data1)\n                    end\n                    \n                    if childDevice.props.sensortype=='wsd' then --温湿度\n                        local data2 ={\n                            data={\n                                temperature = dj.RV[1] or 0,\n                                humidity= dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data2)\n                    end\n                    if childDevice.props.sensortype=='yc' then --压差\n                        local data3 ={\n                            data={\n                                physicalvalue = dj.PV[1] or 0,\n                                frequency=dj.RV[1] or 0,\n                                temperature = dj.RV[2] or 0\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))        \n                            }\n                        table.insert(out.data,data3)\n                    end\n                    if childDevice.props.sensortype=="zx" then --振弦\n                        --log.debug("mas_idau_file:ceshi_zx")\n                        local data4={\n                            data={\n                                    physicalvalue = dj.PV[1] or 0,\n                                    frequency=dj.RV[1],\n                                    temperature=dj.RV[2],\n                                    am=dj.RV[3]\n                                },\n                            device=childDevice.id,\n                            type=1, \n                            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(dj.T)/1000-8 * 60 * 60))  \n                            }\n                            --log.debug("mas_idau_file:out data4=%s",json.encode(data4))\n                            table.insert(out.data,data4)\n                    end\n\n                end\n            else\n                --log.debug("mas_idau_file:dj=nil")\n            end\n        else\n            --log.debug("mas_idau_file:v is nil v=%s",json.decode(v))\n        end\n\n    end\n    local resultData =json.encode(out)\n    --log.debug("mas_idau_file:".."LUA:resultData : data is =%s", json.encode(out))\n    ctx:notify(resultData)\nend\n  \n  --string split函数\nSplit=function(szFullString, szSeparator)\n      local nFindStartIndex = 1\n      local nSplitIndex = 1\n      local nSplitArray = {}\n      while true do\n         local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n         if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n         end\n         nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n         nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n         nSplitIndex = nSplitIndex + 1\n      end\n      return nSplitArray\nend\n  \n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        \n        for i,link in pairs(device.dnlinks) do\n            --log.debug("mas_idau_file:link=%s",json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("mas_idau_file:node=%s",json.encode(node))\n                for k,sublink in pairs(node.dnlinks) do\n                    --log.debug("mas_idau_file:sublink=%s",json.encode(sublink))\n                    for u,subdevice in pairs(sublink.devices) do\n                        --log.debug("mas_idau_file:sensor=%s",json.encode(subdevice))\n                        if subdevice.uplink.props.sensorid == sensorId then\n                            --log.debug("mas_idau_file:final_sensor %s=%s",subdevice.uplink.props.sensorid,sensorId)\n                            resensor = subdevice\n                        end \n                    end\n                end\n            end\n        end          \n    end\n    return resensor\nend\n\n\n	INLINE	2018-03-15 13:37:28.546+08	2020-04-17 09:24:45.328+08	2018-03-15	\N
3bcc969b-9e2f-4d39-9e23-4e778b30d2f4	mas_ktr3	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n\t--log.debug("load script %s, moduleId=%s", "fs_1403", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\t--log.debug("fs_1502 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\t--log.debug("fs_1502 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n\tlog.debug("fs_1403 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 2: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 3: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0, endian) \n\tbuff=iota.appendHexByte(buff, 0, endian) \n\tbuff=iota.appendHexByte(buff, 2, endian) \t\t\t--\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n        ctx:done(result)\n    else\n\n    end\n\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local length = iota.hexToFloat(hex,3,'B')\n        out.data = {\n            length=length/10\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_1403 开始校验数据%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n\t--local moduleNo_check=device.props.moduleId or device.uplink.props.module\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_1502 数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2018-12-24 14:35:27.506+08	2020-04-17 09:29:48.874+08	2018-12-24	\N
2320be85-4d6f-4041-96c3-ddb2a166fbda	fs_idau_cloudvibraty	\N	提取云振动i文件解析	1.0	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	f	67c8b9e9-38d6-4c9a-8772-9c96d78121ed	Lua	start=function()\n    log.debug("yx_idau_cloudvibrate : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    log.debug("yx_idau_cloudvibrate : recvd =%s", json.encode(data))\n   \t--log.debug("yx_idau_cloudvibrate : devid =%s", device.dnlink.props.module)\n    if data ~=nil then\n        if data.type == "idau/file" then \n            if data.ext==".dat" then\n               --log.debug("yx_idau_cloudvibrate : recvd content = %s",data.payload)\n               ParseFileDat(data.payload)\n            else\n                --log.error("yx_idau_cloudvibrate : unsupported file type: %s", data.ext)\n            end\n        else\n              --log.error("yx_idau_cloudvibrate : content type is not file, error recvd type is %s", data.type)\n        end\n    else\n        --log.error("yx_idau_cloudvibrate : recvd content is nil")\n    end\nend\n\nfunction ParseFileDat(dathex)\n    --log.debug("yx_idau_cloudvibrate : dat content  =%s,len =%s", dathex,string.len(dathex)/2)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        --log.debug("yx_idau_cloudvibrate deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        --log.debug("yx_idau_cloudvibrate begin parse count=%s",floatcount)\n        local vols = {}\n        for i= 1, floatcount do\n            offset=40+(i-1)*4       \n      \t\tlocal data = string.sub(dathex,2*(offset+1)-1,-1)      \t\t\n            vols[i]= iota.hexToFloat(data,0,'L',6)\n        end\n        --log.debug("yx_idau_cloudvibrate finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        --log.debug("yx_idau_cloudvibrate deviceid = %s, cloudvibrate=%s",deviceId,json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        --log.debug("yx_idau_cloudvibrate not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        --log.debug("yx_idau_cloudvibrate has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        --log.debug("yx_idau_cloudvibrate has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n	INLINE	2019-08-22 11:50:05.409+08	2020-04-17 09:36:00.206+08	2019-08-22	\N
793c95c5-e27e-4a03-82a1-ed7c0df8674a	cdaj_trwsd	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian)                 \n    buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n \n    buff=iota.appendHexCrc(buff, 'L' ,0)   \n\t \n\n   \n    ok1,resp=ctx:ssend(buff,4000)\n\t \n    local result="{}"\n    if ok1 then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\t\t\n\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n \n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==18) then\n        local humidity\t\t = iota.hexToUShort(hex,3,'B')/10.0\n\t\tlocal temperature\t\t = iota.hexToUShort(hex,5,'B')/100-20\n\t\t\n        out.data = {\n            humidity\t=humidity\t,\n\t\t\ttemperature=temperature\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2020-08-14 13:34:36.962+08	2020-08-14 15:35:05.262+08	2020-08-14	\N
529c4341-8afa-4589-b3af-43a087988e34	xmxd_liquidLevel	\N	工讯贴牌MAS-JLSZ-CSB	1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--require "functions "    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]]\n--\\201809项目\\20180907项目资料提交\\1、沉降监测--厦门忻德--梁少龙\nstart=function()\n    log.debug("start %s, ctx=%s", "xmxd_liquidLevel_1950.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\tlog.debug("xmxd_liquidLevel_1950 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\t\n\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x02, endian)    -- 水位2  水温1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("xmxd_liquidLevel_1950,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1004, msg = 'time is out and ok is false'}      \n\t  log.debug("xmxd_liquidLevel_1950  m=%s, ok is false",moduleNo)\n\t  ctx:done(errout)\n\tend\nend\n--01040440c50a34f90e\n-- level=165.81\n--temp=26.12\nunmarshall=function(hex,moduleNoStr)\n    log.debug("xmxd_liquidLevel_1950 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local length =iota.hexToUShort(hex,3,'B')/100\n\t\tlocal temperature =iota.hexToUShort(hex,5,'B')/100\n    \n    \tlocal kt=device.props.kt\n    \tlocal t0=device.props.t0\n    \tlocal len=length+kt*(temperature-t0)\n\t\t\n        log.debug("xmxd_liquidLevel_1950  m=%s,temperature=%s ",moduleNoStr,temperature)\n        out.data = {           \n            length=tonumber(string.format('%0.3f',len)),\n\t\t\ttemperature=temperature\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("xmxd_liquidLevel_1950 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalidLen='..string.len(data)/2\n        errcode = 1001\n        return false\n    end\n   \n    if tostring(moduleCheck) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n	INLINE	2020-04-21 13:40:56.302+08	2020-04-21 14:14:44.233+08	2020-04-21	\N
65918029-7aa5-44f6-aefb-0f2d55470e9b	http_wifiperson	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('http_wifiperson   LUA http server start')\nend\n\nonData = function(httpbody, index)\n\tlocal out={\n\t\ttype = 1,\n\t\tdata ={},\n\t\tresult = {}\n\t}\n  \t\n    moduleNo = device.uplink.props.id --模块\n    log.debug('http_wifiperson [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    local bodydata = json.decode(bodydataStr)\n\tlocal datais =string.find(bodydataStr,"data")\n\tlocal iscon = "true"\n\tlog.debug('http_wifiperson [%s] cnt=%s', moduleNo,datais)\n\tif datais == nil then\n\t\tasend_HttpResponse(iscon)\n\telse\n    \t iscon = "false"\n\t\tasend_HttpResponse(iscon)\n    end\n  \tlocal module = bodydata.SN\n\tlocal electricity = bodydata.EQ\n\tlocal dataTable = bodydata.data\n\tif datais then\n\t\tif #(bodydata.data) ~= 0 then\n\t\t\tfor k=1, #(bodydata.data) do\t\t\t\n\t\t\t\tlocal RTime = bodydata.data[k].T\n\t\t\t\t--log.debug('http_wifiperson [%s] module = %s Time =%s ',moduleNo,module,RTime)\n\t\t\t\tlocal T = unixtimestamp(RTime,module)\n\t\t\t\tlocal data_in = bodydata.data[k].IN\n\t\t\t\tlocal data_out = bodydata.data[k].OUT\n\t\t\t\tlocal fs = bodydata.data[k].FS\t\t\t\t\t\t\n\t\t\t\t--log.debug("http_wifiperson [%s] fs= %s data_in = %s data_out %s  electricity %s",moduleNo,fs,data_in,data_out,electricity)\n\t\t\t\tif fs == 0 then \n\t\t\t\t\tout.data={\n\t\t\t\t\t\tdata_in = data_in or 0,\n\t\t\t\t\t\tdata_out = data_out or 0\n\t\t\t\t\t}    \n\t\t\t\t\tout.time = T\n\t\t\t\telse\n\t\t\t\t\tlocal errormsg = "红外故障"\n\t\t\t\t\tlocal errcode = 1001\n\t\t\t\t\tout.time = T\n\t\t\t\t\tout.result = {code=errcode,msg=errormsg} \n\t\t\t\tend\n\t\t\t\tlog.debug("http_wifiperson[%s] out= %s",moduleNo,json.encode(out))\n\t\t\t\tif k ~= #(bodydata.data) then\n\t\t\t\t\tctx:notify(json.encode(out))\n\t\t\t\tend\n\t\t\tend\n\t\tend\n  \tend\n\tctx:notify(json.encode(out))\t\nend\n\nasend_HttpResponse = function(isconfig)\n  \t--log.debug("http_wifiperson[%s] isconfig= %s",moduleNo,isconfig)\n\tlocal time_now =getTimeNowStr()\n\tlocal direction = 1\n\tif device.props.direction == "右进左出" then\n\t\tdirection = 2\n\tend\n\tlocal path = "/wificloud/wifi/data.json"\n  \tlocal ts = "DY"\n\tif isconfig == "true" then\n\t\tpath = "/wificloud/wifi/cnf.json"\n    \tts = "CY"\n\tend\n  \tlocal data_body = {\n\t\t\t\tST = time_now,\n\t\t\t\tDN = device.uplink.props.url,\n\t\t\t\tSP = tonumber(device.uplink.props.port),\n\t\t\t\tSR = "/wificloud/wifi/",\n\t\t\t\tWT = "0000-2355",\n\t\t\t\tRT = tonumber(device.props.interval),\n\t\t\t\tUT = tonumber(device.props.interval),\n\t\t\t\tCD = direction,\n\t\t\t\tTS = ts,\n\t\t\t\tCL = 1\n          }\n  \tlocal str = json.encode(data_body)\n    ack = {type = 'http', code = 200, body = str}\n\tlog.debug("http_wifiperson[%s] ack= %s",moduleNo,json.encode(ack))\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y%m%d%H%M%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("http_wifiperson datestr=%s",datestr)\n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,5,6))\n    local day = tonumber(string.sub(datestr,7,8))\n    local hour = tonumber(string.sub(datestr,9,10))\n    local minute = tonumber(string.sub(datestr,11,12))\n    local second = 0\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug('http_wifiperson [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2020-12-03 17:37:50.749+08	2020-12-09 11:32:44.919+08	2020-12-03	\N
64fdaded-b81f-4455-9e7e-6ec7b36ded18	LKQZY_file_transfer	\N	copy_FSQZY_file_transfer	1.0	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	f	2831da9e-1815-47e1-a77e-67843477a527	Lua	start = function()\n    log.debug('FSQZY_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('FSQZY_file_transfer  recvd content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("FSQZY_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('FSQZY_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('FSQZY_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    --log.debug('FSQZY_file_transfer  content  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                    log.debug('FSQZY_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'prism_L_FS' then --直角棱镜\n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height =jsondata.RV[3]--,\n                                --eastingDiff = 1000*jsondata.RV[4],\n                                --northingDiff = 1000*jsondata.RV[5],\n                                --heightDiff = 1000*jsondata.RV[6]\n                               \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    log.debug('FSQZY_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(data_moduleid)\n    log.debug('FSQZY_file_transfer 查询子设备 data_moduleid=%s', data_moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(data_moduleid) then\n                log.debug('FSQZY_file_transfer data_moduleid=%s,匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n        \t\tlog.debug('FSQZY_file_transfer data_moduleid=%s, 不匹配 device node_id=%s', data_moduleid,Point_id)\n            end\n        end\n        log.debug('FSQZY_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('FSQZY_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2020-08-14 16:19:13.169+08	2020-08-14 16:19:13.169+08	2020-08-14	\N
718ac0e4-8b03-4ed6-930b-937ada877aa6	xmlg_1	\N		1.0	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	f	4ed578c6-f98d-4d94-b1b3-472e1ced51bd	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "xmlg_1",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, 0x55, endian)                  --1： 帧头\n    buff=iota.appendHexByte(buff, 0xAA, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)                -- 2: 数据长度=1\n    buff=iota.appendHexByte(buff, 0x09, endian)\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian)         -- 3: 模块号\n    buff=iota.appendHexByte(buff, 0x00, endian)                     \n    buff=iota.appendHexByte(buff, 0x41, endian)         -- 3: 指令码\n    buff=iota.appendHexByte(buff, device.props.moduleId, endian)                     -- 4: 指令: 0x01 = 采集\n    buff=iota.appendHexByte(buff, CS(buff), 'L')              -- 2: CRC16                    -- 5: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,150000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)/2==59) then\n      \n        local polarResistance = iota.hexToFloat(hex,14,'B')\n        local insulance = iota.hexToFloat(hex,18,'B')\n        local corrosionRate = iota.hexToFloat(hex,22,'B')\n        local corrosionCurrent = iota.hexToFloat(hex,26,'B')\n\t\t\n\t\tlocal ocp = iota.hexToFloat(hex,30,'B')\n        local cer = iota.hexToFloat(hex,34,'B')\n        local resistivity = iota.hexToFloat(hex,38,'B')\n        local ph_ocp = iota.hexToFloat(hex,42,'B')\n\t\t\n\t\tlocal ph = iota.hexToFloat(hex,46,'B')\n        local cl_ocp = iota.hexToFloat(hex,50,'B')\n        local cl_potency = iota.hexToFloat(hex,54,'B')\n\t\tlocal dateTimeStr=string.sub(hex,17,28)\n\t\tlog.debug("xmlg_1 dateTimeStr是:%s",dateTimeStr)\n\t\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n      \n       out= {\n\t\tdata={\n            polarResistance=polarResistance,\n            insulance=insulance,\n            corrosionRate=corrosionRate,\n\t\t\tcorrosionCurrent=corrosionCurrent,\n\t\t\tocp=ocp,\n            cer=cer,\n            resistivity=resistivity,\n\t\t\tph_ocp=ph_ocp,\n\t\t\tph=ph,\n            cl_ocp=cl_ocp,\n\t\t\tcl_potency=cl_potency},\n            time=timenow\n        }\n\t\t\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n\tlog.debug('xmlg_1 %s', json.encode(out))\n    return json.encode(out)\n\t\nend\n \n\nCS=function(buff)\n    local lcr = 0\n    for i = 0, string.len(buff)/2-1 do\n        lcr = (lcr + tonumber(string.sub(buff, 1+2*i, 2*(i+1)),16))\n    end\n\tlog.debug("xmlg_1 lcr是:%s",lcr)\n\tlocal value=bit.band(lcr,0xff)\t\t\n    return value\nend \n\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("xmlg_1 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,2)\n\n\tlocal month_a=string.sub(dateTimeStr,3,4)\n\t\n\tlocal day_a=string.sub(dateTimeStr,5,6)\n\n\tlocal hour_a=string.sub(dateTimeStr,7,8)\n\n\tlocal minute_a=string.sub(dateTimeStr,9,10)\n\t\n\tlocal second_a=string.sub(dateTimeStr,11,12)\n\n    \n\n    local year = 2000+tonumber(year_a,16)\n\tlog.debug("xmlg_1 year是:%s",year)\n\tlocal month = tonumber(month_a,16)\n\tlog.debug("xmlg_1 month是:%s",month)\n    local day = tonumber(day_a,16)\n\tlog.debug("xmlg_1 day是:%s",day)\n    local hour = tonumber(hour_a,16)\n\tlog.debug("xmlg_1 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a,16)\n\tlog.debug("xmlg_1 minute是:%s",minute)\n    local second = tonumber(second_a,16)\n\tlog.debug("xmlg_1 second是:%s",second)\n    \n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("xmlg_1 recordTime是:%s",recordTime)\n\treturn recordTime\nend\n\n	INLINE	2020-05-12 13:52:06.246+08	2020-05-20 17:17:59.709+08	2020-05-12	\N
d0689c9a-907c-4c62-a5d4-2a27971aa569	bjsmt_1	\N		1.0	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	f	ccef8df0-e1f5-46be-a5b7-040285b1b6e8	Lua	--字符串ascii->字符\nstart=function()\n    log.debug("bjsmt_1: start module %s, ctx=", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    log.debug("bjsmt_1: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {}\n    }\n\tlocal moduleNo=device.uplink.props.module\n\tlocal ErrorCode = IsValid(hex,moduleNo)\n    if ErrorCode then\n    \n        local zero_length1 = iota.hexToShort(hex,7,'B')*6553.6\n\t\tlocal zero_length2 = iota.hexToShort(hex,9,'B')*0.1\n\t\tlocal zero_length=zero_length2+zero_length1\n\t\tlocal length=iota.hexToShort(hex,11,'B')/10\n\t\tlocal temperature\t=iota.hexToShort(hex,13,'B')/10\n\t\tlocal humidity\t=iota.hexToShort(hex,15,'B')\n\t\tlocal voltage\t=iota.hexToShort(hex,17,'B')/100\n        local caitime=iota.hexToUShort(hex,19,'B')\n\t\t\n\n        out.data = {\n            zero_length=zero_length,\n\t\t\tlength=length,\n\t\t\ttemperature\t=temperature,\t\n\t\t\tvoltage=voltage,\n\t\t\thumidity=humidity,\n            caitime=caitime\n\t\t\t\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n\tend\n\t--return out\n  \n    local resultData =json.encode(out)\n    log.debug("bjsmt_1: out data=%s", json.encode(out))\n    ctx:notify(resultData)\n\tlocal cycletime=device.props.cycletime\n\tlocal c1=string.sub(cycletime,1,1)\n\tlocal ct1 = string.format('%02x', tonumber(c1))\n\tlocal c2=string.sub(cycletime,2,2)\n\tlocal ct2 = string.format('%02x', tonumber(c2))\n\tlocal c3=string.sub(cycletime,3,3)\n\tlocal ct3 = string.format('%02x', tonumber(c3))\n\tlocal c4=string.sub(cycletime,4,4)\n\tlocal ct4 = string.format('%02x', tonumber(c4))\n\tlocal c5=string.sub(cycletime,5,5)\n\tlocal ct5 = string.format('%02x', tonumber(c5))\n\t--local cycletime = string.format('%08x', tonumber(device.props.cycletime))\n\tlog.debug("bjsmt_1: cycletime=%s",cycletime)\n    local cmd ='ff0c08' .. ct1 .. ct2 .. ct3 .. ct4 .. ct5\n\tlog.debug("bjsmt_1: cmd=%s",cmd)\n\tctx:asend(cmd)\nend\n\n\nIsValid=function(data,moduleNo)\n    log.debug('bjsmt_1开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x46  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('bjsmt_1数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-05-25 15:22:38.623+08	2020-05-27 10:14:33.078+08	2020-05-25	\N
1b5694d0-7aa9-4c7b-9fb9-893fa24676d5	bjzhtk_sw	\N		1.0	10b1641f-9368-4783-ab0f-85301fbe0b57	10b1641f-9368-4783-ab0f-85301fbe0b57	f	10b1641f-9368-4783-ab0f-85301fbe0b57	Lua	start = function()\n    --log.debug('bjzhtk_sw  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n\tlog.error('bjzhtk_sw  data is %s', json.encode(data))\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('bjzhtk_sw .d文件 content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("bjzhtk_sw  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('bjzhtk_sw  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('bjzhtk_sw  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('bjzhtk_sw  内容  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n    log.debug('bjzhtk_sw  k=%s,v=%s',k,v)\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local moduleNo = jsondata.M\n               \n\t\t\t\tlog.debug('bjzhtk_sw  moduleNo=%s', moduleNo)\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tfor index, childDevice in pairs(device.dnlinks[1].devices) do\n\t\t\t     log.debug('bjzhtk_sw  devices network =%s', json.encode(device.dnlinks[1].devices))\n\t\t\t\t\tlocal channelStrCheck = tonumber(childDevice.uplink.props.channel)\n\t\t\t\t\tlog.debug('bjzhtk_sw  channelStrCheck=%s', channelStrCheck)\n\t\t\t\t\tlocal moduleNoStrCheck = childDevice.uplink.props.module\n\t\t\t\t\tlog.debug('bjzhtk_sw  moduleNoStrCheck=%s', moduleNoStrCheck)\n\t\t\t\t\tif tonumber(moduleNo)==tonumber(moduleNoStrCheck) then\n\t\t\t\t\tlocal rst = {\n                            data = {\n                                xCoordinate = jsondata.RV[channelStrCheck],\n                                yCoordinate = jsondata.LV[channelStrCheck],\n                                zCoordinate = jsondata.PV[channelStrCheck]\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t \n\t\t\t\t \n\t\t\t\t\n            end\n        end\n    end\n    log.debug('bjzhtk_sw  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\t	INLINE	2020-09-17 16:45:29.896+08	2021-01-25 09:31:45.515+08	2020-09-17	\N
f197324e-172a-442a-8bba-cbc3133be37b	shbx_yw	\N		1.0	28bc5952-cfc7-4d3a-a922-92c82d003b20	28bc5952-cfc7-4d3a-a922-92c82d003b20	f	28bc5952-cfc7-4d3a-a922-92c82d003b20	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "shbx_yw.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shbx_yw 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shbx_yw 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 4, endian)              -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\tbuff=iota.appendHexWord(buff, 0x02, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,4000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n     \n        local length1 = iota.hexToShort(hex,3,'B')--mm\n\t\tlocal length2 = iota.hexToShort(hex,5,'B')/65535\n\t\tlocal length=length1+length2\n\t\t--local temp1 = iota.hexToShort(hex,7,'B')\n\t\t--local temp2 = iota.hexToShort(hex,9,'B')/65535\n\t\t--local temp=temp1+temp2\n\n\n        out.data = {\n            length=string.format("%0.3f",length)\n\t\t\t--temperature=string.format("%0.3f",temp)\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('shbx_yw开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x04  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shbx_yw数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-05-14 15:02:27.576+08	2020-05-21 17:47:51.096+08	2020-05-14	\N
af3b3292-072e-4839-aa5b-0096cd1b9249	leica_file_transfer	\N		1.0	2831da9e-1815-47e1-a77e-67843477a527	2831da9e-1815-47e1-a77e-67843477a527	f	2831da9e-1815-47e1-a77e-67843477a527	Lua	start = function()\n    log.debug('leica_file_transfer  devices network =%s', json.encode(device))\nend\n\nonData = function(data)\n    if data ~= nil then\n        if data.type == 'idau/file' then\n            if data.ext == '.d' or data.ext == '.dx' then\n                log.debug('leica_file_transfer .d文件 content = %s', data.payload)\n                ParseFileD(data.payload)\n            --else\n            --log.error("leica_file_transfer  unsupported file type: %s", data.ext)\n            end\n        else\n            log.error('leica_file_transfer  content type is not file, error recvd type is %s', data.type)\n        end\n    else\n        log.error('leica_file_transfer  recvd content is nil')\n    end\nend\n\nfunction ParseFileD(content)\n    local out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n    log.debug('leica_file_transfer  内容  =%s', content)\n    local jsons = Split(content, '\\r')\n    for k, v in pairs(jsons) do\n    log.debug('leica_file_transfer  k=%s,v=%s',k,v)\n        if v ~= nil and v ~= '' then\n            local jsondata = json.decode(v)\n            if jsondata ~= nil and jsondata ~= '' then\n                local childDevice = getDeviceInfo(jsondata.M)\n                if childDevice ~= nil then\n                    log.debug('leica_file_transfer  设备类型=%s,%s', childDevice.props.sensortype, json.encode(childDevice))\n                    if childDevice.props.sensortype == 'prism_L' then --直角棱镜\n                        local rst = {\n                            data = {\n                                easting = 1000*jsondata.RV[1],\n                                northing = 1000*jsondata.RV[2],\n                                height = 1000*jsondata.RV[3],\n                                eastingDiff = 1000*jsondata.RV[4],\n                                northingDiff = 1000*jsondata.RV[5],\n                                heightDiff = 1000*jsondata.RV[6]\n                               \n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n            \t\telseif  childDevice.props.sensortype == 'prism_L_0' then --直角棱镜 无倍率\n                        local rst = {\n                            data = {\n                                easting = jsondata.RV[1],\n                                northing = jsondata.RV[2],\n                                height = jsondata.RV[3],\n                                eastingDiff = jsondata.PV[1],\n                                northingDiff = jsondata.PV[2],\n                                heightDiff = jsondata.PV[3]\n                            },\n                            device = childDevice.id,\n                            type = 1,\n                            time = os.date('%Y-%m-%dT%H:%M:%S+08:00', (tonumber(jsondata.T) / 1000-8*3600))\n                        }\n                        table.insert(out.data, rst)\n                    end\n                else\n                end\n            end\n        end\n    end\n    log.debug('leica_file_transfer  result = %s', json.encode(out))\n    ctx:notify(json.encode(out))\nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid)\n    log.debug('leica_file_transfer 查询子设备 moduleid=%s', moduleid)\n    if device.dnlinks ~= nil then\n        local subdevices = device.dnlinks[1].devices\n        for i, subdevice in pairs(subdevices) do\n            local Point_id = subdevice.uplink.props.node_id\n            if tostring(Point_id) == tostring(moduleid) then\n                log.debug('leica_file_transfer m=%s,2匹配到设备=%s', Point_id, json.encode(subdevice))\n                return subdevice\n            else\n            end\n        end\n        log.debug('leica_file_transfer has no device Point_id=%s', moduleid)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('leica_file_transfer has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend	INLINE	2019-04-08 11:53:43.029+08	2020-09-07 18:59:12.17+08	2019-04-08	\N
7a9b4886-a218-4e10-b299-5a6a13496bbf	soWay_lvdt_9102	\N	深圳市信为LVDT裂缝计协议	1.0	e73ab0fd-f5f4-483f-be99-b076b25341d1	e73ab0fd-f5f4-483f-be99-b076b25341d1	f	e73ab0fd-f5f4-483f-be99-b076b25341d1	Lua	\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n\n\nstart=function()\n    log.debug("start %s, ctx=", "bl_lvdt_9101.lua",json.encode(ctx.device))\n    local moduleNo=device.uplink.props.module or device.props.moduleId --模块 通道 优先接口获取\n\tif tonumber(moduleNo) > 255 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = 'module is Invalid'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexByte(buff, moduleNo, endian)              -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x04, endian)                         --1: CMD 4\n    buff=iota.appendHexByte(buff, 0x00, endian)  \n    buff=iota.appendHexByte(buff, 0x04, endian)  \n    buff=iota.appendHexByte(buff, 0x00, endian)  \n  \tbuff=iota.appendHexByte(buff, 0x02, endian)                 --1: CMD 1\n    buff=iota.appendHexCrc(buff, 'L' ,0)                 -- 2: CRC\n\n    -- print("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoStr)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        -- 010404800101488222\n        local data_by = 0\n        local elongation = 0\n        if iota.hexToByte(hex,1,'B') == 0x04 then\n            local by = string.sub(hex,7,15) --data\n            local sign = 1\n            data_by = iota.hexToByte(by,0,'B') \n            if data_by >= 0x80 then\n                data_by = bit:_and(data_by , 0x7f)\n                sign = -1\n            end\n            local integer = bit:_or(bit:_lshift(bit:_and(data_by , 0xffff) , 8) , iota.hexToByte(by,1,'B')) * sign\n            local decim = bit:_or(bit:_lshift(bit:_and(iota.hexToByte(by,2,'B') , 0xffff) , 8) , iota.hexToByte(by,3,'B')) /1000 * sign\n\n            elongation = integer + decim\n            out.data = {\n                elongationIndicator=elongation\n            }\n        else \n            local cmd = iota.hexToByte(hex,2,'B')\n            if cmd == 0x06 then \n                out.result = {\n                    code = 1005,\n                    msg = '功能号错误'\n                }\n            elseif cmd == 0x05 then \n                out.result = {\n                    code = 1005,\n                    msg = '寄存器错误'\n                }\n            elseif cmd == 0x04 then \n                out.result = {\n                    code = 1005,\n                    msg = '正常操作发生异常'\n                }\n            end\n        end\n\n\n    else\n        out.result = {code=errcode,msg=errormsg}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\nIsValid=function(data,deviceModule)\n  log.debug(string.sub(data,1,12))\n    if data == nil or (string.len(data)/2 ~= 9 and string.len(data)/2 ~=5) then\n        errormsg = 'Data is nil or Invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x04 and iota.hexToByte(data,1,'B') ~= 0x84 then\n        errormsg = 'CMD is not right,0x04/0x84'\n        errcode = 1001\n    \treturn false\n    end\n  \tlocal dataModule=iota.hexToByte(data,0,'B')\n    if deviceModule ~= tostring(dataModule) then\n        errormsg = 'Invalid moduleId'\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \n	INLINE	2017-09-04 16:48:57.583+08	2020-05-19 16:37:58.006+08	2017-09-02	\N
cedac832-df05-4b4d-bec7-05664a01574a	hzyy_qj02	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    log.debug('hzyy_qj02   device=%s', json.encode(device))\n\tlog.debug('hzyy_qj02   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_qj02', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_qj02 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_qj02 [%s] 时间戳', tonumber(timeStamps))\n    local inc_x=tonumber(bodypkg['inc_x'])\n\tlocal inc_y=tonumber(bodypkg['inc_y'])\n\n\tlocal temp=tonumber(bodypkg['temp'])\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t anglex=inc_x,\n\t angley=inc_y,\n\t\n\t temperature=temp\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_qj02 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2020-11-27 09:58:41.212+08	2020-11-27 17:32:20.372+08	2020-11-27	\N
3918f7c9-7aed-49f8-8e15-57015d8856ec	cdaj_jgwy	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff1=''--采集数据命令\n\tbuff1=iota.appendHexWord(buff1, device.uplink.props.module, endian) \n    buff1=iota.appendHexByte(buff1, 0x83, endian)                 \n    buff1=iota.appendHexByte(buff1, 0x02, endian)\n    buff1=iota.appendHexByte(buff1, 0x06, endian)\n    buff1=iota.appendHexByte(buff1, 0x03, endian)\n    buff1=iota.appendHexCrc(buff1, 'L' ,0)   \n\t\n\tlocal buff2=''--打开激光命令\n\tbuff2=iota.appendHexWord(buff2, device.uplink.props.module, endian) \n    buff2=iota.appendHexByte(buff2, 0x07, endian)                 \n    buff2=iota.appendHexByte(buff2, 0x03, endian)\n    buff2=iota.appendHexByte(buff2, 0x01, endian)\n    buff2=iota.appendHexByte(buff2, 0x04, endian)\n    buff2=iota.appendHexByte(buff2, 0x01, endian)\n    buff2=iota.appendHexCrc(buff2, 'L' ,0)   \n\t\n\tlocal buff3=''--关闭激光命令\n\tbuff3=iota.appendHexWord(buff3, device.uplink.props.module, endian) \n    buff3=iota.appendHexByte(buff3, 0x07, endian)                 \n    buff3=iota.appendHexByte(buff3, 0x03, endian)\n    buff3=iota.appendHexByte(buff3, 0x01, endian)\n    buff3=iota.appendHexByte(buff3, 0x04, endian)\n    buff3=iota.appendHexByte(buff3, 0x00, endian)\n    buff3=iota.appendHexCrc(buff3, 'L' ,0)  \n\n   \n    ok1,resp1=ctx:ssend(buff2,15000)\n\t   log.debug('cdaj_jg  resp1=%s', resp1)\n    local result="{}"\n    if ok1 then\n\tlog.debug('cdaj_jg  11111')\n\t    ctx:sleep(0.2)\n\t\tlog.debug('cdaj_jg  222')\n\t\tok2,resp2=ctx:ssend(buff1,15000)\n\t\tlog.debug('cdaj_jg  resp2=%s', resp2)\n\t\tif ok2 then\n\t\tlog.debug('cdaj_jg  333')\n\t\t\tresult = unmarshall(resp2)\n\t\t\tlog.debug('cdaj_jg  444')\n\t\t\t\n\t\tend\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    if (string.len(hex)==30) then\n        local length = iota.hexToInt(hex,7,'B')/10.0;\n\t\tlog.debug('cdaj_jg  length=%s', length)\n        local temp = iota.hexToShort(hex,11,'B')*0.0625  \nlog.debug('cdaj_jg  temp=%s', temp)\t\t\n        out.data = {\n            length=length,           \n            temperature\t=temp\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2020-08-05 17:50:15.015+08	2020-08-17 17:54:29.13+08	2020-08-05	\N
ccf5fd2e-6140-49e6-81bb-dffcb24079c4	HTTP-TS	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('httpTS   LUA http server start')\nend\n\nonData = function(httpbody, index)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    asend_HttpResponse()\n    --\n    local moduleNo = device.uplink.props.id --模块\n    log.debug('httpTS [%s] hex.Body=%s type=%s', moduleNo, httpbody.Body, type(httpbody.Body))\n    local bodydataStr = httpbody.Body\n    local bodydata = json.decode(bodydataStr)\n    local tempDataList = bodydata.tempDataList\n  \tlog.debug('httpTS [%s] tempDataList=%s', moduleNo,json.encode(tempDataList))\n  \t\n\tlocal x = 0\n\tlocal y = 0\n\tlocal h = 0\n  \tfor i = 1,#(tempDataList),1 do\n\t\tlocal module = tempDataList[i].tkCode\n\t\t\n\t\tlocal RTime = tempDataList[i].measTime\n\t\tlocal easting = tempDataList[i].x\n\t\tlocal northing = tempDataList[i].y\n\t\tlocal height = tempDataList[i].h\n\t\tlog.debug('httpTS[%s] module = %s Time =%s ',moduleNo,module,RTime)\n\t\tlocal T = unixtimestamp(RTime,module)\n\t\tlocal childDevice = getDeviceInfo(module)\n    \tlog.debug("httpTS[%s] device= %s easting = %s northing %s  height %s",moduleNo,childDevice.id,easting,northing,height)\n    \tlocal timeNowNum = os.time()\n        local data1 ={\n          data={\n\t\t\t\teasting = easting or 0,\n\t\t\t\tnorthing = northing or 0,\n\t\t\t\theight = height or 0\n          },\n          device=childDevice.id,\n          type=1,\n          time=T       \n        }\n        table.insert(out.data,data1)\n\tend\n  \tlog.debug("httpTS[%s] out= %s",moduleNo,json.encode(out))\n\tctx:notify(json.encode(out))\nend\n\nasend_HttpResponse = function()\n  \tlocal data_body = {\n\t\t\t\tcode = 1,\n\t\t\t\tmessage = "保存成功!",\n\t\t\t\tdata = true\n          }\n  \tlocal str = json.encode(data_body)\n    ack = {type = 'http', code = 200, body = str}\n    ctx:asend(ack)\nend\n\ngetTimeNowStr = function()\n    --2018-4-28 16:10:12\n    local timeNowNum = os.time()\n    local timeNowStr = os.date('%Y-%m-%d %H:%M:%S', timeNowNum)\n    return timeNowStr\nend\n\nunixtimestamp = function(datestr, moduleNoStr)\n    -- 2018-4-28 16:10:12\n    --log.debug("fs_tj_lf_station datestr=%s",datestr)\n    local datelist = Split(datestr, ' ')\n    local date = Split(datelist[1], '-')\n    local time = Split(datelist[2], ':')\n    local year = tonumber(date[1])\n    local month = tonumber(date[2])\n    local day = tonumber(date[3])\n    local hour = tonumber(time[1])\n    local minute = tonumber(time[2])\n    local second = tonumber(time[3])\n    --log.debug("fs_tj_lf_station year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    local timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('httpTS [%s] recordTime=%s', moduleNoStr, recordTime)\n    return recordTime\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ntable_leng = function(t)\n    local leng = 0\n    for k, v in pairs(t) do\n        leng = leng + 1\n    end\n    return leng\nend\n  --获取采集仪下面的通道信息\nfunction getDeviceInfo(sensorId)\n    local resensor=nil\n    if device.dnlinks ~=nil then\n        --log.debug("httpTS =%s:deviceInfo=%s",filename,json.encode(device))\n        for i,link in pairs(device.dnlinks) do\n            --log.debug("httpTS: = %s link=%s",filename,json.encode(link))\n            for j,node in pairs(link.devices) do\n                --log.debug("httpTS:  node=%s",json.encode(node))\n        \t\tif node.uplink ~= nil then\n\t\t\t\t  if node.uplink.props.module == sensorId then\n\t\t\t\t\t  --log.debug("httpTS: final_sensor %s=%s",node.uplink.props.module,sensorId)\n\t\t\t\t\t  resensor = node\n\t\t\t\t  end \n          \t\tend\n            end\n        end          \n    end\n    return resensor\nend	INLINE	2020-05-21 15:13:14.044+08	2020-05-23 20:57:23.973+08	2020-05-21	\N
12ca8de8-2ecd-44e6-a8f4-027259a56c1b	masfx	\N		1	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "MAS_FX", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("MAS_FX 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x81, endian)            \n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("MAS_FX SSend error!")\n        end\n        ctx:done(result)\nend\n--01 81 C0 40\n--01 81 04 00 00 00 0e 01 D4 EB\n--moduleId=1   \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local direction = iota.hexToShort(hex,6,'L')\n       \n        out.data = {\n            direction=direction\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('MAS_FX 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 10 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x81 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleStrCheck)~= iota.hexToByte(data,0,'B') then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('MAS_FX 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2020-09-28 10:45:58.847+08	2020-09-28 10:45:58.847+08	2020-09-28	\N
96535cb0-1134-4b01-8885-34fbf6127874	jxzy_gas_1105	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--F:\\SVN\\202005项目\\江西制药\\手提式多合一通信协议-山盾科技20200522（NH3 H2S CH4 OU）.doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jxzy_gas_1104", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x08, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("jxzy_gas_1104 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030000045cf\n--010318000000003dccd46b3effff1a3f806b69a1db\n \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local NH3 = iota.hexToFloat(hex,3,'B')   --氨气\n        local H2S = iota.hexToFloat(hex,7,'B')  --硫化氢\n\t\tlocal CH4 = iota.hexToFloat(hex,11,'B')  --甲烷\n\t\tlocal OU = iota.hexToFloat(hex,15,'B')  --臭气\n       \n        out.data = {\n\t\t\tNH3=tonumber(string.format('%0.2f',NH3)),\n\t\t\tH2S=tonumber(string.format('%0.2f',H2S)),\n\t\t\tCH4=tonumber(string.format('%0.2f',CH4)),\n\t\t\tOU=tonumber(string.format('%0.2f',OU))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('jxzy_gas_1104 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 21 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('jxzy_gas_1104 数据校验通过')\n    return true\n--crc\nend	INLINE	2020-05-28 11:50:15.359+08	2020-05-28 15:15:32.452+08	2020-05-28	\N
28dcd12e-e7ce-4514-babe-0fc7a77c63c3	rtu_disaster_mop_2	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n    --log.debug("rtu_disaster_mop start , ctx=")\n\tlocal linkcnt = #(device.dnlinks)--遍历sensors,分配到4个channel\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks)\n\tif sencnt > 0 then \n        for i,dnlink in pairs(device.dnlinks)  do\n            for j,subdevice in pairs(dnlink.devices)  do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel)\n\t\t\t\t\tlocal sentype = subdevice.uplink.props.type\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "加速度计" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "泥位计" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "雨量计" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "土壤含水率" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "GNSS" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "倾角计" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "土压力计" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "地表位移" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "深部位移" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "倾斜仪" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "24"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "空隙水压计" then--渗压计就是空隙水压计 名称统一\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\n\t\t\t\t\telseif sentype == "土壤温湿度计" then\n\t\t\t\t\t\tsen_type = "223"\n                    elseif sentype == "抓拍机" then\n\t\t\t\t\t\tsen_type = "224"\n                    elseif sentype == "声光报警" then\n\t\t\t\t\t\tsen_type = "225"\n\t\t\t\t\telseif sentype == "激光测距仪" then\n                        sen_type = "226"\n\t\t\t\t\tend\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tsample = tostring(subdevice.uplink.props.sample),\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = string.format("%s,%s,%s",subdevice.props.thresholdx or 0,subdevice.props.thresholdy or 0,subdevice.props.thresholdz or 0),\n\t\t\t\t\t\tupperlimit = tostring(subdevice.uplink.props.upperlimit),\n\t\t\t\t\t\tlowerlimit = tostring(subdevice.uplink.props.lowerlimit),\n\t\t\t\t\t\tcp1 = tostring(subdevice.props.cp1) or "0",\n\t\t\t\t\t\tcp2 = tostring(subdevice.props.cp2) or "0",\n\t\t\t\t\t\tcp3 = tostring(subdevice.props.cp3) or "0",\n\t\t\t\t\t\tcp4 = tostring(subdevice.props.cp4) or "0"\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode)\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop  [%s]  ok=%s,r1=%s,mode=%s",devmodule,ok,r1,device.props.mode)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic })\n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d  tableconfig_3 =%d  tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tGenratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\n    local allconfig={}\n    allconfig[1]=tableconfig_1\n    allconfig[2]=tableconfig_2\n    allconfig[3]=tableconfig_3\n    allconfig[4]=tableconfig_4\n    local devmodule = device.props.moduleid\n\tlocal channel=0\n    for _, single_tableconfig in pairs(allconfig) do\n\t\tchannel=channel+1\n        if #(single_tableconfig) > -1 then\n            local count = #(single_tableconfig)\n            ----获取配置，判断是否下发\n            local strdevice= toHexStr(json.encode(single_tableconfig))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s 校验配置 strdevice =%s crc =%s",devmodule,channel,json.encode(single_tableconfig), crc)\n            ----轮询下发\n            local index = 0\n            local topic =devmodule.."/ch/"..channel\n            local cmd = "$cmd=setsensor&sensor_num=0"\n\t\t\tlocal redis_key=device.id.."_rtuchset_"..channel\n            local r1,ok1 = redis.get(redis_key)\n            if ok1 and r1~=nil then\n                if r1 ~= crc then --配置有修改\n\t\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s  缓存变化 redis_key=%s r1 =%s crc =%s",devmodule,channel,redis_key,r1, crc)\n                    for i,value in pairs(single_tableconfig)  do\n                        cmd = "$cmd=setsensor&sensor_num="\n                        index = index + 1\n                        cmd = cmd..tostring(index)\n                        local senid = value.channel.."_"..value.module.."_"..value.type\n                        local cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n                        cmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n                        ---------------------------------------------------------------\n\t\t\t\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s redis_key=%s 修改配置下发  topic =%s cmd =%s",devmodule,channel,redis_key,topic, cmd)\n\t\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n            \t\t\tctx:sleep(1)\n                    end\n\t\t\t\t\t--如果数量变成0\n\t\t\t\t\tif #single_tableconfig==0 then\n\t\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n            \t\t\tctx:sleep(1)\n\t\t\t\t\tend\n                end\n            else --第一次配置下发\n\t\t\t\tlog.debug("rtu_disaster_mop  [%s] 通道%s redis_key=%s  第一次配置下发  topic =%s cmd =%s,r1=%s,ok1=%s",devmodule,channel,redis_key,topic, cmd,r1,ok1)\n                local ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic })\n            end\n            ---记录\n            redis.set(redis_key, tostring(crc))\n        end\n    end\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend	INLINE	2020-09-28 19:27:13.716+08	2020-11-11 15:11:22.046+08	2020-09-28	\N
5010d82f-8dc9-4bcc-bc9c-9349a8102b24	masios_pressure_9002	\N		1.0	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	f	981ffd3e-4ada-4d28-b7d7-11f5ce3fd4a5	Lua	--// Documents/PMO/02 产品协议/外购产品协议/麦克公司数字化变送器通信指令集.pdf\nbit={data32={}}\nfor i=1,32 do\n    bit.data32[i]=2^(32-i)\nend\n\nfunction bit:d2b(arg)\n    local   tr={}\n    for i=1,32 do\n        if arg >= self.data32[i] then\n        tr[i]=1\n        arg=arg-self.data32[i]\n        else\n        tr[i]=0\n        end\n    end\n    return   tr\nend   --bit:d2b\n\nfunction    bit:b2d(arg)\n    local   nr=0\n    for i=1,32 do\n        if arg[i] ==1 then\n        nr=nr+2^(32-i)\n        end\n    end\n    return  nr\nend   --bit:b2d\n\nfunction    bit:_or(a,b)  \n    local   op1=self:d2b(a)  \n    local   op2=self:d2b(b)  \n    local   r={}  \n      \n    for i=1,32 do  \n        if  op1[i]==1 or   op2[i]==1   then  \n            r[i]=1  \n        else  \n            r[i]=0  \n        end  \n    end  \n    return  self:b2d(r)  \nend\n\n\nfunction  bit:_xor(a,b)\n    local op1 = self:d2b(a)\n    local op2 = self:d2b(b)\n    local r={}\n    for i = 1,32 do\n        if op1[i] == 0 then\n            r[i] = op2[i]\n        else\n            if op2[i] == 0 then\n                r[i] = 1\n            else\n                r[i] = 0\n            end\n        end\n    end\n    return self:b2d(r)\nend\n\nfunction    bit:_and(a,b)\n    local   op1=self:d2b(a)\n    local   op2=self:d2b(b)\n    local   r={}\n\n    for i=1,32 do\n        if op1[i]==1 and op2[i]==1  then\n            r[i]=1\n        else\n            r[i]=0\n        end\n    end\n    return  self:b2d(r)\n\nend --bit:_and\n\n\nlocal pp = 0\nfunction check(pcmd)\n\tpp = bit:_and(PCBxor(pp,pcmd),0xff)\n\treturn pp\nend\n\nfunction    bit:_rshift(a,n)\n    local   op1=self:d2b(a)\n    local   r=self:d2b(0)\n\n    if n < 32 and n > 0 then\n        for i=1,n do\n            for i=31,1,-1 do\n                op1[i+1]=op1[i]\n            end\n            op1[1]=0\n        end\n    r=op1\n    end\n    return  self:b2d(r)\nend --bit:_rshift\n\nfunction    bit:_lshift(a,n)  \n    local   op1=self:d2b(a)  \n    local   r=self:d2b(0)  \n      \n    if n < 32 and n > 0 then  \n        for i=1,n   do  \n            for i=1,31 do  \n                op1[i]=op1[i+1]  \n            end  \n            op1[32]=0  \n        end  \n    r=op1 \n    end  \n    return  self:b2d(r)  \nend --bit:_lshift \n--2a31372b332e3531363933420d    module=17   channelId=1\n--"pressure": 3.5169\n\n--2a31372b31322e323430370d     module=17    channelId=1\n--temp": 12.24\n\nstart=function()\n    log.debug("load script %s, moduleId=%s", "masios_pressure_9002.lua", device.uplink.props.module or "[nil]")\n\t\n\t\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("masios_pressure_9002 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n\telse\n\t\tmoduleNo=device.props.moduleId\t\t\n\t\tlog.debug("masios_pressure_9002 设备模块通道 属性获取 m=%s  接口props=%s",moduleNo,json.encode(device.uplink.props))\n\tend\n\t\n\tif tonumber(moduleNo) > 99 then\n        local errout={\n        data ={},\n        result = {code = 1004,msg = '模块号大于99'}\n        }\n\n        local errresult = json.encode(errout)\n        ctx:done(errresult)\n    end\n  --全局out\n      out={\n        data ={},\n        result = {}\n    }\n    local endian = 'B'\n    local buff=''\n    local sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RP'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    --log.debug("ssend=", ctx:ssend(buff,500) )\n    ok,resp=ctx:ssend(buff,10000)\n    local result="{}"\n    if ok then\n        result_pressure = unmarshall(resp,moduleNo)\n    else\n    \tout.result = {code = 1001, msg = '压强采集超时'}\n    end\n  if out.data.pressure~=nil then\n    ctx:sleep(1)\n    log.debug('masios_pressure_9002   m='..moduleNo..'  压强解析正常'..tostring(out.data.pressure))\n    --压强正常  继续解析\n    sendstr = ''\n    sendstr = sendstr..PadLeft(2,0,moduleNo)\n    sendstr = sendstr..'RT'\n    --sendstr = sendstr..tostring(device.props.channelId)\n    sendstr = sendstr..'0'\n    local p1,p2 = Check(sendstr)\n    sendstr = sendstr..string.format("%X",p1)..string.format("%X",p2)\n    sendstr = '$'..sendstr\n    buff=toHexStr(sendstr)\n    buff=iota.appendHexByte(buff, 0x0D, endian)\n    log.debug('masios_pressure_9002   m='..moduleNo..' 开始温度采集cmd:'..buff)\n    ok,resp=ctx:ssend(buff,10000)  \n    if ok then\n       log.debug('masios_pressure_9002  m='..moduleNo..' 温度采集成功 开始解析温度:'..resp)\n        result_temp =tempunmarshall(resp,moduleNo) \n      else\n      log.debug('masios_pressure_9002  m='..moduleNo..'  温度采集失败')\n      out.result = {code = 1001, msg = '温度采集超时'}\n    end\n  end\n    result=json.encode(out)\n     log.debug(string.format('masios_pressure_9002   m=%s,result=%s',moduleNo, result))\n    ctx:done(result)\nend\n\nunmarshall=function(hex,moduleNoPcheck)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n  log.debug('masios_pressure_9002   m=%s,pre =%s',moduleNoPcheck,toStrHex(hex))\n    local ErrorCode = IsValid(hex,moduleNoPcheck)\n    if ErrorCode then\n        -- 010404800101488222\n        local pdata = string.sub(toStrHex(hex),5,-3)\n        pre = 0\n        if string.sub(toStrHex(hex),4,4) =='-' then\n            pre = tonumber(pdata) * -1\n        else \n            pre = tonumber(pdata) \n        end\n        out.data.physicalvalue = pre\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n    --return json.encode(out)\nend\n \ntempunmarshall=function(hex,moduleNoTcheck)\n  log.debug('masios_pressure_9002   m=%s,receivedtemp =%s',moduleNoTcheck,toStrHex(hex))\n    local ErrorCode = IsValidtemp(hex,moduleNoTcheck)\n    if ErrorCode then\n        -- 010404800101488222\n        local tdata = string.sub(toStrHex(hex),5,-4)\n        local temperature = 0\n        if string.sub(toStrHex(hex),5,5) =='-' then\n            temperature = tonumber(tdata) * -1\n        else \n            temperature = tonumber(tdata) \n        end\n        out.data.temperature = temperature\n    else\n        out.result = {code=errcode,msg=errormsg}\n    end\n   -- return json.encode(out)\nend\n\nIsValid=function(data,moduleNoStrP)\n    if data == nil or string.len(data)/2 < 12  then\n        errormsg = string.format('压强数据长度无效=%s<12,data=%s',string.len(data)/2,data)\n        errcode = 1002\n        return false\n    end\n    if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n        errormsg =  string.format('压强 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n        errcode = 1003\n        return false\n    end\n  log.debug('d =%s',toStrHex(data))\n  \t local dataModule=string.sub(toStrHex(data),2,3)\n    if PadLeft(2,0,moduleNoStrP) ~= dataModule then\n    \t\n        errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrP)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n \nIsValidtemp=function(data,moduleNoStrT)\n    if data == nil or string.len(data)/2 < 12  then\n        errormsg = string.format('温度 数据长度无效=%s≠12,data=%s',string.len(data)/2,data)\n        errcode = 1002\n        return false\n    end\n    if string.sub(data,1,2) ~= '2a' or string.sub(data,-2,-1)~= '0d' then\n        errormsg = string.format('温度 数据 帧头≠0x2a 或 数据帧尾≠0x0d,data=%s',data)\n        errcode = 1003\n        return false\n    end\n      \tlog.debug('s =%s', toStrHex(data))\n  \t local dataModule=string.sub(toStrHex(data),2,3)\n    if PadLeft(2,0,moduleNoStrT) ~= dataModule then\n\n        errormsg = string.format('压强数据 返回的模块号无效=%s[%s]',dataModule,moduleNoStrT)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n\nPadLeft=function(cnt,num,hex)\n    local len = string.len(tostring(hex))\n    local offset = cnt -tonumber(len)\n    if offset == 0 then \n        return hex\n    else\n        for i = 1,offset do \n            hex = tostring(num)..tostring(hex)\n        end\n    end\n    return hex\nend\n\n \n-- 字符串 -> BCD\ntoHexStr=function(str)\n  local len = string.len(str);\n  local hex='';\n  for i =1,len do\n    local bi = string.byte(str, i);\n    hex=hex..string.format("%02X",bi);\n  end\n  return hex;\nend\n\nCheck=function(str)\n    local len = string.len(str);\n    local pp = 0\n    for i =1,len do\n        local bi = string.byte(str, i);\n        pp = bit:_and(bit:_xor(bi,pp) , 0xff)\n    end\n    local p0 = bit:_rshift(bit:_and(pp,0xf0),4)\n    local p1 = bit:_and(pp,0x0f)\n    return p0,p1\nend \n\n--字符串ascii->字符\ntoStrHex=function(hex)\n  local len = string.len(hex)/2\n  local str = ''\n  for i =1,len do \n    local bi = iota.hexToByte(hex,i-1,'B')\n    local ascii =string.format("%c",bi)\n    str=str..ascii\n  end\n  return str\nend	INLINE	2020-09-29 09:32:22.401+08	2020-09-29 10:10:38.095+08	2020-09-29	\N
139b0dba-58fe-464a-9c25-dd5b6dfd6ca6	321	\N	11123	1.0	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	f	d04b9fa6-4ef6-47e9-9604-ed752f9d5281	Lua	12343434343	INLINE	2020-06-08 10:12:35.733+08	2020-06-08 10:12:35.733+08	2020-06-08	\N
0bb6a5c8-bf18-41c3-97f1-50e844da6de1	chyk_0605	\N		1.0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	f	90ad19c6-6e6b-44e7-b1b8-aa02bf7183e0	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('chya_0605 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('chya_0605 device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('chya_0605设备模块通道接口获取m=%s', moduleNo)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('chya_0605设备模块通道属性获取m=%s', moduleNo)\n    end\n\tlocal request_asciiStr = '?'\n\tbuff = toHexStr(request_asciiStr)\n    buff = buff .. moduleNo .. '574199'\n    buff = iota.appendHexByte(buff, 0x0d, endian)\n    buff = iota.appendHexByte(buff, 0x0a, endian)\n\n\t--ctx:asend(buff)\n    ok, resp = ctx:ssend(buff, 50000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp)\n    if ErrorCode then\n\t    local dateTimeStr=string.sub(resp,5,18)\n\t\tlog.debug("chya_0605 dateTimeStr是:%s",dateTimeStr)\n\t\tlocal timenow = timeTounixtimestamp(dateTimeStr)\n        log.debug('chya_0605 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('chya_0605 child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\tif allSubData[channelNo]~=nil then\n                \tlog.debug('chya_0605    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo,timenow) ---插入数据\n                \ttable.insert(out.data, result)\n            \tend\n            end\n        end\n    else\n        log.debug('chya_0605 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('chya_0605 ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('chya_0605  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 19, -6)\n\tlog.debug('chya_0605  subDataArea=%s',subDataArea)\n    local dataCount = string.len(subDataArea) / 14\n    for i = 1, dataCount do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 14 + 1, (i - 1) * 14 + 14)\n        local channelStr = string.sub(singleChannelDataHex, 1, 2)\n        local subChannel = tonumber(channelStr,16)\n        local subData = string.sub(singleChannelDataHex, 3, 6)\n        DataList[subChannel] = iota.hexToShort(subData, 0, 'B')/10\n    \tlog.debug('chya_0605  getAllDatas  DataList[%s]=%s',subChannel,DataList[subChannel])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr,timenow)\n    log.debug('chya_0605 datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    log.debug('chya_0605 通道%s的频率是%s',subChannelId ,freq )\n    if childDevice ~= nil then\n        if childDevice.uplink.capabilities[1].formula.metaid == '9f84b4f7-7860-47a6-9dc9-f066fb873dff' then --振弦公式\n            local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n      local Aj = tonumber(childDevice.uplink.capabilities[1].formula.props.Aj)\n\t\t\n\n            log.debug('chya_0605 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and freq ~= nil  then\n                Phy = k * (freq ^ 2 - f0 ^ 2) /Aj\n            end\n        end\n        log.debug('chya_0605 freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t   \n                frequency= tonumber(string.format('%0.1f',freq)),\n          physicalvalue= tonumber(string.format('%0.5f',Phy))\n\t\t\t\t\n            },\n            device = childDevice.id,\n            type = 1,\n\t\t\ttime=timenow\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('chya_0605 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('chya_0605 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata)\n    log.debug('chya_0605 开始校验数据=%s', checkdata)\n\n    local hexHeader = iota.hexToByte(checkdata, 0, 'B')\n    if hexHeader ~= 0x47 then\n        ercode = 1001\n        erormsg = 'HexCMD  False'\n        log.debug('chya_0605 HexCMDFalse[%s]', hexHeader)\n        return false\n    end\n    return true\n    --crc\nend\n\n--字符串 -> HEX字符串\ntoHexStr = function(str)\n    local len = string.len(str)\n    local hex = ''\n    for i = 1, len do\n        local bi = string.byte(str, i)\n        hex = hex .. string.format('%02X', bi)\n    end\n    return hex\nend\ntimeTounixtimestamp=function(dateTimeStr)\n\tlog.debug("chya_0605 进入时间解析")\n\tlocal year_a=string.sub(dateTimeStr,1,4)\n    log.debug("chya_0605 year_a是:%s",year_a)\n\tlocal month_a=string.sub(dateTimeStr,5,6)\n\t\n\tlocal day_a=string.sub(dateTimeStr,7,8)\n\n\tlocal hour_a=string.sub(dateTimeStr,9,10)\n\n\tlocal minute_a=string.sub(dateTimeStr,11,12)\n\t\n\tlocal second_a=string.sub(dateTimeStr,13,14)\n\n    \n\n    local year = tonumber(year_a)\n\tlog.debug("chya_0605 year是:%s",year)\n\tlocal month = tonumber(month_a)\n\tlog.debug("chya_0605 month是:%s",month)\n    local day = tonumber(day_a)\n\tlog.debug("chya_0605 day是:%s",day)\n    local hour = tonumber(hour_a)\n\tlog.debug("chya_0605 hour是:%s",hour)\n\tlocal minute = tonumber(minute_a)\n\tlog.debug("chya_0605 minute是:%s",minute)\n    local second = tonumber(second_a)\n\tlog.debug("chya_0605 second是:%s",second)\n    \n    timenum=os.time({year = year, month = month,day = day, hour = hour, min = minute, sec = second})\n\tlocal recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n\tlog.debug("chya_0605 recordTime是:%s",recordTime)\n\treturn recordTime\nend\n	INLINE	2020-06-05 15:01:36.65+08	2020-12-11 15:57:58.592+08	2020-06-05	\N
e55f6c54-15a7-4a8e-ac30-a89edfe3d818	szwygc_DCS4	\N		1.0	38913139-1273-4b5a-9155-e4aff0fc89ee	38913139-1273-4b5a-9155-e4aff0fc89ee	f	38913139-1273-4b5a-9155-e4aff0fc89ee	Lua	--字符串ascii->字符\nstart=function()\n    --log.debug("szwygc_DCS4: start module %s, ", json.encode(device.uplink.props.module))\nend\n\nonData=function(hex)\n    --log.debug("szwygc_DCS4: Data=%s",hex)\n\t--全局\n    out={\n        data ={},\n        result = {},\n\t\ttype=2\n    }\n\n    local sData= HextoStr(hex)\n    log.debug("szwygc_DCS4: sData=%s",sData)\n    local spliteData = Split(sData,';')\n\tlocal moduleData = Split(spliteData[3],':') \n\n\tlocal moduleNo = moduleData[2]--模块号\n\n\tlocal spliteData1 = Split(sData,'START;')\n    local spliteData2 = Split(spliteData1[2],';END')\n\t\n    local spliteData3 = Split(spliteData2[1],';')\n\t \n\t local arrlength=table.getn(spliteData3)\n\t \n\t --log.debug("szwygc_DCS4: spliteData3=%s",json.encode(spliteData3))\n\t \n\t \n\tfor k, v in pairs(spliteData3) do\n\t\t--log.debug("szwygc_DCS4: k=%s,v=%s",k,v)\n\t\tlocal Phy\n\t\tlocal allData=Split(v,':')\n\t\tlocal type_sensor=string.sub(allData[1],1,2)\n\t\tlog.debug("szwygc_DCS4: type_sensor=%s v=%s",type_sensor,v)\n\t\tlocal type_param=string.sub(allData[1],4,5)\n\t \n\t\t\n\t\tif type_sensor=='ZX' and type_param == 'SZ' then \n\t\t\tlocal fre\n\t\t\tlocal temp\n\n\t\t\tfre = Split(spliteData3[k],':')\t\n\t\t\tlocal frequency=tonumber(fre[2])\n\t\t\tlocal channelNo=tonumber(string.sub(fre[1],6,-1))   \n\t\t\ttemp = Split(spliteData3[k+1],':')\n\t\t\tlocal temperature=tonumber(temp[2])\t\t\t\t\t\n\t\t\tlocal childDevice = getDeviceInfos(moduleNo,channelNo)\t\n         log.debug('szwygc_DCS4  childDevice=%s',json.encode(childDevice))  \n\n\t\t\tif\tchildDevice~=nil  then\n\t\t\t\tdeviceId=childDevice.id\n\t\t\t\tlocal K = childDevice.uplink.capabilities[1].formula.props.K\n\t\t\t\t\t\t\t\n\t\t\t\tlocal F0 = childDevice.uplink.capabilities[1].formula.props.F0\n\t\t\t\tlocal Aj = childDevice.uplink.capabilities[1].formula.props.Aj\n\t\t\t\t--local T0 = childDevice.uplink.capabilities[1].formula.props.T0\n\t\t\t\tif K ==nil or F0==nil then\n\t\t\t\t\tPhy=nil\n\t\t\t\t\t\t\t\t\n\t\t\t\telse\n\t\t\t\t\tPhy=K*(frequency^2 - F0^2)/Aj\n\t\t\t\tend            \n\t\t\t\n\t\t\t\tlocal data1 = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\tfrequency=frequency,\n\t\t\t\t\t\n\t\t\t\t\t\tphysicalvalue=Phy\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=deviceId,\n\t\t\t\t\t\t\ttype=1                       \n\t\t\t\t}\n\t\t\t\ttable.insert(out.data,data1)\n\t\t\t\t--log.debug("szwygc_DCS4:(振弦) out=%s",json.encode(out))\n\t\t\telse\n\t\t\t\t--log.debug('szwygc_DCS4  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\t\t\n\t\t\tend\n\t\telseif type_sensor=='ZX' and type_param == 'ZZ' then\n\t\n\n\n\t\telseif  type_sensor=='CX' then\n\t\t\t--log.debug('szwygc_DCS4  Step into CX')\n\t\t\tlocal cexie=Split(spliteData3[arrlength],':')\n\t        local cexieData=Split(cexie[2],',')\n\t\t\t--log.debug('szwygc_DCS4   cexieData=%s', json.encode(cexieData))\n\t\t\tfor kk, vv in pairs(cexieData) do\n\t\t\t\t--log.debug('szwygc_DCS4   模块号=%s,通道号=%s', moduleNo, kk)\n\t\t\t\tlocal childDevice = getDeviceInfos(moduleNo, kk+4)\n\t\t\t\tphysicalvalue = vv\n\t\t\t\t--log.debug('szwygc_DCS4   测斜physicalvalue=%s,通道号=%s', physicalvalue, kk)\n\t\t\t\tlocal deviceId\n\t\t\t\tif childDevice ~= nil then\n\t\t\t\t\tdeviceId = childDevice.id\n\t\t\t\t\t--log.debug('szwygc_DCS4:子设备原形childDevice=%s', json.encode(childDevice))\n\n           \n                    local data1 = {\n                        data = {\n                           physicalvalue=physicalvalue\n                        },\n                        device = deviceId,\n                        type = 1\n                    }\n                    table.insert(out.data, data1)\n               \n               \n\t\t\t\telse\n\t\t\t\t\tlog.debug('szwygc_DCS4  子设备 m=%s,c=%s deviceId为nil',tostring(moduleNoStr), tostring(k))\n\t\t\t\tend\n\t\t\tend\n\t    end \n\tend \n\n    local resultData =json.encode(out)    --输出传递到平台上\n    log.debug("szwygc_DCS4: result=%s",json.encode(out))\n    ctx:notify(resultData)\n\tlocal returnTime=device.props.returnTime\n\tlocal unitType=device.props.unitType\n\tlocal ceMoudle=device.props.ceMoudle\n  \tlocal cmd ='$SOUTH$;ZX_HC:' .. returnTime .. ';CX_LX:' .. unitType .. ';CX_SN:' .. ceMoudle .. ';END'\n\t--log.debug("szwygc_DCS4: cmd=%s",cmd)\n\tctx:asend(toHexStr(cmd))\nend\n\n--字符串 -> HEX字符串\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend\n\n--字符串ascii->字符\nHextoStr = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n--string split函数   分割相应的字符\nSplit=function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n       local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n       if not nFindLastIndex then\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n        break\n       end\n       nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n       nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n       nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\ngetDeviceInfos=function(moduleNoId,channelNoId)\n    if device.dnlinks[1].devices ~=nil then\n    \tfor index,child in pairs(device.dnlinks[1].devices) do\n\t\t\t local moduleStrCheck\n\t\t\t local channelStrCheck\n\t\t\t if json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleStrCheck=child.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\tchannelStrCheck=child.uplink.props.channel\n\t\t\telse\n\t\t\t   moduleStrCheck=child.props.moduleId\n\t\t\t   channelStrCheck=child.props.channelId \n\t\t\tend\n\t\t\tif tonumber(channelStrCheck) == tonumber(channelNoId) then\n                    return child\n\t\t\tend\n           \t\n\t\tend\n    else\n    log.debug("szwygc_DCS4:  subdevices是nil")\n    return nil\n    end\nend\n\n	INLINE	2020-06-12 09:22:47.278+08	2020-06-15 10:09:34.234+08	2020-06-12	\N
778be798-daba-48ac-acb5-7107c728189c	tjhttp_qj	\N		1.0	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	f	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	Lua	\nstart = function()\n    log.debug('tjhttp_qj   device=%s', json.encode(device))\n\tlog.debug('tjhttp_qj   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('tjhttp_qj', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('tjhttp_qj [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\tlocal timenow=unixtimestamp (timeStamps)\n\tlocal sensorid=bodypkg['id']\n    \tlocal anglex=bodypkg['data']\n\tlocal angley=bodypkg['data1']\n\tlog.debug('tjhttp_qj 得到所有数据%s ', json.encode(allData))\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n\tout={\n      data={\n\t anglex=anglex,\n\t angley=angley\n      },\n\t time=timenow\n\t}\n\tend\n\n \n        log.debug('tjhttp_qj [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,6,7))\n    local day = tonumber(string.sub(datestr,9,10))\n    local hour = tonumber(string.sub(datestr,12,13))\n    local minute = tonumber(string.sub(datestr,15,16))\n    local second = tonumber(string.sub(datestr,18,19))\n    --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT14301 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT14301 recordTime=%s",recordTime)\n    return recordTime\nend	INLINE	2020-12-11 08:58:10.076+08	2020-12-12 13:55:13.804+08	2020-12-11	\N
32333345-3fd9-4150-8f8e-27418047f280	td_http	\N		1.0	256d53e2-0a91-4903-9753-736649588b98	256d53e2-0a91-4903-9753-736649588b98	f	256d53e2-0a91-4903-9753-736649588b98	Lua	start = function()\n    log.debug('td_http 设备原型=%s' ,json.encode(device))\n    local req = {\n        type = 'http',\n        url = 'http://gtd.vp.cn/dataChart/queryShareDataList.do?username=%s&password=%s&idType=0&dataType=0&startTime=%s&endTime=%s&idCode=%s', \n        method = 'post',\n\n    }\n\treq.ContentType = 'application/json'\n\t\n    local moduleNo=device.props.moduleNo\n\tlog.debug('td_http moduleNo=%s', moduleNo)\n\t\n\tlocal username=device.props.username\n\tlocal password=device.props.password\n\n\n\tlocal aa=os.time()\n\tlocal endTime = os.date('%Y-%m-%d%20%H:%M:%S', aa)\n    log.debug('td_http:  endTime=%s', endTime)\n    local beginTimestr = aa-4200\n\tlocal startTime = os.date('%Y-%m-%d%20%H:%M:%S', beginTimestr)\n    log.debug('td_http:  startTime=%s', startTime)\n\t\n\t\n    req.url=string.format(req.url,username,password,startTime,endTime,moduleNo)\n\tlog.debug('td_http url=%s', req.url)\n  \n    local ok, ack = ctx:ssend(req, 4000)\n\n    if ack == nil then\n        log.debug('td_http:  ok=%s', ok)\n    else\n        log.debug('td_http:  ok=%s,token=%s', ok, ack.body)\n    end\n    local out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    if not ok or ack == nil then\n        out.result = {\n            code = 1002,\n            msg = 'timeout'\n        }\n    else --OK\n        if ack.code == 200 and ack.body ~= '' then -- http应答\n            local dataTable = json.decode(ack.body)\n       \n            log.debug('td_http ack=%s', ack.body)\n            local dataList=dataTable.dataList\n\t\t\tfor k, v in pairs(dataList) do\n\t\t\t\tlocal channelNo=tonumber(string.sub(v.paraId,21,24),16)\n\t\t\t\tlocal sensortype=tonumber(string.sub(v.paraId,25,28),16)\n       local serialnum=tonumber(string.sub(v.paraId,29,32),16)\n\t\t\t\tlocal timenow=unixtimestamp(v.collectTime)\n              \n\t\t\t\tlocal paraValue=tonumber(v.paraValue)\n\t\t\t\t\n\t\t\t\t\t\tlocal childDevice = getDeviceInfo(moduleNo, channelNo,sensortype,serialnum)\n                        --\n                        if childDevice ~= nil then\n                      \n                      \n                             \n                                local data1 = {\n                                    data = {\n                                        physicalvalue = tonumber(paraValue)\n                                    },\n                                    device = childDevice.id,\n                                    time = timenow,\n                                    type = 1\n                                }\n                                table.insert(out.data, data1)\n                            \n\t\t\t\t\t\t\t\n\t\t\t\t\t\tend \n\n                        log.debug('td_http  moudleid=%s data:%s', device.props.pointId, json.encode(out))\n            end\n\n        else\n            log.debug('td_http:  request data error:%s body:%s', ack.code, ack.body)\n        end\n    end\n    ctx:done(json.encode(out))\nend\n\nSleep = function(n)\n    local t0 = os.clock()\n    while os.clock() - t0 <= n do\n    end\nend\nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,6,7))\n    local day = tonumber(string.sub(datestr,9,10))\n    local hour = tonumber(string.sub(datestr,12,13))\n    local minute = tonumber(string.sub(datestr,15,16))\n    local second = tonumber(string.sub(datestr,17,18))\n    --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT14301 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT14301 recordTime=%s",recordTime)\n    return recordTime\nend\n--获取采集仪下面的通道信息\ngetDeviceInfo = function(moduleNoId, channelNoId,sensortype,serialnum)\n    if device.dnlinks[1].devices ~= nil then\n        --log.debug("td_http 查询m=%s c=%s 子设备deviceId",tostring(moduleNoId),tostring(channelNoId))\n        for index, child in pairs(device.dnlinks[1].devices) do\n            -- log.debug("td_http:查询m=%s c=%s子设备 是否匹配设备child=%s",tostring(moduleNoId),tostring(channelNoId),json.encode(child))\n            local moduleStrCheck\n            local channelStrCheck\n\t\t\tlocal sensortypestr\n            local serialnumstr\n\n            moduleStrCheck = child.uplink.props.module --模块 通道 优先接口获取\n            channelStrCheck = child.uplink.props.channel\n\t\t\tsensortypestr=child.uplink.props.sensortype\n            serialnumstr=child.uplink.props.serialnum\n            --log.debug('td_http 子设备模块通道 接口获取 m=%s,c=%s ', moduleStrCheck, channelStrCheck)\n\n            if tonumber(moduleStrCheck) == tonumber(moduleNoId) and tonumber(channelStrCheck) == tonumber(channelNoId) and tonumber(sensortypestr) == tonumber(sensortype) and tonumber(serialnumstr) == tonumber(serialnum) then\n                log.debug('td_http:  m=%s  匹配到 子设备原形child=%s', moduleNoId, channelNoId, json.encode(child))\n                return child\n            end\n        end\n    else\n        log.debug('td_http:  subdevices是nil')\n        return nil\n    end\nend\n\n	INLINE	2020-12-31 13:37:23.227+08	2021-01-06 13:18:52.415+08	2020-12-31	\N
864fa409-f305-4965-87cf-3465fe026979	cdaj_lxwy	\N		1.0	8d49238d-6e0e-421c-adaf-f7472ec0b50e	8d49238d-6e0e-421c-adaf-f7472ec0b50e	f	8d49238d-6e0e-421c-adaf-f7472ec0b50e	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \nstart=function()\n    log.debug("start %s, ctx=", "anXin_laser_9514.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''--采集数据命令\n\tbuff=iota.appendHexByte(buff, device.uplink.props.module, endian) \n    buff=iota.appendHexByte(buff, 0x03, endian)                 \n    buff=iota.appendHexByte(buff, 0x00, endian)\n    buff=iota.appendHexByte(buff, 0xaa, endian)\n    buff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)   \n\t \n\n   \n    ok,resp=ctx:ssend(buff,4000)\n\n    local result="{}"\n    if ok then\n\t\n\t\t\tresult = unmarshall(resp)\n\t\n\n    end\n    ctx:done(result)\nend\n\nunmarshall=function(hex)\n    --print("LUA: Unmarshall: data is ", hex)\n    -- var_dump(ctx,3,"")\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\t\n\n    if (string.len(hex)==18) then\n        local length = iota.hexToFloat(hex,3,'L')\n\t\t\t\n        out.data = {\n            length=length\n        }\n       \n    else\n        local message = 'Invalid Msg, len='\n        out.result = {code=1001,msg=message}\n        out.data = {}\n    end\n    return json.encode(out)\nend\n \n\n\n \n\n	INLINE	2020-08-18 08:54:29.899+08	2020-08-18 09:01:06.837+08	2020-08-18	\N
3aae5959-6db3-4c8b-8017-95c853c8a965	jxzy_gas_1104	\N	江西制药 手提式多合一通讯协议 NH3 C2H5OH VOC PM	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--F:\\SVN\\202005项目\\江西制药\\手提式多合一通信协议-山盾科技20200522（NH3 C2H5OH VOC PM）.doc\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "jxzy_gas_1104", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\t\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x00, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x0c, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("jxzy_gas_1104 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030000045cf\n--010318000000003dccd46b3effff1a3f806b693f1999253f800016a1db\n \n\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local NH3 = iota.hexToFloat(hex,3,'B')   --氨气\n        local C2H5OH = iota.hexToFloat(hex,7,'B')  --乙醇\n\t\tlocal VOC = iota.hexToFloat(hex,11,'B')  --挥发性有机化合物\n\t\tlocal OU = iota.hexToFloat(hex,15,'B')  --臭气\n\t\tlocal PM10 = iota.hexToFloat(hex,19,'B')  --pm10\n\t\tlocal PM25 = iota.hexToFloat(hex,23,'B')  --pm2.5\n       \n        out.data = {\n\t\t\tNH3=tonumber(string.format('%0.2f',NH3)),\n\t\t\tC2H5OH=tonumber(string.format('%0.2f',C2H5OH)),\n\t\t\tVOC=tonumber(string.format('%0.2f',VOC)),\n\t\t\tOU=tonumber(string.format('%0.2f',OU)),\n\t\t\tPM10=tonumber(string.format('%0.2f',PM10)),\n\t\t\tPM25=tonumber(string.format('%0.2f',PM25))\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('jxzy_gas_1104 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 29 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('jxzy_gas_1104 数据校验通过')\n    return true\n--crc\nend	INLINE	2020-05-28 10:43:30.669+08	2020-06-05 15:07:22.736+08	2020-05-28	\N
71fdedfb-633e-47df-b552-16c71d98a38e	tt	\N	校验协议，测试用的	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start=function()\nlocal hex='514e3d32303230303432303230353233393930313b53543d32313b434e3d323036313b50573d3132333435363b4d4e3d6e63786e6863643b466c61673d393b43503d26264461746154696d653d32303230303432303230303030303b7732313031312d4176673d302e303430342c7732313031312d466c61673d4e2626'\nlocal re=checkCRC16_ANSI(hex)\nlog.debug("tt_ansi  计算结果8201==%s",re)\n  \n  local out={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}   \n  out.data.crc=re\n\t  ctx:done(json.encode(out))\n end\n\nfunction checkCRC16_ANSI(buff)\n    local len=string.len(buff)/2\n    local crc16=0xffff\n    for i = 1, len, 1 do\n         crc16=math.modf(crc16/256)\n         local buff_i_str=string.sub(buff,2*i-1,2*i)\n         local buff_i=tonumber(buff_i_str,16)\n         crc16=bit.bxor(crc16, buff_i)\n         for j = 1, 8, 1 do\n            local byte_bit=crc16%2\n             if byte_bit==1 then\n                crc16=bit.bxor(math.modf(crc16/2), 0xa001)\n            else\n                crc16=math.modf(crc16/2)\n            end\n         end\n\n\n    end\n    return string.format("%04x",crc16)\nend	INLINE	2020-04-21 23:54:00.263+08	2020-06-09 08:58:58.08+08	2020-04-21	\N
04e02398-2db0-408b-80c3-399c705ceed7	shxb_laser_9555	\N		1.0	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	f	9ea59fd2-e55b-4853-a447-0911d3b8b8dd	Lua	--// \nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "shxb_laser_9555", device.moduleId or "[nil]")\n    local endian = 'B'\n    local buff=''\n    local errout={\n        data ={},\n        result = {}\n    }\t\n\t\n\t\n\t\tlocal moduleNo\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\tlog.debug("shxb_laser_9555 设备模块通道 接口获取 m=%s  json.encode(moduleNo)=%s ",moduleNo,json.encode(moduleNo))\n        buff=iota.appendHexByte(buff, moduleNo, endian) -- 模块号\n        buff=iota.appendHexByte(buff, 0x03, endian)            \n        buff=iota.appendHexByte(buff, 0x00, endian)  \n        buff=iota.appendHexByte(buff, 0x94, endian)\n        buff=iota.appendHexByte(buff, 0x00, endian)\t\t\n        buff=iota.appendHexByte(buff, 0x02, endian)\t\t\n        buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC16\n        ok,resp=ctx:ssend(buff,15000)\n        local result='{}'\n        if ok then\n            result = unmarshall(resp,moduleNo)\n        else\n            log.debug("shxb_laser_9555 SSend error!")\n        end\n        ctx:done(result)\nend\n\n--01030400000B10FCCF\n--moduleId=1   \n--2.832\n\nunmarshall=function(hex,moduleStr)\n    local out={\n        data ={},\n        result = {}\n    }\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then     \n \n        local length = iota.hexToUInt(hex,3,'B')/10000.0\n        \n       \n        out.data = {\n      physicalvalue= tonumber(string.format('%0.4f',length))\n\t\t\t--physicalvalue\t=length\n        }\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleStrCheck)\n    log.debug('shxb_laser_9555 开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 9 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleStrCheck)~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n\tif iota.hexToUInt(data,3,'B') == 0xffffffff then\n        errcode = 1001\n        errormsg = '采样错误' \n        return false\n    end\n\t\n    log.debug('shxb_laser_9555 数据校验通过')\n    return true\n--crc\nend\n\n\n\t\n   \n	INLINE	2018-06-07 14:15:36.077+08	2020-06-22 14:45:25.617+08	2018-06-07	\N
62fa51b4-81bf-46a7-9c06-607eb1b34f3d	fs-gnss	\N	GNSS	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--[[\n测试数据\n{\n  "type":"http",\n  "code":200,\n  "body":"{\\"data\\":[{\\"pointId\\":8005,\\"recordTime\\":1516101950000,\\"x\\":2498030.7828,\\"y\\":506126.4067,\\"z\\":90.6906},{\\"pointId\\":8005,\\"recordTime\\":1516147175000,\\"x\\":2498030.7607,\\"y\\":506126.3922,\\"z\\":90.7774}]}"\n}\n]]--\nstart=function()\n    --log.debug("fs_gnss start moudleid=%s", device.props.pointId or "nil")\n    --local apiname="findmm.record.queryByPointId"\n\tlocal req = {\n        type= "http",\n        url=device.uplink.props.url.."%s/data?startTime=%s&endTime=%s",\n    \t--url="http://218.3.150.108:7003/gnss/%s/data?startTime=%s&endTime=%s",   \n    \tmethod="get",\n    \tcontent="text/html",\n        header={},\n    }\n    local param={\n      pointId= tonumber(device.props.pointId),\n      pageNo=1,  \n      pageSize=1, \n    }\n    local beginTime=tostring(stringToTime(device.props.beginTime)*1000)\n    local r1,ok = redis.get(device.id.."_endTime")\n    if ok and r1~=nil then\n        beginTime=r1 -- 1200000\n    end\n    local endTime=os.time()*1000\n\n    req.url=string.format(req.url,device.props.pointId,beginTime,endTime)\n    --log.debug("fs_gnss   moudleid=%s request url=%s",device.props.pointId,req.url)\n \n    local ok,ack=ctx:ssend(req,4000)\n\n    if ack==nil then\n        log.debug("fs_gnss   moudleid=%s result=%s,ack= nil",device.props.pointId,ok)\n    else\n        log.debug("fs_gnss   moudleid=%s result=%s,ack=%s",device.props.pointId,ok,json.encode(ack))\n    end\n\n    local out={\n        type = 2,\n        data ={},\n        result = {}\n    }\n    if not ok or ack==nil then\n            out.result={\n            code=1002,\n            msg="timeout",\n        }\n    else --OK\n        if ack.code==200 and ack.body ~="" then -- http应答\n            qx=json.decode(ack.body)  -- 有数据\n            --log.debug("fs_gnss ack=%s",ack.body)\n            local items = #qx.data or 0\n            --log.debug("fs_gnss totalItems=%d", items)\n\t\t\tlocal data1 ={}\n            if items > 0 then\n                for i=1,items,1 do\n                    local item= qx.data[i]\n                    data1 = {\n                        data={\n                            x=item.x*1000 or 0,\n                            y=item.y*1000 or 0,\n                            z=item.z*1000 or 0,\n                        },\n                        device=device.id,\n            \t\t\ttime=os.date("%Y-%m-%dT%H:%M:%S+08:00",(tonumber(item.recordTime)/1000)),\n                        type=1                       \n                    };                       \n                    table.insert(out.data,data1)\n\t\t\t\t\t--log.debug("fs_gnss moudleid=%s set beginTime = %s , endtime = %s",device.props.pointId,beginTime,item.recordTime)\n\t\t\t\t\tif tonumber(beginTime) < tonumber(item.recordTime) then\n\t\t\t\t\t\tbeginTime = item.recordTime\n\t\t\t\t\t\t--log.debug("fs_gnss moudleid=%s Replace beginTime = %s ",device.props.pointId,beginTime)\n\t\t\t\t\tend\n                end\n\t\t\t\t\n                log.debug("fs_gnss    moudleid=%s out:%s",device.props.pointId,json.encode(out))\n\t\t\t\t--log.debug("fs_gnss moudleid=%s set lasttime ok  key=%s,value=%s",device.props.pointId,device.id.."_endTime",beginTime)\n\t\t\t\tif redis.set(device.id.."_endTime", tostring(beginTime))   then\n\t\t\t\t\tlog.debug("fs_gnss moudleid=%s redis set beginTime = %s ",device.props.pointId,tostring(beginTime))\n\t\t\t\tend\n\t\t\t\t\n\t\t\t\t--log.debug("fs_gnss  step redis  moudleid=%s ",device.props.pointId)\n\t\t\t\tlocal disport = device.props.disport\n\t\t\t\tlog.debug("fs_gnss ack disport=%s",disport)\n\n\t\t\t\tif disport~=nil then\n\t\t\t\t\t-------上报江西地灾平台-------\n\t\t\t\t\tlocal title= "L1_GP_1"\n\t\t\t\t\tlocal req = {\n\t\t\t\t\t\t\ttype= "http",\n\t\t\t\t\t\t\turl="http://171.34.52.5:10021/api/devices/datapoints?type=1",\n\t\t\t\t\t\t\tmethod="post",\n\t\t\t\t\t\t\tContentType="application/json",\n\t\t\t\t\t\t\theader={},\n\t\t\t\t\t\t}\n\t\t\t\t\tlocal x = data1.data.x or 0\n\t\t\t\t\tlocal y = data1.data.y or 0\n\t\t\t\t\tlocal z = data1.data.z or 0\n\t\t\t\t\tlog.debug("fs_gnss    x=%s y :%s z %s",x,y,z)\n\t\t\t\t\tlocal bodystr = '{"'..disport..'":{"'..title..'":"'..tostring(x)..','..tostring(y)..','..tostring(z)..'"}}'\n\t\t\t\t\t--log.debug("fs_gnss bodystr :%s",bodystr)\n\t\t\t\t\tlocal apikey = device.props.password\n\t\t\t\t\tbodystr = '{"deviceId":"'..disport..'","apikey":"'..apikey..'","data":'..bodystr..'}'\n\t\t\t\t\tlog.debug("fs_gnss bodystr2 :%s",bodystr)\n\t\t\t\t\treq.body = bodystr\n\t\t\t\t\tlocal ok,ack=ctx:ssend(req,4000)\n\t\t\t\t\tlog.debug("fs_gnss ack disaster=%s",ack.body)\n\t\t\t\tend\n\t\t\t\tctx:done(json.encode(out))\n            else\n                log.debug("fs_gnss    moudleid=%s has not new data",device.props.pointId)\n            end\n        else\n            log.debug("fs_gnss    moudleid=%s request data error:%s body:%s",device.props.pointId,ack.code,ack.body)            \n        end\n    end\nend\n \nstringToTime=function( timeString )  --yyyyMMddHHmmss   to   时间戳\n    local yyyy = tonumber(string.sub(timeString , 1, 4)) \n    local MM = tonumber(string.sub(timeString , 5, 6))  \n    local DD = tonumber(string.sub(timeString , 7, 8))\n    local HH = tonumber(string.sub(timeString , 9, 10))\n    local mm = tonumber(string.sub(timeString , 11, 12))\n    local ss = tonumber(string.sub(timeString , 13, 14))\n    return  os.time({year = yyyy, month = MM, day =DD, hour =HH, min =mm, sec = ss})  \nend \n\n	INLINE	2018-03-05 11:51:31.783+08	2021-02-19 16:58:07.136+08	2018-03-05	\N
213fe261-1b26-496d-adb3-4f84b6f2852c	fs_trwsd_1166	\N	套牌 深圳欧速电子	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//201806项目\\OSA-2W 土壤温湿度传感器.pdf\nstart=function()\n \tlocal endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n    buff=iota.appendHexWord(buff, 0 ,endian)               -- 2: 温湿度\n\tbuff=iota.appendHexWord(buff, 2 ,endian)               -- 2:寄存器个数\n\tbuff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        log.debug(string.format("fs_trwsd_1166  out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    ctx:done(result)\nend\n\n\n--02030400ef0087b8a4\n--"humidity": 13.5,\n--"temperature": 23.9\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n    \tlocal Temp= iota.hexToShort(hex,3,'B')/10\n        local humidy = iota.hexToShort(hex,5,'B')/10\n            \n        out.data = {\n            temperature=Temp,\n           \thumidity = humidy\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('fs_trwsd_1166 开始校验数据 %s',data)\n    if data == nil or string.len(data)/2~=9 then\n        errormsg = string.gormat('Data is nil or invalid length=[%s]',string.len(data))\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tonumber(moduleNo_check) ~= tonumber(string.sub(data,1,2)) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('fs_trwsd_1166  数据校验通过')\n    return true\n--crc\nend\n\nonData=function()\nend	INLINE	2020-06-10 13:39:40.858+08	2020-08-06 13:40:47.643+08	2020-06-10	\N
f6592048-0f23-403e-ae55-9f80fb9155e2	shzr_621	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--‪D:\\SVN\\201812项目\\20181221新增项目资料\\3 东北大学弓长岭露天矿--林邦杰\\水准仪协议说明书V1.2-2.pdf\nstart=function()\n    log.debug("start %s, ctx=%s", "shzr_621.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 4, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 0, endian) \n    buff=iota.appendHexByte(buff, 4, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("shzr_621,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '采集超时'}      \n\t  log.debug("shzr_621  m=%s, ok is false",moduleNo)\n\t  ctx:done(json.encode(errout))\n\tend\nend\n--020400000004f1fa\n--02040842C8000041C8000072AE\n--"pressure": 100\n--temperature:25\nunmarshall=function(hex,moduleNoStr)\n    log.debug("shzr_621 m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        local pressure =iota.hexToFloat(hex,3,'B')\n\t\tlocal temperature =iota.hexToFloat(hex,7,'B');\n        out.data = {           \n            pressure=string.format("%0.3f",pressure),\n\t\t\ttemperature=string.format("%0.2f",temperature)\n        };\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("shzr_621 m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n    if data == nil or string.len(data)/2 ~= 13 then\n        errormsg = string.format('无效的数据长度=%s≠%s',string.len(data)/2,13)\n        errcode = 1001\n        return false\n    end\n   \n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1004\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2020-08-21 10:27:33.36+08	2020-08-21 10:27:33.36+08	2020-08-21	\N
d35f3584-07e6-467e-8226-709572429d2d	fs_laser_9509	\N	Modbus统一通信协议-激光	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	--//02 协议分析/2017-01/ModBus统一通信协议.xls\nstart=function()\n\tlog.debug("load script %s, moduleId=%s", "fs_laser_9509", device.uplink.props.module or "[nil]")\n    local endian = 'B'\n    local buff=''\n    buff=iota.appendHexWord(buff, 0x02, endian)             \t\n  \tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("fs_laser_9509 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("fs_laser_9509 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n \t-- local moduleNo=device.props.moduleId or device.uplink.props.module\n\tlog.debug("fs_laser_9509 moduleNo=%s  接口module=%s,属性moduleId=%s",moduleNo,device.uplink.props.module,device.props.moduleId)\n    buff=iota.appendHexWord(buff,moduleNo, endian)  -- 2: 模块号\n    buff=iota.appendHexByte(buff, 1, endian)             \t-- 3: 指令: 0x01 = 采集\n\tbuff=iota.appendHexByte(buff, 0x2E, endian)                -- 4: 指令: 是否加热，设置量程等  目前设置为0\n    buff=iota.appendHexCrc(buff, endian ,0)               \t-- 5: CRC\n\n    ok,resp=ctx:ssend(buff,60000)\n     log.debug('fs_laser_9509:发送数据=%s',buff)\n    local result='{}'\n    if ok then\n       result = unmarshall(resp,moduleNo) \n    \tlog.debug('fs_laser_9509:接收数据=%s',resp)\n    else\n\t  log.debug('fs_laser_9509:数据采集失败')\n    end\n    ctx:done(result)\nend\n\n\n\n--0002042C812E003D947D8141C900009EF77809000000000000000004CA\n--module=1068\n--"distance": 0.073,\n--"temperature": 25.12\nunmarshall=function(hex,moduleStr)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n       \n        local  Distance = iota.hexToFloat(hex,7,'B',4);\n        local Temp = iota.hexToFloat(hex,11,'B',2);\n        out.data = {\n             distance =Distance,\n             length=Distance,--统一输出用\n            temperature=Temp\n        };\n\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n\nIsValid=function(data,moduleNo_check)\n    log.debug('fs_laser_9509:开始校验数据=%s',data)\n    if data == nil or string.len(data)/2 ~= 29 then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1002\n        return false\n    end\n   \n    if iota.hexToByte(data,4,'B') ~= 0x81 then\n        errcode = 1003\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n  \t local moduleNo_Data=tostring(iota.hexToShort(data,2,'B'))\n    if moduleNo_check ~= moduleNo_Data then\t\n        errormsg = string.format('数据的模块号与传感器不匹配%s[%s]',moduleNo_Data,moduleNo_check)\n        errcode = 1004\n        return false\n    end\n    log.debug('数据校验通过')\n    return true\n--crc\nend\n \n\n\n \n\n	INLINE	2018-01-26 16:18:31.368+08	2020-09-14 11:12:17.511+08	2018-01-26	\N
1f1ee91e-0fdf-4bed-a761-937743c6a82a	tidxhttp	\N		1.0	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	f	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	Lua	\nstart = function()\n    log.debug('tjhttp   device=%s', json.encode(device))\n\tlog.debug('tjhttp   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('tjhttp', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('tjhttp [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\n\tlocal sensorid=bodypkg['id']\n    local physicalvalue=bodypkg['data']\n\n\tlocal timenow=unixtimestamp (timeStamps)\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n   \n    \n    \n    \nout={\n      data={\n\tphysicalvalue\t=physicalvalue\t\n      },\n\t time=timenow\n\t}\n\tend\n\n \n        log.debug('tjhttp [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,6,7))\n    local day = tonumber(string.sub(datestr,9,10))\n    local hour = tonumber(string.sub(datestr,12,13))\n    local minute = tonumber(string.sub(datestr,15,16))\n    local second = tonumber(string.sub(datestr,18,19))\n    --log.debug("soilDT14301 year=%s,month=%s,day=%s,hour=%s,minute=%s,second=%s",year,month,day,hour,minute,second)\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT14301 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT14301 recordTime=%s",recordTime)\n    return recordTime\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2020-12-11 10:15:47.87+08	2020-12-12 14:00:38.72+08	2020-12-11	\N
ec25ae41-67c2-444f-966d-c5f90c23d25f	bst_gxwd	\N		1.0	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	f	dc9a58ac-add9-4e6b-8b9b-36a0b4866d47	Lua	--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\n--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   --设备信息\n        protocol=> {}  --协议信息\n        interface=> {} --接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n\nstart=function()\n\t--log.debug("start load  yx_1401 moudle = %s ",device.uplink.props.module)\n    log.debug("bst_gxwd alldevice = %s", json.encode(device))\n    local endian = 'B'\n    local buff=''\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    \n\tlocal subdevices=device.dnlinks[1].devices  --获取采集仪下子设备列表\n\tlog.debug("bst_gxwd  subdevices=%s,",json.encode(subdevices))\n\tif subdevices ~=nil then\n    \tfor index,child in pairs(subdevices) do \n      \t\tif json.encode(child.uplink.props) ~= 'null' then\n\t\t\t\tmoduleNo=tonumber(child.uplink.props.module) --模块 通道 优先接口获取\n\t\t\t\tchannelNo=tonumber(child.uplink.props.channelid)\n\t\t\t\tlog.debug("bst_gxwd 子设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),child.props.moduleId)\n\t\t\telse\n\t\t\t   moduleNo=child.props.moduleId\n\t\t\t   channelNo=child.props.channelId \n\t\t\t   log.debug("bst_gxwd 子设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(child.uplink.props))\n\t\t\tend\n\t\t\tlocal registersNum=\t\t\n\t\t\tlocal buff='1e0000000006'\t\t                 \n\t\t\tbuff=iota.appendHexByte(buff, channelNo, endian)             -- 2: 模块号\n\t\t\tbuff=iota.appendHexByte(buff, 0x04, endian)              -- 1: 指令: 0x01 = 采集\n\t\t             -- 1: 通道号\n\t\t\tbuff=iota.appendHexByte(buff, 0x03, endian)\n\t\t\tbuff=iota.appendHexByte(buff, 0xe8, endian)\n\t\t\tbuff=iota.appendHexWord(buff, endian ,0)\n\t\t\tok,resp=ctx:ssend(buff,15000)\n\t\t\t--log.debug("bst_gxwd module=%s,channel=%s [%s] ssend=[%s].",moduleNo,channelNo,child.id,buff)\n\t\t\tlocal result='{}'\n            if ok then  \n\t\t\t    result = unmarshall(resp,child,tostring(moduleNo),tostring(channelNo))--解析单条数据\n\t\t\t    table.insert(out.data,result)\n\t\t\t\t--log.debug("bst_gxwd out=%s ",json.encode(out))\n\t\t\telse\n                local errorSubData={\n                                data ={},\n                                device=child.id,\n                                type=1  \n                            }\n                errorSubData.result = {code=1001,msg='通道采集超时'} \n        \t\ttable.insert(out.data,errorSubData)\n\t\t\t    log.debug("bst_gxwd module=%s,channel=%s [%s] recvd data error.",moduleNo,channelNo,child.id)    \n\t\t\tend\n\t\t\t--log.debug('bst_gxwd  111111')\n        end      \n\t\t--log.debug('bst_gxwd  22222')\n   \n    end\n    ctx:done(json.encode(out))\nend\n\n\n--000A000181016F0044E59D5D43BA104741CF000094A8     moduleId=1  channelID=1\n--000A0FA681096F0044E59D5D43BA104741CF00009659     moduleId=4006  channelID=9   原始值 frequency=1836.918   temp=25.875 \nunmarshall=function(hex,subDevice,subModuleId,subChannelId)\nlog.debug("bst_gxwd subDevice=%s",json.encode(subDevice))\n    local subData={\n        data ={},\n\t\tdevice=subDevice.id,\n        type=1  \n    }\n\t\n\t--local subModuleId=module\n\t--local subChannelId=subDevice.props.channelId or subDevice.uplink.props.channel\n    local ErrorCode = IsValid(hex,subModuleId,subChannelId)\n    log.debug("bst_gxwd module=%s,channel=%s [%s] recv=[%s].",subModuleId,subChannelId,subDevice.id,hex)\n    if ErrorCode then     \n\t\tlocal freState=iota.hexToByte(hex,7,'B')%16\n\t\tlocal tempState=iota.hexToByte(hex,7,'B')-16\n\t\t\n\t\tif freState ~= 0 or tempState ~= 0 then\n\t\t\tif freState ~=0 then\n\t\t\t\tif tempState ~=0 then\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE_TEMPWIRE'\n\t\t\t\terrcode = 140103\n\t\t\t\tlog.debug('bst_gxwd ERR_VIBRW_FREWIRE_TEMPWIRE. module=%s,channel=%s ',subModuleId,subChannelId)\t\t\t \n\t\t\t\tend\t\n\t\t\t\terrormsg = 'ERR_VIBRW_FREWIRE'\n\t\t\t\terrcode = 140101\n\t\t\t\t\n\t\t\tend\t\t\t\t\t\t\n\t\t\terrormsg = 'ERR_VIBRW_TEMPWIRE'\n\t\t\terrcode = 140102\n\t\tend\n\t\t\n\t\tlocal freq=iota.hexToFloat(hex,8,'B',3)\n\t\tlocal am=iota.hexToFloat(hex,12,'B',3)\n        local temp = iota.hexToFloat(hex,16,'B',3)\n        --log.debug("bst_gxwd module=%s,channel=%s [%s] [freq=%s,am=%s,temp=%s].",subModuleId,subChannelId,subDevice.id,freq,am,temp)        \n\t\tlocal Phy=0\n\t\t--for index,child in pairs(subDevice.uplink.capabilities) do \n       --if child.capabilityMetaId == "97be25b3-75df-4137-a479-22343213fe74" then --振弦公式\n\t\t\t\tlocal k = tonumber(subDevice.uplink.capabilities[1].formula.props.K )\n\t\t\t\tlocal kt = tonumber(subDevice.uplink.capabilities[1].formula.props.Kt )\n\t\t\t\tlocal f0 = tonumber(subDevice.uplink.capabilities[1].formula.props.Fo )\n\t\t\t\tlocal t0 = tonumber(subDevice.uplink.capabilities[1].formula.props.To)\n                log.debug("bst_gxwd module=%s,channel=%s [%s] formula params ：k=%s,kt=%s,f0=%s,t0=%s,freq=%s,temp=%s,am=%s",subModuleId,subChannelId,subDevice.id,k,kt,f0,t0,freq,temp,am)\n\t\t\t    if k~=nil and kt~=nil and f0~=nil and t0~=nil then\n\t\t\t\t\tPhy =k * (freq ^ 2 - f0 ^ 2) + kt * (temp - t0)\n\t\t\t\t\tlog.debug("bst_gxwd channel=%s,Phy=%s",subChannelId,Phy)\n\t\t\t\tend\n\t\t--end\n\t\t--end\n\t\tsubData.data={\n\t\t\t\t\tfrequency=freq,\n\t\t\t\t\ttemperature=temp,\n\t\t\t\t\tam=am,\n                  \tphysicalvalue=Phy\n\t\t\t\t\t}\n\t\t\t\t\tlog.debug("bst_gxwd subData=%s",json.encode(subData)) \n\telse\n        subData.result = {code=errcode,msg=errormsg} \n\tend\n\treturn subData\nend\n\n\n\n\nIsValid=function(data,moduleId,channelId)\n    if data == nil or string.len(data)/2 ~= 22 then\n        errormsg = 'Data is nil or invalid length'\n        errcode = 1001\n\t\tlog.debug('bst_gxwd : Data is nil or invalid length. module=%s channel=%s recv = %s',moduleId,channelId,data)\n        return false\n    end\n    if iota.hexToByte(data,4,'B') == 0xc0 then\n        errcode = 1001\n        errormsg = 'Modbus Error Code ' \n\t\tlog.debug('bst_gxwd : Modbus Error Code = %s. module=%s channel=%s recv = %s',iota.hexToByte(data,5,'B'),moduleId,channelId,data)\n        return false\n    end\n\n\tlocal moduleStr=tostring(iota.hexToShort(data,2,'B'))\n\tif  moduleId~= moduleStr then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n\t\tlog.debug('bst_gxwd : module error [errmodule=%s]. module=%s channel=%s recv = %s',moduleStr,moduleId,channelId,data)\n        return false\n    end\n\t\n\tlocal channelStr=tostring(iota.hexToByte(data,5,'B'))\n\tif(channelStr=='0') then\n\t   channelStr='1'\n\tend\n\tif tonumber(channelStr) ~=tonumber(channelId) then\t\n        errormsg = 'Invalid acq channelId'\n\t\terrcode = 1004\n\t\tlog.debug('bst_gxwd : channel error [errchannel=%s]. module=%s channel=%s recv = %s',channelStr,moduleId,channelId,data)\n\t\treturn false\n\tend\n    return true\nend\n	INLINE	2020-08-26 14:05:20.792+08	2020-08-26 14:05:20.792+08	2020-08-26	\N
f4cc72f0-1d7e-4554-8d1f-041c9f267dee	shzr_rn100	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "shzr_rn100.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn100 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn100 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\t \n\tbuff=iota.appendHexByte(buff, 0x00, endian)  \n\tbuff=iota.appendHexByte(buff, 0x05, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n       local speed\t=iota.hexToShort(hex,3,'B')/100\n\t   local direction\t=iota.hexToShort(hex,5,'B')\n        local temperature = iota.hexToShort(hex,7,'B')/10\n\t\tlocal humidity\t = iota.hexToShort(hex,9,'B')/10\n\t\tlocal pressure\t=iota.hexToShort(hex,11,'B')/10\n\n     \n        out.data = {\n\t\tspeed=speed,\n\t\tdirection=direction,\n            temperature=temperature,\n\t\t\thumidity=humidity,\n\t\t\tpressure=pressure\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('shzr_rn100开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_rn100数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-06-11 11:19:17.086+08	2020-06-11 17:29:41.183+08	2020-06-11	\N
4ad803b7-f013-49f7-9df4-e04967d22021	shzr_rn110	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "shzr_rn110.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn110 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn110 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexWord(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\t\n\tbuff=iota.appendHexByte(buff, 0x00, endian)  \n\tbuff=iota.appendHexByte(buff, 0x03, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n       -- local scale = 1000000.00;\n        --print("parsing data", hex)\n        local temperature = iota.hexToShort(hex,3,'B')/10\n\t\tlocal humidity\t = iota.hexToShort(hex,5,'B')/10\n\t\tlocal pressure\t=iota.hexToShort(hex,7,'B')/10\n\n  \n        out.data = {\n            temperature=temperature,\n\t\t\thumidity=humidity,\n\t\t\tpressure=pressure\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('shzr_rn110开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_rn110数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-06-11 10:48:30.559+08	2020-06-11 17:19:32.647+08	2020-06-11	\N
19a4d417-0852-4a3a-b445-995ba3718d47	shzr_rn640	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, moduleId=%s", "shzr_rn640.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug("shzr_rn640 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\tmoduleNo=device.props.moduleId\n\t\t\n\t\tlog.debug("shzr_rn640 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 3, endian)              -- 1: 指令: 0x03 = 采集\n\tbuff=iota.appendHexByte(buff, 0x00, endian)              -- 2: 0x00 起始地址低位  寄存器数据高位\n\tbuff=iota.appendHexByte(buff, 0x15, endian)  \n\tbuff=iota.appendHexByte(buff, 0x00, endian)  \n\tbuff=iota.appendHexByte(buff, 0x02, endian)              -- 2: 0x02 起始地址低位  寄存器数据高位\n    buff=iota.appendHexCrc(buff, 'L' ,0)               -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n        print(string.format("out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n       local length\t\t=iota.hexToInt(hex,3,'B')/10000\n\t\n     \n        out.data = {\n\t\tlength\t=length\t \t,\n\t\t\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('shzr_rn640开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_rn640数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-06-11 11:35:54.668+08	2020-06-11 17:45:40.058+08	2020-06-11	\N
c308aa59-7c0a-4460-b041-d36f3cd25a45	rtu_disaster_mop	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	--地灾设备信息Topic发布\n-- 下发 采集仪 配置 topic = devmodule.."_setdevconfig"\n-- 下发 传感器 配置 topic =devmodule.."/ch/"..value.module\nstart=function()\n    --log.debug("rtu_disaster_mop start , ctx=")\n\tlocal linkcnt = #(device.dnlinks)--遍历sensors,分配到4个channel\n\tlocal tableconfig_1 = {}\n\tlocal tableconfig_2 = {}\n\tlocal tableconfig_3 = {}\n\tlocal tableconfig_4 = {}\n\tlocal sencnt = #(device.dnlinks)\n\tif sencnt > 0 then \n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n\t\t\t\tif subdevice ~= nil then\n\t\t\t\t\tlocal ch = tonumber(subdevice.uplink.props.channel)\n\t\t\t\t\tlocal sentype = subdevice.uplink.props.type\n\t\t\t\t\tlocal sen_type = "000"\n\t\t\t\t\tif sentype == "地表裂缝计" then\n\t\t\t\t\t\tsen_type = "101"\n\t\t\t\t\telseif sentype == "墙裂缝计" then\n\t\t\t\t\t\tsen_type = "102"\n\t\t\t\t\telseif sentype == "加速度计" then\n\t\t\t\t\t\tsen_type = "103"\n\t\t\t\t\telseif sentype == "泥位计" then\n\t\t\t\t\t\tsen_type = "104"\n\t\t\t\t\telseif sentype == "预警喇叭" then\n\t\t\t\t\t\tsen_type = "105"\n\t\t\t\t\telseif sentype == "雨量计" then\n\t\t\t\t\t\tsen_type = "201"\n\t\t\t\t\telseif sentype == "土壤含水率" then\n\t\t\t\t\t\tsen_type = "202"\n\t\t\t\t\telseif sentype == "裂缝计" then\n\t\t\t\t\t\tsen_type = "203"\n\t\t\t\t\telseif sentype == "GNSS结果数据" then\n\t\t\t\t\t\tsen_type = "204"\n\t\t\t\t\telseif sentype == "GNSS" then\n\t\t\t\t\t\tsen_type = "205"\n\t\t\t\t\telseif sentype == "倾角计" then\n\t\t\t\t\t\tsen_type = "206"\n\t\t\t\t\telseif sentype == "水压力" then\n\t\t\t\t\t\tsen_type = "207"\n\t\t\t\t\telseif sentype == "次声" then\n\t\t\t\t\t\tsen_type = "208"\n\t\t\t\t\telseif sentype == "土压力计" then\n\t\t\t\t\t\tsen_type = "209"\n\t\t\t\t\telseif sentype == "振弦式应力计" then\n\t\t\t\t\t\tsen_type = "210"\n\t\t\t\t\telseif sentype == "地表位移" then\n\t\t\t\t\t\tsen_type = "211"\n\t\t\t\t\telseif sentype == "深部位移" then\n\t\t\t\t\t\tsen_type = "212"\n\t\t\t\t\telseif sentype == "倾斜仪" then\n\t\t\t\t\t\tsen_type = "213"\n\t\t\t\t\telseif sentype == "地下水水位" then\n\t\t\t\t\t\tsen_type = "24"\n\t\t\t\t\telseif sentype == "多点位移" then\n\t\t\t\t\t\tsen_type = "215"\n\t\t\t\t\telseif sentype == "渗压计" then\n\t\t\t\t\t\tsen_type = "216"\n\t\t\t\t\telseif sentype == "流速仪" then\n\t\t\t\t\t\tsen_type = "217"\n\t\t\t\t\telseif sentype == "气温" then\n\t\t\t\t\t\tsen_type = "218"\n\t\t\t\t\telseif sentype == "TDR变形计" then\n\t\t\t\t\t\tsen_type = "219"\n\t\t\t\t\telseif sentype == "泉水流量" then\n\t\t\t\t\t\tsen_type = "220"\n\t\t\t\t\telseif sentype == "沉降仪" then\n\t\t\t\t\t\tsen_type = "221"\n\t\t\t\t\telseif sentype == "钻孔测斜仪" then\n\t\t\t\t\t\tsen_type = "222"\t\t\t\t\n\t\t\t\t\telseif sentype == "土壤温湿度计" then\n\t\t\t\t\t\tsen_type = "223"\t\t            \n\t\t\t\t\tend\n\t\t\t\t\tlocal sencon = {\n\t\t\t\t\t\tmodule = subdevice.uplink.props.module,\n\t\t\t\t\t\tchannel = tostring(subdevice.uplink.props.channel),\n\t\t\t\t\t\ttype = sen_type,\n\t\t\t\t\t\tsample = tostring(subdevice.uplink.props.sample),\n\t\t\t\t\t\tupload = tostring(subdevice.uplink.props.upload),\n\t\t\t\t\t\tplus = tostring(subdevice.uplink.props.plus),\n\t\t\t\t\t\tthreshold = tostring(subdevice.uplink.props.threshold),\n\t\t\t\t\t\tupperlimit = tostring(subdevice.uplink.props.upperlimit),\n\t\t\t\t\t\tlowerlimit = tostring(subdevice.uplink.props.lowerlimit),\n\t\t\t\t\t\tcp1 = tostring(subdevice.uplink.props.cp1),\n\t\t\t\t\t\tcp2 = tostring(subdevice.uplink.props.cp2),\n\t\t\t\t\t\tcp3 = tostring(subdevice.uplink.props.cp3),\n\t\t\t\t\t\tcp4 = tostring(subdevice.uplink.props.cp4)\n\t\t\t\t\t}\n\t\t\t\t\tif ch == 1 then\n\t\t\t\t\t\ttable.insert(tableconfig_1,sencon)\n\t\t\t\t\telseif ch == 2 then\n\t\t\t\t\t\ttable.insert(tableconfig_2,sencon)\n\t\t\t\t\telseif ch == 3 then\n\t\t\t\t\t\ttable.insert(tableconfig_3,sencon)\n\t\t\t\t\telseif ch == 4 then\n\t\t\t\t\t\ttable.insert(tableconfig_4,sencon)\n\t\t\t\t\tend\n\t\t\t\tend\n            end\n        end\n\tend\n\n\t--构成采集仪配置\n\tlocal alarm = "0"\n\tlocal gnss = "0"\n\tif device.props.alarm == "连接" then\n\t\talarm = "1"\t\n\tend\n\tif device.props.gnss == "连接" then\n\t\tgnss = "1"\t\n\tend\t\n\tlocal cmd = "$cmd=setworkmode&mode="..tostring(device.props.mode).."&GNSS="..gnss.."&AV_ALARM="..alarm.."_"..device.props.alarmchannel\n\tlocal devmodule = device.props.moduleid\n\tlocal r1,ok = redis.get(device.id.."_rtudevset")\n\tif ok and r1~=nil then\n\t\tlog.debug("rtu_disaster_mop  [%s]  ok=%s,r1=%s",devmodule,ok,r1)\n\t\tif r1 ~= tostring(device.props.mode) then\n\t\t\tlocal topic = devmodule.."_setdevconfig"\n\t\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\t\tlocal okdev, ack = ctx:asend({type="mqtt",payload=cmd,topic = topic }) \n\t\t\tctx:sleep(1)\n\t\t\tif okdev then\n\t\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\t\tend\n\t\tend\n\telse --第一次下发\n\t\tlocal topic = devmodule.."_setdevconfig"\n\t\tlog.debug("rtu_disaster_mop  [%s] topic=[%s],_setdevconfig send cmd =%s",devmodule ,topic,cmd)\n\t\tlocal okdev_first, ack_first = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\tctx:sleep(1)\n\t\tif okdev_first then\n\t\t\tlocal crc = tostring(device.props.mode)\n\t\t\tredis.set(device.id.."_rtudevset", tostring(crc))\n\t\tend\n\tend\n\t\n\t--传感器下发\n\tlog.debug("rtu_disaster_mop tableconfig_1 =%d, tableconfig_2 =%d  tableconfig_3 =%d  tableconfig_4 =%d ",#(tableconfig_1),#(tableconfig_2),#(tableconfig_3),#(tableconfig_4))\n\tGenratecmd(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\nend\n\n\n\nGenratecmd = function(tableconfig_1,tableconfig_2,tableconfig_3,tableconfig_4)\t\n\tlocal devmodule = device.props.moduleid\n\tif #(tableconfig_1) > 0 then\t\t\t\n\t\tlocal count = #(tableconfig_1)\n\t\t----获取配置，判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_1))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_1)  do \t\t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\n\t\t\tindex = index + 1\n      \t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_1")\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_1  topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_1", tostring(crc))\n\tend\n\tif #(tableconfig_2) > 0 then\t\t\t\n\t\tlocal count = #(tableconfig_2)\n\t\t----获取配置，判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_2))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_2)  do \t\t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\n\t\t\tindex = index + 1\n      \t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_2")\t\t\t\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_2 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_2", tostring(crc))\n\tend\n\tif #(tableconfig_3) > 0 then\t\t\t\t\n\t\tlocal count = #(tableconfig_3)\n\t\t----获取配置，判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_3))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_3)  do \n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\t\n\t\t\tindex = index + 1\t\t\t\n\t\t\tcmd = cmd..tostring(index)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_3")\n\t\t\t\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_3 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_3", tostring(crc))\n\tend\n\tif #(tableconfig_4) > 0 then\t\t\t\t\n\t\tlocal count = #(tableconfig_4)\n\t\t----获取配置，判断是否下发\n\t\tlocal strdevice= toHexStr(json.encode(tableconfig_4))\n\t\tstrdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n\t\tlocal crc=string.sub(strdevice,-4,-1)\t\n\t\t----轮询下发\n\t\tlocal index = 0\n\t\tfor i,value in pairs(tableconfig_4)  do \t\t\n\t\t\tlocal cmd = "$cmd=setsensor&sensor_num="\t\n\t\t\tindex = index + 1\n\t\t\tcmd = cmd..tostring(index)\n      \t\tlog.debug("rtu_disaster_mop tableconfig_4 cmd =%s", cmd)\n\t\t\tlocal senid = value.channel.."_"..value.module.."_"..value.type\n\t\t\tlocal cpcmd = value.cp1..","..value.cp2..","..value.cp3..","..value.cp4\n\t\t\tcmd = cmd..",{sensor_id="..senid.."&sample_intv="..value.sample.."&upload_intv="..value.upload.."&plus_intv="..value.plus.."&threshold="..value.threshold.."&upper_limit="..value.upperlimit.."&lower_limit="..value.lowerlimit.."&cp="..cpcmd.."}"\n\t\t\t---------------------------------------------------------------\n\t\n\t\t\tlocal topic =devmodule.."/ch/"..value.module\n\t\t\tlocal r1,ok1 = redis.get(device.id.."_rtuchset_4")\n\t\t\tif ok1 and r1~=nil then\t\t\n\t\t\t\tif r1 ~= crc then --配置有修改\n\t\t\t\t\tlog.debug("rtu_disaster_mop tableconfig_4 topic =%s cmd =%s",topic, cmd)\n\t\t\t\t\tlocal ok ack = ctx:asend({type="mqtt",payload=cmd,topic=topic }) \n\t\t\t\t\tctx:sleep(1)\n\t\t\t\tend\n\t\t\telse --第一次配置下发\n\t\t\t\tlocal ok ack = ctx:ssend({type="mqtt",payload=cmd,topic=topic },1) \t\n\t\t\t\tctx:sleep(1)\n\t\t\tend\n\t\tend\n\t\t---记录\n\t\tredis.set(device.id.."_rtuchset_4", tostring(crc))\n\tend\nend\n\nonData=function(hex)\n\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  	INLINE	2020-08-28 09:22:55.026+08	2020-08-28 09:22:55.026+08	2020-08-28	\N
62d525af-9d57-4b02-a2e8-8fac8d6bc432	bjdh_sf	\N		1.0	24ba1243-7e9a-4449-891c-e85657f257b5	24ba1243-7e9a-4449-891c-e85657f257b5	f	24ba1243-7e9a-4449-891c-e85657f257b5	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug(" load script %s, moduleId=%s", " bjdh_sf.lua", device.uplink.props.module or "[nil]")\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tif json.encode(device.uplink.props) ~= 'null' then\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\n\t\tlog.debug(" bjdh_sf 设备模块通道 接口获取 m=%s,c=%s  json.encode(moduleNo)=%s moduleId=%s ",moduleNo,channelNo,json.encode(moduleNo),device.props.moduleId)\n\telse\n\t\t\n\t\tlog.debug(" bjdh_sf 设备模块通道 属性获取 m=%s,c=%s  接口props=%s",moduleNo,channelNo,json.encode(device.uplink.props))\n\tend\n\t\n\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n\tlog.debug(" bjdh_sf buff=%s",buff)\n    buff=buff.."0400000002"\n\tlog.debug(" bjdh_sf bufff=%s",buff)\n    buff=iota.appendHexCrc(buff, "L",0)               -- 2: CRC\n\tlog.debug(" bjdh_sf buff2=%s",buff)\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    --local result="{}"\n    if ok then\n\tlog.debug(" bjdh_sf aaaaa")\n        result = unmarshall(resp)\n        log.debug(" bjdh_sf result0=%s",result)\n       -- print(string.format("out=%s,data=%s",resp, result))\n    else\n        log.debug(" bjdh_sf cccc")\n    end\n\tlog.debug(" bjdh_sf result1=%s",result)\n\n    ctx:done(result)\nend\n\n\nunmarshall=function(hex)\n  \tlocal out={\n        --type = 1,\n        data ={},\n        result = {}\n    }\n\tlog.debug(" bjdh_sf vvvv")\n    local ErrorCode = IsValid(hex)\n    if ErrorCode then \n\t\tlog.debug("bjdh_sf there")\n        local temph = iota.hexToByte(hex,3,'B')\n\t\tlog.debug("bjdh_sf temph=%s",temph)\n\t\tlocal templ = iota.hexToByte(hex,4,'B')\n\t\tlog.debug("bjdh_sf templ=%s",templ)\n\t\tlocal tempu= iota.hexToUShort(hex,3,'B')\n\t\tlocal temp\n\t\tif temph==0xFF then\n\t\t\tlog.debug("bjdh_sf temph=0xFF")\n\t\t\t temp=(tempu-65535-1)/100\n\t\telse\n\t\t\t temp = (temph*256+templ)/100\n\t\t\tlog.debug("bjdh_sf temph~=0xFF")\n\t\t\tlog.debug("bjdh_sf tempp=%s",temp)\n\t\tend\n\t\tlog.debug("bjdh_sf temp=%s",temp)\n\t\tlocal caph = iota.hexToByte(hex,5,'B')\n\t\tlocal capl = iota.hexToByte(hex,6,'B')\n\t\tlocal cap =(caph*256+capl)/100\n\t\tlocal data=''\n\t\tlog.debug("bjdh_sf cap=%s",cap)\n        out.data = {\n            capacity=cap,\n\t\t\ttemperature=temp\n        }\n\t\tlog.debug("bjdh_sf data=%s",data)\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data)\n    log.debug(' bjdh_sf 开始校验数据')\n\tif string.len(data)/2 ~=9 then\n\t\tlocal message = 'Invalid Msg, len='\n\t\tout.result = {code=1001,msg=message}\n\t\t return false\t\n\tend\n    if iota.hexToByte(data,1,'B') ~= 0x04  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    log.debug(' bjdh_sf 数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-09-15 08:49:26.411+08	2020-11-19 17:34:06.29+08	2020-09-15	\N
1d9bdf0c-3623-425f-9d86-cb286fd007f0	tj_sz	\N		1.0	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	f	5dfa1ffb-543a-43a7-9de1-30f0303e05d1	Lua	\nstart = function()\n    log.debug('tj_sz   device=%s', json.encode(device))\n\tlog.debug('tj_sz   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    --\n    --\n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('tj_sz', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('tj_sz [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n\n\tlocal timeStamps=bodypkg['create_time']\n\n\tlocal sensorid=bodypkg['id']\n    local physicalvalue=bodypkg['data']\n\n\tlocal timenow=unixtimestamp (timeStamps)\n\t\n\t\n\t\n\tif tonumber(sensorid) == tonumber(moduleNo) then\n   \n    \n    \n    \nout={\n      data={\n\tphysicalvalue\t=physicalvalue\t,\n        _acq_number=timenow\n      },\n\t time=timenow\n\t}\n\tend\n\n \n        log.debug('tj_sz [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\nunixtimestamp = function(datestr)\n   \n    local year = tonumber(string.sub(datestr,1,4))\n    local month = tonumber(string.sub(datestr,6,7))\n    local day = tonumber(string.sub(datestr,9,10))\n    local hour = tonumber(string.sub(datestr,12,13))\n    local minute = tonumber(string.sub(datestr,15,16))\n    local second = tonumber(string.sub(datestr,18,19))\n\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    --log.debug("soilDT14301 timenum=%s",timenum)\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    --log.debug("soilDT14301 recordTime=%s",recordTime)\n    return recordTime\nend\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2020-12-14 14:30:33.707+08	2020-12-15 09:41:14.884+08	2020-12-14	\N
84e7b49c-247b-446c-a505-0ed6ab5de6e4	shzr_cm11	\N		1.0	8d2f03c7-32a2-42e4-befc-7dde5c965472	8d2f03c7-32a2-42e4-befc-7dde5c965472	f	8d2f03c7-32a2-42e4-befc-7dde5c965472	Lua	--require "functions"    -- 公共函数\n--[[\n    可用函数包:\n        log: 日志\n        convertor: 转换\n        conn: 链接\n    全局变量:\n    ctx: (只读)\n        device => {}   //设备信息\n        protocol=> {}  //协议信息\n        interface=> {} //接口信息\n        ssend: 同步发送数据\n        asend: 异步发送数据\n        done: 完成处理.\n        notify: 通知结果\n]] \n--//协议参考文档： Documents/PMO/02 产品协议/我司产品协议/通信协议/ModBus统一通信协议 .xls\nstart=function()\n  \tlog.debug("load script %s, device=%s", "shzr_cm11.lua",json.encode(device))\n \tlocal endian = 'B'\n    local buff=''\n\tlocal moduleNo\n\tlocal G\n\tlocal T0\n\tlocal R0\n\tlocal K\n\n\t\tmoduleNo=device.uplink.props.module --模块 通道 优先接口获取\n\t\t\t\n\t\tG=device.props.G\n\t    T0=device.props.T0\n\t    R0=device.props.R0\n\t    K=device.props.K\n\t\tlog.debug("shzr_cm11 设备模块通道 接口获取 m=%s,G=%s,T0=%s,R0=%s,K=%s,json.encode(moduleNo)=%s moduleId=%s ",moduleNo,G,T0,R0,K,json.encode(moduleNo),device.props.moduleId)\n\t\n\t\n    buff=iota.appendHexByte(buff, moduleNo, endian)           -- 1: 模块号\n    buff=iota.appendHexByte(buff, 0x03, endian)                         --1: CMD 4\n    buff=iota.appendHexByte(buff, 0x00, endian)  \n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x00, endian)\n\tbuff=iota.appendHexByte(buff, 0x02, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)             -- 2: CRC\n\n    ok,resp=ctx:ssend(buff,15000)  --发送指令\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo,G,T0,R0,K)\n        print(string.format("shzr_cm11 out=%s,data=%s",resp, result))\n    else\n        --print("SSend error!")\n    end\n    -- ctx:asend("hello")\n    ctx:done(result)\nend\n\n\n\nunmarshall=function(hex,moduleStr,G,T0,R0,K)\n  \tlocal out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n    local ErrorCode = IsValid(hex,moduleStr)\n    if ErrorCode then \n\n       \n        local freq= iota.hexToShort(hex,3,'B')/10\n\t\tlocal dResistance = iota.hexToShort(hex,5,'B')\n        local A=1.4051\n\t\tlocal B=2.369\n\t\tlocal C=1.019\n\t\tlocal temp = 1 / (A * math.pow(10, -3) + B * math.pow(10, -4) * math.log(dResistance) + C * math.pow(10, -7) * math.pow(math.log(dResistance), 3)) - 273.2\n\t\tlocal r1=freq^2/1000\n\t\tlocal phy=G*(r1-R0)+K*(temp-T0)\n\n        out.data = {\n            frequency= freq,\n\t\t    temperature= tonumber(string.format('%0.1f',temp)),\n\t\t\tphysicalvalue\t= tonumber(string.format('%0.2f',phy))\n\t\t\n\t\t\n\t\t\t\n        };\n    \n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleNo_check)\n    log.debug('shzr_cm11开始校验数据')\n    if data == nil then\n        errormsg = 'Data is nil or invalid'\n        errcode = 1001\n        return false\n    end\n   \n    if iota.hexToByte(data,1,'B') ~= 0x03  then \n        errcode = 1001\n        errormsg = 'Hex CMD False ' \n        return false\n    end\n    if tostring(moduleNo_check) ~= tostring(iota.hexToByte(data,0,'B')) then\t\n        errormsg = 'Invalid acq moduleId'\n        errcode = 1004\n        return false\n    end\n    log.debug('shzr_cm11数据校验通过')\n    return true\n--crc\nend\n\n	INLINE	2020-06-10 16:56:35.465+08	2020-06-11 15:47:48.63+08	2020-06-10	\N
dad80a20-fe99-4fd7-951b-b7a4ea37a225	cxmnt	\N		1.0	c9989314-4834-479b-bbdc-009a686b21c3	c9989314-4834-479b-bbdc-009a686b21c3	f	c9989314-4834-479b-bbdc-009a686b21c3	Lua	start=function()\n    log.debug("cxmnt : devices network =%s", json.encode(device))\nend\n\nonData=function(data)\n    if data ~=nil then\n        log.debug("cxmnt : devices data =%s",data)\n        ParseData(data)        \n    else\n        log.error("cxmnt : recvd content is nil")\n    end\nend\n\n\nfunction  ParseData(data)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    if string.sub(data,1,2)=='01' and string.sub(data,-2,-1)=='fa' then  --振动数据\n        log.debug("cxmnt : 振动数据 data =%s",data)\n        local package=iota.hexToShort(data,8,'L')\n        local packagecount=iota.hexToShort(data,10,'L')\n        local datpackage=string.sub(data,41,-9)\n        local moduleid=iota.hexToShort(data,16,'L')\n\n        local req1 =''\n        local req2 =''\n        local req =''\n        req1=iota.appendHexByte(req1, 01 , 'L')    -- 0-3 压缩协议   4-7  协议版本\n        req1=iota.appendHexByte(req1, 0x02 , 'L')\n        req1=iota.appendHexWord(req1, 0x0007 , 'L')\n        req1=iota.appendHexWord(req1, 0x0000 , 'L')\n        \n        req2=iota.appendHexWord(req2, package , 'L')\n        req2=iota.appendHexWord(req2, packagecount , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        req2=iota.appendHexWord(req2, moduleid , 'L')\n        req2=iota.appendHexWord(req2, 0x0000 , 'L')\n        local checkdat=req1..req2\n        local checksum=HeadCheckSum(checkdat)\n        req=req1\n        req=iota.appendHexWord(req, checksum , 'L')\n        req=req..req2\n        req=iota.appendHexWord(req, package , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=iota.appendHexByte(req, 0 , 'L')\n        req=req..'00000000'\n        req=iota.appendHexCrc(req, 'L' ,0)        --校验\n        local crc16=string.sub(req,-4,-1)\n        req=string.sub(req,1,-13)\n        req=req..crc16\n        req=iota.appendHexByte(req, 0 , 'L') \n        req=iota.appendHexByte(req, 0xfa , 'L') \n        log.debug("cxmnt: datfileback: %s", req)\n        ctx:asend(req, 20000)\n\n        if package==packagecount then\n            local r1,ok = redis.get(device.id.."_mpzd")\n            log.debug("cxmnt: 解析dat:r1= %s", r1)\n            ParseFileDat(r1)\n        else\n            if package==1 then\n                local firstpackage=string.sub(datpackage,-80,-1)\n                redis.set(device.id.."_mpzd", firstpackage)\n                log.debug("cxmnt: 接收dat:datpackage= %s", firstpackage)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据首包'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            else\n                local r1,ok = redis.get(device.id.."_mpzd")\n                log.debug("cxmnt: 接收dat:r1= %s package=%s", r1,package)\n                local data=r1..datpackage\n                redis.set(device.id.."_mpzd", data)\n                local re = {\n                    result = nil,\n                    type = 1,\n                    data = {\n                        ack = '振动数据'\n                    }\n                }\n                ctx:notify(json.encode(re))\n            end\n            \n        end\n    else        \n\t   \n\t                                                   -- 非振动数据\n        if string.sub(data,13,16)=='8a00' then\n            local rtumodule=iota.hexToShort(data,3,'B')\n            local power  =iota.hexToByte(data,13,'B')\n            log.debug("cxmnt: 剩余电量: %s", power)\n\t\t\tlocal ver =iota.hexToFloat(data,18,'B',6)\n\t\t\tlog.debug("cxmnt: 版本固件: %s", ver)\n\t\t\tredis.set(device.id.."_power", tostring(power))\n\t\t\tredis.set(device.id.."_version", tostring(ver))\t\t\t\n\n            local strdevice= toHexStr(json.encode(device))\n            strdevice=iota.appendHexCrc(strdevice, 'B' ,0)\n            local crc=string.sub(strdevice,-4,-1)\n            log.debug("cxmnt : devices crc =%s",crc)\n            local r1,ok = redis.get(device.id.."_mpset")\n            if ok and r1~=nil then\n                if crc == r1 then\n                    log.debug("cxmnt : 配置无修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 0, 'B')  -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("cxmnt: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置无修改'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                else\n                    log.debug("cxmnt : 配置有修改")\n                    local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("cxmnt: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                    redis.set(device.id.."_mpset", tostring(crc))\n                    ctx:sleep(2)\n                    Deploy()    --配置\n                end\n            else\n                log.debug("cxmnt : 配置初次配置")\n                local req =''\n                    req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n                    req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n                    req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n                    req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n                    req=iota.appendHexWord(req, 0x0A01, 'B')    --指令\n                    req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n                    req=iota.appendHexWord(req, 0x0014, 'B')    --数据区长度\n                    req=iota.appendHexWord(req, os.date("%Y"), 'B')    -- 年\n                    req=iota.appendHexByte(req, os.date("%m"), 'B') \n                    req=iota.appendHexByte(req, os.date("%d"), 'B') \n                    req=iota.appendHexByte(req, os.date("%H"), 'B') \n                    req=iota.appendHexByte(req, os.date("%M"), 'B') \n                    req=iota.appendHexWord(req, os.date("%S"), 'B')   --秒\n                    req=iota.appendHexWord(req, device.uplink.props.dis, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.ot, 'B')\n                    req=iota.appendHexWord(req, device.uplink.props.acq, 'B')\n                    req=iota.appendHexByte(req, 1, 'B')   -- 是否下发\n                    req=iota.appendHexByte(req, 0, 'B')   --是否等待升级\n                    req=iota.appendHexWord(req, 0, 'B')   --当前版本\n\t\t\t\t\tlocal etime = device.uplink.props.etime\n\t\t\t\t\tlocal htime = string.sub(etime,1,2)\n\t\t\t\t\tlocal mtine = string.sub(etime,4,5)\n                    req=iota.appendHexByte(req, tonumber(htime), 'B')   --指定小时\n\t\t\t\t\treq=iota.appendHexByte(req, tonumber(mtine), 'B')   --指定分钟\n                    req=iota.appendHexCrc(req, 'B' ,0)        --校验\n                    req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n                    log.debug("cxmnt: 苏醒帧返回: %s", req)\n                    ctx:asend(req, 20000)\n                redis.set(device.id.."_mpset", tostring(crc))\n                ctx:sleep(2)\n                Deploy()    --配置\n            end\n        end\n    \n        if string.sub(data,13,16)=='8a02' then\n            log.debug("cxmnt : 设备休眠")\n            local re = {\n                result = nil,\n                type = 1,\n                data = {\n                    ack = '设备休眠'\n                }\n            }\n            ctx:notify(json.encode(re))\n        end\n    \n        local rtumodule=iota.hexToShort(data,3,'B')\n        if string.sub(data,13,16)=='8601' then\n            local  time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = iota.hexToShort(data,15,'B'), month = iota.hexToByte(data,17,'B'), day =iota.hexToByte(data,18,'B'), hour =iota.hexToByte(data,19,'B'), min =iota.hexToByte(data,20,'B'), sec = iota.hexToByte(data,21,'B')}))\n            local sensorCount=iota.hexToByte(data,26,'B')\n\t\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\t\tlocal power\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tpower=r1\n\t\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\t\tend\n\t\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\t\tlocal ver\n\t\t\tif r1ok and r1~=nil then\n\t\t\t\tver=r1\n\t\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\t\tend\n\t\t\tlocal powerstr = string.format("%d%%", power)\n\t\t\tlog.debug("cxmnt powerstr=%s",powerstr)\n\t\t\tlocal rst = {\n\t\t\t\tdata={\n\t\t\t\t\t_data_type='diag',\n\t\t\t\t\tR={\n\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\tcc=\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t},\t\t\t\t\n\t\t\t\tdevice=device.id,\n\t\t\t\ttype=1,\n\t\t\t\ttime=time  \n\t\t\t}\n\t\t\ttable.insert(out.data,rst)\n            local isover=iota.hexToByte(data,25,'B')    --尾包\n            local datalength=0\n            local firststart=27\n            for i=1,sensorCount,1 do\n                firststart=firststart+datalength\n                local sensorType=iota.hexToByte(data,firststart,'B')\n                local module=iota.hexToShort(data,firststart+3,'B')\n                local channel=iota.hexToByte(data,firststart+2,'B')\n                datalength=iota.hexToByte(data,firststart+1,'B')+6\n                if sensorType==0 then   --振弦\n                    local childDevice=getZxDeviceInfo(module,channel)\n                    local rst = {\n                        data={\n                            frequency = iota.hexToFloat(data,firststart+12,'B'),\n                            am = iota.hexToFloat(data,firststart+16,'B'),\n                            temperature = iota.hexToFloat(data,firststart+20,'B')\t\t\t\t\t\n                        },\n                        device=childDevice.id,\n                        type=1,\n                        time=time  \n                    }\n                    table.insert(out.data,rst)\n                end\n                if sensorType==1 then   --485\n                    local childDevice=getDeviceInfo(module,channel)\n                    local protocalCode=iota.hexToShort(data,firststart+6,'B')\n                    if protocalCode==1503 or  protocalCode==1502 then     --测斜\n\t\t\t\t\tlog.debug("cxmnt: 测斜: %s", protocalCode)\n            \t\tlog.debug("cxmnt: 测斜: %s, deviceid: %s", module,childDevice.id)\n                        local rst = {\n                            data={\n                                anglex = iota.hexToFloat(data,firststart+12,'B'),\n                                angley = iota.hexToFloat(data,firststart+16,'B'),\n                                temperature = iota.hexToFloat(data,firststart+20,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\t\t\t\t\t\n                        table.insert(out.data,rst)\n\t\t\t\t\t\tlog.debug("cxmnt: 测斜: %s",  json.encode(out))\n                    end\n    \n                    if protocalCode==9102 then     --裂缝\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                length = iota.hexToFloat(data,firststart+12,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n    \n                    if protocalCode==1102 then     --温湿度\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                temperature = iota.hexToFloat(data,firststart+12,'B'),\n                                humidity = iota.hexToFloat(data,firststart+16,'B') \n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n    \n                    if protocalCode==9002  then     --压差\n                        local childDevice=getDeviceInfo(module,channel)\n                        local rst = {\n                            data={\n                                physicalvalue = iota.hexToFloat(data,firststart+12,'B'),\n                                frequency = iota.hexToFloat(data,firststart+16,'B'),\n                                temperature = iota.hexToFloat(data,firststart+20,'B')\n                            },\n                            device=childDevice.id,\n                            type=1,\n                            time=time  \n                        }\n                        table.insert(out.data,rst)\n                    end\n\t\t\t\t\tif protocalCode==9030  then     --静力水准仪(齐兴)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tpressure = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif protocalCode==9509  then     --激光测距(自研)\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\tlength = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\n\t\t\t\t\tif protocalCode==1992  then     --水位\n\t\t\t\t\t\tlocal childDevice=getDeviceInfo(module,channel)\n\t\t\t\t\t\tlocal rst = {\n\t\t\t\t\t\t\tdata={\n\t\t\t\t\t\t\t\twaterlevel = iota.hexToFloat(data,firststart+12,'B'),\n\t\t\t\t\t\t\t\ttemperature = iota.hexToFloat(data,firststart+16,'B'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdevice=childDevice.id,\n\t\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\t\ttime=time  \n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable.insert(out.data,rst)\n\t\t\t\t\tend\t\t\t\t\t\t\n                end\n            end \n            log.debug("cxmnt: dataresult: %s", json.encode(out))\n            local req =''\n            req=iota.appendHexByte(req, 0xfe, 'B')  --帧头\n            req=iota.appendHexWord(req, 0x000b, 'B')  --设备号：0x0B，多通道数据采集系统\n            req=iota.appendHexWord(req, rtumodule , 'B')  --模块号\n            req=iota.appendHexByte(req, 0x01, 'B')       --命令源\n            req=iota.appendHexWord(req, 0x0601, 'B')    --指令\n            req=iota.appendHexWord(req, 0x0000, 'B')    --消息ID\n            req=iota.appendHexWord(req, 0x0000, 'B')    --数据区长度\n            req=iota.appendHexCrc(req, 'B' ,0)        --校验\n            req=iota.appendHexByte(req, 0xef, 'B')       --帧尾       \n            log.debug("cxmnt: databack: %s", req)\n            ctx:asend(req, 20000)\n            ctx:notify(json.encode(out)) \n        end\n    end\nend\n\nfunction Deploy()\n    local total=totalSensors()\n    log.debug("cxmnt : totalSensors =%s",total)\n    local over=0\n    local onepag=0\n    local totallength=3\n    local buff=''\n    \n    for i,dnlink in pairs(device.dnlinks)  do \n        for j,subdevice in pairs(dnlink.devices)  do\n            over=over+1\n            onepag=onepag+1\n            if subdevice.props.sensortype=='zx' then       \n                totallength=totallength+18        \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.colgain == "100倍" then\n\t\t\t\t\tcolgain = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.colgain == "500倍" then\n\t\t\t\t\tcolgain = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "单脉冲激励" then\n\t\t\t\t\tincentivemethod = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "多脉冲激励" then\n\t\t\t\t\tincentivemethod = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentivemethod == "共振激励" then\n\t\t\t\t\tincentivemethod = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "是" then\n\t\t\t\t\tcheckoption = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.checkoption == "否" then\n\t\t\t\t\tcheckoption = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "是" then\n\t\t\t\t\tvibratspectrum = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratspectrum == "否" then\n\t\t\t\t\tvibratspectrum = 1\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "8K" then\n\t\t\t\t\tvibratsamplfreq = 0\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "16K" then\n\t\t\t\t\tvibratsamplfreq = 1\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.vibratsamplfreq == "32K" then\n\t\t\t\t\tvibratsamplfreq = 2\t\t\t\n\t\t\t\tend\t\t\t\t\n\t\t\t\tif subdevice.uplink.props.incentive == "是" then\n\t\t\t\t\tincentive = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.incentive == "否" then\n\t\t\t\t\tincentive = 1\t\t\t\t\n\t\t\t\tend\t\t\t\t\n                local settingvib = tonumber(colgain) + tonumber(incentive)  * math.pow(2, 1) + tonumber(checkoption) * math.pow(2, 2) + tonumber(vibratspectrum) * math.pow(2, 3) + tonumber(vibratsamplfreq) * math.pow(2, 4) + tonumber(incentivemethod) * math.pow(2, 6)\n                log.debug("cxmnt : settingvib =%s",settingvib)\n                buff=iota.appendHexByte(buff, settingvib, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.k, 'B')       --振弦采集参数\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.f0, 'B')    --振弦频率初值\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --上传频谱ID\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --采集选项\n            end   \n            if subdevice.props.sensortype ~='zx' and subdevice.props.sensortype ~='zd' then \n                totallength=totallength+18   \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --传感器类型\n\t\t\t\tif subdevice.uplink.props.stopbits == "1位" then\n\t\t\t\t\tstopbits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "1.5位" then\n\t\t\t\t\tstopbits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.stopbits == "2位" then\n\t\t\t\t\tstopbits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "7位" then\n\t\t\t\t\tdatabits = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "8位" then\n\t\t\t\t\tdatabits = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.databits == "9位" then\n\t\t\t\t\tdatabits = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "2400" then\n\t\t\t\t\tbaudrate = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "9600" then\n\t\t\t\t\tbaudrate = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "19200" then\n\t\t\t\t\tbaudrate = 2\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.baudrate == "115200" then\n\t\t\t\t\tbaudrate = 3\t\t\t\t\n\t\t\t\tend\t\n\t\t\t\tif subdevice.uplink.props.parity == "无校验" then\n\t\t\t\t\tparity = 0\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "奇校验" then\n\t\t\t\t\tparity = 1\t\t\t\t\n\t\t\t\tend\n\t\t\t\tif subdevice.uplink.props.parity == "偶校验" then\n\t\t\t\t\tparity = 2\t\t\t\t\n\t\t\t\tend\n                local setting = tonumber(baudrate) + tonumber(databits) * math.pow(2, 2) + tonumber(parity) * math.pow(2, 4) + tonumber(stopbits) * math.pow(2, 6)\n                log.debug("cxmnt : setting =%s",setting)\n                buff=iota.appendHexByte(buff, setting, 'B')       --选项1                \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.switchinterval, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.props.protocolcode, 'B')    --协议号\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.module, 'B')    --模块号\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子通道号\n            end\n            if  subdevice.props.sensortype =='zd' then   \n                totallength=totallength+31 \n                buff=iota.appendHexByte(buff, subdevice.uplink.props.channel, 'B')       --通道号 \n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id\n                buff=iota.appendHexWord(buff, 0x0000, 'B')   --传感器id  \n                buff=iota.appendHexByte(buff, 0x01, 'B')       --子指令个数\n                buff=iota.appendHexByte(buff, 0x04, 'B')       --传感器类型\n                buff=iota.appendHexByte(buff, 0x00, 'B')       --选项1\n                buff=iota.appendHexByte(buff, 0x05, 'B')       --选项2\n                buff=iota.appendHexByte(buff, 0x01, 'B')       --选项3\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.predelay, 'B')       --选项4\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.postdelay, 'B')       --选项5\n                buff=iota.appendHexByte(buff, 0x12, 'B')       --长度\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggerjion, 'B')    --定时采样间隔\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.triggersample, 'B')    --定时采样时长\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.sampleduration, 'B')    --加速度触发采样时长\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.samplefreq, 'B')    --采样频率\n                --buff=iota.appendHexWord(buff, subdevice.uplink.props.filterfreq, 'B')     --滤波频率\n\n                buff=iota.appendHexWord(buff, 0x42c8, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                buff=iota.appendHexWord(buff, 0x4248, 'B')\n                buff=iota.appendHexWord(buff, 0x0000, 'B')\n                local trigger1=tonumber(subdevice.uplink.props.triggerlevel)*10\n                buff=iota.appendHexByte(buff, trigger1, 'B')     --触发加速度\n                buff=iota.appendHexByte(buff, subdevice.uplink.props.accerange, 'B')     --加速度范围\n                buff=iota.appendHexWord(buff, subdevice.uplink.props.lagpionts, 'B')    --滞后点数\n\n            end\n            if over==8 or onepag==total then  \n                local buffhead=''\n                buffhead=iota.appendHexByte(buffhead, 0xfe, 'B')     --帧头\n                buffhead=iota.appendHexWord(buffhead, 0x000b, 'B')   --设备号：0x0B，多通道数据采集系统\n                buffhead=iota.appendHexWord(buffhead, device.uplink.props.moduleid, 'B')  --模块号\n                buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --命令源\n                buffhead=iota.appendHexWord(buffhead, 0x0306, 'B')     --指令\n                buffhead=iota.appendHexWord(buffhead, 0x0000, 'B')     --消息ID\n                buffhead=iota.appendHexWord(buffhead, totallength, 'B')     --数据区长度\n                if onepag==total then\n                    buffhead=iota.appendHexByte(buffhead, 0x01, 'B')       --尾包\n                else\n                    buffhead=iota.appendHexByte(buffhead, 0x00, 'B')       --尾包\n                end\n                buffhead=iota.appendHexByte(buffhead, total, 'B')      --采集指令总通道指令个数\n                buffhead=iota.appendHexByte(buffhead, over, 'B')       --该分包通道指令个数\n                buff=buffhead..buff\n                buff=iota.appendHexCrc(buff, endian ,0)        --校验\n                buff=iota.appendHexByte(buff, 0xef, 'B')       --帧尾\n                local ok, ack = ctx:ssend(buff, 20000)\n                log.debug("cxmnt : deploy back =%s",ack)\n                buff=''\n                if over==8 then\n                    over=0\n                end\n                totallength=3\n                if onepag==total then\n                    log.debug("cxmnt 配置下发完成")\n                    local re = {\n                        result = nil,\n                        type = 1,\n                        data = {\n                            ack = '配置下发完成'\n                        }\n                    }\n                    ctx:notify(json.encode(re))\n                end\n            end    \n        end\n    end   \nend\n\n--获取传感器信息\nfunction getDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(subdevice.uplink.props.module) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("cxmnt has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("cxmnt has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--获取传感器信息\nfunction getZxDeviceInfo(moduleid,channel)\n    if device.dnlinks ~= nil then\n        --local subdevices = device.dnlinks[1].devices\n        for i,dnlink in pairs(device.dnlinks)  do \n            for j,subdevice in pairs(dnlink.devices)  do\n                if tostring(device.uplink.props.moduleid) == tostring(moduleid) and tonumber(subdevice.uplink.props.channel) == tonumber(channel) then               \n                    return subdevice\n                end    \n            end\n        end\n        log.debug("cxmnt has no device module=%s channel=%s",moduleid,channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug("cxmnt has no subdevices.")\n        return nil -- 没有子设备\n    end\nend\n\n--string split函数\nfunction Split(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\nfunction ParseFileDat(dathex)\n    log.debug("cxmnt : dat content  =%s", dathex)\n    local out={\n        data ={},\n        result = {},\n        type=2\n    }\n    local offset = 0\n    local t = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local l = iota.hexToShort(dathex,offset,'B')\n    offset = offset + 2\n    local version = iota.hexToByte(dathex,offset,'B') -- 版本号\n    offset = offset + 1\n    local channel = iota.hexToByte(dathex,offset,'B') -- 通道号\n    offset = offset + 1\n    local deviceId = iota.hexToShort(dathex,offset,'L') -- 设备ID\n\n    local subdevice = getDeviceInfo(deviceId,channel) -- 找到设备继续解析\n    if subdevice ~= nil then\n        offset = offset + 2\n        local samplefreq = iota.hexToFloat(dathex,offset,'L',4) -- 采样频率\n        offset = offset + 4\n        local filterfreq = iota.hexToFloat(dathex,offset,'L',4) -- 滤波频率\n        offset = offset + 4\n        local gainamplifier = iota.hexToByte(dathex,offset,'B') -- 放大倍数\n        offset = offset + 1\n        local triggertype = iota.hexToByte(dathex,offset,'B') -- 触发方式\n        offset = offset + 1\n        local year = iota.hexToByte(dathex,offset,'B')+2000\n        offset = offset + 1\n        local mon = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local day = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local hour = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local min = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        local sec = iota.hexToByte(dathex,offset,'B')\n        offset = offset + 1\n        offset = offset + 12\n        local Ldata = iota.hexToInt(dathex,offset,'B')\n        offset = offset + 4\n        log.debug("cxmnt deviceId=%s channel=%s samplefreq=%s filterfreq=%s gainamplifier=%s triggertype=%s time=%s-%s-%s %s:%s:%s",deviceId,channel,samplefreq,filterfreq,gainamplifier,triggertype,year,mon,day,hour,min,sec)\n\n        local floatcount = (string.len(dathex)/2-40)/4\n        log.debug("cxmnt begin parse")\n        local vols = {}\n\t\tlocal mean = 0\n        for i= 1, floatcount do\n            offset=40+(i-1)*4        \n            vols[i]= iota.hexToFloat(dathex,offset,'L',6)\n\t\t\tmean = mean + vols[i]\n        end\n\t\tmean = mean/floatcount\n\t\tif subdevice.props.dedc == true then\n\t\t\tfor i= 1, floatcount do\n\t\t\t\tvols[i]=vols[i]- mean\n\t\t\tend\n\t\tend\n        log.debug("cxmnt finish parse")\n    \n        local rst = {\n            data={\n                _data_type='vib',\n                physicalvalue=vols,\n                sampleFreq=samplefreq,\n                filterFreq=filterfreq,\n                gainAmplifier=gainamplifier,\n                triggerType=triggertype,\n                version=version\n            },\n            device=subdevice.id,\n            type=1,\n            time=os.date("%Y-%m-%dT%H:%M:%S+08:00",os.time({year = year, month = mon, day =day, hour =hour, min =min, sec = sec}))   \n        }\n        table.insert(out.data,rst)\n        \n\t\t--诊断信息\n\t\tlocal r1,r1ok = redis.get(device.id.."_power")  --获取上次记录时间\n\t\tlocal power\n\t\tif r1ok and r1~=nil then\n\t\t\tpower=r1\n\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_power=%s",r1,r1ok,power)\t\t\t\t\n\t\tend\n\t\tr1,r1ok = redis.get(device.id.."_version")  --获取上次记录版本\n\t\tlocal ver\n\t\tif r1ok and r1~=nil then\n\t\t\tver=r1\n\t\t\tlog.debug("cxmnt r1=%s,r1ok=%s,_version=%s",r1,r1ok,ver)\t\t\t\t\n\t\tend\n\t\tlocal powerstr = string.format("%d%%", power)\n\t\tlog.debug("cxmnt powerstr=%s",powerstr)\n\t\tlocal rstd = {\n\t\t\tdata={\n\t\t\t\t_data_type='diag',\n\t\t\t\tR={\n\t\t\t\t\tbase ={\n\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t}\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t},\t\t\t\t\n\t\t\tdevice=device.id,\n\t\t\ttype=1,\n\t\t\ttime=time  \n\t\t}\n\t\ttable.insert(out.data,rstd)\n\t\tlog.debug("cxmnt cloudvibrate=%s",json.encode(out))\n        ctx:notify(json.encode(out))\n    else\n        log.debug("cxmnt not found device module=%s channel=%s",deviceId,channel)\n    end\nend\n\nfunction totalSensors()\n    local sensorcnt=0\n    for i,dnlink in pairs(device.dnlinks)  do \n        sensorcnt = #(dnlink.devices) + sensorcnt \n    end\n    return  sensorcnt\nend\n\n-- 字符串 -> BCD\ntoHexStr=function(str)\n    local len = string.len(str);\n    local hex='';\n    for i =1,len do\n      local bi = string.byte(str, i);\n      hex=hex..string.format("%02X",bi);\n    end\n    return hex;\nend  \n\nfunction HeadCheckSum(data)\n    local sum=0\n    local len = string.len(data)\n    log.debug("cxmnt: len: %s", len)\n    for i =1,len,4 do \n        local te=tonumber(string.sub(data,i,i+3) ,16)\n        log.debug("cxmnt: te: %s", te)\n        sum = sum+ tonumber(te)\n    end\n    log.debug("cxmnt: sum: %s", sum)\n   return 0xffff-sum\nend\n\n	INLINE	2021-01-19 09:46:50.931+08	2021-01-19 09:46:50.931+08	2021-01-19	\N
113b841e-f66a-4020-a065-95c8de705e15	hbss_zd	\N		1.0	9f26c140-684e-41f5-80a9-b0c1f660b9f7	9f26c140-684e-41f5-80a9-b0c1f660b9f7	f	9f26c140-684e-41f5-80a9-b0c1f660b9f7	Lua	\nstart=function()\n    log.debug("start %s, ctx=%s", "hbss_zd.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexWord(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x83, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian) \n    buff=iota.appendHexByte(buff, 0x05, endian) \n\tbuff=iota.appendHexByte(buff, 0x06, endian) \n    buff=iota.appendHexByte(buff, 0x07, endian)  \n\tbuff=iota.appendHexByte(buff, 0x08, endian)\n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("hbss_zd,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\n\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("hbss_zd m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local temp1 =iota.hexToByte(hex,9,'B')\n       log.debug("hbss_zd temp1=%s",temp1)\n      local temp2 =iota.hexToByte(hex,10,'B')\n           log.debug("hbss_zd temp2=%s",temp2)\n          local temp =(temp1+temp2)*0.0625\n\n    \n\t\tlocal accelerationx =iota.hexToShort(hex,11,'B')\n\t\tlocal accelerationy =iota.hexToShort(hex,13,'B')\n\t\tlocal accelerationz =iota.hexToShort(hex,15,'B')\n    \n        out.data = {           \n            temperature\t=temp,\n\t\t\taccelerationx=accelerationx,\n\t\t\taccelerationy=accelerationy,\n\t\t\taccelerationz=accelerationz\n\t\t\t}\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("hbss_zd m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 19 then\n        errormsg = string.format('无效的数据长度=%s≠19',checkLen)\n        errcode = 1002\n        return false\n    end\n  \n    return true\n--crc\nend\n\n \n\n	INLINE	2020-12-22 08:39:27.797+08	2020-12-22 15:36:37.659+08	2020-12-22	\N
4b0fa613-30cd-4b22-b50e-87974bd2ba1a	acyq	\N		1.0	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	f	7471567c-43bd-422d-9d05-9742a9a517c5	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('acyq loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('acyq device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('acyq 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('acyq 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n\tbuff = buff .. '0300640021'\n    buff=iota.appendHexCrc(buff, 'L' ,0)\n \n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp,moduleNo)\n    if ErrorCode then\n        log.debug('acyq 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('acyq child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n                \tlog.debug('acyq    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t\n            end\n        end\n    else\n        log.debug('acyq 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('acyq ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('acyq  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 7, -5)\n  \n    for i = 1, 17 do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 4 + 1, (i - 1) * 4 + 4)\n       \n        DataList[i] = iota.hexToUShort(singleChannelDataHex, 0, 'B')/10\n    \tlog.debug('acyq  getAllDatas  DataList[%s]=%s',i,DataList[i])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('acyq datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[17]\n    if childDevice ~= nil then\n      if childDevice.uplink.capabilities[1].formula.metaid == '21d229f6-5f74-405a-a06e-1f7dc84dbcb3' then\n           local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('acyq module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('acyq module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n\t\t        log.debug('acyq freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=temp,\n                frequency = freq,\n                physicalvalue = Phy\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('acyq has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('acyq has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata,deviceModule)\n    log.debug('acyq 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,0,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('acyqa module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("acyq [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n  \n    return true\n    --crc\nend	INLINE	2020-12-16 17:24:15.987+08	2020-12-17 09:29:31.662+08	2020-12-16	\N
ba7f2cc2-0e6e-47f7-913b-feccd613654e	acyq_zx32	\N		1.0	7471567c-43bd-422d-9d05-9742a9a517c5	7471567c-43bd-422d-9d05-9742a9a517c5	f	7471567c-43bd-422d-9d05-9742a9a517c5	Lua	onData = function()\nend\n\nstart = function()\n    log.debug('acyq_zx32 loadscript%s,moduleId=%s', 'BK_WaterLevel.lua', device.uplink.props.module or '[nil]')\n    log.debug('acyq_zx32 device=%s', json.encode(device))\n    out = {\n        type = 2,\n        data = {},\n        result = {}\n    }\n    local endian = 'B'\n    local buff = ''\n    local moduleNo\n    if json.encode(device.uplink.props) ~= 'null' then\n        moduleNo = device.uplink.props.module\n        --模块通道优先接口获取\n\n        log.debug('acyq_zx32 设备模块通道接口获取m=%s,c=%sjson.encode(moduleNo)=%smoduleId=%s', moduleNo, channelNo, json.encode(moduleNo), device.props.moduleId)\n    else\n        moduleNo = device.props.moduleId\n\n        log.debug('acyq_zx32 设备模块通道属性获取m=%s,c=%s接口props=%s', moduleNo, channelNo, json.encode(device.uplink.props))\n    end\n\n    buff = iota.appendHexByte(buff, moduleNo, endian)\n\tbuff = buff .. '0300640021'\n    buff=iota.appendHexCrc(buff, 'L' ,0)\n \n    ok, resp = ctx:ssend(buff, 15000)\n\n    if ok then\n    local ErrorCode = IsValidOut(resp,moduleNo)\n    if ErrorCode then\n        log.debug('acyq_zx32 数据有效=%s', resp)\n        allSubData = getAllDatas(resp)\n        --发送指令\n        local subdevices = device.dnlinks[1].devices\n\n        if subdevices ~= nil then\n            for index, child in pairs(subdevices) do --插入16个通道\n          \tlog.debug('acyq_zx32 child=%s', json.encode(child))\n                channelNo = tonumber(child.uplink.props.channel)\n\t\t\t\t\n                \tlog.debug('acyq_zx32    解析通道%s数据', channelNo)\n               \t \tresult = unmarshall(child, allSubData, channelNo, moduleNo) ---插入数据\n                \ttable.insert(out.data, result)\n            \t\n            end\n        end\n    else\n        log.debug('acyq_zx32 数据无效=%s', resp)\n        out.result = {code = ercode, msg = erormsg}\n    end\n    else\n        log.debug('acyq_zx32 ok=false')\n        out.result = {code = '1002', msg = 'ok=false'}\n    end\n\n    local resultData = json.encode(out)\n    log.debug('acyq_zx32  resultData=%s', resultData)\n    ctx:done(resultData)\nend\n\ngetAllDatas = function(hexStr)\n    local DataList = {}\n    local subDataArea = string.sub(hexStr, 7, -5)\n  \n    for i = 1, 33 do\n        local singleChannelDataHex = string.sub(subDataArea, (i - 1) * 4 + 1, (i - 1) * 4 + 4)\n       \n        DataList[i] = iota.hexToUShort(singleChannelDataHex, 0, 'B')/10\n    \tlog.debug('acyq_zx32  getAllDatas  DataList[%s]=%s',i,DataList[i])\n    end\n    return DataList\nend\n\nunmarshall = function(childDevice, datatable, subChannelId, moduleNoStr)\n    log.debug('acyq_zx32 datatable=%s', json.encode(datatable))\n    local subData = {\n        type = 1,\n        data = {},\n        device = '',\n        result = {}\n    }\n    local freq = datatable[subChannelId]\n    local temp = datatable[33]\n    if childDevice ~= nil then\n      if childDevice.uplink.capabilities[1].formula.metaid == '61c4b4b9-028e-4788-8af4-c97e1084d1c8' then\n           local k = tonumber(childDevice.uplink.capabilities[1].formula.props.K)\n\n            local f0 = tonumber(childDevice.uplink.capabilities[1].formula.props.Fo)\n\t\t\tlocal kt = tonumber(childDevice.uplink.capabilities[1].formula.props.Kt)\n\t\t\tlocal t0 = tonumber(childDevice.uplink.capabilities[1].formula.props.To)\n log.debug('acyq_zx32 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s,kt=%s,temp=%s', moduleNoStr, subChannelId, childDevice.id, k, f0, freq,kt,temp)\n            --log.debug('acyq_zx32 module=%s,channel=%s [%s] formula params k=%s,f0=%s,freq=%s', moduleNoStr, i, childDevice.id, k, f0, freq)\n            if k ~= nil and f0 ~= nil and kt ~= nil and t0 ~= nil and freq ~= nil and temp ~= nil then\n                Phy = k * (freq ^ 2 - f0 ^ 2)+ kt * (temp - t0) \n            end\n        end\n\t\t        log.debug('acyq_zx32 freq=%s,Phy=%s', freq, Phy)\n        singleData = {\n            data = {\n\t\t\t    temperature=temp,\n                frequency = freq,\n                physicalvalue = Phy\n            },\n            device = childDevice.id,\n            type = 1\n        }\n    end\n    --end\n\n    --log.debug('shjy_acqunit_1600 m=%s,data=%s', moduleNoStr, result_Str)\n    return singleData\nend\n--获取传感器信息\nfunction getDeviceInfo(channel, moduleNoId)\n    if device.dnlinks ~= nil then\n        for k, dnlink in pairs(device.dnlinks) do\n            for v, subdevice in pairs(dnlink.devices) do\n                if tonumber(subdevice.uplink.props.channel) == tonumber(channel) then\n                    return subdevice\n                end\n            end\n        end\n        log.debug('acyq_zx32 has no device module=%s channel=%s', moduleid, channel)\n        return nil -- 没有找到匹配的传感器\n    else\n        log.debug('acyq_zx32 has no subdevices.')\n        return nil -- 没有子设备\n    end\nend\n\nIsValidOut = function(checkdata,deviceModule)\n    log.debug('acyq_zx32 开始校验数据=%s', checkdata)\n\tlocal dataModule= iota.hexToByte(checkdata,0,'B')\n    if (deviceModule~=tostring(dataModule)) then\n        errormsg = string.format('acyq_zx32 module is wrong,dataModule=%s≠%s',dataModule,deviceModule)\n        errcode = 1001\n        log.debug("acyq_zx32 [%s] %s",deviceModule,errormsg)\n        return false\n    end\n\n  \n    return true\n    --crc\nend	INLINE	2020-12-16 16:44:50.509+08	2020-12-17 09:29:52.877+08	2020-12-16	\N
0b7198e4-94bf-46f6-a467-d5d3c514267e	fs_airclear_0901	\N	飞尚自研空气净化器协议mqtt	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    log.debug('home_airclear_0901 device=%s', json.encode(device))\n    --onData('')\nend\n\nlocal binCache = {}\n\n--receiveStr='{ "params": { "CurrentTemperature": 32.899999999999999, "CurrentHumidity": 60, "PM25Level": 6, "TVOC": 3, "WindSpeed": 5, "ChildLockSwitch": 1, "IonsSwitch": 1, "PowerSwitch": 1 } }'\nonData = function(mq_body)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    local receiveStr = mq_body.payload\n    log.debug('home_airclear_0901 receiveStr=%s', receiveStr)\n    --解析数据\n    local dataObject = json.decode(receiveStr)\n    if dataObject ~= nil then\n        --判断数据源 是appProxy 还是 device\n        --设备数据类型\n        -- code:0x01 设备信息上报\n        -- code:0x02 心跳上报\n        -- code:0x03 周期上报  设备数据与状态\n        -- code:0x04 报警上报\n        -- code:0x05 时间同步上报\n        if dataObject.from == 'device' then\n            if dataObject.code == 3 then\n                if dataObject.params ~= nil then\n                    out.data.temperature = dataObject.params.TEMP\n                    out.data.humidity = dataObject.params.HUMI\n                    out.data.pm1 = dataObject.params.PM1_0\n                    out.data.pm25 = dataObject.params.PM2_5\n                    out.data.pm10 = dataObject.params.PM10\n                    out.data.ch2o = dataObject.params.CH2O --甲醛\n                    out.data.tvoc = dataObject.params.TVOC\n\n                    out.data.powerlock = dataObject.params.power --电源开关\n                    out.data.windgear = dataObject.params.wind --风速挡位  0:自动,1：1档，2：2档，3：3档， 4：4档\n                    out.data.timcnt = dataObject.params.timcnt --定时个数\n                    out.data.uvlock = dataObject.params.UV --UV杀菌灯开关  1：打开   0：关闭\n                    out.data.NegativeO2lock = dataObject.params['-O2'] --负氧离子开关状态  1：打开   0：关闭\n                    out.data.humilock = dataObject.params.humista --加湿器开关状态      1：打开   0：关闭\n                    out.data.humigear = dataObject.params.humigear -- 加湿器挡位  1:L1 2:L2 3:L3 4:L4\n                    out.data.wchargelock = dataObject.params.wcharge --无线充电开关  1：打开   0：关闭\n                    out.data.childlock = dataObject.params.chlock --童锁开关状态1：打开   0：关闭\n                else\n                    log.debug('home_airclear_0901 dataObject.params =nil')\n                end\n\n                sendMsgToTopic(dataObject, 'app')\n                ackToDevice(dataObject)\n            elseif dataObject.code == 5 then --时间同步 服务器\n                local timeNow = getTime()\n                dataObject.from = 'server'\n                dataObject.cmd = 64011\n                dataObject.params = {}\n                dataObject.params.date = timeNow\n                --数据发送到appProxy    周期上报的数据 code= 0x03和\n                sendMsgToTopic(dataObject, 'device')\n            elseif dataObject.code == 13 then --远程升级触发后，设备回应 要第几包，平台按需发送\n                --升级文件流 缓存,拆解成多个小包\n                -- binCache.buff = dataObject.params.binBuff\n                -- binCache.size = string.len(binCache.buff)\n                -- binCache.params = getPackageList(binCache.buff)\n                log.debug('home_airclear_0901  平台收到 设备升级 回应，准备下发升级包')\n\n                --设备拒绝升级，则把消息转给app\n                if dataObject.params.sign == 1 then\n                    dataObject.result=1\n                    sendMsgToTopic(dataObject, 'app')\n                else\n                    dataObject.from = 'server'\n                    dataObject.cmd = 523\n                    local frameIndex = dataObject.params.frame\n                    dataObject.params = {}\n                    dataObject.params.frame = frameIndex\n                    local appendCrc16 = iota.appendHexCrc(binCache.buff, 'L', 0)\n                    local crc16 = string.sub(appendCrc16, -4, -1)\n                    dataObject.params.crc16 = tonumber(crc16, 16)\n                    dataObject.params.bin = binCache.params.subList[frameIndex]\n                    dataObject.params.len = string.len(dataObject.params.bin)\n                    --数据发送到appProxy    周期上报的数据 code= 0x03和\n                    sendMsgToTopic(dataObject, 'device')\n                end\n            end\n        elseif dataObject.from == 'app' then --appproxy 转发的websocket消息\n            if dataObject.code == 13 then --远程升级 app接口触发mq升级通知\n                log.debug('home_airclear_0901  平台收到 app升级 通知，准备 通知 设备')\n                --升级文件流 缓存,拆解成多个小包\n                binCache.buff = dataObject.params.binBuff\n                binCache.params = getPackageList(binCache.buff)\n\n                dataObject.from = 'server'\n                dataObject.type = 257\n                dataObject.cmd = 523\n                dataObject.params = {}\n                dataObject.params.type = 1\n                dataObject.params.count = binCache.params.count\n                dataObject.params.size = binCache.params.size\n                --数据发送到appProxy    周期上报的数据 code= 0x03和\n                sendMsgToTopic(dataObject, 'device')\n            end\n        else\n            log.debug('home_airclear_0901  非法数据 =%s', receiveStr)\n        end\n    else\n        log.debug('home_airclear_0901 dataObject =nil')\n    end\n\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('home_airclear_0901 result=%s', json.encode(out))\n    if next(out.data) ~= nil or next(out.result) ~= nil then\n        ctx:notify(resultData)\n    end\nend\n\n--升级文件流 拆解成 1024 长度单位的小包\ngetPackageList = function(allPackageStr)\n    local packageParams = {subList = {}}\n    local len = string.len(allPackageStr)\n    local count = len / 1024\n    local packageCount = math.ceil(count)\n    packageParams.size = len\n    packageParams.count = packageCount\n\n    for i = 1, packageCount, 1 do\n        local start_index = (i - 1) * 1024 + 1\n        local end_index = start_index + 1024 -- 如果 越界，lua自动取实际的 结束索引\n        local subPackage = string.sub(allPackageStr, start_index, end_index)\n        --最后一包判断长度是否是 4的倍数  不足写0x1A\n        if i == packageCount then\n            repeat\n                local subPackage_len = string.len(subPackage) / 4\n                local min_subPackage_len = math.floor(subPackage_len)\n                local diff_value = subPackage_len - min_subPackage_len\n                if diff_value > 0 then\n                    subPackage = subPackage .. '1A' --最大1024,必须是4的整数倍，不足写0x1A\n                end\n            until (diff_value == 0)\n        end\n        packageParams.subList[i] = subPackage\n    end\n    return packageParams\nend\n\nsendMsgToTopic = function(msg, msgTo)\n    local topic\n    if msgTo == 'app' then\n        --将指令发送到  appProxy的topic\n        topic = msg.ID .. '_app_rece' --appProxy接收的topic 只有 airclaer_app_rece 一个，代理程序自己通过消息内的ID区分 与维持的多个webcosket连接分别通信\n    elseif msgTo == 'device' then\n        topic = msg.ID .. '_device_rece'\n    end\n    local msgStr = json.encode(msg)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug('home_airclear_0901   [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s', msg.ID, topic, msgStr, ok, ack)\nend\n\nackToDevice = function(rawDataObject)\n    local topic = rawDataObject.ID .. '_device_rece'\n    rawDataObject.from = 'server'\n    rawDataObject.cmd = 64011\n    rawDataObject.params = 'null'\n    rawDataObject.result = 0\n    local msgStr = json.encode(rawDataObject)\n    local ok, ack = ctx:asend({type = 'mqtt', payload = msgStr, topic = topic})\n    log.debug(\n        'home_airclear_0901   服务器 应答 设备 [%s] data 发送 topic=[%s] body=%s 完毕 ok=%s,ack=%s',\n        rawDataObject.ID,\n        topic,\n        msgStr,\n        ok,\n        ack\n    )\nend\n\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\ngetTime = function()\n    local timenum = os.time()\n    local dateStr = os.date('%Y-%m-%d %H:%M:%S', timenum)\n    --空气净化器最后还要带 周几下去\n    -- 2018-4-28 16:10:12\n    local datelist = Split(dateStr, ' ')\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n\n    local week = getWeek_comm(year, month, day)\n    local recordTime = string.format('%s %s', dateStr, week)\n    return recordTime\nend\n\n--获取星期几\nfunction getWeek_comm(y, m, d)\n    if m == 1 or m == 2 then\n        m = m + 12\n        y = y - 1\n    end\n    local m1, _ = math.modf(3 * (m + 1) / 5)\n    local m2, _ = math.modf(y / 4)\n    local m3, _ = math.modf(y / 100)\n    local m4, _ = math.modf(y / 400)\n\n    local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4) % 7\n    local weekTab = {\n        ['0'] = 1,\n        ['1'] = 2,\n        ['2'] = 3,\n        ['3'] = 4,\n        ['4'] = 5,\n        ['5'] = 6,\n        ['6'] = 0 --周日是 0\n    }\n    return weekTab[tostring(iWeek)]\nend	INLINE	2020-09-01 11:26:02.151+08	2020-09-09 17:12:15.528+08	2020-09-01	\N
82a3c5f5-d951-4702-9359-77faffd51db3	hs_qj	\N		1.0	01fdd48b-2211-42be-9e66-b2a76c84567d	01fdd48b-2211-42be-9e66-b2a76c84567d	f	01fdd48b-2211-42be-9e66-b2a76c84567d	Lua	\nstart=function()\n    log.debug("start %s, ctx=%s", "hs_qj.lua",json.encode(ctx.device))\n\t\n    local endian = 'B'\n    local buff=''\n\t\n\t\n\tlocal moduleNo=device.uplink.props.module --模块 通道 优先接口获取\t\t\n\t\t\n    buff=iota.appendHexByte(buff,moduleNo, endian)  \n    buff=iota.appendHexByte(buff, 0x03, endian) \n    buff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x01, endian) \n\tbuff=iota.appendHexByte(buff, 0x00, endian) \n    buff=iota.appendHexByte(buff, 0x04, endian)  \n    buff=iota.appendHexCrc(buff, 'L' ,0)                      \n\n    log.debug("hs_qj,m=%s, send=%s",moduleNo,buff)\n    ok,resp=ctx:ssend(buff,15000)\n    local result="{}"\n    if ok then\n        result = unmarshall(resp,moduleNo)\n\t\tctx:done(result)\n    else\n\t     --\n\t\tlocal errout={\n\t\t\tdata ={},\n\t\t\tresult = {}\n\t\t}\n\t  errout.result = {code = 1001, msg = '超时'}      \n\t  ctx:done(json.encode(errout))\n\tend\nend\n\n\n\nunmarshall=function(hex,moduleNoStr)\n    log.debug("hs_qj m=%s, recv =%s",moduleNoStr,hex)\n    local out={\n        type = 1,\n        data ={},\n        result = {}\n    }\n\n     local ErrorCode = IsValid(hex,moduleNoStr)\n    if ErrorCode then\n        \n        local anglex =iota.hexToFloat(hex,3,'B')\n\t\tlocal angley =iota.hexToFloat(hex,7,'B')\n    \n        out.data = {           \n            anglex=anglex,\n\t\t\tangley\t=angley\n\t\t\t}\n    else\n        out.result = {code=errcode,msg=errormsg} \n    end\n    log.debug("hs_qj m=%s,data=%s",moduleNoStr,json.encode(out))\n    return json.encode(out)\nend\n \nIsValid=function(data,moduleCheck)\n\tlocal checkLen=string.len(data)/2\n    if data == nil or checkLen~= 13 then\n        errormsg = string.format('无效的数据长度=%s≠13',checkLen)\n        errcode = 1002\n        return false\n    end\n    local dataModule=iota.hexToByte(data,0,'B')\n    if tostring(moduleCheck) ~= tostring(dataModule) then\t\n        errormsg = string.format('无效的模块号=%s≠%s',dataModule,moduleCheck)\n        errcode = 1003\n        return false\n    end\n    return true\n--crc\nend\n\n \n\n	INLINE	2020-12-21 16:58:26.456+08	2020-12-21 17:04:39.857+08	2020-12-21	\N
2a36b97c-3cf6-4a5e-a331-d00b21babbac	hzyy_9020	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_9020   device=%s', json.encode(device))\n\t--log.debug('hzyy_9020   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_9020', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_9020 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_9020 [%s] 时间戳', tonumber(timeStamps))\n    local deep_disp_x=tonumber(bodypkg['deep_disp_x'])\n\tlocal deep_disp_y=tonumber(bodypkg['deep_disp_y'])\n\tlocal deep_disp_z=tonumber(bodypkg['deep_disp_z'])\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t xlength=deep_disp_x,\n\t ylength=deep_disp_y,\n\t zlength=deep_disp_z\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_9020 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-27 13:53:33.767+08	2021-01-28 08:45:10.669+08	2021-01-27	\N
8b4200a6-9a48-45e4-8fc2-5e1fe6f756c1	hzyy_PTYYPS2010	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_PTYYPS2010   device=%s', json.encode(device))\n\t--log.debug('hzyy_PTYYPS2010   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_PTYYPS2010', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_PTYYPS2010 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_PTYYPS2010 [%s] 时间戳', tonumber(timeStamps))\n    local surface_disp_x=tonumber(bodypkg['surface_disp_x'])\n\tlocal surface_disp_y=tonumber(bodypkg['surface_disp_y'])\n\tlocal surface_disp_z=tonumber(bodypkg['surface_disp_z'])\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t x=surface_disp_x,\n\t y=surface_disp_y,\n\t z=surface_disp_z\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_PTYYPS2010 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-27 13:51:34.683+08	2021-01-28 08:58:50.638+08	2021-01-27	\N
21edfabe-f147-4b03-8f4f-11b3c2c7ca9b	hyzz_1014	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_1014   device=%s', json.encode(device))\n\t--log.debug('hzyy_1014   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_1014', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_1014 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1014 [%s] 时间戳', tonumber(timeStamps))\n    local rainfall=tonumber(bodypkg['rainfall'])\n\tlocal daily_rainfall=tonumber(bodypkg['daily_rainfall'])\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t rainfall=rainfall,\n\t daily_rainfall=daily_rainfall\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_1014 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-28 09:37:24.734+08	2021-01-28 09:37:24.734+08	2021-01-28	\N
8f65f84a-9034-41ca-a6ea-dba981e7f031	hzyy_1010	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_1010   device=%s', json.encode(device))\n\t--log.debug('hzyy_1010   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_1010', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_1010 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1010 [%s] 时间戳', tonumber(timeStamps))\n    local crack_width=tonumber(bodypkg['crack_width'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t length=crack_width\n\t\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_1010 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-28 09:41:08.598+08	2021-01-28 09:41:08.598+08	2021-01-28	\N
37f02599-3f46-4f8a-ba94-dc6515a792d4	hzyy_1016	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_1016   device=%s', json.encode(device))\n\t--log.debug('hzyy_1016   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_1016', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_1016 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_1016 [%s] 时间戳', tonumber(timeStamps))\n    local soil_moisture=tonumber(bodypkg['soil_moisture'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t soil_moisture=soil_moisture\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_1016 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-28 09:57:28.926+08	2021-01-28 10:03:50.931+08	2021-01-28	\N
210c09d0-3125-4f4a-964c-c9889116f99e	hzyy_9050	\N		1.0	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	f	1c2a6d1f-3ebd-47dd-80b6-db55d55982d8	Lua	\nstart = function()\n    --log.debug('hzyy_9050   device=%s', json.encode(device))\n\t--log.debug('hzyy_9050   device=%s', '1111111111111111111111111111111111111111111111')\nend\n\nonData = function(httpbody, index)\n    local out = {\n        data = {},\n        result = {},\n        type = 1\n    }\n    \n    local moduleNo = device.uplink.props.id --模块\n\n    log.debug('hzyy_9050', moduleNo, httpbody.Body, type(httpbody.Body))\n\t\n    local bodydataStr = httpbody.Body\n\t\n   \n    log.debug('hzyy_9050 [%s] bodydataStr=%s', moduleNo, bodydataStr)\n\tlocal bodypkg = json.decode(bodydataStr)\n\tif next(bodypkg) == nil then \n\tack = {type = 'http', code = 200, body ='{ "acq": "error" }'}\n\tctx:asend(ack)\t\n\treturn\n\tend \n    local sn=bodypkg['sn']\n\tlocal timeStamps=tonumber(bodypkg['stamp'])\n\tlocal timenow=os.date('%Y-%m-%dT%H:%M:%S+08:00', timeStamps)\n\tlog.debug('hzyy_9050 [%s] 时间戳', tonumber(timeStamps))\n    local mud_level=tonumber(bodypkg['mod_level'])\n\n\t\n\n\n\t\n\t\n\tif tonumber(sn) == tonumber(moduleNo) then\n\tout={\n      data={\n\t length=mud_level\n\t\n      },\n\t time=timenow\n\t}\n\tend\n\n\t\n        log.debug('hzyy_9050 [%s] json.encode(out)=%s', moduleNo, json.encode(out))\n        ctx:notify(json.encode(out))\n\t\t\n\t\tack = {type = 'http', code = 200, body ='{ "acq": "ok" }'}\n\t\tctx:asend(ack)\nend\n\nasend_HttpResponse = function(bodyString)\n    ack = {type = 'http', code = 200, body ='OK'}\n    ctx:asend(ack)\nend	INLINE	2021-01-28 09:48:18.837+08	2021-01-29 13:47:04.683+08	2021-01-28	\N
30e579ff-ba81-471e-9de7-6f0063c049c4	FS-RTU-Disaster	\N		1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	start = function()\n    --log.debug("fs_rtu_data  , device=%s=%s",json.encode(device))\nend\n\ngetJson = function(rawStr)\n    local startIndex = string.find(rawStr, '{', 1)\n    local str = string.sub(rawStr, startIndex, -1)\n    str = string.gsub(str, '=', ':')\n    str = string.gsub(str, ';', ',')\n    return str\nend\n\ngetValue = function(rawStr)\n    rawStr = string.gsub(rawStr, ':', '')\n\trawStr = string.gsub(rawStr, '"', '')\n\trawStr = string.gsub(rawStr, '{', '')\n\trawStr = string.gsub(rawStr, '}', '')\n    return rawStr\nend\n\nonData = function(hex)\n    --log.debug('fs_rtu_data  , device=%s', json.encode(device))\n    log.debug('fs_rtu_data payload=%s', hex.payload)\n    --全局\n    out = {\n        data = {},\n        result = {},\n        type = 2\n    }\n\tlocal jsonstr = getJson(hex.payload)\n\t--log.debug('fs_rtu_data jsonstr=%s', jsonstr)\n\tlocal Index = string.find(jsonstr, ':', 1)\n\tlocal modulestr = string.sub(jsonstr, 3, Index-2)\n\tlocal datastr = string.sub(jsonstr, Index+1, -1)\n\t--log.debug('fs_rtu_data datastr=%s', datastr)\n\tlocal datas = Split(datastr,'},')\n\tlocal channel = "1"\n\tlocal datetime=os.date("%Y-%m-%dT%H:%M:%S+08:00")\n\n\tfor key,value in pairs(datas) do\n\t\tlog.debug('fs_rtu_data value %s=%s', key,value)\n\t\tlocal state = string.find(value, '_ZT_', 1)\n\t\tlog.debug('fs_rtu_data ZT=%s', state)\n\t\tif state ~= nil then\n\t\t\tlocal states = Split(value,'},')\n\t\t\tfor i,v in pairs(states) do\t\t\t\t\n\t\t\t\tlocal temps = Split(v,':')\n\t\t\t\tlocal title = getValue(temps[1])\n\t\t\t\tlocal jdata = string.sub(v, 1, -2)\n\t\t\t\tlocal jsons = json.decode(jdata)\n\t\t\t\tfor i,v in pairs(jsons) do\n\t\t\t\t\tpowerstr = v.battery_dump_energy\n\t\t\t\t\tver = v.sw_version\n\t\t\t\t\tlog.debug('fs_rtu_data power %s ver %s', powerstr,ver)\n\t\t\t\tend\n\t\t\t\tlocal devinfo = Split(title,'_')\n\t\t\t\tchannel = devinfo[3]\n\t\t\t\tlocal rstd = {\n\t\t\t\t\tdata={\n\t\t\t\t\t\t_data_type='diag',\n\t\t\t\t\t\tR={\n\t\t\t\t\t\t\tbase ={\n\t\t\t\t\t\t\t\tcc={\n\t\t\t\t\t\t\t\t\tgpi={\n\t\t\t\t\t\t\t\t\t\tgp = powerstr\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tfw={\n\t\t\t\t\t\t\t\t\tv= tostring(ver)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnode = {\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\t\t\t\t\n\t\t\t\t\tdevice=device.id,\n\t\t\t\t\ttype=1,\n\t\t\t\t\ttime=datetime  \n\t\t\t\t}\t\t\n\t\t\t\ttable.insert(out.data,rstd)\n\t\t\t\t\n\t\t\tend\t\t\n\t\telse\n\t\t\tlog.debug('fs_rtu_data value=%s', value)\n\t\t\tlocal values = Split(value,',"')\t\t\t\n\t\t\tfor i,v in pairs(values) do\n\t\t\t\tlog.debug('fs_rtu_data data_v=%s', v)\n\t\t\t\tlocal temps = Split(v,'":')\n\t\t\t\tlocal title = getValue(temps[1])\n\t\t\t\tlocal devinfo = Split(title,'_')\n\t\t\t\tchannel = devinfo[3]\n\t\t\t\tvv = getValue(temps[2])\n\n\t\t\t\t\n\t\t\t\tif #(temps)==3 then --历史数据\t\t\t\t\n\t\t\t\t\tlocal dates = string.sub(temps[2], 3, -6)\n\t\t\t\t\tlog.debug('fs_rtu_data dates %s',dates)\n\t\t\t\t\tdatetime = unixtimestamp(dates)\n\t\t\t\t\tlog.debug('fs_rtu_data datetime %s',datetime)\n\t\t\t\t\tlog.debug('fs_rtu_data temps[3] %s',temps[3])\n\t\t\t\t\tvv = getValue(temps[3])\n\t\t\t\tend\n\t\t\t\tlocal type = devinfo[2]\t\t\t\t\n\t\t\t\tlocal module =modulestr..type\n\t\t\t\tlog.debug('fs_rtu_data module=%s,channel =%s', module,channel)\n\t\t\t\tlocal subdevice = getDeviceInfo(module,channel)\n\t\t\t\tlog.debug('fs_rtu_data subdevice=%s', json.encode(subdevice))\n\t\t\t\t\n\t\t\t\tif type == "QJ" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlog.debug('fs_rtu_data count=%s', tostring(#(value)))\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tx = value[1],\n\t\t\t\t\t\ty = value[2],\n\t\t\t\t\t\tz = value[3],\n\t\t\t\t\t\tangle = value[4],\n\t\t\t\t\t\ttrend = value[5]\n\t\t\t\t\t}\n\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\telseif type == "LF" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\n\t\t\t\telseif type == "GP" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "SW" then --深部位移 测斜GG\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tanglex = value[1],\n\t\t\t\t\t\tangley = value[2]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "JS" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tgx = value[1],\n\t\t\t\t\t\tgy = value[2],\n\t\t\t\t\t\tgz = value[3]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "ZD" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "YL" and devinfo[1] == "L2" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "TY" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tphysicalvalue = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "CS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "DS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tdisplacement = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "YL" and devinfo[1] == "L3" then --雨量\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\tphysicalvalue = value[1]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\n\t\t\t\telseif type == "QW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\ttemperature = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "TW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\ttemperature = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\n\t\t\t\telseif type == "HS" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterrate = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "NW" then\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterlevel = vv\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\n\t\t\t\telseif type == "SY" then\n\t\t\t\t\tlocal value = Split(vv,',')\n\t\t\t\t\tlocal vol = {\n\t\t\t\t\t\twaterlevel = value[1],\n\t\t\t\t\t\ttemperature = value[2]\n\t\t\t\t\t}\n\t\t\t\t\trst = {\n\t\t\t\t\t\tdata=vol,\n\t\t\t\t\t\tdevice=subdevice.id,\n\t\t\t\t\t\ttype=1,\n\t\t\t\t\t\ttime= datetime\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\tend\n\t\t\t\ttable.insert(out.data,rst)\n\t\t\tend\n\t\tend\n\t\t\n\n\tend\n    local resultData = json.encode(out) --输出传递到平台上\n    log.debug('fs_rtu_data result_out=%s', json.encode(out))\n    ctx:notify(resultData)\nend\n\nGenrateTimeSet = function()\n    local cmd = '$cmd=settime&time=' .. tostring(os.date('%Y-%m-%d %H:%M:%S'))\n    devmodule = device.props.moduleid\n    local r1, ok = redis.get(device.id .. '_settime')\n    if ok and r1 ~= nil then\n        log.debug('fs_rtu_data tiem crc=%s ，r1=%s', tostring(os.date('%Y-%m-%d')), r1)\n        if r1 ~= tostring(os.date('%Y-%m-%d')) then\n            local topic = devmodule .. '_settime'\n            local okdev, ack = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n            if okdev then\n                local crc = os.date('%Y-%m-%d')\n                redis.set(device.id .. '_settime', tostring(crc))\n            end\n        end\n    else --第一次下发\n        local topic = devmodule .. '_settime'\n        local okdev_first, ack_first = ctx:asend({type = 'mqtt', payload = cmd, topic = topic})\n        if okdev_first then\n            local crc = os.date('%Y-%m-%d')\n            redis.set(device.id .. '_settime', tostring(crc))\n        end\n    end\nend\n\n\n--字符串ascii->字符\ntoStrHex = function(hex)\n    local len = string.len(hex) / 2\n    local str = ''\n    for i = 1, len do\n        local bi = iota.hexToByte(hex, i - 1, 'B')\n        local ascii = string.format('%c', bi)\n        str = str .. ascii\n    end\n    return str\nend\n\n--string split函数\nSplit = function(szFullString, szSeparator)\n    local nFindStartIndex = 1\n    local nSplitIndex = 1\n    local nSplitArray = {}\n    while true do\n        local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)\n        if not nFindLastIndex then\n            nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))\n            break\n        end\n        nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)\n        nFindStartIndex = nFindLastIndex + string.len(szSeparator)\n        nSplitIndex = nSplitIndex + 1\n    end\n    return nSplitArray\nend\n\n--获取采集仪下面的通道信息\nfunction getDeviceInfo(module, channel)\n    local resensor = nil\n    if device.dnlinks ~= nil then\n        --log.debug("fsidaufile =%s:deviceInfo=%s",filename,json.encode(device))\n        for i, link in pairs(device.dnlinks) do\n            --log.debug("fsidaufile: = %s link=%s",filename,json.encode(link))\n            for j, subdevice in pairs(link.devices) do\n                --log.debug("fs_rtu_data module = %s sensor=%s",module,json.encode(subdevice))\n                if subdevice.uplink.props.module == module and subdevice.uplink.props.channel == channel then\n                    --log.debug("fsidaufile:= %s final_sensor %s=%s",filename,subdevice.uplink.props.sensorid,sensorId)\n                    resensor = subdevice\n                end\n            end\n        end\n    end\n    return resensor\nend\n\nunixtimestamp = function(dateStr)\n    -- 2018-4-28 16:10:12\n    local dateStr = string.sub(dateStr, 1, -2)\n    local datelist = Split(dateStr, 'T')\n    --log.debug('fs_rtu_data datelist[1]= %s ', datelist[1])\n    local datebegin = Split(datelist[1], '-')\n    local dateend = Split(datelist[2], ':')\n    local year = tonumber(datebegin[1])\n    log.debug('fs_rtu_data year= %s ', year)\n    local month = tonumber(datebegin[2])\n    local day = tonumber(datebegin[3])\n    local hour = tonumber(dateend[1]) + 8\n    local minute = tonumber(dateend[2])\n    local second = tonumber(dateend[3])\n    timenum = os.time({year = year, month = month, day = day, hour = hour, min = minute, sec = second})\n    local recordTime = os.date('%Y-%m-%dT%H:%M:%S+08:00', timenum)\n    log.debug('fs_rtu_data recordTime= %s ', recordTime)\n    return recordTime\nend	INLINE	2021-02-03 09:33:11.518+08	2021-02-24 17:46:01.467+08	2021-02-03	\N
5bb196bf-cd42-4ba7-a01f-33e961f6510e	fs_peopleCounDKQ_987	\N	道肯奇	1.0	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	f	ce2d7eb2-e56e-422e-8bbe-95dfa18e32f8	Lua	 start = function()\n  \nend\n\nonData = function(hex)\n    local moduleNo = device.uplink.props.module --模块 通道 优先接口获取\n    local result = protocol_decode(hex, moduleNo)\n    --判断是否快到0点 清空计数\n    --mayClear(moduleNo)\n    log.debug('fs_peopleCounter_987  result=%s', result)\n    ctx:notify(result)\nend\n\nfunction mayClear(moduleNo)\n    local hourNow = tonumber(os.date('%H'))\n    local minuteNow = tonumber(os.date('%M'))\n    if hourNow >= 23 or minuteNow > 30 then --23点30后清空数据\n        local clearBuff = protocol_encode(moduleNo)\n        ctx:asend(clearBuff)\n       log.debug('fs_peopleCounter_987  清空指令=%s', clearBuff)\n    end\nend\n\nfunction protocol_encode(moduleNoStr)\n    local BE = 'B'\n    local buff = '63'\n    buff = iota.appendHexByte(buff, moduleNoStr, BE) --\n    buff = iota.appendHexByte(buff, 0x02, BE) --\n    buff = iota.appendHexByte(buff, 0x07, BE)\n    buff = iota.appendHexByte(buff, 0x00, BE)--00 全部清空  \n    buff = buff .. CS8(1, buff)\n    buff = iota.appendHexByte(buff, 0x0d, BE)\n    return buff\n   --63 00 02 07 00 f7 0d\nend\n\n-- returns: 结果, 原始值, 计算后值\n--正确回复   aaff00141a4531303937333830352003250830300006000700c0\n--原始数据   --"inCount": 6,\n-- "outCount": 7\nfunction protocol_decode(hex, moduleNoCheck)\n    local data = hex\n    --存储结果\n    local out = {\n        type = 1,\n        data = {},\n        result = {}\n    }\n    log.debug(data)\n    --判断数据有效性\n    local ErrorCode = IsValid(hex, moduleNoCheck)\n    if ErrorCode then\n\n        local inCount = iota.hexToUShort(hex,20,'B')   --getCount(inBytesStr) --  :进人数\n        local outCount = iota.hexToUShort(hex,22,'B') --  :出人数\n\n\n        out.data = {\n            inCount = inCount,\n            outCount = outCount,\n            stayCount = inCount - outCount\n        }\n    else\n        out.result = {code = errcode, msg = errormsg}\n    end\n    return json.encode(out)\nend\n\nIsValid = function(data, deviceModule)\n    log.debug('fs_peopleCounter_987   开始校验 data=%s', data)\n    local dataLen = string.len(data) / 2\n    if data == nil or dataLen ~= 26 then\n        errormsg = string.format('数据长度无效=%s≠22', dataLen)\n        errcode = 1002\n        return false\n    end\n    if iota.hexToByte(data, 4, 'B') ~= 0x1a then\n        errormsg = 'CMD is not right'\n        errcode = 1003\n        return false\n    end\n    local dataModule = iota.hexToByte(data, 1, 'B')\n    if tonumber(deviceModule) ~= dataModule then\n        errormsg = string.format('无效的模块号=%s≠%s', dataModule, deviceModule)\n        errcode = 1004\n        return false\n    end\n    return true\nend\n\n--校验和8\nCS8 = function(start, buff)\n    local lcr = 0\n    for i = start, string.len(buff) / 2 - 1 do\n        lcr = lcr + tonumber(string.sub(buff, 1 + 2f * i, 2 * (i + 1)), 16)\n    end\n    local value =bit.band(lcr, 0xff)\n    return string.format('%02x',value)\nend\n\ngetCount = function(bytes_8)\n    local bytes_len = string.len(bytes_8) / 2\n    local count = 0\n    for i = 0, bytes_len - 1, 1 do\n        local num = tonumber(string.sub(bytes_8, -2 * i - 2, -2 * i - 1))\n        count = count + num * math.pow(10, i)\n    end\n    return count\nend	INLINE	2021-02-04 15:44:37.97+08	2021-02-22 11:12:22.085+08	2021-02-04	\N
\.


--
-- Data for Name: Recharge; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Recharge" (id, out_trade_no, fee, "oldBalance", "newBalance", time_start, time_end, "payChannel", "paymentState", transaction_id, bank_type, openid, product_id, "createdAt", "updatedAt", "accountId") FROM stdin;
\.


--
-- Data for Name: Resource; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Resource" (id, name, "desc", type, key, "createBy", "createdAt", "updatedAt", "resourceGroupId") FROM stdin;
\.


--
-- Data for Name: ResourceGroup; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ResourceGroup" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: ResourceOperationType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ResourceOperationType" (name, "desc", type, "createdAt", "updatedAt", "resourceTypeKey") FROM stdin;
所有		protocol.*	2017-08-12 17:07:00.344+08	2017-08-12 17:07:00.344+08	Protocol
查看		protocol.view	2017-08-12 17:07:00.35+08	2017-08-12 17:07:00.35+08	Protocol
修改		protocol.update	2017-08-12 17:07:00.354+08	2017-08-12 17:07:00.354+08	Protocol
删除		protocol.delete	2017-08-12 17:07:00.356+08	2017-08-12 17:07:00.356+08	Protocol
所有		interface.*	2017-08-12 17:07:00.359+08	2017-08-12 17:07:00.359+08	Interface
查看		interface.view	2017-08-12 17:07:00.361+08	2017-08-12 17:07:00.361+08	Interface
修改		interface.update	2017-08-12 17:07:00.365+08	2017-08-12 17:07:00.365+08	Interface
删除		interface.delete	2017-08-12 17:07:00.368+08	2017-08-12 17:07:00.368+08	Interface
所有		device.*	2017-08-12 17:07:00.371+08	2017-08-12 17:07:00.371+08	Device
查看		device.view	2017-08-12 17:07:00.374+08	2017-08-12 17:07:00.374+08	Device
修改		device.update	2017-08-12 17:07:00.376+08	2017-08-12 17:07:00.376+08	Device
删除		device.delete	2017-08-12 17:07:00.379+08	2017-08-12 17:07:00.379+08	Device
所有		thing.*	2017-08-12 17:07:00.382+08	2017-08-12 17:07:00.382+08	Thing
查看		thing.view	2017-08-12 17:07:00.384+08	2017-08-12 17:07:00.384+08	Thing
修改		thing.update	2017-08-12 17:07:00.388+08	2017-08-12 17:07:00.388+08	Thing
删除		thing.delete	2017-08-12 17:07:00.39+08	2017-08-12 17:07:00.39+08	Thing
所有		deploy.*	2017-08-12 17:07:00.393+08	2017-08-12 17:07:00.393+08	Deploy
查看		deploy.view	2017-08-12 17:07:00.397+08	2017-08-12 17:07:00.397+08	Deploy
修改		deploy.update	2017-08-12 17:07:00.399+08	2017-08-12 17:07:00.399+08	Deploy
\.


--
-- Data for Name: ResourceType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ResourceType" (name, type, "desc", model, "nameField", "idField", "descField", key, url, "createdAt", "updatedAt", shareable) FROM stdin;
协议	Protocol	协议资源	ProtocolMeta	name	id	desc	protocols	meta/protocols	2017-08-12 17:07:00.321+08	2017-08-12 17:07:00.321+08	t
接口	Interface	接口资源	InterfaceMeta	name	id	desc	interfaces	meta/interfaces	2017-08-12 17:07:00.323+08	2017-08-12 17:07:00.323+08	t
设备	Device	设备资源	DeviceMeta	name	id	desc	devices	meta/devices	2017-08-12 17:07:00.327+08	2017-08-12 17:07:00.327+08	t
Things	Thing	Thing资源	Thing	name	id	desc	things	things	2017-08-12 17:07:00.332+08	2017-08-12 17:07:00.332+08	t
Deploy	Deploy	设备布设	Thing	name	id	desc	things	things	2017-08-12 17:07:00.338+08	2017-08-12 17:07:00.338+08	t
规则	Rule	规则	Rule	name	id	desc	rules	rules	2017-08-12 17:07:00.341+08	2017-08-12 17:07:00.341+08	f
\.


--
-- Data for Name: Role; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Role" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: Rule; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Rule" (id, name, "desc", flow, "createBy", "belongTo", investor, public, enable, release, "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: Scheme; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Scheme" (id, name, mode, "interval", unit, repeats, "beginTime", "endTime", "notifyMode", "capabilityNotifyMode", "createdAt", "updatedAt", "dimensionId") FROM stdin;
\.


--
-- Data for Name: ServicePackage; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."ServicePackage" (id, name, "serviceType", "desc", specification, price, "createdAt", "updatedAt") FROM stdin;
9063f949-bcd9-40ec-a0cf-36607a41fc35	专业版	PROFESSIONAL	专业版	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":100,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":100,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":100,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":100,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":100,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":500000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":100,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":60,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"5×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"5×10客户服务"}}}	999900	2017-08-12 17:07:00.505+08	2017-08-12 17:07:00.505+08
0e63fe1b-20db-4bf5-802e-37a260efd075	企业版	CUSTOMIZED	企业版	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":1000,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":1000,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":1000,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":1000,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":1000,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":2000000,"unit":"+次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":200,"unit":"+次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":15,"unit":"分钟","extend":"内"},"s2":{"viewType":2,"available":true,"name":"7×10技术支持","desc":""},"s3":{"viewType":2,"available":true,"name":"7×10客户服务"}}}	5999900	2017-08-12 17:07:00.508+08	2017-08-12 17:07:00.508+08
41916745-25aa-4430-a208-b989702d4866	免费版	FREE	免费版	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":5,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":5,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":5,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":5,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":5,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":10000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":5,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":24,"unit":"小时","extend":"内"},"s2":{"viewType":2,"available":false,"name":"一对一技术支持","desc":""},"s3":{"viewType":2,"available":false,"name":"一对一客户服务"}}}	0	2017-08-12 17:07:00.5+08	2017-08-12 17:07:00.5+08
2a08af80-dbb2-4f25-90cd-6b4ff9b8411c	基础版	BASIC	基础版	{"resources":{"interface":{"viewType":1,"available":true,"name":"接口","desc":"您可以创建多少个接口","quota":20,"unit":"个","extend":""},"protocol":{"viewType":1,"available":true,"name":"协议","desc":"您可以创建多少条协议","quota":20,"unit":"条","extend":""},"device":{"viewType":1,"available":true,"name":"设备","desc":"您可以创建多少个设备","quota":20,"unit":"个","extend":""},"thing":{"viewType":1,"available":true,"name":"Thing","desc":"","quota":20,"unit":"个","extend":""},"rule":{"viewType":1,"available":true,"name":"规则","desc":"您可以创建多少个规则","quota":20,"unit":"个","extend":""}},"server":{"times":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":50000,"unit":"次/月"},"frequency":{"viewType":1,"available":true,"name":"接口调用","desc":"","quota":15,"unit":"次/秒"},"s1":{"viewType":1,"available":true,"name":"工单响应","desc":"","quota":24,"unit":"小时","extend":"内"},"s2":{"viewType":2,"available":false,"name":"一对一技术支持","desc":""},"s3":{"viewType":2,"available":false,"name":"一对一客户服务"}}}	99900	2017-08-12 17:07:00.503+08	2017-08-12 17:07:00.503+08
\.


--
-- Data for Name: SubUser; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."SubUser" (id, dependent, enable, "createdAt", "updatedAt", "parentId", "userId") FROM stdin;
\.


--
-- Name: SubUser_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."SubUser_id_seq"', 829, true);


--
-- Data for Name: TestCase; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."TestCase" (id, name, "desc", annotations, "deviceProperties", "capabilityProperties", "interfaceProperties", "formulaProperties", "deviceCapabilityId", "createdAt", "updatedAt", "thingId", "testSuiteId", param) FROM stdin;
\.


--
-- Data for Name: TestCaseAssert; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."TestCaseAssert" (id, type, operator, value, expect, index, "createdAt", "updatedAt", "testCaseId") FROM stdin;
\.


--
-- Data for Name: TestCaseExecutionRecord; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."TestCaseExecutionRecord" (id, result, "taskId", "startedAt", "endedAt", elapsed, log, data, "createdAt", "updatedAt", "testCaseId") FROM stdin;
\.


--
-- Data for Name: TestCaseInput; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."TestCaseInput" (id, value, index, "createdAt", "updatedAt", "testCaseId") FROM stdin;
\.


--
-- Data for Name: TestSuite; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."TestSuite" (id, name, "desc", annotations, "createdAt", "updatedAt", "thingId") FROM stdin;
\.


--
-- Data for Name: Thing; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."Thing" (id, name, "desc", image, lng, lat, "createBy", "belongTo", investor, enable, release, public, "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: User; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."User" (id, username, password, type, email, mobile, "actEmail", gravatar, key, secret, "createdAt", "updatedAt", "isAdmin", "deletedAt") FROM stdin;
77804162-837d-4ff9-96c0-beb8e8888f8e	iota	35d4da11e2589bf03821ec777ddfe53761fa9b70	Master	admin@iota.com	\N	f	\N	7447858021aa925555373b85a54d997cb24c8bb8	87317f5c340398c09cbd130970d1923a6895a26c	2021-03-03 16:11:13.364+08	2021-03-03 16:11:13.364+08	f	\N
\.


--
-- Data for Name: UserApp; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."UserApp" (id, name, key, secret, platform, "extInfo", "createdAt", "updatedAt", "userId") FROM stdin;
5fcad599-d516-4345-b2a9-b01e8bc29dcc	fscloud	0e42afe6e71055cea25fc0083d816426c5867b89	35e0adf0a30345a3104a06bb8a648400d94a9c20	Web	\N	2021-03-03 16:14:08.211+08	2021-03-03 16:14:08.211+08	77804162-837d-4ff9-96c0-beb8e8888f8e
\.


--
-- Data for Name: UserGroup; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."UserGroup" (id, name, "desc", "createBy", "createdAt", "updatedAt") FROM stdin;
\.


--
-- Data for Name: UserGroupUser; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."UserGroupUser" (id, type, accept, "invitedCode", enable, "createdAt", "updatedAt", "userId", "userGroupId") FROM stdin;
\.


--
-- Data for Name: UserNotice; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."UserNotice" (id, "createdAt", "updatedAt", "userId", "noticeId") FROM stdin;
\.


--
-- Data for Name: UserOAuth2; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."UserOAuth2" (id, platform, "openId", "createdAt", "updatedAt", "userId") FROM stdin;
\.


--
-- Data for Name: WorkOrder; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."WorkOrder" (id, title, "desc", status, "operatorId", "operatorName", email, mobile, "createdAt", "updatedAt", "workOrderTypeId", "userId") FROM stdin;
\.


--
-- Data for Name: WorkOrderType; Type: TABLE DATA; Schema: public; Owner: -
--

COPY public."WorkOrderType" (id, name, key, "desc", "createdAt", "updatedAt") FROM stdin;
1	账号	account		2017-08-12 17:07:00.529+08	2017-08-12 17:07:00.529+08
\.


--
-- Name: WorkOrderType_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('public."WorkOrderType_id_seq"', 1, true);


--
-- Name: Accessory Accessory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Accessory"
    ADD CONSTRAINT "Accessory_pkey" PRIMARY KEY (id);


--
-- Name: AccountServicePackage AccountServicePackage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AccountServicePackage"
    ADD CONSTRAINT "AccountServicePackage_pkey" PRIMARY KEY (id);


--
-- Name: Account Account_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Account"
    ADD CONSTRAINT "Account_pkey" PRIMARY KEY (id);


--
-- Name: AlertCategory AlertCategory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertCategory"
    ADD CONSTRAINT "AlertCategory_pkey" PRIMARY KEY (id);


--
-- Name: AlertDefinition AlertDefinition_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertDefinition"
    ADD CONSTRAINT "AlertDefinition_pkey" PRIMARY KEY (id);


--
-- Name: AlertEventType AlertEventType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertEventType"
    ADD CONSTRAINT "AlertEventType_pkey" PRIMARY KEY (id);


--
-- Name: Authorization Authorization_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Authorization"
    ADD CONSTRAINT "Authorization_pkey" PRIMARY KEY (id);


--
-- Name: CapabilityCategory CapabilityCategory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityCategory"
    ADD CONSTRAINT "CapabilityCategory_pkey" PRIMARY KEY (id);


--
-- Name: CapabilityFormula CapabilityFormula_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityFormula"
    ADD CONSTRAINT "CapabilityFormula_pkey" PRIMARY KEY (id);


--
-- Name: CapabilityMetaInterface CapabilityMetaInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMetaInterface"
    ADD CONSTRAINT "CapabilityMetaInterface_pkey" PRIMARY KEY (id);


--
-- Name: CapabilityMeta CapabilityMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMeta"
    ADD CONSTRAINT "CapabilityMeta_pkey" PRIMARY KEY (id);


--
-- Name: CapabilityProperty CapabilityProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityProperty"
    ADD CONSTRAINT "CapabilityProperty_pkey" PRIMARY KEY (id);


--
-- Name: CompanyCertification CompanyCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CompanyCertification"
    ADD CONSTRAINT "CompanyCertification_pkey" PRIMARY KEY (id);


--
-- Name: Dashboard Dashboard_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Dashboard"
    ADD CONSTRAINT "Dashboard_pkey" PRIMARY KEY (id);


--
-- Name: DeviceCapability DeviceCapability_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCapability"
    ADD CONSTRAINT "DeviceCapability_pkey" PRIMARY KEY (id);


--
-- Name: DeviceCertification DeviceCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCertification"
    ADD CONSTRAINT "DeviceCertification_pkey" PRIMARY KEY (id);


--
-- Name: DeviceInterface DeviceInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceInterface"
    ADD CONSTRAINT "DeviceInterface_pkey" PRIMARY KEY (id);


--
-- Name: DeviceMetaInterface DeviceMetaInterface_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceMetaInterface"
    ADD CONSTRAINT "DeviceMetaInterface_pkey" PRIMARY KEY (id);


--
-- Name: DeviceMeta DeviceMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceMeta"
    ADD CONSTRAINT "DeviceMeta_pkey" PRIMARY KEY (id);


--
-- Name: DeviceProperty DeviceProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceProperty"
    ADD CONSTRAINT "DeviceProperty_pkey" PRIMARY KEY (id);


--
-- Name: Device Device_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Device"
    ADD CONSTRAINT "Device_pkey" PRIMARY KEY (id);


--
-- Name: DimensionCapability DimensionCapability_deviceCapabilityId_dimensionId_key; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DimensionCapability"
    ADD CONSTRAINT "DimensionCapability_deviceCapabilityId_dimensionId_key" UNIQUE ("deviceCapabilityId", "dimensionId");


--
-- Name: DimensionCapability DimensionCapability_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DimensionCapability"
    ADD CONSTRAINT "DimensionCapability_pkey" PRIMARY KEY (id);


--
-- Name: Dimension Dimension_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Dimension"
    ADD CONSTRAINT "Dimension_pkey" PRIMARY KEY (id);


--
-- Name: FeedBack FeedBack_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FeedBack"
    ADD CONSTRAINT "FeedBack_pkey" PRIMARY KEY (id);


--
-- Name: FilteredResource FilteredResource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FilteredResource"
    ADD CONSTRAINT "FilteredResource_pkey" PRIMARY KEY (id);


--
-- Name: FormulaMeta FormulaMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaMeta"
    ADD CONSTRAINT "FormulaMeta_pkey" PRIMARY KEY (id);


--
-- Name: FormulaProperty FormulaProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaProperty"
    ADD CONSTRAINT "FormulaProperty_pkey" PRIMARY KEY (id);


--
-- Name: InterfaceMeta InterfaceMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceMeta"
    ADD CONSTRAINT "InterfaceMeta_pkey" PRIMARY KEY (id);


--
-- Name: InterfaceProperty InterfaceProperty_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceProperty"
    ADD CONSTRAINT "InterfaceProperty_pkey" PRIMARY KEY (id);


--
-- Name: InterfaceType InterfaceType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceType"
    ADD CONSTRAINT "InterfaceType_pkey" PRIMARY KEY (id);


--
-- Name: LayoutLink LayoutLink_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_pkey" PRIMARY KEY (id);


--
-- Name: LayoutNode LayoutNode_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutNode"
    ADD CONSTRAINT "LayoutNode_pkey" PRIMARY KEY (id);


--
-- Name: Layout Layout_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Layout"
    ADD CONSTRAINT "Layout_pkey" PRIMARY KEY (id);


--
-- Name: Migrations Migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Migrations"
    ADD CONSTRAINT "Migrations_pkey" PRIMARY KEY (name);


--
-- Name: NoticeType NoticeType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."NoticeType"
    ADD CONSTRAINT "NoticeType_pkey" PRIMARY KEY (id);


--
-- Name: Notice Notice_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Notice"
    ADD CONSTRAINT "Notice_pkey" PRIMARY KEY (id);


--
-- Name: OperationRecord OperationRecord_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."OperationRecord"
    ADD CONSTRAINT "OperationRecord_pkey" PRIMARY KEY (id);


--
-- Name: Order Order_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Order"
    ADD CONSTRAINT "Order_pkey" PRIMARY KEY (id);


--
-- Name: Permission Permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Permission"
    ADD CONSTRAINT "Permission_pkey" PRIMARY KEY (id);


--
-- Name: PersonCertification PersonCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."PersonCertification"
    ADD CONSTRAINT "PersonCertification_pkey" PRIMARY KEY (id);


--
-- Name: PropertyType PropertyType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."PropertyType"
    ADD CONSTRAINT "PropertyType_pkey" PRIMARY KEY (id);


--
-- Name: ProtocolCertification ProtocolCertification_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ProtocolCertification"
    ADD CONSTRAINT "ProtocolCertification_pkey" PRIMARY KEY (id);


--
-- Name: ProtocolMeta ProtocolMeta_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ProtocolMeta"
    ADD CONSTRAINT "ProtocolMeta_pkey" PRIMARY KEY (id);


--
-- Name: Recharge Recharge_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Recharge"
    ADD CONSTRAINT "Recharge_pkey" PRIMARY KEY (id);


--
-- Name: ResourceGroup ResourceGroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ResourceGroup"
    ADD CONSTRAINT "ResourceGroup_pkey" PRIMARY KEY (id);


--
-- Name: ResourceOperationType ResourceOperationType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ResourceOperationType"
    ADD CONSTRAINT "ResourceOperationType_pkey" PRIMARY KEY (type);


--
-- Name: ResourceType ResourceType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ResourceType"
    ADD CONSTRAINT "ResourceType_pkey" PRIMARY KEY (type);


--
-- Name: Resource Resource_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Resource"
    ADD CONSTRAINT "Resource_pkey" PRIMARY KEY (id);


--
-- Name: Role Role_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Role"
    ADD CONSTRAINT "Role_pkey" PRIMARY KEY (id);


--
-- Name: Rule Rule_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Rule"
    ADD CONSTRAINT "Rule_pkey" PRIMARY KEY (id);


--
-- Name: Scheme Scheme_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Scheme"
    ADD CONSTRAINT "Scheme_pkey" PRIMARY KEY (id);


--
-- Name: ServicePackage ServicePackage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ServicePackage"
    ADD CONSTRAINT "ServicePackage_pkey" PRIMARY KEY (id);


--
-- Name: SubUser SubUser_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."SubUser"
    ADD CONSTRAINT "SubUser_pkey" PRIMARY KEY (id);


--
-- Name: TestCaseAssert TestCaseAssert_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseAssert"
    ADD CONSTRAINT "TestCaseAssert_pkey" PRIMARY KEY (id);


--
-- Name: TestCaseExecutionRecord TestCaseExecutionRecord_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseExecutionRecord"
    ADD CONSTRAINT "TestCaseExecutionRecord_pkey" PRIMARY KEY (id);


--
-- Name: TestCaseInput TestCaseInput_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseInput"
    ADD CONSTRAINT "TestCaseInput_pkey" PRIMARY KEY (id);


--
-- Name: TestCase TestCase_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCase"
    ADD CONSTRAINT "TestCase_pkey" PRIMARY KEY (id);


--
-- Name: TestSuite TestSuite_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestSuite"
    ADD CONSTRAINT "TestSuite_pkey" PRIMARY KEY (id);


--
-- Name: Thing Thing_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Thing"
    ADD CONSTRAINT "Thing_pkey" PRIMARY KEY (id);


--
-- Name: UserApp UserApp_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserApp"
    ADD CONSTRAINT "UserApp_pkey" PRIMARY KEY (id);


--
-- Name: UserGroupUser UserGroupUser_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserGroupUser"
    ADD CONSTRAINT "UserGroupUser_pkey" PRIMARY KEY (id);


--
-- Name: UserGroupUser UserGroupUser_userId_userGroupId_key; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserGroupUser"
    ADD CONSTRAINT "UserGroupUser_userId_userGroupId_key" UNIQUE ("userId", "userGroupId");


--
-- Name: UserGroup UserGroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserGroup"
    ADD CONSTRAINT "UserGroup_pkey" PRIMARY KEY (id);


--
-- Name: UserNotice UserNotice_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserNotice"
    ADD CONSTRAINT "UserNotice_pkey" PRIMARY KEY (id);


--
-- Name: UserOAuth2 UserOAuth2_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserOAuth2"
    ADD CONSTRAINT "UserOAuth2_pkey" PRIMARY KEY (id);


--
-- Name: User User_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."User"
    ADD CONSTRAINT "User_pkey" PRIMARY KEY (id);


--
-- Name: WorkOrderType WorkOrderType_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."WorkOrderType"
    ADD CONSTRAINT "WorkOrderType_pkey" PRIMARY KEY (id);


--
-- Name: WorkOrder WorkOrder_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."WorkOrder"
    ADD CONSTRAINT "WorkOrder_pkey" PRIMARY KEY (id);


--
-- Name: DeviceCapability_capabilityMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceCapability_capabilityMetaId_fkey_index" ON public."DeviceCapability" USING btree ("capabilityMetaId");


--
-- Name: DeviceCapability_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceCapability_deviceId_fkey_index" ON public."DeviceCapability" USING btree ("deviceId");


--
-- Name: DeviceCapability_deviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceCapability_deviceInterfaceId_fkey_index" ON public."DeviceCapability" USING btree ("deviceInterfaceId");


--
-- Name: DeviceCapability_protocolMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceCapability_protocolMetaId_fkey_index" ON public."DeviceCapability" USING btree ("protocolMetaId");


--
-- Name: DeviceInterface_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceInterface_deviceId_fkey_index" ON public."DeviceInterface" USING btree ("deviceId");


--
-- Name: DeviceInterface_deviceMetaInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DeviceInterface_deviceMetaInterfaceId_fkey_index" ON public."DeviceInterface" USING btree ("deviceMetaInterfaceId");


--
-- Name: Device_deviceMetaId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "Device_deviceMetaId_fkey_index" ON public."Device" USING btree ("deviceMetaId");


--
-- Name: Device_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "Device_thingId_fkey_index" ON public."Device" USING btree ("thingId");


--
-- Name: DimensionCapability_deviceCapabilityId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DimensionCapability_deviceCapabilityId_fkey_index" ON public."DimensionCapability" USING btree ("deviceCapabilityId");


--
-- Name: DimensionCapability_dimensionId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "DimensionCapability_dimensionId_fkey_index" ON public."DimensionCapability" USING btree ("dimensionId");


--
-- Name: Dimension_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "Dimension_thingId_fkey_index" ON public."Dimension" USING btree ("thingId");


--
-- Name: LayoutLink_fromDeviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutLink_fromDeviceInterfaceId_fkey_index" ON public."LayoutLink" USING btree ("fromDeviceInterfaceId");


--
-- Name: LayoutLink_fromLayoutNodeId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutLink_fromLayoutNodeId_fkey_index" ON public."LayoutLink" USING btree ("fromLayoutNodeId");


--
-- Name: LayoutLink_parentLinkId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutLink_parentLinkId_fkey_index" ON public."LayoutLink" USING btree ("parentLinkId");


--
-- Name: LayoutLink_toDeviceInterfaceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutLink_toDeviceInterfaceId_fkey_index" ON public."LayoutLink" USING btree ("toDeviceInterfaceId");


--
-- Name: LayoutLink_toLayoutNodeId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutLink_toLayoutNodeId_fkey_index" ON public."LayoutLink" USING btree ("toLayoutNodeId");


--
-- Name: LayoutNode_deviceId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutNode_deviceId_fkey_index" ON public."LayoutNode" USING btree ("deviceId");


--
-- Name: LayoutNode_layoutId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "LayoutNode_layoutId_fkey_index" ON public."LayoutNode" USING btree ("layoutId");


--
-- Name: Layout_thingId_fkey_index; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "Layout_thingId_fkey_index" ON public."Layout" USING btree ("thingId");


--
-- Name: Accessory Accessory_workOrderId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Accessory"
    ADD CONSTRAINT "Accessory_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES public."WorkOrder"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: AccountServicePackage AccountServicePackage_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AccountServicePackage"
    ADD CONSTRAINT "AccountServicePackage_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: AccountServicePackage AccountServicePackage_servicePackageId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AccountServicePackage"
    ADD CONSTRAINT "AccountServicePackage_servicePackageId_fkey" FOREIGN KEY ("servicePackageId") REFERENCES public."ServicePackage"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Account Account_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Account"
    ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: AlertDefinition AlertDefinition_alertCategoryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertDefinition"
    ADD CONSTRAINT "AlertDefinition_alertCategoryId_fkey" FOREIGN KEY ("alertCategoryId") REFERENCES public."AlertCategory"(id) ON DELETE CASCADE;


--
-- Name: AlertDefinition AlertDefinition_alertEventTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."AlertDefinition"
    ADD CONSTRAINT "AlertDefinition_alertEventTypeId_fkey" FOREIGN KEY ("alertEventTypeId") REFERENCES public."AlertEventType"(id) ON DELETE CASCADE;


--
-- Name: Authorization Authorization_resourceGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Authorization"
    ADD CONSTRAINT "Authorization_resourceGroupId_fkey" FOREIGN KEY ("resourceGroupId") REFERENCES public."ResourceGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Authorization Authorization_roleId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Authorization"
    ADD CONSTRAINT "Authorization_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES public."Role"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Authorization Authorization_userGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Authorization"
    ADD CONSTRAINT "Authorization_userGroupId_fkey" FOREIGN KEY ("userGroupId") REFERENCES public."UserGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityFormula CapabilityFormula_capabilityId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityFormula"
    ADD CONSTRAINT "CapabilityFormula_capabilityId_fkey" FOREIGN KEY ("capabilityId") REFERENCES public."DeviceCapability"(id) ON DELETE CASCADE;


--
-- Name: CapabilityFormula CapabilityFormula_formulaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityFormula"
    ADD CONSTRAINT "CapabilityFormula_formulaId_fkey" FOREIGN KEY ("formulaId") REFERENCES public."FormulaMeta"(id) ON DELETE CASCADE;


--
-- Name: CapabilityMetaInterface CapabilityMetaInterface_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMetaInterface"
    ADD CONSTRAINT "CapabilityMetaInterface_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityMetaInterface CapabilityMetaInterface_deviceMetaInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMetaInterface"
    ADD CONSTRAINT "CapabilityMetaInterface_deviceMetaInterfaceId_fkey" FOREIGN KEY ("deviceMetaInterfaceId") REFERENCES public."DeviceMetaInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityMeta CapabilityMeta_capabilityCategoryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMeta"
    ADD CONSTRAINT "CapabilityMeta_capabilityCategoryId_fkey" FOREIGN KEY ("capabilityCategoryId") REFERENCES public."CapabilityCategory"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityMeta CapabilityMeta_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMeta"
    ADD CONSTRAINT "CapabilityMeta_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityMeta CapabilityMeta_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityMeta"
    ADD CONSTRAINT "CapabilityMeta_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: CapabilityProperty CapabilityProperty_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityProperty"
    ADD CONSTRAINT "CapabilityProperty_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CapabilityProperty CapabilityProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CapabilityProperty"
    ADD CONSTRAINT "CapabilityProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: CompanyCertification CompanyCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."CompanyCertification"
    ADD CONSTRAINT "CompanyCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: Dashboard Dashboard_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Dashboard"
    ADD CONSTRAINT "Dashboard_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;


--
-- Name: DeviceCapability DeviceCapability_capabilityMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCapability"
    ADD CONSTRAINT "DeviceCapability_capabilityMetaId_fkey" FOREIGN KEY ("capabilityMetaId") REFERENCES public."CapabilityMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceCapability DeviceCapability_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCapability"
    ADD CONSTRAINT "DeviceCapability_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceCapability DeviceCapability_deviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCapability"
    ADD CONSTRAINT "DeviceCapability_deviceInterfaceId_fkey" FOREIGN KEY ("deviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceCapability DeviceCapability_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCapability"
    ADD CONSTRAINT "DeviceCapability_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: DeviceCertification DeviceCertification_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCertification"
    ADD CONSTRAINT "DeviceCertification_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON DELETE CASCADE;


--
-- Name: DeviceCertification DeviceCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceCertification"
    ADD CONSTRAINT "DeviceCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;


--
-- Name: DeviceInterface DeviceInterface_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceInterface"
    ADD CONSTRAINT "DeviceInterface_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceInterface DeviceInterface_deviceMetaInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceInterface"
    ADD CONSTRAINT "DeviceInterface_deviceMetaInterfaceId_fkey" FOREIGN KEY ("deviceMetaInterfaceId") REFERENCES public."DeviceMetaInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceMetaInterface DeviceMetaInterface_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceMetaInterface"
    ADD CONSTRAINT "DeviceMetaInterface_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceMetaInterface DeviceMetaInterface_interfaceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceMetaInterface"
    ADD CONSTRAINT "DeviceMetaInterface_interfaceMetaId_fkey" FOREIGN KEY ("interfaceMetaId") REFERENCES public."InterfaceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceMeta DeviceMeta_vendorId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceMeta"
    ADD CONSTRAINT "DeviceMeta_vendorId_fkey" FOREIGN KEY ("vendorId") REFERENCES public."CompanyCertification"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceProperty DeviceProperty_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceProperty"
    ADD CONSTRAINT "DeviceProperty_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DeviceProperty DeviceProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DeviceProperty"
    ADD CONSTRAINT "DeviceProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Device Device_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Device"
    ADD CONSTRAINT "Device_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Device Device_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Device"
    ADD CONSTRAINT "Device_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DimensionCapability DimensionCapability_deviceCapabilityId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DimensionCapability"
    ADD CONSTRAINT "DimensionCapability_deviceCapabilityId_fkey" FOREIGN KEY ("deviceCapabilityId") REFERENCES public."DeviceCapability"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: DimensionCapability DimensionCapability_dimensionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."DimensionCapability"
    ADD CONSTRAINT "DimensionCapability_dimensionId_fkey" FOREIGN KEY ("dimensionId") REFERENCES public."Dimension"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Dimension Dimension_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Dimension"
    ADD CONSTRAINT "Dimension_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: FormulaMeta FormulaMeta_deviceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaMeta"
    ADD CONSTRAINT "FormulaMeta_deviceMetaId_fkey" FOREIGN KEY ("deviceMetaId") REFERENCES public."DeviceMeta"(id) ON DELETE CASCADE;


--
-- Name: FormulaProperty FormulaProperty_formulaMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaProperty"
    ADD CONSTRAINT "FormulaProperty_formulaMetaId_fkey" FOREIGN KEY ("formulaMetaId") REFERENCES public."FormulaMeta"(id) ON DELETE CASCADE;


--
-- Name: FormulaProperty FormulaProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."FormulaProperty"
    ADD CONSTRAINT "FormulaProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON DELETE CASCADE;


--
-- Name: InterfaceMeta InterfaceMeta_interfaceTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceMeta"
    ADD CONSTRAINT "InterfaceMeta_interfaceTypeId_fkey" FOREIGN KEY ("interfaceTypeId") REFERENCES public."InterfaceType"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: InterfaceProperty InterfaceProperty_interfaceMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceProperty"
    ADD CONSTRAINT "InterfaceProperty_interfaceMetaId_fkey" FOREIGN KEY ("interfaceMetaId") REFERENCES public."InterfaceMeta"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: InterfaceProperty InterfaceProperty_propertyTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."InterfaceProperty"
    ADD CONSTRAINT "InterfaceProperty_propertyTypeId_fkey" FOREIGN KEY ("propertyTypeId") REFERENCES public."PropertyType"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutLink LayoutLink_fromDeviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_fromDeviceInterfaceId_fkey" FOREIGN KEY ("fromDeviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutLink LayoutLink_fromLayoutNodeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_fromLayoutNodeId_fkey" FOREIGN KEY ("fromLayoutNodeId") REFERENCES public."LayoutNode"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutLink LayoutLink_parentLinkId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_parentLinkId_fkey" FOREIGN KEY ("parentLinkId") REFERENCES public."LayoutLink"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutLink LayoutLink_toDeviceInterfaceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_toDeviceInterfaceId_fkey" FOREIGN KEY ("toDeviceInterfaceId") REFERENCES public."DeviceInterface"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutLink LayoutLink_toLayoutNodeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutLink"
    ADD CONSTRAINT "LayoutLink_toLayoutNodeId_fkey" FOREIGN KEY ("toLayoutNodeId") REFERENCES public."LayoutNode"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutNode LayoutNode_deviceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutNode"
    ADD CONSTRAINT "LayoutNode_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES public."Device"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: LayoutNode LayoutNode_layoutId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."LayoutNode"
    ADD CONSTRAINT "LayoutNode_layoutId_fkey" FOREIGN KEY ("layoutId") REFERENCES public."Layout"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Layout Layout_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Layout"
    ADD CONSTRAINT "Layout_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Notice Notice_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Notice"
    ADD CONSTRAINT "Notice_type_fkey" FOREIGN KEY (type) REFERENCES public."NoticeType"(id) ON UPDATE CASCADE;


--
-- Name: OperationRecord OperationRecord_workOrderId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."OperationRecord"
    ADD CONSTRAINT "OperationRecord_workOrderId_fkey" FOREIGN KEY ("workOrderId") REFERENCES public."WorkOrder"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: Order Order_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Order"
    ADD CONSTRAINT "Order_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Order Order_servicePackageId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Order"
    ADD CONSTRAINT "Order_servicePackageId_fkey" FOREIGN KEY ("servicePackageId") REFERENCES public."ServicePackage"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Permission Permission_operationTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Permission"
    ADD CONSTRAINT "Permission_operationTypeKey_fkey" FOREIGN KEY ("operationTypeKey") REFERENCES public."ResourceOperationType"(type) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Permission Permission_resourceTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Permission"
    ADD CONSTRAINT "Permission_resourceTypeKey_fkey" FOREIGN KEY ("resourceTypeKey") REFERENCES public."ResourceType"(type) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Permission Permission_roleId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Permission"
    ADD CONSTRAINT "Permission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES public."Role"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: PersonCertification PersonCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."PersonCertification"
    ADD CONSTRAINT "PersonCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: ProtocolCertification ProtocolCertification_protocolMetaId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ProtocolCertification"
    ADD CONSTRAINT "ProtocolCertification_protocolMetaId_fkey" FOREIGN KEY ("protocolMetaId") REFERENCES public."ProtocolMeta"(id) ON DELETE CASCADE;


--
-- Name: ProtocolCertification ProtocolCertification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ProtocolCertification"
    ADD CONSTRAINT "ProtocolCertification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON DELETE CASCADE;


--
-- Name: ProtocolMeta ProtocolMeta_vendorId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ProtocolMeta"
    ADD CONSTRAINT "ProtocolMeta_vendorId_fkey" FOREIGN KEY ("vendorId") REFERENCES public."CompanyCertification"(id) ON DELETE CASCADE;


--
-- Name: Recharge Recharge_accountId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Recharge"
    ADD CONSTRAINT "Recharge_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES public."Account"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: ResourceOperationType ResourceOperationType_resourceTypeKey_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."ResourceOperationType"
    ADD CONSTRAINT "ResourceOperationType_resourceTypeKey_fkey" FOREIGN KEY ("resourceTypeKey") REFERENCES public."ResourceType"(type) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Resource Resource_resourceGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Resource"
    ADD CONSTRAINT "Resource_resourceGroupId_fkey" FOREIGN KEY ("resourceGroupId") REFERENCES public."ResourceGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: Scheme Scheme_dimensionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."Scheme"
    ADD CONSTRAINT "Scheme_dimensionId_fkey" FOREIGN KEY ("dimensionId") REFERENCES public."Dimension"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: SubUser SubUser_parentId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."SubUser"
    ADD CONSTRAINT "SubUser_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: SubUser SubUser_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."SubUser"
    ADD CONSTRAINT "SubUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestCaseAssert TestCaseAssert_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseAssert"
    ADD CONSTRAINT "TestCaseAssert_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestCaseExecutionRecord TestCaseExecutionRecord_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseExecutionRecord"
    ADD CONSTRAINT "TestCaseExecutionRecord_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestCaseInput TestCaseInput_testCaseId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCaseInput"
    ADD CONSTRAINT "TestCaseInput_testCaseId_fkey" FOREIGN KEY ("testCaseId") REFERENCES public."TestCase"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestCase TestCase_testSuiteId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCase"
    ADD CONSTRAINT "TestCase_testSuiteId_fkey" FOREIGN KEY ("testSuiteId") REFERENCES public."TestSuite"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestCase TestCase_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestCase"
    ADD CONSTRAINT "TestCase_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: TestSuite TestSuite_thingId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."TestSuite"
    ADD CONSTRAINT "TestSuite_thingId_fkey" FOREIGN KEY ("thingId") REFERENCES public."Thing"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: UserApp UserApp_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserApp"
    ADD CONSTRAINT "UserApp_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: UserGroupUser UserGroupUser_userGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserGroupUser"
    ADD CONSTRAINT "UserGroupUser_userGroupId_fkey" FOREIGN KEY ("userGroupId") REFERENCES public."UserGroup"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: UserGroupUser UserGroupUser_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserGroupUser"
    ADD CONSTRAINT "UserGroupUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: UserNotice UserNotice_noticeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserNotice"
    ADD CONSTRAINT "UserNotice_noticeId_fkey" FOREIGN KEY ("noticeId") REFERENCES public."Notice"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: UserNotice UserNotice_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserNotice"
    ADD CONSTRAINT "UserNotice_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE CASCADE;


--
-- Name: UserOAuth2 UserOAuth2_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."UserOAuth2"
    ADD CONSTRAINT "UserOAuth2_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: WorkOrder WorkOrder_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."WorkOrder"
    ADD CONSTRAINT "WorkOrder_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."User"(id) ON UPDATE CASCADE ON DELETE SET NULL;


--
-- Name: WorkOrder WorkOrder_workOrderTypeId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public."WorkOrder"
    ADD CONSTRAINT "WorkOrder_workOrderTypeId_fkey" FOREIGN KEY ("workOrderTypeId") REFERENCES public."WorkOrderType"(id) ON UPDATE CASCADE ON DELETE SET NULL;

--
-- PostgreSQL database dump complete
--

