NEWS
IOBroker Parser Daten auslesen
-
Hallo an Alle,
Ich beschäftige mich schon einige Zeit mit IOBroker und ich finde es einfach nur toll.
Da ich kein Programmiere bin und fast keine Kenntnisse darüber besitze finde ich es super wie einfach zum Teil IOBroker ist und wie toll einem die Community helfen kann, meistensIch habe ein kleines Problem mit dem Parser Adapter, ich möchte Daten von einer Internen Webseite auslesen und komme da nicht weiter.
Ich habe den Quellcode schon in https://regex101.com/ kopiert und habe auch einen Full match aber ich bekomme das mit der Group nicht hin.Den Wert den ich auslesen möchte ist
Production today:auf der Webseite wird es so dargestellt, da ist ein Leerzeichen nach dem :
Wer kann mir denn da helfen ?
bzw gibt's da eine Dokumentation ?Danke für die Hilfe,
mfg Stefan
Der Quellcode sieht so aus:
<!doctype html> <html ng-app="smartpi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="css/reset.css"> <!-- CSS reset --> <link rel="stylesheet" href="vendor/font-awesome/css/font-awesome.min.css" /> <link href="vendor/metisMenu/metisMenu.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link rel="stylesheet" href="bower_components/nvd3/build/nv.d3.css"> <link rel="stylesheet" href="css/stretchy.css"> <link href="vendor/md-data-table/dist/md-data-table.min.css" rel="stylesheet" type="text/css" /> <!-- Resource style --> <link rel="stylesheet" href="css/styles.css?v=1" /> <!-- Custom CSS --> <link href="css/sb-admin-2.css" rel="stylesheet"> <!-- <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css"> --> <script> document.write("<link rel='stylesheet' href='css/angular-material.min.css?v=" + Date.now() + "'/>"); </script> <script> document.write(" <script type = 'text/javascript' src='vendor/md-data-table/dist/md-data-table.min.js?v=" + Date.now() + "'><\/script>"); </script> <!--<link rel="stylesheet" href="css/smartpi.css?v=1" /> --> <script> document.write("<link rel='stylesheet' href='css/smartpi.css?v=" + Date.now() + "'/>"); </script> <script src="js/modernizr.js"></script> <!-- Modernizr --> <script src="bower_components/angular/angular.js"></script> <script src="bower_components/d3/d3.js"></script> <script src="bower_components/nvd3/build/nv.d3.js"></script> <!-- or use another assembly --> <script src="bower_components/angular-nvd3/dist/angular-nvd3.js"></script> <script src="bower_components/angular-resource/angular-resource.js"></script> <script src="bower_components/moment/moment.js"></script> <script src="bower_components/angular-file-saver/dist/angular-file-saver.bundle.js"></script> <script src="bower_components/angular-base64/angular-base64.js"></script> <script src="bower_components/crypto-js/crypto-js.js"></script> <!-- <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script> --> <script> document.write("<script type='text/javascript' src='js/angular-animate.min.js?v=" + Date.now() + "'><\/script>"); </script> <!-- <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script> --> <script> document.write("<script type='text/javascript' src='js/angular-aria.min.js?v=" + Date.now() + "'><\/script>"); </script> <!-- <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script> --> <script> document.write("<script type='text/javascript' src='js/angular-messages.min.js?v=" + Date.now() + "'><\/script>"); </script> <!-- <script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script> --> <script> document.write("<script type='text/javascript' src='js/angular-material.min.js?v=" + Date.now() + "'><\/script>"); </script> <script> document.write(" <script type = 'text/javascript' src='vendor/md-data-table/dist/md-data-table.min.js?v=" + Date.now() + "'><\/script>"); </script> <!--<script src="js/app.js?v=1"></script>--> <script> document.write("<script type='text/javascript' src='js/app.js?v=" + Date.now() + "'><\/script>"); </script> <!--<script src="js/services.js?v=1"></script>--> <script> document.write("<script type='text/javascript' src='js/services.js?v=" + Date.now() + "'><\/script>"); </script> <!--<script src="js/module.js?v=1"></script>--> <script> document.write("<script type='text/javascript' src='js/module.js?v=" + Date.now() + "'><\/script>"); </script> <!--<script src="js/controllers.js?v=1"></script>--> <script> <!-- <link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.min.css" /> --> document.write("<script type='text/javascript' src='js/controllers.js?v=" + Date.now() + "'><\/script>"); </script> <title>SmartPi Dashboard</title> </head> <body ng-app="SmartPi" ng-controller="MainCtrl"> <header> <nav class="cd-stretchy-nav"> <a class="cd-nav-trigger" href="#0"> <span aria-hidden="true"></span> </a> <ul> <li><a href="index.html" class="active"><span></span></a></li> <li><a href="export.html"><span></span></a></li> <li><a ng-href="{{nodelocation}}" target="_blank"><span></span></a> <li><a href="settings.html"><span></span></a></li> <!-- <li><a href="#0"><span></span></a></li> --> <!-- <li><a href="#0"><span></span></a></li> --> <!-- <li><a href="#0"><span></span></a></li> --> </ul> <span aria-hidden="true" class="stretchy-nav-bg"></span> </nav> </header> <!--<main class="cd-main-content"> <!-- main content here --> <!--</main>--> <md-content class="md-default-theme"> <div class="md-toolbar-tools"> <span flex></span> <div hide show-gt-sm> <img src="img/enerserve.png" alt="enerserve logo" height="52"> <br> <span style="font-size: small;">Version: {{softwareversion}}</span> </div> <div show hide-gt-sm> <md-button ng-click="openSidebar()" class="md-fab md-primary" aria-label="Graph Menu" hide-gt-sm> <md-icon md-svg-src="img/icons/ic_menu_24px.svg"></md-icon> </md-button> </div> </div> </md-toolbar> <div flex="66"> <section layout="row"> <md-content flex> <div ng-switch="toShow"> <div ng-switch-when="dashboard"> <div layout="row" layout-wrap layout-sm="column"> <div flex> <md-card class="md-default-theme" style="margin-top: 0px;"> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <h2> <span>Power</span> </h2> <span flex></span> <div class="huge">{{formatNumber(momentary.power_total)}} W</div> </div> </md-toolbar> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <div class="flex"> <h1 class="display-2">P1: {{formatNumber(momentary.power[0])}} W</h1> </div> <div class="flex"> <h1 class="display-2">P2: {{formatNumber(momentary.power[1])}} W</h1> </div> <div class="flex"> <h1 class="display-2">P3: {{formatNumber(momentary.power[2])}} W</h1> </div> </div> </md-toolbar> <div layout="row"> <div flex> Consumption today: {{formatNumber(dayconsumption_total/1000)}} kWh </div> <div flex> Production today: {{formatNumber(dayproduction_total/1000)}} kWh </div> </div> </div> <div flex> <md-card class="md-default-theme" style="margin-top: 0px;"> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <h2> <span>Current</span> </h2> <span flex></span> <div class="huge">{{formatNumber(momentary.current_total)}} A</div> </div> </md-toolbar> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <div class="flex"> <h1 class="display-2">I1: {{formatNumber(momentary.current[0])}} A</h1> </div> <div class="flex"> <h1 class="display-2">I2: {{formatNumber(momentary.current[1])}} A</h1> </div> <div class="flex"> <h1 class="display-2">I3: {{formatNumber(momentary.current[2])}} A</h1> </div> </div> </md-toolbar> <div layout="row"> <div flex="33"> U1: {{formatNumber(momentary.voltage[0])}} V </div> <div flex="33"> U2: {{formatNumber(momentary.voltage[1])}} V </div> <div flex="33"> U3: {{formatNumber(momentary.voltage[2])}} V </div> </div> <div layout="row"> <div flex="33"> F1: {{formatNumber(momentary.frequency[0])}} Hz </div> <div flex="33"> F2: {{formatNumber(momentary.frequency[1])}} Hz </div> <div flex="33"> F3: {{formatNumber(momentary.frequency[2])}} Hz </div> </div> <div layout="row"> <div flex="33"> Cos Phi 1: {{formatNumber(momentary.cosphi[0])}} </div> <div flex="33"> Cos Phi 2: {{formatNumber(momentary.cosphi[1])}} </div> <div flex="33"> Cos Phi 3: {{formatNumber(momentary.cosphi[2])}} </div> </div> </div> </div> <div layout="row" layout-wrap> <div flex> <md-card class="md-default-theme"> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <h2> <span>Consumption</span> </h2> <span flex></span> <div class="huge">Week</div> </div> </md-toolbar> <nvd3 options='weekconsumptionoptions' data='weekconsumptiondata'></nvd3> </md-card> </div> </div> </div> <div ng-switch-when="chart"> <div layout="row" layout-wrap> <div flex> <md-card class="md-default-theme" style="margin-top: 0px;"> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <span flex></span> <md-button ng-click="dayback()" class="md-raised"> < day back </md-button> <md-button ng-click="dayforward()" class="md-raised" ng-disabled="disabledayforwardbutton"> day forward > </md-button> <md-button ng-click="adddayback()" class="md-raised"> << add day back </md-button> <md-button ng-click="removedayback()" class="md-raised" ng-disabled="disabledayremovebutton"> >> remove day back </md-button> </div> </md-toolbar> <md-toolbar layout="row"> <div class="md-toolbar-tools"> <span flex></span> <md-button ng-init="showLinechartPower = true" ng-click="linechartPower()" class="md-raised" ng-class="btnpowerline">power</md-button> <md-button ng-init="showLinechartEnergyPos = false" ng-click="linechartEnergy_pos()" class="md-raised" ng-class="btnenergy_posline">energy consumption</md-button> <md-button ng-init="showLinechartEnergyNeg = false" ng-click="linechartEnergy_neg()" class="md-raised" ng-class="btnenergy_negline">energy production</md-button> <md-button ng-init="showLinechartCurrent = false" ng-click="linechartCurrent()" class="md-raised" ng-class="btncurrentline">current</md-button> <md-button ng-init="showLinechartVoltage = false" ng-click="linechartVoltage()" class="md-raised" ng-class="btnvoltageline">voltage</md-button> </div> </md-toolbar> <nvd3 options='options' data='data'></nvd3> </md-card> </div> </div> </div> </div> </md-content> <md-sidenav class="md-sidenav-right" md-component-id="sidebarright" md-is-locked-open="$mdMedia('gt-sm')" md-whiteframe="4"> <md-toolbar class="md-theme-indigo"> <div layout="row"> <h1 class="md-toolbar-tools">Graph</h1> <span flex></span> <md-icon ng-click="closeSidebar()" md-svg-src="img/icons/ic_close_48px.svg" class="s48" aria-label="Close" hide-gt-sm></md-icon> </div> </md-toolbar> <md-content layout-padding="" layout="column" layout-align="start start"> <md-button style="text-align:left" ng-click="show('dashboard')" class="md-primary">Dashboard</md-button> <md-button style="text-align:left" ng-click="show('chart')" class="md-primary">Chart</md-button> </md-content> </md-sidenav> </section> </div> </md-content> <script src="js/jquery-2.1.4.js"></script> <script src="js/main.js"></script> <!-- Resource jQuery --> <script src="bower_components/tether/dist/js/tether.min.js"></script> <script src="vendor/bootstrap/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="vendor/metisMenu/metisMenu.min.js"></script> <script src="js/sb-admin-2.js"></script> <script src="js/scripts.js"></script> </body> </html>
-
Das Hauptproblem ist, dass der Wert den du auslesen möchtest, erst durch Javascript geladen / geschrieben wird. Das bekommst du also nicht nur mit Regex hin. Auf Anhieb konnte ich auch nicht finden, wie der Wert abgerufen wird. Das ist vermutlich in einem der vielen JavaScript Includes versteckt.
Ich würde an deiner Stelle mal im Browser die Entwickler Konsole Öffnen, dann die Seite neu laden und schauen, was alles im Reiter Network so auftaucht. Dort wird irgend wo eine Anfrage zu finden sein, die den Wert abruft. -
@w_stefan sagte in IOBroker Parser Daten auslesen:
gibt's da eine Dokumentation ?
versuch es mal auf regex101.com
Da habe ich es versucht, aber leider ist dein Screenshot und Quelltext nicht vom selben Zeitpunkt.
Das "Problem" ist, dass "Production today" und der Wert nicht zusammenhängend erzegt werden, sondern anscheinend erst die Beschriftungen, dann später die Werte.
Im Quelltext existiert aber keine 18.85<div flex> Production today: {{formatNumber(dayproduction_total/1000)}} kWh </div>
Ich fürchte sogar, dass die Daten woanders her kommen und über Platzhalter eingesetzt werden
-
Ich habe mal nach "smartpi" gesucht, das ist im Quelltext als Applikationsname angegeben. Falls es dieser SmartPi ist, gibt es wohl eine API: https://www.enerserve.eu/en/service/smartpi/manual/api.html
Du kannst ja mal diese URL im Browser testen: http://ipaddress:1080/api/all/all/now
-
Ich habe den Firefox Inspektor verwendet, leider kann ich da nur einen Screenshot erzeugen, aber da wird der Wert angezeigt.
Die API hat leider keine Production today: ich habe auch schon versucht die Daten über Prometheus export auszulesen da fehlen aber auch dieser Wert.
Prometheus export: http://192.168.1.40:9246/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 0.000202916 go_gc_duration_seconds{quantile="0.25"} 0.000440885 go_gc_duration_seconds{quantile="0.5"} 0.000534945 go_gc_duration_seconds{quantile="0.75"} 0.000700986 go_gc_duration_seconds{quantile="1"} 0.015456939 go_gc_duration_seconds_sum 23.252685806 go_gc_duration_seconds_count 19881 # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge go_goroutines 10 # HELP go_info Information about the Go environment. # TYPE go_info gauge go_info{version="go1.9.2"} 1 # HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. # TYPE go_memstats_alloc_bytes gauge go_memstats_alloc_bytes 903216 # HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. # TYPE go_memstats_alloc_bytes_total counter go_memstats_alloc_bytes_total 1.4083734376e+10 # HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. # TYPE go_memstats_buck_hash_sys_bytes gauge go_memstats_buck_hash_sys_bytes 761234 # HELP go_memstats_frees_total Total number of frees. # TYPE go_memstats_frees_total counter go_memstats_frees_total 6.92664268e+08 # HELP go_memstats_gc_cpu_fraction The fraction of this program's available CPU time used by the GC since the program started. # TYPE go_memstats_gc_cpu_fraction gauge go_memstats_gc_cpu_fraction 1.8929979341869276e-05 # HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. # TYPE go_memstats_gc_sys_bytes gauge go_memstats_gc_sys_bytes 1.907712e+07 # HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. # TYPE go_memstats_heap_alloc_bytes gauge go_memstats_heap_alloc_bytes 903216 # HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. # TYPE go_memstats_heap_idle_bytes gauge go_memstats_heap_idle_bytes 3.391488e+06 # HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. # TYPE go_memstats_heap_inuse_bytes gauge go_memstats_heap_inuse_bytes 1.949696e+06 # HELP go_memstats_heap_objects Number of allocated objects. # TYPE go_memstats_heap_objects gauge go_memstats_heap_objects 14971 # HELP go_memstats_heap_released_bytes Number of heap bytes released to OS. # TYPE go_memstats_heap_released_bytes gauge go_memstats_heap_released_bytes 2.048e+06 # HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. # TYPE go_memstats_heap_sys_bytes gauge go_memstats_heap_sys_bytes 5.341184e+06 # HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. # TYPE go_memstats_last_gc_time_seconds gauge go_memstats_last_gc_time_seconds 1.5590502239117749e+09 # HELP go_memstats_lookups_total Total number of pointer lookups. # TYPE go_memstats_lookups_total counter go_memstats_lookups_total 2.229676e+06 # HELP go_memstats_mallocs_total Total number of mallocs. # TYPE go_memstats_mallocs_total counter go_memstats_mallocs_total 6.92679239e+08 # HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. # TYPE go_memstats_mcache_inuse_bytes gauge go_memstats_mcache_inuse_bytes 3472 # HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. # TYPE go_memstats_mcache_sys_bytes gauge go_memstats_mcache_sys_bytes 16384 # HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. # TYPE go_memstats_mspan_inuse_bytes gauge go_memstats_mspan_inuse_bytes 20884 # HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. # TYPE go_memstats_mspan_sys_bytes gauge go_memstats_mspan_sys_bytes 49152 # HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. # TYPE go_memstats_next_gc_bytes gauge go_memstats_next_gc_bytes 4.194304e+06 # HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. # TYPE go_memstats_other_sys_bytes gauge go_memstats_other_sys_bytes 1.410794e+06 # HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. # TYPE go_memstats_stack_inuse_bytes gauge go_memstats_stack_inuse_bytes 950272 # HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. # TYPE go_memstats_stack_sys_bytes gauge go_memstats_stack_sys_bytes 950272 # HELP go_memstats_sys_bytes Number of bytes obtained from system. # TYPE go_memstats_sys_bytes gauge go_memstats_sys_bytes 2.760614e+07 # HELP go_threads Number of OS threads created. # TYPE go_threads gauge go_threads 15 # HELP http_request_duration_microseconds The HTTP request latencies in microseconds. # TYPE http_request_duration_microseconds summary http_request_duration_microseconds{handler="prometheus",quantile="0.5"} 24824.777 http_request_duration_microseconds{handler="prometheus",quantile="0.9"} 24824.777 http_request_duration_microseconds{handler="prometheus",quantile="0.99"} 24824.777 http_request_duration_microseconds_sum{handler="prometheus"} 291210.45700000005 http_request_duration_microseconds_count{handler="prometheus"} 5 # HELP http_request_size_bytes The HTTP request sizes in bytes. # TYPE http_request_size_bytes summary http_request_size_bytes{handler="prometheus",quantile="0.5"} 300 http_request_size_bytes{handler="prometheus",quantile="0.9"} 300 http_request_size_bytes{handler="prometheus",quantile="0.99"} 300 http_request_size_bytes_sum{handler="prometheus"} 1532 http_request_size_bytes_count{handler="prometheus"} 5 # HELP http_requests_total Total number of HTTP requests made. # TYPE http_requests_total counter http_requests_total{code="200",handler="prometheus",method="get"} 5 # HELP http_response_size_bytes The HTTP response sizes in bytes. # TYPE http_response_size_bytes summary http_response_size_bytes{handler="prometheus",quantile="0.5"} 2166 http_response_size_bytes{handler="prometheus",quantile="0.9"} 2166 http_response_size_bytes{handler="prometheus",quantile="0.99"} 2166 http_response_size_bytes_sum{handler="prometheus"} 10785 http_response_size_bytes_count{handler="prometheus"} 5 # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. # TYPE process_cpu_seconds_total counter process_cpu_seconds_total 21559.23 # HELP process_max_fds Maximum number of open file descriptors. # TYPE process_max_fds gauge process_max_fds 1024 # HELP process_open_fds Number of open file descriptors. # TYPE process_open_fds gauge process_open_fds 12 # HELP process_resident_memory_bytes Resident memory size in bytes. # TYPE process_resident_memory_bytes gauge process_resident_memory_bytes 1.1280384e+07 # HELP process_start_time_seconds Start time of the process since unix epoch in seconds. # TYPE process_start_time_seconds gauge process_start_time_seconds 1.55666169412e+09 # HELP process_virtual_memory_bytes Virtual memory size in bytes. # TYPE process_virtual_memory_bytes gauge process_virtual_memory_bytes 9.35559168e+08 # HELP smartpi_active_watts Active Watts # TYPE smartpi_active_watts gauge smartpi_active_watts{phase="A"} -627.098139 smartpi_active_watts{phase="B"} -704.090097 smartpi_active_watts{phase="C"} -461.25288 # HELP smartpi_amps Line current # TYPE smartpi_amps gauge smartpi_amps{phase="A"} 2.8728982733314483 smartpi_amps{phase="B"} 3.0994031262230997 smartpi_amps{phase="C"} 3.0415257814663175 smartpi_amps{phase="N"} 2.136357139342743 # HELP smartpi_apparent_power_volt_amps Line apparent power in volt amps # TYPE smartpi_apparent_power_volt_amps gauge smartpi_apparent_power_volt_amps{phase="A"} 679.785021 smartpi_apparent_power_volt_amps{phase="B"} 723.677814 smartpi_apparent_power_volt_amps{phase="C"} 712.321209 # HELP smartpi_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which smartpi was built. # TYPE smartpi_build_info gauge smartpi_build_info{branch="",goversion="go1.9.2",revision="",version=""} 1 # HELP smartpi_frequency_hertz Line frequency in hertz # TYPE smartpi_frequency_hertz gauge smartpi_frequency_hertz{phase="A"} 49.98047637641546 smartpi_frequency_hertz{phase="B"} 49.99023628197617 smartpi_frequency_hertz{phase="C"} 49.98047637641546 # HELP smartpi_phase_angle Line voltage phase angle # TYPE smartpi_phase_angle gauge smartpi_phase_angle{phase="A"} -0.9997823934766707 smartpi_phase_angle{phase="B"} -0.9990242823004072 smartpi_phase_angle{phase="C"} -0.7343225094356856 # HELP smartpi_power_factor_ratio Line power factor ratio # TYPE smartpi_power_factor_ratio gauge smartpi_power_factor_ratio{phase="A"} -47.51943482438104 smartpi_power_factor_ratio{phase="B"} -50.117606617687464 smartpi_power_factor_ratio{phase="C"} -33.355738534523965 # HELP smartpi_reactive_power_volt_amps Line reactive power in volt amps reactive # TYPE smartpi_reactive_power_volt_amps gauge smartpi_reactive_power_volt_amps{phase="A"} -1104 smartpi_reactive_power_volt_amps{phase="B"} -2469 smartpi_reactive_power_volt_amps{phase="C"} -24768 # HELP smartpi_volts Line voltage # TYPE smartpi_volts gauge smartpi_volts{phase="A"} 240.3552 smartpi_volts{phase="B"} 238.6793 smartpi_volts{phase="C"} 238.7578
API: http://192.168.1.40/api/all/all/now
{"serial":"smartpi","name":"House","lat":52.3667,"lng":9.7167,"time":"2019-05-28 15:33:57","softwareversion":"","ipaddress":"192.168.1.40","datasets":[{"time":"2019-05-28 15:33:54","phases":[{"phase":1,"name":"phase 1","values":[{"type":"current","unity":"A","info":"","data":2.8374162},{"type":"voltage","unity":"V","info":"","data":240.3186},{"type":"power","unity":"W","info":"","data":-615.93567},{"type":"cosphi","unity":"","info":"","data":-0.9999992},{"type":"frequency","unity":"Hz","info":"","data":49.97072}]},{"phase":2,"name":"phase 2","values":[{"type":"current","unity":"A","info":"","data":3.0533614},{"type":"voltage","unity":"V","info":"","data":239.0356},{"type":"power","unity":"W","info":"","data":-692.0152},{"type":"cosphi","unity":"","info":"","data":-0.99599},{"type":"frequency","unity":"Hz","info":"","data":49.97072}]},{"phase":3,"name":"phase 3","values":[{"type":"current","unity":"A","info":"","data":3.112565},{"type":"voltage","unity":"V","info":"","data":238.7494},{"type":"power","unity":"W","info":"","data":-456.0696},{"type":"cosphi","unity":"","info":"","data":-0.7409511},{"type":"frequency","unity":"Hz","info":"","data":49.97072}]},{"phase":4,"name":"phase 4","values":[{"type":"current","unity":"A","info":"","data":2.1447146}]}]}]}
mfg
Stefan
-
@w_stefan Möchtest Du wirklich alle Daten haben oder interessiert Dich nur die Leistung der 3 Phasen ? In dem Fall wird die JSON-Rückgabe wesentlich kürzer (übersichtlicher). Was ergibt ?
http://192.168.1.40/api/all/power/now
-
@paul53
Ich möchte den Wert Production Today: auslesen.
Die gemessenen Werte lese ich über MQTT aus, leider fehlt da der Wert Prodcution Today:mfg
Stefan
-
-
-
@paul53
Das ist der Strom der seit Mitternacht ins Netz geliefert wurde.
Ich habe noch keine Möglichkeit gefunden wie ich an Hand der vorhandenen Daten die kWh errechnen kann die seit 00:00 ins Stromnetz geliefert wurden.Also um das Ganze Bild zu bekommen:
Ich lese zwei Wechselrichter über MODBUS aus und ermittle mir folgende Wert über Blocky scripte,- Aktueller erzeugter Strom in Summe und kWh
Am SmartPi2 ist der Wert Production today: der Strom der seit Mitternacht geliefert also verkauft wurde
Wenn ich diesen Wert auslesen kann dann kann ich folgendes errechnen- Aktueller erzeugter Strom in kWh
- Aktueller gelieferter Strom in kWh
- Aktueller Eigenverbrauch in kWh
Wie ich diese Daten dann noch weiterverwende lasse ich mal so stehen
mfg Stefan
-
@w_stefan sagte:
an Hand der vorhandenen Daten die kWh errechnen kann die seit 00:00 ins Stromnetz geliefert wurden.
Welche Energiedaten (kWh) hast Du ? Bei zwei Zählern müssen es mindestens 2 sein.
-
@w_stefan Habe nochmal in die API-Beschreibung geschaut: Was liefert ?
http://192.168.1.40/api/chart/123/energy_neg/from/2019-05-28T00:00:00.000Z/to/2019-05-28T23:59:59.000Z
-
@paul53
Da bekomme ich eine sehr lange liste ich füge mal ein paar Zeilen davon ein,[{"key":"energy_neg_1","values":[{"time":"2019-05-28T00:00:38+0200","value":0},{"time":"2019-05-28T00:01:38+0200","value":0},{"time":"2019-05-28T00:02:38+0200","value":0},{"time":"2019-05-28T00:03:38+0200","value":0},{"time":"2019-05-28T00:04:38+0200","value":0},{"time":"2019-05-28T00:05:38+0200","value":0},{"time":"2019-05-28T00:06:38+0200","value":0},{"time":"2019-05-28T00:07:38+0200","value":0},{"time":"2019-05-28T00:08:38+0200","value":0},{"time":"2019-05-28T00:09:38+0200","value":0},{"time":"2019-05-28T00:10:38+0200","value":0},{"time":"2019-05-28T00:11:38+0200","value":0},{"time":"2019-05-28T00:12:38+0200","value":0},{"time":"2019-05-28T00:13:38+0200","value":0},{"time":"2019-05-28T00:14:38+0200","value":0},{"time":"2019-05-28T00:15:38+0200","value":0},{"time":"2019-05-28T00:16:38+0200","value":0},{"time":"2019-05-28T00:17:38+0200","value":0},{"time":"2019-05-28T00:18:38+0200","value":0},{"time":"2019-05-28T00:19:38+0200","value":0},{"time":"2019-05-28T00:20:38+0200","value":0},{"time":"2019-05-28T00:21:38+0200","value":0},{"time":"2019-05-28T00:22:38+0200","value":0},{"time":"2019-05-28T00:23:38+0200","value":0},{"time":"2019-05-28T00:24:38+0200","value":0},{"time":"2019-05-28T00:25:38+0200","value":0},{"time":"2019-05-28T00:26:38+0200","value":0},{"time":"2019-05-28T00:27:38+0200","value":0},{"time":"2019-05-28T00:28:38+0200","value":0},{"time":"2019-05-28T00:29:38+0200","value":0},{"time":"2019-05-28T00:30:38+0200","value":0},{"time":"2019-05-28T00:31:38+0200","value":0},{"time":"2019-05-28T00:32:38+0200","value":0},{"time":"2019-05-28T00:33:38+0200","value":0},{"time":"2019-05-28T00:34:38+0200","value":0},{"time":"2019-05-28T00:35:38+0200","value":0},{"time":"2019-05-28T00:36:38+0200","value":0},{"time":"2019-05-28T00:37:38+0200","value":0},{"time":"2019-05-28T00:38:38+0200","value":0},{"time":"2019-05-28T00:39:38+0200","value":0},{"time":"2019-05-28T00:40:38+0200","value":0},{"time":"2019-05-28T00:41:38+0200","value":0},{"time":"2019-05-28T00:42:38+0200","value":0},{"time":"2019-05-28T00:43:38+0200","value":0}, ...... {"time":"2019-05-28T05:36:38+0200","value":0},{"time":"2019-05-28T05:37:38+0200","value":0.011686},{"time":"2019-05-28T05:38:38+0200","value":0.215463},{"time":"2019-05-28T05:39:38+0200","value":0.320196},{"time":"2019-05-28T05:40:38+0200","value":0.396893},{"time":"2019-05-28T05:41:38+0200","value":0.464893},{"time":"2019-05-28T05:42:38+0200","value":0.548018},{"time":"2019-05-28T05:43:38+0200","value":0.626463},{"time":"2019-05-28T05:44:38+0200","value":0.769812},{"time":"2019-05-28T05:45:38+0200","value":0.879776},{"time":"2019-05-28T05:46:38+0200","value":0.864358},{"time":"2019-05-28T05:47:38+0200","value":0.47255},{"time":"2019-05-28T05:48:38+0200","value":0.508675},{"time":"2019-05-28T05:49:38+0200","value":0.787256},{"time":"2019-05-28T05:50:38+0200","value":0.910286},{"time":"2019-05-28T05:51:38+0200","value":0.971017},{"time":"2019-05-28T05:52:38+0200","value":1.038461},{"time":"2019-05-28T05:53:38+0200","value":1.155311},{"time":"2019-05-28T05:54:38+0200","value":1.259149},{"time":"2019-05-28T05:55:38+0200","value":1.338321},{"time":"2019-05-28T05:56:38+0200","value":1.393945},{"time":"2019-05-28T05:57:38+0200","value":1.410182},{"time":"2019-05-28T05:58:38+0200","value":1.392263},{"time":"2019-05-28T05:59:38+0200","value":1.358365},{"time":"2019-05-28T06:00:38+0200","value":1.279139},{"time":"2019-05-28T06:01:38+0200","value":1.232844},{"time":"2019-05-28T06:02:38+0200","value":1.240933},{"time":"2019-05-28T06:03:38+0200","value":1.221412},{"time":"2019-05-28T06:04:38+0200","value":1.182327},{"time":"2019-05-28T06:05:38+0200","value":1.039863},{"time":"2019-05-28T06:06:38+0200","value":1.025826},{"time":"2019-05-28T06:07:38+0200","value":1.053544},{"time":"2019-05-28T06:08:38+0200","value":1.058505},{"time":"2019-05-28T06:09:38+0200","value":1.203207},{"time":"2019-05-28T06:10:38+0200","value":1.408451},{"time":"2019-05-28T06:11:38+0200","value":1.608653},{"time":"2019-05-28T06:12:38+0200","value":1.814166},{"time":"2019-05-28T06:13:38+0200","value":2.038608},{"time":"2019-05-28T06:14:38+0200","value":2.125416},{"time":"2019-05-28T06:15:38+0200","value":2.137722}, ....
-
Im IOBroker habe ich die kWh die meine SolarAnlage erzeugt.
Am SmartPi2 habe ich Production today: das sind die kWh die Geliefert wurden also,
Erzeugte kWh - Eigenverbrauch kWh = Production todayDer SMA Wechselrichter zeigt den Tagesertrag in kWH an
Der SolarEdge hat nur einen Gesamtertrag in kWh den im mir errechne indem ich den Vortageswert von 00:00 Uhr nehme und den vom aktuellen Gesamtertrag abziehe. -
@w_stefan Da ich keine PV habe, muss ich fragen: Wofür ist der SMA-Wechselrichter und wofür SolarEdge ?
-
@w_stefan sagte:
Da bekomme ich eine sehr lange liste
Was bekommst Du, wenn als Zeitspanne eine Minute angegeben wird ?
http://192.168.1.40/api/chart/123/energy_neg/from/2019-05-28T20:09:00.000Z/to/2019-05-28T20:10:00.000Z
-
@paul53
Ich habe 5kWp Photovoltaik an einem SMA Wechselrichter und 6.5kWp Photovoltaik an einem SolarEdge Wechselrichter -
@w_stefan Also hast Du für Netzeinspeisung und -bezug nur die Informationen vom Smartpi ?
Dann kann man die Energiewerte mit einem Skript aus den Leistungen ermitteln. Als Anfangswerte für createState() bitte die Werte des "echten" Zählers eintragen !const idPower1 = '...'; // Phase 1 const idPower2 = '...'; // Phase 2 const idPower3 = '...'; // Phase 3 const idBezug = 'Smartpi.Bezug'; const idEinspeis = 'Smartpi.Einspeisung'; const idEinHeute = 'Smartpi.Einspeisung_heute'; const idEin0Uhr = 'Smartpi.Einspeisung_Mitternacht'; // Energie-Datenpunkt erzeugen createState(idBezug, 1.11, {type: 'number', unit: 'kWh'}); // Anfangswert anpassen ! createState(idEinspeis, 1.11, {type: 'number', unit: 'kWh'}); // Anfangswert anpassen ! createState(idEinHeute, 1.11, {type: 'number', unit: 'kWh'}); // Anfangswert anpassen ! createState(idEin0Uhr, 1.11, {type: 'number', unit: 'kWh'}); // Anfangswert anpassen ! var e1, e2, e3; var bezug, einspeis, mitternacht; setTimeout(function() { bezug = 1000 * getState(idBezug).val; // Wh einspeis = 1000 * getState(idEinspeis).val; mitternacht = 1000 * getState(idEin0Uhr).val; }, 100); // Verzögerung für createState() function calcEnergy() { var energy = (e1 + e2 + e3) / 3600000; // Wh if(energy >= 0) { bezug = bezug + energy; setState(idBezug, Math.round(bezug) / 1000, true); // kWh mit 3 Nachkommastellen } else { einspeis = einspeis - energy; setState(idEinspeis, Math.round(einspeis) / 1000, true); // kWh mit 3 Nachkommastellen setState(idEinHeute, Math.round(einspeis - mitternacht) / 1000, true); } } on({id: idPower1}, function(dp) { e1 = dp.oldState.val * (dp.state.ts - dp.oldState.ts); // mWs setTimeout(calcEnergy, 500); }); on({id: idPower2}, function(dp) { e2 = dp.oldState.val * (dp.state.ts - dp.oldState.ts); // mWs ); on({id: idPower3}, function(dp) { e3 = dp.oldState.val * (dp.state.ts - dp.oldState.ts); // mWs }); schedule('0 0 * * *', function() { // täglich um Mitternacht mitternacht = einspeis; setState(idEin0Uhr, Math.round(einspeis) / 1000, true); // kWh mit 3 Nachkommastellen });
-
@paul53
Danke für den Script ich werde das bei Gelegenheit mal testen.Ich werde den SmartPi2 mit einen anderen SmartMeter ersetzen welches mir die benötigen Werte und noch mehr über ModBus liefert.
Mit dem SmartPi2 hatte bzw habe ich so einige Problem und ich glaube die Software ist noch nicht dort angekommen wo der Entwickler sie gerne haben möchte.mfg Stefan
-
@w_stefan könntest du einem Neuling beschreiben, wie du die Daten über MQTT vom smartPi auf den ioBroker bekommst? Was muss ich im smartPi und was im IoBroker eintragen?