如何使用BARY节能:智能家居





我认为每个现代人至少都会想知道:您可以为公共公寓的这些垃圾费用支付多少?我在这里-也不例外。照明,煤气,暖气,水,租金,电梯,固体废物清除等 等等



创建BARY应用程序的原因之一(远非最后一个)是能够收集统计信息,分析和减少能耗。欧洲早已进入全面经济体制,我认为这种命运不会绕过我们。因此,事先准备绝对不会多余。



我建议考虑如何结合BARY:智能家居来优化能源成本。



入门:空调和地板采暖



能源成本的第一个优化是使用地板采暖和空调。即使没有详细的分析,很明显它们消耗很多。



今天,只有懒惰者没有写关于病毒感染预防的文章。但是,尽管如此,重复是学习的源泉。保持公寓健康抗病毒的关键是温度为18-24摄氏度,湿度为40-60%,以及定期通风。



我的空调实际上在夏天没有关闭。在冬天,地板采暖也发生了同样的事情。在屋主不在家的情况下,空调只是偶尔关闭(我不想回到闷的房间),而温暖的地板从来没有关闭。这件事的账单简直是宇宙的,温度远非理想。在离开之前,手动关闭所有东西是不可能的:没有时间,那简直就是被遗忘了。



大多数家用空调没有远程空气温度传感器(我只有一个),即它们不能准确地提供给定的温度范围。但是,当达到温度上限阈值时,可以通过任何外部传感器将其打开;而当温度达到下限阈值时,则可以将其关闭。这是我的第一次自动化。



实际上,它看起来像这样:下限阈值设置为24.0°C,上限阈值设置为24.5°C。一旦公寓内的温度上升到24.5°C以上,空调就会打开并工作直到温度下降到24.0°C以下。为了防止空调每分钟打开和关闭,我们为工作和休息的最短时间设置了条件。我吃了十分钟。我凭经验选择了含义。但是实际上,温度始终在指定范围内。



在BARY它看起来像这样:





图。



我认为打开空调的规则值得进一步详细说明示例中显示的规则:



  • 在过去的10分钟内,空调的状况没有改变;
  • 安全模式已关闭;
  • 空调关闭;
  • 睡眠模式被禁用(夜间模式使用不同的规则);
  • , ( , . , );
  • ( , .. , );
  • ( , ).


从那以后,空调的电力消耗减少了数倍。为了使空调器在所有者不在时不会闲置,在BARY中创建了一个虚拟按钮,该按钮的状态出现在空调器的自动化中(上例中的“安全”)。相同的虚拟按钮用于夜间模式(上例中为“ Sleep”),在单独的自动化规则中也将其考虑在内,并以最安静的模式打开空调。最初,这些按钮必须手动激活。



以苹果生态系统的形式找到了自动化解决方案。实现了我的带有Homekit的设备捆绑,并购买了Apple TV。有了它的帮助,您可以在Homekit中实现自动化规则的工作(您也可以使用iPad,但那时我还没有iPad)。在Homekit本身中,创建了规则:最后一个人离开房屋;第一个人回家。BARY中的虚拟按钮已附加到这些规则。





图。自动布防/撤防规则



首先,我什至保留统计数据,该数据显示了空调每小时的工作时间(分钟)。不幸的是,现在统计数据已经丢失,但是空调的运行时间却减少了原始数字的近1/3。



识别主要用电量



主要消费者分析方法



为了开始以优化成本,有必要明白的地方的叶子使用大部分电力。

我认为这里可能有不同的方法:



  • 我们使用特殊的模块-继电器。除了主要的开/关功能外,它们还跟踪与之相连的设备所消耗的能量。
  • 我们使用使用电流互感器的专用仪表;
  • 我们自己测量电力消耗(例如,使用电表),并以BARY表示平均值(此方法完全不准确,但有可能考虑指示性读数)。


对于除地暖以外的所有设备,我都安装了:Blitzwolf的高架插座,Shelly 1pm中的模块/ Aqara继电器模块/ Fibaro Double Switch 2插座。也许还有其他地方,我现在不记得了。

对于地板采暖,我根据他们的工作状况和平均消耗率(仅是第三种,不是很准确的方法)读取读数。



有一个特殊的字段中,用于指定的能量消耗(消费者功率)设备设置:





设置设备的功耗参数



总功耗是使用Wemos D1板和一个简单的草图从输入电表获得的:



该草图的源代码
#include <Wire.h> 
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>

#define WIFI_SSID "****"
#define WIFI_PASS "****"
#define API_URL "http://192.168.1.33/api/post-data"

