Ich verstehe es nicht. :shock:
Habe jetzt das PDF Dokument gefunden was SMA für das "Protokoll" bereitstellt.
Zähler haben immer die Messart 8 (Zeitintegral1, Zählerstände) und werden mit einer Datenlänge von 8 Byte übertragen.
Ich verstehe es nicht. :shock:
Habe jetzt das PDF Dokument gefunden was SMA für das "Protokoll" bereitstellt.
Zähler haben immer die Messart 8 (Zeitintegral1, Zählerstände) und werden mit einer Datenlänge von 8 Byte übertragen.
Also ich würde fast sagen da liegt der Hase begraben.
Vielleicht kann ja sven-rhein der das gleiche Problem hat/hatte wie ich mal melden was er für ein SmartMeter hat.
Das könnte durchaus das Problem sein. Habe schon lange kein Update mehr gemacht.
Firmware-Version
1.02.04.R
Hast du auch das Engerymeter "1"? Oder schon das zweier?
ich lade mal eine neue Firmware dann sollte das Problem ja wieder auftreten und dann ändere ich sie wieder ab auf original.
Update: Ich glaube du hast schon die neue Version. Auf der SMA Seite ist die 1.02.04.R die letzte als Download.
Die 2.0X sind wohl für das Emter-20 ich habe das Emeter-10
https://www.sma.de/produkte/monitoring- … meter.html
unter Release Notes
So ich habe jetzt mal ein bischen gespielt und mein Adapter läuft jetzt. Leider weiß ich aber nicht warum. Besser gesagt ich weiß schon warum,
aber wieso das der Adapter bei anderen so funktioniert weiß ich nicht. Hier meine Änderung:
Ich habe in der main.js bei allen Points in der als Length die 8 vorkam durch eine 6 ersetzt.
Beispiel:
Original:
var points = {
'SMASerial': {offset: 20, length: 4, factor: 1, unit: ''},
'pregard': {offset: 32, length: 4, factor: 1 / 10, unit: 'Watt'},
'pregardcounter': {offset: 40, length: 8, factor: 1 / 3600000, unit: 'kWh'},
'psurplus': {offset: 52, length: 4, factor: 1 / 10, unit: 'Watt'},
'psurpluscounter': {offset: 60, length: 8, factor: 1 / 3600000, unit: 'kWh'}
};
Angepasst:
var points = {
'SMASerial': {offset: 20, length: 4, factor: 1, unit: ''},
'pregard': {offset: 32, length: 4, factor: 1 / 10, unit: 'Watt'},
'pregardcounter': {offset: 40, length:6, factor: 1 / 3600000, unit: 'kWh'},
'psurplus': {offset: 52, length: 4, factor: 1 / 10, unit: 'Watt'},
'psurpluscounter': {offset: 60, length: 6, factor: 1 / 3600000, unit: 'kWh'}
Warum habe ich das gemacht? ich habe das Logging mal erweitert und gesehen das er die beiden
'SMASerial': {offset: 20, length: 4, factor: 1, unit: ''},
'pregard': {offset: 32, length: 4, factor: 1 / 10, unit: 'Watt'},
noch lesen konnte. Dann habe ich mir nochmal die Fehlermeldung angesehen:
by controller[0]: RangeError [ERR_OUT_OF_RANGE]: The value of "byteLength" is out of range. It must be >= 1 and <= 6.
Größer 1 kleiner= 6 er hat aber die 8 erhalten. Deswegen habe ich jetzt mal alles auf length: 6 gedreht und siehe da der Adapter startet und
liefert auch die richtigen Werte was ich bisher gesehen habe.
Vielleicht kann der AdapterOwner oder jemand anderes noch was dazu sagen ….
Gruß
Michael
So ich habe jetzt mal ein bischen gespielt. Mein ByteArray hat eine Größe von 600 und mit dem empfange ich auch die Daten.
Kleiner geht nicht größer geht, ist dann aber 0..
Wenn mein kleiner Listener läuft sehe ich ihn auch im netstat….
UDP 0.0.0.0:9522 :
Ich vermute fasst das er garkein UDP Listener aufbekommt. Kann mir jemand sagen wie ich an den Adapter am einfachsten einen Debugger bekomme?
Dann sehe ich vielleicht mehr warum er rausfliegt.
ja, ich schreib mal kurz ein Programm heute Abend und schau mal was da ankommt…
Hallo,
läuft bei mir unter Windows. Firewall UDP 9522 ist offen. Aber guter Hinweis, wenn ich mit netstat schaue
lauscht kein Prozess auf UDP 9522….
UDP 0.0.0.0:500 :
UDP 0.0.0.0:3389 :
UDP 0.0.0.0:3702 :
UDP 0.0.0.0:3702 :
UDP 0.0.0.0:4500 :
UDP 0.0.0.0:5050 :
UDP 0.0.0.0:5353 :
UDP 0.0.0.0:5355 :
UDP 0.0.0.0:49667 :
UDP 127.0.0.1:1900 :
UDP 127.0.0.1:49664 :
UDP 127.0.0.1:59756 :
UDP 192.168.1.120:137 :
UDP 192.168.1.120:138 :
UDP 192.168.1.120:1900 :
UDP 192.168.1.120:59755 :
UDP [::]:500 :
UDP [::]:3389 :
UDP [::]:3702 :
UDP [::]:3702 :
UDP [::]:4500 :
UDP [::]:5353 :
UDP [::]:5355 :
UDP [::]:49668 :
UDP [::1]:1900 :
UDP [::1]:59754 :
UDP [fe80::14f5:4b1f:b2d7:e715%15]:1900 :
UDP [fe80::14f5:4b1f:b2d7:e715%15]:59753 :
Oder er stirbt schneller wie ich es sehe…
Nachtrag auch mit deaktivierter Firewall keine Besserung.
Hallo,
ich hänge mich mal an. Nachdem ich es geschafft habe den Adapter zu installieren bleibt er bei mir auch auf rot.
Sieht für mich so aus wie wenn die Datenpaketgröße nicht passt.
Caught
2018-12-30 13:52:23.074
error
by controller[0]: at UDP.onMessage [as onmessage] (dgram.js:685:8)
Caught
2018-12-30 13:52:23.074
error
by controller[0]: at Socket.emit (events.js:189:13)
Caught
2018-12-30 13:52:23.074
error
by controller[0]: at Socket. <anonymous>(C:\Program Files (x86)\iobroker\node_modules\iobroker.sma-em\main.js:69:35)
Caught
2018-12-30 13:52:23.074
error
by controller[0]: at Uint8Array.readUIntBE (internal/buffer.js:161:3)
Caught
2018-12-30 13:52:23.074
error
by controller[0]: at boundsError (internal/buffer.js:50:9)
Caught
2018-12-30 13:52:23.074
error
by controller[0]: RangeError [ERR_OUT_OF_RANGE]: The value of "byteLength" is out of range. It must be >= 1 and <= 6.
Gruß Michael</anonymous>
Ich glaub ich habs jetzt verstanden. Mit dem SonoffAdapter gehen nur gewisse Dinge. am MQTT Adapter kommt alles an. Man müsste den Sonoffadapter anpassen. Ich schau mir das mal an. Werde wieder berichten
Hallo zusammen,
danke für eure Ideen. Habe jetzt auch mal die Unit hinzugefügt. Leider kommt keine andere Meldung wie bisher auch….
Bin ehrlich gesagt ratlos. Das was per MQTT kommt sieht eigentlich gut aus. Die Datenpunkte wurden auch alle automatisch angelegt bis auf den
Gas-Wert diesen habe ich dann manuell angelegt.
{
"from": "system.adapter.admin.0",
"ts": 1545904792111,
"common": {
"name": "Luftsensor_78879C BME680 Gas",
"role": "value",
"type": "number",
"unit": "kOhm",
"desc": "Manuell erzeugt",
"read": true,
"write": false
},
"native": {},
"acl": {
"object": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator",
"state": 1636
},
"_id": "sonoff.0.Luftsensor_78879C.BME680_Gas",
"type": "state"
}
Müsste die Role aber nicht value.Gas heissen? Zumindes bei Humidity und Temperatur und Pressure heissen sie value.XXX
Da es im MQQT auch Gas heisst?
Ich habe auch schon nach einer Debugmöglichkeit gesucht aber nichts gefunden...
Gruß
Michael