maxatome / go-vitotrol

golang client library to Viessmann Vitotrol web service
https://godoc.org/github.com/maxatome/go-vitotrol
MIT License
23 stars 9 forks source link

not an issue, merely a request :-) #4

Closed MichelRabozee closed 6 years ago

MichelRabozee commented 6 years ago

Hello, nice project here ! I have however a question: in the web interface (https://vitodata100.viessmann.com/VD100/Service/Overview.aspx), I succeed to get the fuel consumption for my heating device, with which I make a graph - but currently, I need to manually go to the web portal-. Your application seems to work with my system (for instance, I can retrieve temperature data, etc.) but some other parameters seem to be absent from the API. How comes ? Is the web portal using a different API ? Is it then possible to adapt your tool ? Here is the parameters I get (sorry, in French, but quite readable). I put before "=>" the parameters I identified as recognised by your tool. It also seems that only one circuit is taken into account (I have 2 heating circuits on the same heater, A1 and M2): -Chaudière- OutdoorTemp => Température extérieure 10 °C BoilerTemp => Temp. chaudière 41 °C Consigne de temp. chaudière 37,2 °C InternalPumpStatus => POMPE INTERNE Marche BurnerState => BRULEUR allure 1 Arrêt Brûleur allure 2 Arrêt BurnerHoursRun => Heures fonctionnement brûleur all.1 6385,21 Heures Heures fonctionnement brûleur all.2 791,48 Heures BurnerStarts => Démarrages du brûleur 40074 Conso. combustible (litres ou m³) 8896,449 Liter -Circuit de chauffage A1- Mode de fonct. actuel A1M1 Mode normal Inversion externe du mode de fonct. A1M1 Arrêt HeatNormalTemp => Consigne de temp. amb. marche normale A1M1 19 °C Température de départ A1M1 41 °C HeatingPumpStatus => Pompe de circuit de chauffage A1M1 Marche PartyMode => Régime réceptions A1M1 Arrêt Régime éco. A1M1 Arrêt IndoorTemp => Température ambiante A1M1 21,1 °C FrostProtectionStatus => Risque de gel du circuit de chauffage A1M1 Inactif HolidaysStatus => Programme vacances A1M1 Inactif HolidaysStart => Jour départ en vacances A1M1 01/01/1970 HolidaysEnd => Jour retour de vacances A1M1 01/01/1970 Pente courbe de chauffe A1 1,2 Parallèle courbe de chauffe A1 0 K -Circuit de chauffage M2- Mode de fonct. actuel M2 Mode normal Inversion externe mode de fonct. M2 Arrêt Consigne de temp. amb. marche normale M2 21 °C Température de départ M2 29,5 °C POMPE CC M2 Marche Régime réceptions M2 Arrêt Régime éco. M2 Arrêt Température ambiante M2 21,1 °C Risque de gel du circuit de chauffage M2 Inactif Programme vacances M2 Inactif Jour départ en vacances M2 01/01/1970 Jour retour de vacances M2 01/01/1970 Pente courbe de chauffe M2 0,6 Parallèle courbe de chauffe M2 0 K -Eau chaude- Production d’ECS Charge inactive HotWaterTemp => Température ECS sonde de charge sonde confort 47,6 °C Pompe charge ECS Arrêt Flow-switch Arrêt Pompe de bouclage Marche

Do you think it is possible to access the missing parameters ?

Thank you beforehand, Michel

maxatome commented 6 years ago

Hi Michel,

I will add the handling of GetTypeInfo request to allow to list all attributes of an installation.

Then I will add 2 things to cmd/vitotrol:

I hope it will allow you to see the missing attribute, in the right device...

I hope you read german too :) coz no english or french here. HeatReducedTemp (aka. Température éco) attribute for example:

<DatenpunktTypInfo>
  <AnlageId>88888</AnlageId>
  <GeraetId>77777</GeraetId>
  <DatenpunktId>85</DatenpunktId>
  <DatenpunktName>konf_raumsolltemp_reduziert_rw</DatenpunktName>
  <DatenpunktTyp>Integer</DatenpunktTyp>
  <DatenpunktTypWert>0</DatenpunktTypWert>
  <MinimalWert>3</MinimalWert>
  <MaximalWert>37</MaximalWert>
  <DatenpunktGruppe>viessmann.eventtypegroupHC.name.VScotHO1_72~HC1</DatenpunktGruppe>
  <HeizkreisId>19179</HeizkreisId>
  <Auslieferungswert>3</Auslieferungswert>
  <IstLesbar>true</IstLesbar>
  <IstSchreibbar>true</IstSchreibbar>
