[APP][Pro] Homewizard 🧙‍♂️

Solcast demands an API key and has a ratelimit of 5 (?) calls a day.
Idea I have is to be API key independent, sure quality of the data might be better (Solcast) but still its only an estimate where open meteo / weather etc are already giving a good aim if there is enough solar production to charge the battery and take those datapoints up for calculation.

Installed latest version (test) and it works.

Thanks a lot!!!

1 Like

Pushed v3.14.7(test/beta).

  • Solar graph added with estimate production (make sure your system is added in the settings Wp)
  • Energy socket interval restored with minimum of 2s (default 10s when adding a new socket).
  • Azimuth and angle added for better graph plotting
  • Expected kW added per hour in planning
  • Performance tracking energy_socket fetch calls

Solved, your status indicator showed ‘Battery Level %’ in small tiles while I had configured it to display ‘Battery’. I’ve updated it to ‘Battery Level %,’ and now the big tiles no longer show any duplicate entries.

1 Like

Hi,

Since a couple of weeks the homewizard P1 meter values are stuck in Homey after a couple days working correctly. In Homewizard app they still work. To fix it I first need to disable “local api” option in Homewizard app and then enable it again. Then values are immediately updated again in Homey for a couple of days and then they are stuck again. P1 meter gets a fixed IP address through my router.

Sounds like some strange wifi problem. My app works or doesnt work.
Not like it works for a few days and then stops. That is definitely some network issue locally (mdns?).

In app settings of my app you find debug tabs (fetch) to see why Homey is unable to get connection with your P1 when it stops.

Hi, I have found a new (unreleased) HomeWizard device, including pictures and data model in the HomeWizard Energy mobile app. Maybe you can add support for the device before it’s released? The data model for the Thermo/Hygrometer seems to be in the ThermohygroMeterState:

package nl.homewizard.android.wifidevices.wifidevices.models.device.thermohygrometer;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.firebase.messaging.Constants;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import java.util.List;
import kotlin.Metadata;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import nl.homewizard.android.wifidevices.wifidevices.models.base.WiFiDeviceState;
import nl.homewizard.android.wifidevices.wifidevices.protocols.state.WiFiDeviceBatteryLevel;
import nl.homewizard.android.wifidevices.wifidevices.protocols.state.WithBatteryLevel;

