Elvaco CMa11W

Detaljer

Typ
Drivrutin
Upplaggd av
Peter Widetun, Abelko Innovation
Version
2
Uppdaterad
2019-06-04
Skapad
2019-06-04
Kategori
M-bus, Mätare
Visningar
4519

Beskrivning

CMa11W är en temperatur- och luftfuktighetsmätare för inomhusbruk som
kommunicerar via M-Bus.

Bruksanvisning

CMa11w är en envägs trådlös M-Bus temperatur-/luftfuktighetssensor för inomhusbruk. Sensorn har en hög precision och användarvänlighet samt en lång batteritid (upp till 12 år), vilket gör den till det optimala valet för fastighetsägare. Avläsning och konfigurering av produkten utförs enkelt via trådlös M-bus eller med hjälp av en mobiltelefon (via NFC).M-Busstandard EN 13757

Juridisk information

Alla skript tillhandahålls i befintligt skick och all användning sker på eget ansvar. Felaktig använding kan leda till skadad eller förstörd utrustning.

Skript kod

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Skript för Mbus modul Elvaco CMa11W.
% Original 190603 Peter Widetun Abelko
%
DEVICETYPE CMa11W NAMED "Elvaco CMa11W" TYPEID 311311 
IS
  PARAMETER
    Id   : "Address"INT;
  PUBLIC
    IDNr : "ID number"INT;
    rec1 : "Fabrication number"[""]INT;
    rec2 : "Avarage duration"["min"]INT;
    rec3 : "RF level units (RSSI)"["dBm"]INT;
    rec4 : "Temp 0"["°C"]DEC2;
    rec5 : "Temp 1"["°C"]DEC2;
    rec6 : "Temp 2"["°C"]DEC2;
    rec7 : "Temp 0 min"["°C"]DEC2;
    rec8 : "Temp 0 max"["°C"]DEC2;
    rec9 : "Temp 1 min"["°C"]DEC2;
    rec10: "Temp 1 max"["°C"]DEC2;
    rec11: "RH 0"["%"]DEC1;
    rec12: "RH 1"["%"]DEC1;
    rec13: "RH 2"["%"]DEC1;
    rec14: "RH 0 min"["%"]DEC1;
    rec15: "RH 0 max"["%"]DEC1;
    rec16: "RH 1 min"["%"]DEC1;
    rec17: "RH 1 max"["%"]DEC1;
  PRIVATE
    tmp;
  BAUDRATE 2400;
  PARITY EVEN;
  CHRGAPTIMEOUT 10;
  CHECKSUM SUM8 SKIP 4;
  POSTBYTES 1;

  TELEGRAM Init NAMED "Init" IS
    QUESTION
      DATA[0] := HEX(10);
      DATA[1] := HEX(40);
      DATA[2] := BYTE(Id);
      DATA[3] <- BYTE(DATA :=Id+64;);
      DATA[4] := HEX(16);
    ANSWER SIZE 1
      DATA[0] = HEX(E5);
    TIMEOUT 5000
  END;

  TELEGRAM Read NAMED "Read" IS
    QUESTION
      DATA[0] := HEX(10);
      DATA[1] := HEX(7B);
      DATA[2] := BYTE(Id);
      DATA[3] <- BYTE(DATA :=Id+123;);
      DATA[4] := HEX(16);
    ANSWER SIZE 117
      DATA[0] = HEX(68);
      DATA[1] = HEX(6F);
      DATA[2] = HEX(6F);
      DATA[3] = HEX(68);
      DATA[4] = HEX(08);
      DATA[5] = BYTE(Id);
      DATA[6] = HEX(72);
      DATA[7]  -> BYTE(IDNr := (DATA & HEX(F)) + 10*(DATA & HEX(F0))/16;);
      DATA[8]  -> BYTE(IDNr := IDNr + 100*(DATA & HEX(F)) + 1000*(DATA & HEX(F0))/16;);
      DATA[9]  -> BYTE(IDNr := IDNr + 10000*(DATA & HEX(F)) + 100000*(DATA & HEX(F0))/16;);
      DATA[10] -> BYTE(IDNr := IDNr + 1000000*(DATA & HEX(F)) + 10000000*(DATA & HEX(F0))/16;);
      DATA[14] = HEX(1B);     % Medium = Reserved
      
      % DIF 1 Fabrication number, 8 bcd 
      DATA[21] -> BYTE(tmp := (DATA & HEX(F)) + 10*(DATA & HEX(F0))/16;);
      DATA[22] -> BYTE(tmp := tmp + 100*(DATA & HEX(F)) + 1000*(DATA & HEX(F0))/16;);
      DATA[23] -> BYTE(tmp := tmp + 10000*(DATA & HEX(F)) + 100000*(DATA & HEX(F0))/16;);
      DATA[24] -> BYTE(tmp := tmp + 1000000*(DATA & HEX(F)) + 10000000*(DATA & HEX(F0))/16;);

      % DIF 2 Averaging Duration, 16 bit integer 
      DATA[27] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec2:=(tmp-65536); ELSE rec2:=tmp; ENDIF;);
      
      % DIF 3 RF level units (RSSI), 8 bit integer 
      DATA[32] -> BYTE(rec3:=DATA;);
      
      % DIF 4  Temp 0, 16 bit integer 
      DATA[37] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec4 :=(tmp-65536)/100; ELSE rec4 :=tmp/100; ENDIF;);
      % DIF 5  Temp 1, 16 bit integer 
      DATA[41] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec5 :=(tmp-65536)/100; ELSE rec5 :=tmp/100; ENDIF;);
      % DIF 6  Temp 2, 16 bit integer 
      DATA[46] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec6 :=(tmp-65536)/100; ELSE rec6 :=tmp/100; ENDIF;);
      % DIF 7  Temp 0 min, 16 bit integer 
      DATA[50] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec7 :=(tmp-65536)/100; ELSE rec7 :=tmp/100; ENDIF;);
      % DIF 8  Temp 0 max, 16 bit integer 
      DATA[54] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec8 :=(tmp-65536)/100; ELSE rec8 :=tmp/100; ENDIF;);
      % DIF 9  Temp 1 min, 16 bit integer 
      DATA[58] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec9 :=(tmp-65536)/100; ELSE rec9 :=tmp/100; ENDIF;);
      % DIF 10 Temp 1 max, 16 bit integer 
      DATA[62] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec10:=(tmp-65536)/100; ELSE rec10:=tmp/100; ENDIF;);
      
      % DIF 11 Relativ fuktighet 0, 16 bit integer 
      DATA[67] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec11:=(tmp-65536)/10; ELSE rec11:=tmp/10; ENDIF;);
      % DIF 12 Relativ fuktighet 1, 16 bit integer 
      DATA[72] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec12:=(tmp-65536)/10; ELSE rec12:=tmp/10; ENDIF;);
      % DIF 13 Relativ fuktighet 2, 16 bit integer 
      DATA[78] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec13:=(tmp-65536)/10; ELSE rec13:=tmp/10; ENDIF;);
      % DIF 14 Relativ fuktighet 0 min, 16 bit integer 
      DATA[83] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec14:=(tmp-65536)/10; ELSE rec14:=tmp/10; ENDIF;);
      % DIF 15 Relativ fuktighet 0 max, 16 bit integer 
      DATA[88] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec15:=(tmp-65536)/10; ELSE rec15:=tmp/10; ENDIF;);
      % DIF 16 Relativ fuktighet 1 min, 16 bit integer 
      DATA[93] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec16:=(tmp-65536)/10; ELSE rec16:=tmp/10; ENDIF;);
      % DIF 17 Relativ fuktighet 1 max, 16 bit integer 
      DATA[98] -> WORD(tmp:=DATA; IF (tmp>32767) THEN rec17:=(tmp-65536)/10; ELSE rec17:=tmp/10; ENDIF;);

    TIMEOUT 5000
  END;
END;  

Användarnas noteringar

Du måste vara inloggad för att göra en notering. Bli medlem eller logga in. Vi använder en moderator som godkänner noteringarna innan de visas.