Closed gerdluthe closed 1 year ago
What exact command did you run? It's most likely that a config property is missing (these are passed with -ePROPERTY=VALUE). Check the example config for available options.
Edit: I added som better error reporting. The root cause should now be printed at bottom of the log
I tried multiple ones like docker run -it --rm -e "TIBBER_PULSE_SOURCE=http TIBBER_PULSE_HOST=192.168.1.18" ghcr.io/micw/tibber-pulse-reader:master
But no success; can't I use the. application.yaml for docker? It's very complicated to understand how to run the docker without beeing an programmer
I know. I will add more documentation during the evening
What would be nice too is using IP Adresse instead of URL for mqtt server and Tibber host And the possibility using no username and using no password for mqtt Server, cause normally it's hosted locally and I can't see any reasons for using passwords or usernames here
thx
New build (and new README) is available. should now be clear about the config options. You can start without enabling MQTT publishing to test the access to the tibber.
"Host" can be both, hostname or IP address. I added this to the documentation.
Username/Password are optional now for both, http and mqtt.
Edit: seems that the default config is missing in the github build because I set a gitignore wrong. Going to fix it.
It is fixed now. COnfig and error messages should now align with the README ;-)
Please try again and sorry for the inconveniences
Please run it with -e LOG_LEVEL=debug
. I'd appreciate if you can send me some samples of your data + the meter model of yours so that I can extend my testcases and documentation.
Getting a little bit closer 2023-03-12 19:10:56.176 WARN 1 --- [ main] d.w.t.source.TibberPulseHttpReader : Invalid response from tibber pulse gateway endpoint: HTTP/1.1 404 Not Found
Starting via Shell with: docker run -it --rm -e "publish_mqtt_host=mqtt.local" -e "publish_mqtt_topic=grid/{nameOrObisCode}" -e "publish_mqtt_payload='{value}'" -e "TIBBER_PULSE_USERNAME=admin" -e "TIBBER_PULSE_PASSWORD=B0JH-B944" -e "TIBBER_PULSE_SOURCE=http" -e "TIBBER_PULSE_HOST=192.168.1.18" -e" TIBBER_PULSE_HTTP_CRON=/15 " -e "LOG_LEVEL=debug" ghcr.io/micw/tibber-pulse-reader:master
Please log into your tibber, go to nodes and then on "data". Use your browser's developer tools to check what URL is read:
BTW, publish_mqtt_topic etc. must be uppercase to have effect
The node wasn't online. so checked the url as you described and started the docker again result: Meter 1EFR3347014xxxx 1-0:96.50.11 = null EMPTY 1-0:96.1.0255 = null EMPTY 1-0:1.8.0255 / energyImportTotal = null WATT_HOUR 1-0:2.8.0255 / energyExportTotal = null WATT_HOUR 1-0:0.2.00 = null EMPTY 1-0:96.90.21 = null EMPTY 1-0:97.97.00 = null EMPTY 1-0:96.50.14 = null EMPTY 1-0:96.50.4*4 = null EMPTY
Yeah, I just need to add that subset of SML. Can you post a complete SML message from the logs?
Parsing SML: 1b1b1b1b010101017605080e16b66200620072630101760107ffffffffffff0502af5ce80b0a014546522102cd630c7262016502af5ce5016333fe007605080e16b762006200726307017707ffffffffffff0b0a014546522102cd630c070100620affff7262016502af5ce579770701006032010101010101044546520177070100600100ff010101010b0a014546522102cd630c0177070100010800ff641c40047262016502af5ce5621e52ff65016d58b80177070100020800ff017262016502af5ce5621e52ff650286c57c017707010000020000010101010630332e30300177070100605a0201010101010342bd01770701006161000001010101030000017707010060320104010101010850312e322e31320177070100603204040101010103042201010163c14a007605080e16b862006200726302017101639568000000001b1b1b1b1a0309d3
Thank you. May I commit this to github as part of my test suite?
Ja, klar. gerne
Oh and can you confirm that "1EFR3347014668" is pronted as serial on your meter? Than I know that my meter id decoder works for other meters than mine ;-)
Gerne auch auf deutsch ;-)
Die ZählerID ist1EFR3347014668, passt also ;-) Cool, top Arbeit !!! das hilft mir ungemein weiter wenn das funktioniert, dann kann ich den IR Lesekopf zurückbauen und alles mit dem Tibber Node auslesen
Läuft:
Meter 1EFR3347014668
1-0:1.8.0*255 / energyImportTotal = 2394335.2 WATT_HOUR
1-0:2.8.0*255 / energyExportTotal = 4238681.2 WATT_HOUR
Die anderen OBIS-Codes waren nur Statuscodes (Firmware-Version, Hardware, etc.).
Allerdings sendet der Zähler ein eingeschränktes Telegramm. Schau mal auf https://www.sol.de/deutschland-und-welt/digitalisierung-mit-der-taschenlampe-wie-man-das-live-tracking-des-strombrauchs-in-gang-setzt,362468.html bzw. google mal für Deinen Zähler. Du kannst den mit der Taschenlampe (oder ggf. auch einem Taster wenn einer dran ist) "einstellen", dann sendet er die vollen Telegramme (alle 5 Sekunden glaube ich und mit Leistung pro Phase).
Wenn das geht, hast Du bei Tibber die Live-Anzeige in der App. Sende mir davon bitte auch mal ein Telegramm.
Alles klar, den Zähler habe ich noch nicht eingestellt. Der Tibber Vertrag läuft leider erst ab Oktober, aber den Zähler werde ich morgen umstellen und dann kann ich dir ein die Live Anzeige in der Tibber App zur Verfügung stellen.
Ich brauche nur die SML-Daten davon ;-)
Sicher? Schaut genau so aus, wie das erste.
Stimmt: hier mit Error
Parsing SML: 1b1b1b1b010101017605080e4fb36200620072630101760107ffffffffffff0502af6fe70b0a014546522102cd630c7262016502af6fe40163ca28007605080e4fb462006200726307017707ffffffffffff0b0a014546522102cd630c070100620affff7262016502af6fe4f106770701006032010101010101044546520177070100600100ff010101010b0a014546522102cd630c0177070100010800ff641c58047262016502af6fe4621e52ff65016d59500177070100020800ff017262016502af6fe4621e52ff650286c63b0177070100100700ff0101621b520052f70177070100200700ff0101622352ff6309310177070100340700ff0101622352ff63093a0177070100480700ff0101622352ff63093701770701001f0700ff0101622152fe62680177070100330700ff0101622152fe62b80177070100470700ff0101622152fe62740177070100510701ff01016208520052790177070100510702ff0101620852005300ee0177070100510704ff010162085200530108017707010051070fff010162085200530120017707010051071aff0101620852005300e301770701000e0700ff0101622c52ff6301f4017707010000020000010101010630332e30300177070100605a0201010101010342bd01770701006161000001010101030000017707010060320104010101010850312e322e313201770701006032040401010101030422010101635256007605080e4fb56200620072630201710163fa1200001b1b1b1b1a01fd46 2023-03-12 20:48:06.178 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer8 2023-03-12 20:48:06.178 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned16 2023-03-12 20:48:06.179 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned16 2023-03-12 20:48:06.180 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned16 2023-03-12 20:48:06.180 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned8 2023-03-12 20:48:06.181 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned8 2023-03-12 20:48:06.181 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned8 2023-03-12 20:48:06.181 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer8 2023-03-12 20:48:06.182 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer16 2023-03-12 20:48:06.182 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer16 2023-03-12 20:48:06.183 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer16 2023-03-12 20:48:06.183 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Integer16 2023-03-12 20:48:06.184 WARN 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Number format not implemented: org.openmuc.jsml.structures.Unsigned16 2023-03-12 20:48:06.184 DEBUG 1 --- [ main] d.w.tibberpulse.sink.MeterDataHandler : Publishing meter data:
Sehr "gesprächiger" Zähler. Stimmt der Wert bei "power total"?
Meter 1EFR3347014668
1-0:1.8.0*255 / energyImportTotal = 2394350.4 WATT_HOUR
1-0:2.8.0*255 / energyExportTotal = 4238700.3 WATT_HOUR
1-0:16.7.0*255 / powerTotal = -9 WATT
1-0:32.7.0*255 / voltageL1 = 235.3 VOLT
1-0:52.7.0*255 / voltageL2 = 236.2 VOLT
1-0:72.7.0*255 / voltageL3 = 235.9 VOLT
1-0:31.7.0*255 / currentL1 = 1.04 AMPERE
1-0:51.7.0*255 / currentL2 = 1.84 AMPERE
1-0:71.7.0*255 / currentL3 = 1.16 AMPERE
1-0:81.7.1*255 / phaseAngleUL2toUL1 = 121 DEGREE
1-0:81.7.2*255 / phaseAngleUL3toUL1 = 238 DEGREE
1-0:81.7.4*255 / phaseAngleIL1toUL1 = 264 DEGREE
1-0:81.7.15*255 / phaseAngleIL2toUL2 = 288 DEGREE
1-0:81.7.26*255 / phaseAngleIL3toUL3 = 227 DEGREE
1-0:14.7.0*255 / networkFrequency = 50.0 HERTZ
Ja, die Werte stimmen, die Akkus liefern gerade Energie ;-) Gesamtbezug heute <500Wh vom VNB
Schaut gut aus, Werte spuckt er jetzt aus, Publish via MQTT funktioniert auch.
Nice wäre jetzt noch die Ausgabe der importierten/exportieren Energie in kWh anstatt Wh :-)
Noch etwas ist mir aufgefallen: Die Daten werden als String an den MQTT Server übergeben, z.B. ExportEnergyTotal das führt bei der Weiterverarbeitung zu Problemen, da hier integer vorausgesetzt wird.
Mit "als String" meinst Du die Anführungszeichen?
PUBLISH_MQTT_VALUE='{value}'
in PUBLISH_MQTT_VALUE={value}
(oder lass den Parameter ganz weg, das ist ja default).
Im YAML werden die Anführungszeichen weggeparsed, in der Environment-Variable sind sie Bestandteil des Parameters, drum landen die im MQTT
Umrechung Einheit -> ich mach mir mal Gedanken, wie das in die Architektur der Anwendung passt -> #2
String = purer Text; -> also eine Funktion StrtoInt würde ich benötigen Integer wäre dann der Zahlenwert mit dem ich eine Datenbank füttern kann z.B.
Das mit dem PUBLISH Parameter werde ich probieren
Änderung PUBLISH_MQTT_VALUE='{value}' in PUBLISH_MQTT_VALUE={value} war korrekt, ohne das ' Zeichen wird ein Integer übergeben, mein Fehler.
Schau mal https://github.com/micw/tibber-pulse-reader/blob/master/README.md#filtering-readings an zum Einheiten umwandeln.
Oh perfekt. Das probiere ich gleich einmal aus. Hab das Programm jetzt als Docker Dienst laufen und bisher läuft alles einwandfrei. Bekomme vernünftige Werte und vor allem kann ich die Daten im ioBroker verwerten.
Hmm. Jetzt bekomme ich wieder den Fehler d.w.t.source.TibberPulseHttpReader : Invalid response from tibber pulse gateway endpoint: HTTP/1.1 401 Unauthorized Das Node ist verbunden und Daten werden auch übertragen den Filter habe ich wie folgt gesetzt:
-e "PUBLISH_FILTERS=energyExportTotal=kWh"
Strange. Evtl. den username oder passwort parameter überschrieben?
Nein, habe ich gerade auf dem Webserver der Bridge überprüft, das passt noch alles....
Ich meinte beim Docker Command
docker run -it --rm -e "PUBLISH_FILTERS=energyExportTotal=kWh" -e "PUBLISH_MQTT_HOST=192.168.1.238" -e "PUBLISH_MQTT_TOPIC=grid/{nameOrObisCode}" -e "PUBLISH_MQTT_PAYLOAD={value}" -e "TIBBEPULSE_USERNAME=$
Wollte es gerade hier reinkopieren....hatte mir nen ShellScript erstellt und sehe gerade das da etwas fehlt und da steht auch TIBBEPULSE...ohne "R"..
Das ist Strange. Checke das eben
Mach das so im script:
docker run -it --rm \
-e "PUBLISH_FILTERS=energyExportTotal=kWh" \
-e "PUBLISH_MQTT_HOST=192.168.1.238" \
...
Du willst im Produktiv auch nicht mit -it --rm
starten, sondern mit -d --restart unless-stopped --name tibber-pulse-reader
.
Oder besser noch mit docker-compose.
Ja, das war ein Testscript, als Service läuft das mit --it --rm und der restart unless.. Option eh nicht. Der Filter spuckt im Moment aber noch energyExportTotal = 4247198.6 WATT_HOUR. aus
Im Script aktiviert via: -e "PUBLISH_FILTERS=energyExportTotal=kWh"
Sollte also eigentlich kWh sein
mit docker pull das neueste image gezogen?
Ja, gerade noch einmal gemacht: Image is up to date
Ich teste morgen nochmal
Tippfehler im Filter, sollte jetzt gehen
Das sieht schon viel besser aus! Klasse, danke. Ich teste weiter
Das Äquivalent zur importieren Energie sollte doch dann so aussehen oder ? -e "PUBLISH_FILTERS=energyImportTotal=kWh"
Da bekomme ich immer noch Wh angezeigt und nicht kWh
Ja, aber ein Parameter darf nur 1x angegeben werden. Du kannst aber mehrere Filter übergeben:
-e "PUBLISH_FILTERS=energyImportTotal=kWh energyExportTotal=kWh"
Oh mann... manchmal sind es die einfachen Dinge im Leben. Natürlich, das war's....sorry.
Hallo,
ich hänge mich hal hier dran, bekomme einen SML Parsing error
2023-03-18 17:27:21.115 DEBUG 1 --- [ main] de.wyraz.tibberpulse.sml.SMLDecoder : Parsing SML: 1b1b1b1b0101010176040000016200620072650000010176010107000005e370330b0a01484c59020005dc4b010163d7210076040000026200620072650000070177010b0a01484c59020005dc4b01017c77070100603201010101010104484c590177070100600100ff010101010b0a01484c59020005dc4b0177070100010800ff65000000046505e37033621e52ff6504c2bfcc0177070100020800ff65000000046505e37033621e52ff65002d3d840177070100100700ff0101621b520052000177070100200700ff0101622352ff63090301770701001f0700ff0101622152fe62000177070100510704ff010162085200620001770701000e0700ff0101622c52ff6301f30177070100000200000101010109322e30312e3030310177070100605a02010101010105303246340177070100600500ff01010101650000000401010163682f00760400000362006200726500000201710163e8230000001b1b1b1b1a021af2
2023-03-18 17:27:21.168 WARN 1 --- [ main] d.w.t.source.TibberPulseHttpReader : Unable to parse SML from response
Der SML-Parser meint, die Message ist fehlerhaft und steigt beim 1. Feld (energyImportTotal) aus, ohne dass ein Wert decodiert werden konnte. Entweder sendet der Zähler fehlerhafte Nachrichten oder der SML-Parser ist fehlerhaft. Letzteres kann ich nicht ausschließen, der Parser ist vom "OpenMuc" Projekt des Fraunhofer. Aus dem Projekt hatte ich schonmal einen OMS-Parser in der Hand, der war von katastrophal schlechter Qualität ^^
Leider kann ich da nicht weiterhelfen, da mir die Zeit fehlt, einen eigenen SML-Parser zu schreiben.
PS: ich schließe das Mega-Ticket hier mal, bitte macht eigene Tickets pro Bug auf.
/\ / ' () _ \ \ \ \ ( ( )__ | ' | '| | ' \/ _` | \ \ \ \ \/ _)| |)| | | | | || (| | ) ) ) ) ' |__| .|| ||| |\, | / / / / =========|_|==============|__/=//// ^[[32m :: Spring Boot :: ^[[39m ^[[2m (v2.5.14)^[[0;39m
^[[2m2023-03-12 08:32:14.716^[[0;39m ^[[32m INFO^[[0;39m ^[[35m1^[[0;39m ^[[2m---^[[0;39m ^[[2m[ main]^[[0;39m ^[[36mde.wyraz.tibberpulse.TibberPulseReader ^[[0;39m ^[[2m:^[[0;39m St$ ^[[2m2023-03-12 08:32:14.730^[[0;39m ^[[32m INFO^[[0;39m ^[[35m1^[[0;39m ^[[2m---^[[0;39m ^[[2m[ main]^[[0;39m ^[[36mde.wyraz.tibberpulse.TibberPulseReader ^[[0;39m ^[[2m:^[[0;39m No$ ^[[2m2023-03-12 08:32:17.129^[[0;39m ^[[33m WARN^[[0;39m ^[[35m1^[[0;39m ^[[2m---^[[0;39m ^[[2m[ main]^[[0;39m ^[[36ms.c.a.AnnotationConfigApplicationContext^[[0;39m ^[[2m:^[[0;39m Ex$ ^[[2m2023-03-12 08:32:17.149^[[0;39m ^[[32m INFO^[[0;39m ^[[35m1^[[0;39m ^[[2m---^[[0;39m ^[[2m[ main]^[[0;39m ^[[36mConditionEvaluationReportLoggingListener^[[0;39m ^[[2m:^[[0;39m
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ^[[2m2023-03-12 08:32:17.217^[[0;39m ^[[31mERROR^[[0;39m ^[[35m1^[[0;39m ^[[2m---^[[0;39m ^[[2m[ main]^[[0;39m ^[[36mo.s.boot.SpringApplication ^[[0;39m ^[[2m:^[[0;39m Ap$
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'meterDataHandler': Unsatisfied dependency expressed through field 'publishers'; nested exception$ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) ~[spring-bean$ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) ~[spring-beans-5.3.20.ja$ at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.20.jar!/:5.3$ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.20.jar!/:5.3.20] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.20.jar!/:5.3.20] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.20.jar!/:5.3.20] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780) ~[spring-boot-2.5.14.jar!/:2.5.14]