North-Q 9021

Hi all,
I’m searching the forum now for a while but can*t find a solution for my problem.
I got a Power Meter from NorthQ and managed to integrate it with OH2 and the zway Binding 2.2.0.
I also manged to set the config for the calculation values.

No the problems start-> I*m not receiving any values from the device. I found two hints in the docs.
1st: You have to set the “Times Parameters” because without the device will not wake up
2nd: You have to request the “Meter Table” because the device will not send the values on it’s own.

Now my questions:
Has anyone managed to get the device working?
How can I set the Times Parameters as they are not in the HabMin configuration?
How can I send the Meter Table request in zwave binding 2.2.0?
I found only examples for the binding version 1.1.0!

Would be great to get some hints!!:roll_eyes:

Thanks Chris

I have a NorthQ 9021, configured it via Habmin and it is working.
Sometimes it takes some hours after a system restart to send measurements.
You can manually trigger a transmission with the device button, I think - do you get a measurement with this?

Thanks for the Info!
Can you please tell me your item config and ruleset if you have one.
After initialization I get one Value, thats it so far.
If I press the button once I see a refresh in the log for the node but the value dosn’t change.
I heard that I have to request the value via a command, but couldn’t find any details.

br Chris

So here you are:

Items:

// #part# NQ-9021 Power/Energy meter für gesamtes Haus
Group     Energy_Chart                          
Group     Energy_Chart2
Group     Energy_Chart3                         
Number    House_total_Energy      "Hausverbrauch - Energie [%.2f kWh]"                <energy>  (Energy_Chart)   
Number    House_delta_Energy      "Hausverbrauch - DeltaEnergie [%.2f kWh]"           <energy>  (Energy_Chart2) 
Number    House_total_Power       "Hausverbrauch - Leistung [%.0f W]"                 <energy>  (Energy_Chart3) //calculated via script! 
Number    House_total_Battery     "Hausverbrauch Batterie [%d %%]"                    <battery> (gBattery)      
DateTime  House_total_Energy_LastUpdate "Letzte Aktualisierung [%1$td.%1$tm. %1$tH:%1$tM]" <clock>
Number    Energy_Chart_Period     "Zeitraum"                                            <chart>

Sitemap:

    Text item=House_total_Power
    {  
      Frame // House Energy
      {
        Text item=House_total_Power
        Text item=House_total_Energy
        Text item=House_delta_Energy
      
        Text item=House_total_Battery
        Text item=House_total_Energy_LastUpdate
      }

      Frame // House Energy Chart
      {
        Switch item=Energy_Chart_Period mappings=[0="Stunde", 1="Tag", 2="Woche"]
        Chart  item=Energy_Chart period=h refresh=6000  legend=true visibility=[Energy_Chart_Period==0, Energy_Chart_Period=="Uninitialized", Energy_Chart_Period==NULL]
        Chart  item=Energy_Chart period=D refresh=30000 legend=true visibility=[Energy_Chart_Period==1]
        Chart  item=Energy_Chart period=W refresh=30000 legend=true visibility=[Energy_Chart_Period==2]
      }
      Frame // House Power Chart
      {
        Chart  item=Energy_Chart3 period=h refresh=6000  legend=true visibility=[Energy_Chart_Period==0, Energy_Chart_Period=="Uninitialized", Energy_Chart_Period==NULL]
        Chart  item=Energy_Chart3 period=D refresh=30000 legend=true visibility=[Energy_Chart_Period==1]
        Chart  item=Energy_Chart3 period=W refresh=30000 legend=true visibility=[Energy_Chart_Period==2]
      }
      Frame // House Delta Energy Chart
      {
        Chart  item=Energy_Chart2 period=h refresh=6000  legend=true visibility=[Energy_Chart_Period==0, Energy_Chart_Period=="Uninitialized", Energy_Chart_Period==NULL]
        Chart  item=Energy_Chart2 period=D refresh=30000 legend=true visibility=[Energy_Chart_Period==1]
        Chart  item=Energy_Chart2 period=W refresh=30000 legend=true visibility=[Energy_Chart_Period==2]
      }
    } // end of Text item=House_total_Power

Rules:

// For House_total_Energy
var long EnergyLastUpdateTime = 0
// and the last energy
var double LastEnergy = 0.0

rule "Restores last Energy total House update time at system startup"
when
  System started
then
  if(House_total_Energy_LastUpdate.state != NULL)
    EnergyLastUpdateTime = (House_total_Energy_LastUpdate.state as DateTimeType).zonedDateTime.toInstant().toEpochMilli
  else
    // In case we have no last value to be restored
    EnergyLastUpdateTime = now.millis
  
  LastEnergy = (House_total_Energy.state as DecimalType).doubleValue()
  logInfo("EnergyLastUpdateTime", "House_total_Energy restored to " + String.format("%.3f", LastEnergy) + " kWh")
end

rule "Records last Energy total House and resulting Power"
when
  Item House_total_Energy received update
then
  if(SystemStarted_delayed.state == ON)
  {
    var double energy
    var double delta_energy
    var double power
    val actual_time_in_ms = now.millis
    
    val deltaTInMS = (actual_time_in_ms - EnergyLastUpdateTime) 
    
    EnergyLastUpdateTime = actual_time_in_ms

    // Do not calc power if 2 updates are < 3 secs apart
    if(deltaTInMS > 3000 || House_total_Energy_LastUpdate.state == NULL)
    {
      House_total_Energy_LastUpdate.postUpdate(new DateTimeType())
      energy = (House_total_Energy.state as DecimalType).doubleValue()

      logInfo("Energy Loginfo", "Total Energy update: LastEnergy  " + String.format("%.3f", LastEnergy) + " kWh")
      logInfo("Energy Loginfo", "Total Energy update: new energy  " + String.format("%.3f", energy) + " kWh")

      delta_energy = energy - LastEnergy

      if(delta_energy < 0)
      {
        delta_energy = 0
        logInfo("Energy Loginfo", "Total Energy update: delta_energy limited to " + String.format("%.3f", delta_energy) + " kWh")
      }
      else
        logInfo("Energy Loginfo", "Total Energy update: delta_energy " + String.format("%.3f", delta_energy) + " kWh")

      House_delta_Energy.postUpdate(delta_energy)
      logInfo("Energy Loginfo", "Total Energy update: deltaTInMS   " + deltaTInMS + " ms")

      power = (delta_energy * 1000 * 3600 * 1000 / deltaTInMS ) // kWh -> W
          
      logInfo("Energy Loginfo", "Total Energy update: power        " + String.format("%.3f", power) + " W")

      if(power > 5000)
      {
        power = 5000
        logInfo("Energy Loginfo", "Total Energy update: power limited to " + String.format("%.3f", power) + " W")
      }
      House_total_Power.postUpdate(power)
    } // if(deltaTInMS > 3000), Do not calc power if 2 updates are < 3 secs apart

    LastEnergy = (House_total_Energy.state as DecimalType).doubleValue()
  }
end

I have set the following parameters via Habmin:

  • pulse factor (1024 here, depending on your meter)
  • wakeup interval (900 for 15 min here - this is how often the devices sends data)

Good luck!
Michel

1 Like

My 9021 is not discovered correctly - did you do anything special?

No, nothing special, but I remember that I added it to the network near the Z-Wave controller, not in place with the energy meter. Did you wake it up several times via button to finish inclusion?

Update: Now my 9021 does not send any measurements any more.
There are several mains-powered z-wave wall-plugs nearby which could act as repeater, so zwave range should not be a problem.
I have removed the 9021 from the network and added it again, but now even the type is not discovered correctly…