/* JADX INFO: compiled from: ThermohygrometerState.kt */
/* JADX INFO: loaded from: classes7.dex */
@Metadata(d1 = {"\u0000X\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0006\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0002\b>\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\b\u0086\b\u0018\u00002\u00020\u00012\u00020\u0002B\u009b\u0001\u0012\n\b\u0003\u0010\u0003\u001a\u0004\u0018\u00010\u0004\u0012\n\b\u0003\u0010\u0005\u001a\u0004\u0018\u00010\u0004\u0012\n\b\u0003\u0010\u0006\u001a\u0004\u0018\u00010\u0007\u0012\n\b\u0003\u0010\b\u001a\u0004\u0018\u00010\u0007\u0012\n\b\u0003\u0010\t\u001a\u0004\u0018\u00010\u0007\u0012\b\b\u0003\u0010\n\u001a\u00020\u000b\u0012\n\b\u0003\u0010\f\u001a\u0004\u0018\u00010\r\u0012\n\b\u0003\u0010\u000e\u001a\u0004\u0018\u00010\u0007\u0012\n\b\u0003\u0010\u000f\u001a\u0004\u0018\u00010\u0010\u0012\n\b\u0003\u0010\u0011\u001a\u0004\u0018\u00010\u0012\u0012\n\b\u0003\u0010\u0013\u001a\u0004\u0018\u00010\u0014\u0012\u0010\b\u0003\u0010\u0015\u001a\n\u0012\u0004\u0012\u00020\u0017\u0018\u00010\u0016¢\u0006\u0004\b\u0018\u0010\u0019J\b\u0010E\u001a\u00020\u0001H\u0016J\u0010\u0010F\u001a\u0004\u0018\u00010\u0004HÆ\u0003¢\u0006\u0002\u0010\u001bJ\u0010\u0010G\u001a\u0004\u0018\u00010\u0004HÆ\u0003¢\u0006\u0002\u0010\u001bJ\u0010\u0010H\u001a\u0004\u0018\u00010\u0007HÆ\u0003¢\u0006\u0002\u0010\"J\u0010\u0010I\u001a\u0004\u0018\u00010\u0007HÆ\u0003¢\u0006\u0002\u0010\"J\u0010\u0010J\u001a\u0004\u0018\u00010\u0007HÆ\u0003¢\u0006\u0002\u0010\"J\t\u0010K\u001a\u00020\u000bHÆ\u0003J\u000b\u0010L\u001a\u0004\u0018\u00010\rHÆ\u0003J\u0010\u0010M\u001a\u0004\u0018\u00010\u0007HÆ\u0003¢\u0006\u0002\u0010\"J\u0010\u0010N\u001a\u0004\u0018\u00010\u0010HÆ\u0003¢\u0006\u0002\u00105J\u000b\u0010O\u001a\u0004\u0018\u00010\u0012HÆ\u0003J\u000b\u0010P\u001a\u0004\u0018\u00010\u0014HÆ\u0003J\u0011\u0010Q\u001a\n\u0012\u0004\u0012\u00020\u0017\u0018\u00010\u0016HÆ\u0003J¢\u0001\u0010R\u001a\u00020\u00002\n\b\u0003\u0010\u0003\u001a\u0004\u0018\u00010\u00042\n\b\u0003\u0010\u0005\u001a\u0004\u0018\u00010\u00042\n\b\u0003\u0010\u0006\u001a\u0004\u0018\u00010\u00072\n\b\u0003\u0010\b\u001a\u0004\u0018\u00010\u00072\n\b\u0003\u0010\t\u001a\u0004\u0018\u00010\u00072\b\b\u0003\u0010\n\u001a\u00020\u000b2\n\b\u0003\u0010\f\u001a\u0004\u0018\u00010\r2\n\b\u0003\u0010\u000e\u001a\u0004\u0018\u00010\u00072\n\b\u0003\u0010\u000f\u001a\u0004\u0018\u00010\u00102\n\b\u0003\u0010\u0011\u001a\u0004\u0018\u00010\u00122\n\b\u0003\u0010\u0013\u001a\u0004\u0018\u00010\u00142\u0010\b\u0003\u0010\u0015\u001a\n\u0012\u0004\u0012\u00020\u0017\u0018\u00010\u0016HÆ\u0001¢\u0006\u0002\u0010SJ\u0013\u0010T\u001a\u00020\u00102\b\u0010U\u001a\u0004\u0018\u00010VHÖ\u0003J\t\u0010W\u001a\u00020\u0007HÖ\u0001J\t\u0010X\u001a\u00020YHÖ\u0001R\u001e\u0010\u0003\u001a\u0004\u0018\u00010\u0004X\u0086\u000e¢\u0006\u0010\n\u0002\u0010\u001e\u001a\u0004\b\u001a\u0010\u001b\"\u0004\b\u001c\u0010\u001dR\u001e\u0010\u0005\u001a\u0004\u0018\u00010\u0004X\u0086\u000e¢\u0006\u0010\n\u0002\u0010\u001e\u001a\u0004\b\u001f\u0010\u001b\"\u0004\b \u0010\u001dR\u001e\u0010\u0006\u001a\u0004\u0018\u00010\u0007X\u0086\u000e¢\u0006\u0010\n\u0002\u0010%\u001a\u0004\b!\u0010\"\"\u0004\b#\u0010$R\u001e\u0010\b\u001a\u0004\u0018\u00010\u0007X\u0086\u000e¢\u0006\u0010\n\u0002\u0010%\u001a\u0004\b&\u0010\"\"\u0004\b'\u0010$R\u001e\u0010\t\u001a\u0004\u0018\u00010\u0007X\u0086\u000e¢\u0006\u0010\n\u0002\u0010%\u001a\u0004\b(\u0010\"\"\u0004\b)\u0010$R\u001a\u0010\n\u001a\u00020\u000bX\u0096\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b*\u0010+\"\u0004\b,\u0010-R\u001c\u0010\f\u001a\u0004\u0018\u00010\rX\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b.\u0010/\"\u0004\b0\u00101R\u001e\u0010\u000e\u001a\u0004\u0018\u00010\u0007X\u0086\u000e¢\u0006\u0010\n\u0002\u0010%\u001a\u0004\b2\u0010\"\"\u0004\b3\u0010$R\u001e\u0010\u000f\u001a\u0004\u0018\u00010\u0010X\u0086\u000e¢\u0006\u0010\n\u0002\u00108\u001a\u0004\b4\u00105\"\u0004\b6\u00107R\u001c\u0010\u0011\u001a\u0004\u0018\u00010\u0012X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b9\u0010:\"\u0004\b;\u0010<R\u001c\u0010\u0013\u001a\u0004\u0018\u00010\u0014X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b=\u0010>\"\u0004\b?\u0010@R\"\u0010\u0015\u001a\n\u0012\u0004\u0012\u00020\u0017\u0018\u00010\u0016X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\bA\u0010B\"\u0004\bC\u0010D¨\u0006Z"}, d2 = {"Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroMeterState;", "Lnl/homewizard/android/wifidevices/wifidevices/models/base/WiFiDeviceState;", "Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WithBatteryLevel;", "temperature", "", "humidity", "temperatureThreshold", "", "humidityThreshold", "sleepTime", "batteryLevel", "Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WiFiDeviceBatteryLevel;", "chargingState", "Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroChargingState;", "chargingPercentage", "cooldown", "", "displaySetting", "Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroDisplaySetting;", "supportControl", "Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;", "errors", "", "Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroError;", "<init>", "(Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WiFiDeviceBatteryLevel;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroChargingState;Ljava/lang/Integer;Ljava/lang/Boolean;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroDisplaySetting;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;Ljava/util/List;)V", "getTemperature", "()Ljava/lang/Double;", "setTemperature", "(Ljava/lang/Double;)V", "Ljava/lang/Double;", "getHumidity", "setHumidity", "getTemperatureThreshold", "()Ljava/lang/Integer;", "setTemperatureThreshold", "(Ljava/lang/Integer;)V", "Ljava/lang/Integer;", "getHumidityThreshold", "setHumidityThreshold", "getSleepTime", "setSleepTime", "getBatteryLevel", "()Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WiFiDeviceBatteryLevel;", "setBatteryLevel", "(Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WiFiDeviceBatteryLevel;)V", "getChargingState", "()Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroChargingState;", "setChargingState", "(Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroChargingState;)V", "getChargingPercentage", "setChargingPercentage", "getCooldown", "()Ljava/lang/Boolean;", "setCooldown", "(Ljava/lang/Boolean;)V", "Ljava/lang/Boolean;", "getDisplaySetting", "()Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroDisplaySetting;", "setDisplaySetting", "(Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroDisplaySetting;)V", "getSupportControl", "()Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;", "setSupportControl", "(Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;)V", "getErrors", "()Ljava/util/List;", "setErrors", "(Ljava/util/List;)V", "clone", "component1", "component2", "component3", "component4", "component5", "component6", "component7", "component8", "component9", "component10", "component11", "component12", "copy", "(Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Lnl/homewizard/android/wifidevices/wifidevices/protocols/state/WiFiDeviceBatteryLevel;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroChargingState;Ljava/lang/Integer;Ljava/lang/Boolean;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroDisplaySetting;Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;Ljava/util/List;)Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroMeterState;", "equals", "other", "", "hashCode", "toString", "", "wifi-devices_release"}, k = 1, mv = {2, 2, 0}, xi = 48)
public final /* data */ class ThermohygroMeterState implements WiFiDeviceState, WithBatteryLevel {
    private WiFiDeviceBatteryLevel batteryLevel;
    private Integer chargingPercentage;
    private ThermohygroChargingState chargingState;
    private Boolean cooldown;
    private ThermohygroDisplaySetting displaySetting;
    private List<? extends ThermohygroError> errors;
    private Double humidity;
    private Integer humidityThreshold;
    private Integer sleepTime;
    private ThermohygroSupportControl supportControl;
    private Double temperature;
    private Integer temperatureThreshold;

    public ThermohygroMeterState() {
        this(null, null, null, null, null, null, null, null, null, null, null, null, 4095, null);
    }

    /* JADX WARN: Multi-variable type inference failed */
    public static /* synthetic */ ThermohygroMeterState copy$default(ThermohygroMeterState thermohygroMeterState, Double d, Double d2, Integer num, Integer num2, Integer num3, WiFiDeviceBatteryLevel wiFiDeviceBatteryLevel, ThermohygroChargingState thermohygroChargingState, Integer num4, Boolean bool, ThermohygroDisplaySetting thermohygroDisplaySetting, ThermohygroSupportControl thermohygroSupportControl, List list, int i, Object obj) {
        if ((i & 1) != 0) {
            d = thermohygroMeterState.temperature;
        }
        if ((i & 2) != 0) {
            d2 = thermohygroMeterState.humidity;
        }
        if ((i & 4) != 0) {
            num = thermohygroMeterState.temperatureThreshold;
        }
        if ((i & 8) != 0) {
            num2 = thermohygroMeterState.humidityThreshold;
        }
        if ((i & 16) != 0) {
            num3 = thermohygroMeterState.sleepTime;
        }
        if ((i & 32) != 0) {
            wiFiDeviceBatteryLevel = thermohygroMeterState.batteryLevel;
        }
        if ((i & 64) != 0) {
            thermohygroChargingState = thermohygroMeterState.chargingState;
        }
        if ((i & 128) != 0) {
            num4 = thermohygroMeterState.chargingPercentage;
        }
        if ((i & 256) != 0) {
            bool = thermohygroMeterState.cooldown;
        }
        if ((i & 512) != 0) {
            thermohygroDisplaySetting = thermohygroMeterState.displaySetting;
        }
        if ((i & 1024) != 0) {
            thermohygroSupportControl = thermohygroMeterState.supportControl;
        }
        if ((i & 2048) != 0) {
            list = thermohygroMeterState.errors;
        }
        ThermohygroSupportControl thermohygroSupportControl2 = thermohygroSupportControl;
        List list2 = list;
        Boolean bool2 = bool;
        ThermohygroDisplaySetting thermohygroDisplaySetting2 = thermohygroDisplaySetting;
        ThermohygroChargingState thermohygroChargingState2 = thermohygroChargingState;
        Integer num5 = num4;
        Integer num6 = num3;
        WiFiDeviceBatteryLevel wiFiDeviceBatteryLevel2 = wiFiDeviceBatteryLevel;
        return thermohygroMeterState.copy(d, d2, num, num2, num6, wiFiDeviceBatteryLevel2, thermohygroChargingState2, num5, bool2, thermohygroDisplaySetting2, thermohygroSupportControl2, list2);
    }

    /* JADX INFO: renamed from: component1, reason: from getter */
    public final Double getTemperature() {
        return this.temperature;
    }

    /* JADX INFO: renamed from: component10, reason: from getter */
    public final ThermohygroDisplaySetting getDisplaySetting() {
        return this.displaySetting;
    }

    /* JADX INFO: renamed from: component11, reason: from getter */
    public final ThermohygroSupportControl getSupportControl() {
        return this.supportControl;
    }

    public final List<ThermohygroError> component12() {
        return this.errors;
    }

    /* JADX INFO: renamed from: component2, reason: from getter */
    public final Double getHumidity() {
        return this.humidity;
    }

    /* JADX INFO: renamed from: component3, reason: from getter */
    public final Integer getTemperatureThreshold() {
        return this.temperatureThreshold;
    }

    /* JADX INFO: renamed from: component4, reason: from getter */
    public final Integer getHumidityThreshold() {
        return this.humidityThreshold;
    }

    /* JADX INFO: renamed from: component5, reason: from getter */
    public final Integer getSleepTime() {
        return this.sleepTime;
    }

    /* JADX INFO: renamed from: component6, reason: from getter */
    public final WiFiDeviceBatteryLevel getBatteryLevel() {
        return this.batteryLevel;
    }

    /* JADX INFO: renamed from: component7, reason: from getter */
    public final ThermohygroChargingState getChargingState() {
        return this.chargingState;
    }

    /* JADX INFO: renamed from: component8, reason: from getter */
    public final Integer getChargingPercentage() {
        return this.chargingPercentage;
    }

    /* JADX INFO: renamed from: component9, reason: from getter */
    public final Boolean getCooldown() {
        return this.cooldown;
    }

    public final ThermohygroMeterState copy(@JsonProperty("active_temperature_ext_c") Double temperature, @JsonProperty("active_humidity_pct") Double humidity, @JsonProperty("temperature_threshold_c") Integer temperatureThreshold, @JsonProperty("humidity_threshold_pct") Integer humidityThreshold, @JsonProperty("batch_send_interval_m") Integer sleepTime, @JsonProperty("battery") WiFiDeviceBatteryLevel batteryLevel, @JsonProperty("charging_state") ThermohygroChargingState chargingState, @JsonProperty("charging_percentage_pct") Integer chargingPercentage, @JsonProperty("cooldown") Boolean cooldown, @JsonProperty(Constants.ScionAnalytics.MessageType.DISPLAY_NOTIFICATION) ThermohygroDisplaySetting displaySetting, @JsonProperty("support_controls") ThermohygroSupportControl supportControl, @JsonProperty("error") List<? extends ThermohygroError> errors) {
        Intrinsics.checkNotNullParameter(batteryLevel, "batteryLevel");
        return new ThermohygroMeterState(temperature, humidity, temperatureThreshold, humidityThreshold, sleepTime, batteryLevel, chargingState, chargingPercentage, cooldown, displaySetting, supportControl, errors);
    }

    @Override // nl.homewizard.android.wifidevices.wifidevices.models.base.WiFiDeviceState
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (!(other instanceof ThermohygroMeterState)) {
            return false;
        }
        ThermohygroMeterState thermohygroMeterState = (ThermohygroMeterState) other;
        return Intrinsics.areEqual((Object) this.temperature, (Object) thermohygroMeterState.temperature) && Intrinsics.areEqual((Object) this.humidity, (Object) thermohygroMeterState.humidity) && Intrinsics.areEqual(this.temperatureThreshold, thermohygroMeterState.temperatureThreshold) && Intrinsics.areEqual(this.humidityThreshold, thermohygroMeterState.humidityThreshold) && Intrinsics.areEqual(this.sleepTime, thermohygroMeterState.sleepTime) && this.batteryLevel == thermohygroMeterState.batteryLevel && this.chargingState == thermohygroMeterState.chargingState && Intrinsics.areEqual(this.chargingPercentage, thermohygroMeterState.chargingPercentage) && Intrinsics.areEqual(this.cooldown, thermohygroMeterState.cooldown) && this.displaySetting == thermohygroMeterState.displaySetting && this.supportControl == thermohygroMeterState.supportControl && Intrinsics.areEqual(this.errors, thermohygroMeterState.errors);
    }

    public int hashCode() {
        Double d = this.temperature;
        int iHashCode = (d == null ? 0 : d.hashCode()) * 31;
        Double d2 = this.humidity;
        int iHashCode2 = (iHashCode + (d2 == null ? 0 : d2.hashCode())) * 31;
        Integer num = this.temperatureThreshold;
        int iHashCode3 = (iHashCode2 + (num == null ? 0 : num.hashCode())) * 31;
        Integer num2 = this.humidityThreshold;
        int iHashCode4 = (iHashCode3 + (num2 == null ? 0 : num2.hashCode())) * 31;
        Integer num3 = this.sleepTime;
        int iHashCode5 = (((iHashCode4 + (num3 == null ? 0 : num3.hashCode())) * 31) + this.batteryLevel.hashCode()) * 31;
        ThermohygroChargingState thermohygroChargingState = this.chargingState;
        int iHashCode6 = (iHashCode5 + (thermohygroChargingState == null ? 0 : thermohygroChargingState.hashCode())) * 31;
        Integer num4 = this.chargingPercentage;
        int iHashCode7 = (iHashCode6 + (num4 == null ? 0 : num4.hashCode())) * 31;
        Boolean bool = this.cooldown;
        int iHashCode8 = (iHashCode7 + (bool == null ? 0 : bool.hashCode())) * 31;
        ThermohygroDisplaySetting thermohygroDisplaySetting = this.displaySetting;
        int iHashCode9 = (iHashCode8 + (thermohygroDisplaySetting == null ? 0 : thermohygroDisplaySetting.hashCode())) * 31;
        ThermohygroSupportControl thermohygroSupportControl = this.supportControl;
        int iHashCode10 = (iHashCode9 + (thermohygroSupportControl == null ? 0 : thermohygroSupportControl.hashCode())) * 31;
        List<? extends ThermohygroError> list = this.errors;
        return iHashCode10 + (list != null ? list.hashCode() : 0);
    }

    public String toString() {
        StringBuilder sb = new StringBuilder("ThermohygroMeterState(temperature=");
        sb.append(this.temperature).append(", humidity=").append(this.humidity).append(", temperatureThreshold=").append(this.temperatureThreshold).append(", humidityThreshold=").append(this.humidityThreshold).append(", sleepTime=").append(this.sleepTime).append(", batteryLevel=").append(this.batteryLevel).append(", chargingState=").append(this.chargingState).append(", chargingPercentage=").append(this.chargingPercentage).append(", cooldown=").append(this.cooldown).append(", displaySetting=").append(this.displaySetting).append(", supportControl=").append(this.supportControl).append(", errors=");
        sb.append(this.errors).append(')');
        return sb.toString();
    }

    public ThermohygroMeterState(@JsonProperty("active_temperature_ext_c") Double d, @JsonProperty("active_humidity_pct") Double d2, @JsonProperty("temperature_threshold_c") Integer num, @JsonProperty("humidity_threshold_pct") Integer num2, @JsonProperty("batch_send_interval_m") Integer num3, @JsonProperty("battery") WiFiDeviceBatteryLevel batteryLevel, @JsonProperty("charging_state") ThermohygroChargingState thermohygroChargingState, @JsonProperty("charging_percentage_pct") Integer num4, @JsonProperty("cooldown") Boolean bool, @JsonProperty(Constants.ScionAnalytics.MessageType.DISPLAY_NOTIFICATION) ThermohygroDisplaySetting thermohygroDisplaySetting, @JsonProperty("support_controls") ThermohygroSupportControl thermohygroSupportControl, @JsonProperty("error") List<? extends ThermohygroError> list) {
        Intrinsics.checkNotNullParameter(batteryLevel, "batteryLevel");
        this.temperature = d;
        this.humidity = d2;
        this.temperatureThreshold = num;
        this.humidityThreshold = num2;
        this.sleepTime = num3;
        this.batteryLevel = batteryLevel;
        this.chargingState = thermohygroChargingState;
        this.chargingPercentage = num4;
        this.cooldown = bool;
        this.displaySetting = thermohygroDisplaySetting;
        this.supportControl = thermohygroSupportControl;
        this.errors = list;
    }

    /* JADX WARN: Illegal instructions before constructor call */
    public /* synthetic */ ThermohygroMeterState(Double d, Double d2, Integer num, Integer num2, Integer num3, WiFiDeviceBatteryLevel wiFiDeviceBatteryLevel, ThermohygroChargingState thermohygroChargingState, Integer num4, Boolean bool, ThermohygroDisplaySetting thermohygroDisplaySetting, ThermohygroSupportControl thermohygroSupportControl, List list, int i, DefaultConstructorMarker defaultConstructorMarker) {
        int i2 = i & 1;
        Double dValueOf = Double.valueOf(FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE);
        this(i2 != 0 ? dValueOf : d, (i & 2) != 0 ? dValueOf : d2, (i & 4) != 0 ? 0 : num, (i & 8) != 0 ? 0 : num2, (i & 16) != 0 ? 0 : num3, (i & 32) != 0 ? WiFiDeviceBatteryLevel.Medium : wiFiDeviceBatteryLevel, (i & 64) != 0 ? ThermohygroChargingState.Discharging : thermohygroChargingState, (i & 128) != 0 ? 0 : num4, (i & 256) != 0 ? false : bool, (i & 512) != 0 ? ThermohygroDisplaySetting.Temperature : thermohygroDisplaySetting, (i & 1024) != 0 ? null : thermohygroSupportControl, (i & 2048) != 0 ? CollectionsKt.emptyList() : list);
    }

    public final Double getTemperature() {
        return this.temperature;
    }

    public final void setTemperature(Double d) {
        this.temperature = d;
    }

    public final Double getHumidity() {
        return this.humidity;
    }

    public final void setHumidity(Double d) {
        this.humidity = d;
    }

    public final Integer getTemperatureThreshold() {
        return this.temperatureThreshold;
    }

    public final void setTemperatureThreshold(Integer num) {
        this.temperatureThreshold = num;
    }

    public final Integer getHumidityThreshold() {
        return this.humidityThreshold;
    }

    public final void setHumidityThreshold(Integer num) {
        this.humidityThreshold = num;
    }

    public final Integer getSleepTime() {
        return this.sleepTime;
    }

    public final void setSleepTime(Integer num) {
        this.sleepTime = num;
    }

    @Override // nl.homewizard.android.wifidevices.wifidevices.protocols.state.WithBatteryLevel
    public WiFiDeviceBatteryLevel getBatteryLevel() {
        return this.batteryLevel;
    }

    @Override // nl.homewizard.android.wifidevices.wifidevices.protocols.state.WithBatteryLevel
    public void setBatteryLevel(WiFiDeviceBatteryLevel wiFiDeviceBatteryLevel) {
        Intrinsics.checkNotNullParameter(wiFiDeviceBatteryLevel, "<set-?>");
        this.batteryLevel = wiFiDeviceBatteryLevel;
    }

    public final ThermohygroChargingState getChargingState() {
        return this.chargingState;
    }

    public final void setChargingState(ThermohygroChargingState thermohygroChargingState) {
        this.chargingState = thermohygroChargingState;
    }

    public final Integer getChargingPercentage() {
        return this.chargingPercentage;
    }

    public final void setChargingPercentage(Integer num) {
        this.chargingPercentage = num;
    }

    public final Boolean getCooldown() {
        return this.cooldown;
    }

    public final void setCooldown(Boolean bool) {
        this.cooldown = bool;
    }

    public final ThermohygroDisplaySetting getDisplaySetting() {
        return this.displaySetting;
    }

    public final void setDisplaySetting(ThermohygroDisplaySetting thermohygroDisplaySetting) {
        this.displaySetting = thermohygroDisplaySetting;
    }

    public final ThermohygroSupportControl getSupportControl() {
        return this.supportControl;
    }

    public final void setSupportControl(ThermohygroSupportControl thermohygroSupportControl) {
        this.supportControl = thermohygroSupportControl;
    }

    public final List<ThermohygroError> getErrors() {
        return this.errors;
    }

    public final void setErrors(List<? extends ThermohygroError> list) {
        this.errors = list;
    }

    @Override // nl.homewizard.android.wifidevices.wifidevices.models.base.WiFiDeviceState
    public WiFiDeviceState clone() {
        return copy$default(this, null, null, null, null, null, null, null, null, null, null, null, null, 4095, null);
    }
}

