AAEAAAD/////AQAAAAAAAAAMAgAAADxDb3JlLCBWZXJzaW9uPTMuNS4xNy4yLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAACNfM1MuQ29EZVN5cy5Db3JlLkNvbXBvbmVudHMuUHJvZmlsZQMAAAAeX3BsdWdJbkd1aWRUb1ZlcnNpb25Db25zdHJhaW50Fl9wbHVnSW5HdWlkVG9FeHRlbnNpb24aX3BsdWdJbkd1aWRUb0V4dGVuc2lvbkxpc3QEBAQ9XzNTLkNvRGVTeXMuQ29yZS5Db21wb25lbnRzLkd1aWRUb1ZlcnNpb25Db25zdHJhaW50RGljdGlvbmFyeQIAAAAwXzNTLkNvRGVTeXMuQ29yZS5Db21wb25lbnRzLkd1aWRUb0Jvb2xEaWN0aW9uYXJ5AgAAAEBfM1MuQ29EZVN5cy5Db3JlLkNvbXBvbmVudHMuR3VpZFRvUHJvZmlsZUV4dGVuc2lvbkxpc3REaWN0aW9uYXJ5AgAAAAIAAAAJAwAAAAkEAAAACQUAAAAFAwAAAD1fM1MuQ29EZVN5cy5Db3JlLkNvbXBvbmVudHMuR3VpZFRvVmVyc2lvbkNvbnN0cmFpbnREaWN0aW9uYXJ5AQAAABhEaWN0aW9uYXJ5QmFzZStoYXNodGFibGUDHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUCAAAACQYAAAAFBAAAADBfM1MuQ29EZVN5cy5Db3JlLkNvbXBvbmVudHMuR3VpZFRvQm9vbERpY3Rpb25hcnkBAAAAGERpY3Rpb25hcnlCYXNlK2hhc2h0YWJsZQMcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQIAAAAJBwAAAAUFAAAAQF8zUy5Db0RlU3lzLkNvcmUuQ29tcG9uZW50cy5HdWlkVG9Qcm9maWxlRXh0ZW5zaW9uTGlzdERpY3Rpb25hcnkBAAAAGERpY3Rpb25hcnlCYXNlK2hhc2h0YWJsZQMcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQIAAAAJCAAAAAQGAAAAHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUHAAAACkxvYWRGYWN0b3IHVmVyc2lvbghDb21wYXJlchBIYXNoQ29kZVByb3ZpZGVyCEhh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AAAFAAAAEQAAABQAAAABkAEAAG8BAAADAAAABQAAABEAAAAeAAAAAZEBAABvAQAABAAAAAEAAAAAAAAAAAAAAAGSAQAAbwEAAAMAAAAFAAAAEQAAAB4AAAABkwEAAG8BAAADAAAABQAAABEAAAAUAAAAAZQBAABvAQAABAAAAAAAAAAAAAAAAAAAAAGVAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABlgEAAG8BAAADAAAABQAAABEAAAAUAAAAAZcBAABvAQAABAAAAAAAAAAAAAAAAAAAAAGYAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABmQEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAZoBAABvAQAAAwAAAAUAAAARAAAAFAAAAAGbAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABnAEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAZ0BAABvAQAABAAAAAAAAAAAAAAAAAAAAAGeAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABnwEAAG8BAAADAAAABQAAABEAAAAUAAAAAaABAABvAQAABAAAAAEAAAAAAAAAAAAAAAGhAQAAbwEAAAQAAAACAAAAAAAAAAAAAAABogEAAG8BAAADAAAABQAAABEAAAAUAAAAAaMBAABvAQAAAwAAAAUAAAARAAAAFAAAAAGkAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABpQEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAaYBAABvAQAABAAAAAEAAAAAAAAAAAAAAAGnAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAABqAEAAG8BAAADAAAABQAAABEAAAAUAAAAAakBAABvAQAAAwAAAAUAAAARAAAAFAAAAAGqAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABqwEAAG8BAAADAAAABQAAABEAAAAUAAAAAawBAABvAQAABAAAAAAAAAAAAAAAAAAAAAGtAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABrgEAAG8BAAADAAAABQAAABEAAAAUAAAAAa8BAABvAQAAAwAAAAUAAAARAAAAFAAAAAGwAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAABsQEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAbIBAABvAQAAAwAAAAUAAAARAAAAAAAAAAGzAQAAbwEAAAQAAAACAAAAAQAAAAAAAAABtAEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAbUBAABvAQAABAAAAAAAAAAAAAAAAAAAAAG2AQAAbwEAAAQAAAAAAAAAAAAAAAAAAAABtwEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAbgBAABvAQAAAwAAAAUAAAARAAAAFAAAAAG5AQAAbwEAAAQAAAAAAAAAAAAAAAAAAAABugEAAG8BAAADAAAABQAAABEAAAAUAAAAAbsBAABvAQAABAAAAAAAAAAAAAAAAAAAAAG8AQAAbwEAAAMAAAAFAAAAEQAAAB4AAAABvQEAAG8BAAADAAAABQAAABEAAAAUAAAAAb4BAABvAQAABAAAAAEAAAAAAAAAAAAAAAG/AQAAbwEAAAMAAAAFAAAAEQAAAB4AAAABwAEAAG8BAAADAAAABQAAABEAAAAUAAAAAcEBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHCAQAAbwEAAAQAAAABAAAAAAAAAAAAAAABwwEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAcQBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHFAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABxgEAAG8BAAADAAAABQAAABEAAAAUAAAAAccBAABvAQAAAwAAAAUAAAARAAAAHgAAAAHIAQAAbwEAAAMAAAAFAAAAEQAAAAAAAAAByQEAAG8BAAADAAAABQAAABEAAAAUAAAAAcoBAABvAQAABAAAAAAAAAAAAAAAAAAAAAHLAQAAbwEAAAMAAAAFAAAAEQAAABQAAAABzAEAAG8BAAADAAAABQAAABEAAAAUAAAAAc0BAABvAQAABAAAAAAAAAAAAAAAAAAAAAHOAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAABzwEAAG8BAAADAAAABQAAABEAAAAUAAAAAdABAABvAQAAAwAAAAUAAAARAAAAFAAAAAHRAQAAbwEAAAMAAAAFAAAAEQAAAB4AAAAB0gEAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAdMBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHUAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB1QEAAG8BAAADAAAABQAAABEAAAAeAAAAAdYBAABvAQAABAAAAAAAAAAAAAAAAAAAAAHXAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB2AEAAG8BAAADAAAABQAAABEAAAAAAAAAAdkBAABvAQAABAAAAAAAAAAAAAAAAAAAAAHaAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAAB2wEAAG8BAAADAAAABQAAABEAAAAUAAAAAdwBAABvAQAABAAAAAAAAAAAAAAAAAAAAAHdAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAAB3gEAAG8BAAADAAAABQAAABEAAAAAAAAAAd8BAABvAQAAAwAAAAUAAAARAAAAFAAAAAHgAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB4QEAAG8BAAADAAAABQAAABEAAAAUAAAAAeIBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHjAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAAB5AEAAG8BAAADAAAABQAAABEAAAAeAAAAAeUBAABvAQAABAAAAAAAAAAAAAAAAAAAAAHmAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB5wEAAG8BAAADAAAABQAAABEAAAAUAAAAAegBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHpAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB6gEAAG8BAAABAAAAAgAAAAEAAAAAAAAAAesBAABvAQAAAwAAAAUAAAARAAAACgAAAAHsAQAAbwEAAAQAAAAAAAAAAAAAAAAAAAAB7QEAAG8BAAADAAAABQAAABEAAAAUAAAAAe4BAABvAQAAAwAAAAUAAAARAAAAHgAAAAHvAQAAbwEAAAMAAAAFAAAAEQAAAB4AAAAB8AEAAG8BAAADAAAABQAAABEAAAAUAAAAAfEBAABvAQAAAwAAAAUAAAARAAAAFAAAAAHyAQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB8wEAAG8BAAADAAAABQAAABEAAAAUAAAAAfQBAABvAQAAAwAAAAUAAAARAAAACgAAAAH1AQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB9gEAAG8BAAADAAAABQAAABEAAAAUAAAAAfcBAABvAQAAAwAAAAUAAAARAAAAFAAAAAH4AQAAbwEAAAMAAAAFAAAAEQAAABQAAAAB+QEAAG8BAAADAAAABQAAABEAAAAUAAAAAfoBAABvAQAABAAAAAAAAAAAAAAAAAAAAAH7AQAAbwEAAAQAAAAAAAAAAAAAAAAAAAAB/AEAAG8BAAADAAAABQAAABEAAAAeAAAAAf0BAABvAQAABAAAAAAAAAAAAAAAAAAAAAH+AQAAbwEAAAQAAAABAAAAAAAAAAAAAAAB/wEAAG8BAAADAAAABQAAABEAAAAKAAAAAQACAABvAQAAAwAAAAUAAAARAAAAFAAAAAEBAgAAbwEAAAQAAAAAAAAAAAAAAAAAAAABAgIAAG8BAAADAAAABQAAABEAAAAUAAAAAQMCAABvAQAAAwAAAAUAAAARAAAAFAAAAAEEAgAAbwEAAAQAAAAAAAAAAAAAAAAAAAABBQIAAG8BAAADAAAABQAAABEAAAAUAAAAAQYCAABvAQAABAAAAAAAAAAAAAAAAAAAAAEHAgAAbwEAAAQAAAAAAAAAAAAAAAAAAAABCAIAAG8BAAADAAAABQAAABEAAAAUAAAAAQkCAABvAQAAAwAAAAUAAAARAAAAFAAAAAEKAgAAbwEAAAQAAAAAAAAAAAAAAAAAAAABCwIAAG8BAAAEAAAAAAAAAAAAAAAAAAAAAQwCAABvAQAABAAAAAAAAAAAAAAAAAAAAAENAgAAbwEAAAQAAAAAAAAAAAAAAAAAAAABDgIAAG8BAAADAAAABQAAABEAAAAUAAAAAQ8CAABvAQAABAAAAAAAAAAAAAAAAAAAAAEQAgAAbwEAAAMAAAAFAAAAEQAAAAAAAAABEQIAAG8BAAADAAAABQAAABEAAAAeAAAAARICAABvAQAAAwAAAAUAAAARAAAAFAAAAAETAgAAbwEAAAMAAAAFAAAAEQAAAAAAAAABFAIAAG8BAAAEAAAAAAAAAAAAAAAAAAAAARUCAABvAQAAAwAAAAUAAAARAAAAFAAAAAEWAgAAbwEAAAQAAAABAAAAAQAAAAAAAAABFwIAAG8BAAADAAAABQAAABEAAAAeAAAAARgCAABvAQAAAwAAAAUAAAARAAAAFAAAAAs= True 69dee55c-7488-4e7a-a826-1b99346b908b 3efe40ce-3172-459f-878a-44cc89996579 FuCustomFormatToDT 6f9dac99-8de1-4efc-8465-68ac443b7d08 a9ed5b7e-75c5-4651-af16-d2c27e98cb94 3b83b776-fb25-43b8-99f2-3c507c9143fc 638028224201346857 None 112 IF sDateTimeString='' THEN 114 FuCustomFormatToDT:=dt#1970-01-01-00:00:00; 117 ELSE 130 iPos:=FIND(sCustomFormat,'SS'); 132 IF iPos=0 THEN 133 iPos:=FIND(sCustomFormat,'ss'); 134 END_IF 131 IF iPos=0 THEN 138 sSecond:='00'; 135 ELSE 137 sSecond:=MID(sDateTimeString,2,iPos); 136 END_IF 139 bSecond:=STRING_TO_BYTE(sSecond); 140 147 iPos:=FIND(sCustomFormat,'mm'); 151 IF iPos=0 THEN 152 sMinute:='00'; 153 ELSE 154 sMinute:=MID(sDateTimeString,2,iPos); 155 END_IF 113 bMinute:=STRING_TO_BYTE(sMinute); 156 158 iPos:=FIND(sCustomFormat,'HH'); 159 IF iPos=0 THEN 160 iPos:=FIND(sCustomFormat,'hh'); 161 END_IF 162 IF iPos=0 THEN 163 sHour:='00'; 164 ELSE 165 sHour:=MID(sDateTimeString,2,iPos); 166 END_IF 143 bHour:=STRING_TO_BYTE(sHour); 167 179 170 iPos:=FIND(sCustomFormat,'MM'); 174 IF iPos=0 THEN 175 sMonth:='00'; 176 ELSE 177 sMonth:=MID(sDateTimeString,2,iPos); 178 END_IF 169 bMonth:=STRING_TO_BYTE(sMonth); 142 181 iPos:=FIND(sCustomFormat,'JJ'); 182 IF iPos=0 THEN 183 iPos:=FIND(sCustomFormat,'jj'); 184 END_IF 185 IF iPos=0 THEN 186 sDay:='00'; 187 ELSE 188 sDay:=MID(sDateTimeString,2,iPos); 189 END_IF 144 bDay:=STRING_TO_BYTE(sDay); 191 193 iPos:=FIND(sCustomFormat,'AAAA'); 209 iLength:=4; 194 IF iPos=0 THEN 195 iPos:=FIND(sCustomFormat,'aaaa'); 210 iLength:=4; 196 END_IF 203 IF iPos=0 THEN 204 iPos:=FIND(sCustomFormat,'AA'); 211 iLength:=2; 202 END_IF 206 IF iPos=0 THEN 207 iPos:=FIND(sDateTimeString,'aa'); 212 iLength:=2; 205 END_IF 197 IF iPos=0 THEN 198 sYear:='00'; 199 ELSE 200 sYear:=MID(sDateTimeString,iLength,iPos); 201 END_IF 192 IF iLength=2 THEN 216 wYear:=STRING_TO_WORD(sYear); 218 wYear:=wYear+2000; 214 ELSE 217 wYear:=STRING_TO_WORD(sYear); 215 END_IF 145 219 FuCustomFormatToDT:=FuFormatToDT(bDay,bMonth,TO_INT(wYear),bHour,bMinute,bSecond); 118 END_IF 2 FUNCTION FuCustomFormatToDT : DT 111 (*This function returns the date/time value into a string formated with a customizable format, for example JJ/MM/AA,HH:mm:SS*) 8 VAR_INPUT 9 sDateTimeString : STRING ; (*Date/Time to format*) 10 sCustomFormat : STRING :='JJ/MM/AA,HH:mm:SS'; (*Date/Time format to use, for example JJ/MM/AA,HH:mm:SS*) 11 END_VAR 12 VAR 13 sYear : STRING(4); 14 sShortYear : STRING(2); 15 sMonth : STRING(2); 16 sDay : STRING(2); 17 sHour : STRING(2); 18 sMinute : STRING(2); 19 sSecond : STRING(2); 20 sTemp:STRING; 21 sTempResult : STRING; 22 sSeparator : STRING(1); 23 sFormat : STRING; 24 i : INT; 25 xAdd : BOOL; 128 129 iPos : INT; 208 iLength : INT; 141 bSecond: BYTE; 157 bMinute: BYTE; 168 bHour: BYTE; 180 bMonth: BYTE; 190 bDay: BYTE; 213 wYear: WORD; 1 END_VAR 219 Standard False 3efe40ce-3172-459f-878a-44cc89996579 Device PLC Logic Application -1 True 2c8827d3-22c9-44e7-b693-e84063c6b2c7 3efe40ce-3172-459f-878a-44cc89996579 FbhvakosterstrommenJSON_Handler 829a18f2-c514-4f6e-9634-1df173429203 d9b2b2cc-ea99-4c3b-aa42-1e5c49e65b84 5aed6450-51d7-4b85-bb1b-17b1c38cc54a 6f9dac99-8de1-4efc-8465-68ac443b7d08 a9ed5b7e-75c5-4651-af16-d2c27e98cb94 3b83b776-fb25-43b8-99f2-3c507c9143fc 638028230323112193 None 1622 1534 1648 (* 1649 This function block uses the methods JSON_Key_Detected, JSON_ObjcectClosed and JSON_ValueDetected to import the values of 1650 interest to the appropriate function block. 1651 1652 1653 *) 1654 FUNCTION_BLOCK FbhvakosterstrommenJSON_Handler EXTENDS FbJSON_Handler 1655 VAR_IN_OUT 1656 atypEnergyPrice : ARRAY[0..23] OF typEnergyPrice; 1657 END_VAR 1658 VAR 1659 parserState : INT; 1660 m : INT; 1662 bHour: INT; 1663 END_VAR 1 1663 Standard False 5aed6450-51d7-4b85-bb1b-17b1c38cc54a Device PLC Logic Application HTTP_HvaKosterStrommen -1 True 17814f79-654e-4a1e-bdbc-b316021e34c1 3efe40ce-3172-459f-878a-44cc89996579 HTTP_HvaKosterStrommen 24568a24-c491-472c-a21f-ee5d33859fab 0 False False False False 829a18f2-c514-4f6e-9634-1df173429203 d9b2b2cc-ea99-4c3b-aa42-1e5c49e65b84 5aed6450-51d7-4b85-bb1b-17b1c38cc54a 6f9dac99-8de1-4efc-8465-68ac443b7d08 a9ed5b7e-75c5-4651-af16-d2c27e98cb94 3b83b776-fb25-43b8-99f2-3c507c9143fc 638028230321432123 None 509 // Hvilken dag er det idag? 510 dtDateAndYear := DT_TO_DATE (WagoAppTime.FuGetLocalDateAndTime()); 515 207 typSettings.iDay := WagoAppTime.FuDay(datDate:= dtDateAndYear); 519 typSettings.sDay := INT_TO_STRING (typSettings.iDay); 516 typSettings.iMonth := WagoAppTime.FuMonth(datDate:= dtDateAndYear); 520 typSettings.sMonth := INT_TO_STRING (typSettings.iMonth); 517 typSettings.iYear := WagoAppTime.FuYear(datDate:= dtDateAndYear); 521 typSettings.sYear := INT_TO_STRING (typSettings.iYear); 522 208 // Switch som setter riktig "columnindex" som senere benyttes for å hente priser for valgt område i config. 209 typSettings.iVarArea := 1; 275 CASE typSettings.iVarArea OF 276 (********* Init... ********) 277 0: 380 xValidArea := FALSE; 376 CASE typSettings.iVarArea OF 378 1, 2, 3, 4, 5: xValidArea := TRUE; //Valid area selected 375 END_CASE 383 320 1: // NO1 = Oslo / Øst-Norge 213 typSettings.sArea := 'NO1 = Oslo / Øst-Norge'; 526 typSettings.sNO := 'NO1'; 499 217 2: // NO2 = Kristiansand / Sør-Norge 220 typSettings.sArea := 'NO2 = Kristiansand / Sør-Norge'; 327 typSettings.sNO := 'NO2'; 527 500 3: // NO3 = Trondheim / Midt-Norge 501 typSettings.sArea := 'NO3 = Trondheim / Midt-Norge'; 502 typSettings.sNO := 'NO3'; 528 503 4: // NO2 = Kristiansand / Sør-Norge 504 typSettings.sArea := 'NO4 = Tromsø / Nord-Norge'; 506 typSettings.sNO := 'NO4'; 529 507 5: // NO2 = Kristiansand / Sør-Norge 508 typSettings.sArea := 'NO5 = Bergen / Vest-Norge '; 505 typSettings.sNO := 'NO5'; 530 165 END_CASE; 419 433 435 //https://www.hvakosterstrommen.no/api/v1/prices/[ÅR]/[MÅNED]-[DAG]_[PRISOMRÅDE].json 441 IF (iUpdateUrl = 1) AND ((xValidTime := TRUE) AND (xValidArea := TRUE)) THEN 436 sUrl := CONCAT(sUrl, typSettings.sYear); 438 sUrl := CONCAT(sUrl, '/'); 523 sUrl := CONCAT(sUrl, typSettings.sMonth); 524 sUrl := CONCAT(sUrl, '-'); 525 sUrl := CONCAT(sUrl, typSettings.sDay); 439 sUrl := CONCAT(sUrl, '_'); 532 sUrl := CONCAT(sUrl, typSettings.sNO); 531 sUrl := CONCAT(sUrl, '.json'); 449 iUpdateUrl := iUpdateUrl + 1; 447 ELSE 451 IF (iUpdateUrl = 0) THEN 564 iUpdateUrl := 1; 448 // sUrl := 'https://www.hvakosterstrommen.no/api/v1/prices/'; 452 END_IF 443 END_IF 565 567 FbHTTPs_Get_Test_1( // Function block to get the JSON file 568 sURI:= sUrl, 569 sUser:= sHttpsGetUser, 570 sPassword:= sHttpsGetPassword, 571 sHeader:= sHttpsGetHeader, 572 eAuthentication:= WagoAppHTTP.eAuthentication.Basic, 573 pRxBuffer:= ADR(unHttpsGetRxBuffer.sVar), 574 udiRxBufferSize:= SIZEOF(unHttpsGetRxBuffer.abVar), 575 tTimeout:= tHttpsGetTimeout, 576 typSSL_Options:= typHttpsGetSslOptions, 577 xTrigger:= xHttpsGetTrigger1, // xHttpsGetTrigger2 = TRUE to run 578 xBusy=> xGet_Test_1_Busy, 579 xError=> xGet_Test_1_Error, 580 oStatus=> oHttpsGetStatus, 566 udiRxNBytes=> udiHttpsGetRxNBytes); 440 437 sHttpsGetUri := sUrl; 548 (* 551 FbWrite_ToIEC_ByRuleStrom( // Function block to sort the info from the JSON file 552 sPathBase:= stringPath, 553 pDataIn:= ADR(unHttpsGetRxBuffer.sVar), 554 udiSizeDataIn:= SIZEOF(unHttpsGetRxBuffer.abVar), 555 aRule:= bTestRule, 556 pIecVariable:= ADR(MyJsonData), 557 iArraySizeIecVariable:= 24, 558 udiSizeIecVariable:= SIZEOF(MyJsonData), 559 xError=> xWriteToIEC_Error, 560 iActualArrayRow=> iWriteToIEC_ActualArrayRow, 549 xTrigger:= xHttpsGetTrigger2 ); // xHttpsGetTrigger2 = TRUE to run 550 75 sVarFraNettside := unHttpsGetRxBuffer.sVar; 8 *) 612 454 oFbhvakosterstrommenJSON_Handler(atypEnergyPrice:=MyJsonData); 613 603 oFbJSON_Sax_Parser( 604 pData:=ADR(unHttpsGetRxBuffer.sVar) , 605 udiSizeData:=SIZEOF(unHttpsGetRxBuffer.sVar) , 606 sFileName:= , 607 xTrigger:=xTriggerJSONParser , 608 oStatus=> , 609 xDone=> , 610 xError=> , 611 udiValueCount=> , 459 iChunksCompleted=> ); 2 PROGRAM HTTP_HvaKosterStrommen 3 VAR 131 dtDateAndYear : DATE; 514 137 sUrl : STRING(70) := 'https://www.hvakosterstrommen.no/api/v1/prices/'; // 'https://www.hvakosterstrommen.no/api/v1/prices/2022/10-27_NO5.json ' 373 typSettings : DUT_HttpGet_Strom; // Settings for area, price, currency, timespan, loops 129 xValidArea : BOOL; 385 xValidTime : BOOL; 442 iUpdateUrl : INT; 384 24 sHttpsGetUri : STRING(70) := 'https://www.hvakosterstrommen.no/api/v1/prices/2022/10-28_NO1.json'; 28 unHttpsGetRxBuffer : unStringAndBytes; 488 457 FbHTTPs_Get_Test_1 : WagoAppHTTP.FbHTTPs_Get; // Function block to get the JSON file 584 sHttpsGetUser : STRING; 585 sHttpsGetPassword : STRING; 586 sHttpsGetHeader : STRING; 588 tHttpsGetTimeout : TIME := T#5S; 587 typHttpsGetSslOptions : WagoAppHTTP.WagoTypesCurl.typSSL_Options; 589 xHttpsGetTrigger1 : BOOL; 590 xGet_Test_1_Busy : BOOL; 592 xGet_Test_1_Error : BOOL; 594 oHttpsGetStatus : WagoAppHTTP.WagoSysErrorBase.FbResult; 595 udiHttpsGetRxNBytes : UDINT; 593 561 FbWrite_ToIEC_ByRuleStrom : WagoAppJSON.FbWrite_ToIEC_ByRule; // Function block to sort the info from the JSON file 536 stringPath : STRING(20):='/'; // Path the JSON file uses 537 My1 : FbWrite_ToIEC_ByRule; 563 xHttpsGetTrigger2 : BOOL; 599 xWriteToIEC_Error : BOOL; 562 iWriteToIEC_ActualArrayRow : INT; 600 539 MyJsonData : ARRAY[0..23] OF typEnergyPrice; // JSON data to sort the data inn 540 541 bTestRule : ARRAY[0..MAX_ARRAY_ELEMENTS_CUSTOM] OF typRuleBase:=[ 542 (sPath:='NOK_per_kWh',iConvertType:=eReal), // 1 543 (sPath:='EUR_per_kWh',iConvertType:=eReal), // 2 544 (sPath:='EXR',iConvertType:=eReal), // 3 545 (sPath:='time_start',iConvertType:=eString), // 4 Tride to use eTime but got error 546 (sPath:='time_end',iConvertType:=eString) // 5 547 ]; 596 535 598 sVarFraNettside : STRING(4000); // String with all the info 597 oFbJSON_Sax_Parser: FbJSON_Sax_Parser(oFbhvakosterstrommenJSON_Handler); 602 xTriggerJSONParser: BOOL; 601 oFbhvakosterstrommenJSON_Handler: FbhvakosterstrommenJSON_Handler; 4 END_VAR 1 613 Standard False 5aed6450-51d7-4b85-bb1b-17b1c38cc54a Device PLC Logic Application HTTP_HvaKosterStrommen -1 False 06aa084b-37a2-4368-987e-85d705969d7a 2c8827d3-22c9-44e7-b693-e84063c6b2c7 JSON_KeyDetected f8a58466-d7f6-439f-bbb8-d4600e41d099 a9ed5b7e-75c5-4651-af16-d2c27e98cb94 3b83b776-fb25-43b8-99f2-3c507c9143fc 638028230324072146 38 36 41 IF sJSON_Object='NOK_per_kWh' THEN 42 parserstate:=0; 44 ELSIF sJSON_Object='EUR_per_kWh' THEN 43 parserstate:=1; 46 ELSIF sJSON_Object='EXR' THEN 45 parserstate:=2; 48 ELSIF sJSON_Object='time_start' THEN 47 parserstate:=3; 49 ELSIF sJSON_Object='time_end' THEN 100 parserstate:=4; 55 END_IF 22 21 2 (* 3 4 **Function** 5 8 9 **Graphical Illustration** 10 11 .. wago.autoimage:: 12 13 *) 14 METHOD JSON_KeyDetected 15 VAR_INPUT 16 sJSON_Object : STRING; // JSON object detected 17 END_VAR 31 32 VAR 33 1 END_VAR 2c8827d3-22c9-44e7-b693-e84063c6b2c7 Device PLC Logic Application HTTP_HvaKosterStrommen FbhvakosterstrommenJSON_Handler -1 False 1208259a-b1b2-4f43-a4c2-613a954953af 2c8827d3-22c9-44e7-b693-e84063c6b2c7 JSON_ValueDetected f8a58466-d7f6-439f-bbb8-d4600e41d099 a9ed5b7e-75c5-4651-af16-d2c27e98cb94 3b83b776-fb25-43b8-99f2-3c507c9143fc 638028246711731432 155 {warning disable C0371} 89 IF __ISVALIDREF(atypEnergyPrice)=FALSE THEN 90 RETURN; 91 END_IF 72 73 CASE parserState OF 78 0: 156 atypEnergyPrice[bHour].NOK_per_kWh:=TO_REAL(sJSON_Value); 158 157 1: atypEnergyPrice[bHour].EUR_per_kWh:=TO_REAL(sJSON_Value); 159 79 2: atypEnergyPrice[bHour].EXR:=TO_REAL(sJSON_Value); 160 80 3:atypEnergyPrice[bHour].time_start:=FuCustomFormatToDT(sDateTimeString:=sJSON_Value,sCustomFormat:='AAAA-MM-JJThh:mm:SS'); 154 143 4:atypEnergyPrice[bHour].time_end:=FuCustomFormatToDT(sDateTimeString:=sJSON_Value,sCustomFormat:='AAAA-MM-JJThh:mm:SS'); 97 162 IF bHour<23 THEN 161 bHour:=bHour+1; 164 ELSE 165 bHour:=0; 163 END_IF 151 111 88 END_CASE 42 {warning enable C0371} 2 (* 3 4 **Function** 5 6 8 9 **Graphical Illustration** 10 11 .. wago.autoimage:: 12 13 *) 14 METHOD JSON_ValueDetected 15 VAR_INPUT 16 sJSON_Value : STRING(JSON_MAX_STRING_SAX); // JSON value detected 17 END_VAR 25 26 VAR 63 1 END_VAR 2c8827d3-22c9-44e7-b693-e84063c6b2c7 Device PLC Logic Application HTTP_HvaKosterStrommen FbhvakosterstrommenJSON_Handler -1 e!COCKPIT