</DatenpunktTypInfo>

If some attributes appears in your installation (but not in mine), I could integrate them in internal list. Or perhaps thinking of a more dynamic behavior to handle any attribute, of any type, but it is another story...

Finally, some attributes you listed are already available:

Or the reverse for last 2... Did not check...

maxatome commented 6 years ago

First step done 5fff5de5182385761adc6cc32d06820be191cc03

MichelRabozee commented 6 years ago

Thank you ! it will be great, let me know if I can do some testing for you for fine tuning.

German, I guess Google Translate + putting my Viessmann account in germanfor matching terminology will help me :-)

Regarding "BurnerHoursRun", I have 2 entries (Allure 1 and Allure 2 => BurnerHoursRun only retrieve "Allure 1" (1. Stufe, Stage 1) Heures fonctionnement brûleur all.1 6385,21 Heures Heures fonctionnement brûleur all.2 791,48 Heures

Regarding:

(I matched them with the ON/OFF states)

Michel

MichelRabozee commented 6 years ago

You are too fast :-) Btw, how do I trigger the new calls ? through the vitotrol built ?

In debug/verbose, I get this: Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol -verbose -debug get all 2017/11/04 18:06:48 <?xml version="1.0" encoding="utf-8"?>0Kein Fehler2.5.7.01MichelRabozée</soap:Body></soap:Envelope> 2017/11/04 18:06:50 <?xml version="1.0" encoding="utf-8"?>0Kein Fehler129867501926300151101-32682VT 200 (HO1A / HO1B)30518992viessmann.eventtypegroupHC.name.VPlusHO1_40~HC1true18993viessmann.eventtypegroupHC.name.VPlusHO1_40~HC2truetrueGWGVPlusHO1_40falsetruefalsetrue</soap:Body></soap:Envelope> Working with device VT 200 (HO1A / HO1B)@7501926300151101 2017/11/04 18:06:50 <?xml version="1.0" encoding="utf-8"?>0Kein Fehler129863268251502017-11-01 21:23:24129863268279202017-11-01 21:23:24129863268282192017-11-04 17:42:25129863268285152017-11-01 21:23:2412986326829222017-11-01 21:23:2412986326821046385.212017-11-01 21:23:241298632682111401952017-11-04 17:42:25129863268224512017-11-04 17:42:2512986326823061970-01-01 00:00:002017-11-04 17:42:2512986326823091970-01-01 00:00:002017-11-04 17:42:25129863268260002017-11-01 21:23:24129863268270822017-11-04 17:42:25129863268271402017-11-04 17:42:25129863268271702017-11-04 17:42:25129863268272912017-11-04 17:42:2512986326825367212017-11-04 17:42:251298632682537312.32017-11-04 17:42:2512986326825374442017-11-04 17:42:251298632682538149.12017-11-04 17:42:2512986326825382202017-11-04 17:42:25129863268253852017-11-01 18:38:012017-11-01 21:23:241298632682538902017-11-01 21:23:241298632682605247.52017-11-01 21:23:241298632682718112017-11-04 17:42:251298632682718400:00:00:00:00:00:00:00:00:002017-11-04 17:42:251298632682785202017-11-01 21:23:241298632682785502017-11-01 21:23:24</soap:Body></soap:Envelope> HolidaysEnd: 1970-01-01 00:00:00@2017-11-04 17:42:25 (Holidays end date) OutdoorTemp: 12.3@2017-11-04 17:42:25 (Outdoor temperature) HotWaterTemp: 49.1@2017-11-04 17:42:25 (Hot water temperature) DateTime: 2017-11-01 18:38:01@2017-11-01 21:23:24 (Current date and time) HolidaysStart: 1970-01-01 00:00:00@2017-11-04 17:42:25 (Holidays begin date) 3WayValveStatus: undefined@2017-11-01 21:23:24 (3-way valve status) OperatingModeRequested: heating+DHW@2017-11-01 21:23:24 (Operating mode requested) BoilerTemp: 44@2017-11-04 17:42:25 (Boiler temperature) BurnerState: off@2017-11-01 21:23:24 (Burner status) PartyMode: disabled@2017-11-01 21:23:24 (Party mode status) CurrentError: 00:00:00:00:00:00:00:00:00:00@2017-11-04 17:42:25 (Current error) BurnerHoursRun: 6385.21@2017-11-01 21:23:24 (Burner hours run) InternalPumpStatus: on@2017-11-04 17:42:25 (Internal pump status) HolidaysStatus: disabled@2017-11-04 17:42:25 (Holidays program status) CirculationPumpState: on@2017-11-04 17:42:25 (Statut pompe circulation) EnergySavingMode: disabled@2017-11-01 21:23:24 (Energy saving mode status) OperatingModeCurrent: normal@2017-11-04 17:42:25 (Operating mode) HeatingPumpStatus: on@2017-11-04 17:42:25 (Heating pump status) FrostProtectionStatus: disabled@2017-11-04 17:42:25 (Frost protection status) IndoorTemp: 21@2017-11-04 17:42:25 (Indoor temperature) HotWaterOutTemp: 20@2017-11-04 17:42:25 (Hot water outlet temperature) HeatNormalTemp: 19@2017-11-04 17:42:25 (Setpoint of the normal room temperature) BurnerHoursRunReset: uninitialized (Reset the burner hours run) BurnerStarts: 40195@2017-11-04 17:42:25 (Burner starts) HeatWaterOutTemp: 47.5@2017-11-01 21:23:24 (Heating water outlet temperature) PartyModeTemp: 20@2017-11-01 21:23:24 (Party mode temperature) HeatReducedTemp: 15@2017-11-01 21:23:24 (Setpoint of the reduced room temperature) HotWaterSetpointTemp: 50@2017-11-01 21:23:24 (Setpoint of the domestic hot water temperature)

