{"id":296935,"date":"2020-01-10T09:00:15","date_gmt":"2020-01-10T09:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=296935"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=296935","title":{"rendered":"Arduino \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0435 \u0447.2.5"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483410\/\">\u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0438 \u043d\u0430 arduino. <br \/>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/320458\/\">Arduino \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0435<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/post\/321172\/\">Arduino \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0435 \u0447.2<\/a>. <br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<pre><code class=\"cpp\">#include &lt;SPI.h&gt; #include &lt;Ethernet.h&gt; #include &lt;SoftwareSerial.h&gt; \/\/#include &lt;MFRC522.h&gt; #include &lt;EEPROM.h&gt; #include &lt;string.h&gt; \/\/#include &lt;avr\/wdt.h&gt; \/\/#include \"ICMPPing.h\"  #define POLYNOMIAL 0x08408  uint8_t reset[] = {0x02, 0x03, 0x06, 0x30, 0x41, 0xB3}; uint8_t ack[] = {0x02, 0x03, 0x06, 0x00, 0x0C2, 0x82}; uint8_t poll[] = {0x02, 0x03, 0x06, 0x33, 0xDA, 0x81}; uint8_t enable[]={0x02, 0x03, 0x0C, 0x34, 0, 0, 0x7C, 0, 0, 0, 0x66, 0xC1}; \/* uint8_t stack[] = {0x02, 0x03, 0x06, 0x35, 0xEC, 0xE4}; uint8_t sec[] = {0x02, 0x03, 0x09, 0x32, 0x00, 0x00, 0x00, 0x26, 0x1F}; uint8_t GetSt[]={0x02, 0x03, 0x06, 0x31, 0xC8, 0xA2}; uint8_t Ident[]={0x02, 0x03, 0x06, 0x37, 0xFE, 0xC7}; uint8_t GetBT[]={0x02, 0x03, 0x06, 0x41, 0x4F, 0xD1}; uint8_t Return[]={0x02, 0x03, 0x06, 0x36, 0x77, 0xD6}; uint8_t Hold[]={0x02, 0x03, 0x06, 0x38, 0x09, 0x3F}; uint8_t ExtBD[]={0x02, 0x03, 0x06, 0x3A, 0x1B, 0x1C}; uint8_t ReqSt[]={0x02, 0x03, 0x06, 0x60, 0xC4, 0xE1}; uint8_t DiBT[]={0x02, 0x03, 0x0C, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0C};*\/  #define max7219_reg_decodeMode 0x09 #define max7219_reg_intensity 0x0a #define max7219_reg_scanLimit 0x0b #define max7219_reg_shutdown 0x0c #define max7219_reg_displayTest 0x0f  const unsigned char alf[] = {0,   28, 34, 34, 34, 34, 34, 34, 28, \/\/ 0   8, 24, 8, 8, 8, 8, 8, 28,\/\/ 1   28, 34, 2, 4, 8, 16, 32, 62, \/\/ 2   28, 34, 2, 4, 2, 2, 34, 28, \/\/3   34, 34, 34, 34, 62, 2, 2, 2,   62, 32, 32, 60, 2, 2, 2, 60,   28, 32, 32, 60, 34, 34, 34, 28,   62, 2, 2, 4, 8, 16, 32, 32,   28, 34, 34, 28, 34, 34, 34, 28,   28, 34, 34, 30, 2, 2, 2, 28 };  #define DIN 16 #define CS 17 #define CLK 18  \/\/#define RST_PIN 8 \/\/#define SS_PIN 9  \/\/MFRC522 mfrc522(SS_PIN, RST_PIN); \/\/ Create MFRC522 instance MISO 12, MOSI 11, SCK 13 \/\/byte admin_key[][4] = { { 0x99, 0x3C, 0x16, 0xDB }, { 0x16, 0x95, 0x59, 0x7B }, { 0x46, 0x93, 0xF1, 0x74 }, { 0x03, 0x1F, 0x17, 0xDB }};  void(* resetFunc) (void) = 0;  SoftwareSerial mySerial(14, 15); \/\/ RX, TX  byte system100[]={92, 53, 96, 34}; \/\/IPAddress pingAddr(192,168,1,1); \/\/ \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 DNS \/\/SOCKET pingSocket = 0; \/\/int timePing = 0; \/\/int pingFAIL = 0; \/\/ \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0444\u0435\u0439\u043b\u043e\u0432 \/\/ICMPPing ping(pingSocket, (uint16_t)random(0, 255));  \/\/EthernetClient client; EthernetServer server(80); char SAM; \/\/\u043d\u043e\u043c\u0435\u0440 \u044f\u0449\u0438\u043a\u0430  unsigned long timeCount=0; bool waitACK=0; char count=0; char LNG=6; uint8_t c; uint8_t z1=0; uint8_t z2=0; uint8_t old=1;  char rele=0; char rOld=0;  bool keydown=0;  unsigned long timeAllRele=1000; unsigned long timeRele=0; unsigned long lightOff=0; unsigned long sendPoll=0; char posPay; \/\/\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u0435\u0448\u0430 char posErr; \/\/\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a char clientline[100];  unsigned long resetTime;  void setup() {   \/\/wdt_enable(WDTO_8S);   \/\/delay(2000);   \/\/if(EEPROM.read(30)==1) { EEPROM.write(30, 0); resetFunc(); }   \/\/EEPROM.write(30, 1);      pinMode(DIN,OUTPUT); pinMode(CS,OUTPUT); pinMode(CLK,OUTPUT); digitalWrite(CS, HIGH);   initLed();   pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); digitalWrite(7, HIGH); \/\/\u0441\u0432\u0435\u0442        pinMode (A5, INPUT); \/\/\u043a\u043d\u043e\u043f\u043a\u0438   if(EEPROM.read(10)==255 &amp;&amp; EEPROM.read(11)==255) { EEPROM.write(10, 0); EEPROM.write(11, 0); } \/\/\u0431\u0430\u0431\u043a\u0438 \u043d\u0430 \u0442\u0430\u0431\u043b\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0432\u044b\u0439    posPay=EEPROM.read(99);   if(posPay&lt;0 || posPay&gt;99) { EEPROM.write(99, 0); posPay=0; }   posErr=EEPROM.read(199);   if(posErr&lt;0 || posErr&gt;99) { EEPROM.write(199, 0); posErr=0; }      SAM=EEPROM.read(0);   Serial.begin(9600);   Serial.print(SAM, DEC); Serial.print(\" \"); Serial.print(posPay, DEC); Serial.print(\" \"); Serial.print(posErr, DEC);Serial.println(\" begin\");      byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED-SAM };   \/\/byte gate[]={192, 168, 1, 1};   \/\/byte mask[]={255,255,255,0};   IPAddress ip(192, 168, 1, 100+SAM);   Ethernet.begin(mac, ip);\/\/, gate, gate, mask   server.begin();   delay(200);   Serial.print(\"server is at \");   Serial.println(Ethernet.localIP());      mySerial.begin(9600);   delay(200);      rOld=EEPROM.read(9);   if(rOld&lt;0 || rOld&gt;8) EEPROM.write(9, 0); \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438     else setRele(rOld);   resetTime=millis();  \/\/ mfrc522.PCD_Init();\/\/ Init MFRC522 }  void loop() {   \/\/if(millis()-resetTime&gt;600000) resetFunc(); \/\/\u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 10 \u043c\u0438\u043d\u0443\u0442   if(millis()-sendPoll&gt;200) { sendCCNET(poll);} \/\/ \u043f\u043e\u0441\u044b\u043b \u043f\u0443\u043b\u0430 \/\/wdt_reset();\u0441\u0431\u0440\u043e\u0441 \u0432\u043e\u0442\u0447\u0434\u043e\u0433\u0430 \u0438  \/*if (Serial.available()) {     char s=Serial.read(); \/\/int pay=Serial.parseInt();     if(s=='0') { Serial.print(\"RESET\"); sendCCNET(reset); waitACK=1; count=0; }     if(s=='1') { printNumber(100); EEPROM.write(100+posPay, 4); posPay++; EEPROM.write(99, posPay); }     if(s=='3') { sendInfo(); } }   if(millis()-timePing&gt;10000)   {     timePing=millis();     ICMPEchoReply echoReply = ping(pingAddr, 2);     if (echoReply.status == SUCCESS) pingFAIL=0; else { Serial.println(\"pingFAIL\"); if(++pingFAIL&gt;3) resetFunc(); }     \/\/initLed();   }*\/      int key = analogRead (5);   \/\/Serial.println(key);   if(keydown &amp;&amp; key&lt;20) keydown=0;   if(key&gt;300 &amp;&amp; key&lt;315 &amp;&amp; !keydown) setRele(6); \/\/\u043a\u043b\u044e\u0447   if(key&gt;330 &amp;&amp; key&lt;400 &amp;&amp; !keydown) setRele(0);\/\/\u0441\u0442\u043e\u043f   if(!keydown &amp;&amp; rele==0 &amp;&amp; (EEPROM.read(10)&gt;0 || EEPROM.read(11)&gt;0))   {     if(key&gt;920 &amp;&amp; key&lt;980) setRele(1);     if(key&gt;810 &amp;&amp; key&lt;870) setRele(2);     if(key&gt;720 &amp;&amp; key&lt;780) setRele(3);     if(key&gt;600 &amp;&amp; key&lt;640) setRele(4);     if(key&gt;420 &amp;&amp; key&lt;480) setRele(5);   }     if(rele&gt;0 &amp;&amp; rele&lt;=5 &amp;&amp; (millis()-timeRele)&gt;timeAllRele) { if(printNumber(-1)==0) setRele(0); timeRele+=timeAllRele; }   if(lightOff&gt;0 &amp;&amp; (millis()-lightOff)&gt;10000) { digitalWrite(7, HIGH); lightOff=0; } \/\/\u0441\u0432\u0435\u0442    for (int sock = 0; sock &lt; MAX_SOCK_NUM; sock++) {     EthernetClient sclient = server.available_(sock);     if (sclient) myserver(sclient);     \/\/serverWorks2(sclient);   }       delay(30);   \/\/ Look for new cards  \/\/ if ( mfrc522.PICC_IsNewCardPresent() &amp;&amp; mfrc522.PICC_ReadCardSerial()) dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); }  void sendCCNET(uint8_t *com) {   for(char i=0; i&lt;com[2]; i++) mySerial.write(com[i]);   if(com[3]!=0) { waitACK=1; count=0; sendPoll=millis(); }   while(waitACK)   {     if(millis()-sendPoll&gt;300) waitACK=0; \/\/ \u043c\u0430\u043a\u0441. \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u043e\u0442\u0432\u0435\u0442\u0430     if(mySerial.available()) {       c=mySerial.read();       if(count==2) LNG=c;       if(count==3) z1=c;       if(count==4) z2=c;       count++;     }     if(count&lt;LNG) continue;          waitACK=0;     if(z1&gt;0 &amp;&amp; z1&lt;255) sendCCNET(ack);     if(z1==0x10 || z1==0x11 || z1==0x12) { sendCCNET(reset); } \/\/Serial.print(\"POWER UP RESET \");     if(z1==0x19) { sendCCNET(enable); } \/\/Serial.print(\"DISABLED ENABLE \");     if(z1==70) { sendCCNET(reset); } \/\/Serial.print(\"PAUSE RESET \");            if(old!=z1)     {       \/*Serial.print(z1, HEX); Serial.print(\" \"); Serial.println(z2, HEX);       if(z1==0x14) Serial.println(\"IDLING\");              if(z1==0x00) Serial.println(\"ACK\"); if(z1==0xFF) Serial.println(\"NAK\");       if(z1==0x13) Serial.println(\"INIT\"); if(z1==0x15) Serial.println(\"ACCEPTING\");       if(z1==0x17) Serial.println(\"STACKING\"); if(z1==0x30) Serial.println(\"INVALID COMMAND\");       if(z1==0x41) Serial.println(\"DROP CASSETTE FULL\");       if(z1==0x44) Serial.println(\"JAM IN STACKER\"); if(z1==0x42) Serial.println(\"DROP CASSETTE REMOVED\");       if(z1==0x47) { Serial.print(\"Generic Failure codes \"); Serial.println(z2, HEX); sendInfo(\"err\", String(z2)); }       if(z1==0x1C) { Serial.print(\"Generic rejecting code \"); Serial.println(z2, HEX); sendInfo(\"err\", String(z2)); } *\/             if(z1&gt;0x20 &amp;&amp; z1&lt;0x81 &amp;&amp; posErr&lt;100) { EEPROM.write(200+posErr, z1==0x47 || z1==0x1C ? z2 : z1); posErr++; EEPROM.write(199, posErr); } \/\/ sendInfo(\"err\", String(z1));     }     old=z1;            if(z1==0x81) { Serial.print(\"PACKED, STACKED.\"); Serial.println(z2); int pay=0;     if(z2==2) pay=10; if(z2==3) pay=50; if(z2==4) pay=100; if(z2==5) pay=500; if(z2==6) pay=1000; if(z2==7) pay=5000;        if(pay&gt;0) { printNumber(pay); if(posPay&lt;100) { EEPROM.write(100+posPay, z2); posPay++; EEPROM.write(99, posPay);}        z2=0; }     }   } }  void setRele(char r) {   if(r &amp;&amp; r!=rOld) { rOld=r; delay(30); return; } \/\/\u0434\u0440\u0435\u0431\u0435\u0437\u0433   rele=r;   keydown=1;   for(char i=1;i&lt;6;i++) digitalWrite(i+1, HIGH);   if(r==6) r=1; \/\/\u043a\u043b\u044e\u0447   if(r) { digitalWrite(r+1, LOW); timeRele=millis(); timeAllRele=60000\/EEPROM.read(r); }   EEPROM.write(9, r);   delay(20);   initLed();   if(r==0 &amp;&amp; (posPay&gt;5 || posErr&gt;5)) sendInfo(); }  void setCommand(byte command, byte value) {   digitalWrite(CS, LOW);   for (int i=0; i&lt;4; i++) { shiftOut(DIN,CLK, MSBFIRST, command); shiftOut(DIN,CLK, MSBFIRST, value); }   digitalWrite(CS, HIGH); }  void initLed() {   setCommand(max7219_reg_scanLimit, 0x07);   setCommand(max7219_reg_decodeMode, 0x00); \/\/ using an led matrix (not digits)   setCommand(max7219_reg_shutdown, 0x01); \/\/ not in shutdown mode   setCommand(max7219_reg_displayTest, 0x00); \/\/ no display test   setCommand(max7219_reg_intensity, 1);   int n=printNumber(0); }  int printNumber(int add) {   int n=EEPROM.read(10)+EEPROM.read(11)*256;   if(add!=0) { n+=add; EEPROM.write(10, n%256); EEPROM.write(11, n&gt;&gt;8); }   int k;   for (char i=1; i&lt;=8; i++)   {    digitalWrite(CS, LOW);    for (char j=3; j&gt;=0; j--) { k=n\/pow(10,j); shiftOut(DIN,CLK, MSBFIRST,i); shiftOut(DIN,CLK, MSBFIRST,alf[i+(k%10)*8]); }    digitalWrite(CS, HIGH);   }   if(n&gt;0) { digitalWrite(7, LOW); lightOff=0; } else lightOff=millis(); \/\/\u0441\u0432\u0435\u0442   return n; }  void myserver(EthernetClient client) {   \/\/EthernetClient client = server.available();        int index = 0;   Serial.println(\"new client\");   while (client.available()) {       char c = client.read();       if(index&lt;99) clientline[index] = c;       index++;         \/\/Serial.print(c);   }            \/\/Serial.println(clientline);   char *t;   t=strstr(clientline, \"timer\");   if (t!=NULL) { t+=5; char timer=*t; t+=2; int value=(*t-48)*10; t++; value+=*t-48; EEPROM.write(timer-48, value);              Serial.print(\"timer \"); Serial.print(timer); Serial.print(\" value \"); Serial.println(value, DEC);           }   t=strstr(clientline, \"pay\");   if (t!=NULL) { t+=4; int value=(*t-48)*100; t++; value+=(*t-48)*10; t++; value+=*t-48; printNumber(value);            Serial.print(\"pay is \"); Serial.println(value, DEC);         }   if(strstr(clientline, \"reset\")!=NULL) resetFunc(); \/\/\u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 setup(); \/\/   if(strstr(clientline, \"water\")!=NULL) digitalWrite(2, LOW); \/\/\u0432\u043e\u0434\u0430   if(strstr(clientline, \"pena\")!=NULL) digitalWrite(3, LOW); \/\/\u043f\u0435\u043d\u0430   if(strstr(clientline, \"vosk\")!=NULL) digitalWrite(4, LOW); \/\/\u0432\u043e\u0441\u043a   t=strstr(clientline, \"box\"); if(t!=NULL) { t+=4; EEPROM.write(0, *t-48); } \/\/ setup(); resetFunc(); } \/\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0431\u043e\u043a\u0441\u0430   client.println(\"HTTP\/1.1 200 OK\"); client.println(\"Content-Type: text\/html\"); client.println(\"Connection: close\"); client.println();   client.println(\"&lt;!DOCTYPE HTML&gt;\"); client.println(\"&lt;html&gt;\");   client.print(\"box is \"); client.print(EEPROM.read(0)); client.println(\"&lt;br \/&gt;\");   client.print(\"cashcode is \"); client.print(z1, HEX); client.println(\"&lt;br \/&gt;\");   for (int j = 1; j &lt; 6; j++) {          client.print(\"timer \"); client.print(j); client.print(\" is \"); client.print(EEPROM.read(j)); client.println(\"&lt;br \/&gt;\");         }   client.println(\"&lt;\/html&gt;\");   delay(100);   \/\/ close the connection:   client.stop(); } char sendInfo() {   \/\/if(!posErr &amp;&amp; !posPay) return 0;   EthernetClient client;   char j;   String out=\"sam=\"+String(EEPROM.read(0))+\"&amp;pka=\"+String(EEPROM.read(13)); \/\/pka   if(posPay)   {       out+=\"&amp;pays=\";       for(j=0; j&lt;posPay; j++) { out+=String(EEPROM.read(100+j))+\"-\"; }   }    if(posErr)   {       out+=\"&amp;errs=\";       for(j=0; j&lt;posErr; j++) { out+=String(EEPROM.read(200+j))+\"-\"; }   }      if (client.connect(system100, 80) || client.connect(system100, 80) || client.connect(\"www.host.ru\", 80))   {     Serial.println(\"GET \/control\/sinh\/get_money.php?\"+out+\" HTTP\/1.1\");     client.println(\"GET \/control\/sinh\/get_money.php?\"+out+\" HTTP\/1.1\");          client.println(\"Host: www.host.ru\");     client.println(\"Connection: keep-alive\");     client.println();   } else { Serial.println(\"connection failed\"); return 0; }    delay(100);   char chr13=0;   bool ok=0;   char c;      while (client.available())   {     c=client.read();     Serial.print(c);     if(chr13==2 &amp;&amp; c=='o') ok=1; else if(c==13) chr13++; else if(c!=10) chr13=0;   }   client.stop();      \/\/if(!ok) return (0);      posPay=0; EEPROM.write(99, posPay);   posErr=0; EEPROM.write(199, posErr);   return (1); }<\/code><\/pre>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/483410\/\"> https:\/\/habr.com\/ru\/post\/483410\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483410\/\">\u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0438 \u043d\u0430 arduino. <br \/>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/320458\/\">Arduino \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0435<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/post\/321172\/\">Arduino \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0439\u043a\u0435 \u0447.2<\/a>.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-296935","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=296935"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296935\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}