@georgius geht mir auch so
NEWS
Best posts made by Alex4
Latest posts made by Alex4
-
RE: Matter: Nicht unterstützte Geräte/Einstellungen
@ticaki Wäre sehr cool wenn folgende Geräte unterstützt werden würden bzw. auch dessen Adapter:
Solar Inverters (zb. mit dem Fronius Adapter)
Solar Battery Storage
Wärmepumpen (zb. mit dem luxtronik adapter)
Klimaanlagen (Daikin kann man aktuell mit dessen Plugin leider nicht steuern)Ein Device Type mit dem man Werte bzw. Texte übergeben kann.
-
RE: Test Adapter Fronius 2.0.x
@nkleber Du kannst im Browser den developer Mode starten und dann den Netzwerk verkehr mit lauschen. Da siehst Du die Requests die abgesetzt werden von der GUI gegen die API für die Weboberfläche. Das ist natürlich keine API die vermutlich irgendwo dokumentiert ist, aber zumindest kann man diese so verwenden.
Man muss nur das Login via Script machen und sich die variablen / hashes irgendwo speichern und falls diese abgelaufen sind, das Login erneut anstoßen. Bei jedem Request muss der digestAuthHeader neu erstellt werden. Siehe oben.
-
RE: Test Adapter Fronius 2.0.x
@nkleber Das Problem ist, dass ich zb. mit einer gewissen Leistung entladen will und wenn man von der Batterie eine Zwangsladung veranlasst, macht das der Gen24 mit 500Watt. Ich muss hier die Leistung mitgeben können. Das hätte ich beim Modbus nicht gefunden bis dato.
Was ich rausgefunden habe ist, dass man die Requests den Webinterfaces vielleicht benutzen kann:
http post http://xxx.xxx.xxx.xxx/config/timeofuse
Content: {"timeofuse":[{"Active":true,"Power":3000,"ScheduleType":"DISCHARGE_MIN","TimeTable":{"Start":"20:00","End":"21:00"},"Weekdays":{"Mon":true,"Tue":true,"Wed":true,"Thu":true,"Fri":true,"Sat":true,"Sun":true}}]}
result:
{ "errors" : [], "permissionFailure" : [], "unknownNodes" : [], "validationErrors" : [], "writeFailure" : [], "writeSuccess" : [ "timeofuse" ] }
Löschen geht dann:
http post http://xxx.xxx.xxx.xxx/config/timeofuse
Content:
{"timeofuse":[]}
result:
{ "errors" : [], "permissionFailure" : [], "unknownNodes" : [], "validationErrors" : [], "writeFailure" : [], "writeSuccess" : [ "timeofuse" ] }
Um die Werte abzufragen gibts folgendes http get http://10.10.13.211/config/timeofuse, dort kommt dann das array zurück, sofern die authentifzierung passt.
Die Authentifzierung wird im Header unter
authorization: Digest username="technician", realm="Webinterface area", nonce="xxxxxxxxxxx", uri="/config/timeofuse", response="xxxxxxxxxxx", qop=auth, nc=00000042, cnonce="xxxxxxxxxxx"
Die Werte response und cnonce ändern sich bei jedem request dabei, der Wert nonce bleibt für einige Zeit gleich. Der Wert nc wird hochgezählt bei jeder Abfrage, sobald dieser bei mir gerade 61 erreicht hat, wird der counter resettet und gebinnt wieder bei 01 und nonce hat einen neuen tokken oder hash.
im main.js am gen24 findet man auch die authentication berechnung.
key: "digestAuthHeader", value: function(p, g, w, b) { for (var B = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4], y = w.split(","), T = {}, L = 0; L < y.length; L++) { var S = y[L].match(this.AUTH_KEY_VALUE_RE); S && (T[S[1]] = S[2].replace(/["']/g, "")) } if (!T.realm || !T.nonce) return ""; var k = T.qop || "" , R = _.splitCredentials(b) , Y = String(++this.NC); Y = this.NC_PAD.substring(Y.length) + Y; var U = this.randomBytes(8).join("") , X = B ? o.V8.hashStr(R.username + ":" + T.realm + ":" + R.password) : R.password , z = o.V8.hashStr(p.toUpperCase() + ":" + g) , H = X + ":" + T.nonce; k && (H += ":" + Y + ":" + U + ":" + (k = k.split(",")[0])); var se = o.V8.hashStr(H += ":" + z) , te = 'Digest username="' + R.username + '", realm="' + T.realm + '", nonce="' + T.nonce + '", uri="' + g + '", response="' + se + '"'; return T.opaque && (te += ', opaque="' + T.opaque + '"'), k && (te += ", qop=" + k + ", nc=" + Y + ', cnonce="' + U + '"'), te }
Die funktion calcHash(User, realm, password)
key: "calcHash", value: function(p, g, w) { return o.V8.hashStr(p + ":" + g + ":" + w) } key: "hashStr", value: function(s) { var p = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return this.onePassHasher.start().appendStr(s).end(p) }
Wenn ich den Code richtig verstehe, wird in der respone der Username, realm und das Passwort per hash übertragen. Mittels einen ,,onePassHasher", dieser dürfte aus diesem Github Projekt stammen: https://github.com/cotag/ts-md5/tree/master/src
-
RE: Test Adapter Fronius 2.0.x
Gibt es beim Adapter eine Möglichkeit Zeitabhängige Batteriesteuerung (sregeln) zu erstellen bzw. zu löschen?
Meine Idee wäre, die Prognose für die nächten Tage anzuschauen und wenn diese wieder eine volle Batterie ergibt, ich eine Zeit x bei meinem 4 Fronius eine minimale Batterieentladung festlege.
Damit kann ich in die Energiegemeinschaft einspeisen und falls diese den Strom nicht brauchen zum möglichst höchsten Strompreis verkaufen.
Damit verhindere ich außerdem, dass bei einem minus Strompreis, ich fürs Einspeisen am nächsten Tag drauf zahle.Hat das jemand schon mit dem Fronius Adapter gemacht?
Dabei müsste man bei erfüllten Bedingungen zb. folgende Regel im Gen24 erstellen bzw ändert die Zeiten nach dem dynamischen Stromtarifen (da wird die Leitung im Netz auch gebraucht):
Wird die Bedingung nicht erfüllt, löscht man alle vorhandenen Regeln raus oder stellt sie auf inaktiv.
Bei mehreren Gen24 muss man das natürlich auf allen gleich konfigurieren, sonst entlädt man eine Batterie und lädt damit die anderen.
Die aktuellen Strompreise gibts über den Power Grid (APG) Info (AT+DE+CH) Adapter
Für den Forcast der Sonnenstunden bzw. des zu erwartenden Ertrags hab ich noch nichts gefunden.
-
RE: Modbus Adapter für Fronius Wechselrichter geeignet
@homoran wir haben das inzwischen als Slave Smartmeter am laufen, nur muss man aufpassen, dass man die Seriennummern im statischen Register 20480 ändert, da der gen24 keine smartmeter mit gleichen Seriennummern mag.
Der Hintergrund ist, dass ich mit einem Smartmeter derzeit 3 gen24 dazu bringe parallel auch 3 Batterien zu laden/entladen und da es Tesla Batterien mit 77-100kwh sind (gesamt 310Kwh), kam mir dann die Idee, dass auch von anderen Verbrauchern zur Verfügung zu stellen. Im Prinzip wären bei vielen von uns die Daten schon da und müssten nur ,,genutzt“ werden.
Da ich selbst grafisch eine komplette Niete bin und keine Vis auf die Reihe bekomme, ist das via solarweb eine gute Alternative.
-
RE: Modbus Adapter für Fronius Wechselrichter geeignet
hat schon jemand probiert Modbus TCP als Slave Smartmeter einzubinden?
Damit könnte man im Solarweb auch den Verbrauch der Waschmaschine, Ladestation und anderen Dingen die man im ioBroker hat visualisieren.
Die dafür nötigen Modbus Adressen sind ja bekannt.
Gen24 to Fronuis Smart Meter Registers Polled at startup, haven't reversed those yet 0, [2336,0] AC Voltage mean? 11, [731] 770, [1,3) 20480, [50, 51, 48, 50, 53, 54, 87, 31973, 1450] S/N? 20496, [2022] 4098, [0] 4355, [1] 4356, [1,0] Polled constantly: Read holding register for device ID 1 , Start address = 258 Quantity = 16 Read holding register for device ID 1 , Start address = 286 Quantity = 42 The values are encoded as 32-bit integers, with an odd coding of negative values (see python code below) 258 - 2340 234.0 AC Voltage Mean? 259 - 0 260 - 4053 405.3 AC Voltage Mean? 261 - 0 262 - 47739 -1780.6W - Power total 263 - 65535 264 - 17799 1779.9 VA - Apparent Power total 265 - 0 266 - 254 -2.54 VA - Reactive Power total 267 - 0 268 - 1000 Power factor 269 - 0 270 - 0 271 - 0 272 - 499 49.9 Hz - Frequency 273 - 0 286 - 4053 405.3 V - AC Voltage P1 287 - 0 288 - 2343 234.3 - AC Voltage L1 289 - 0 290 - 63001 -2.534A - AC Current L1 291 - 65535 292 - 59598 -593.7W - Power L1 293 - 65535 294 - 5938 593.3 - Apparent Power L1 295 - 0 296 - 22 2.2 VA - Reactive Power L1 297 - 0 298 - 1000 Power factor 299 - 0 300 - 4027 402.7 - AC Voltage P2 301 - 0 302 - 2338 233.8 - AC Voltage L2 303 - 0 304 - 62991 -2.544A - AC Current L2 305 - 65535 306 - 59589 -594.6W - Power L2 307 - 65535 308 - 5948 594.8 - Apparent Power L2 309 - 0 310 - 109 10.9 VA - Reactive Power L2 311 - 0 312 - 1000 Power factor = 1 (64537 = 0.999) 313 - 0 314 - 4072 407.2 - AC Voltage P3 315 - 0 316 - 2336 233.6 - AC Voltage L3 317 - 0 318 - 63005 -2.530A - AC Current L3 (65535-63005 mA) 319 - 65535 320 - 59626 -590.9W - Power L3 ( (65535-59626)/10 ) 321 - 65535 322 - 5911 591.1 - Apparent Power L3 323 - 0 324 - 122 12.2 VA - Reactive Power L3 325 - 0 326 - 1000 Power factor 327 - 0 Polled every 10 seconds: 2023-03-20 17:19:30.073269 Read holding register for device ID 1 , Start address = 1024 Quantity = 16``` Values below were confirmed by looking at the actual meter display 1024 - 2005 Energy consumed (2005.163 kWh) 1025 - 0 1026 - 163 1027 - 0 1028 - 43 Energy reactive consumed (43.801 kVArh) 1029 - 0 1030 - 801 1031 - 0 1032 - 1722 Energy produced (1722.232 kWh) 1033 - 0 1034 - 232 1035 - 0 1036 - 8 Energy reactive produced (8.203 kVArh) 1037 - 0 1038 - 203 1039 - 0 Python to code/decode values Two consecutive 16-bit registers are used. If MSB in r2 is 1, then it's a negative number. def get_value_from_32bits(r1,r2): v = r1 + (r2 & 32767) * 65536 if r2 > 32768: v = - ((65535 - r1) + (65535 - r2) * 65536) print("v:",v) return v def get_32bits_from_value(value): if value > 0: r1 = value & 65535 r2 = value >> 16 if value < 0: value = - value r1 = 65535 - (value & 65535) r2 = 65535 - (value >> 16) print("v,r1,r2:",value,r1,r2) print("") return [r1,r2] v = get_value_from_32bits(64657,1) # 130193 new_regs = get_32bits_from_value(v // 1) v = get_value_from_32bits(17799,0) # 17799 new_regs = get_32bits_from_value(v // 1) v = get_value_from_32bits(47739,65535) # -17796 new_regs = get_32bits_from_value(v // 1) v = get_value_from_32bits(31071,65534) # -100000 new_regs = get_32bits_from_value(-100000 // 1)
-
RE: Hikvision alarm server adapter
@rob_in Hi, ich hab hier eine DS-KD8003Y-IME2 mir fehlt die Einstellung für einen Alarmserver komplett. Es gibt nur ,,Nofity Survelliance" - aber da muss man wohl eine Innenstelle angeben. Hast Du hier schon Erfahrung?
-
RE: Test Adapter KNX v2.x
Guten Morgen,
ich hab auch den knx Adapter mit ~ 300 Datenpunkten aktiv, bei mir und bei einem Freund.
Hierbei haben wir das gleiche Verhalten, dass der Adapter grün ist und trotzdem keine Updates mehr kommen bzw. Befehle auch nicht ins KNX Übertragen werden.
Paralell dazu haben wir ein Segment ebenfalls mit großteils MDT Hardware auf einen openknx Adapter gehängt, der dieses Verhalten nicht zeigt. Da sehen wir auch ab und zu ein ,,reconnect".Der knx Adapter ist auf einer Instanz in der stable Version und auf einer in der Beta 2.0.17. Beide zeigen das gleiche verhalten. Folgende Fehlermeldungen finde ich dazu im Log:
2023-03-08 00:01:00.649 - info: knx.0 (2131) starting. Version 2.0.17 in /opt/iobroker/node_modules/iobroker.knx, node: v16.13.1, js-controller: 4.0.24 2023-03-08 00:01:00.781 - warn: knx.0 (2131) No license found for knx. You can use 500DP for free or you can get a license on https://iobroker.net/accountLicenses ! 2023-03-08 00:01:00.785 - info: knx.0 (2131) Connecting to knx GW: 10.11.33.3:3671 with phy. Adr: 1.0.201 2023-03-07 09:56:38.851 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.387 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.388 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.390 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.452 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.452 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.453 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.486 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.487 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.487 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.592 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.602 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.608 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.709 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.710 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.732 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.800 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.804 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.808 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.833 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.837 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.839 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE 2023-03-07 09:56:39.892 - [31merror[39m: knx.0 (20581) uncaught exception: write EPIPE 2023-03-07 09:56:39.897 - [31merror[39m: knx.0 (20581) Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:164:15) at writeGeneric (node:internal/stream_base_commons:155:3) at Socket._writeGeneric (node:net:795:11) at Socket._write (node:net:807:8) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable:330:10) at Socket.Writable.write (node:internal/streams/writable:334:10) at console.value (node:internal/console/constructor:285:16) at console.warn (node:internal/console/constructor:364:26) at console.error (/opt/iobroker/node_modules/@sentry/src/integrations/console.ts:51:29) 2023-03-07 09:56:39.898 - [31merror[39m: knx.0 (20581) Exception-Code: EPIPE: write EPIPE
Ich schicke bei Ihm, sobald es dunkel ist am Eingang (kleine leuchte) ein Signal dass die Treppenlichtfunktion zu gewissen Zeiten an bleibt - alle 10 Sekunden.
2023-03-07 08:37:30.002 - [32minfo[39m: javascript.0 (1933) script.js.common.Zeitschaltung_Eingang: Licht an 2023-03-07 08:37:40.001 - [32minfo[39m: javascript.0 (1933) script.js.common.Zeitschaltung_Eingang: Licht an
Somit wissen wir sofort, wann das Ding mal wieder nicht geht und das ist öfters pro Tag. Ein Restart in der Nacht vom ganzen Gerät bzw. nur iobroker hilft hier nur kurz. Kann aber auch sein, dass es mal durch läuft einen Tag. Das Verhalten ist nicht wirklich genau einkrenzbar.
-
RE: Test Adapter KNX v2.x
@chefkoch009 Seit dem Update auf 2.0.17 läuft der knx.1 adapter nicht mehr, er kann keine Verbindung zum knx.1 aufnehmen. Installiere ich aber openknx und verbinde mich darüber auf die zweite IP Gateway, läuft das ohne Probleme. Davor bei 2.0.14 waren auch beide Instanzen Verbunden.