-
-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Timer processing in RC310 #1594
Comments
Oh, the heating timer for RC300 are 0x1C3-ff, and 0x349-ff. with mode instead of temperature setting. We have to split RC300 - RC310 - BC400. But product-id 158 includes RC300 and RC310, maybe second identifier (unknown). But as mentioned in the lot of discussions before, i don't know how we get that much data in ram and mqtt. |
For the holiday modes check #275. Same problem with a lot of entities. The RC35 is dfferent, it's also 42 entries, but each has day, time, mode stored, We can set all 42 to monday, or 1.entry to Tu, second to monday, 3rd not set, 4th to mo, etc. The RC3x0 have groups with 6 entries for mo, 6 for tu, etc. To index them makes no sense, or count 0-5 for each day. Don't know how to manage. Im thinking of store the raw telegram and generate a program json on api command (and maybe as own mqtt topic). We need to modify the api to forward the json to command. For web page this also can not be an entity in the thermostat section, it need a own editor page. |
what shall we do here @MichaelDvP ? |
I don't have these features on my thermostat so not sure how to proceed. I'll remove this issue from the backlog. |
I am using a Buderus gas boiler with RC310 thermostat and 2 heating circuits I can decode 4 switchTimes per hc. For dhw there are 2 switchPrograms: The heating circuits can be set to use levels (eco/comfort) or absolute temps per switchTime. The switch is done by the entity hcx/switchprogmode for each heating circuit between levels and absolute (temps). switchProgram A: hc1 telegrams level/temps are: 01C3 / 0583 and hc2: 01C4 / 0584 Within #1934 long custom entities in raw are now realized and could be used to maintain the long 84 bytes telegrams. Since quite some time I implemented this in my ioBroker adapter in read/write mode creating the same JSON-objects as the original km200 gateway does. But I needed to implement the right timing for getting the long telegrams and writing them back. |
Each switchProgram has 6 switchTimes per day, 42 switchTimes per week combined with 42 values. |
@tp1de Please use the ems-esp notation for telegram-types. e.g. 0x2FF for dhw1. Thanks. Can you confirm the value order: switchtime 1/2 is selected by program, 0x2B9, offset 11 We can read the whole telegram in ram and generate a json on API command. for RC300 i think the json should look
For commands we can use the same json structure ans json object in value field. But i have no idea
We need a complete concept before starting to code. |
EMS+ and EMS2.0 switchPrograms (For me RC310 and Moduline 2050) 1st step is to select the right telegram type defined by reading the new entities switchprogmodes. hc1 - Mode A level 02C3 and absolute temps 0683 (A == program(1)) hc2 - Mode A level 02C4 and absolute temps 0684 (A == program(1)) dhw1 - Mode A 02FF Each telegram has a length of 84 bytes: Telegram structure of one day looks like this with 2 active switchpoints: P1: time of 1st sp: unit 15 minutes --> 0x14 = 20 *15 = 300 minutes = 05:00 hours P2 are either levels or absolute temps depending on type. Valid for hc and dhw: Levels: "FF": "on" / "03": "comfort" / "02": "high" / "01": "eco/low" / "00": "off" |
km200 API JSON uses time in minutes: |
Within ioBroker I write times: |
I think we do not need the index 01, 02 etc ... in JSON Important: Any change in switchprogmode will require to re-read different telegram type for hc switchprogram. |
The API version with JSON will deliver the similar data object compared to the original Bosch API. At the end JSON structure is not nice to manipulate - neither in ioBroker nor in HA. |
Ah, ok, first time, second mode. (RC35 have reverse order).
If it is not ordered and we want to skip all unset points, we need the number to edit/delete a position. Or we always have to publish/write all unset values.
Does this affect all? Is it really possible to set a cirulation pump to "comfort", or heatingscircuit to "on"?
Again: is there a limit? Is it possible to set temp to 3 (1.5°C) or 0xFF (127,5°C)? Or can we use the number to show mode for FF, 3, 2, 1, 0 and temp for all other values. |
I have never seen non-ordered telegrams. An index is not necessary and is not used within original Bosch API
I do always publish a full day if changed (12 bytes including unset points) - So max 7 telegrams
Decoding for reading telegram is as defined. But possible enum values for writing are:
Minimum temp is 5°C (off) and maximum is 30°C - the same for manual hc values. Only used for absolute temp telegrams. |
Upps, added the missing register/fetch for the telegrams in 3.7.0-test32 |
I implemented a prototype to manage EMS2.0 and EMS+ switchPrograms within Home Assistant using the HACS Scheduler compoment and Node-Red. This solution uses raw hex telegrams send / read by MQTT. It works fine, but was quite tricky for my RC310 thermostat. I wrote a document about my findings during this process and some analysis I have done on my original Bosch / Buderus gateway. |
I've updated the test build https://github.com/MichaelDvP/EMS-ESP32/releases/tag/test
the switchtime1/2 depends on setting of hc1/switchprogmode. I have not tested writing yet, the implementation is to send a single time in one command as json: Also mqtt is not implemented. I think of an extra topic |
I installed your testbuild. 1st test (read) is ok. Writing should be per day with up to 6 switchTimes. How do you indicate otherwise deleted switchTimes? ... and may I repeat my recommandation to name the entities switchprograms. The switchtimes are the times to switch within... |
Ok
Does not work with RC20, RC30 and RC35 where day is coded and can be anywhere in the 42 data, Then i have to write all 42 at once.
Reading: values are ignored, writing with
We have translated word I've updated, setting should work now. |
I think it's fixed now (bin will be generated in about 10 minutes), reading the new program should be a bit faster, but still we have to wait for next telegram. I use only one buffer for the program to save memory. |
I do not see any changes in respect to timing. It still takes 2 cycles until mode changes are seen. Updating non int values on "Absolute" mode is working now without error messages but no update takes place. |
I think I found what causes the problem: While updating thermostat_switchprograms I send data for 5 days (workdays), 2 days (weekend) or 7 days for (daily). I still have my node-red workflow requesting and sending raw telegrams. While sending I send telegrams per day. I tested the behavior while changing the switchProgram with the MyBuderus app using the km200 gateway. While copying the values from one day to all other 6 days there are 3 telegrams send (2 days within one telegram). The delay is approx 400 msec between the telegrams send. |
I've updated to a logic to readback the part after bus write before rend the next part. Maybe this gives the delay needed. |
Yes it it is working for mode changes (next cycle) . Still not for changes of program (2 cycles)
Updates still do not work reliable. Approx 30-40% without errors (Last Tx write rejected by host) and the rest have 1 to 3 errors while updating 5 days. |
I tested again with my raw telegram version.
I get for some tx writes error messages in log like "Last Tx write host reply: 0xB0" with different hex values. |
Updated with 400ms delay between sending telegrams with same type-id. Please check. |
The reply should be OK (01) or REJECTED (04), other values are not known. |
I did extensive tests with more then 100 updates on switchprograms on my heating system. At the end the update of switchprograms is not reliable since there is a chance of having 1-2 days not updated. I do not see any difference between km200 ems-esp initiated commands towards thermostat. Maybe you can see the difference? The gateway intializes non used switchTimes with "FF FF" while we are using "03 FF". I tested both versions on my raw version. This does not have any effect on the tx write errors. I have no idea what to do else ...... |
Difficult, there are two commands withing a few ms, Why? So i can't see what was rejected, what executet.
|
This because of MyBuderus app logic. First you can change the schedule of one selected day and then saving it. Than copying to all other days.
I have done it - the rejected days are not written |
I tested -test.10 version with changing workdays (MO-FR) - 5 days are 3 telegrams. |
Oh, fixed the delay now.
The error is not from that telegram sent 22 sec before. Also does not look like a read. Please send complete logs to see the context. Snipplets are mostly not usefull. |
With 1 second delay the number of tx write errors are a bit lower but there is no general change. |
Hello, Hallo, |
You need to install the latest test version from Michael . |
@proddy @MichaelDvP I recommend to release the switchPrograms to dev version. The tx write errors which happen sometimes are not related to switchPrograms. #2273 |
ok. we would need some documentation too on how to use it and it's limitations. not everyone will use HA and NodeRed |
Would be great to see this feature added! Using exact temperatures you need to also define the "Absenkschwelle" under which temperature nightmode / reduced mode will be activated. This value is also missing right now in EMS-ESP, but if you plan to include the timing settings you will also need to be able to set this value (if you use "exact temperatures", not 2-level temperatures). |
The "Absenkschwelle" is defined in hcx reducetemp. |
On my side, using a RC310 im not able to set the "Absenkschwelle" using 2-Level Mode, only while using absolute mode. Also i do not have the "reducetemp" entity... The value set on "Absenkschwelle" tells the switchprogram under which value defined in the program reducetemp / reduce mode should be active. For example if i set Absenkschwelle to 17°C i can define a absolute switchprogram starting at 8pm to 16°C then starting at 8pm heating will be go into reducemode (or will be off, depending on the setting) because 16°C is lower then 17°C defined in Absenkschwelle... |
You are not using the hc controlmode depending on outside temp, isn't it? "reducetemp" and " noreducetemp" define outside temps for hc controls. |
I do use with outdoortempsensor and with room-influence. German: Stelle ich im Zeitprogramm eine frei wählbare Temperatur unterhalb der definierten Absenkschwelle ein, geht die Heizung ab dieser Zeit in den "Nacht/Absenkbetrieb". Oberhalb der Schwelle läuft sie ganz normal weiter. Thermostat_RC310_RC3*0, Moduline 3000_1010H, CW400, Sense II, HPC410.csv English CSV export: |
Yes, this is what i wanted to know. But it makes sense, if the switchprogram functionality will be added to also add the "Absenkschwelle" because it is needed for the absolute switchprogram. |
So richtig verstehe ich deine Regelungsparameter nicht. Ich habe einen RC310 mit Außentemperatur-geführter Regelung mit Raumeinfluss und benutze Levels. Dann kann ich mit reducetemp die Außentemperaturschwelle setzen unter der der Absenkbetrieb aktiviert ist und mit noreducetemp die Schwelle wo durchgeheizt wird. Ich bin aber aktuell nicht zuhause um zu testen. P.S.: |
Genau, an der Dämmung sind wir dran :-).. anderes Thema... Wir verwechseln hier die Parameter, es gibt nämlich insgesamt drei:
Die Absenkschwelle, die ich meine, wird nämlich im Bedienermenü Heizung -> Absenkschwelle eingestellt und ist nur sichtbar, wenn auf "frei einstellbare Temperatur" gestellt wurde. Bei dem 2-Temperatur-Niveau wird diese nicht benötigt, da ich da im Zeitprogramm einfach nur sage wann "Tagbetrieb" und wann "Nacht/reduzierter" Betrieb. In der Print-Variante des Handbuchs steht folgendes (in der Online-Anleitung wurde der Absatz leider anders beschrieben): Sorry for writing in german... complicated topic :D |
I added a new GH issue for the missing entity: #2288 |
Discussed in #1593
Originally posted by Nxtway January 30, 2024
ems-esp supports timer processing of the RC35, #979
Could these functionality also implemented for the RC310, please ?
The type-id's in RC310 are:
circulation timer: thermostat(0x10) type(0x0309) | ON - FF | OFF - 00
warm water timer: thermostat(0x10) type(0x02FF) | COMFORT - 02 | ECO - 01 | OFF - ??, maybe 00
heating timer 1: thermostat(0x10) type(0x0683)
heating timer 2 thermostat(0x10) type(0x068D)
Log files attached:
WW_timer.txt
circulation_timer.txt
heating_timer1.txt
heating_timer2.txt
An additional improvement might be the holiday timer, but I didn't find the type-id up to now.
The text was updated successfully, but these errors were encountered: