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

Well, every modern person has at least once wondered: for how much longer can you pay such huge utility bills?! I am no exception. Electricity, gas, heating, water, rent, elevator, removal of solid waste, etc. etc.

好吧,每个现代人至少都会想知道:您能支付多长时间才能支付这么大的水电费? 我也不例外 电力,煤气,暖气,水,租金,电梯,固体废物的清除等。

One of the reasons (far from the last) of creating the BARY application was the ability to collect statistics, analyze and reduce energy consumption. Europe has long passed into the regime of total economy; I think this fate will not bypass us. Therefore, to prepare for this in advance definitely will not be superfluous.

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

I now propose that we examine how we managed to optimize the cost of electricity along with BARY: Smart Home.

现在,我建议我们研究如何与BARY:智能家居一起优化电力成本。

入门:空调和地暖 (Getting started: air conditioning and under floor heating)

The first optimization of energy costs was to restore order in the use of underfloor heating and air conditioning. Even without a detailed analysis, it was clear that they consume a lot.

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

Today, only the lazy did not write about the prevention of viral infections. But, nevertheless, practice makes perfect. The key to healthy antiviral weather in the apartment is a temperature of 18-24 C, humidity 40-60%, as well as regular ventilation.

今天,只有懒惰者没有写关于病毒感染预防的文章。 但是,实践仍然是完美的。 保持公寓健康抗病毒的关键是温度为18-24 C,湿度为40-60%,并定期通风。

I almost did not turn the air conditioning off during the summer. In winter, the same thing happened with warm floors. At the time when the owner was absent from the house, air conditioning turned off only occasionally (we did not want to return to the stuffy room) and the floor heating never went down. The bills for all this were quite cosmic, and the temperature was far from ideal parameters. It was somehow impossible to turn everything off manually before leaving: either we had no time, or it was simply forgotten.

夏天,我几乎没有关掉空调。 在冬天,温暖的地板也会发生同样的事情。 在房主缺席房屋的时候,空调只是偶尔关闭(我们不想回到闷的房间),地板的供暖从未降下来。 所有这一切的账单都相当宇宙化,温度远非理想参数。 在离开之前,手动关闭所有内容是不可能的:要么我们没有时间,要么就被人们遗忘了。

Most household air conditioners do not have remote air temperature sensors (this is my case), i.e. they do not accurately provide the specified temperature regime. But they can be turned on by any external sensor when the upper temperature threshold is reached and turned off when it reaches the lowest. This was my first automation.

大多数家用空调没有远程空气温度传感器(我就是这种情况),即它们无法准确提供指定的温度范围。 但是,当达到温度上限阈值时,可以通过任何外部传感器将其打开,而当达到最低温度阈值时,可以将其关闭。 这是我的第一次自动化。

In fact, it goes like this: the lower threshold is set at 24.0 ° C and the upper — 24.5 ° C. As soon as the temperature in the apartment rises above 24.5 ° C, the air conditioner turns on and works until the temperature drops below 24.0 ° C. To prevent the conditioner from turning on and off every minute, a condition is set for the minimum time for work and rest. I have it for 10 minutes. The value was selected empirically. In practice, the temperature has always been in the indicated range.

实际上,它是这样的:下限阈值设置为24.0°C,上限阈值设置为24.5°C。一旦公寓内的温度升高到24.5°C以上,空调就打开并工作直到温度下降。低于24.0°C。为防止空调每分钟打开和关闭,请为工作和休息的最短时间设置条件。 我吃了十分钟。 该值是根据经验选择的。 实际上,温度一直在所指示的范围内。

In BARY, it looks like this:

在BARY中,它看起来像这样:

Fig. The rule of turning on the air conditioner 图。打开空调的规则

I think it’s worthwhile to dwell in more detail on what the rule shown in the example does:

我认为值得详细介绍示例中显示的规则的作用:

  • The condition of the air conditioner has not been changed over the past 10 minutes;

    在过去的10分钟内,空调的状况没有改变;
  • Armed mode is off;

    布防模式已关闭;
  • Air conditioning off;

    空调关闭;
  • Sleep mode is off (in night mode another rule is used);

    睡眠模式已关闭(在夜间模式下,使用其他规则);
  • The temperature in the living room or in the kitchen exceeds the value set in these rooms (I have a studio apartment; therefore I use a sensor in each room. You can use either a numerical value or variables from the settings of zones and rooms as values);

    客厅或厨房中的温度超过了这些房间中设定的温度(我有一室公寓,因此我在每个房间中都使用一个传感器。您可以使用数值或区域和房间设置中的变量作为值);
  • A motion sensor in the kitchen does not detect movement (this sensor is used by the wife, because she does not like it when the air conditioning is blowing on her);

    厨房中的运动传感器无法检测到运动(妻子使用了此传感器,因为当空调吹着她时,她不喜欢它);
  • There is no energy consumption for the water heater (it is very voracious, and at the time of its operation it is better not to turn on anything ‘heavy’).

    热水器没有能源消耗(它非常脆弱,在运行时最好不要“沉重”打开任何东西)。

Since this moment, the consumption of electricity by the air conditioner decreased several times. In order for the air conditioner would not work idle when there are no hosts, a virtual button was made in BARY, the status of which was present in the automation of the air conditioner (“Security” from the example above). The same virtual button was for night mode (“Sleep” from the example above), which was also taken into account in a separate automation rule and turned on the air conditioner in the most silent mode. At first, these buttons had to be activated manually.

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

The automation solution was found in the form of Apple ecosystem. A bunch of my devices were implemented with Homekit, and also Apple TV was acquired. With it, you can implement the work of automation rules in Homekit (you can also use iPad, but I didn’t have it at that time). The rules are created in Homekit itself: the last person leaves home; the first person comes home. Virtual buttons were bound to these rules in BARY.

以苹果生态系统的形式发现了自动化解决方案。 我的许多设备都是通过Homekit实现的,并且还收购了Apple TV。 有了它,您就可以在Homekit中实现自动化规则的工作(您也可以使用iPad,但当时我还没有)。 这些规则是在Homekit本身中创建的:最后一个人离开家; 第一个人回家。 虚拟按钮已绑定到BARY中的这些规则。

Fig. Rules for automatic security on / off 图:自动安全性开启/关闭规则

At first I even kept statistics, which displayed the number of minutes worked by the air conditioner per hour. Unfortunately, now the statistics have already been lost, but the air conditioner’s operating time has decreased by almost ⅔ from the original figure.

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

主要用电量的识别 (Identification of the main electricity consumers)

主要消费者的分析方法 (Analysis methods for the major consumers)

In order to start optimizing costs, you need to understand where the majority of the electricity goes.

为了开始优化成本,您需要了解大部分电力的去向。

Here, I think, there may be different approaches:

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

  • The usage of special modules — relays. In addition to their main on / off function, they keep track of the energy that is consumed by the devices connected to them;

    特殊模块的使用-继电器。 除了主要的开/关功能外,它们还跟踪与之相连的设备所消耗的能量。
  • Applying special meters using current transformers;

    使用电流互感器使用特殊仪表;
  • Measuring the power consumption by ourselves (for example, using a wattmeter) and indicating the average value in BARY (this method is completely inaccurate, but it will work out approximate indications).

    自己测量功耗(例如,使用电表),并以BARY表示平均值(此方法完全不准确,但可以得出近似的指示)。

For all devices except the under-floor heating, I have installed: overhead sockets from Blitzwolf, modules for Shelly 1pm / Aqara Relay Module / Fibaro Double Switch 2 socket boxes. Maybe there was something else, I don’t remember now.

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

For the under-floor heating, I took readings based on the status of their work and average consumption indicators (the third, not very accurate way).

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

In the device settings there is a special field for indicating energy consumption (consumer power):

在设备设置中,有一个特殊字段指示能耗(消耗功率):

Fig. Configuring the device’s energy consumption parameters 图。配置设备的能耗参数

The total power consumption was taken from the input counter using the Wemos D1 board and a simple sketch:

使用Wemos D1板和一个简单的草图从输入计数器中获取了总功耗:

该草图的源代码 (The source code for this sketch)

#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);
}

Any electric meter has a pulse output, which is duplicated by LED. When the LED blinks- the pulse has passed. If you connect a device, such as an Arduino, to the pulse output, you can calculate the number of pulses. A sketch every 15 seconds (but not more often than it accumulates a sufficient number of pulses) makes a POST request with the current readings in BARY (Why the device itself creeps onto the server, and not vice versa? I don’t remember, at that moment it seemed convenient). Pulses are read by interruptions, and the strange “attach / detach” scheme is implemented to suppress contact bounce. There were no false positives.

任何电表都有脉冲输出,该输出由LED复制。 LED闪烁时-脉冲已通过。 如果将设备(例如Arduino)连接到脉冲输出,则可以计算脉冲数。 每15秒钟绘制一次草图(但不多于它累积足够数量的脉冲),并使用BARY中的当前读数发出POST请求(为什么设备本身爬到服务器上,反之亦然呢?我不记得了,那时似乎很方便)。 通过中断读取脉冲,并执行奇怪的“连接/分离”方案以抑制接触反弹。 没有误报。

识别和分析其他用电设备 (Identification and analysis of other electrical consumers)

If the main meter is used in the system, then electricity consumers who do not have meters will be displayed as unknown in the statistics:

如果系统中使用了主电表,则没有电表的用电者将在统计信息中显示为未知:

Fig. Low-detailed energy statistics 图。低详细能源统计

After identifying the obvious main consumers and playing enough with homegrown sketches, I realized that there are too many consumers left in the “Unknown” classification. It was decided to launch heavy artillery: a multi-channel counter WB-MAP12H. It allowed to determine the most “gluttonous” lines and to further differentiate energy consumption.

在确定了明显的主要消费者并充分利用本地草图之后,我意识到“未知”类别中剩下的消费者太多了。 决定发射重型火炮:多通道计数器WB-MAP12H。 它可以确定最“ glut”的路线,并进一步区分能耗。

Most of the expenses were allocated to air conditioning (in summer), under-floor heating (in winter), breather (in winter), computer and multimedia. And yes, the kettle, which always works so noisily and puffs, turned out to be almost the lowest consumer.

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

The statistics of electricity consumption by category in BARY can be found in the tab “Events” — “Statistics”

BARY中按类别分类的用电量统计信息可以在“事件”-“统计信息”选项卡中找到

Fig. More detailed energy statistics. 图。更详细的能源统计。

It is very convenient: when the consumption for any of the categories exceeds the average, the category is highlighted in red. Like “Air Conditioning” in the picture above. By the occupancy of this line, one can judge the magnitude of the excess as a percentage of the average.

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

You can also see what statistics are compiled for a particular category:

您还可以查看针对特定类别编译了哪些统计信息:

Fig. Detailed statistics on devices 图。设备详细统计

避免数据重复 (Avoiding data duplication)

If you use a set of devices to analyze power consumption — a counter in the socket + a total counter per line — the readings will be doubled. BARY allows you to build a parent-child hierarchy. This is implemented as follows: for the devices themselves, we set the consumption category and a higher counter (see. Fig. “Configuring the device’s energy consumption parameters”).

如果使用一组设备来分析功耗-插座中的计数器+每条线的总计数器-读数将增加一倍。 BARY允许您构建父子层次结构。 这实现如下:对于设备本身,我们设置消耗类别和一个更高的计数器(请参见图“配置设备的能耗参数”)。

