text:
🛑 Mesa Freeworld is down

In f57df64, Mesa Freeworld (https://nonfree.eu) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Mesa Freeworld is back up in 87e3f49 after 12 minutes.


text:
FermionicSumOp without primitive

Summary
Jupyter note.
https://gist.github.ibm.com/Ikko-Hamamura1/27c70e3d6c7e8c9b383dd04c1a0bd1b0

I've separated this Pull Request to #23. I will rebase once #23 is merged.

I've separated this Pull Request to #23. I will rebase once #23 is merged.

source: gharchive/issue

repo: manoelmarques/qiskit-nature

license_type: permissive

license_source: github-api


text:
Migrate to watchbot 4

Migrates ecs-telephone to watchbot 4. 🎉
The stack uses watchbot binaries available publicly on s3://mapbox/watchbot/linux/watchbot, and installs the watchbot binary in the Dockerfile. It also uses the new ecs-watchbot template changes from https://github.com/mapbox/ecs-telephone/pull/7. Thanks @rclark! 🙇♀
Tested it with a message to verify that my message does indeed become gobbledygook. 😄
cc/ @mapbox/platform-engine-room

Note: This version does not have the changes with respect to the metrics dashboard, since that's not published yet on watchbot.

Tested it with the latest version on watchbot, and it works as expected. The repository now:

Uses the watchbot 4 binary
Generates a dashboard for ecs-telephone.
Reuses containers for multiple jobs

source: gharchive/pull-request

repo: mapbox/ecs-telephone

license: ISC


text:
don't inherit multi_point from line_string

Can multi_point inherit from std::vector< point<T> > directly, rather than line_string<T>? Semantically, it is not a line string and should not auto-convert to one.

@jfirebaugh - good call! Agree, deriving from line_string is confusing.

Digging a bit deeper, the reason for multi_point inheriting from line_string was  less duplication/verbosity when used in algorithms:
diff --git a/include/mapnik/proj_transform.hpp b/include/mapnik/proj_transform.hpp
index 3247a15..82b732f 100644
--- a/include/mapnik/proj_transform.hpp
+++ b/include/mapnik/proj_transform.hpp
@@ -26,12 +26,13 @@
 // mapnik
 #include <mapnik/config.hpp>
 #include <mapnik/util/noncopyable.hpp>
+// stl
+#include <vector>

 namespace mapnik {

 namespace geometry {
 template <typename T> struct point;
-template <typename T> struct line_string;
 }
 class projection;
 template <typename T> class box2d;
@@ -50,8 +51,8 @@ public:
     bool backward (double *x, double *y , double *z, int point_count, int offset = 1) const;
     bool forward (geometry::point<double> & p) const;
     bool backward (geometry::point<double> & p) const;
-    unsigned int forward (geometry::line_string<double> & ls) const;
-    unsigned int backward (geometry::line_string<double> & ls) const;
+    unsigned int forward (std::vector<geometry::point<double>> & ls) const;
+    unsigned int backward (std::vector<geometry::point<double>> & ls) const;
     bool forward (box2d<double> & box) const;
     bool backward (box2d<double> & box) const;
     bool forward (box2d<double> & box, int points) const;
diff --git a/include/mapnik/well_known_srs.hpp b/include/mapnik/well_known_srs.hpp
index e8349e7..d175ef5 100644
--- a/include/mapnik/well_known_srs.hpp
+++ b/include/mapnik/well_known_srs.hpp
@@ -26,7 +26,7 @@
 // mapnik
 #include <mapnik/global.hpp> // for M_PI on windows
 #include <mapnik/enumeration.hpp>
-#include <mapnik/geometry.hpp>
+#include <mapnik/geometry/point.hpp>

 #pragma GCC diagnostic push
 #include <mapnik/warning_ignore.hpp>
@@ -35,6 +35,7 @@

 // stl
 #include <cmath>
+#include <vector>

 namespace mapnik {

@@ -93,9 +94,9 @@ static inline bool merc2lonlat(double * x, double * y , int point_count)
     return true;
 }

-static inline bool lonlat2merc(geometry::line_string<double> & ls)
+static inline bool lonlat2merc(std::vector<geometry::point<double>> & ls)
 {
-    for(auto & p : ls)
+    for (auto& p : ls)
     {
         if (p.x > 180) p.x = 180;
         else if (p.x < -180) p.x = -180;
@@ -108,7 +109,7 @@ static inline bool lonlat2merc(geometry::line_string<double> & ls)
     return true;
 }

-static inline bool merc2lonlat(geometry::line_string<double> & ls)
+static inline bool merc2lonlat(std::vector<geometry::point<double>> & ls)
 {
     for (auto & p : ls)
     {
diff --git a/src/proj_transform.cpp b/src/proj_transform.cpp
index 108e3f9..a418d5d 100644
--- a/src/proj_transform.cpp
+++ b/src/proj_transform.cpp
@@ -102,7 +102,7 @@ bool proj_transform::forward (geometry::point<double> & p) const
     return forward(&(p.x), &(p.y), &z, 1);
 }

-unsigned int proj_transform::forward (geometry::line_string<double> & ls) const
+unsigned int proj_transform::forward (std::vector<geometry::point<double>> & ls) const
 {
     std::size_t size = ls.size();
     if (size == 0) return 0;
@@ -242,7 +242,7 @@ bool proj_transform::backward (geometry::point<double> & p) const
     return backward(&(p.x), &(p.y), &z, 1);
 }

-unsigned int proj_transform::backward (geometry::line_string<double> & ls) const
+unsigned int proj_transform::backward (std::vector<geometry::point<double>> & ls) const
 {
     std::size_t size = ls.size();
     if (size == 0) return 0;
diff --git a/test/unit/geometry/geometry_equal.hpp b/test/unit/geometry/geometry_equal.hpp
index 4ff80ab..6a510ce 100644
--- a/test/unit/geometry/geometry_equal.hpp
+++ b/test/unit/geometry/geometry_equal.hpp
@@ -119,7 +119,7 @@ struct geometry_equal_visitor
     }

     template <typename T>
-    void operator() (line_string<T> const& ls1, line_string<T> const& ls2) const
+    void operator() (std::vector<point<T>> const& ls1, std::vector<point<T>> const& ls2) const
     {
         if (ls1.size() != ls2.size())
         {
@@ -150,11 +150,18 @@ struct geometry_equal_visitor
     }

     template <typename T>
+    void operator() (line_string<T> const& ls1, line_string<T> const& ls2) const
+    {
+        (*this)(static_cast<std::vector<point<T>> const&>(ls1), static_cast<std::vector<point<T>> const&>(ls2));
+    }
+
+    template <typename T>
     void operator() (multi_point<T> const& mp1, multi_point<T> const& mp2) const
     {
-        (*this)(static_cast<line_string<T> const&>(mp1), static_cast<line_string<T> const&>(mp2));
+        (*this)(static_cast<std::vector<point<T>> const&>(mp1), static_cast<std::vector<point<T>> const&>(mp2));
     }

+
     template <typename T>
     void operator() (multi_line_string<T> const& mls1, multi_line_string<T> const& mls2) const
     {

Maybe we should add a  common base class but for now lets derive from container directly.
Here is the latest multi_point implementation
template <typename T, template <typename...> class Cont = std::vector>
struct multi_point : Cont<point<T>>
{
    using point_type = point<T>;
    using container_type = Cont<point_type>;
    multi_point() = default;
    explicit multi_point(std::size_t size)
        : container_type(size) {}
    inline std::size_t num_points() const { return container_type::size(); }
    inline void add_coord(T x, T y) { container_type::template emplace_back(x, y);}
};

The main difference is a template template parameter for container type. std::vector is great but there are some others, too.

mapbox::geometry::multi_point<double>; // default to std::vector
mapbox::geometry::multi_point<double, boost::container::vector>; // use Boost.Container vector implementation.
mapbox::geometry::multi_point<float, std::deque>; // deque

@artemp Can you explain what you mean by "duplication/verbosity when used in algorithms", or what's going on in the diff you posted? Not sure I understand.
I'm 👍  on the current implementation, deriving from container directly.

@jfirebaugh - sorry it wasn't very clear, but that diff ^ demonstrates how @flippmoke was using the fact that from data structure point of  view line_string and multi_point are essentially the same.
(*this)(static_cast<line_string<T> const&>(mp1), static_cast<line_string<T> const&>(mp2));
After converting  mapnik to use new multi_point I released that verbosity is really not an issue, so lets stick with current implementation.

ok this is in master, closing

@artemp - you forgot to actually close ;)

@springmeyer - :) cheers

authors: artemp jfirebaugh springmeyer


text:
mapbox-gl-js@1.3.1

According to @mapsam updating the gl version fixes some rendering bugs.
This should be a major version bump, given the implications of switching to a gl-js version >= 1.0.0: https://github.com/mapbox/mapbox-gl-js/blob/master/CHANGELOG.md#100

Also:

updated node dependencies, in part to resolve security vulnerabilities like https://www.npmjs.com/advisories/1118
added node 12 to the versions tested on CI

repo: mapbox/mbview


text:
Functionality to expand the Mapillary image inside the navigation map itself.

@planemad - It would be great if we could expand a Mapillary imagery in the navigation map itself by double clicking on the small image shown in the tool. This would mean that we don't have to open the image separately in a new tab.
Current output:
We only have a small image on the left bottom corner which is not interactive. It is difficult to determine a turn restriction as the image is small.

Expected output:
When we double click on the mapillary image it should expand the image to full-screen size inside the navigation map tool itself so that we don't have to open the image in a new tab or JOSM.

Single click on image opens the full resolution image in a new tab, closing comes back to original map.
This implementation has the added flexibility to switch tab to see the map again which is not possible if done within the same tab as the map.

authors: nikhilprabhakar planemad

repo: mapbox/osm-navigation-map


text:
Missing mapillary images when loaded in JOSM

Mapillary images shown in the osm-navigation-map are not being loaded in JOSM. I came across this issue quite a few times, so thought of ticketing this.

Mapillary image detected in osm-navigation-map

No mapilary image in loaded on JOSM
Imagery location:

http://mapbox.github.io/osm-navigation-map/#17.88/45.45784/-73.82010
http://mapbox.github.io/osm-navigation-map/#18.58/45.42085/-73.97119

This issue is already mentioned in our previous mapping task aswell
cc:/ @planemad @geohacker

@gyllen it seem like the detected objects vector tiles https://a.mapillary.com/v3/tiles/{z}/{x}/{y}.mapbox is more recent than the coverage layer https://d2munx5tg0hw47.cloudfront.net/tiles/{z}/{x}/{y}.mapbox that is being used in JOSM
How long is the delay in updating both tiles from a new photograph submission in Mapillary?

@planemad We are switching out the old vector tile layer for https://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt
I should not take more then around 10 minutes before that layer updates (sometimes longer if the region is cached in cloudfront)
Here is the spec (this will be posted on website soon)
Vector Tile Specification

Endpoint: http://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt
Extent: 4096

Sequence Overview Layer

Name: mapillary-sequence-overview
Type: circle

We divide a tile into 256x256 squares. Each square takes up 16x16
pixels (if extent is 4096). Each square is associated with the latest
captured sequence within the square.

Property
Type
Description
Available Zoom Levels
Guarantee
Examples

key
String
Sequence key of the latest sequence
0-5
Non-empty string
"h1f6sKNaxOG9YReT5fdv5A"

userkey
String
User key of the latest sequence
0-5
Any string (empty if not found)
"", "73Q3j-BDvHrsirf6gPYT4w"

captured_at
Number
The captured time of the latest sequence, expressed as UTC epoch time in milliseconds
0-5
Non-negative integer (0 if not found)
0, 1452761926242

ikey
String
The first image key of the latest sequence
0-5
Any string (empty if not found)
"", "SoPIfY9dIvhwz9JULXGLpQ"

image_count
Number
The number of images within the square
0-5
Non-negative integer
0, 134

user_count
Number
The number of users within the square
0-5
Non-negative integer
0, 12

Sequence Layer

Name: mapillary-sequences
Type: line

Property
Type
Description
Available Zoom Levels
Guarantee
Examples

key
String
Sequence key
6-14
Non-empty string
"h1f6sKNaxOG9YReT5fdv5A"

userkey
String
User key
6-14
Any string (empty if not found)
"", "73Q3j-BDvHrsirf6gPYT4w"

captured_at
Number
Captured time, expressed as UTC epoch time in milliseconds
6-14
Non-negative integer (0 if not found)
0, 1452761926242

ikey
String
The first image key
6-14
Any string (empty if not found)
"", "SoPIfY9dIvhwz9JULXGLpQ"

Image Layer

Name: mapillary-images
Type: circle

Property
Type
Description
Available at
Guarantee
Examples

key
String
Image key
14
Non-empty string
"M7C5Vr8dfHX6PKkHJW4FnQ"

userkey
String
User key
14
Any string (empty if not found)
"", "4grOAszFcvM6c5~-nwfdbw~"

captured_at
Integer
Captured time, expressed as UTC epoch time in milliseconds
14
Non-negative integer (0 if not found)
0, 1448527834026

skey
String
Sequence key
14
Non-empty string
"h1f6sKNaxOG9YReT5fdv5A"

ca
Number
Image azimuth
14
Any number (-1 if not found)
-1, 250.2, 335.34

pano
Number
Image pano
14
Either 0 or 1
0, 1

cc @ajithranka @amishas157

@gyllen is the min zoom for the new tiles z6?

Map now using the latest tiles as of 1e216ec

authors: gyllen jothirnadh planemad


text:
Updates to mapd-deps-ubuntu.sh

To successfully run scripts/mapd-deps-ubuntu.sh  in a newly created Docker container (Ubuntu 16.04), the following commands were required prior running the script:
apt-get install sudo cppcheck clang-tidy libegl1-mesa-dev

Confirm this issue.

Closing this issue, as the fix is generally to use Ubuntu 18.04LTS to install the newer/proper library versions or to use the Docker containers pushed by OmniSci.

authors: pearu randyzwitch wangliangxu

repo: mapd/mapd-core


text:
502 Error

The http://boilerplate.mape.me/ link throws 502 Error when clicked

Unblocked

The http://boilerplate.mape.me/ link throws 502 Error when clicked

inflowing error

repo: mape/node-express-boilerplate

license: mit

license_source: bigquery


text:
Invalid tile template in MapLibre style

Default demo MapLibre style still does not work. I only get blue background. Other styles seem to work fine. #102

I can confirm #107 fixes the issue reported in #102.

repo: maplibre/maplibre-gl-native


text:
Print warning on multiple installs of node-mapnik in node_modules tree

If more than one node-mapnik ends up in the npm/node-modules dependency tree then:

at best: font or datasource registration may unpredictably fail because the global caches only behave correctly if truly once instance is loaded in the process.
at worst these issues only manifest in production and go unnoticed in local development
also odd behavior can also occur when the duplicate node-mapnik versions are different and have different ABI - leading to either symbol errors at startup or crashes.

For these reasons it is critical that only one node-mapnik version is installed in the node_modules tree. This means that npm's behavior of non deduping duplicate modules (under various circumstances) is fundamentally incompatible with node-mapnik. Therefore we need to help users and developers ensure that only one node-mapnik is installed. This would help flag when:

two dependencies are used that each depend on node-mapnik and unintentionally install different versions
or the declaration of a top level node-mapnik does not work to dedupe the deps

re-wrote the above ticket with more detail - also refs https://github.com/mapbox/versioning-node-cpp (which could take language from this ticket)

authors: flippmoke springmeyer

repo: mapnik/node-mapnik


text:
ssl_no_cert_checks not working anymore?

It appears that the option ssl_no_cert_checks in MapProxy is not working anymore. I've checked this both by putting the http section in globals, as well as in my sources. I'm using Python 2.7.11, and MapProxy 1.9.0. I was able to reproduce the same issue with the current master from Github. I was also able to check this by calling HTTPClient directly with an HTTPS URL in some test code.
The WMS service I would like to access is https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wms?
It is also exposed as HTTP, which can be used as a workaround, but I'm working on an application to automatically generate a MapProxy configuration, so I'm also looking at HTTPS. I wanted to use ssl_no_cert_checks in order to speed up development. When done, our configuration should check the certificates.
It appears that the cause is that, since Python 2.7.9 SSL verification is done by default. See for example https://github.com/mtschirs/quizduellapi/issues/2 and many other search results. I'm not sure if this also occurs with Python 3, since I'm not using it (for now).

See also https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection

repo: mapproxy/mapproxy


text:
Channel merging raises list index out of range

We're using the channel merging to combine infrared images with rgb to create cir. So far it worked very well. But lately we stumbled over an error requesting areas that partly have no data. The server shows an internal error and produces the attached traceback. When requesting the source cache it works with no problems for the same area.
As example, when we're requesting the WMS with following parameters SRS=EPSG:31468&BBOX=4403900,5915900,4404650,5916650&WIDTH=6000&HEIGHT=6000 the layers rgb and ir (the source caches) working as expected. cir (the merged cache) throws the error.
I think it's a bug and it should be fixed so that the merged cache can display these areas too.
I investigated the code in merge.py lin 199 and it seems, that src_img_bands does not contain op.src_img. So maybe this should be handled here. I didn't figured out a concrete solution.
We're using MapProxy Version 1.10.0a0-20161027 with Python 2.7.6 and following cache configuration:
caches:
  # layer rgb
  cache_dop20_rgb:
    sources: []
    grids: [DE_EPSG_25832_DOP]
    format: mixed
    request_format: image/png
    cache:
      type: file
      directory: /local/dop_rgb/DE_EPSG_25832_DOP
  # layer ir
  cache_dop20_ir:
    sources: []
    grids: [DE_EPSG_25832_DOP]
    format: mixed
    request_format: image/png
    cache:
      type: file
      directory: /local/dop_ir/DE_EPSG_25832_DOP
  # layer cir
  cache_dop20_cir:
     sources:
       r: [{source: cache_dop20_ir, band: 0}]
       g: [{source: cache_dop20_rgb, band: 0}]
       b: [{source: cache_dop20_rgb, band: 1}]
       a: [{source: cache_dop20_ir, band: 3}]
     grids: [DE_EPSG_25832_DOP]
     meta_size: [1, 1]
     meta_buffer: 0
     disable_storage: true

Yes, the exception is a bug. It now checks if all required sources are passed to the band merger. It returns a blank image otherwise.

Excellent! We just updated to the commited version and now it works as expected. Thanks!

authors: DirkThalheim olt


text:
arcgis directory layout for mapproxy-util export

Added support to the mapproxy-util export script for exporting file caches in an arcgis directory layout.

Can you create a new branch for this pull request and only commit the relevant change? The export documentation also needs to mention this new type.

Created new Pull request with affected files: #224


text:
Hive datagen (#300)

Porting changes to 1.11.0

+1. Thanks Prasad

repo: mapr/drill-test-framework


text:
Is there a way to prevent the map from requesting location permission?

I'd like to prevent the map from requesting for permission since this is handled somewhere else.
I have tried:
var map = plugin.google.maps.Map.getMap(div, {
  controls: {
    myLocationButton: false,
    myLocation: false
  }
});

No luck. Please help!

I am having the same problem.  I have both set to false and my app is not requesting location information from the user.  You can see in iOS I do not have any location permissions set and it is all working fine, but on Android it is still asking for permission even though I am not requesting it.

I'd like to prevent the map from requesting for permission since this is handled somewhere else. I have tried:
var map = plugin.google.maps.Map.getMap(div, {
  controls: {
    myLocationButton: false,
    myLocation: false
  }
});

No luck. Please help!

Caused by this line of code in PluginMap.java:
if (controls.has("myLocationButton") || controls.has("myLocation")) {
You need to remove myLocationButton and myLocation from controls property in order to prevent the check

repo: mapsplugin/cordova-plugin-googlemaps


text:
Shifting DIV position does not shift the map nor touchable region

Hello, with response to users' interaction, I adjusted the position of the div containing the google map using Javascript. I have tried calling refreshLayout or setPadding, neither of them updates the touchable region of the map, so now a part of the map is hidden behind another div.
Is there any way to update the map region? Thanks!
Javascript
document.getElementById("mapCanvas").setAttribute('style','top:76px;');
gmap.setPadding( 20, 0 , 0 , 0 );
gmap.refreshLayout();

Original CSS styling in the stylesheet
.gmap {
    width:100%;
    height:100%;
    position: fixed;
    left:0px;
    top:56px;
    z-index: 2;
}

HTML markup

Can you try wrapping the refreshLayout inside setTimeout function? I think thats how I solved.. i had similar problem with yours

I'm having the same problem, did you found an answer?

The current version is not designed for this case. Don't shift the map div.
The next version will solve this without do anything.


text:
Update "Latest Release"?

Currently v1.0.2 is set as the "Latest Release" under the Releases Tab. Maybe change the tag to point to the v1.1.0 release?

Yes that would be useful. I saw you had tags, but a release creates a zip and tar.gz people can easily download and then build.
Having the tags it shouldn't be too long. Thanks in advance!
ping @orangemug

Apologies for taking so long to get to this. v1.2.0 is now released see

https://github.com/maputnik/editor/releases
https://maputnik.github.io/blog/2018/05/08/release-v1.2.0

authors: ARolek loicgasser orangemug

repo: maputnik/editor

license: MIT


text:
"Invalid host header" using docker image

I'm using the current Docker image to run Maputnik:
docker run -d -p 30030:8888 maputnik/editor:latest
This is, what happens in the container's log:

> maputnik@1.1.0 start /maputnik
> webpack-dev-server --progress --profile --colors --config config/webpack.config.js "--host" "0.0.0.0"

Project is running at http://0.0.0.0:8888/
webpack output is served from /
Content not from webpack is served from ./public
404s will fallback to /index.html
51948ms building modules
73ms sealing
0ms optimizing
0ms basic module optimization
35ms module optimization
1ms advanced module optimization
0ms basic chunk optimization
0ms chunk optimization
0ms advanced chunk optimization
0ms module and chunk tree optimization
0ms chunk modules optimization
0ms advanced chunk modules optimization
25ms module reviving
32ms module order optimization
20ms module id optimization
0ms chunk reviving
0ms chunk order optimization
45ms chunk id optimization
81ms hashing
2ms module assets processing
277ms chunk assets processing
85ms additional chunk assets processing
0ms recording
0ms additional asset processing
1192ms chunk asset optimization
506ms asset optimization
176ms emitting

However, the only message I get, when I open the browser at http://localhost:30030 is Invalid Host header.
> curl http://localhost:30030
Invalid Host header%

The latest release 1.0.2 produces a working docker image:
docker build https://github.com/maputnik/editor.git\#v1.0.2

Just run docker run -d -p 30030:8888 maputnik/editor:latest successfully and the editor is available at http://localhost:30030/, so I think this issue could be closed.

authors: pathmapper umbertooo


text:
Interpolate values

It would be nice to be able to add/edit exponential values like these:
"paint": {
    "line-color": {
      "property": "basin",
      "stops": [
        [-300, "#66d4ff"],
        [-200, "#222222"],
        [-100, "#6687ff"],
        [ -99, "#bf66ff"]
      ],
      "type": "exponential"
    },

If such code is added manually in json editor, maputnik displays values (colours in this example):

But I'm unable to see/change stop value and even trying to change colour gives an error:

layers[2].paint.line-color.stops[0]: object stop key must have zoom
layers[2].paint.line-color.stops[1]: object expected, number found

This is very usefull when creating different thematic maps. For example river basin maps where one property contains basin number and you want to visualise different basins with different colours without creating a different layer for different basin (which could mean a lot of layers).

It looks like Maputnik requires you to provide a zoom level, which is incorrect as per the spec. I think the following will work... ish, not sure 🤔
"paint": {
    "line-color": {
      "property": "basin",
      "stops": [
        [{"zoom": 0, "value": -300}, "#66d4ff"],
        [{"zoom": 0, "value": -200}, "#222222"],
        [{"zoom": 0, "value": -100}, "#6687ff"],
        [{"zoom": 0, "value": -99}, "#bf66ff"]
      ],
      "type": "exponential"
    }
}

I believe the issue is that the UI doesn't support "Property functions" see https://www.mapbox.com/mapbox-gl-js/style-spec/#other-function
Pinging @pjsier as the original author, for any further insight (incase I'm getting this entirely wrong)

Actually looking at it if you set {"zoom": 0, ...} seems to work as a slightly hacky workaround. @tomass can you confirm

@orangemug yes, confirmed! I can add, remove and change values.

authors: orangemug tomass


text:
install mapbox_vector_tile

fix miss mapbox_vector_tile
tilestache-server.py -c ../vector-datasource/tilestache.cfg
Error loading Tilestache config:
Traceback (most recent call last):
  File "/usr/local/bin/tilestache-server.py", line 55, in <module>
    app = TileStache.WSGITileServer(config=options.file, autoreload=True)
  File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 400, in __init__
    self.config = parseConfigfile(config)
  File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 116, in parseConfigfile
    return Config.buildConfiguration(config_dict, dirpath)
  File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 221, in buildConfiguration
    config.layers[name] = _parseConfigfileLayer(layer_dict, config, dirpath)
  File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 441, in _parseConfigfileLayer
    _class = loadClassPath(provider_dict['class'])
  File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 481, in loadClassPath
    raise Core.KnownUnknown('Tried to import %s, but: %s' % (classpath, e))
TileStache.Core.KnownUnknown: Tried to import TileStache.Goodies.VecTiles:MultiProvider, but: No module named mapbox_vector_tile

Thanks!

authors: hanchao rmarianski

repo: mapzen/vector-datasource


text:
zip signature verification failed

As I tried to flash the freecyngn-flashable-cm12.zip on my Android device (Samsung Galaxy S5 with Cyanogenmod 12.1 nightlies and TWRP 2.8.7.0) the process aborted because of an error E:Zip signature verification failed: 1. Lastly I could apply freecyngn by disabling the zip signature verification – could the flashable zip be signed by the developer?

I have exactly the same issue on a device running the latest CM12.1 snapshot (not nightly) and the new CM recovery. I'll see whether the CM recovery supports disabling signature verification at all.

Seems like there's no option in the new CM recovery to disable signature verification. So I'm out of luck here.
I manually removed the packages running the shell script commands through adb shell later (after adb root && adb remount). Is this sufficient? I read in the comments of another issue that it's important to flash freecyngn before the first reboot after CM got flashed. Why is that? Does the first boot process write non-free apps somewhere into the system where it's impossible to remove them from afterwards? I'm really curious about that.

authors: benediktg mejo-

repo: mar-v-in/freecyngn

license: WTFPL


text:
add command RunDbtJob

A new command RunDbtJob to run a dbt cloud job

@alexeyegorov you might be interested in this:
With this it is now possible to start a mara pipeline inside databricks without mara database and running a dbt cloud job:

@gozrehm have a look. ;)

@alexeyegorov you might be interested in this:
With this it is now possible to start a mara pipeline inside databricks without mara database and running a dbt cloud job:

@leo-schick I hope that patching the secrets inside the code was just an example. ;)

Yes. dbutils.secrets.get is the way to go. Patching the mara command is still required, unfortunately.

At one point I went with basically patching every secret to use environment variables and then fill the env variables with https://pypi.org/project/python-dotenv/ (which is also an optional dependency of pydantic, so used quite a lot): https://docs.pydantic.dev/install/#optional-dependencies

authors: alexeyegorov jankatins leo-schick

repo: mara/mara-dbt


text:
PhantomJS version update

[BF] PhantomJS version update fix my problem with different DPI in Linux and Windows (https://code.google.com/p/phantomjs/issues/detail?id=659)

Oh, yes, we can merge that. But isn't that what semver is for? :wink:
Just run rm -Rf ./node_modules/html-pdf && npm install html-pdf and you should be up to date.

Thanks alot! Actually I don't know that helped me, but between Win and Linux there are essential distinctions when converting. And up to the end I didn't resolve them completely. It became slightly better than was.

authors: PredokMiF marcbachmann

repo: marcbachmann/node-html-pdf


text:
Modbus registers issues/adds on GW10k-ET on fw:18+

Hi Marcel,
I am really sorry for inconviniences from this form, but I am not so sure how to manage PULLs in Git correctly and do not want to make any mess.
I am using this library standalone without HA and I identified some issuses which is not visible with HA, maybe.
I have been test it on few different GW10k-ET inverters in production with fw23 and fw111127 (identified by SolarGo).
Main issue, which is raising exception on Invertor.read_settings_data() class function, because some registers are not accesible (trace is below). It is all those 3:
Integer("max_charge_power", 47606, "Max Charge Power"),  Integer("smart_charging_enable", 47609, "Smart Charging Mode Switch"), Integer("eco_mode_enable", 47612, "Eco Mode Switch"),
failing with ILLEGAL DATA ADDRESS response. I do not want to change your code so much, then I do not go too deep to solve handling missing/wrong registers in general in this function, but it can be helpfull to implement it with as just log warnning and not to lead Exit or just hint me how to handle it correctly, for now RequestRejectedException is not propagated to call this function.
Traceback (most recent call last):   File "/home/epm/program/epm_ec/devices/epm_goodwe.py", line 119, in <module>     asyncio.run(check(inv_dev))   File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run     return runner.run(main)            ^^^^^^^^^^^^^^^^   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run     return self._loop.run_until_complete(task)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete     return future.result()            ^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/devices/epm_goodwe.py", line 108, in check     st_data = await inv.read_settings_data()               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/devices/epm_goodwe.py", line 84, in read_settings_data     value = await self.dev.read_setting(setting.id_)             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/et.py", line 611, in read_setting     return await self._read_setting(setting)            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/et.py", line 615, in _read_setting     response = await self._read_from_socket(self._read_command(setting.offset, count))                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/inverter.py", line 124, in _read_from_socket     result = await command.execute(self._protocol)              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/protocol.py", line 372, in execute     response_future = await protocol.send_request(self)                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/protocol.py", line 135, in send_request     await response_future   File "/home/epm/program/epm_ec/goodwe/protocol.py", line 111, in datagram_received     if self.command.validator(data):        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/protocol.py", line 501, in <lambda>     lambda x: validate_modbus_rtu_response(x, cmd, offset, value),               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/home/epm/program/epm_ec/goodwe/modbus.py", line 205, in validate_modbus_rtu_response     raise RequestRejectedException(failure_code) goodwe.exceptions.RequestRejectedException: ILLEGAL DATA ADDRESS
In addition I have found from different sources (mainly in GW modbus doc v 1.10) and then tested on same inverters some extra registers which is not included in library and can be usefull.
I recognize som changes in numbering (shifts +1), but testing show me that it is not correct, then I am not implement it).
My add-on is done in this way:
# Settings added in ARM firmware 18     __settings_arm_fw_18: Tuple[Sensor, ...] = (         # Load regulation 0: Disable, 1: Switching mode, 2: Time manage mode         Integer("load_regulation_index", 47595, "Load Regulation Index"),         # Load switch status: 0/1         Integer("load_switch_status", 47596, "Load Switch status"),         # Backup Switch SOC Min: 0/100 in percent         Integer("backup_switch_soc_min", 47597, "Backup Switch SOC Min."),         # Hardware Feed Power> 0/1         Integer("hardware_feed_power", 47599, "Hardware Feed Power"),         # Direct BMS communication for EMS Control         Integer("bms_version", 47900, "BMS Version"),         Integer("batt_strings", 47901, "Battery Strings"),         # Real time read from BMS         Voltage("bms_bat_charge_v_max", 47902, "BMS max. Charge Voltage limit", Kind.BMS),         Current("bms_bat_charge_i_max", 47903, "BMS max. Charge Current limit", Kind.BMS),         Voltage("bms_bat_discharge_v_min", 47904, "BMS min. Discharge Voltage limit", Kind.BMS),         Current("bms_bat_discharge_i_max", 47905, "BMS max. Discharge Current limit", Kind.BMS),         Voltage("bms_bat_voltage", 47906, "BMS Battery Voltage", Kind.BMS),         Current("bms_bat_current", 47907, "BMS Battery Current", Kind.BMS),         #         Integer("bms_bat_soc", 47908, "BMS Battery SOC", "%", Kind.BMS),         Integer("bms_bat_soh", 47909, "BMS Battery SOH", "%", Kind.BMS),         Temp("bms_bat_temperature", 47910, "BMS Battery Temperature", Kind.BMS),         Long("bms_bat_warning-code", 47911, "BMS Battery Warning Code"),         # Reserved         Long("bms_bat_alarm-code", 47913, "BMS Battery Alarm Code"),         Integer("bms_status", 47915, "BMS Status"),         Integer("bms_comm_loss_disable", 47916, "BMS Communication Loss Disable"),         # RW settings of BMS voltage rate         Integer("bms_battery_string_rate_v", 47917, "BMS Battery String Rate Voltage"),     )
Plus device_info has some minor issue. I add "ID of GPRS/4g module" and commented some FW ids which is not documented in Modbuse protocol sheet 1.10 from 25. 3. 2022:
      async def read_device_info(self):         response = await self._read_from_socket(self._READ_DEVICE_VERSION_INFO)         response = response.response_data()         # Modbus registers from offset (35000)         self.modbus_version = read_unsigned_int(response, 0)         self.rated_power = read_unsigned_int(response, 2)         self.ac_output_type = read_unsigned_int(response, 4)  # 0: 1-phase, 1: 3-phase (4 wire), 2: 3-phase (3 wire)         self.serial_number = self._decode(response[6:22])         self.model_name = self._decode(response[22:32])         self.dsp1_version = read_unsigned_int(response, 32)         self.dsp2_version = read_unsigned_int(response, 34)         self.dsp_svn_version = read_unsigned_int(response, 36)         self.arm_version = read_unsigned_int(response, 38)         self.arm_svn_version = read_unsigned_int(response, 40)         self.sim_cc_id = self._decode(response[50:60])         # not documented         # self.firmware = self._decode(response[42:54])         # self.arm_firmware = self._decode(response[54:66])
class Inverter(ABC):     """     Common superclass for various inverter models implementations.     Represents the inverter state and its basic behavior     """     def __init__(self, host: str, port: int, comm_addr: int = 0, timeout: int = 1, retries: int = 3):         self._protocol: InverterProtocol = self._create_protocol(host, port, timeout, retries)         self._consecutive_failures_count: int = 0         self.comm_addr: int = comm_addr         self.model_name: str | None = None         self.serial_number: str | None = None         self.rated_power: int = 0         self.ac_output_type: int | None = None         self.firmware: str | None = None         self.arm_firmware: str | None = None         self.modbus_version: int | None = None         self.dsp1_version: int = 0         self.dsp2_version: int = 0         self.dsp_svn_version: int | None = None         self.arm_version: int = 0         self.arm_svn_version: int | None = None         self.sim_cc_id: str | None = None
So I am able to provide my current files which I updated. ET.py and Inverter.py with some hints how to do that correctly or just simply send them if it is makes sense to you.
Thank you for your gret big work on this library. It is really usefull and I hope that I help you a bit.
BR
Frantisek

Thanks for feedback, but it is really difficult to process it in this form.
You don't have to create a PR, just fork and clone this repository and commit changes to your clone.
I can can take a look at those commits and adapt this master accordingly.
To your suggestions - bottom up.

The sim_cc_id is not correct.
It cannot be decoded from response[50:60] - those are modbus registers 35025-35029 and they obviously overlap with the firmware/arm_firmware strings. Which are not present in documents but are present there in real life (and proved by tests).
The docs says the SIMCCID - ID of GPRS/4G module is at modbus #35050 which would have been on offset 35100, but that one is outside range read by _READ_DEVICE_VERSION_INFO command.

Not all registers are present, only the most useful.
Some may not have been known at the time, some may be considered useless and some right away dangerous.
If some very advanced user wants to access those registers, there's always the possibility to invoke explicit low-level modbus read command - see inverter_check.py around line 90,

The ILLEGAL DATA ADDRESS is weird and we should investigate it in detail.
I have fw23 for quite some time and there are no problems.
Which specific firmwares do fail ?

Hi Marc, look like I made a fork. Hope it works as you expected.
ad 1) You are right, it is my mystyping/misunderstanding of code (forgot multiply 2). No valid return.
ad 2) Sure. No ofense. Just because I am looking for check direct BMS data to validate correct settings from installers guys, I offer it, just if somebody can use this as well. Data from 45352 are in Inverter side (by their DOC), then I had some mismatch issues to solve.
ad3) Here is my full output from inverter with 23 version after SIM corrections see ad1) and slight anonymizations. Does it help or how can I help you more?
sudo+ssh://epm@192.168.x.y:22/home/epm/program/epm_ec/.venv/bin/python -u /home/epm/program/epm_ec/devices/epm_goodwe.py
INFO:main:Inverter identified as GW10K-ET SN:9010KETU218Wxxxx.
Created inverter on IP: 192.168.x.y has following attributes:
protocol:  <goodwe.protocol.UdpInverterProtocol object at 0x7fabeed090>
consecutive_failures_count:  0
comm_addr:  247
model_name:  GW10K-ET
serial_number:  9010KETU218Wxxxx
rated_power:  10000
ac_output_type:  254
firmware:  04029-09-S11
arm_firmware:  02041-23-S00
modbus_version:  2
dsp1_version:  9
dsp2_version:  9
dsp_svn_version:  161
arm_version:  23
arm_svn_version:  241
READ_DEVICE_VERSION_INFO:  READ 33 registers from 35000 (f70388b800213ac1)
READ_RUNNING_DATA:  READ 125 registers from 35100 (f703891c007d7ae7)
READ_METER_DATA:  READ 45 registers from 36000 (f7038ca0002dbbf3)
READ_METER_DATA_EXTENDED:  READ 58 registers from 36000 (f7038ca0003afbfd)
READ_BATTERY_INFO:  READ 24 registers from 37000 (f70390880018fc7c)
READ_BATTERY2_INFO:  READ 22 registers from 39000 (f703985800167e21)
READ_MPPT_DATA:  READ 61 registers from 35301 (f70389e5003dab26)
has_eco_mode_v2:  True
has_peak_shaving:  True
has_battery:  True
has_battery2:  False
has_meter_extended:  False
has_mppt:  False
sensors:  (Timestamp(id='timestamp', offset=35100, name='Timestamp', size=6, unit='', kind=None), Voltage(id='vpv1', offset=35103, name='PV1 Voltage', size=2, unit='V', kind=<SensorKind.PV: 1>), Current(id='ipv1', offset=35104, name='PV1 Current', size=2, unit='A', kind=<SensorKind.PV: 1>), Power4(id='ppv1', offset=35105, name='PV1 Power', size=4, unit='W', kind=<SensorKind.PV: 1>), Voltage(id='vpv2', offset=35107, name='PV2 Voltage', size=2, unit='V', kind=<SensorKind.PV: 1>), Current(id='ipv2', offset=35108, name='PV2 Current', size=2, unit='A', kind=<SensorKind.PV: 1>), Power4(id='ppv2', offset=35109, name='PV2 Power', size=4, unit='W', kind=<SensorKind.PV: 1>), Calculated(id='ppv', offset=0, name='PV Power', size=0, unit='W', kind=<SensorKind.PV: 1>), ByteH(id_='pv2_mode', offset=35120, name='PV2 Mode code', size_=1, unit='', kind=<SensorKind.PV: 1>), EnumH(id_='pv2_mode_label', offset=35120, name='PV2 Mode', size_=1, unit='', kind=<SensorKind.PV: 1>), ByteL(id_='pv1_mode', offset=35120, name='PV1 Mode code', size_=1, unit='', kind=<SensorKind.PV: 1>), EnumL(id_='pv1_mode_label', offset=35120, name='PV1 Mode', size_=1, unit='', kind=<SensorKind.PV: 1>), Voltage(id_='vgrid', offset=35121, name='On-grid L1 Voltage', size_=2, unit='V', kind=<SensorKind.AC: 2>), Current(id_='igrid', offset=35122, name='On-grid L1 Current', size_=2, unit='A', kind=<SensorKind.AC: 2>), Frequency(id_='fgrid', offset=35123, name='On-grid L1 Frequency', size_=2, unit='Hz', kind=<SensorKind.AC: 2>), PowerS(id_='pgrid', offset=35125, name='On-grid L1 Power', size_=2, unit='W', kind=<SensorKind.AC: 2>), Voltage(id_='vgrid2', offset=35126, name='On-grid L2 Voltage', size_=2, unit='V', kind=<SensorKind.AC: 2>), Current(id_='igrid2', offset=35127, name='On-grid L2 Current', size_=2, unit='A', kind=<SensorKind.AC: 2>), Frequency(id_='fgrid2', offset=35128, name='On-grid L2 Frequency', size_=2, unit='Hz', kind=<SensorKind.AC: 2>), PowerS(id_='pgrid2', offset=35130, name='On-grid L2 Power', size_=2, unit='W', kind=<SensorKind.AC: 2>), Voltage(id_='vgrid3', offset=35131, name='On-grid L3 Voltage', size_=2, unit='V', kind=<SensorKind.AC: 2>), Current(id_='igrid3', offset=35132, name='On-grid L3 Current', size_=2, unit='A', kind=<SensorKind.AC: 2>), Frequency(id_='fgrid3', offset=35133, name='On-grid L3 Frequency', size_=2, unit='Hz', kind=<SensorKind.AC: 2>), PowerS(id_='pgrid3', offset=35135, name='On-grid L3 Power', size_=2, unit='W', kind=<SensorKind.AC: 2>), Integer(id_='grid_mode', offset=35136, name='Grid Mode code', size_=2, unit='', kind=<SensorKind.PV: 1>), Enum2(id_='grid_mode_label', offset=35136, name='Grid Mode', size_=2, unit='', kind=<SensorKind.PV: 1>), PowerS(id_='total_inverter_power', offset=35138, name='Total Power', size_=2, unit='W', kind=<SensorKind.AC: 2>), PowerS(id_='active_power', offset=35140, name='Active Power', size_=2, unit='W', kind=<SensorKind.GRID: 5>), Calculated(id_='grid_in_out', offset=0, name='On-grid Mode code', size_=0, unit='', kind=<SensorKind.GRID: 5>), EnumCalculated(id_='grid_in_out_label', offset=0, name='On-grid Mode', size_=0, unit='', kind=<SensorKind.GRID: 5>), Reactive(id_='reactive_power', offset=35142, name='Reactive Power', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Apparent(id_='apparent_power', offset=35144, name='Apparent Power', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Voltage(id_='backup_v1', offset=35145, name='Back-up L1 Voltage', size_=2, unit='V', kind=<SensorKind.UPS: 3>), Current(id_='backup_i1', offset=35146, name='Back-up L1 Current', size_=2, unit='A', kind=<SensorKind.UPS: 3>), Frequency(id_='backup_f1', offset=35147, name='Back-up L1 Frequency', size_=2, unit='Hz', kind=<SensorKind.UPS: 3>), Integer(id_='load_mode1', offset=35148, name='Load Mode L1', size_=2, unit='', kind=None), PowerS(id_='backup_p1', offset=35150, name='Back-up L1 Power', size_=2, unit='W', kind=<SensorKind.UPS: 3>), Voltage(id_='backup_v2', offset=35151, name='Back-up L2 Voltage', size_=2, unit='V', kind=<SensorKind.UPS: 3>), Current(id_='backup_i2', offset=35152, name='Back-up L2 Current', size_=2, unit='A', kind=<SensorKind.UPS: 3>), Frequency(id_='backup_f2', offset=35153, name='Back-up L2 Frequency', size_=2, unit='Hz', kind=<SensorKind.UPS: 3>), Integer(id_='load_mode2', offset=35154, name='Load Mode L2', size_=2, unit='', kind=None), PowerS(id_='backup_p2', offset=35156, name='Back-up L2 Power', size_=2, unit='W', kind=<SensorKind.UPS: 3>), Voltage(id_='backup_v3', offset=35157, name='Back-up L3 Voltage', size_=2, unit='V', kind=<SensorKind.UPS: 3>), Current(id_='backup_i3', offset=35158, name='Back-up L3 Current', size_=2, unit='A', kind=<SensorKind.UPS: 3>), Frequency(id_='backup_f3', offset=35159, name='Back-up L3 Frequency', size_=2, unit='Hz', kind=<SensorKind.UPS: 3>), Integer(id_='load_mode3', offset=35160, name='Load Mode L3', size_=2, unit='', kind=None), PowerS(id_='backup_p3', offset=35162, name='Back-up L3 Power', size_=2, unit='W', kind=<SensorKind.UPS: 3>), PowerS(id_='load_p1', offset=35164, name='Load L1', size_=2, unit='W', kind=<SensorKind.AC: 2>), PowerS(id_='load_p2', offset=35166, name='Load L2', size_=2, unit='W', kind=<SensorKind.AC: 2>), PowerS(id_='load_p3', offset=35168, name='Load L3', size_=2, unit='W', kind=<SensorKind.AC: 2>), PowerS(id_='backup_ptotal', offset=35170, name='Back-up Load', size_=2, unit='W', kind=<SensorKind.UPS: 3>), PowerS(id_='load_ptotal', offset=35172, name='Load', size_=2, unit='W', kind=<SensorKind.AC: 2>), Integer(id_='ups_load', offset=35173, name='Ups Load', size_=2, unit='%', kind=<SensorKind.UPS: 3>), Temp(id_='temperature_air', offset=35174, name='Inverter Temperature (Air)', size_=2, unit='C', kind=<SensorKind.AC: 2>), Temp(id_='temperature_module', offset=35175, name='Inverter Temperature (Module)', size_=2, unit='C', kind=None), Temp(id_='temperature', offset=35176, name='Inverter Temperature (Radiator)', size_=2, unit='C', kind=<SensorKind.AC: 2>), Integer(id_='function_bit', offset=35177, name='Function Bit', size_=2, unit='', kind=None), Voltage(id_='bus_voltage', offset=35178, name='Bus Voltage', size_=2, unit='V', kind=None), Voltage(id_='nbus_voltage', offset=35179, name='NBus Voltage', size_=2, unit='V', kind=None), Voltage(id_='vbattery1', offset=35180, name='Battery Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>), CurrentS(id_='ibattery1', offset=35181, name='Battery Current', size_=2, unit='A', kind=<SensorKind.BAT: 4>), Power4S(id_='pbattery1', offset=35182, name='Battery Power', size_=4, unit='W', kind=<SensorKind.BAT: 4>), Integer(id_='battery_mode', offset=35184, name='Battery Mode code', size_=2, unit='', kind=<SensorKind.BAT: 4>), Enum2(id_='battery_mode_label', offset=35184, name='Battery Mode', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='warning_code', offset=35185, name='Warning code', size_=2, unit='', kind=None), Integer(id_='safety_country', offset=35186, name='Safety Country code', size_=2, unit='', kind=<SensorKind.AC: 2>), Enum2(id_='safety_country_label', offset=35186, name='Safety Country', size_=2, unit='', kind=<SensorKind.AC: 2>), Integer(id_='work_mode', offset=35187, name='Work Mode code', size_=2, unit='', kind=None), Enum2(id_='work_mode_label', offset=35187, name='Work Mode', size_=2, unit='', kind=None), Integer(id_='operation_mode', offset=35188, name='Operation Mode code', size_=2, unit='', kind=None), Long(id_='error_codes', offset=35189, name='Error Codes', size_=4, unit='', kind=None), EnumBitmap4(id_='errors', offset=35189, name='Errors', size_=4, unit='', kind=None), Energy4(id_='e_total', offset=35191, name='Total PV Generation', size_=4, unit='kWh', kind=<SensorKind.PV: 1>), Energy4(id_='e_day', offset=35193, name="Today's PV Generation", size_=4, unit='kWh', kind=<SensorKind.PV: 1>), Energy4(id_='e_total_exp', offset=35195, name='Total Energy (export)', size_=4, unit='kWh', kind=<SensorKind.AC: 2>), Long(id_='h_total', offset=35197, name='Hours Total', size_=4, unit='h', kind=<SensorKind.PV: 1>), Energy(id_='e_day_exp', offset=35199, name='Today Energy (export)', size_=2, unit='kWh', kind=<SensorKind.AC: 2>), Energy4(id_='e_total_imp', offset=35200, name='Total Energy (import)', size_=4, unit='kWh', kind=<SensorKind.AC: 2>), Energy(id_='e_day_imp', offset=35202, name='Today Energy (import)', size_=2, unit='kWh', kind=<SensorKind.AC: 2>), Energy4(id_='e_load_total', offset=35203, name='Total Load', size_=4, unit='kWh', kind=<SensorKind.AC: 2>), Energy(id_='e_load_day', offset=35205, name='Today Load', size_=2, unit='kWh', kind=<SensorKind.AC: 2>), Energy4(id_='e_bat_charge_total', offset=35206, name='Total Battery Charge', size_=4, unit='kWh', kind=<SensorKind.BAT: 4>), Energy(id_='e_bat_charge_day', offset=35208, name='Today Battery Charge', size_=2, unit='kWh', kind=<SensorKind.BAT: 4>), Energy4(id_='e_bat_discharge_total', offset=35209, name='Total Battery Discharge', size_=4, unit='kWh', kind=<SensorKind.BAT: 4>), Energy(id_='e_bat_discharge_day', offset=35211, name='Today Battery Discharge', size_=2, unit='kWh', kind=<SensorKind.BAT: 4>), Long(id_='diagnose_result', offset=35220, name='Diag Status Code', size_=4, unit='', kind=None), EnumBitmap4(id_='diagnose_result_label', offset=35220, name='Diag Status', size_=4, unit='', kind=None), Calculated(id_='house_consumption', offset=0, name='House Consumption', size_=0, unit='W', kind=<SensorKind.AC: 2>))
sensors_battery:  (Integer(id='battery_bms', offset=37000, name='Battery BMS', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_index', offset=37001, name='Battery Index', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_status', offset=37002, name='Battery Status', size_=2, unit='', kind=<SensorKind.BAT: 4>), Temp(id_='battery_temperature', offset=37003, name='Battery Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), Integer(id_='battery_charge_limit', offset=37004, name='Battery Charge Limit', size_=2, unit='A', kind=<SensorKind.BAT: 4>), Integer(id_='battery_discharge_limit', offset=37005, name='Battery Discharge Limit', size_=2, unit='A', kind=<SensorKind.BAT: 4>), Integer(id_='battery_error_l', offset=37006, name='Battery Error L', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_soc', offset=37007, name='Battery State of Charge', size_=2, unit='%', kind=<SensorKind.BAT: 4>), Integer(id_='battery_soh', offset=37008, name='Battery State of Health', size_=2, unit='%', kind=<SensorKind.BAT: 4>), Integer(id_='battery_modules', offset=37009, name='Battery Modules', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_warning_l', offset=37010, name='Battery Warning L', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_protocol', offset=37011, name='Battery Protocol', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_error_h', offset=37012, name='Battery Error H', size_=2, unit='', kind=<SensorKind.BAT: 4>), EnumBitmap22(id_='battery_error', offset=37012, name='Battery Error', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_warning_h', offset=37013, name='Battery Warning H', size_=2, unit='', kind=<SensorKind.BAT: 4>), EnumBitmap22(id_='battery_warning', offset=37013, name='Battery Warning', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_sw_version', offset=37014, name='Battery Software Version', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_hw_version', offset=37015, name='Battery Hardware Version', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_max_cell_temp_id', offset=37016, name='Battery Max Cell Temperature ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_min_cell_temp_id', offset=37017, name='Battery Min Cell Temperature ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_max_cell_voltage_id', offset=37018, name='Battery Max Cell Voltage ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery_min_cell_voltage_id', offset=37019, name='Battery Min Cell Voltage ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Temp(id_='battery_max_cell_temp', offset=37020, name='Battery Max Cell Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), Temp(id_='battery_min_cell_temp', offset=37021, name='Battery Min Cell Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), CellVoltage(id_='battery_max_cell_voltage', offset=37022, name='Battery Max Cell Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>), CellVoltage(id_='battery_min_cell_voltage', offset=37023, name='Battery Min Cell Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>))
sensors_battery2:  (Integer(id='battery2_status', offset=39000, name='Battery 2 Status', size_=2, unit='', kind=<SensorKind.BAT: 4>), Temp(id_='battery2_temperature', offset=39001, name='Battery 2 Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_charge_limit', offset=39002, name='Battery 2 Charge Limit', size_=2, unit='A', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_discharge_limit', offset=39003, name='Battery 2 Discharge Limit', size_=2, unit='A', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_error_l', offset=39004, name='Battery 2 rror L', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_soc', offset=39005, name='Battery 2 State of Charge', size_=2, unit='%', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_soh', offset=39006, name='Battery 2 State of Health', size_=2, unit='%', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_modules', offset=39007, name='Battery 2 Modules', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_warning_l', offset=39008, name='Battery 2 Warning L', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_protocol', offset=39009, name='Battery 2 Protocol', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_error_h', offset=39010, name='Battery 2 Error H', size_=2, unit='', kind=<SensorKind.BAT: 4>), EnumBitmap22(id_='battery2_error', offset=39010, name='Battery 2 Error', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_warning_h', offset=39011, name='Battery 2 Warning H', size_=2, unit='', kind=<SensorKind.BAT: 4>), EnumBitmap22(id_='battery2_warning', offset=39011, name='Battery 2 Warning', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_sw_version', offset=39012, name='Battery 2 Software Version', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_hw_version', offset=39013, name='Battery 2 Hardware Version', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_max_cell_temp_id', offset=39014, name='Battery 2 Max Cell Temperature ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_min_cell_temp_id', offset=39015, name='Battery 2 Min Cell Temperature ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_max_cell_voltage_id', offset=39016, name='Battery 2 Max Cell Voltage ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Integer(id_='battery2_min_cell_voltage_id', offset=39017, name='Battery 2 Min Cell Voltage ID', size_=2, unit='', kind=<SensorKind.BAT: 4>), Temp(id_='battery2_max_cell_temp', offset=39018, name='Battery 2 Max Cell Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), Temp(id_='battery2_min_cell_temp', offset=39019, name='Battery 2 Min Cell Temperature', size_=2, unit='C', kind=<SensorKind.BAT: 4>), CellVoltage(id_='battery2_max_cell_voltage', offset=39020, name='Battery 2 Max Cell Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>), CellVoltage(id_='battery2_min_cell_voltage', offset=39021, name='Battery 2 Min Cell Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>))
sensors_meter:  (Integer(id='commode', offset=36000, name='Commode', size_=2, unit='', kind=None), Integer(id_='rssi', offset=36001, name='RSSI', size_=2, unit='', kind=None), Integer(id_='manufacture_code', offset=36002, name='Manufacture Code', size_=2, unit='', kind=None), Integer(id_='meter_test_status', offset=36003, name='Meter Test Status', size_=2, unit='', kind=None), Integer(id_='meter_comm_status', offset=36004, name='Meter Communication Status', size_=2, unit='', kind=None), PowerS(id_='active_power1', offset=36005, name='Active Power L1', size_=2, unit='W', kind=<SensorKind.GRID: 5>), PowerS(id_='active_power2', offset=36006, name='Active Power L2', size_=2, unit='W', kind=<SensorKind.GRID: 5>), PowerS(id_='active_power3', offset=36007, name='Active Power L3', size_=2, unit='W', kind=<SensorKind.GRID: 5>), PowerS(id_='active_power_total', offset=36008, name='Active Power Total', size_=2, unit='W', kind=<SensorKind.GRID: 5>), Reactive(id_='reactive_power_total', offset=36009, name='Reactive Power Total', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Decimal(id_='meter_power_factor1', offset=36010, name='Meter Power Factor L1', size_=2, unit='', kind=<SensorKind.GRID: 5>), Decimal(id_='meter_power_factor2', offset=36011, name='Meter Power Factor L2', size_=2, unit='', kind=<SensorKind.GRID: 5>), Decimal(id_='meter_power_factor3', offset=36012, name='Meter Power Factor L3', size_=2, unit='', kind=<SensorKind.GRID: 5>), Decimal(id_='meter_power_factor', offset=36013, name='Meter Power Factor', size_=2, unit='', kind=<SensorKind.GRID: 5>), Frequency(id_='meter_freq', offset=36014, name='Meter Frequency', size_=2, unit='Hz', kind=<SensorKind.GRID: 5>), Float(id_='meter_e_total_exp', offset=36015, name='Meter Total Energy (export)', size_=4, unit='kWh', kind=<SensorKind.GRID: 5>), Float(id_='meter_e_total_imp', offset=36017, name='Meter Total Energy (import)', size_=4, unit='kWh', kind=<SensorKind.GRID: 5>), Power4S(id_='meter_active_power1', offset=36019, name='Meter Active Power L1', size_=4, unit='W', kind=<SensorKind.GRID: 5>), Power4S(id_='meter_active_power2', offset=36021, name='Meter Active Power L2', size_=4, unit='W', kind=<SensorKind.GRID: 5>), Power4S(id_='meter_active_power3', offset=36023, name='Meter Active Power L3', size_=4, unit='W', kind=<SensorKind.GRID: 5>), Power4S(id_='meter_active_power_total', offset=36025, name='Meter Active Power Total', size_=4, unit='W', kind=<SensorKind.GRID: 5>), Reactive4(id_='meter_reactive_power1', offset=36027, name='Meter Reactive Power L1', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Reactive4(id_='meter_reactive_power2', offset=36029, name='Meter Reactive Power L2', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Reactive4(id_='meter_reactive_power3', offset=36031, name='Meter Reactive Power L2', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Reactive4(id_='meter_reactive_power_total', offset=36033, name='Meter Reactive Power Total', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Apparent4(id_='meter_apparent_power1', offset=36035, name='Meter Apparent Power L1', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Apparent4(id_='meter_apparent_power2', offset=36037, name='Meter Apparent Power L2', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Apparent4(id_='meter_apparent_power3', offset=36039, name='Meter Apparent Power L3', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Apparent4(id_='meter_apparent_power_total', offset=36041, name='Meter Apparent Power Total', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Integer(id_='meter_type', offset=36043, name='Meter Type', size_=2, unit='', kind=<SensorKind.GRID: 5>), Integer(id_='meter_sw_version', offset=36044, name='Meter Software Version', size_=2, unit='', kind=<SensorKind.GRID: 5>))
sensors_mppt:  (Power4(id='ppv_total', offset=35301, name='PV Power Total', size_=4, unit='W', kind=<SensorKind.PV: 1>), Integer(id_='pv_channel', offset=35303, name='PV Channel', size_=2, unit='', kind=<SensorKind.PV: 1>), Voltage(id_='vpv5', offset=35304, name='PV5 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv5', offset=35305, name='PV5 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv6', offset=35306, name='PV6 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv6', offset=35307, name='PV6 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv7', offset=35308, name='PV7 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv7', offset=35309, name='PV7 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv8', offset=35310, name='PV8 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv8', offset=35311, name='PV8 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv9', offset=35312, name='PV9 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv9', offset=35313, name='PV9 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv10', offset=35314, name='PV10 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv10', offset=35315, name='PV10 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv11', offset=35316, name='PV11 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv11', offset=35317, name='PV11 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv12', offset=35318, name='PV12 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv12', offset=35319, name='PV12 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv13', offset=35320, name='PV13 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv13', offset=35321, name='PV13 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv14', offset=35322, name='PV14 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv14', offset=35323, name='PV14 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv15', offset=35324, name='PV15 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv15', offset=35325, name='PV15 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Voltage(id_='vpv16', offset=35326, name='PV16 Voltage', size_=2, unit='V', kind=<SensorKind.PV: 1>), Current(id_='ipv16', offset=35327, name='PV16 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Power(id_='pmppt1', offset=35337, name='MPPT1 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt2', offset=35338, name='MPPT2 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt3', offset=35339, name='MPPT3 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt4', offset=35340, name='MPPT4 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt5', offset=35341, name='MPPT5 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt6', offset=35342, name='MPPT6 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt7', offset=35343, name='MPPT7 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Power(id_='pmppt8', offset=35344, name='MPPT8 Power', size_=2, unit='W', kind=<SensorKind.PV: 1>), Current(id_='imppt1', offset=35345, name='MPPT1 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt2', offset=35346, name='MPPT2 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt3', offset=35347, name='MPPT3 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt4', offset=35348, name='MPPT4 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt5', offset=35349, name='MPPT5 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt6', offset=35350, name='MPPT6 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt7', offset=35351, name='MPPT7 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Current(id_='imppt8', offset=35352, name='MPPT8 Current', size_=2, unit='A', kind=<SensorKind.PV: 1>), Reactive4(id_='reactive_power1', offset=35353, name='Reactive Power L1', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Reactive4(id_='reactive_power2', offset=35355, name='Reactive Power L2', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Reactive4(id_='reactive_power3', offset=35357, name='Reactive Power L3', size_=2, unit='var', kind=<SensorKind.GRID: 5>), Apparent4(id_='apparent_power1', offset=35359, name='Apparent Power L1', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Apparent4(id_='apparent_power2', offset=35361, name='Apparent Power L2', size_=2, unit='VA', kind=<SensorKind.GRID: 5>), Apparent4(id_='apparent_power3', offset=35363, name='Apparent Power L3', size_=2, unit='VA', kind=<SensorKind.GRID: 5>))
settings:  {'comm_address': Integer(id='comm_address', offset=45127, name='Communication Address', size_=2, unit='', kind=None), 'time': Timestamp(id_='time', offset=45200, name='Inverter time', size_=6, unit='', kind=None), 'sensitivity_check': Integer(id_='sensitivity_check', offset=45246, name='Sensitivity Check Mode', size_=2, unit='', kind=<SensorKind.AC: 2>), 'cold_start': Integer(id_='cold_start', offset=45248, name='Cold Start', size_=2, unit='', kind=<SensorKind.AC: 2>), 'shadow_scan': Integer(id_='shadow_scan', offset=45251, name='Shadow Scan', size_=2, unit='', kind=<SensorKind.PV: 1>), 'backup_supply': Integer(id_='backup_supply', offset=45252, name='Backup Supply', size_=2, unit='', kind=<SensorKind.UPS: 3>), 'unbalanced_output': Integer(id_='unbalanced_output', offset=45264, name='Unbalanced Output', size_=2, unit='', kind=<SensorKind.AC: 2>), 'pen_relay': Integer(id_='pen_relay', offset=45288, name='PE-N Relay', size_=2, unit='', kind=<SensorKind.AC: 2>), 'battery_capacity': Integer(id_='battery_capacity', offset=45350, name='Battery Capacity', size_=2, unit='Ah', kind=<SensorKind.BAT: 4>), 'battery_modules': Integer(id_='battery_modules', offset=45351, name='Battery Modules', size_=2, unit='', kind=<SensorKind.BAT: 4>), 'battery_charge_voltage': Voltage(id_='battery_charge_voltage', offset=45352, name='Battery Charge Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>), 'battery_charge_current': Current(id_='battery_charge_current', offset=45353, name='Battery Charge Current', size_=2, unit='A', kind=<SensorKind.BAT: 4>), 'battery_discharge_voltage': Voltage(id_='battery_discharge_voltage', offset=45354, name='Battery Discharge Voltage', size_=2, unit='V', kind=<SensorKind.BAT: 4>), 'battery_discharge_current': Current(id_='battery_discharge_current', offset=45355, name='Battery Discharge Current', size_=2, unit='A', kind=<SensorKind.BAT: 4>), 'battery_discharge_depth': Integer(id_='battery_discharge_depth', offset=45356, name='Battery Discharge Depth', size_=2, unit='%', kind=<SensorKind.BAT: 4>), 'battery_discharge_voltage_offline': Voltage(id_='battery_discharge_voltage_offline', offset=45357, name='Battery Discharge Voltage (off-line)', size_=2, unit='V', kind=<SensorKind.BAT: 4>), 'battery_discharge_depth_offline': Integer(id_='battery_discharge_depth_offline', offset=45358, name='Battery Discharge Depth (off-line)', size_=2, unit='%', kind=<SensorKind.BAT: 4>), 'power_factor': Decimal(id_='power_factor', offset=45482, name='Power Factor', size_=2, unit='', kind=None), 'work_mode': Integer(id_='work_mode', offset=47000, name='Work Mode', size_=2, unit='', kind=<SensorKind.AC: 2>), 'dred': Integer(id_='dred', offset=47010, name='DRED/Remote Shutdown', size_=2, unit='', kind=<SensorKind.AC: 2>), 'battery_soc_protection': Integer(id_='battery_soc_protection', offset=47500, name='Battery SoC Protection', size_=2, unit='', kind=<SensorKind.BAT: 4>), 'grid_export': Integer(id_='grid_export', offset=47509, name='Grid Export Enabled', size_=2, unit='', kind=<SensorKind.GRID: 5>), 'grid_export_limit': Integer(id_='grid_export_limit', offset=47510, name='Grid Export Limit', size_=2, unit='W', kind=<SensorKind.GRID: 5>), 'battery_protocol_code': Integer(id_='battery_protocol_code', offset=47514, name='Battery Protocol Code', size_=2, unit='', kind=<SensorKind.BAT: 4>), 'eco_mode_1': EcoModeV2(id_='eco_mode_1', offset=47547, name='Eco Mode Group 1', size_=12, unit='', kind=<SensorKind.BAT: 4>), 'eco_mode_1_switch': ByteH(id_='eco_mode_1_switch', offset=47549, name='Eco Mode Group 1 Switch', size_=1, unit='', kind=None), 'eco_mode_2': EcoModeV2(id_='eco_mode_2', offset=47553, name='Eco Mode Group 2', size_=12, unit='', kind=<SensorKind.BAT: 4>), 'eco_mode_2_switch': ByteH(id_='eco_mode_2_switch', offset=47555, name='Eco Mode Group 2 Switch', size_=1, unit='', kind=None), 'eco_mode_3': EcoModeV2(id_='eco_mode_3', offset=47559, name='Eco Mode Group 3', size_=12, unit='', kind=<SensorKind.BAT: 4>), 'eco_mode_3_switch': ByteH(id_='eco_mode_3_switch', offset=47561, name='Eco Mode Group 3 Switch', size_=1, unit='', kind=None), 'eco_mode_4': EcoModeV2(id_='eco_mode_4', offset=47565, name='Eco Mode Group 4', size_=12, unit='', kind=<SensorKind.BAT: 4>), 'eco_mode_4_switch': ByteH(id_='eco_mode_4_switch', offset=47567, name='Eco Mode Group 4 Switch', size_=1, unit='', kind=None), 'load_regulation_index': Integer(id_='load_regulation_index', offset=47595, name='Load Regulation Index', size_=2, unit='', kind=None), 'load_switch_status': Integer(id_='load_switch_status', offset=47596, name='Load Switch status', size_=2, unit='', kind=None), 'backup_switch_soc_min': Integer(id_='backup_switch_soc_min', offset=47597, name='Backup Switch SOC Min.', size_=2, unit='', kind=None), 'hardware_feed_power': Integer(id_='hardware_feed_power', offset=47599, name='Hardware Feed Power', size_=2, unit='', kind=None), 'bms_version': Integer(id_='bms_version', offset=47900, name='BMS Version', size_=2, unit='', kind=None), 'batt_strings': Integer(id_='batt_strings', offset=47901, name='Battery Strings', size_=2, unit='', kind=None), 'bms_bat_charge_v_max': Voltage(id_='bms_bat_charge_v_max', offset=47902, name='BMS max. Charge Voltage limit', size_=2, unit='V', kind=<SensorKind.BMS: 6>), 'bms_bat_charge_i_max': Current(id_='bms_bat_charge_i_max', offset=47903, name='BMS max. Charge Current limit', size_=2, unit='A', kind=<SensorKind.BMS: 6>), 'bms_bat_discharge_v_min': Voltage(id_='bms_bat_discharge_v_min', offset=47904, name='BMS min. Discharge Voltage limit', size_=2, unit='V', kind=<SensorKind.BMS: 6>), 'bms_bat_discharge_i_max': Current(id_='bms_bat_discharge_i_max', offset=47905, name='BMS max. Discharge Current limit', size_=2, unit='A', kind=<SensorKind.BMS: 6>), 'bms_bat_voltage': Voltage(id_='bms_bat_voltage', offset=47906, name='BMS Battery Voltage', size_=2, unit='V', kind=<SensorKind.BMS: 6>), 'bms_bat_current': Current(id_='bms_bat_current', offset=47907, name='BMS Battery Current', size_=2, unit='A', kind=<SensorKind.BMS: 6>), 'bms_bat_soc': Integer(id_='bms_bat_soc', offset=47908, name='BMS Battery SOC', size_=2, unit='%', kind=<SensorKind.BMS: 6>), 'bms_bat_soh': Integer(id_='bms_bat_soh', offset=47909, name='BMS Battery SOH', size_=2, unit='%', kind=<SensorKind.BMS: 6>), 'bms_bat_temperature': Temp(id_='bms_bat_temperature', offset=47910, name='BMS Battery Temperature', size_=2, unit='C', kind=<SensorKind.BMS: 6>), 'bms_bat_warning-code': Long(id_='bms_bat_warning-code', offset=47911, name='BMS Battery Warning Code', size_=4, unit='', kind=None), 'bms_bat_alarm-code': Long(id_='bms_bat_alarm-code', offset=47913, name='BMS Battery Alarm Code', size_=4, unit='', kind=None), 'bms_status': Integer(id_='bms_status', offset=47915, name='BMS Status', size_=2, unit='', kind=None), 'bms_comm_loss_disable': Integer(id_='bms_comm_loss_disable', offset=47916, name='BMS Communication Loss Disable', size_=2, unit='', kind=None), 'bms_battery_string_rate_v': Integer(id_='bms_battery_string_rate_v', offset=47917, name='BMS Battery String Rate Voltage', size_=2, unit='', kind=None), 'fast_charging': Integer(id_='fast_charging', offset=47545, name='Fast Charging Enabled', size_=2, unit='', kind=<SensorKind.BAT: 4>), 'fast_charging_soc': Integer(id_='fast_charging_soc', offset=47546, name='Fast Charging SoC', size_=2, unit='%', kind=<SensorKind.BAT: 4>), 'load_control_mode': Integer(id_='load_control_mode', offset=47595, name='Load Control Mode', size_=2, unit='', kind=<SensorKind.AC: 2>), 'load_control_switch': Integer(id_='load_control_switch', offset=47596, name='Load Control Switch', size_=2, unit='', kind=<SensorKind.AC: 2>), 'load_control_soc': Integer(id_='load_control_soc', offset=47597, name='Load Control SoC', size_=2, unit='', kind=<SensorKind.AC: 2>), 'fast_charging_power': Integer(id_='fast_charging_power', offset=47603, name='Fast Charging Power', size_=2, unit='%', kind=<SensorKind.BAT: 4>), 'peak_shaving_power_limit': Long(id_='peak_shaving_power_limit', offset=47542, name='Peak Shaving Power Limit', size_=4, unit='', kind=None), 'peak_shaving_soc': Integer(id_='peak_shaving_soc', offset=47544, name='Peak Shaving SoC', size_=2, unit='', kind=None), 'peak_shaving_mode': PeakShavingMode(id_='peak_shaving_mode', offset=47589, name='Peak Shaving Mode', size_=12, unit='', kind=<SensorKind.BAT: 4>), 'dod_holding': Integer(id_='dod_holding', offset=47602, name='DoD Holding', size_=2, unit='', kind=<SensorKind.BAT: 4>), 'backup_mode_enable': Integer(id_='backup_mode_enable', offset=47605, name='Backup Mode Switch', size_=2, unit='', kind=None)}
Inverter sensors data:
timestamp: 		 Timestamp = 2024-05-05 17:36:51
vpv1: 		 PV1 Voltage = 379.4 V
ipv1: 		 PV1 Current = 2.1 A
ppv1: 		 PV1 Power = 799 W
vpv2: 		 PV2 Voltage = 307.2 V
ipv2: 		 PV2 Current = 1.1 A
ppv2: 		 PV2 Power = 337 W
ppv: 		 PV Power = 1136 W
pv2_mode: 		 PV2 Mode code = 2
pv2_mode_label: 		 PV2 Mode = PV panels connected, producing power
pv1_mode: 		 PV1 Mode code = 2
pv1_mode_label: 		 PV1 Mode = PV panels connected, producing power
vgrid: 		 On-grid L1 Voltage = 244.4 V
igrid: 		 On-grid L1 Current = 0.5 A
fgrid: 		 On-grid L1 Frequency = 49.94 Hz
pgrid: 		 On-grid L1 Power = 27 W
vgrid2: 		 On-grid L2 Voltage = 244.8 V
igrid2: 		 On-grid L2 Current = 8.3 A
fgrid2: 		 On-grid L2 Frequency = 49.93 Hz
pgrid2: 		 On-grid L2 Power = 1743 W
vgrid3: 		 On-grid L3 Voltage = 242.5 V
igrid3: 		 On-grid L3 Current = 5.5 A
fgrid3: 		 On-grid L3 Frequency = 49.96 Hz
pgrid3: 		 On-grid L3 Power = 968 W
grid_mode: 		 Grid Mode code = 1
grid_mode_label: 		 Grid Mode = Connected to grid
total_inverter_power: 		 Total Power = 2731 W
active_power: 		 Active Power = -171 W
grid_in_out: 		 On-grid Mode code = 2
grid_in_out_label: 		 On-grid Mode = Importing
reactive_power: 		 Reactive Power = 0 var
apparent_power: 		 Apparent Power = 0 VA
backup_v1: 		 Back-up L1 Voltage = 244.7 V
backup_i1: 		 Back-up L1 Current = 0.2 A
backup_f1: 		 Back-up L1 Frequency = 49.94 Hz
load_mode1: 		 Load Mode L1 = 1
backup_p1: 		 Back-up L1 Power = 6 W
backup_v2: 		 Back-up L2 Voltage = 245.4 V
backup_i2: 		 Back-up L2 Current = 0.3 A
backup_f2: 		 Back-up L2 Frequency = 49.93 Hz
load_mode2: 		 Load Mode L2 = 1
backup_p2: 		 Back-up L2 Power = 14 W
backup_v3: 		 Back-up L3 Voltage = 242.5 V
backup_i3: 		 Back-up L3 Current = 0.4 A
backup_f3: 		 Back-up L3 Frequency = 49.96 Hz
load_mode3: 		 Load Mode L3 = 1
backup_p3: 		 Back-up L3 Power = 0 W
load_p1: 		 Load L1 = 59 W
load_p2: 		 Load L2 = 1948 W
load_p3: 		 Load L3 = 883 W
backup_ptotal: 		 Back-up Load = 19 W
load_ptotal: 		 Load = 2883 W
ups_load: 		 Ups Load = 2 %
temperature_air: 		 Inverter Temperature (Air) = 52.5 C
temperature_module: 		 Inverter Temperature (Module) = 0.0 C
temperature: 		 Inverter Temperature (Radiator) = 57.0 C
function_bit: 		 Function Bit = 16384
bus_voltage: 		 Bus Voltage = 793.4 V
nbus_voltage: 		 NBus Voltage = 396.6 V
vbattery1: 		 Battery Voltage = 497.9 V
ibattery1: 		 Battery Current = 3.4 A
pbattery1: 		 Battery Power = 1720 W
battery_mode: 		 Battery Mode code = 2
battery_mode_label: 		 Battery Mode = Discharge
warning_code: 		 Warning code = 0
safety_country: 		 Safety Country code = 1
safety_country_label: 		 Safety Country = CZ-A1
work_mode: 		 Work Mode code = 1
work_mode_label: 		 Work Mode = Normal (On-Grid)
operation_mode: 		 Operation Mode code = 0
error_codes: 		 Error Codes = 0
errors: 		 Errors =
e_total: 		 Total PV Generation = 6291.4 kWh
e_day: 		 Today's PV Generation = 34.1 kWh
e_total_exp: 		 Total Energy (export) = 6027.3 kWh
h_total: 		 Hours Total = 7343 h
e_day_exp: 		 Today Energy (export) = 32.6 kWh
e_total_imp: 		 Total Energy (import) = 25.1 kWh
e_day_imp: 		 Today Energy (import) = 0.0 kWh
e_load_total: 		 Total Load = 12337.1 kWh
e_load_day: 		 Today Load = 18.3 kWh
e_bat_charge_total: 		 Total Battery Charge = 1954.1 kWh
e_bat_charge_day: 		 Today Battery Charge = 5.5 kWh
e_bat_discharge_total: 		 Total Battery Discharge = 1915.0 kWh
e_bat_discharge_day: 		 Today Battery Discharge = 5.2 kWh
diagnose_result: 		 Diag Status Code = 50332096
diagnose_result_label: 		 Diag Status = Discharge Driver On, BMS: Discharge current low, APP: Discharge current too low, Export power limit set, PF value set
house_consumption: 		 House Consumption = 3027 W
commode: 		 Commode = 5
rssi: 		 RSSI = 101
manufacture_code: 		 Manufacture Code = 10
meter_test_status: 		 Meter Test Status = 0
meter_comm_status: 		 Meter Communication Status = 1
active_power1: 		 Active Power L1 = -35 W
active_power2: 		 Active Power L2 = -221 W
active_power3: 		 Active Power L3 = 81 W
active_power_total: 		 Active Power Total = -175 W
reactive_power_total: 		 Reactive Power Total = -1741 var
meter_power_factor1: 		 Meter Power Factor L1 = -0.084
meter_power_factor2: 		 Meter Power Factor L2 = -0.168
meter_power_factor3: 		 Meter Power Factor L3 = 0.09
meter_power_factor: 		 Meter Power Factor = -0.064
meter_freq: 		 Meter Frequency = 49.95 Hz
meter_e_total_exp: 		 Meter Total Energy (export) = 2177.43 kWh
meter_e_total_imp: 		 Meter Total Energy (import) = 10070.05 kWh
meter_active_power1: 		 Meter Active Power L1 = -35 W
meter_active_power2: 		 Meter Active Power L2 = -221 W
meter_active_power3: 		 Meter Active Power L3 = 81 W
meter_active_power_total: 		 Meter Active Power Total = -175 W
meter_reactive_power1: 		 Meter Reactive Power L1 = 444 var
meter_reactive_power2: 		 Meter Reactive Power L2 = -1258 var
meter_reactive_power3: 		 Meter Reactive Power L2 = -927 var
meter_reactive_power_total: 		 Meter Reactive Power Total = -1741 var
meter_apparent_power1: 		 Meter Apparent Power L1 = -451 VA
meter_apparent_power2: 		 Meter Apparent Power L2 = -1330 VA
meter_apparent_power3: 		 Meter Apparent Power L3 = 948 VA
meter_apparent_power_total: 		 Meter Apparent Power Total = -2730 VA
meter_type: 		 Meter Type = 1
meter_sw_version: 		 Meter Software Version = 5
battery_bms: 		 Battery BMS = 255
battery_index: 		 Battery Index = 257
battery_status: 		 Battery Status = 1
battery_temperature: 		 Battery Temperature = 41.0 C
battery_charge_limit: 		 Battery Charge Limit = 7 A
battery_discharge_limit: 		 Battery Discharge Limit = 18 A
battery_error_l: 		 Battery Error L = 0
battery_soc: 		 Battery State of Charge = 90 %
battery_soh: 		 Battery State of Health = 99 %
battery_modules: 		 Battery Modules = 9
battery_warning_l: 		 Battery Warning L = 0
battery_protocol: 		 Battery Protocol = 257
battery_error_h: 		 Battery Error H = 0
battery_error: 		 Battery Error =
battery_warning_h: 		 Battery Warning H = 0
battery_warning: 		 Battery Warning =
battery_sw_version: 		 Battery Software Version = 0
battery_hw_version: 		 Battery Hardware Version = 0
battery_max_cell_temp_id: 		 Battery Max Cell Temperature ID = 0
battery_min_cell_temp_id: 		 Battery Min Cell Temperature ID = 0
battery_max_cell_voltage_id: 		 Battery Max Cell Voltage ID = 0
battery_min_cell_voltage_id: 		 Battery Min Cell Voltage ID = 0
battery_max_cell_temp: 		 Battery Max Cell Temperature = 0.0 C
battery_min_cell_temp: 		 Battery Min Cell Temperature = 0.0 C
battery_max_cell_voltage: 		 Battery Max Cell Voltage = 0.0 V
battery_min_cell_voltage: 		 Battery Min Cell Voltage = 0.0 V
Inverter settings data:
comm_address: 		 Communication Address = 247
time: 		 Inverter time = 2024-05-05 17:36:51
sensitivity_check: 		 Sensitivity Check Mode = 3
cold_start: 		 Cold Start = 0
shadow_scan: 		 Shadow Scan = 0
backup_supply: 		 Backup Supply = 1
unbalanced_output: 		 Unbalanced Output = 1
pen_relay: 		 PE-N Relay = 1
battery_capacity: 		 Battery Capacity = 37 Ah
battery_modules: 		 Battery Modules = 9
battery_charge_voltage: 		 Battery Charge Voltage = 540.0 V
battery_charge_current: 		 Battery Charge Current = 18.5 A
battery_discharge_voltage: 		 Battery Discharge Voltage = 435.0 V
battery_discharge_current: 		 Battery Discharge Current = 18.5 A
battery_discharge_depth: 		 Battery Discharge Depth = 10 %
battery_discharge_voltage_offline: 		 Battery Discharge Voltage (off-line) = 435.0 V
battery_discharge_depth_offline: 		 Battery Discharge Depth (off-line) = 10 %
power_factor: 		 Power Factor = 1.0
work_mode: 		 Work Mode = 0
dred: 		 DRED/Remote Shutdown = 1
battery_soc_protection: 		 Battery SoC Protection = 0
grid_export: 		 Grid Export Enabled = 1
grid_export_limit: 		 Grid Export Limit = 5670 W
battery_protocol_code: 		 Battery Protocol Code = 257
eco_mode_1: 		 Eco Mode Group 1 = 0:1-23:59 Sun,Mon,Tue,Wed,Thu,Fri,Sat -100% (SoC 100%) Off
eco_mode_1_switch: 		 Eco Mode Group 1 Switch = 0
eco_mode_2: 		 Eco Mode Group 2 = 48:0-48:0  100% (SoC 100%) Unset
eco_mode_2_switch: 		 Eco Mode Group 2 Switch = 85
eco_mode_3: 		 Eco Mode Group 3 = 48:0-48:0  100% (SoC 100%) Unset
eco_mode_3_switch: 		 Eco Mode Group 3 Switch = 85
eco_mode_4: 		 Eco Mode Group 4 = 48:0-48:0  100% (SoC 100%) Unset
eco_mode_4_switch: 		 Eco Mode Group 4 Switch = 85
load_regulation_index: 		 Load Regulation Index = 0
load_switch_status: 		 Load Switch status = 0
backup_switch_soc_min: 		 Backup Switch SOC Min. = 0
hardware_feed_power: 		 Hardware Feed Power = 0
bms_version: 		 BMS Version = 0
batt_strings: 		 Battery Strings = 9
bms_bat_charge_v_max: 		 BMS max. Charge Voltage limit = 540.0 V
bms_bat_charge_i_max: 		 BMS max. Charge Current limit = 7.0 A
bms_bat_discharge_v_min: 		 BMS min. Discharge Voltage limit = 435.0 V
bms_bat_discharge_i_max: 		 BMS max. Discharge Current limit = 18.0 A
bms_bat_voltage: 		 BMS Battery Voltage = 497.9 V
bms_bat_current: 		 BMS Battery Current = 3.5 A
bms_bat_soc: 		 BMS Battery SOC = 90 %
bms_bat_soh: 		 BMS Battery SOH = 99 %
bms_bat_temperature: 		 BMS Battery Temperature = 41.0 C
bms_bat_warning-code: 		 BMS Battery Warning Code = 0
bms_bat_alarm-code: 		 BMS Battery Alarm Code = 0
bms_status: 		 BMS Status = 0
bms_comm_loss_disable: 		 BMS Communication Loss Disable = 0
bms_battery_string_rate_v: 		 BMS Battery String Rate Voltage = 0
fast_charging: 		 Fast Charging Enabled = 0
fast_charging_soc: 		 Fast Charging SoC = 0 %
load_control_mode: 		 Load Control Mode = 0
load_control_switch: 		 Load Control Switch = 0
load_control_soc: 		 Load Control SoC = 0
fast_charging_power: 		 Fast Charging Power = 100 %
peak_shaving_power_limit: 		 Peak Shaving Power Limit = 0
peak_shaving_soc: 		 Peak Shaving SoC = 0
peak_shaving_mode: 		 Peak Shaving Mode = 48:0-48:0  100% (SoC 100%) Unset
dod_holding: 		 DoD Holding = 0
backup_mode_enable: 		 Backup Mode Switch = 0
Read. Sensors: 145 Settings: 63

Ad 2) - I am not saying we should not any new settings if we identify some useful and safe.
I was just explaining why not everything is there.
Looking at the registers 45352-45358, yes they can make sense and we can add them.
I do not see any commit in you forked repo.
Did you push your local commit to upstream ('git push') ?

How about now? I see it in my account.
Oh, I am not so clear, again. Sorry for that. So:
45352-45358 are already there in 0.3.3 and they are setting parameters for Inverter limits.
I have been added 47900 - 47917 section which is read directly from BMS and can be different (my issue and solved with it).
As minor I add Load regulation as well, from 47595-47599.
Frantisek

Aaaaa, I just realized we are talking about ILLEGAL DATA ADDRESS in read_settings_data() and not in read_runtime_data() !
I forgot I added such method there at all, since HA is not using it and I did not test it for quite some time.
Yes, it indeed fails on ET fw1023.
Fortunately, settings are requested one by one, so we do not have to filter them during setup, but lazily on request.
I see now what you are trying to achieve !

OK, so I took your changes, did some few tweaks in names to make it consistent with rest.
Added also BMS2 settings for ET 25K+ inverters.
Improved loading of settings so it will not fail when setting is not supported and will remove it from list.
(You can revert your commit and pull my changes (git rever 2a161f3; git pull --rebase).

Good morning,
thank you for all. I aplied it works  good.
Here is just one small question: It is in ET.py file.
Are those folowing two IDs on lines 390-392 specificaly meant to use with hyphen in naming or is it misstyping and could be use with underscore
bms_bat_warning-code  , bms_bat_alarm-code? I am using those names as variables and it is not allowed to use it in python and I will have to do some extra mapping. I have changed to underscore for now.
Long("bms_bat_warning_code", 47911, "BMS Battery Warning Code"),
# Reserved
Long("bms_bat_alarm_code", 47913, "BMS Battery Alarm Code"),

authors: frantisadlo mletenay

repo: marcelblijleven/goodwe


text:
Feature/controller

A simple controller

All good!

authors: comanpatricia marceldobrica

repo: marceldobrica/evozone


text:
On dnd-effect-allowed="copy", items cannot be stopped from duplicating themselves withing their container.

dnd-droppable-in, dnd-type and dnd-allowed type are not working.

Would love to know how this was resolved.

I made sure the splice is occuring
On 12 Aug 2016 6:10 pm, "Sarah Dulaney" notifications@github.com wrote:

Would love to know how this was resolved.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/marceljuenemann/angular-drag-and-drop-lists/issues/252#issuecomment-239488944,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AIvfo0pfZ79H1t7e_NIBj0y1hz3XGhUaks5qfJr8gaJpZM4IPBG_
.

authors: MarkoIvanetic SarahD


text:
🛑 Rancher is down

In 86a5e8d, Rancher (https://rancher.bojko.eu) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Rancher is back up in 9e91a1d after 2 hours, 16 minutes.

repo: marcinbojko/upptime


text:
feature: Configure primary action

It would be great if I could use enter instead of cmd + enter to open the note in Obsidian, as I'd never want to open it in Raycast. The Snippets extension seems to do this with 'primary action'

Which Snippets extension do you mean?

This one, I think it's included by default. At the bottom you can configure a primary action.

Thank you, will have a look at this.

Primary actions have been added with the new commits. However this version hasn't been reviewed yet and thus isn't available in the store right now.

The new features are now available in the store:
https://www.raycast.com/marcjulian/obsidian

authors: HEmile marcjulianschwarz

repo: marcjulianschwarz/obsidian-raycast


text:
🛑 Video Call is down

In 0ffd291, Video Call (https://jitsi01.diversolatam.com/test) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Video Call is back up in 07ae36d.

repo: marcoadasilvaa/health


text:
Game: Effect

An Effect is a way how to compute a new entity (result of an Effect) from input Entity.
For example, there is an Effect which adds 20% of health, thus it needs an Entity on input (like Hero) and it has Entity on output (hero + 20%).

Done in a bit different way.

repo: marek-hanzal/DeRivean


text:
IDE Error Report (v4.4.4)

Additional information
/
Exception trace
null
java.lang.NoClassDefFoundError: com/intellij/lang/javascript/psi/JSLiteralExpression
	at de.marhali.easyi18n.assistance.folding.JsFoldingBuilder.extractRegions(JsFoldingBuilder.java:22)
	at de.marhali.easyi18n.assistance.folding.AbstractFoldingBuilder.buildFoldRegions(AbstractFoldingBuilder.java:61)
	at de.marhali.easyi18n.assistance.folding.JsFoldingBuilder.buildFoldRegions(JsFoldingBuilder.java:19)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptorsNoPlaceholderCaching(LanguageFolding.java:90)
	at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:40)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptorsNoPlaceholderCaching(LanguageFolding.java:90)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:72)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:272)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:240)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getUpdateResult(FoldingUpdate.java:89)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.lambda$updateFoldRegions$0(FoldingUpdate.java:78)
	at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:37)
	at com.intellij.util.CachedValueBase.lambda$getValueWithLock$3(CachedValueBase.java:240)
	at com.intellij.util.CachedValueBase.computeData(CachedValueBase.java:43)
	at com.intellij.util.CachedValueBase.lambda$getValueWithLock$4(CachedValueBase.java:240)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:27)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:66)
	at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:241)
	at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:27)
	at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:69)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:75)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegions(CodeFoldingManagerImpl.java:267)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:253)
	at com.intellij.codeInsight.folding.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:49)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:55)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:406)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.runWithSpanIgnoreThrows(trace.kt:76)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil.runWithSpanThrows(TraceUtil.java:34)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:401)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$3(PassExecutorService.java:392)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:391)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:367)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:200)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:184)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:187)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.ClassNotFoundException: com.intellij.lang.javascript.psi.JSLiteralExpression PluginClassLoader(plugin=PluginDescriptor(name=Easy I18n, id=de.marhali.easyi18n, descriptorPath=plugin.xml, path=~/Library/Application Support/JetBrains/IdeaIC2023.3/plugins/easy-i18n, version=4.4.4, package=null, isBundled=false), packagePrefix=null, state=active)
	at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.kt:156)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 48 more

Duplicate of https://github.com/marhali/easy-i18n/issues/344

authors: bannakonz marhali


text:
Pattern compilation should not be included in elapsed time

A compiled regular expression is almost always used rather than recompiling each time.
And the measurement should be an average of multiple times.
A benchmark is only useful if it is close enough to real applications.

Pattern compilation is a necessary part of regex process and not always patterns can be reused. I'm sorry but the benchmark can’t be good for all scenarios.
Anyway, I have tested it again and the results are similar:
Including pattern compilation:
C PCRE2 | 24.59 | 23.55 | 5.55 | 53.69
Rust | 29.02 | 27.97 | 6.28 | 63.28
PHP | 53.38 | 49.97 | 5.33 | 108.67
Javascript | 78.66 | 63.92 | 2.01 | 144.59
D ldc | 142.25 | 135.63 | 4.79 | 282.67
D dmd | 200.00 | 195.35 | 5.70 | 401.06
Perl | 239.81 | 168.08 | 44.65 | 452.54
Crystal | 332.21 | 272.89 | 26.84 | 631.94
Ruby | 338.32 | 290.29 | 51.11 | 679.72
Python PyPy | 204.90 | 171.47 | 323.83 | 700.20
Java | 375.97 | 460.51 | 288.50 | 1124.98
Kotlin | 389.48 | 460.31 | 289.03 | 1138.82
Python 2 | 366.29 | 286.07 | 498.07 | 1150.44
Python 3 | 568.25 | 416.31 | 489.55 | 1474.11
Go | 412.98 | 404.22 | 703.53 | 1520.73
C# .Net Core | 1908.27 | 1654.43 | 109.74 | 3672.44
C# Mono | 2355.97 | 2025.43 | 147.90 | 4529.30
Excluding pattern compilation (if apply):
C PCRE2 | 23.84 | 23.53 | 5.82 | 53.19
Rust | 27.30 | 28.67 | 6.14 | 62.11
PHP | 53.39 | 48.43 | 5.26 | 107.08
Javascript | 77.64 | 62.83 | 1.92 | 142.39
D ldc | 143.50 | 137.39 | 5.08 | 285.97
D dmd | 200.42 | 195.75 | 5.46 | 401.63
Perl | 239.37 | 165.62 | 44.55 | 449.54
Crystal | 335.80 | 274.04 | 26.54 | 636.38
Ruby | 335.38 | 294.44 | 52.37 | 682.19
Python PyPy | 203.62 | 170.96 | 326.98 | 701.57
Java | 375.25 | 453.16 | 290.51 | 1118.91
Python 2 | 361.41 | 275.90 | 492.16 | 1129.46
Kotlin | 385.70 | 465.36 | 287.34 | 1138.40
Python 3 | 548.91 | 403.32 | 481.29 | 1433.52
Go | 412.31 | 405.62 | 700.31 | 1518.25
C# .Net Core | 1907.12 | 1658.22 | 109.74 | 3675.08
C# Mono | 2447.18 | 2096.15 | 156.32 | 4699.65
By the way, you can check the run-benchmarks.php to see that measurement is the average of ten executions, maybe execute more times is more accurate but I think is enough.

I have tested myself and I agree with you. The result does not make significant difference whether including pattern compilation or not.

repo: mariomka/regex-benchmark


text:
PDF export

To get the PDF export button to work on the server I had to:

download the stable whhtmltopdf from here
install by extracting to /usr/local
run sudo apt-get install libfontconfig1 libxrender1

Can't this be done in bundle so that it works automatically? Anyone up for investigating?
There is a way with gem 'wkhtmltopdf-binary', but it installs wkhtmltopdf 0.9, not 0.12. I had bugs with 0.9 with fonts and other random issues, so it won't fly. Are there other methods? Or alternative PDF generators?

no longer relevant as we moved away from the rails backend for a nodejs version

repo: mariusandra/insights


text:
Resonant LPF

A basic low-pass filter with adjustable cutoff frequency and resonance.

https://github.com/markalanboyd/Audulus-DSP/tree/main/code/filter
Now has several resonant filters

repo: markalanboyd/Audulus-DSP