Those parameters are provided in the same way as the cloud P1 meter driver. The controls (settings) are mostly in the ThermohygroSupportControl class:

package nl.homewizard.android.wifidevices.wifidevices.models.device.thermohygrometer;

import com.fasterxml.jackson.annotation.JsonProperty;
import kotlin.Metadata;
import kotlin.enums.EnumEntries;
import kotlin.enums.EnumEntriesKt;

/* JADX WARN: Failed to restore enum class, 'enum' modifier and super class removed */
/* JADX WARN: Unknown enum class pattern. Please report as an issue! */
/* JADX INFO: compiled from: ThermohygroSupportControl.kt */
/* JADX INFO: loaded from: classes7.dex */
@Metadata(d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0010\n\u0002\b\u0007\b\u0086\u0081\u0002\u0018\u00002\b\u0012\u0004\u0012\u00020\u00000\u0001B\t\b\u0002¢\u0006\u0004\b\u0002\u0010\u0003j\u0002\b\u0004j\u0002\b\u0005j\u0002\b\u0006j\u0002\b\u0007¨\u0006\b"}, d2 = {"Lnl/homewizard/android/wifidevices/wifidevices/models/device/thermohygrometer/ThermohygroSupportControl;", "", "<init>", "(Ljava/lang/String;I)V", "IncrementMeasurementId", "Reboot", "Identify", "FactoryReset", "wifi-devices_release"}, k = 1, mv = {2, 2, 0}, xi = 48)
public final class ThermohygroSupportControl {
    private static final /* synthetic */ EnumEntries $ENTRIES;
    private static final /* synthetic */ ThermohygroSupportControl[] $VALUES;

    @JsonProperty("increment_measurement_id")
    public static final ThermohygroSupportControl IncrementMeasurementId = new ThermohygroSupportControl("IncrementMeasurementId", 0);

    @JsonProperty("reboot")
    public static final ThermohygroSupportControl Reboot = new ThermohygroSupportControl("Reboot", 1);

    @JsonProperty("identify")
    public static final ThermohygroSupportControl Identify = new ThermohygroSupportControl("Identify", 2);

    @JsonProperty("factory_reset")
    public static final ThermohygroSupportControl FactoryReset = new ThermohygroSupportControl("FactoryReset", 3);

    private static final /* synthetic */ ThermohygroSupportControl[] $values() {
        return new ThermohygroSupportControl[]{IncrementMeasurementId, Reboot, Identify, FactoryReset};
    }

    public static EnumEntries<ThermohygroSupportControl> getEntries() {
        return $ENTRIES;
    }

    public static ThermohygroSupportControl valueOf(String str) {
        return (ThermohygroSupportControl) Enum.valueOf(ThermohygroSupportControl.class, str);
    }

    public static ThermohygroSupportControl[] values() {
        return (ThermohygroSupportControl[]) $VALUES.clone();
    }

    private ThermohygroSupportControl(String str, int i) {
    }

    static {
        ThermohygroSupportControl[] thermohygroSupportControlArr$values = $values();
        $VALUES = thermohygroSupportControlArr$values;
        $ENTRIES = EnumEntriesKt.enumEntries(thermohygroSupportControlArr$values);
    }
}

Images of the device:

What is the point of adding a device that is not publicly available yet? It can only cause problems because you will not be able to test anything.

@smarthomesven thanks for this find and your effort adding it to the code I will process your PR accordingly. I am checking with my contact with Homewizard to avoid problems / noise and also trying to understand if this is cloud only or potentially local api capable.

@Hsd1965 Of course this will be tested first as I do with every release I publish.

1 Like

I don’t think they will give away too many details of it, since the product is not even announced yet. The product is not yet released, but because the p1dongle data model (in the Android app) is similar for all models, we can also get the thermohygrometer data model. The images were found in the res folder of the APK (Android app). I don’t know any other details about the device and I obviously wasn’t able to test it myself (since the product isn’t even sold yet).

Likely hybrid like the Watermeter. There’s a charging graphic in the mobile app, and there’s also a battery level indication in the data model.

Ok fair enough, I’ll await their feedback and take it from there. By the sounds of it could be some chargeable (usb) wifi thermometer. And perhaps it will be continues wifi connected if it is USB powered (local api) and cloud based if it is “rechargable battery” based. But this is just guessing.

At least another new device for the HW ecosystem. :slight_smile:

1 Like

Yes, it’s clearly a rechargeable battery. There’s also a battery state in the data model which can be charging as well, so it means that it’s a rechargeable device

I have a Energy Socket and up until a week ago I could use a Advanced Flow to check the use in Watt and when it would go below 5 Watt it would be switched of.
For some reason this stopped working and whatever I do, the Advanced Flow will not work any-more.

Testing will say it works, but in real-live, nope.

What changed?

Check my changelog…a lot has changed. So where to begin?
Perhaps your socket has wifi issues and shows up in your debug tabs as timeouts?

Go to Homey → apps → Homewizard → App settings/instellingen and check the tabs “Fetch”.
See if your socket is there that struggles connecting?

Example of mine:

Further down there is log:

Thanks!

Here’s my log. What you see at 2o’clock is when my WiFi accespoint reboots.
There are not other “failed” lines other then at that time.

Just to be clear; it switches the plug off, whatever check-power-or-watt setting I use in my advance flow. So the flow works, but it keeps switching my plus off.

That flow trigger is from Athom/Homey it self, not from my code.
So something is triggering it (or not). Check the insights graph (watt) of that socket and drill down to hour mode and see if you see gaps or spikes that might explain the (mis)behavior.

This sounds more of a Homey problem than that my app is causing this.

I think I have found it, but still testing.

Question: is there a feature-request possible?

When creating an Advanced Flow I can choose; When:

But this option I do not have when choosing; And.

This I could really use :innocent:

Its already there as “logic” card:

I’m curious what the idea of the delay is.

This literally only delays the trigger by 5 minutes;
Maybe I’m completely wrong, but a card like below seems more “logical”:
it only triggers when the power has been less than 5W during 5 minutes

.

For Homey 2016-2019, you can use this card

Hi Jeroen. This morning looked into the app Battery Policy.
The “Paneel azimuth” setting (in my case 45) isn’t accepted. Also the weather locatie “Puttershoek” isn’t accepted (on the Open Meteo site this location is available).



As I understand to be filled in. Perhaps already known to you?
I’m running version 3.14.22