A higher counter is needed if one counter reads the entire line and the other counts a specific socket. When viewing statistics, the readings of this socket will be subtracted from the readings of a higher counter, and the data will not be duplicated. If we take readings from the upstream meter and specific points, then part of the costs (the costs of those consumers who belong to the upstream meter line but do not hang on the sockets with a dedicated meter) will be displayed as unknown in the statistics. (see Fig. «Low-detailed energy statistics»)

如果一个计数器读取整行,而另一个计数器计数一个特定的套接字,则需要一个更高的计数器。 查看统计信息时,将从较高计数器的读数中减去此套接字的读数,并且不会重复数据。 如果我们从上游电表和特定点获取读数,那么部分成本​​(属于上游电表线路但未挂在专用电表插座上的那些消费者的成本)将在统计中显示为未知。 (参见图«低能耗统计»)

Nesting itself is not limited in any way. For example, I use a scheme of up to 4 attachments.

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

接下来呢? (And what`s next?)

Let`s suppose we are finished with uncertainty, so how can we start saving now? Of course, each smart home will have its own specifics. But here are some general working recommendations.

假设我们已经不确定了,那么现在如何开始储蓄呢? 当然,每个智能家居都会有自己的详细信息。 但是这里有一些一般的工作建议。

场景“离开家/回家” (Scenarios “Leaving Home / Coming Home”)

I highly recommend setting up a leaving home scenario! It seems to be obvious, but it works very well. In this scenario we include disabling everything that is possible. The scenario of returning home, respectively, returns everything to working mode.

我强烈建议您设置离开家的场景! 这似乎很明显,但是效果很好。 在这种情况下,我们包括禁用所有可能的方法。 回到家的场景分别使一切返回工作模式。

Fig. A list of devices disconnected when leaving home 图:离开家时断开连接的设备列表

“晚安”场景 (“Good Night” Scenario)

Have you ever wondered how much devices that are in standby mode consume? Just plugged in? I am. Yeah, I`m obsessed =)

您是否想过待机模式下消耗多少设备? 刚刚插入? 我是。 是的,我痴迷=)

For example, an air conditioner simply left in a wall socket consumes 1.4 Wh * h. In a month it turns out 1.4 W * h * 24 h * 30 days = 1 KW * h, and at least six months a year it does not work.

例如,简单地留在墙上插座中的空调消耗1.4 Wh * h。 一个月后,结果为1.4 W * h * 24 h * 30天= 1 KW * h,一年至少六个月不工作。

Of course, the figure is not so big. But optimizing costs with a Smart Home system is worth nothing to us. But there can be not one, and not five of such “waiting” devices in a house. TVs, game consoles, computers and other devices. The more devices- the more expenses.

当然,这个数字不是很大。 但是,使用智能家居系统优化成本对我们而言毫无价值。 但是在一间屋子里不能只有一个,也不能有五个这样的“等待”设备。 电视,游戏机,计算机和其他设备。 设备越多,费用越多。

Fig. A list of devices that are disabled in sleep mode 图:在睡眠模式下禁用的设备列表

温度模式 (Temperature mode)

We set the temperature regime of warm floors to be the minimum permissible. For example, in the bathroom the temperature is set at 26 ° C, this is a quite acceptable temperature and there is not much energy spent in this mode. If humidity is exceeded (someone takes a shower), we increase the temperature (during a shower, the floors usually have time to warm up by 2-3 degrees).

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

In the other rooms, we automatically turn off the warm floor using a motion sensor (why would we heat the floors if there is nobody in the room?).

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

If separate electric heaters are used, then we also connect their work to a temperature sensor (as with an air conditioner). If a breather of the “Tion” type is used, then in summer we try to run as little air as possible (it is hot and this is an extra work for the air conditioner), in winter it is the same with cold air (the breather itself warms it).

如果使用单独的电加热器,那么我们还将它们的工作连接到温度传感器(与空调一样)。 如果使用“ Tion”类型的通气Kong,则在夏季,我们尝试尽可能减少空气流通(天气炎热,这是空调的一项额外工作),而在冬季,冷空气则相同(呼吸器本身会使其变暖)。

让它发光! 但只有在这种情况下 (Let there be light! But only in the case)

If the lighting in bathrooms, dressing rooms, pantries and other similar rooms is still turned on and off manually, we attach it to the motion sensor. So you will never forget to turn off the lights! Well, also you won’t need to look for a switch in the dark kitchen next to the midnight refrigerator. In addition, it is not difficult at all to do this — there are a lot of Wi-Fi / Zigbee / 433 MHz switches on Aliexpress, including those without a zero line.

如果浴室,更衣室,餐具室和其他类似房间中的照明仍然手动打开和关闭,我们将其连接到运动传感器。 因此,您将永远不会忘记关灯! 好了,您也不需要在午夜冰箱旁的黑暗厨房里寻找开关。 此外,做到这一点并不困难-Aliexpress上有很多Wi-Fi / Zigbee / 433 MHz开关,包括没有零线的开关。

If you still use incandescent bulbs, halogen and other gluttonous light sources, then you should know:

如果您仍然使用白炽灯泡,卤素灯和其他光源,那么您应该知道:

On November 23, 2009, Federal Law No. 261-ФЗ “On Energy Saving” was issued, which stipulated that incandescent lamps with a capacity of 100 watts or more would be banned from production and sale from January 1, 2011, with a capacity of 75 watts or more being canceled from January 1 2013.

2009年11月23日,发布了第261-ФЗ号联邦法“关于节能”,其中规定,自2011年1月1日起,将禁止生产和销售容量为100瓦或更高的白炽灯。从2013年1月1日起取消75瓦以上的电。

It's time to think about switching to more economical ones — LED and energy-saving.

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

With the same luminous flux of 1200Lm, an incandescent lamp consumes 100 watts, fluorescent / energy-saving — 25-30 watts, and LED — about 10 watts. Plus, the life of LED and energy-saving lamp is significantly longer than the life of an incandescent one.

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

Recently, we had an automation case that used incandescent lamps stylized as Edison lamps. Over 40 lamps of 60 watts each. Obtaining the statistics of energy consumption for one month, it was not surprising to find that more than a third of the electricity bill came from these lamps. All lamps were immediately replaced by similar, but already LED ones. They paid off very quickly.

最近,我们有一个自动化案例,使用的是程式化为爱迪生灯的白炽灯。 超过40盏60瓦的灯。 获得一个月的能源消耗统计数据,发现有三分之一以上的电费来自这些灯不足为奇。 所有的灯都立即被类似但已经是LED的灯所取代。 他们很快得到了回报。

结语 (Epilogue)

For over 5 years of working on my smart home, many scenarios and automation processes have improved and undergone significant changes. Energy conservation has become a good habit. Now it is difficult to imagine that the warm floors are fried from morning to night, and the air conditioning is constantly buzzing. The weather in the house is comfortable, and payments for light please the eye and the wallet. BARY on guard of saving resources!

在我的智能家居上工作了5年多的时间,许多方案和自动化流程都得到了改进,并且发生了重大变化。 节约能源已成为一个好习惯。 现在很难想象,从早到晚,温暖的地板都在炸,而且空调一直在嗡嗡作响。 屋子里的天气很舒适,要付光,请眼睛和钱包。 BARY节约资源!

I hope this material was useful to you. If you have your own examples of optimizing electricity consumption, share in the comments what and how you managed to automate. And also join our group in VK and telegram!

我希望这些材料对您有用。 如果您有自己的优化用电示例,请在注释中分享成功实现自动化的方式和方式。 并加入我们的VK和电报小组!

翻译自: https://habr.com/en/company/bary_io/blog/515540/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值