maxatome commented 6 years ago

Now you can :)

vitotrol devices list your devices vitotrol -device DEVICE allows you to operate on device DEVICE (see -help for DEVICE format) vitotrol [-device DEVICE] remote_attrs list all server side attributes (go format)

MichelRabozee commented 6 years ago

Wow :-) Vous êtes un chef :-)

So, I got the list, I put it raw here (I will try to map things (to extract the one you do not have), but it will take some time, and I am exhausted (work in garden is heavier than in the "normal" work life :-) ).

Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol devices Index 0 LocationName (LocationID): 7501926300151101 (12986) DeviceName (DeviceID): VT 200 (HO1A / HO1B) (32682) HasError: false IsConnected: true

Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol -device 0 remote_attrs

MichelRabozee commented 6 years ago

Hello,

It is strange that I cannot match the "fuel consumption" ("Brennstoffverbrauch (Liter oder m³)") to any of the gathered attributes.

I tried to get for instance the value of attribute "anzahl_brennerstunden_2_r" but I guess I do not use the correct syntax: Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol -device 0 get "anzahl_brennerstunden_2_r" *** unknown attribute `anzahl_brennerstunden_2_r'

It seems also important to be able to choose the "HeatingCircuitID". For instance, "zustand_partybetrieb_r" appears twice, one for A1M1 (0x4a30), one for M2 (0x4a31)

I attach an xls file with my investigations. Vitodata-attributes.xlsx

maxatome commented 6 years ago

Hi Michel,

I just upload changes that allow you to get an attribute using its ID (which is uniq), check AttributeID value when using remote_attrs. So no need to use HeatingCircuitID.

For example:

vitotrol get 0x1c0b

as 0x1c0b is a unknown attribute, vitotrol will issue a GetTypeInfo request to check whether this attribute exists remotely or not, then it will get its value as for a known attribute (© last commit.)

In your zustand_partybetrieb_r case the two AttributeID are 0x4d and 0x4c.

Thanks for your investigations. :)

I have to think of a full dynamic way of attributes handling. Probably by doing a GetTypeInfo request the first time then caching its result in $HOME/.vitotrol/LocationID-DeviceID.json or yml for future calls.

Tell me if this change helps you to go forward...

MichelRabozee commented 6 years ago

Hello,

it is really outstanding ! Thank you, yes it retrieves perfectly the values.

Is there a way to do a refresh on the values which are not known to the initial list ? a "vitotrol rget all" does not update all the attributes values on the server (like the double green arrows on top right do. See attached screen, in bold the values which are updated after "rget all". rget-all And I am still struggling to get the fuel consumption :-(

MichelRabozee commented 6 years ago

I have seen maybe something which shows that the Attribute ID may not be so unique: Same name & Attribute ID but different Circuit ID

ATTR ID NAME                DataPointGroup                      HeatingCircuitID
0x1c17  "konf_schaltzeiten_hk_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~HC1"   0x4a30
0x1c18  "konf_schaltzeiten_ww_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~HC1"   0x4a30
0x1c19  "konf_schaltzeiten_zp_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~HC1"   0x4a30
0x1c1a  "konf_schaltzeiten_hk_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~HC2"   0x4a31
0x1c18  "konf_schaltzeiten_ww_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~WW"    0x4a34
0x1c19  "konf_schaltzeiten_zp_rw"   "viessmann.eventtypegroupHC.name.VPlusHO1_40~WW"    0x4a34

(they are the only ones like that)

Do you think if I just loop on all possible Attribute ID value I may end up finding the Fuel Consumption one ? Even if it does not show with "remote_attrs" ?

(and rget with a 0Xxxx attribute does trick to refresh and get new value \o/ )

maxatome commented 6 years ago

Hmm it's weird because to get the value of an attribute we only pass its ID, see GetData request.

If the attribute does not appear in remote_attrs list vitotrol won't be able to get it... :(

Do you have tried to get all remote_attrs listed attributes?

maxatome commented 6 years ago

And yes, (r)get all does not handle remote_attrs attributes. I will add it.

maxatome commented 6 years ago

Added with e83ee9a9c3572fad77bce8e3b549a65feda1ec0f

MichelRabozee commented 6 years ago

(r)get all works !!

Regarding "get all remote_attrs listed attributes" => Yes, I performed (I have 71 listed attributes): declare -a arr=("0x63" "0x6f" "0x381" "0x1045" "0x14fc" "0x14fd" "0x14fe" "0x1509" "0x1c10" "0x2d5a" "0x33" "0x4f" "0x52" "0x55" "0x132" "0x135" "0xb35" "0xb3b" "0x14f7" "0x33" "0x50" "0x53" "0x56" "0x133" "0x136" "0xb37" "0xb3d" "0x1500" "0x17a5" "0x3b5" "0x1505" "0x1c17" "0x1c18" "0x1c19" "0x1c1a" "0x1c18" "0x1c19" "0xf5" "0x258" "0x321" "0x361" "0x3de" "0x1c67" "0x2a2c" "0x2a2d" "0x2a30" "0x4c" "0x58" "0x5c" "0x10e" "0x2c4" "0x2ca" "0x2cd" "0x2d9" "0x1eac" "0x1eaf" "0x1f33" "0x4d" "0x59" "0x5e" "0x10f" "0x2c5" "0x2cb" "0x2ce" "0x2da" "0x1ead" "0x1eb0" "0x14a0" "0x1c0b" "0x1c0d" "0x2a09") for i in "${arr[@]}"; do ./vitotrol get $i >> results_all_remote_attributes.txt; done

=> result is: anzahl_brennerstunden_r-0x0063: 6400.33@2017-11-04 17:42:25 (anzahl_brennerstunden_r) BurnerStarts: 40342@2017-11-07 18:28:39 (Burner starts) info_fehlerbyte_gfa_r-0x0381: 0@2017-10-10 11:01:27 (info_fehlerbyte_gfa_r) info_brenner_modulation_r-0x1045: 0@2017-10-10 11:01:27 (info_brenner_modulation_r) temp_agt_r-0x14fc: uninitialized (temp_agt_r) OutdoorTemp: 5@2017-11-07 18:28:39 (Outdoor temperature) BoilerTemp: 36@2017-11-07 18:28:39 (Boiler temperature) DateTime: 2017-11-07 16:39:12@2017-11-07 19:24:35 (Current date and time) CurrentError: 00:00:00:00:00:00:00:00:00:00@2017-11-07 18:28:39 (Current error) anzahl_brennerstunden_2_r-0x2d5a: 793.37@2017-11-04 17:42:25 (anzahl_brennerstunden_2_r) HotWaterSetpointTemp: 50@2017-11-07 18:28:39 (Setpoint of the domestic hot water temperature) PartyModeTemp: 20@2017-11-07 18:28:39 (Party mode temperature) HeatNormalTemp: 19@2017-11-07 18:28:39 (Setpoint of the normal room temperature) HeatReducedTemp: 15@2017-11-07 18:28:39 (Setpoint of the reduced room temperature) HolidaysStart: 1970-01-01 00:00:00@2017-11-07 18:28:39 (Holidays begin date) HolidaysEnd: 1970-01-01 00:00:00@2017-11-07 18:28:39 (Holidays end date) konf_neigung_rw-0x0b35: 1.2@2017-10-10 11:01:27 (konf_neigung_rw) konf_niveau_rw-0x0b3b: 0@2017-10-10 11:01:27 (konf_niveau_rw) IndoorTemp: 20.1@2017-11-07 18:28:39 (Indoor temperature) HotWaterSetpointTemp: 50@2017-11-07 18:28:39 (Setpoint of the domestic hot water temperature) konf_partysolltemp_rw-0x0050: 20@2017-10-10 11:01:27 (konf_partysolltemp_rw) konf_raumsolltemp_rw-0x0053: 21@2017-11-04 17:42:25 (konf_raumsolltemp_rw) konf_raumsolltemp_reduziert_rw-0x0056: 16@2017-10-10 11:01:27 (konf_raumsolltemp_reduziert_rw) konf_ferien_start_rw-0x0133: 1970-01-01 00:00:00@2017-11-04 17:42:25 (konf_ferien_start_rw) konf_ferien_ende_rw-0x0136: 1970-01-01 00:00:00@2017-11-04 17:42:25 (konf_ferien_ende_rw) konf_neigung_rw-0x0b37: 0.6@2017-10-10 11:01:27 (konf_neigung_rw) konf_niveau_rw-0x0b3d: 0@2017-10-10 11:01:27 (konf_niveau_rw) temp_rts_r-0x1500: 21@2017-11-04 17:42:25 (temp_rts_r) temp_vts_r-0x17a5: 29.5@2017-11-04 17:42:25 (temp_vts_r) konf_ww_solltemp_2_rw-0x03b5: 0@2017-10-10 11:01:27 (konf_ww_solltemp_2_rw) HotWaterTemp: 50.2@2017-11-07 18:28:39 (Hot water temperature) InternalPumpStatus: on@2017-11-07 18:28:39 (Internal pump status) BurnerState: on@2017-11-07 18:28:39 (Burner status) konf_heizungsschema_r-0x0321: 6 A1 + M2 + WW@2017-10-10 11:01:27 (konf_heizungsschema_r) zustand_wartung_rw-0x0361: aktiv@2017-10-10 11:01:27 (zustand_wartung_rw) konf_fehlermanager_rw-0x03de: 1 Fehlermanager@2016-01-05 18:58:08 (konf_fehlermanager_rw) konf_solarregler_r-0x1c67: 0 ohne@2017-10-10 11:01:27 (konf_solarregler_r) info_status_rts_1_r-0x2a2c: OK@2017-10-10 11:01:27 (info_status_rts_1_r) info_status_rts_2_r-0x2a2d: OK@2017-10-10 11:01:27 (info_status_rts_2_r) info_status_rts_3_r-0x2a30: unbekannt@2017-10-10 11:01:27 (info_status_rts_3_r) zustand_partybetrieb_r-0x004c: Aus@2017-11-04 17:42:25 (zustand_partybetrieb_r) zustand_sparbetrieb_r-0x0058: Aus@2017-11-04 17:42:25 (zustand_sparbetrieb_r) OperatingModeRequested: heating+DHW@2017-11-07 18:28:39 (Operating mode requested) externe_umschaltung_ba_r-0x010e: Aus@2017-11-04 17:42:25 (externe_umschaltung_ba_r) OperatingModeCurrent: normal@2017-11-07 18:28:39 (Operating mode) HolidaysStatus: disabled@2017-11-07 18:28:39 (Holidays program status) FrostProtectionStatus: disabled@2017-11-07 18:28:39 (Frost protection status) HeatingPumpStatus: on@2017-11-07 18:28:39 (Heating pump status) EnergySavingMode: disabled@2017-11-07 18:28:39 (Energy saving mode status) PartyMode: disabled@2017-11-07 18:28:39 (Party mode status) info_kennung_hk1_r-0x1f33: Direkter Kreis@2017-10-10 11:01:27 (info_kennung_hk1_r) zustand_partybetrieb_r-0x004d: Aus@2017-11-07 19:31:15 (zustand_partybetrieb_r) zustand_sparbetrieb_r-0x0059: Aus@2017-11-04 17:42:25 (zustand_sparbetrieb_r) konf_betriebsart_rw-0x005e: Heizen + WW@2017-10-10 11:01:27 (konf_betriebsart_rw) externe_umschaltung_ba_r-0x010f: Aus@2017-11-04 17:42:25 (externe_umschaltung_ba_r) aktuelle_betriebsart_r-0x02c5: Normalbetrieb@2017-11-04 17:42:25 (aktuelle_betriebsart_r) zustand_ferienprogramm_r-0x02cb: inaktiv@2017-11-04 17:42:25 (zustand_ferienprogramm_r) zustand_frostgefahr_r-0x02ce: inaktiv@2017-11-04 17:42:25 (zustand_frostgefahr_r) zustand_heizkreispumpe_r-0x02da: Ein@2017-10-10 11:01:27 (zustand_heizkreispumpe_r) konf_sparbetrieb_rw-0x1ead: Aus@2017-10-10 11:01:27 (konf_sparbetrieb_rw) konf_partybetrieb_rw-0x1eb0: Aus@2017-10-10 11:01:27 (konf_partybetrieb_rw) zustand_speicherladepumpe_r-0x14a0: Aus@2017-11-04 17:42:25 (zustand_speicherladepumpe_r) info_ww_charging_active_r-0x1c0b: Ladung inaktiv@2017-11-04 17:42:25 (info_ww_charging_active_r) CirculationPumpState: on@2017-11-07 18:28:39 (Statut pompe circulation) info_sensorstatus_ww_r-0x2a09: OK@2017-10-10 11:01:27 (info_sensorstatus_ww_r)

And none of them seem to hold the consumption (8926,152 Liter). Very strange, isn't it ? This seems to be out of reach (sadly, this is the one I use most - it is very precise and allows me to know when to order fuel :-) - unless there are other methods to get such attributes.

For instance, those 5 attributes are coming back from your initial "get all", but they are not retrieved when I use one by one the remote_attrs values: HeatWaterOutTemp: 36@2017-11-07 18:28:39 (Heating water outlet temperature) BurnerHoursRun: 6419.87@2017-11-07 18:28:39 (Burner hours run) HotWaterOutTemp: 20@2017-11-07 18:28:39 (Hot water outlet temperature) 3WayValveStatus: undefined@2017-11-07 18:28:39 (3-way valve status) BurnerHoursRunReset: uninitialized (Reset the burner hours run)

Therefore maybe the consumption is not seen either as a "remote attribute" ?

And those we were speaking previously retrieve an error: 0x1c18 -> unknown attribute `0x1c18' 0x1c19 -> unknown attribute 0x1c19' 0x1c1a -> *** unknown attribute0x1c1a' 0x1c18 -> unknown attribute `0x1c18' 0x1c19 -> unknown attribute `0x1c19'

MichelRabozee commented 6 years ago

Correction: "rget all" works mostly :-)

In the attached screen, the values not in bold were not refreshed, even if they are accessible, for instance: 0x2da zustand_heizkreispumpe_r (Pompe de chauffe M2, HeatingPumpStatus) 0xb35 and 0xb37 konf_neigung_rw (Pente courbe de chauffe, Heating curve slope) 0xb3b and 0xb3d konf_niveau_rw (Parallèle courbe de chauffe, Heating curve level)

Others are updated, while I do not find an attribute ID for them, for instance: Flow temperature A1M1 | Vorlauftemperatur A1M1

rget-all

maxatome commented 6 years ago

Interesting...

I just added a new bget action that allow you to request an attribute value using its index without checking the validity of the index.

You can check any attribute this way:

vitotrol bget 0x1234 7895 ...
MichelRabozee commented 6 years ago

Thank you, I will run this on all possible values, and come back with the results.

Regarding the strange ones above, they give ./vitotrol bget 0x1c17 0x1c18 0x1c19 0x1c1a 0x1c17: uninitialized () 0x1c18: uninitialized () 0x1c19: uninitialized () 0x1c1a: uninitialized ()

I get "uninitialized ()" for most values between 0 and 0x3000, but already some results which are not listed with remote-attrs: for instance: Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol get 1 *** unknown attribute `1' Michel-MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol bget 1 0x0001: 1@2017-02-27 19:04:36 ()

