-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
initial contribution Windcentrale binding #1535
Conversation
408f89e
to
c71e903
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello Marcel,
Great binding, I made some items with the HTTP binding to monitor my 'winddelen' . However I could not get real time data from this API I had to use a different API for that.
I used the following url for real-time data:
http://backend.windcentrale.nl/windcentrale/productie_1.txt
I did some small review of your code.
@@ -0,0 +1,124 @@ | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this still have a role in the binding or was it only for the development.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is only as reference. It is not used in any way in the binding.
Main purpose for me is that when the windcentrale protocol/API is changing, I know the 'from' situation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A nicer and more functional way to add such information would be if it was part of a unit test.
|
||
try { | ||
|
||
//String getMillData = "{\"powerProducerId\":\"563fbecd-d6f8-4d5e-9c3a-5e8577c7e256\",\"windSpeed\":4.0,\"windDirection\":\"NW\",\"powerAbsTot\":141.0,\"powerAbsWd\":26.0,\"powerRel\":17.0,\"diameter\":29.0,\"rpm\":22.4,\"pulsating\":false,\"kwh\":1459683.0,\"kwhForecast\":2767000.0,\"hoursRunThisYear\":4606.0,\"runPercentage\":97.98130630630631,\"windSpeedForecast\":3.0,\"windDirectionForecast\":\"NW\",\"timestamp\":\"2016-07-14T11:30:08\"}"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Commented code
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed can be cleaned.
Thx
import org.eclipse.smarthome.core.types.RefreshType; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
/* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Commented code
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed can be cleaned.
Thx
// List of all Channel IDs | ||
public final static String CHANNEL_WIND_SPEED = "windSpeed"; | ||
public final static String CHANNEL_WIND_DIRECTION = "windDirection"; | ||
public final static String CHANNEL_POWER_TOTAL = "powerAbsTot"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason you shortened this variable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only to avoid very long names
public final static String CHANNEL_LAST_UPDATE = "timestamp"; | ||
|
||
public final static String PROPERTY_MILL_ID = "millId"; | ||
public final static String PROPERTY_WD = "wd"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason you shortened this variable, do you refer to a windDelerId?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not the winddelerId. This is the number of owned winddelen... used to multiply the per winddeel power to the power assigned to you.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To help others to update the binding later on, it might be a better choice to not use uncommon abbreviations.
@@ -0,0 +1,21 @@ | |||
Manifest-Version: 1.0 | |||
Bundle-ManifestVersion: 2 | |||
Bundle-Name: WindCentraler Binding |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WindCentraler seems like a typo?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed. Thx
</config-description> | ||
</thing-type> | ||
|
||
<channel-type id="windSpeedType"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe channel-type id's should be lower case, but I'm not sure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have not seen that being in the guidelines
e.g. https://www.eclipse.org/smarthome/documentation/development/bindings/thing-definition.html
has in the example a camelcase
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, I will leave it up to @kaikreuzer maybe the discussion was specific to a binding.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Too bad there is no convention for this. Bindings now all differentiate between:
- channelName
- channelname
- channel-name
The most common form I see used in bindings is camelCased.
Though I personally prefer lowercase. That's because I prefer the nicer looks with the lowercase binding ID and thing ID. It also saves key strokes with typing, because you do not constantly need a shift modifier. Also you do not have to think about what is upper and lower case. But this is still all personal preference.
Can you add a downloaded jar, so others can download and test it? |
I can send you a link where to download it. You can drop it in the addons
folder.
There is not an easy way build bindings can be distributed :(
https://community.openhab.org/t/add-unvalidated-newbinding-to-the-oh2-addons-list/19301
2017-01-01 16:01 GMT+01:00 Martin van Wingerden <[email protected]>:
… Can you add a downloaded jar, so others can download and test it?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<https://github.com/openhab/openhab2-addons/pull/1535#issuecomment-269906183>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AFmWbZZs7uX-K5mg2dkILy7JTDzCjbgQks5rN7_bgaJpZM4LGDkF>
.
|
Installing will not be the problem, I am/was just a little bit lazy to build it myself. I believe you can even drop it in the comment field, then it will be hosted by Github |
Please find it here |
While linking all channel to there default new values, I get a clash between Vermogen en Energy Forecast (Also a mix of dutch and English) |
The same collision with "Productie vermogen (%)" and "Run percentage" |
The only thing which I have now with my custom setup and will lose with yours is today's production, I use it store yesterday productions and compare it with today production until now. For the rest its great and it works! |
The total daily production is not in the feed indeed (think it also does not appear in the realtime URL you gave) |
Sorry for my slow response. I think I spotted the problem with the labels
|
The problem with the daily production is that you also need to apply a certain factor, so it makes it non-trivial. |
As a fellow winddeler I'll also be testing this binding @marcelrv. I already gave the code a quick look and wonder why often the "C" is capitalized in See for instance their blog: https://www.windcentrale.nl/blog |
@wborn I think you have a fair point here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@marcelrv I've now had a more thorough look at the code and added some comments where I see room for improvement. Nothing really major so good job! :-)
Now I'll be putting your code to work and see if I can use it to replace my existing HTTP Binding items.
xsi:schemaLocation="http://eclipse.org/smarthome/schemas/binding/v1.0.0 http://eclipse.org/smarthome/schemas/binding-1.0.0.xsd"> | ||
|
||
<name>WindCentrale Binding</name> | ||
<description>Binding for a WindCentrale windmills</description> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "a" can be removed so it reads like "Binding for Windcentrale windmills"
@@ -0,0 +1,24 @@ | |||
# binding | |||
binding.windcentrale.name = WindCentrale Binding | |||
binding.windcentrale.description = Binding voor WindCentrale reports. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"reports" is not Dutch, and if this were a direct translation from English it would read "Binding voor Windcentrale windmolens"
|
||
# thing types | ||
thing-type.windcentrale.mill.label = WindCentrale WindMolen | ||
thing-type.config.windcentrale.mill.millId.label = Wind Molen |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file uses for the Dutch word "windmolen" the words "WindMolen" "Wind Molen". Windcentrale does not see it as some kind of branded word, and also just refers to a windmill as "windmolen".
# thing types | ||
thing-type.windcentrale.mill.label = WindCentrale WindMolen | ||
thing-type.config.windcentrale.mill.millId.label = Wind Molen | ||
thing-type.config.windcentrale.mill.wd.label = Aantal Wind Delen |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Windcentrale does use a branded word for wind shares. That's why they refer to them with a capital "W", i.e. "Winddelen"
thing-type.windcentrale.mill.label = WindCentrale WindMolen | ||
thing-type.config.windcentrale.mill.millId.label = Wind Molen | ||
thing-type.config.windcentrale.mill.wd.label = Aantal Wind Delen | ||
thing-type.config.windcentrale.mill.wd.description = Aantal Wind delen in bezit |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So this sentence should also use "Winddelen"
|
||
int pollingPeriod = 30; | ||
param = getConfig().get(PROPERTY_REFRESH_INTERVAL); | ||
if (param instanceof BigDecimal && param != null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When param is null
it is no instanceof BigDecimal, so the null check is not necessary.
channel.windcentrale.powerAbsTot.label = Productie Vermogen (%) | ||
channel.windcentrale.powerAbsWd.label = Vermogen van de winddelen | ||
channel.windcentrale.kwhForecast.label = Verwachte Productie | ||
channel.windcentrale.runPercentage.label = Molen Productie percentage |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be better if the same capitalization style was used everywhere in the translations. So either:
- each sentence starts with a capital and uses lowercase for the rest of the sentence (excl. branded words)
or
- each word is capitalized
The same applies to the English translations.
String urlString = baseURL + millId + "/live?ignoreLoadingBar=true"; | ||
try { | ||
URL url = new URL(urlString); | ||
URLConnection connection = url.openConnection(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be better when any connections are explicitly closed in a finally
block.
<default>131</default> | ||
</parameter> | ||
<parameter name="wd" type="integer" required="false"> | ||
<label>Wind Parts</label> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Wind Shares" might be a better translation of the Dutch "Winddelen".
</parameter> | ||
<parameter name="wd" type="integer" required="false"> | ||
<label>Wind Parts</label> | ||
<description># of wind parts ("winddelen")</description> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But then this line would also need to be updated to read "wind shares"
<item-type>Number</item-type> | ||
<label>Power</label> | ||
<category>Energy</category> | ||
<state pattern="%.1f Wh" readOnly="true" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Power (Watt) and Energy (Watt/hour) are two different things. If the consumed power of a LED light is 10W then after 1 hour it has consumed 10Wh of energy (or. 0.01kWh). The same goes for the windmill instead it produces instead of consumes. So when there is "Power" in the label I would expect a "W" or "kW" unit. The category might also be wrong. But ESH is not clear about this.
<item-type>Number</item-type> | ||
<label>Power</label> | ||
<category>Energy</category> | ||
<state pattern="%.1f kWh" readOnly="true" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The unit is probably "kW", see remark about power and energy above.
<label>Total Power</label> | ||
</channel> | ||
<channel id="powerAbsWd" typeId="powerType"> | ||
<label>WD Power</label> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you make this more clear for English users? E.g. something like "Wind share power"? The Dutch have a more describing label with "Vermogen van de winddelen" . But I can imagine the Dutch label does not fit in some UIs because of its length. :-)
``` | ||
Group gReiger "WindCentrale Reiger" <wind> | ||
|
||
Number ReigerWindSpeed "Wind Snelheid[%1.0f Bf]" <wind> (gReiger) {channel="windcentrale:mill:reiger:windSpeed") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All the documentation is in English. So using English labels would be better.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would doubt any non-Dutch would ever use this binding, hence I kept this in Dutch, so it can be easy pasted in any item file.
Besides all my minor comments the binding does work well @marcelrv! So this will be a good replacement for the HTTP Binding items I've been using. |
ad832c2
to
562353c
Compare
@wborn thanks for your good input. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for reworking the code so quickly @marcelrv! I've gone through all files again and added some minor remaining remarks.
@@ -0,0 +1,23 @@ | |||
# binding | |||
binding.windcentrale.name = Windcentrale Binding | |||
binding.windcentrale.description = Binding voor Windcentrale windmolens. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is a bit illogical that this translation does end with a "." whereas the other Dutch and English translations do not.
thing-type.config.windcentrale.mill.wd.label = Aantal Winddelen | ||
thing-type.config.windcentrale.mill.wd.description = Aantal Winddelen in bezit | ||
thing-type.config.windcentrale.mill.refreshInterval.label = Ververs interval | ||
thing-type.config.windcentrale.mill.refreshInterval.description = Ververs interval in seconden. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is a bit illogical that this translation does end with a "." whereas the other Dutch and English translations do not.
thing-type.config.windcentrale.mill.refreshInterval.description = Ververs interval in seconden. | ||
|
||
# channels | ||
channel.windcentrale.windSpeed.label = Windsnelheid (Bf) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The abbreviation for Beaufort seems to be "Bft".
xsi:schemaLocation="http://eclipse.org/smarthome/schemas/thing-description/v1.0.0 http://eclipse.org/smarthome/schemas/thing-description-1.0.0.xsd"> | ||
|
||
<thing-type id="mill"> | ||
<label>Windcentrale Wind Mill</label> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In English they refer to a "windmolen" as "windmill", i.e. without the space. There are many other occurrences in the code/XML that refer to "Wind Mill" or "Wind Mills".
Can you also give the English labels/descriptions the same capitalization treatment as you did with the Dutch ones? The Dutch ones look fine now. The English labels/descriptions now use a different capitalization strategy (first letter of each word capitalized) compared to the Dutch ones (first letter of sentence capitalized).
</parameter> | ||
<parameter name="wd" type="integer" required="false"> | ||
<label>Wind Shares</label> | ||
<description># of wind shares ("Winddelen")</description> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replacing "#" with "Number" would be better. It is already done so in the Dutch translations.
} | ||
|
||
updateProperty(Thing.PROPERTY_VENDOR, "Windcentrale"); | ||
updateProperty(Thing.PROPERTY_MODEL_ID, "WindMolen"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would make sense to replace this "M" with a "m" now that all other occurrences are written in lower case.
} | ||
|
||
private synchronized void updateData() { | ||
logger.debug("Update WindMolen data '{}'", getThing().getUID()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All the binding logging is in English, except for this "WindMolen".
import org.eclipse.smarthome.core.thing.ThingTypeUID; | ||
|
||
/** | ||
* The {@link windcentraleBinding} class defines common constants, which are |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{@link windcentraleBinding}
should be {@link WindcentraleBindingConstants}
.
<channel-type id="timestamp"> | ||
<item-type>DateTime</item-type> | ||
<label>Last Updated</label> | ||
<category>Date</category> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no "Date" category according to: https://eclipse.org/smarthome/documentation/development/bindings/thing-definition.html
|
||
|
||
## Full example | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add a new line after the header. See: https://eclipse.org/smarthome/documentation/development/bindings/docs.html
Service-Component: OSGI-INF/* | ||
Export-Package: org.openhab.binding.windcentrale, | ||
org.openhab.binding.windcentrale.handler | ||
Require-Bundle: org.apache.commons.io |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The manifest must not contain any “Require-Bundle” entries. Instead, “Import-Package” must be used.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM now Marcel
You can then squash the commits of me & @wborn in to an |
be04cd2
to
cac82ea
Compare
Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks - a great service, which I would like to have in Germany as well!
Nice code and pretty straight-forward - I only have a few last comments.
logger.debug("Refreshing {}", channelUID); | ||
updateData(); | ||
} else { | ||
logger.warn("This binding is a read-only binding and cannot handle commands"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please reduce to debug and thus simply ignore commands
|
||
try { | ||
String getMillData = getMillData(); | ||
JsonParser parser = new JsonParser(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you really need to create a new instance on every update? f not, it would be much better to keep this as a field in your class.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nope, improved it.
public void handleCommand(ChannelUID channelUID, Command command) { | ||
if (command == RefreshType.REFRESH) { | ||
logger.debug("Refreshing {}", channelUID); | ||
updateData(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You might receive a REFRESH command for all channels sequentially - this could result in many concurrent ( and blocking) HTTP calls. You might be interested in this feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, implemented this new cache mechanism.
} | ||
|
||
private String getMillData() throws IOException { | ||
try (InputStream connection = millUrl.openStream()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
URLConnection is not really advised as it is sometimes a bit difficult to manage regarding error handling and proxy support. I'd suggest to go for HttpUtil.executeUrl()
instead, which ESH provides and encapsulates all code using the Jetty HTTP client.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed. Simplifies & improves. Done
Signed-off-by: Marcel Verpaalen <[email protected]>
Signed-off-by: Marcel Verpaalen <[email protected]>
Perfect, many thanks! |
* master: [senseBox] Forgot to add binding to feature.xml (openhab#2371) [Kodi] Fix audio sink (openhab#2301) (openhab#2303) Initial contribution of a Niko Home Control binding. (openhab#1589) [keba] fixed typo (openhab#2370) Removed utilisation of org.apache.http.client (openhab#2369) [RFXCOM] Make LWRF mood buttons work (openhab#2366) [senseBox] Switch caching to ESH ExpiringCacheMap (openhab#2361) Fixed problems found by AuthorTagCheck in the cometvisu bundle (openhab#2364) Added author tag where missing. (openhab#2351) [RFXCOM] Fix chill temperature (openhab#2362) initial contribution Windcentrale binding (openhab#1535) Tesla : reset the Even Stream connection to the Tesla Back-end if the event time stamps differ too much from the current system time (openhab#2358) Homematic: Some updates (openhab#2346) [RFXCOM] Support all data from wind sensors (openhab#2329) Gardena: Optimized refresh after command (openhab#2353) Fix some javadocs. (openhab#2349) Some small non-standard copyright banners which we missed while reviewing (openhab#2347)
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
@marcelrv could you remove the binding from the marketplace, I think it adds no value now its part of the build since release 2.1 See also: Thanks! |
@martinvw agree. done. |
* WindCentrale binding Binding for windcentrale incl code reviews & updates Also-by: Wouter Born <[email protected]> Also-by: Martin van Wingerden <[email protected]> Signed-off-by: Marcel Verpaalen <[email protected]>
Signed-off-by: Marcel Verpaalen [email protected]