volatile unsigned int state = 0;
volatile unsigned int kWh = 0;
volatile unsigned int blinked = 0;

int impulse = 3200;
int eeAddress = 0;
unsigned int lastMillis = 0;
int counter = 0;
int blinkMin = 10;
int timeout = 15000;
int PIN = D8;

void setup()
{
  state = impulse;

  EEPROM.begin(512);
  counter = EEPROM.read(eeAddress);
  EEPROM.write(eeAddress, counter + 1);
  EEPROM.commit();

  pinMode(PIN, INPUT_PULLUP); 
  
  attachInterrupt(digitalPinToInterrupt(PIN), blink, RISING);

  Serial.begin(115200);
  Serial.println(F(" "));

  connectWiFi();
}

void connectWiFi() 
{
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("WiFi: Waiting for connection");
  }
  Serial.println("WiFi: connected");
}

float roundEx(float value, int digits) 
{
  int newValue = value * pow(10, digits);
  return (float) newValue / pow(10, digits);
}

void loop()
{
  if (blinked >= blinkMin && millis() - lastMillis > timeout) {
    float divider = (float) impulse * (millis() - lastMillis) / 1000 / 3600;
    float power = blinked / divider;
    float kWhFloat = kWh + (float) (impulse - state) / impulse;

    Serial.print(F("sec="));
    Serial.print(millis() / 1000);
    Serial.print(F("; time="));
    Serial.print((millis() - lastMillis) / 1000);
    Serial.print(F("; blinkMin="));
    Serial.print(blinked);
    Serial.print(F("; state="));
    Serial.print(state);
    Serial.print(F("; kWh="));
    Serial.print(kWhFloat, 3);
    Serial.print(F("; power="));
    Serial.print(power, 3);
    Serial.println(F(" "));
    blinked = 0;
    lastMillis = millis();

    if (WiFi.status() == WL_CONNECTED) {
      StaticJsonBuffer<300> JSONbuffer;
      JsonObject& JSONencoder = JSONbuffer.createObject();
      JSONencoder["device"] = "main_counter";
      JSONencoder["function"] = "counter";
      JSONencoder["counter"] = counter;
      JSONencoder["power"] = power;
      JSONencoder["usage"] = kWhFloat;
      char JSONmessageBuffer[300];
      JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
      Serial.println(JSONmessageBuffer);

      HTTPClient http;
      http.begin(API_URL);
      http.addHeader("Content-Type", "application/json");
      int httpCode = http.POST(JSONmessageBuffer);
      String payload = http.getString();
      Serial.print(httpCode);
      Serial.print(" ");
      Serial.println(payload);
      http.end();
    } else {
      connectWiFi();
    }
  }
}

void blink()
{
  detachInterrupt(digitalPinToInterrupt(PIN));
  attachInterrupt(digitalPinToInterrupt(PIN), lowInterrupt, FALLING);
  state--;
  if (state == 0 || state > impulse) {
     kWh++;
     state = impulse; 
   }
   blinked++;
}

void lowInterrupt(){
  detachInterrupt(digitalPinToInterrupt(PIN));
  attachInterrupt(digitalPinToInterrupt(PIN),  blink, RISING);
} 




任何电表都具有脉冲输出,该输出由LED复制。当LED闪烁时,脉冲已通过。如果将某些设备(例如Arduino)连接到脉冲输出,则可以计算脉冲数。草图每15秒一次发出一次POST请求,其中包含BARY中的当前读数(但不多于它拾取足够数量的脉冲) ... 在中断时读取脉冲,并执行奇怪的附加/分离方案以抑制接触反弹。没有误报。



识别和分析其他用电设备



如果主仪表系统中使用,则电力消费者没有电表将在统计数据未知显示:





图。能源消耗的详细统计数据不



准确确定了明显的主要消费者并玩了些自制酒的草图之后,我意识到“未知”类别中的消费者太多。决定发射重型火炮:WB-MAP12H多通道计数器。这使得识别最“有趣”的线路并进一步区分能耗成为可能。



大多数费用分配给空调(夏季),地板采暖(冬季),通气器(冬季),计算机和多媒体。是的,水壶总是吵得很厉害,而且泡芙,却几乎是最普通的消费者。



可以在“事件”-“统计”





选项卡中查看BARY中按类别划分的用电量统计有关能耗的更详细统计信息。



非常方便:当任何类别的消耗量超过平均值时,该类别将以红色突出显示。就像上图中的“空调”一样。通过这一行的充实性,可以判断出超出部分的价值占平均值的百分比。



