doushuo 1 неделя назад
Родитель
Сommit
f0f4e930da

+ 16 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,16 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
+    <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="ignoredPackages">
+        <value>
+          <list size="2">
+            <item index="0" class="java.lang.String" itemvalue="pymysql" />
+            <item index="1" class="java.lang.String" itemvalue="Flask" />
+          </list>
+        </value>
+      </option>
+    </inspection_tool>
+  </profile>
+</component>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 7 - 0
.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Black">
+    <option name="sdkName" value="water_quality_server" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="water_quality_server" project-jdk-type="Python SDK" />
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 9 - 0
.idea/water_quality_server.iml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4">
+  <component name="Flask">
+    <option name="enabled" value="true" />
+  </component>
+  <component name="TemplatesService">
+    <option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
+  </component>
+</module>

+ 44 - 14
.idea/workspace.xml

@@ -4,7 +4,14 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="3e6cd0d0-7b4f-422b-83c1-22f99846827d" name="Changes" comment="" />
+    <list default="true" id="3e6cd0d0-7b4f-422b-83c1-22f99846827d" name="Changes" comment="">
+      <change afterPath="$PROJECT_DIR$/writeDataToCurrentLibrary.py" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/water_quality.log" beforeDir="false" afterPath="$PROJECT_DIR$/water_quality.log" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/writeDataToRealtimeData.py" beforeDir="false" afterPath="$PROJECT_DIR$/writeDataToRealtimeData.py" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/运行及挂载文件 (2).txt" beforeDir="false" />
+    </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -29,6 +36,9 @@
       </map>
     </option>
   </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
   <component name="ProjectColorInfo">{
   &quot;associatedIndex&quot;: 1
 }</component>
@@ -45,7 +55,9 @@
     &quot;Python.getData.executor&quot;: &quot;Run&quot;,
     &quot;Python.readDataRealtimeData.executor&quot;: &quot;Debug&quot;,
     &quot;Python.water_quality_server.executor&quot;: &quot;Run&quot;,
+    &quot;Python.writeDataToCurrentLibrary.executor&quot;: &quot;Run&quot;,
     &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
+    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
     &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
     &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
     &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
@@ -55,7 +67,7 @@
     &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
   }
 }</component>
-  <component name="RunManager" selected="Python.readDataRealtimeData">
+  <component name="RunManager" selected="Python.writeDataToCurrentLibrary">
     <configuration name="Flask_water_server" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
       <module name="water_quality_server" />
       <option name="ENV_FILES" value="" />
@@ -102,7 +114,7 @@
       <option name="INPUT_FILE" value="" />
       <method v="2" />
     </configuration>
-    <configuration name="getData" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
+    <configuration name="readDataRealtimeData" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
       <module name="water_quality_server" />
       <option name="ENV_FILES" value="" />
       <option name="INTERPRETER_OPTIONS" value="" />
@@ -116,7 +128,7 @@
       <option name="ADD_CONTENT_ROOTS" value="true" />
       <option name="ADD_SOURCE_ROOTS" value="true" />
       <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/getData.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/readDataRealtimeData.py" />
       <option name="PARAMETERS" value="" />
       <option name="SHOW_COMMAND_LINE" value="false" />
       <option name="EMULATE_TERMINAL" value="false" />
@@ -125,7 +137,7 @@
       <option name="INPUT_FILE" value="" />
       <method v="2" />
     </configuration>
-    <configuration name="readDataRealtimeData" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
+    <configuration name="water_quality_server" type="PythonConfigurationType" factoryName="Python">
       <module name="water_quality_server" />
       <option name="ENV_FILES" value="" />
       <option name="INTERPRETER_OPTIONS" value="" />
@@ -134,12 +146,12 @@
         <env name="PYTHONUNBUFFERED" value="1" />
       </envs>
       <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="IS_MODULE_SDK" value="true" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
       <option name="ADD_CONTENT_ROOTS" value="true" />
       <option name="ADD_SOURCE_ROOTS" value="true" />
       <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/readDataRealtimeData.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/quality_server.py" />
       <option name="PARAMETERS" value="" />
       <option name="SHOW_COMMAND_LINE" value="false" />
       <option name="EMULATE_TERMINAL" value="false" />
@@ -148,7 +160,7 @@
       <option name="INPUT_FILE" value="" />
       <method v="2" />
     </configuration>
-    <configuration name="water_quality_server" type="PythonConfigurationType" factoryName="Python">
+    <configuration name="writeDataToCurrentLibrary" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
       <module name="water_quality_server" />
       <option name="ENV_FILES" value="" />
       <option name="INTERPRETER_OPTIONS" value="" />
