NEWS
[Frage] Realisierung Adapter UDP Keba Wallbox
-
Hier noch das momentan laufende Skript was funktioniert:
Nachdem die Werte beim Start einmal eingelesen wurden (ich habe ds manuell angestossen) wird nur noch
nach einem Broadcast der Box geupdated
var pfad = 'Wallbox.KEBA.'; var PORT = 7090; var PORT2 = 7092; var HOST = '0.0.0.0'; var BOX = '192.168.0.11'; var buf1 = new Buffer('report 1'); var buf2 = new Buffer('report 2'); var buf3 = new Buffer('report 3'); var dgram = require('dgram'); //var dgram2 = require('dgram'); //var dgramc = require('dgram'); var socket = dgram.createSocket('udp4'); var server = dgram.createSocket('udp4'); var server2 = dgram.createSocket('udp4'); // report 1 createState(pfad+"Product", "unset", {name: 'Model name (variant)'}); createState(pfad+"Serial", "unset", {name: 'Serial number'}); createState(pfad+"Firmware", "unset", {name: 'Firmware version'}); // report 2 createState(pfad+"State", 0, {type: 'number', name: 'Current state of the wallbox'}); createState(pfad+"Error1", 0, {type: 'number', name: 'Detail code for state 4'}); createState(pfad+"Error2", 0, {type: 'number', name: 'Detail code for state 4 b'}); createState(pfad+"Plug", 0, {type: 'number', name: 'Current condition of the loading connection'}); createState(pfad+"Enable_sys", 0, {type: 'number', name: 'Enable state for charging'}); createState(pfad+"Enable_user", 0, {type: 'number', name: 'Enable condition via UDP'}); createState(pfad+"Max_curr", 0, {type: 'number', unit: 'mA', name: 'Current preset value via Control pilot'}); createState(pfad+"Max_curr_pct", 0, {type: 'number', unit: '%', name: 'Current preset value via Control pilot in 0,1% of the PWM value'}); createState(pfad+"Curr_HW", 0, {type: 'number', unit: 'mA', name: 'Highest possible charging current of the charging connection'}); createState(pfad+"Curr_user", 0, {type: 'number', unit: 'mA', name: 'Current preset value of the user via UDP'}); createState(pfad+"Curr_FS", 0, {type: 'number', name: 'Current preset value for the Failsafe function'}); createState(pfad+"Tmo FS", 0, {type: 'number', unit: 's', name: 'Communication timeout before triggering the Failsafe function'}); createState(pfad+"Output", 0, {type: 'number', name: 'State of the relay output X2'}); createState(pfad+"Input", 0, {type: 'number', name: 'State of the potential free Enable input X1'}); createState(pfad+"Sec", 0, {type: 'number', unit: 's', name: 'Current system clock since restart of the wallbox'}); // report 3 createState(pfad+"U1", 0, {type: 'number', unit: 'V', name: 'Current voltage in V of phase 1'}); createState(pfad+"U2", 0, {type: 'number', unit: 'V', name: 'Current voltage in V of phase 2'}); createState(pfad+"U3", 0, {type: 'number', unit: 'V', name: 'Current voltage in V of phase 3'}); createState(pfad+"I1", 0, {type: 'number', unit: 'V', name: 'Current voltage in mA of phase 1'}); createState(pfad+"I2", 0, {type: 'number', unit: 'V', name: 'Current voltage in mA of phase 2'}); createState(pfad+"I3", 0, {type: 'number', unit: 'V', name: 'Current voltage in mA of phase 3'}); createState(pfad+"P", 0, {type: 'number', unit: 'mW', name: 'Current power in mW (Real Power)'}); createState(pfad+"PF", 0, {type: 'number', unit: '%', name: 'Power factor in 0,1% (cosphi)'}); createState(pfad+"E_pres", 0, {type: 'number', unit: 'Wh', name: 'Power consumption of the current loading session in 0,1Wh'}); createState(pfad+"E_total", 0, {type: 'number', unit: 'Wh', name: 'Total power consumption (persistent) without current loading session 0,1Wh'}); server.on('listening', function () { var address = server.address(); log('UDP Server listening on ' + address.address + ":" + address.port); }); server.bind(PORT, HOST); server2.on('listening', function () { server2.setBroadcast(true); server2.setMulticastLoopback(true); var address = server2.address(); log('UDP Server 2 listening on ' + address.address + ":" + address.port); }); server2.bind(PORT2, HOST); // Antworten auf Abfrage server.on('message', function (message, remote) { log('Meldung von der Wall Box: ' + message); var obj = JSON.parse(message); if(obj.ID === '3') { // werte report 3 setState(pfad+"U1", obj.U1); setState(pfad+"U2", obj.U2); setState(pfad+"U3", obj.U3); setState(pfad+"I1", obj.I1); setState(pfad+"I2", obj.I2); setState(pfad+"I3", obj.I3); setState(pfad+"P", obj.P); setState(pfad+"PF", 0.1*obj.PF); setState(pfad+"E_pres", 0.1*obj['E pres']); setState(pfad+"E_total", 0.1*obj['E total']); } else if(obj.ID === '2') { // werte report 2 setState(pfad+"State", obj.State); setState(pfad+"Error1", obj.Error1); setState(pfad+"Error2", obj.Error1); setState(pfad+"Plug", obj.Plug); setState(pfad+"Enable_sys", obj['Enable sys']); setState(pfad+"Enable_user", obj['Enable user']); setState(pfad+"Max_curr", obj['Max curr']); setState(pfad+"Max_curr_pct", obj['Max curr %']); setState(pfad+"Curr_HW", obj['Curr HW']); setState(pfad+"Curr_user", obj['Curr user']); setState(pfad+"Curr_FS", obj['Curr FS']); setState(pfad+"Tmo FS", obj['Tmo FS']); setState(pfad+"Output", obj.Output); setState(pfad+"Input", obj.Input); setState(pfad+"Sec", obj.Sec); } else if(obj.ID === '1') { // report 1 setState(pfad+"Product", obj.Product); setState(pfad+"Serial", obj.Serial); setState(pfad+"Firmware", obj.Firmware); } else { log('unexpected message: ' + message); } }); // starten der Abfragen nach Empfang von Broadcasts var timer = null; server2.on('message', function (message, remote) { if(timer) clearTimeout(timer); log('Broadcast from Wallbox: ' + message); var obj = JSON.parse(message); sendcmd(buf2); timer = setTimeout(function() { sendcmd(buf3); }, 1000); }); function sendcmd(cmd) { socket.send(cmd, 0, cmd.length,PORT, BOX, function(err, result) { if (err) log('Fehler Senden ' + cmd, 'error'); else { log('Kommando gesendet: ' + cmd ); } }); } //var timer = null; //schedule('*/5 * * * *', function() { // jede Minute // if(timer) clearTimeout(timer); // sendcmd(buf2); // timer = setTimeout(function() { // sendcmd(buf3); // }, 1000); //}); //schedule("2 * * * *", function() { // jede Stunde // sendcmd(buf1); //});
-
Besten Dank für das Log und dein Script (das sieht schon sehr gut aus :-).
Ein paar Fragen hätte ich noch:
1. Kannst du das Log-Level des Adapters noch auf "Debug" stellen (Experten-Ansicht in der Adapter-Übersicht), sonst sehe ich leider nur die Fehlermeldungen
2. Was macht in deinem Script der "server2"? Der ist ja auf einem anderen Port (7092) als in der Protokollspezifikation (7090), braucht es den, oder war das nur ein Test von dir?
3. Du schickst beim Empfang eines Pakets im server2 jeweils "report 2" und "report 3", wie oft kommt das bei dir vor? Irgendwo habe ich gelesen, dass das alle paar Sekunden sein kann, das wäre dann etwas viel Traffic; ich habe bei mir einen Intervall-Timer (einstellbar, default 30 Sekunden) benutzt. Führt das zu irgendeinem Problem?
Ich warte im Moment mal auf dein Debug-Log und werde dann weiter machen.
-
mit den 2 Servern ist es folgendermaßen (jedenfalls habe ich es so verstanden)
Mit dem Reports 1 bis 3 kann man alle möglichen Stati abfragen. Das geht über den Port 7090.
Wenn sich etwas ändert (z.B. aktivierung des Tatsers zum enablen/disablen des Ladens an der Box - bei mir an einem potentialfreien Homematic Schalt-Aktor) dann sendet die Box Broadcasts mit den entsprechenden Werten – allerdings auf Port 7092.
Dazu im Handbuch:
__2.2 UDP Broadcast Messages
The broadcast messages are intended to avoid the permanent polling of the following described reports.
If there is a change of the status, the authorization, the enable input X1, the maximum possible current presets
(temperature reduction), or an increase of the energy value a message is generated for the change.
For a detailed evaluation of the status, the corresponding report can be queried.__
Deswegen reicht es, wenn zum Start des Adapters alle 3 Reports gezogen werden und dann nur noch auf Broadcasts gewartet wird.
In dem Skript ist es so, dass nach Empfang eines Broadcasts einfach die beiden Reports abgefragt werden.
Da ich ja später das Laden des Autos abhängig vom produzierten Strom der PV Anlage steuern möchte gibt es noch einen „schreibenden“ Wert
da probiere ich noch gerade rum wie der eingestellt wird - es scheint nicht so ganz wie in der Anleitung zu sein ….
Hier der Log (Adapter gestartet, etwas laufen gelassen, dann gestoppt)
ioBroker.adminAdapterInstanzenObjekteZuständeEreignisseGruppenBenutzerAufzählungenLogSkripte Admin kecontact.0 2017-06-12 20:03:17.210 error exception by stop: Not running kecontact.0 2017-06-12 20:03:17.194 error at Signal.wrap.onsignal (node.js:873:46) kecontact.0 2017-06-12 20:03:17.194 error at process.emit (events.js:166:7) kecontact.0 2017-06-12 20:03:17.194 error at emitNone (events.js:67:13) kecontact.0 2017-06-12 20:03:17.194 error at process.g (events.js:260:16) kecontact.0 2017-06-12 20:03:17.194 error at process.stop (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4519:18) kecontact.0 2017-06-12 20:03:17.194 error at Adapter.emit (events.js:169:7) kecontact.0 2017-06-12 20:03:17.194 error at emitOne (events.js:77:13) kecontact.0 2017-06-12 20:03:17.194 error at Adapter. (/opt/iobroker/node_modules/iobroker.kecontact/kecontact.js:34:35) kecontact.0 2017-06-12 20:03:17.194 error at Socket.close (dgram.js:380:8) kecontact.0 2017-06-12 20:03:17.194 error at Socket._healthCheck (dgram.js:486:11) kecontact.0 2017-06-12 20:03:17.194 error Error: Not running kecontact.0 2017-06-12 20:03:17.187 error uncaught exception: Not running kecontact.0 2017-06-12 20:02:54.402 debug " kecontact.0 2017-06-12 20:02:54.402 debug } kecontact.0 2017-06-12 20:02:54.402 debug "Sec": 545805 kecontact.0 2017-06-12 20:02:54.402 debug "Serial": "17501302", kecontact.0 2017-06-12 20:02:54.402 debug "E total": 0, kecontact.0 2017-06-12 20:02:54.402 debug "E pres": 0, kecontact.0 2017-06-12 20:02:54.402 debug "PF": 0, kecontact.0 2017-06-12 20:02:54.402 debug "P": 0, kecontact.0 2017-06-12 20:02:54.402 debug "I3": 0, kecontact.0 2017-06-12 20:02:54.402 debug "I2": 0, kecontact.0 2017-06-12 20:02:54.402 debug "I1": 0, kecontact.0 2017-06-12 20:02:54.402 debug "U3": 0, kecontact.0 2017-06-12 20:02:54.402 debug "U2": 0, kecontact.0 2017-06-12 20:02:54.402 debug "U1": 0, kecontact.0 2017-06-12 20:02:54.402 debug "ID": "3", kecontact.0 2017-06-12 20:02:54.402 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:02:54.400 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:02:54.399 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:02:24.393 debug " kecontact.0 2017-06-12 20:02:24.393 debug } kecontact.0 2017-06-12 20:02:24.393 debug "Sec": 545775 kecontact.0 2017-06-12 20:02:24.393 debug "Serial": "17501302", kecontact.0 2017-06-12 20:02:24.393 debug "E total": 0, kecontact.0 2017-06-12 20:02:24.393 debug "E pres": 0, kecontact.0 2017-06-12 20:02:24.393 debug "PF": 0, kecontact.0 2017-06-12 20:02:24.393 debug "P": 0, kecontact.0 2017-06-12 20:02:24.393 debug "I3": 0, kecontact.0 2017-06-12 20:02:24.393 debug "I2": 0, kecontact.0 2017-06-12 20:02:24.393 debug "I1": 0, kecontact.0 2017-06-12 20:02:24.393 debug "U3": 0, kecontact.0 2017-06-12 20:02:24.393 debug "U2": 0, kecontact.0 2017-06-12 20:02:24.393 debug "U1": 0, kecontact.0 2017-06-12 20:02:24.393 debug "ID": "3", kecontact.0 2017-06-12 20:02:24.393 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:02:24.391 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:02:24.391 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:01:54.394 debug " kecontact.0 2017-06-12 20:01:54.394 debug } kecontact.0 2017-06-12 20:01:54.394 debug "Sec": 545745 kecontact.0 2017-06-12 20:01:54.394 debug "Serial": "17501302", kecontact.0 2017-06-12 20:01:54.394 debug "E total": 0, kecontact.0 2017-06-12 20:01:54.394 debug "E pres": 0, kecontact.0 2017-06-12 20:01:54.394 debug "PF": 0, kecontact.0 2017-06-12 20:01:54.394 debug "P": 0, kecontact.0 2017-06-12 20:01:54.394 debug "I3": 0, kecontact.0 2017-06-12 20:01:54.394 debug "I2": 0, kecontact.0 2017-06-12 20:01:54.394 debug "I1": 0, kecontact.0 2017-06-12 20:01:54.394 debug "U3": 0, kecontact.0 2017-06-12 20:01:54.394 debug "U2": 0, kecontact.0 2017-06-12 20:01:54.394 debug "U1": 0, kecontact.0 2017-06-12 20:01:54.394 debug "ID": "3", kecontact.0 2017-06-12 20:01:54.394 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:01:54.389 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:01:54.388 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:01:24.375 debug " kecontact.0 2017-06-12 20:01:24.375 debug } kecontact.0 2017-06-12 20:01:24.375 debug "Sec": 545715 kecontact.0 2017-06-12 20:01:24.375 debug "Serial": "17501302", kecontact.0 2017-06-12 20:01:24.375 debug "E total": 0, kecontact.0 2017-06-12 20:01:24.375 debug "E pres": 0, kecontact.0 2017-06-12 20:01:24.375 debug "PF": 0, kecontact.0 2017-06-12 20:01:24.375 debug "P": 0, kecontact.0 2017-06-12 20:01:24.375 debug "I3": 0, kecontact.0 2017-06-12 20:01:24.375 debug "I2": 0, kecontact.0 2017-06-12 20:01:24.375 debug "I1": 0, kecontact.0 2017-06-12 20:01:24.375 debug "U3": 0, kecontact.0 2017-06-12 20:01:24.375 debug "U2": 0, kecontact.0 2017-06-12 20:01:24.375 debug "U1": 0, kecontact.0 2017-06-12 20:01:24.375 debug "ID": "3", kecontact.0 2017-06-12 20:01:24.375 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:01:24.374 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:01:24.373 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:54.372 debug " kecontact.0 2017-06-12 20:00:54.372 debug } kecontact.0 2017-06-12 20:00:54.372 debug "Sec": 545685 kecontact.0 2017-06-12 20:00:54.372 debug "Serial": "17501302", kecontact.0 2017-06-12 20:00:54.372 debug "E total": 0, kecontact.0 2017-06-12 20:00:54.372 debug "E pres": 0, kecontact.0 2017-06-12 20:00:54.372 debug "PF": 0, kecontact.0 2017-06-12 20:00:54.372 debug "P": 0, kecontact.0 2017-06-12 20:00:54.372 debug "I3": 0, kecontact.0 2017-06-12 20:00:54.372 debug "I2": 0, kecontact.0 2017-06-12 20:00:54.372 debug "I1": 0, kecontact.0 2017-06-12 20:00:54.372 debug "U3": 0, kecontact.0 2017-06-12 20:00:54.372 debug "U2": 0, kecontact.0 2017-06-12 20:00:54.372 debug "U1": 0, kecontact.0 2017-06-12 20:00:54.372 debug "ID": "3", kecontact.0 2017-06-12 20:00:54.372 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:00:54.371 debug " kecontact.0 2017-06-12 20:00:54.371 debug } kecontact.0 2017-06-12 20:00:54.371 debug "Sec": 545685 kecontact.0 2017-06-12 20:00:54.371 debug "Serial": "17501302", kecontact.0 2017-06-12 20:00:54.371 debug "Input": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Output": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Setenergy": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Tmo CT": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Curr timer": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Tmo FS": 120, kecontact.0 2017-06-12 20:00:54.371 debug "Curr FS": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Curr user": 6000, kecontact.0 2017-06-12 20:00:54.371 debug "Curr HW": 32000, kecontact.0 2017-06-12 20:00:54.371 debug "Max curr %": 1000, kecontact.0 2017-06-12 20:00:54.371 debug "Max curr": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Enable user": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Enable sys": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Authreq": 0, kecontact.0 2017-06-12 20:00:54.371 debug "AuthON": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Plug": 3, kecontact.0 2017-06-12 20:00:54.371 debug "Error2": 0, kecontact.0 2017-06-12 20:00:54.371 debug "Error1": 0, kecontact.0 2017-06-12 20:00:54.371 debug "State": 1, kecontact.0 2017-06-12 20:00:54.371 debug "ID": "2", kecontact.0 2017-06-12 20:00:54.371 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:00:54.369 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:54.368 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:24.384 debug " kecontact.0 2017-06-12 20:00:24.384 debug } kecontact.0 2017-06-12 20:00:24.384 debug "Sec": 545655 kecontact.0 2017-06-12 20:00:24.384 debug "Serial": "17501302", kecontact.0 2017-06-12 20:00:24.384 debug "E total": 0, kecontact.0 2017-06-12 20:00:24.384 debug "E pres": 0, kecontact.0 2017-06-12 20:00:24.384 debug "PF": 0, kecontact.0 2017-06-12 20:00:24.384 debug "P": 0, kecontact.0 2017-06-12 20:00:24.384 debug "I3": 0, kecontact.0 2017-06-12 20:00:24.384 debug "I2": 0, kecontact.0 2017-06-12 20:00:24.384 debug "I1": 0, kecontact.0 2017-06-12 20:00:24.384 debug "U3": 0, kecontact.0 2017-06-12 20:00:24.384 debug "U2": 0, kecontact.0 2017-06-12 20:00:24.384 debug "U1": 0, kecontact.0 2017-06-12 20:00:24.384 debug "ID": "3", kecontact.0 2017-06-12 20:00:24.384 debug UDP datagram from 192.168.0.11:7090: "{ kecontact.0 2017-06-12 20:00:24.383 warn Error handling message: SyntaxError: Unexpected token : kecontact.0 2017-06-12 20:00:24.383 debug " kecontact.0 2017-06-12 20:00:24.383 debug UDP datagram from 192.168.0.11:7090: ""Firmware":"P30 v 3.08.4 (170307-132509)", kecontact.0 2017-06-12 20:00:24.379 debug Sent "report 3" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:24.379 debug Sent "report 2" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:24.378 debug Sent "report 1" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:24.377 debug Sent "i" to 192.168.0.11:7090 kecontact.0 2017-06-12 20:00:24.361 warn UDP socket error: Error: bind EADDRINUSE 192.168.0.2:7090 kecontact.0 2017-06-12 20:00:24.360 warn UDP socket error: Error: bind EADDRINUSE 127.0.0.1:7090 kecontact.0 2017-06-12 20:00:24.355 debug UDP Client listening on 0.0.0.0:7090 kecontact.0 2017-06-12 20:00:24.336 info starting. Version 0.0.1 in /opt/iobroker/node_modules/iobroker.kecontact, node: v4.8.3 kecontact.0 2017-06-12 20:00:24.313 debug statesDB connected kecontact.0 2017-06-12 20:00:24.257 debug objectDB connected
-
Hallo ehome
Die neue Version 0.0.2 des Adapters ist bereit zum Testen:
https://github.com/UncleSamSwiss/ioBroker.kecontact
Ich habe nun das Nachrichten-Handling eingebaut und du solltest alle Werte in ioBroker (Objects und States Ansichten) sehen können.
Bezüglich Timer habe ich es nun wie folgt gelöst:
-
wenn das Polling Interval gesetzt ist (grösser null), wird regelmässig gepollt (Standard-Wert: 30 Sekunden)
-
wenn eine Broadcast-Meldung rein kommt, schicke ich die zwei Report Requests und der Polling Timer wird zurück gesetzt
Kann ich dich bitten, die neue Version zu installieren? Falls du keine States siehst in der "Objects" Liste, dann musst du wohl zuerst den Adapter nochmals löschen, neu installieren und wieder eine Instanz anlegen.
Bitte lass den Adapter eine Weile laufen - vorzugsweise auch während dem Laden deines Autos - und schicke mir das Log-File falls du Fehler oder Unschönheiten siehst (bitte per PM, sonst wird das hier etwas unübersichtlich).
Hast du bezüglich der Befehle, die du schicken möchtest schon etwas rausgefunden? Du hast geschrieben, dass es nicht ganz so zu sein scheint wie in der Anleitung. Im Moment habe ich diesbezüglich noch gar nichts eingebaut.
-
-
Hallo UncleSam,
die States werden angelegt - allerduings startet der Adapter nicht sondern endet mit Fehlern.
Hier das LOG:
Drücke Strg+A und danach Strg+C, um den Inhalt in die Zwischenablage zu kopieren. Klicke irgendwo, um das Fenster zu schliessen. kecontact.0 2017-06-25 20:08:37.742 info terminating kecontact.0 2017-06-25 20:08:37.685 error at process._tickCallback (node.js:428:17) kecontact.0 2017-06-25 20:08:37.685 error at nextTickCallbackWith3Args (node.js:522:9) kecontact.0 2017-06-25 20:08:37.685 error at dgram.js:214:18 kecontact.0 2017-06-25 20:08:37.685 error at exports._exceptionWithHostPort (util.js:930:20) kecontact.0 2017-06-25 20:08:37.685 error at Object.exports._errnoException (util.js:907:11) kecontact.0 2017-06-25 20:08:37.685 error Error: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:08:37.666 error uncaught exception: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:08:37.601 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.kecontact, node: v4.8.3 kecontact.0 2017-06-25 20:08:37.578 debug statesDB connected kecontact.0 2017-06-25 20:08:37.520 debug objectDB connected kecontact.0 2017-06-25 20:08:27.683 info terminating kecontact.0 2017-06-25 20:08:27.639 error at process._tickCallback (node.js:428:17) kecontact.0 2017-06-25 20:08:27.639 error at nextTickCallbackWith3Args (node.js:522:9) kecontact.0 2017-06-25 20:08:27.639 error at dgram.js:214:18 kecontact.0 2017-06-25 20:08:27.639 error at exports._exceptionWithHostPort (util.js:930:20) kecontact.0 2017-06-25 20:08:27.639 error at Object.exports._errnoException (util.js:907:11) kecontact.0 2017-06-25 20:08:27.639 error Error: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:08:27.630 error uncaught exception: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:08:27.600 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.kecontact, node: v4.8.3 kecontact.0 2017-06-25 20:08:27.578 debug statesDB connected kecontact.0 2017-06-25 20:08:27.524 debug objectDB connected kecontact.0 2017-06-25 20:07:56.533 info terminating kecontact.0 2017-06-25 20:07:56.472 error at process._tickCallback (node.js:428:17) kecontact.0 2017-06-25 20:07:56.472 error at nextTickCallbackWith3Args (node.js:522:9) kecontact.0 2017-06-25 20:07:56.472 error at dgram.js:214:18 kecontact.0 2017-06-25 20:07:56.472 error at exports._exceptionWithHostPort (util.js:930:20) kecontact.0 2017-06-25 20:07:56.472 error at Object.exports._errnoException (util.js:907:11) kecontact.0 2017-06-25 20:07:56.472 error Error: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:07:56.468 error uncaught exception: bind EADDRINUSE 0.0.0.0:7090 kecontact.0 2017-06-25 20:07:56.432 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.kecontact, node: v4.8.3 kecontact.0 2017-06-25 20:07:56.396 debug statesDB connected kecontact.0 2017-06-25 20:07:56.337 debug objectDB connected
Die IP Adresse habe ich bei der Adapter-Config eingegeben.
Gruß
Olli
-
Läuft dein Script gleichzeitig?
Es können nicht (einfach so) zwei UDP-Sockets gleichzeitig auf demselben Port registriert sein. Eventuell musst du also deine Javascript-Adapter-Instanz stoppen.
-
Hi,
das war mir eigentlich klar, hatte das Skript und den Java Skript Adapter (läuft in einem eigenen) gestoppt.
Dachte das würde reichen, hatte dann auch nicht mehr mit
netstat -an | grep udp | grep 709
kontrolliert - dumm von mir nur, dass ich die Woche mit node red experimentiert hatte und nicht daran gedacht hatte :oops:
Also - Adapter läuft nun (nach löschen des node red flows) und Objekte werden angelegt.
Bezüglich der Befehle die ich snden möchte habe ich folgendes:
gesendet wird an IP-WALLBOX:7090, "curr XXX" - Als Antwort kommt dann "TCH-OK :done"
Damit kann man den Ladestrom einstellen (laut Doku)
` > [n] = Is the maximum allowed loading current in milliampere.The answer TCH-OK confirms only the receiving of the command and not the
correctness of the value.
Allowed are values between 6000mA and 63000mA. Invalid values are discarded
and the default is set to 6000mA. The value is also depending on the DIP-switch
settings and the used cable of the charging station.
The correct reception can be verified using the proper report or by getting the
corresponding broadcast message. `
Wenn ich also (in dem WIN Tool hercules) "curr 14320" an die Wallbox sende, wird dort "Curr user": 14320 gesetzt.
Allerdings wird das nicht bei den Adapter-Objekten angezeigt, die bleiben z.T. leer.
Kann es sein dass du nicht alle Reports abfragst ?
-
Wenn ich also (in dem WIN Tool hercules) "curr 14320" an die Wallbox sende, wird dort "Curr user": 14320 gesetzt.
Allerdings wird das nicht bei den Adapter-Objekten angezeigt, die bleiben z.T. leer.
Kann es sein dass du nicht alle Reports abfragst ? `
Wenn du das Refresh-Interval auf einem Wert > 30 hast, sollte eigentlich alles regelmässig abgefragt werden (siehst du auch im Log, wenn du es auf "Debug" setzt).Hast du die DIP-Switches an der Wallbox richtig gesetzt, damit Werte setzen via UDP überhaupt zugelassen ist (ich vermute, das ist aus Sicherheitsgründen standardmässig ausgeschaltet).
Gibt es weitere Werte, die du setzen möchtest?
Wenn ja, teste sie bitte mit hercules und schick mir dann die genauen Befehle, die ich senden soll.
-
Hallo UncleSam,
ok ich lege mal los:
soweit ich das bis jetzt beurteilen kann benötige ich nur folgende Anfragen:
<list type="decimal">2. report 1: eigentlich nur beim Starten des Moduls, da Seriennummer, Typ FW der Box hoffentlich recht statisch sind …)
<list type="2">* report 2: der regelmäßig (z.B. alle 30s oder 5min ODER wenn die Box über 255.255.255.255 ein Broadcast raushaut (s. weiter unten)
<list type="3">* report 3: analog zu report2
<list type="4">* curr X: X zwischen 6000 und 32000 (Wird mit DIP Schaltern an der Box eingestellt). X sollte über ein "schreibendes" Objekt möglich sein, da der Wert ja abhängig von der PV-Anlage über iObroker gesetzt werden sollZu den Reports:
Im log sehe ich nur die Werte von report 3 (soweit ich es sehen kann). D
Hier der Output des Adapter-Logs:
Drücke Strg+A und danach Strg+C, um den Inhalt in die Zwischenablage zu kopieren. Klicke irgendwo, um das Fenster zu schliessen. kecontact.0 2017-07-03 21:30:33.633 debug inMem message kecontact.0.* kecontact.0.uptime kecontact.0 2017-07-03 21:30:33.633 debug inMem message kecontact.0.* kecontact.0.serial kecontact.0 2017-07-03 21:30:33.633 debug inMem message kecontact.0.* kecontact.0.eTotal kecontact.0 2017-07-03 21:30:33.633 debug inMem message kecontact.0.* kecontact.0.ePres kecontact.0 2017-07-03 21:30:33.633 debug inMem message kecontact.0.* kecontact.0.pf kecontact.0 2017-07-03 21:30:33.632 debug inMem message kecontact.0.* kecontact.0.p kecontact.0 2017-07-03 21:30:33.632 debug inMem message kecontact.0.* kecontact.0.i3 kecontact.0 2017-07-03 21:30:33.567 debug inMem message kecontact.0.* kecontact.0.i2 kecontact.0 2017-07-03 21:30:33.556 debug inMem message kecontact.0.* kecontact.0.i1 kecontact.0 2017-07-03 21:30:33.555 debug inMem message kecontact.0.* kecontact.0.u3 kecontact.0 2017-07-03 21:30:33.555 debug inMem message kecontact.0.* kecontact.0.u2 kecontact.0 2017-07-03 21:30:33.533 debug inMem message kecontact.0.* kecontact.0.u1 kecontact.0 2017-07-03 21:30:33.523 debug Unknown value received: ID=3 kecontact.0 2017-07-03 21:30:33.522 debug UDP datagram from 192.168.0.11:7090: '{ 'ID': '3', 'U1': 0, 'U2': 0, 'U3': 0, 'I1': 0, 'I2': 0, 'I3': 0, 'P': 0, 'PF': 0, 'E pres': 0, 'E total': 0, 'Serial': '17501302', 'Sec': 2365446 } ' kecontact.0 2017-07-03 21:30:33.517 debug Sent 'report 3' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:30:33.517 debug Sent 'report 2' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.uptime kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.serial kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.eTotal kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.ePres kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.pf kecontact.0 2017-07-03 21:30:13.622 debug inMem message kecontact.0.* kecontact.0.p kecontact.0 2017-07-03 21:30:13.621 debug inMem message kecontact.0.* kecontact.0.i3 kecontact.0 2017-07-03 21:30:13.621 debug inMem message kecontact.0.* kecontact.0.i2 kecontact.0 2017-07-03 21:30:13.618 debug inMem message kecontact.0.* kecontact.0.i1 kecontact.0 2017-07-03 21:30:13.553 debug inMem message kecontact.0.* kecontact.0.u3 kecontact.0 2017-07-03 21:30:13.542 debug inMem message kecontact.0.* kecontact.0.u2 kecontact.0 2017-07-03 21:30:13.542 debug inMem message kecontact.0.* kecontact.0.u1 kecontact.0 2017-07-03 21:30:13.542 debug Unknown value received: ID=3 kecontact.0 2017-07-03 21:30:13.542 debug UDP datagram from 192.168.0.11:7090: '{ 'ID': '3', 'U1': 0, 'U2': 0, 'U3': 0, 'I1': 0, 'I2': 0, 'I3': 0, 'P': 0, 'PF': 0, 'E pres': 0, 'E total': 0, 'Serial': '17501302', 'Sec': 2365426 } ' kecontact.0 2017-07-03 21:30:13.542 debug Sent 'report 3' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:30:13.541 debug Sent 'report 2' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:53.610 debug inMem message kecontact.0.* kecontact.0.uptime kecontact.0 2017-07-03 21:29:53.610 debug inMem message kecontact.0.* kecontact.0.serial kecontact.0 2017-07-03 21:29:53.610 debug inMem message kecontact.0.* kecontact.0.eTotal kecontact.0 2017-07-03 21:29:53.610 debug inMem message kecontact.0.* kecontact.0.ePres kecontact.0 2017-07-03 21:29:53.610 debug inMem message kecontact.0.* kecontact.0.pf kecontact.0 2017-07-03 21:29:53.609 debug inMem message kecontact.0.* kecontact.0.p kecontact.0 2017-07-03 21:29:53.609 debug inMem message kecontact.0.* kecontact.0.i3 kecontact.0 2017-07-03 21:29:53.609 debug inMem message kecontact.0.* kecontact.0.i2 kecontact.0 2017-07-03 21:29:53.609 debug inMem message kecontact.0.* kecontact.0.i1 kecontact.0 2017-07-03 21:29:53.608 debug inMem message kecontact.0.* kecontact.0.u3 kecontact.0 2017-07-03 21:29:53.605 debug inMem message kecontact.0.* kecontact.0.u2 kecontact.0 2017-07-03 21:29:53.532 debug inMem message kecontact.0.* kecontact.0.u1 kecontact.0 2017-07-03 21:29:53.523 debug Unknown value received: ID=3 kecontact.0 2017-07-03 21:29:53.522 debug UDP datagram from 192.168.0.11:7090: '{ 'ID': '3', 'U1': 0, 'U2': 0, 'U3': 0, 'I1': 0, 'I2': 0, 'I3': 0, 'P': 0, 'PF': 0, 'E pres': 0, 'E total': 0, 'Serial': '17501302', 'Sec': 2365406 } ' kecontact.0 2017-07-03 21:29:53.509 debug Sent 'report 3' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:53.508 debug Sent 'report 2' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:33.593 debug inMem message kecontact.0.* kecontact.0.uptime val=2365386, ack=true, ts=1499110173536, q=0, from=system.adapter.kecontact.0, lc=1499110173536 kecontact.0 2017-07-03 21:29:33.592 debug inMem message kecontact.0.* kecontact.0.serial val=17501302, ack=true, ts=1499110173535, q=0, from=system.adapter.kecontact.0, lc=1498491663484 kecontact.0 2017-07-03 21:29:33.590 debug inMem message kecontact.0.* kecontact.0.eTotal val=0, ack=true, ts=1499110173534, q=0, from=system.adapter.kecontact.0, lc=1498491663482 kecontact.0 2017-07-03 21:29:33.589 debug inMem message kecontact.0.* kecontact.0.ePres val=0, ack=true, ts=1499110173533, q=0, from=system.adapter.kecontact.0, lc=1498491663481 kecontact.0 2017-07-03 21:29:33.588 debug inMem message kecontact.0.* kecontact.0.pf val=0, ack=true, ts=1499110173532, q=0, from=system.adapter.kecontact.0, lc=1498491663472 kecontact.0 2017-07-03 21:29:33.581 debug inMem message kecontact.0.* kecontact.0.p val=0, ack=true, ts=1499110173532, q=0, from=system.adapter.kecontact.0, lc=1498491663446 kecontact.0 2017-07-03 21:29:33.580 debug inMem message kecontact.0.* kecontact.0.i3 val=0, ack=true, ts=1499110173531, q=0, from=system.adapter.kecontact.0, lc=1498491663444 kecontact.0 2017-07-03 21:29:33.578 debug inMem message kecontact.0.* kecontact.0.i2 val=0, ack=true, ts=1499110173530, q=0, from=system.adapter.kecontact.0, lc=1498491663443 kecontact.0 2017-07-03 21:29:33.577 debug inMem message kecontact.0.* kecontact.0.i1 val=0, ack=true, ts=1499110173529, q=0, from=system.adapter.kecontact.0, lc=1498491663430 kecontact.0 2017-07-03 21:29:33.559 debug inMem message kecontact.0.* kecontact.0.u3 val=0, ack=true, ts=1499110173528, q=0, from=system.adapter.kecontact.0, lc=1498491663419 kecontact.0 2017-07-03 21:29:33.539 debug inMem message kecontact.0.* kecontact.0.u2 val=0, ack=true, ts=1499110173522, q=0, from=system.adapter.kecontact.0, lc=1498491663410 kecontact.0 2017-07-03 21:29:33.534 debug inMem message kecontact.0.* kecontact.0.u1 val=0, ack=true, ts=1499110173512, q=0, from=system.adapter.kecontact.0, lc=1498491663399 kecontact.0 2017-07-03 21:29:33.509 debug Unknown value received: ID=3 kecontact.0 2017-07-03 21:29:33.508 debug ' kecontact.0 2017-07-03 21:29:33.508 debug } kecontact.0 2017-07-03 21:29:33.508 debug 'Sec': 2365386 kecontact.0 2017-07-03 21:29:33.508 debug 'Serial': '17501302', kecontact.0 2017-07-03 21:29:33.508 debug 'E total': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'E pres': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'PF': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'P': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'I3': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'I2': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'I1': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'U3': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'U2': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'U1': 0, kecontact.0 2017-07-03 21:29:33.508 debug 'ID': '3', kecontact.0 2017-07-03 21:29:33.508 debug UDP datagram from 192.168.0.11:7090: '{ kecontact.0 2017-07-03 21:29:33.506 debug Sent 'report 3' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:33.506 debug Sent 'report 2' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:33.506 debug Sent 'report 1' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:33.505 debug Sent 'i' to 192.168.0.11:7090 kecontact.0 2017-07-03 21:29:33.347 debug UDP broadcast server listening on 0.0.0.0:7092 kecontact.0 2017-07-03 21:29:33.346 debug UDP server listening on 0.0.0.0:7090 kecontact.0 2017-07-03 21:29:33.321 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.kecontact, node: v4.8.3 kecontact.0 2017-07-03 21:29:33.274 debug statesDB connected kecontact.0 2017-07-03 21:29:33.213 debug objectDB connected kecontact.0 2017-07-03 21:29:29.749 info terminating
Setzen des Wertes curr
Werden Werte < 6000 oder > 32000 eingegeben kommt keine Warnung, sondern auch TCH-OK: done
Broadcasts
Ändert sich an der Box ohne Steuerungen durch iObroker etwas (z.B. der Taster zum ein/ausschalten der Ladeerlaubnis wird getätigt)
schickt die Box ein Broadcast raus. Das sieht dann so aus:
hier müsste dann auf ein Broadcast von der Box reagiert werden (mit Abfrage der Reports 2 und 3). Ich habe das in meinem Skript nicht hinbekommen das ging irgendwie nur indem ich auf Port 7092 gelauscht habe:Leider kann ich nicht sagen was beim Laden so an Daten kommt - da sich der Liefertermin des Autos leider auf Anfang August verschoben hat ;(
Gruß
Olli
-
Besten Dank für deine Tests.
Version 0.0.3 sollte nun immer ca. 300 ms warten zwischen einzelnen Telegrammen, damit solltest du alle Reports erhalten.
Zudem habe ich das Schreiben der drei bekannten Werte eingebaut ("Enable User", "Current User" und "Output" - so heissen die in ioBroker, in der Wallbox sind das "ena", "curr" und "output").
Falls du Enable User nicht testen kannst, solltest du zumindest mit einem Multimeter den Output überprüfen können (bitte vorher im Handbuch nachlesen :!: ).
Damit alle Werte einwandfrei funktionieren, musst du leider die Adapter-Instanz löschen, danach die neue Version installieren und dann wieder eine Instanz erstellen (sonst werden gewisse State Objekte als Zahlen anstatt als Wahrheitswert dargestellt - z.B. Enable User und Output).
Leider kann ich nicht sagen was beim Laden so an Daten kommt - da sich der Liefertermin des Autos leider auf Anfang August verschoben hat ;( `
Dann bist du ja beinahe so blind beim Testen wie ich ;-). -
Hallo,
ich finde es klasse, was ihr hier auf die Beine gestellt habt. Ich habe seit einigen Wochen iobroker laufen. Inzwischen lese ich den SMA Meter aus um einiges zu steuern. Infos dazu habe ich auf der Seite EB Systeme gefunden. Über die KEBA Wallbox bin ich dann zu eurem Post gelangt. Ein E Auto liegt bei mir noch in naher Zukunft, trotzdem die Frage, welche Wallbox nutzt ihr?
-
Welche Wallbox nutzt ihr? ` Im Moment ist es nur Olli (ehome), der ein E-Auto bekommt; ich bin nur der Programmierer ;-).
-
Na ja ein e-Auto zu kaufen alleine ist ja keine wirkliche Leistung. :mrgreen:
UncleSam gebührt der Lob – er hat „blind“ einen Adapter auf die Beine gestellt
Die Wallbox ist eine "KEBA 97.924 KeContact P30 (22 kW, 6m Kabel, Typ2, DC, EM, ETH, LMS, c-Serie)"
Genau heute habe ich endlich mein Zoe bekommen. (Beim Tessla gefiel mir der Pries nicht so) ….
Der Adapter scheint zu funktionieren –konnte noch nicht viel Testen – aber die „Hauptfunktion“ das Einstellen des Ladestroms (Variable „currentUser“) funktioniert. Nach Änderung des Wertes Wertes von 10680 auf 32000 wurde im im Zoe direkt eine deutlich kürze Ladezeit angegeben. Jetzt muss nur noch die PV Anlage montiert werden - dann gibt es wirklichen Öko-Strom fürs Auto
Die Anderen Werte scheinen auch plausibel zu sein.
Also, super Arbeit – und der Adapter verdient eine Versionsummer von mindestens 1.0.0 !
-
Super, viel Spaß mit deinem neuen Spielzeug Wie generierst du den Ladestrom für deinen ZOE, also wie ermittelst du den Überschuss? Ich habe da bereits einen SMA Meter eingebaut, der per Multicast sekündlich sendet. Kann man ganz einfach auch mit ioBroker auslesen. Ich hoffe du berichtest mal über deine Erfahrungen.
-
Hallo UncleSam,
zunächst mal Danke fürs Bereitstellen des KeBa-Adapters!
Habe seit dem Wochenende auch ne KeBa KeContact P30 (c-Serie) in der Garage hängen, jetzt muss ich nur noch 6 Wochen aufs Auto warten…
Die Wallbox hab ich heue mal aktiviert und den Adapter genutzt. Daten kommen soweit an. Aber im Log finde ich eine Warnung:
kecontact.0 2017-10-23 18:21:21.941 warn Error handling message: SyntaxError: Unexpected token } in JSON at position 45
Wird da evtl. etwas nicht korrekt ausgelesen?
Viele Grüße
Sneak-L8
-
Wird da evtl. etwas nicht korrekt ausgelesen? ` Hallo Sneak-L8
Da scheint tatsächlich etwas komisches von der Wallbox zu kommen. Kannst du bitte die Adapter-Instanz (im Fortgeschrittenen-Modus) auf "Debug" stellen und neu starten und mir danach per PM das gesamte Log schicken (oder hier als "Spoiler" posten)? Wenn ich sehe, welche Daten daher kommen, kann ich herausfinden wo das Problem liegt.
/UncleSam
-
Hallo UncleSam,
PN ist grade raus.
Viele Grüße
Sneak-L8
-
PN ist grade raus. ` Besten Dank. Das ist tatsächlich ein Fehler im Format der Nachricht von der Wallbox. Du kannst den getrost ignorieren; erstens ist die Firmwareversion das einzige, was ioBroker mit dieser Nachricht bekommt (und die ist nun wirklich nicht sehr relevant) und zweitens wird die sowieso in der nächsten Nachricht gleich nochmals geschickt.
-
Guten Abend
Ich habe den Adapter ebenfalls installiert und bin total begeistert!! Ich habe aktuell noch eine andere Ladelösung (smartfox), diese ist aber aktuell leider unzuverlässig…
Einen Fehler bekomme ich im Log:
kecontact.0 2017-11-02 16:23:12.863 warn Error handling message: SyntaxError: Unexpected token r
kecontact.0 2017-11-02 16:23:10.896 warn Error handling message: SyntaxError: Unexpected token r
kecontact.0 2017-11-02 16:23:08.862 warn Error handling message: SyntaxError: Unexpected token c
kecontact.0 2017-11-02 16:23:06.861 warn Error handling message: SyntaxError: Unexpected token r
kecontact.0 2017-11-02 16:23:04.861 warn Error handling message: SyntaxError: Unexpected token r
kecontact.0 2017-11-02 16:23:02.861 warn Error handling message: SyntaxError: Unexpected token c
kecontact.0 2017-11-02 16:23:00.873 warn Error handling message: SyntaxError: Unexpected token r
kecontact.0 2017-11-02 16:22:58.863 warn Error handling message: SyntaxError: Unexpected token r
kann /muss / darf ich da was machen
beste Grüsse Thierry
-
kann /muss / darf ich da was machen ` Hallo Thierry
Möglicherweise ist das derselbe Fehler wie bei Sneak-L8. Kannst du bitte die Adapter-Instanz (im Fortgeschrittenen-Modus) auf "Debug" stellen und neu starten und mir danach per PM das gesamte Log schicken (oder hier als "Spoiler" posten)? Wenn ich sehe, welche Daten daher kommen, kann ich herausfinden wo das Problem liegt.
/UncleSam