您还可以看到特定类别的统计数据组成:





图。设备详细统计



如何避免数据重复



如果您使用一套设备来分析用电量-插座中的电表+每条线的总电表-读数将重复。 BARY允许您构建父子层次结构。它是通过以下方式实现的:对于设备本身,我们设置消耗类别和上级计数器(请参见“设置设备的能耗参数”图)。



如果一个计数器对整条线路进行计数,而第二个计数器对特定的出口进行计数,则需要更高级别的计数器。当查看统计信息时,将从高级仪表的读数中减去该出口的读数,并且不会重复数据。如果我们从上游电表和特定点获取读数,则部分成本(属于上游电表线路但不挂在专用计数器插座上的那些用电器的成本)在统计中将显示为未知。(请参见图“低能耗详细统计”)

嵌套本身不受任何限制。例如,我使用最多4个附件的方案。



现在我能做什么?



假设我们已经完成了未知任务,现在如何开始保存?当然,每个智能家居都会有自己的详细信息。但是这里有一些通用的工作准则。



离开家/回家的场景



我强烈建议您设置离开家的场景!它似乎很陈旧,但是效果很好。在这种情况下,我们将禁用所有可能的功能。因此,返回主脚本将使所有内容返回工作模式。





图。离开家时要关闭的设备列表



晚安场景



您是否想过待机设备要消耗多少?刚插入电源插座?我是的 开车进入,所以开车=)

例如,仅留在插座中的空调消耗1.4 W * h。事实证明,每个月1.4 W * h * 24小时* 30天= 1 KW * h,至少半年不工作。

当然,这个数字很小。但是,使用智能家居系统来优化成本不会使我们付出任何代价。屋子里可能有不止一个这样的“等待”设备,而不是五个。电视,游戏机,计算机和其他设备。设备越多,消耗越多。





图。在睡眠模式下断开连接的设备列表



温度范围



我们将地板采暖的温度范围设置为最小允许范围。例如,在浴室中,温度设置为26°C,这是一个完全可以接受的温度,并且在此模式下花费的能量很少。如果超过湿度(有人在淋浴),我们会提高温度(在淋浴期间,地板通常有时间预热2-3度)。



在其他房间,我们使用运动传感器自动关闭加热的地板(如果房间中没有人,为什么要加热地板?)。



如果使用单独的电加热器,则我们还将其操作绑定到温度传感器(与空调一样)。如果使用的是Tion型通气孔,那么在夏季,我们尝试在夏季让空气尽可能少地进入室内(炎热的天气,这是空调的额外工作),而在冬天,冷空气的通透性相同(通气孔本身会对其进行加热)。



让它发光!但仅在业务上



如果浴室,更衣室,储藏室和其他类似房间中的照明仍然手动打开和关闭,我们可以将其绑定到运动传感器。这样,您将永远不会忘记关灯!好吧,您无需在黑暗中的午夜冰箱旁边的厨房里寻找开关。此外,这并非难事-阿里拥有许多可在Wi-Fi / Zigbee / 433 MHz上运行的开关,包括那些没有零线的开关。



如果您仍然使用白炽灯,卤素灯和其他贪食性光源,那么请了解:



2009年11月23日,颁布了第261-FZ号《节能法》,该法规定,自2011年1月1日起,将禁止生产和销售容量为100瓦以上的白炽灯,并且将从1月1日起取消容量为75瓦以上的白炽灯。 2013。



现在是时候考虑改用更经济的了-LED和节能灯。



在相同的1200Lm光通量下,白炽灯消耗100 W,荧光灯/节能灯(25-30 W)和LED(约10 W)。另外,LED和节能灯泡的使用寿命比白炽灯更长。



我们最近有一个使用爱迪生式白炽灯泡的自动化案例。40盏每盏60瓦的灯。经过一个月的能耗统计,我们毫不奇怪地发现,这些灯的电费超过三分之一。立即将所有灯泡替换为类似的LED灯泡。他们很快得到了回报。



结语



在您的智能家居上进行5年的工作后,许多场景和自动化都得到了改善,并进行了重大更改。节能已成为一种令人愉快的习惯。现在很难想象,从早到晚,地板采暖都是油炸的,而且空调一直在嗡嗡作响。屋子里的天气很舒适,光线和光线都令人愉悦。BARY可以节省资源!



我希望您发现此材料有用。如果您有自己的优化电费示例,请在注释中分享自动化的方式和方式。加入我们VK电报小组



All Articles