Strange isn't it ? :-)

maxatome commented 6 years ago

Hi Michel,

When you get: 0x1c17: uninitialized () it means that this attribute does not exist on server side.

When you get: 0x0001: 1@2017-02-27 19:04:36 () it means that this attribute exists on server side (but not known by vitotrol command, otherwise the name of the attribute would have replaced its index), has the value 1 since 2017-02-27 19:04:36.

Note that you can bget up to 2100 attributes in one call (server limit: Der Server unterstützt maximal 2100 Parameter). To list all initialized attributes, you can try:

(for i in `seq 0 2000 64000`; do
     vitotrol bget `seq $i $(($i + 1999))`
 done;
 vitotrol bget `seq 64000 65535`) | fgrep -v uninitialized | tee result.txt

It is a bit looooong... :)

maxatome commented 6 years ago

With a22c524cdd62f70490589eb37b4388a1ce3707bb bget action now pre-load all declared attributes, as get do when "all" or an unknown attribute index is given. This allows to see the remote name of attributes, when available of course...

MichelRabozee commented 6 years ago

\o/ I finally got the Fuel consumption attribute: ./vitotrol bget 0x108d 0x108d: 9012.045@2017-11-11 08:53:12 ()

I guess last request: how can I refresh that attribute ? rget does not go through. ./vitotrol rget 0x108d *** unknown attribute `0x108d'

Thank you so much !!

maxatome commented 6 years ago

Cool :)

0ac057231ccd12fe2493e20ca10651826b40eaf7 adds new "rbget" action...

./vitotrol rbget 0x108d

should works now.

MichelRabozee commented 6 years ago

Excellent !! MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol bget 0x108d 0x108d: 9012.045@2017-11-11 08:53:12 () MacBook-Pro:Go-Vitotrol mrabozee$ ./vitotrol rbget 0x108d 0x108d: 9077.791@2017-11-15 22:02:55 ()

MichelRabozee commented 6 years ago

Hello, first of all, best wishes for 2018 ! Have a lot of fun and happiness, everyone !

-- EDIT 13:55: the call seems to go through again, do not bother !! --

Sorry to bother you again, now that everything was perfect, from this morning, the refresh (through roget) does not seem to work anymore :-( Do you have any idea what can cause this ? Did Viessmann blocked something ? (the update works if I go to the site portal). I do not always (see further) receive any kind of error, it just takes a loooong time (I guess some sort of time out) then retrieve the already stored value, not a refreshed one. Only some of the times, there is some feedback like this: 2018/01/11 09:39:04 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:05 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:06 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:07 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:08 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:09 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:10 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:11 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:12 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:13 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:14 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:15 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:16 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:17 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:18 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:19 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:20 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:21 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:23 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:24 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:25 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:26 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:27 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:28 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:29 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:30 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:31 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:32 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:33 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:34 waitAsyncStatus(50405308): status 9, wait 1 secs... 2018/01/11 09:39:35 waitAsyncStatus(50405308): status 9, wait 1 secs...

maxatome commented 6 years ago

Hi Michel, Happy new year to you too. Yes it is a bug I encountered a few weeks ago. I already corrected it. Please update your sources to the last commit and test again.

MichelRabozee commented 6 years ago

Thank you Maxime, I have updated, will monitor the results !