@@ -310,33 +310,32 @@ const futurehomeExtend = {
310310 type : [ "attributeReport" , "readResponse" ] ,
311311 convert : ( model , msg , publish , options , meta ) => {
312312 // const prev_session_energy = (msg.data.energyMeterNow - msg.data.energyMeterStart) / 1000;
313- if ( msg . data . energyMeterNow !== undefined && msg . data . energyMeterStart !== undefined ) {
314- const prev_session_energy = msg . data . energyMeterNow - msg . data . energyMeterStart ;
313+ // if (msg.data.energyMeterNow !== undefined && msg.data.energyMeterStart !== undefined) {
314+ // const prev_session_energy = msg.data.energyMeterNow - msg.data.energyMeterStart;
315+ // return {
316+ // previous_session_energy: prev_session_energy,
317+ // };
318+ // }
319+ let start = meta . state ?. energy_meter_start !== undefined ? meta . state . energy_meter_start : null ;
320+ let now = meta . state ?. energy_meter_now !== undefined ? meta . state . energy_meter_now : null ;
321+ if ( Object . hasOwn ( msg . data , "energyMeterStart" ) ) {
322+ start = msg . data . energyMeterStart / 1000 ;
323+ }
324+ if ( Object . hasOwn ( msg . data , "energyMeterNow" ) ) {
325+ now = msg . data . energyMeterNow / 1000 ;
326+ }
327+ if ( start !== null && now !== null ) {
328+ const consumed = ( now as number ) - ( start as number ) ;
315329 return {
316- previous_session_energy : prev_session_energy ,
330+ // toFixed(3) prevents floating-point precision issues in JavaScript (e.g., 0.300000000004)
331+ session_energy : Number . parseFloat ( consumed . toFixed ( 3 ) ) ,
317332 } ;
318333 }
334+ return ;
319335 } ,
320336 } satisfies Fz . Converter < "haApplianceControl" , FuturehomeHaApplianceControl , [ "attributeReport" , "readResponse" ] > ,
321337 ] ,
322- toZigbee : [
323- {
324- key : [ "prev_session_energy" ] ,
325- convertGet : async ( entity , key , meta ) => {
326- await entity . read < "haApplianceControl" , FuturehomeHaApplianceControl > ( "haApplianceControl" , [
327- "energyMeterNow" ,
328- "energyMeterStart" ,
329- ] ) ;
330- } ,
331- } satisfies Tz . Converter ,
332- ] ,
333- exposes : [
334- exposes
335- . numeric ( "previous_session_energy" , ea . STATE_GET )
336- . withLabel ( "Session energy" )
337- . withDescription ( "Previous session" )
338- . withUnit ( "kWh" ) ,
339- ] ,
338+ exposes : [ exposes . numeric ( "session_energy" , ea . STATE ) . withLabel ( "Session energy" ) . withDescription ( "Previous session" ) . withUnit ( "kWh" ) ] ,
340339 } ;
341340 } ,
342341} ;
0 commit comments