@@ -157,12 +169,12 @@
         <env name="PYTHONUNBUFFERED" value="1" />
       </envs>
       <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="IS_MODULE_SDK" value="true" />
       <option name="ADD_CONTENT_ROOTS" value="true" />
       <option name="ADD_SOURCE_ROOTS" value="true" />
       <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/quality_server.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/writeDataToCurrentLibrary.py" />
       <option name="PARAMETERS" value="" />
       <option name="SHOW_COMMAND_LINE" value="false" />
       <option name="EMULATE_TERMINAL" value="false" />
@@ -187,13 +199,29 @@
       <option name="launchJavascriptDebuger" value="false" />
       <method v="2" />
     </configuration>
+    <configuration name="water_quality_server" type="Python.FlaskServer">
+      <module name="water_quality_server" />
+      <option name="target" value="$PROJECT_DIR$/quality_server.py" />
+      <option name="targetType" value="PATH" />
+      <option name="ENV_FILES" value="" />
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
+      <option name="launchJavascriptDebuger" value="false" />
+      <method v="2" />
+    </configuration>
     <recent_temporary>
       <list>
+        <item itemvalue="Python.writeDataToCurrentLibrary" />
         <item itemvalue="Python.readDataRealtimeData" />
         <item itemvalue="Python.auto_test" />
         <item itemvalue="Flask server.Flask (quality_server.py)" />
         <item itemvalue="Python.Flask_water_server" />
-        <item itemvalue="Python.getData" />
       </list>
     </recent_temporary>
   </component>
@@ -217,7 +245,8 @@
       <workItem from="1726018728438" duration="5000" />
       <workItem from="1726018755261" duration="23000" />
       <workItem from="1726018932175" duration="8935000" />
-      <workItem from="1726032348460" duration="9182000" />
+      <workItem from="1726032348460" duration="11246000" />
+      <workItem from="1726050043767" duration="5789000" />
     </task>
     <servers />
   </component>
@@ -227,6 +256,7 @@
   <component name="com.intellij.coverage.CoverageDataManagerImpl">
     <SUITE FILE_PATH="coverage/water_quality_server$water_quality_server.coverage" NAME="water_quality_server Coverage Results" MODIFIED="1726038262910" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
     <SUITE FILE_PATH="coverage/water_quality_server$getData.coverage" NAME="getData Coverage Results" MODIFIED="1726024124109" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+    <SUITE FILE_PATH="coverage/water_quality_server$writeDataToCurrentLibrary.coverage" NAME="writeDataToCurrentLibrary Coverage Results" MODIFIED="1726050395419" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
     <SUITE FILE_PATH="coverage/water_quality_server$auto_test.coverage" NAME="auto_test Coverage Results" MODIFIED="1726039663979" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
     <SUITE FILE_PATH="coverage/water_quality_server$Flask_water_server.coverage" NAME="Flask_water_server Coverage Results" MODIFIED="1726033473666" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
     <SUITE FILE_PATH="coverage/water_quality_server$Flask__quality_server_py_.coverage" NAME="Flask (quality_server.py) Coverage Results" MODIFIED="1726037955859" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />

+ 89 - 1
README.md

@@ -1,3 +1,91 @@
 # flask_water_quality
 
