-
|
Please help me / point me in the right direction to add support for VBus protocol reading. (Resol controllers for standard solar thermal systems) Configuration output here:
8:36:23.668 MQT: stat/tasmota_75E634/RESULT = {"NAME":"Generic","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
18:36:23.895 MQT: stat/tasmota_75E634/RESULT = {"Module":{"18":"Generic"}}
18:36:24.148 MQT: stat/tasmota_75E634/RESULT = {"GPIO0":{"0":"None"},"GPIO1":{"0":"None"},"GPIO2":{"0":"None"},"GPIO3":{"0":"None"},"GPIO4":{"0":"None"},"GPIO5":{"0":"None"},"GPIO9":{"0":"None"},"GPIO10":{"0":"None"},"GPIO12":{"0":"None"},"GPIO13":{"0":"None"},"GPIO14":{"0":"None"},"GPIO15":{"0":"None"},"GPIO16":{"0":"None"},"GPIO17":{"0":"None"}} STATUS 0 output here:
18:37:03.138 MQT: stat/tasmota_75E634/STATUS = {"Status":{"Module":18,"DeviceName":"Tasmota","FriendlyName":["Tasmota"],"Topic":"tasmota_75E634","ButtonTopic":"0","Power":0,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0}}
18:37:03.146 MQT: stat/tasmota_75E634/STATUS1 = {"StatusPRM":{"Baudrate":9600,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz","RestartReason":"External System","Uptime":"0T00:57:51","StartupUTC":"2021-02-15T16:39:12","Sleep":50,"CfgHolder":4617,"BootCount":2,"BCResetTime":"2021-02-13T21:41:59","SaveCount":10,"SaveAddress":"FA000"}}
18:37:03.155 MQT: stat/tasmota_75E634/STATUS2 = {"StatusFWR":{"Version":"9.2.0.7(tasmota)","BuildDateTime":"2021-02-13T21:21:28","Boot":31,"Core":"2_7_4_9","SDK":"2.2.2-dev(38a443e)","CpuFrequency":80,"Hardware":"ESP8266EX","CR":"405/699"}}
18:37:03.163 MQT: stat/tasmota_75E634/STATUS3 = {"StatusLOG":{"SerialLog":0,"WebLog":2,"MqttLog":0,"SysLog":0,"LogHost":"","LogPort":514,"SSId":["ZACUT",""],"TelePeriod":300,"Resolution":"558180C0","SetOption":["00408009","2805C8000100060000005A0A000000000000","00000080","00006000","00000000"]}}
18:37:03.176 MQT: stat/tasmota_75E634/STATUS4 = {"StatusMEM":{"ProgramSize":592,"Free":408,"Heap":24,"ProgramFlashSize":4096,"FlashSize":4096,"FlashChipId":"164020","FlashFrequency":40,"FlashMode":3,"Features":["00000809","8FDAC787","04368001","000000CF","010013C0","C000F981","00004004","00001000","00000000"],"Drivers":"1,2,3,4,5,6,7,8,9,10,12,16,18,19,20,21,22,24,26,27,29,30,35,37,45","Sensors":"1,2,3,4,5,6"}}
18:37:03.186 MQT: stat/tasmota_75E634/STATUS5 = {"StatusNET":{"Hostname":"tasmota_75E634-1588","IPAddress":"192.168.1.206","Gateway":"192.168.1.254","Subnetmask":"255.255.255.0","DNSServer":"192.168.1.254","Mac":"50:02:91:75:E6:34","Webserver":2,"WifiConfig":4,"WifiPower":17.0}}
18:37:03.193 MQT: stat/tasmota_75E634/STATUS6 = {"StatusMQT":{"MqttHost":"192.168.1.250","MqttPort":1883,"MqttClientMask":"DVES_%06X","MqttClient":"DVES_75E634","MqttUser":"user","MqttCount":1,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30}}
18:37:03.202 MQT: stat/tasmota_75E634/STATUS7 = {"StatusTIM":{"UTC":"2021-02-15T17:37:03","Local":"2021-02-15T18:37:03","StartDST":"2021-03-28T02:00:00","EndDST":"2021-10-31T03:00:00","Timezone":"+01:00","Sunrise":"06:47","Sunset":"17:05"}}
18:37:03.211 MQT: stat/tasmota_75E634/STATUS10 = {"StatusSNS":{"Time":"2021-02-15T18:37:03"}}
18:37:03.218 MQT: stat/tasmota_75E634/STATUS11 = {"StatusSTS":{"Time":"2021-02-15T18:37:03","Uptime":"0T00:57:51","UptimeSec":3471,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"ZACUT","BSSId":"F0:9F:C2:A4:3B:1C","Channel":3,"RSSI":46,"Signal":-77,"LinkCount":1,"Downtime":"0T00:00:04"}}}
Sample data output here:
18:36:36.651 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:36.770 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:37.635 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:37.792 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:38.816 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:39.843 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:40.703 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:40.916 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:41.941 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:42.751 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:42.931 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:43.987 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:44.800 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:45.016 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:46.043 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:47.018 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:47.875 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:48.042 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:49.059 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:50.153 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:50.945 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:51.111 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:52.133 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:53.206 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:54.025 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:54.232 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:55.258 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:56.284 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:57.093 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"�!B�
18:36:57.256 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:58.331 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:36:59.359 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:37:00.378 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}
18:37:01.404 MQT: tele/tasmota_75E634/RESULT = {"SerialReceived":"!B �w"}Connecting the Resol BS Plus controller data output to a Wemos D1 Mini RX port is done using a level-shifter circut (see diagram below). Baudrate is 9600, protocol is 8N1. The connection works correctly as data is being received, it only needs to be decoded appropriately. I've found several projects on this: Is it possible to import the code of any of the above into Tasmota so we can integrate Resol units into the ecosystem? |
Beta Was this translation helpful? Give feedback.
Replies: 27 comments 114 replies
-
Beta Was this translation helpful? Give feedback.
-
|
Maybe this could be done with Smart Meter driver instead? |
Beta Was this translation helpful? Give feedback.
-
|
with your script and both raw samples i have everything works like expected. |
Beta Was this translation helpful? Give feedback.
-
|
none of these set however in my samples 1,AA100021421000010774vo15ub@b0:1,CollMax,,co1,0 |
Beta Was this translation helpful? Give feedback.
-
|
Meanwhile for the docs, some questions: |
Beta Was this translation helpful? Give feedback.
-
|
info: if the checksum fails 0xffffffff is returned per septet that means 65535 for a word. can it be that your serial connection is faulty ? |
Beta Was this translation helpful? Give feedback.
-
|
ok the syntax if very error intolerant, the '2' after ub leeds to these lines not setting the valid flag, so missing 2 lines in total 1,AA100021421000010774vo8ub2@b0:1,R1 PUMP,,relay1,0 i will think on how to improve this |
Beta Was this translation helpful? Give feedback.
-
|
There's an issue decoding bits for the pumps. If, just for fun, I replace b with w, I do get strange values (0 and 2048), but at least there's no invalid MQTT: |
Beta Was this translation helpful? Give feedback.
-
|
this vo8ub2 is a syntax error and causes the descriptor to skip one line which also leads to missing MQTT the Relay mask is at offset 10 so probably this may work 1,AA100021421000010774vo10ub@b0:1,R1 PUMP,,relay1,0 |
Beta Was this translation helpful? Give feedback.
-
|
Meanwhile preparing to update documentation. Please check if everything is correct. If missing something, post here and I'll update the table, and then submit a PR.
|
Beta Was this translation helpful? Give feedback.
-
|
just to prove that offset 10 is correct look at the example from above, the last 2 items fetch the relay bits 0 and 1 from offset 10 cat raw.log | ./a.out -f rrdvals -c 1 0,15,0.1 2,15,0.1 4,15,0.1 6,15,0.1 8,7,1 9,7,1 20,16,1,p 22,16,1000,p 24,16,1000000 12,16,0,t 10,1,0 10,1,1 |
Beta Was this translation helpful? Give feedback.
-
|
Meanwhile, for the docs: Do you have an idea on how could somebody reconstruct the |
Beta Was this translation helpful? Give feedback.
-
|
No "aa" for me: |
Beta Was this translation helpful? Give feedback.
-
|
Please check table now if description is correct or not. Tried to explain for dummies :) |
Beta Was this translation helpful? Give feedback.
-
|
I have tested vbus serial data and looks like tasmota always read same header, with arduino sketch I read correct values from Resol device, this is my log when dump: And this is my script: Tasmota device dont show any value in WebUI. |
Beta Was this translation helpful? Give feedback.
-
|
@gemu2015 and @nagyrobi many thanks. I forgot to #define SML_REPLACE_VARS before compile firmware. Now I can read the values in WebUI and they are correct. I have just 1 sensor connected for testing (a potentiometer): |
Beta Was this translation helpful? Give feedback.
-
|
It not possible to compile firmware with USE_RULES enabled to publish MQTT directy in domoticz using a rule like this? It will not work? |
Beta Was this translation helpful? Give feedback.
-
|
ok, i will check. Thank you |
Beta Was this translation helpful? Give feedback.
-
|
@gemu2015 good morning, I have a new deltasol controller, I have dumped it using command sensor53 d1 and I get 2 usefull addresses including AA. With r="1,AA100011221000010a21" I get temperatures, relays R1-R2 states, time, etc... I could use these 2 addresses at the same time to extract the information from the script? This is the dump: 08:03:46.347 RSL: tele/tasmota_4CCA08/SENSOR = {"Time":"2021-10-22T08:03:46","ANALOG":{"A0":4},"DS18B20":{"Id":"03139779F412","Temperature":22.9},"Solar":{"p1":422,"sens1":12.6,"sens2":48.1,"sens3":58.2,"sens4":21.5,"pump1":0,"relay1":4451,"pump2":0,"relay2":36,"relay2":0},"TempUnit":"C"} Kind regards |
Beta Was this translation helpful? Give feedback.
-
|
@19Andy89 hello, here it is: Kind regards |
Beta Was this translation helpful? Give feedback.
-
|
@gemu2015 It looks like negative temperatures are not decoded correctly: |
Beta Was this translation helpful? Give feedback.
-
|
%r%vo0uw@10,S1 COL,°C,S1,1 is defined as uw = unsigned word try signed word %r%vo0sw@10,S1 COL,°C,S1,1 |
Beta Was this translation helpful? Give feedback.
-
|
Yes, that is the document I am looking for…
THANK YOU!!!
this helps!!
d
… On Jul 13, 2022, at 8:19 AM, javalin ***@***.***> wrote:
WHERE, do I find all of those result values that would correspond to my specific meter - DeltaSol BS
From what I remember, a few years ago, Daniel Wippermann (resol) published offsets for most controllers, but now I can't find that information, you'll have to do trial and error. In my case these are my offsets
// Frame info for the Resol DeltaSol CS Plus
// check VBusprotocol specification for other products
// This library is made for the Resol DeltaSol CS Plus (0x2211)
//Offset Mask Name Factor Unit
//0 Temperature S1 1.0 °C
//1 Temperature S1 256.0 °C
//2 Temperature S2 1.0 °C
//3 Temperature S2 256.0 °C
//4 Temperature S3 1.0 °C
//5 Temperature S3 256.0 °C
//6 Temperature S4 1.0 °C
//7 Temperature S4 256.0 °C
//8 Pump Speed R1 1 %
//10 Operating Hours R1 1 h
//11 Operating Hours R1 256 h
//12 Pump Speed R2 1 %
//14 Operating Hours R2 1 h
//15 Operating Hours R2 256 h
//16 UnitType 1
//17 System 1
//20 1 Sensor 1 defekt 1
//20 2 Sensor 2 defekt 1
//20 4 Sensor 3 defekt 1
//20 8 Sensor 4 defekt 1
//20 Error Mask 1
//20 Error Mask 256
//22 Time 1
//23 Time 256
//24 Statusmask 1
//25 Statusmask 256
//26 Statusmask 65536
//27 Statusmask 16777216
//28 Heat Quantity 1 Wh
//29 Heat Quantity 256 Wh
//30 Heat Quantity 65536 Wh
//31 Heat Quantity 16777216 Wh
//32 SW-Version 0.01
//33 SW-Version 2.56
//
// Each frame has 6 bytes, FLength
// byte 1 to 4 are data bytes -> MSB of each bytes
// byte 5 is a septet and contains MSB of bytes 1 to 4, FSeptet
// byte 6 is a checksum
// FOffset 10, Offset start of Frames
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.
|
Beta Was this translation helpful? Give feedback.
-
|
DId anybody already do it for a Deltasol BX Plus? |
Beta Was this translation helpful? Give feedback.
-
|
Hello together, after having some struggles with a "Deltasol BX", some remarks from my side esp. wrt to the description in https://tasmota.github.io/docs/Smart-Meter-Interface/#meter-metrics
So this is how I'd recommend to proceeded with vbus:
Result for now: What's not really working is extraction of "time", and R1 is always "0%" even if the pump is turned on on mains (230V); so the real pump function only is representated by "pump1" (that's a pump with pwm functionality, R1 could also be configured for "230V-pwm" pumps. R3 in my case is used to control a valve switching heat exchanger between lower and upper level of the buffering tank. My interface is just using an optocoupler, similar to what can be found in https://www.thomas-wedemeyer.de/de/making/solarregler/ (no diodes, as polarity isn't really a problem) . So if there's someone with an idea how to get "time" (and/or "date") working: feel free... |
Beta Was this translation helpful? Give feedback.
-
|
Maybe try ESPHome: https://esphome.io/components/vbus.html |
Beta Was this translation helpful? Give feedback.
-
|
hi, first of all sorry for reactivating this thread. I'm not sure if the hardware part is all right. I don't seem to see data coming in. I think the hardware part is fine (checked for short circuits, and reviewed all connections). Do you know a way how I could test that part? thanks |
Beta Was this translation helpful? Give feedback.








Maybe this could be done with Smart Meter driver instead?