-水质预测
+水质预测
+## 水质预测接口介绍
+    1、URL:http://127.0.0.1:8087/water_quality
+    2、method:post
+    3、Content-Type: application/json
+    4、body
+    {
+        "lfgawqyq_plc3_Tag17": 11,        
+        "lfgawqyq_plc3_Tag22": 8.2,   
+        "lfgawqyq_plc3_Tag20": 9,
+        "lfgawqyq_plc10_Tag45": 9,
+        "lfgawqyq_plc10_Tag43": 9,
+        "lfgawqyq_plc10_Tag50": 9,
+        "lfgawqyq_plc10_Tag52": 9,
+        "lfgawqyq_plc10_Tag51": 9,
+        "lfgawqyq_plc10_Tag53": 9
+    }
+    5、返回型
+    [药量1, 药量2, 药量3, 药量4, 预测值1,预测值2]   对应如下顺序:
+    n1_dose=lfgawqyq_plc11_Tag23
+    s1_dose=lfgawqyq_plc11_Tag124
+    n2_dose=lfgawqyq_plc11_Tag25
+    s2_dose=lfgawqyq_plc11_Tag122
+    out_cod_predict=lfgawqyq_xn_cscod
+    out_tn_predict=lfgawqyq_xn_cstn
+    返回值:
+         [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+
+    
+
+### 数据库
+    db_params.json 数据库 默认使用test
+    docker修改需要运行时挂载文件
+
+    
+
+### Flask_water_server.py
+```angular2html
+     nm_values = (
+        'lfgawqyq_plc3_Tag17',
+        'lfgawqyq_plc3_Tag22',
+        'lfgawqyq_plc3_Tag20',
+        'lfgawqyq_plc10_Tag45',
+        'lfgawqyq_plc10_Tag43',
+        'lfgawqyq_plc10_Tag52',
+        'lfgawqyq_plc10_Tag50',
+        'lfgawqyq_plc10_Tag51',
+        'lfgawqyq_plc10_Tag53',
+    )
+```
+    从数据库读取这些字段的值,发给水质预测接口,得到返回值
+         [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+    顺序:
+    write_data_list = [
+        'lfgawqyq_plc11_Tag23',
+        'lfgawqyq_plc11_Tag124',
+        'lfgawqyq_plc11_Tag25',
+        'lfgawqyq_plc11_Tag122',
+        'lfgawqyq_xn_cscod',
+        'lfgawqyq_xn_cstn',
+    ]
+    使用字典推导式将标签和值对应起来
+    data_mapping = {tag: value for tag, value in zip(write_data_list, result)}
+    
+
+    
+    http://localhost:8087/update_water_quality
+    GET 访问,返回预测值
+        {
+            "lfgawqyq_plc11_Tag23": 40.234,
+            "lfgawqyq_plc11_Tag124": 40.264,
+            "lfgawqyq_plc11_Tag25": 3.0,
+            "lfgawqyq_plc11_Tag122": 40.264,
+            "lfgawqyq_xn_cscod": 4.689,
+            "lfgawqyq_xn_cstn": 10.503
+        }
+### 写入数据库 writeDataToRealtimeData.py
+    upsert_realtime_data(cursor, data_mapping)
+    每次预测结果写入实时数据表以及当日数据表(xsinsert{年月日} xsinsert20240912)
+        实时数据:新结果更新到数据
+        当日数据表:新结果插入到数据表,加ts时间戳及createtime等 ...
+        
+    
+
+
+        
+
+
+

BIN
__pycache__/Flask_water_server.cpython-37.pyc


BIN
__pycache__/writeDataToCurrentLibrary.cpython-37.pyc


BIN
__pycache__/writeDataToRealtimeData.cpython-37.pyc


+ 1 - 1
quality_server.py

@@ -312,7 +312,7 @@ def predict(name):
 def calc():
     data = Flask_water_server.calc_water_quality()
     print('calculate water quality')
-    return jsonify(data)
+    return data,200
 @app.route('/')
 def home():
     return 'Hello, World!'

+ 52 - 0
water_quality.log

@@ -175,3 +175,55 @@
 2024-09-11 15:39:40,748-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag50': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc10_Tag53': 9} 
 2024-09-11 15:39:41,068-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
  
+2024-09-11 18:32:51,712-__main__-INFO-服务启动
+
+2024-09-11 18:33:05,907-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-11 18:33:09,254-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-11 18:33:23,064-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-11 18:33:23,083-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-11 18:33:37,273-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-11 18:33:37,281-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-11 18:33:54,627-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-11 18:33:54,635-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 09:02:29,501-__main__-INFO-服务启动
+
+2024-09-12 09:02:36,756-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 09:02:41,220-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 09:03:43,873-__main__-INFO-服务启动
+
+2024-09-12 09:03:53,113-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 09:03:53,487-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 09:04:06,170-__main__-INFO-服务启动
+
+2024-09-12 09:04:08,062-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 09:04:08,367-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 09:04:16,607-__main__-INFO-服务启动
+
+2024-09-12 09:04:18,746-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 09:04:19,056-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 09:04:51,776-__main__-INFO-服务启动
+
+2024-09-12 09:04:55,695-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 09:04:55,998-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 02:31:26,059-__main__-INFO-服务启动
+
+2024-09-12 02:43:57,666-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 02:44:23,508-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 02:44:23,859-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 02:44:24,088-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 
+2024-09-12 02:46:25,607-__main__-INFO-服务启动
+
+2024-09-12 02:46:27,844-__main__-INFO-receive from 127.0.0.1 = {'lfgawqyq_plc10_Tag43': 9, 'lfgawqyq_plc10_Tag52': 9, 'lfgawqyq_plc3_Tag17': 11, 'lfgawqyq_plc10_Tag51': 9, 'lfgawqyq_plc3_Tag20': 16.8547, 'lfgawqyq_plc3_Tag22': 27.2063, 'lfgawqyq_plc10_Tag53': 9, 'lfgawqyq_plc10_Tag45': 10.5263, 'lfgawqyq_plc10_Tag50': 9} 
+2024-09-12 02:46:31,554-__main__-INFO-return to 127.0.0.1 = [40.234, 40.264, 3.0, 40.264, 4.689, 10.503]
+ 

+ 78 - 0
writeDataToCurrentLibrary.py

@@ -0,0 +1,78 @@
+
+import datetime
+import psycopg2
+import json
+def get_ts_time():
+    current_time = datetime.datetime.now()
+    timestamp = current_time.timestamp()
+    return int(timestamp)
+# 获取 Unix 时间戳
+def get_current_day_library_name():
+    timestamp = get_ts_time()
+
+    # 将时间戳转换为 datetime 对象
+    date_obj = datetime.datetime.fromtimestamp(timestamp)
+
+    # 格式化日期为 YYYYMMDD 格式
+    formatted_date = date_obj.strftime("%Y%m%d")
+
+    # 拼接字符串
+    result_str = "xsinsert" + formatted_date
+
+    return result_str
+def writeDataToCurrentDay_Library(data):
+    # 连接到数据库
+    with open('db_params.json', 'r') as f:
+        db_params = json.load(f)
+        db_params = db_params['test']
+
+
+
+    #建立长连接
+    db_name = get_current_day_library_name()
+    ts_time = get_ts_time()
+
+    conn = psycopg2.connect(**db_params)
+    cursor = conn.cursor()
+    # 表名
+    db_name = get_current_day_library_name()
+
+
+        # 遍历字典中的每个键值对
+    for column_name, value in data.items():
+        cursor.execute(f"""
+            INSERT INTO {db_name} (nm, v,ts,createtime,factoryname,devicename,type,gatewaycode)
+            VALUES (%s, %s,{ts_time},{ts_time},'lfgawqyq','plc3',4,'SN2_30101_002209_00014')
+            """, (column_name, value))
+
+        conn.commit()
+
+
+
+    # 获取查询结果
+
+    # 打印结果
+
+    # 关闭游标和连接
+    cursor.close()
+    conn.close()
+    # cursor.execute(f"""SELECT 1 FROM {db_name} """)
+    # exists = cursor.fetchone()
+    #
+    # # 如果数据库不存在,则创建数据库
+    # if not exists:
+    #     cursor.execute(f"CREATE DATABASE {db_name}")
+    #
+    # # 创建表
+    # # 如果不存在,插入新行
+    # cursor.execute("""
+    #               INSERT INTO realtimedata (nm, v,ts,createtime,factoryname,devicename,type,gatewaycode)
+    #               VALUES (%s, %s,get_ts_time(),get_ts_time(),'lfgawqyq','plc10','SN2_30101_002209_00014')
+    #           """, ('Ifgawqyq_plc3_Tag22', '3'))
+
+# data ={"lfgawqyq_plc11_Tag23": 40.234, "lfgawqyq_plc11_Tag124": 40.264, "lfgawqyq_plc11_Tag25": 3.0, "lfgawqyq_plc11_Tag122": 40.264, "lfgawqyq_xn_cscod": 4.689, "lfgawqyq_xn_cstn": 10.503}
+# 
+# writeDataToCurrentDay_Library(data)
+
+
+

+ 16 - 6
writeDataToRealtimeData.py

@@ -1,7 +1,16 @@
+import datetime
+
 import psycopg2
 import json
 
+import writeDataToCurrentLibrary
+
+def get_ts_time():
+    current_time = datetime.datetime.now()
+    timestamp = current_time.timestamp()
+    return int(timestamp)
 def upsert_realtime_data(cursor, data):
+    writeDataToCurrentLibrary.writeDataToCurrentDay_Library(data)
     # 遍历字典中的每个键值对
     for column_name, value in data.items():
         # 检查是否存在具有特定 nm 值的行
@@ -15,15 +24,16 @@ def upsert_realtime_data(cursor, data):
             # 如果存在,更新该行
             cursor.execute("""
                    UPDATE realtimedata
-                   SET v = %s
+                   SET v= %s,ts =%s
                    WHERE nm = %s
-               """, (value, column_name))
-            print('Upsert realtime data')
+               """, (value, get_ts_time(),column_name))
+            print(f'Upsert realtime data,time:{get_ts_time()}')
         else:
             # 如果不存在,插入新行
-            cursor.execute("""
-                   INSERT INTO realtimedata (nm, v)
-                   VALUES (%s, %s)
+            ts_time = get_ts_time()
+            cursor.execute(f"""
+                   INSERT INTO realtimedata (nm, v,ts,createtime,factoryname,devicename,type,gatewaycode)
+                   VALUES (%s, %s,{ts_time},{ts_time},'lfgawqyq','plc3',4,'SN2_30101_002209_00014')
                """, (column_name, value))
             print('Insert realtime data')
 

+ 0 - 0
运行及挂载文件 (2).txt → 运行及挂载文件.txt