From 8d0003b9cdc05ac924cdb4c73ad4ef5f9b7d999e Mon Sep 17 00:00:00 2001 From: kai60 Date: Sun, 3 May 2020 21:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ifish.xcodeproj/project.pbxproj | 12 +- Ifish/Assets.xcassets/.DS_Store | Bin 10244 -> 10244 bytes .../petimage/恒温关.imageset/恒温关.png | Bin 9209 -> 22934 bytes .../petimage/恒温开.imageset/恒温开.png | Bin 9150 -> 22878 bytes .../petimage/杀菌关.imageset/杀菌关.png | Bin 8950 -> 23133 bytes .../petimage/杀菌开.imageset/杀菌开.png | Bin 9302 -> 23110 bytes Ifish/Info.plist | 2 +- Ifish/Utinitys/EGOCache/UIImage+WaterMark.h | 81 ++++ Ifish/Utinitys/EGOCache/UIImage+WaterMark.m | 70 ++++ Ifish/Utinitys/dataUnity/dataContorl.m | 4 + .../ConnectAauariumVC/ConAquarChooseWiFiVC.m | 1 + .../ConnectAauariumVC/ConnectingAquarVC.m | 6 +- .../XuTo/SetTimerCell.h | 4 +- .../XuTo/SetTimerCell.m | 3 +- .../XuTo/Xuanduo2DataUtility.h | 1 + .../XuTo/Xuanduo2DataUtility.m | 29 ++ .../XuTo/Xuanduo2SettingController.m | 355 +++++++++++++----- .../XuTo/Xuanduo2TimerModel.h | 10 + .../XuTo/Xuanduo2TimerModel.m | 5 + .../XuTo/Xuanduo2fController.m | 64 +++- .../设备/IfishDeviceViewController.m | 21 +- .../IfishP2PMonitorController.m | 149 ++++++-- .../YooseeNextConnectViewController.mm | 12 +- .../BootomViewSoketBackMasgConreol.m | 44 ++- .../yooseFishTankView/MonitorBootmView.h | 2 +- .../yooseFishTankView/MonitorBootmView.m | 87 ++++- .../YseeCollectionCell/FishControlFirstCell.m | 12 +- .../FishControlFourthCell.m | 40 +- .../yooseFishTankView/ifishdeviceListCell.m | 2 +- .../erweima/CreatErWeiMaController.h | 1 + .../erweima/CreatErWeiMaController.m | 2 +- .../SecondConnectWifiController.m | 2 +- .../sendmaseegemodel/ReadTimerModel.m | 4 +- Ifish/views/mypicView/remindCyclePic.m | 7 + 34 files changed, 862 insertions(+), 170 deletions(-) create mode 100644 Ifish/Utinitys/EGOCache/UIImage+WaterMark.h create mode 100644 Ifish/Utinitys/EGOCache/UIImage+WaterMark.m diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index 129258d..3cbac31 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -2234,6 +2234,8 @@ 88F5EFD81D48D08100CC7CAF /* MMVectorImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF591D48D08100CC7CAF /* MMVectorImage.m */; }; 88F5EFD91D48D08100CC7CAF /* MyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF5C1D48D08100CC7CAF /* MyControl.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 88F740C01ECC28E800876AED /* ShopAddGoodsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F740BF1ECC28E800876AED /* ShopAddGoodsViewController.m */; }; + C017B1E2245ED2D4003151DF /* UIImage+WaterMark.h in Headers */ = {isa = PBXBuildFile; fileRef = C017B1E0245ED2D3003151DF /* UIImage+WaterMark.h */; }; + C017B1E3245ED2D4003151DF /* UIImage+WaterMark.m in Sources */ = {isa = PBXBuildFile; fileRef = C017B1E1245ED2D4003151DF /* UIImage+WaterMark.m */; }; C024B79E2379668B00509424 /* NSArray+AvoidCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = C024B78A2379668B00509424 /* NSArray+AvoidCrash.m */; }; C024B79F2379668B00509424 /* AvoidCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = C024B78B2379668B00509424 /* AvoidCrash.h */; }; C024B7A02379668B00509424 /* NSString+AvoidCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = C024B78C2379668B00509424 /* NSString+AvoidCrash.m */; }; @@ -5684,6 +5686,8 @@ 88F5EF5C1D48D08100CC7CAF /* MyControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyControl.m; sourceTree = ""; }; 88F740BE1ECC28E800876AED /* ShopAddGoodsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShopAddGoodsViewController.h; sourceTree = ""; }; 88F740BF1ECC28E800876AED /* ShopAddGoodsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShopAddGoodsViewController.m; sourceTree = ""; }; + C017B1E0245ED2D3003151DF /* UIImage+WaterMark.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+WaterMark.h"; sourceTree = ""; }; + C017B1E1245ED2D4003151DF /* UIImage+WaterMark.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+WaterMark.m"; sourceTree = ""; }; C024B78A2379668B00509424 /* NSArray+AvoidCrash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+AvoidCrash.m"; sourceTree = ""; }; C024B78B2379668B00509424 /* AvoidCrash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AvoidCrash.h; sourceTree = ""; }; C024B78C2379668B00509424 /* NSString+AvoidCrash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+AvoidCrash.m"; sourceTree = ""; }; @@ -12208,6 +12212,8 @@ C0837A54244FF5500034FEC5 /* EGOCache */ = { isa = PBXGroup; children = ( + C017B1E0245ED2D3003151DF /* UIImage+WaterMark.h */, + C017B1E1245ED2D4003151DF /* UIImage+WaterMark.m */, C0837A55244FF5500034FEC5 /* EGOCache.m */, C0837A56244FF5500034FEC5 /* EGOCache.h */, ); @@ -13026,6 +13032,7 @@ CB484E0E22B8C8C80075F050 /* version.h in Headers */, 3D1C50E4221A9EE00096AE43 /* config.h in Headers */, CBB0243223517947002900D5 /* NSObject+MJProperty.h in Headers */, + C017B1E2245ED2D4003151DF /* UIImage+WaterMark.h in Headers */, 3D1C5104221A9EE00096AE43 /* YooseConnectFirstViewController.h in Headers */, CB484E1E22B8C8C90075F050 /* P2PCInterface.h in Headers */, 3D1C5127221A9EE00096AE43 /* IfishCameraRecordSecondCell.h in Headers */, @@ -15467,6 +15474,7 @@ E51D7D5B208CF4E7001FF053 /* RuiMeiInputViewController.m in Sources */, 881672241EA5DE2B00BEBF23 /* UMComSelectTopicCell.m in Sources */, FAFC08242279CB5900B5A07B /* SetTimerCell.m in Sources */, + C017B1E3245ED2D4003151DF /* UIImage+WaterMark.m in Sources */, 3D1C5097221A9EDF0096AE43 /* TabView.m in Sources */, 88696FBD1E9C7215005D4AFB /* MemberDetailViewController.m in Sources */, 8816722C1EA5DE2B00BEBF23 /* UMComSimpleFeedTableViewController.m in Sources */, @@ -15689,7 +15697,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15807,7 +15815,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; diff --git a/Ifish/Assets.xcassets/.DS_Store b/Ifish/Assets.xcassets/.DS_Store index d561c4bab8d2f5bc489c30146d514330d23197c2..91d1bd6e76f73fec08125077483b2ba9ac052060 100644 GIT binary patch delta 71 zcmZn(XbG6$&nU4mU^hRb#AY6W`5b~A3vzr*|D3}bmpc3`~ delta 33 pcmZn(XbG6$&nUJrU^hRb*k&Gq`5c=!ONOv*Y~Wzr%&zd49RR*+3g`d; diff --git a/Ifish/Assets.xcassets/petimage/恒温关.imageset/恒温关.png b/Ifish/Assets.xcassets/petimage/恒温关.imageset/恒温关.png index 5eb231935ff8d552cfba1f3cd9a3f5a090756d10..63a3bddb304a92409352dc6b8262f6f53f89889b 100644 GIT binary patch literal 22934 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 qX(!#_{BO?3JvYKQtj>479kGG!fFR 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 diff --git a/Ifish/Assets.xcassets/petimage/恒温开.imageset/恒温开.png b/Ifish/Assets.xcassets/petimage/恒温开.imageset/恒温开.png index 34b12dc5d955530ddcd8f7263e128390cd4d1f12..23be9871813057855f66d6192bc2420a97913434 100644 GIT binary patch literal 22878 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 O07OYsu~PnK@c#jC>$$H0 delta 6464 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 diff --git a/Ifish/Assets.xcassets/petimage/杀菌开.imageset/杀菌开.png b/Ifish/Assets.xcassets/petimage/杀菌开.imageset/杀菌开.png index 3584aa4923f2aaf698c187dff2db2c99940a54c2..6f8039a3508037b470a751993b942e912024cfbd 100644 GIT binary patch literal 23110 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 G0{#mEM0ErJ delta 6617 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 XFpq#GttaUV00000NkvXXu0mjfczeo3 diff --git a/Ifish/Info.plist b/Ifish/Info.plist index c619fd3..2f87fd1 100644 --- a/Ifish/Info.plist +++ b/Ifish/Info.plist @@ -70,7 +70,7 @@ CFBundleVersion - 3 + $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption LSApplicationCategoryType diff --git a/Ifish/Utinitys/EGOCache/UIImage+WaterMark.h b/Ifish/Utinitys/EGOCache/UIImage+WaterMark.h new file mode 100644 index 0000000..c8de568 --- /dev/null +++ b/Ifish/Utinitys/EGOCache/UIImage+WaterMark.h @@ -0,0 +1,81 @@ +// +// UIImage+WaterMark.h +// PictureWatermark +// +// Created by AD-iOS on 15/8/3. +// Copyright (c) 2015年 Adinnet. All rights reserved. +// + +#import + +@interface UIImage (WaterMark) + +/** + * 给图片加水印图片 + * + * @param image 水印图片 + * @param imgRect 水印图片所在位置,大小 + * @param alpha 水印图片的透明度,0~1之间,透明度太大会完全遮盖被加水印图片的那一部分 + * + * @return 加完水印的图片 + */ +- (UIImage*)imageWaterMarkWithImage:(UIImage *)image imageRect:(CGRect)imgRect alpha:(CGFloat)alpha; +/** + * 同上 + * + * @param image 同上 + * @param imgPoint 水印图片(0,0)所在位置 + * @param alpha 同上 + * + * @return 同上 + */ +- (UIImage*)imageWaterMarkWithImage:(UIImage*)image imagePoint:(CGPoint)imgPoint alpha:(CGFloat)alpha; + +/** + * 给图片加文字水印 + * + * @param str 水印文字 + * @param strRect 文字所在的位置大小 + * @param attri 文字的相关属性,自行设置 + * + * @return 加完水印文字的图片 + */ +- (UIImage*)imageWaterMarkWithString:(NSString*)str rect:(CGRect)strRect attribute:(NSDictionary *)attri; +/** + * 同上 + * + * @param str 同上 + * @param strPoint 文字(0,0)点所在位置 + * @param attri 同上 + * + * @return 同上 + */ +- (UIImage*)imageWaterMarkWithString:(NSString*)str point:(CGPoint)strPoint attribute:(NSDictionary*)attri; +/** + * 返回加水印文字和图片的图片 + * + * @param str 水印文字 + * @param strPoint 文字(0,0)点所在位置 + * @param attri 文字属性 + * @param image 水印图片 + * @param imgPoint 图片(0,0)点所在位置 + * @param alpha 透明度 + * + * @return 加完水印的图片 + */ +- (UIImage*)imageWaterMarkWithString:(NSString*)str point:(CGPoint)strPoint attribute:(NSDictionary*)attri image:(UIImage*)image imagePoint:(CGPoint)imgPoint alpha:(CGFloat)alpha; +/** + * 同上 + * + * @param str 同上 + * @param strRect 文字的位置大小 + * @param attri 同上 + * @param image 同上 + * @param imgRect 图片的位置大小 + * @param alpha 透明度 + * + * @return 同上 + */ +- (UIImage*)imageWaterMarkWithString:(NSString*)str rect:(CGRect)strRect attribute:(NSDictionary *)attri image:(UIImage *)image imageRect:(CGRect)imgRect alpha:(CGFloat)alpha; + +@end diff --git a/Ifish/Utinitys/EGOCache/UIImage+WaterMark.m b/Ifish/Utinitys/EGOCache/UIImage+WaterMark.m new file mode 100644 index 0000000..e76024d --- /dev/null +++ b/Ifish/Utinitys/EGOCache/UIImage+WaterMark.m @@ -0,0 +1,70 @@ +// +// UIImage+WaterMark.m +// PictureWatermark +// +// Created by AD-iOS on 15/8/3. +// Copyright (c) 2015年 Adinnet. All rights reserved. +// + +#import "UIImage+WaterMark.h" + +@implementation UIImage (WaterMark) + +- (UIImage*)imageWaterMarkWithImage:(UIImage *)image imageRect:(CGRect)imgRect alpha:(CGFloat)alpha +{ + return [self imageWaterMarkWithString:nil rect:CGRectZero attribute:nil image:image imageRect:imgRect alpha:alpha]; +} + +- (UIImage*)imageWaterMarkWithImage:(UIImage*)image imagePoint:(CGPoint)imgPoint alpha:(CGFloat)alpha +{ + return [self imageWaterMarkWithString:nil point:CGPointZero attribute:nil image:image imagePoint:imgPoint alpha:alpha]; +} + +- (UIImage*)imageWaterMarkWithString:(NSString*)str rect:(CGRect)strRect attribute:(NSDictionary *)attri +{ + return [self imageWaterMarkWithString:str rect:strRect attribute:attri image:nil imageRect:CGRectZero alpha:0]; +} + +- (UIImage*)imageWaterMarkWithString:(NSString*)str point:(CGPoint)strPoint attribute:(NSDictionary*)attri +{ + return [self imageWaterMarkWithString:str point:strPoint attribute:attri image:nil imagePoint:CGPointZero alpha:0]; +} + +- (UIImage*)imageWaterMarkWithString:(NSString*)str point:(CGPoint)strPoint attribute:(NSDictionary*)attri image:(UIImage*)image imagePoint:(CGPoint)imgPoint alpha:(CGFloat)alpha +{ + UIGraphicsBeginImageContext(self.size); + [self drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormal alpha:1.0]; + if (image) { + [image drawAtPoint:imgPoint blendMode:kCGBlendModeNormal alpha:alpha]; + } + + if (str) { + [str drawAtPoint:strPoint withAttributes:attri]; + } + UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resultImage; + +} + +- (UIImage*)imageWaterMarkWithString:(NSString*)str rect:(CGRect)strRect attribute:(NSDictionary *)attri image:(UIImage *)image imageRect:(CGRect)imgRect alpha:(CGFloat)alpha +{ + UIGraphicsBeginImageContext(self.size); + [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:1.0]; + if (image) { + [image drawInRect:imgRect blendMode:kCGBlendModeNormal alpha:alpha]; + } + + if ([str isKindOfClass:[NSAttributedString class]]) + { + [(NSAttributedString*)str drawInRect:strRect]; + } + else if (str) { + [str drawInRect:strRect withAttributes:attri]; + } + UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resultImage; +} + +@end diff --git a/Ifish/Utinitys/dataUnity/dataContorl.m b/Ifish/Utinitys/dataUnity/dataContorl.m index d9f83c0..8386350 100644 --- a/Ifish/Utinitys/dataUnity/dataContorl.m +++ b/Ifish/Utinitys/dataUnity/dataContorl.m @@ -240,6 +240,10 @@ { NSString*hexString=[NSString stringWithFormat:@"%@",[[NSString alloc]initWithFormat:@"%1x",intString]]; siWeihexString=[NSString stringWithFormat:@"00%@",hexString]; + if (hexString.length==1) + { + siWeihexString=[NSString stringWithFormat:@"000%@",hexString]; + } }else if (intString>=260) diff --git a/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m b/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m index 843141f..bef29df 100644 --- a/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m +++ b/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m @@ -131,6 +131,7 @@ Assign BOOL isGoChangeWiFi;//更换为设备的WiFi YooseeNextConnectViewController *nextvc=[[YooseeNextConnectViewController alloc] init]; nextvc.wifiName=self.wifiName; nextvc.wifiPwd=self.wifiPwd; + nextvc.conectType =conectType_ap; [self.navigationController pushViewController:nextvc animated:YES]; } diff --git a/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m b/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m index 5269e83..0a85b11 100644 --- a/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m +++ b/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m @@ -68,7 +68,7 @@ Copy NSString *deviceId; // // Do any additional setup after loading the view. self.timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; - [self showStoreNameView]; + } //AP模式配网 @@ -349,6 +349,10 @@ Copy NSString *deviceId; }; store.sureBlock=^(NSString*name) { + if (!name) + { + name=@"宠物店"; + } [weakSelf.mask removeFromSuperview]; [weakSelf.storeNameView removeFromSuperview]; weakSelf.storeName=name; diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.h b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.h index a875b40..ab5035c 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.h +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.h @@ -13,9 +13,11 @@ NS_ASSUME_NONNULL_BEGIN @interface SetTimerCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIButton *switchBtn; +@property (weak, nonatomic) IBOutlet UILabel *titleLabel; +@property (weak, nonatomic) IBOutlet UILabel *timerLabel; - (void)configTitleLabel:(NSString *)title timer:(NSString *)timeStr switchStatus:(BOOL)status; - +@property (nonatomic, strong) id model; @end NS_ASSUME_NONNULL_END diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.m index 3233567..de34179 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/SetTimerCell.m @@ -9,8 +9,7 @@ #import "SetTimerCell.h" @interface SetTimerCell () -@property (weak, nonatomic) IBOutlet UILabel *titleLabel; -@property (weak, nonatomic) IBOutlet UILabel *timerLabel; + @end diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.h b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.h index 412b246..e725d98 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.h +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.h @@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN +(void)readTimerSocketDataWithBackMsgModel:(Xuanduo2TimerModel*)xuanduoTimerModel addWithBackStr:(NSString*)dataStr type:(NSString*)type; +(void)resetNewXuanduoButtonState:(UIButton*)uvLightBtn gasPumpLight:(UIButton*)gasLightBtn light1:(UIButton*)light1Btn light2:(UIButton*)light2Btn waveLight:(UIButton*)waveLightBtn huliLight:(UIButton*)huliLightBtn waterLight:(UIButton*)waterLightBtn heatLight:(UIButton*)heatLightBtn withModel:(id)backModel type:(NSString*)type; ++(void)readCycleSocketDataWithBackMsgModel:(XuanduoCycleModel*)xuanduoTimerModel addWithBackStr:(NSString*)dataStr type:(nonnull NSString *)type; @end NS_ASSUME_NONNULL_END diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.m index 379f6b8..8e6ef4c 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2DataUtility.m @@ -7,6 +7,7 @@ // #import "Xuanduo2DataUtility.h" +#import "UIImage+WaterMark.h" @implementation Xuanduo2DataUtility @@ -147,6 +148,7 @@ waterLightBtn.selected = NO; } // 恒温 + NSString *stateString4 = [backModel.constTmep substringWithRange:NSMakeRange(2, 2)]; if ([stateString4 isEqualToString:@"01"]) { light2Btn.selected = YES; @@ -154,6 +156,21 @@ light2Btn.selected = NO; } + UInt64 mac=[dataContorl hexToTen:backModel.heatingTemperature]; + + //float TPlabel=mac/10+(mac%10)*0.1; + float temp = mac/10.0; + NSString *stringTemp = [NSString stringWithFormat:@"%.1f℃",temp]; + UIImage*imageTempNomal=[UIImage imageNamed:@"恒温关"]; + imageTempNomal=[imageTempNomal imageWaterMarkWithString:stringTemp rect:CGRectMake(130, 60, 60, 60) attribute:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:30]}]; + [light2Btn setImage:imageTempNomal forState:UIControlStateNormal]; + + UIImage*imageTempsel=[UIImage imageNamed:@"恒温开"]; + imageTempsel=[imageTempNomal imageWaterMarkWithString:stringTemp rect:CGRectMake(130, 60, 60, 60) attribute:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:30]}]; + [light2Btn setImage:imageTempsel forState:UIControlStateSelected]; + + + } } @@ -179,5 +196,17 @@ group.time = [NSString stringWithFormat:@"%@ - %@",startStr,endStr]; [xuanduoTimerModel.groupModelArr addObject:group]; } +} + ++(void)readCycleSocketDataWithBackMsgModel:(XuanduoCycleModel*)xuanduocycleModel addWithBackStr:(NSString*)dataStr type:(nonnull NSString *)type + +{ + xuanduocycleModel.lightNumber = [dataStr substringWithRange:NSMakeRange(30, 2)]; + xuanduocycleModel.lastTime = [dataStr substringWithRange:NSMakeRange(32, 4)]; + xuanduocycleModel.gapTime = [dataStr substringWithRange:NSMakeRange(36, 4)]; + xuanduocycleModel.status = [dataStr substringWithRange:NSMakeRange(40, 2)]; + + + } @end diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m index 88bb564..cb7764b 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m @@ -39,6 +39,8 @@ static NSString *setTimerflag = @"SetTimerCell"; @interface Xuanduo2SettingController () @property(nonatomic,strong) setRemindWaterModel *waterInfmodel; @property(nonatomic,strong) Xuanduo2TimerModel *timerModel; +@property(nonatomic,strong) XuanduoCycleModel *cycleModel; + @property (nonatomic,strong) NSMutableDictionary *timeDic; @property(nonatomic,copy) NSString *nextChangeDateLabel; @property(nonatomic,strong) MyHud *XuTohud; @@ -131,7 +133,11 @@ static NSString *setTimerflag = @"SetTimerCell"; _selectSection = -1; for (int i = 0; i<_titieArr.count; i++) { NSMutableArray *dataArr = [NSMutableArray arrayWithCapacity:0]; - [dataArr addObject:plusflag]; + if (![_titieArr[i] isEqualToString:@"杀菌"]) + { + [dataArr addObject:plusflag]; + } + [self.timeDic setObject:dataArr forKey:_titieArr[i]]; } self.tableView.backgroundColor=COLOR_MIAN; @@ -223,9 +229,7 @@ static NSString *setTimerflag = @"SetTimerCell"; }else{ cell.huanshuiDaylabel.text=[NSString stringWithFormat:@"%ld天",(long)self.waterInfmodel.remindcycle]; - NSLog(@"ce;;%@",cell.huanshuiDaylabel.text); - - NSLog(@"222"); + } @@ -273,13 +277,18 @@ static NSString *setTimerflag = @"SetTimerCell"; TemperatureSetModel *model=[[TemperatureSetModel alloc]init]; model.title = @"恒温设置"; cell.titleLabel.text = model.title; - NSLog(@"wendu str = %@",_wenduString); - model.temperatureLabel = _wenduString; + + Xuanduo3fModel*xmodel=(Xuanduo3fModel*)_dataModel; + NSString*heating = xmodel.heatingTemperature; + UInt64 heat = [dataContorl hexToTen:heating]; + + float formatheat = heat/10; + model.temperatureLabel = [NSString stringWithFormat:@"%f",formatheat]; cell.temPSwitch.hidden=YES; cell.temperaturelabel.frame=cell.temPSwitch.frame; Xuanduo3fModel*model3=self.dataModel; - int mac=[dataContorl hexToTen:model3.temperature]; + int mac=[dataContorl hexToTen:model3.heatingTemperature]; //float TPlabel=mac/10+(mac%10)*0.1; float temp = mac/10.0; @@ -307,12 +316,31 @@ static NSString *setTimerflag = @"SetTimerCell"; cell.switchBtn.tag = kSwitchBtnTag + indexPath.row; [cell.switchBtn addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventTouchUpInside]; XuanduoTimerGroup *group = [dataArr objectAtIndex:havePlus?indexPath.row+1:indexPath.row]; - BOOL isOn = NO; - if ([group.status isEqualToString:@"01"]) { - isOn = YES; + cell.model=group; + if ([group isKindOfClass:[XuanduoTimerGroup class]]) + { + BOOL isOn = NO; + if ([group.status isEqualToString:@"01"]) { + isOn = YES; + } + [cell configTitleLabel:[NSString stringWithFormat:@"时段%@",group.groupNumber] timer:group.time switchStatus:isOn]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + } + else if([group isKindOfClass:[XuanduoCycleModel class]]) + { + XuanduoCycleModel*model=group; + BOOL isOn = NO; + if ([model.status isEqualToString:@"00"]) { + isOn = YES; + } + + + + [cell configTitleLabel:@"循环开关" timer:[NSString stringWithFormat:@" %d分钟",[dataContorl hexToTen:model.lastTime]] switchStatus:isOn]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + } - [cell configTitleLabel:[NSString stringWithFormat:@"时段%@",group.groupNumber] timer:group.time switchStatus:isOn]; - cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell; } } @@ -462,7 +490,7 @@ static NSString *setTimerflag = @"SetTimerCell"; }else if (indexPath.section==1){ //换水提醒日期选择 - _remindPic=[[remindCyclePic alloc]init]; + _remindPic=[[remindCyclePic alloc]initWithFrame:CGRectMake(0, 0, kScreenSize.width, kScreenSize.height) type:self.currentdevice.type]; _remindPic.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height); _remindPic.type=self.currentdevice.type; @@ -479,11 +507,27 @@ static NSString *setTimerflag = @"SetTimerCell"; [_remindPic.sureBtn addTarget:self action:@selector(xuToremindCyclePicDone) forControlEvents:UIControlEventTouchUpInside]; [self huanShuiMainQueue]; }else { - UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:_indexPath]; + SetTimerCell *cell = [self.tableView cellForRowAtIndexPath:_indexPath]; if ([cell isKindOfClass:[PlusTableViewCell class]]) { return; } - [self addTimer:nil]; + else if([cell isKindOfClass:[SetTimerCell class]]&&[cell.model isKindOfClass:[XuanduoCycleModel class]]) + { + //恒温设置 + _cycleModel=cell.model; + _remindPic=[[remindCyclePic alloc]initWithFrame:CGRectMake(0, 0, kScreenSize.width, kScreenSize.height) type:@"cycle"]; + _remindPic.type=@"cycle"; + + _remindPic.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height); + [self.view.window addSubview:_remindPic]; + [_remindPic.sureBtn addTarget:self action:@selector(xuToremindCyclePicDone) forControlEvents:UIControlEventTouchUpInside]; + [self huanShuiMainQueue]; + } + else + { + [self addTimer:nil]; + + } } } @@ -530,6 +574,15 @@ static NSString *setTimerflag = @"SetTimerCell"; }else { _selectSection = btn.tag - kBtnTag; ReadTimerModel *readModel = [[ReadTimerModel alloc] init]; + //杀菌不定时 + if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]&&(_selectSection - 2)==2) + { + readModel.functionCode=@"19";//读取 + } + else + { + readModel.functionCode=@"16"; + } readModel.sendmacId =self.currentdevice.macAddress; readModel.resavemacId = self.currentdevice.macAddress; readModel.crc16str=@"0000"; @@ -584,82 +637,120 @@ static NSString *setTimerflag = @"SetTimerCell"; timerModel.resavemacId = self.currentdevice.macAddress; timerModel.crc16str=@"0000"; XuanduoTimerGroup *group = [dataArr objectAtIndex:(havePlus?index+1:index)]; - NSString*hexDateString1=[dataContorl dateStringToHexString:group.startTime]; - NSString*hexDateString2=[dataContorl dateStringToHexString:group.endTime]; - timerModel.selectorTime=[NSString stringWithFormat:@"%@%@",hexDateString1,hexDateString2]; - timerModel.groupNumber = [dataContorl groupNumberTohex:group.groupNumber.integerValue]; - if ([group.status isEqualToString:@"01"]) { - timerModel.isOn = @"00"; - }else { - timerModel.isOn = @"01"; - } - - ReadTimerModel *readModel = [[ReadTimerModel alloc] init]; - readModel.sendmacId =self.currentdevice.macAddress; - readModel.resavemacId = self.currentdevice.macAddress; - readModel.crc16str=@"0000"; - switch (_selectSection - 2) { - case 0: //循环泵 - { - timerModel.selectorNumber = @"04"; - if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) - { - timerModel.selectorNumber=@"01"; - } - } - break; - case 1: //增氧 - { - timerModel.selectorNumber = @"01"; - - if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) - { - timerModel.selectorNumber=@"02"; - } + if ([group isKindOfClass: [XuanduoTimerGroup class] ]) { + NSString*hexDateString1=[dataContorl dateStringToHexString:group.startTime]; + NSString*hexDateString2=[dataContorl dateStringToHexString:group.endTime]; + timerModel.selectorTime=[NSString stringWithFormat:@"%@%@",hexDateString1,hexDateString2]; + timerModel.groupNumber = [dataContorl groupNumberTohex:group.groupNumber.integerValue]; + if ([group.status isEqualToString:@"01"]) { + timerModel.isOn = @"00"; + }else { + timerModel.isOn = @"01"; + } + + ReadTimerModel *readModel = [[ReadTimerModel alloc] init]; + readModel.sendmacId =self.currentdevice.macAddress; + readModel.resavemacId = self.currentdevice.macAddress; + readModel.crc16str=@"0000"; + switch (_selectSection - 2) { + case 0: //循环泵 + { + timerModel.selectorNumber = @"04"; + if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + timerModel.selectorNumber=@"01"; + } + } + break; + case 1: //增氧 + { + timerModel.selectorNumber = @"01"; + + if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + timerModel.selectorNumber=@"02"; + } - } - break; - case 2: //灯光1 - { - timerModel.selectorNumber = @"02"; - - if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) - { - timerModel.selectorNumber=@"03"; - } + } + break; + case 2: //灯光1 + { + timerModel.selectorNumber = @"02"; + + if([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + timerModel.selectorNumber=@"03"; + } - } - break; - case 3: //灯光2 - { - timerModel.selectorNumber = @"03"; - } - break; - case 4: //造浪泵 - { - timerModel.selectorNumber = @"06"; - } - break; - case 5: //杀菌灯 - { - timerModel.selectorNumber = @"05"; - } - break; - default: - break; + } + break; + case 3: //灯光2 + { + timerModel.selectorNumber = @"03"; + } + break; + case 4: //造浪泵 + { + timerModel.selectorNumber = @"06"; + } + break; + case 5: //杀菌灯 + { + timerModel.selectorNumber = @"05"; + } + break; + default: + break; + } + NSString*selectorString=[NSString stringWithFormat:@"%@%@%@%@%@%@",timerModel.description,timerModel.selectorNumber,timerModel.groupNumber,timerModel.isOn,timerModel.selectorTime,timerModel.crc16str]; + + NSData*selctorData=[dataContorl stringToHexData:selectorString]; + [[Socketsingleton sharedInstance] soketWriteData:selctorData]; + [_indicatorView startAnimating]; + + readModel.selectorNumber = timerModel.selectorNumber; + NSString*readString=[NSString stringWithFormat:@"%@%@%@",readModel.description,readModel.selectorNumber,readModel.crc16str]; + NSLog(@"read str = %@",readString); + NSData*readData=[dataContorl stringToHexData:readString]; + [[Socketsingleton sharedInstance] soketWriteData:readData]; + [_indicatorView startAnimating]; } - NSString*selectorString=[NSString stringWithFormat:@"%@%@%@%@%@%@",timerModel.description,timerModel.selectorNumber,timerModel.groupNumber,timerModel.isOn,timerModel.selectorTime,timerModel.crc16str]; - - NSData*selctorData=[dataContorl stringToHexData:selectorString]; - [[Socketsingleton sharedInstance] soketWriteData:selctorData]; - [_indicatorView startAnimating]; - - readModel.selectorNumber = timerModel.selectorNumber; - NSString*readString=[NSString stringWithFormat:@"%@%@%@",readModel.description,readModel.selectorNumber,readModel.crc16str]; - NSLog(@"read str = %@",readString); - NSData*readData=[dataContorl stringToHexData:readString]; - [[Socketsingleton sharedInstance] soketWriteData:readData]; - [_indicatorView startAnimating]; + else if ([group isKindOfClass: [XuanduoCycleModel class] ]) + { + baseModel*tempModel=[[baseModel alloc]init]; + tempModel.sendmacId =self.currentdevice.macAddress; + tempModel.resavemacId =self.currentdevice.macAddress; + tempModel.functionCode=@"18"; + tempModel.massagelegth=@"17"; + + + + if ([_cycleModel.status isEqualToString:@"01"]) { + _cycleModel.status = @"00"; + }else { + _cycleModel.status = @"01"; + } + + + NSString*minString=[NSString stringWithFormat:@"%@%@%@%@%@%@",tempModel.description,_cycleModel.lightNumber,_cycleModel.lastTime,_cycleModel.gapTime,_cycleModel.status,@"0000"]; + + NSData*tempData=[dataContorl stringToHexData:minString]; + [[Socketsingleton sharedInstance] soketWriteData:tempData]; + + + + baseModel*readModel=[[baseModel alloc]init]; + readModel.sendmacId =self.currentdevice.macAddress; + readModel.resavemacId =self.currentdevice.macAddress; + readModel.functionCode=@"19"; + readModel.massagelegth=@"12"; + + NSString*readString=[NSString stringWithFormat:@"%@%@%@%@%@%@",readModel.description,_cycleModel.lightNumber,@"0000"]; + + NSData*readData=[dataContorl stringToHexData:readString]; + [[Socketsingleton sharedInstance] soketWriteData:readData]; + } + } - (void)addTimer:(UIButton *)btn { @@ -1056,7 +1147,7 @@ static NSString *setTimerflag = @"SetTimerCell"; if (_indexPath.section-2==_titieArr.count) { Xuanduo3fModel*model3=self.dataModel; - int mac=[dataContorl hexToTen:model3.temperature]; + int mac=[dataContorl hexToTen:model3.heatingTemperature]; //float TPlabel=mac/10+(mac%10)*0.1; NSInteger temp = mac/10.0; @@ -1068,6 +1159,21 @@ static NSString *setTimerflag = @"SetTimerCell"; return; } + else if ([_remindPic.type isEqualToString:@"cycle"]) + { + + int mac=[dataContorl hexToTen:_cycleModel.lastTime]; + + //float TPlabel=mac/10+(mac%10)*0.1; + NSInteger temp = mac; + if (temp<1) + { + temp=1; + } + [_remindPic.pic selectRow:temp-1 inComponent:0 animated:NO]; + + return; + } else if (_remindPic.picViewResultString !=nil || (_remindPic.picViewResultString ==nil && self.waterInfmodel.remindcycle !=0 )) { NSArray*shijianArr=[_remindPic.picArr objectAtIndex:0]; @@ -1167,7 +1273,7 @@ static NSString *setTimerflag = @"SetTimerCell"; baseModel*tempModel=[[baseModel alloc]init]; tempModel.sendmacId =self.currentdevice.macAddress; tempModel.resavemacId =self.currentdevice.macAddress; - tempModel.functionCode=@"0E"; + tempModel.functionCode=@"14"; tempModel.massagelegth=@"13"; @@ -1176,12 +1282,65 @@ static NSString *setTimerflag = @"SetTimerCell"; int newIntString=intString*10; NSString*temp =[dataContorl tpIntStringToFourHex:newIntString]; - NSString*minString=[NSString stringWithFormat:@"%@%@%%@",tempModel.description,temp,@"0000"]; + NSString*minString=[NSString stringWithFormat:@"%@%@%@",tempModel.description,temp,@"0000"]; NSLog(@"minstring = %@",minString); NSData*tempData=[dataContorl stringToHexData:minString]; [[Socketsingleton sharedInstance] soketWriteData:tempData]; + } + else if ([_remindPic.type isEqualToString:@"cycle"]) + { + SetTimerCell*cell=[self.tableView cellForRowAtIndexPath:_indexPath]; + NSString *str=_remindPic.picViewResultString; + if (str==nil) { + //str=@"1"; + + NSLog(@"ni hua dong tai kuai"); + + str=[NSString stringWithFormat:@"%ld",(long)self.waterInfmodel.remindcycle]; + + [_remindPic makeToast:@"请设置杀菌持续时间"]; + return; + } + + + cell.timerLabel.text=[NSString stringWithFormat:@"%d分钟",str.intValue]; + //设置换水日期 + ; + [_remindPic removeFromSuperview]; + baseModel*tempModel=[[baseModel alloc]init]; + tempModel.sendmacId =self.currentdevice.macAddress; + tempModel.resavemacId =self.currentdevice.macAddress; + tempModel.functionCode=@"18"; + tempModel.massagelegth=@"17"; + + + + int intString = [str intValue]; + + + NSString*temp =[dataContorl tpIntStringToFourHex:intString]; + _cycleModel.lastTime=temp; + NSString*minString=[NSString stringWithFormat:@"%@%@%@%@%@%@",tempModel.description,_cycleModel.lightNumber,_cycleModel.lastTime,_cycleModel.gapTime,_cycleModel.status,@"0000"]; + NSLog(@"minstring = %@",minString); + NSData*tempData=[dataContorl stringToHexData:minString]; + [[Socketsingleton sharedInstance] soketWriteData:tempData]; + + + baseModel*readModel=[[baseModel alloc]init]; + readModel.sendmacId =self.currentdevice.macAddress; + readModel.resavemacId =self.currentdevice.macAddress; + readModel.functionCode=@"19"; + readModel.massagelegth=@"12"; + + NSString*readString=[NSString stringWithFormat:@"%@%@%@%@%@%@",readModel.description,_cycleModel.lightNumber,@"0000"]; + + NSData*readData=[dataContorl stringToHexData:readString]; + [[Socketsingleton sharedInstance] soketWriteData:readData]; + + + } } @@ -1392,6 +1551,20 @@ static NSString *setTimerflag = @"SetTimerCell"; [self.indicatorView stopAnimating]; [self.tableView reloadData]; } + else if (_selectSection-2<_titieArr.count && _selectSection-2>=0 && [readTimer isEqualToString:@"0119"]) { + + _cycleModel=[[XuanduoCycleModel alloc]init]; + [Xuanduo2DataUtility readCycleSocketDataWithBackMsgModel:_cycleModel addWithBackStr:string1 type:self.currentdevice.type]; + NSMutableArray *dataArr = [self.timeDic objectForKey:_titieArr[_selectSection-2]]; + [dataArr removeAllObjects]; + + [dataArr addObject:_cycleModel]; + + + [self.XuTohud hidmyHud]; + [self.indicatorView stopAnimating]; + [self.tableView reloadData]; + } if ([readTimer isEqualToString:@"0108"] || [readTimer isEqualToString:@"0105"]) { [Xuanduo2DataUtility readSocketDataWithBackMsgModel:self.dataModel addWithBackData:data type:self.currentdevice.type]; [self refreshWithData:self.dataModel]; diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.h b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.h index 4f5e915..91e4121 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.h +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.h @@ -43,6 +43,16 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) NSMutableArray *groupModelArr; +@end + +@interface XuanduoCycleModel : NSObject + +/// 灯的序号 +@property (nonatomic, strong) NSString *lightNumber; +@property (nonatomic, strong) NSString *lastTime; +@property (nonatomic, strong) NSString *gapTime; +@property (nonatomic, strong) NSString *status; + @end NS_ASSUME_NONNULL_END diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.m index b48f801..358f081 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2TimerModel.m @@ -15,3 +15,8 @@ @implementation Xuanduo2TimerModel @end + +@implementation XuanduoCycleModel + +@end + diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m index 538dda6..dc0c055 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m @@ -27,6 +27,7 @@ #import "JHRefresh.h" #import "searchDeviceModel.h" #import "PetStoresViewController.h" +#import "UIImage+WaterMark.h" #define kBtnTag 100 @@ -65,6 +66,8 @@ @property(nonatomic) BOOL isconnect;// socket 是否连接 @property (weak, nonatomic) IBOutlet UIView *contentView; @property (weak, nonatomic) IBOutlet UIImageView *imageView; +@property(nonatomic,strong) XuanduoCycleModel *cycleModel; + @end @@ -254,13 +257,46 @@ //[_HUD hide:YES]; [self.XuTohud hidmyHud]; [self endRefreshing]; - NSLog(@"123124124"); + + NSString*string1=[dataContorl dataToHexString:data]; + NSLog(@"return str == %@",string1); + NSString *readTimer = [string1 substringToIndex:4]; - - [Xuanduo2DataUtility readSocketDataWithBackMsgModel:self.dataModel addWithBackData:data type:self.currentDevice.type]; - [self setTemperature]; + + + + + + if ([readTimer isEqualToString:@"0119"]) + { + + _cycleModel=[[XuanduoCycleModel alloc]init]; + [Xuanduo2DataUtility readCycleSocketDataWithBackMsgModel:_cycleModel addWithBackStr:string1 type:self.currentDevice.type]; + if (_cycleModel.lastTime.length) + { + UInt64 mac1=[dataContorl hexToTen:_cycleModel.lastTime]; + + //float TPlabel=mac/10+(mac%10)*0.1; + float temp1 = mac1/10.0; + NSString *stringTemp = [NSString stringWithFormat:@"%.1f℃",temp1]; + UIImage*uvNomal=[UIImage imageNamed:@"杀菌关"]; + uvNomal=[uvNomal imageWaterMarkWithString:stringTemp rect:CGRectMake(140, 60, 60, 60) attribute:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:30]}]; + [self.light1 setImage:uvNomal forState:UIControlStateNormal]; + + UIImage*uvsel=[UIImage imageNamed:@"杀菌开"]; + uvsel=[uvsel imageWaterMarkWithString:stringTemp rect:CGRectMake(140, 60, 60, 60) attribute:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:30]}]; + [self.light1 setImage:uvsel forState:UIControlStateSelected]; + } + } + else + { + [Xuanduo2DataUtility readSocketDataWithBackMsgModel:self.dataModel addWithBackData:data type:self.currentDevice.type]; + [self setTemperature]; + + } + if (self.dataModel) { _offLineLabel.hidden = YES; @@ -268,6 +304,25 @@ _offLineLabel.hidden = NO; } [Xuanduo2DataUtility resetNewXuanduoButtonState:self.uvLight gasPumpLight:self.gasPumpLight light1:self.light1 light2:self.light2 waveLight:self.waveLight huliLight:self.huliLight waterLight:self.waterLight heatLight:self.heatLight withModel:self.dataModel type:self.currentDevice.type]; + + //杀菌灯的状态 + + +} + +-(void)readCycleWithNumber:(NSString*)num +{ + baseModel*readModel=[[baseModel alloc]init]; + readModel.sendmacId =self.currentDevice.macAddress; + readModel.resavemacId =self.currentDevice.macAddress; + readModel.functionCode=@"19"; + readModel.massagelegth=@"12"; + + NSString*readString=[NSString stringWithFormat:@"%@%@%@",readModel.description,num,@"0000"]; + + NSData*readData=[dataContorl stringToHexData:readString]; + [[Socketsingleton sharedInstance] soketWriteData:readData]; + } -(void)ifishDeviceLogInFail{ @@ -276,6 +331,7 @@ -(void)ifishDeviceLogInSuccees{ + [self readCycleWithNumber:@"03"]; } -(void)ifishSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{ diff --git a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m index e9b46cd..2a45f58 100644 --- a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m +++ b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m @@ -399,7 +399,9 @@ Assign BOOL isPush; petStores[storeName]=array; } - else { + + + { [deviceArr insertObject:devicemodel atIndex:0]; } @@ -848,12 +850,17 @@ Assign BOOL isPush; } for (DeviceModel *device in deivceArr) { - FormatTankAddCamera *deviceListModel =[[FormatTankAddCamera alloc] init]; - deviceListModel.device = device; - deviceListModel.type = @"tank"; - deviceListModel.deviceName = device.showName; - deviceListModel.imgeaName = @"home_iocn_aquarium"; - [self.totalArr addObject:deviceListModel]; + + if (!device.storeName.length) + { + FormatTankAddCamera *deviceListModel =[[FormatTankAddCamera alloc] init]; + deviceListModel.device = device; + deviceListModel.type = @"tank"; + deviceListModel.deviceName = device.showName; + deviceListModel.imgeaName = @"home_iocn_aquarium"; + [self.totalArr addObject:deviceListModel]; + + } } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m index 89d2792..4455520 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m @@ -64,6 +64,7 @@ #import "RuiMeiSetViewController.h" #import "Xuanduo2SettingController.h" #import "MessageAlertView.h" +#import "CreatErWeiMaController.h" //上部分视频封装 下部分分段控制器 封装 (下一步代码优化) @interface IfishP2PMonitorController () { @@ -347,12 +348,13 @@ Strong UIImage *screenShotImage;//截图 }); } ready:^{ - [self.view makeToast:@"连接成功"]; + //呼叫成功操作 NSLog(@"连接摄像头成功 当前所在线程为%@",[NSThread currentThread]); //隐藏呼叫中的UI dispatch_async(dispatch_get_main_queue(), ^{ //隐藏旋转按钮 + [self.view makeToast:@"连接成功"]; [weakSelf hiddenMonitoringUI:YES callWithErrorType:100 isReCall:NO]; // [weakSelf didHiddenMonitorUIWith:YES]; @@ -583,7 +585,47 @@ Strong UIImage *screenShotImage;//截图 CGFloat controlSegY= CGRectGetMaxY(self.canvasView.frame); IifshSegmentView *seg = [[IifshSegmentView alloc] initWithFrame:CGRectMake(0.0, controlSegY,kScreenSize.width, segMentH)]; seg.segDelegate = self; - [seg initleftTitle:@"摄像头" addRightTitle:@"水族箱" isSelectStyle:YES]; + NSString*title=@"水族箱"; + NSArray*devicearray=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; + + BOOL contain3F=NO; + BOOL contain2F=NO; + + for (DeviceModel*model in devicearray) + { + if ([model.type isEqualToString:DECICE_TYPE_XUANDUO2F]) + { + contain2F=YES; + } + if ([model.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + contain3F=YES; + } + + } + + if (contain2F) + { + if (contain3F) + { + title=@"设备"; + } + else + { + title=@"水族箱"; + } + } + else if(contain3F) + { + title=@"宠物笼"; + + } + else + { + title=@"水族城"; + } + + [seg initleftTitle:@"摄像头" addRightTitle:title isSelectStyle:YES]; self.segControl = seg; [self.view addSubview:seg]; @@ -629,6 +671,11 @@ Strong UIImage *screenShotImage;//截图 [weakSelf delectCamera]; }else if (tag == 2){ + //删除摄像头 + [weakSelf fenXiangSheBei]; + + } + else if (tag == 3){ //检查设备更新 if ([weakSelf.player isPlaying]) { @@ -665,8 +712,8 @@ Strong UIImage *screenShotImage;//截图 [self.view addSubview:self.popView]; NSArray *titleImgs =nil; NSArray *titles=nil; - titleImgs = @[@"ifishdropview_edite_device",@"ifishdropview_delect_device",@"equipment_icon_equipmentupdate"]; - titles=@[@"修改名称",@"删除设备",@"设备升级"]; + titleImgs = @[@"ifishdropview_edite_device",@"ifishdropview_delect_device",@"Ifish_share_device",@"equipment_icon_equipmentupdate"]; + titles=@[@"修改名称",@"删除设备",@"分享设备",@"设备升级"]; [self.popView loadInfoWithTitle:titles Icons:titleImgs]; } @@ -747,6 +794,15 @@ Strong UIImage *screenShotImage;//截图 [self presentViewController:ac2 animated:YES completion:nil]; } +-(void)fenXiangSheBei{ + + CreatErWeiMaController*vc=[[CreatErWeiMaController alloc]init]; + vc.isNewdevice = YES; + vc.deviceid=self.contact.cameraId; + + [self.navigationController pushViewController:vc animated:YES]; + +} -(void)deleteCameraAtRequset{ @@ -998,14 +1054,14 @@ Strong UIImage *screenShotImage;//截图 }else{ UIButton *notbindBtn=[UIButton buttonWithType:UIButtonTypeCustom]; - NSString *title=@"您暂未绑定水族箱,前往绑定。"; + NSString *title=@"您暂未绑定水族箱或宠物笼,前往绑定。"; [notbindBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:title]; NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - [paragraphStyle setLineSpacing:8]; + [paragraphStyle setLineSpacing:12]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [title length])]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(9,4)]; - [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0,9)]; + [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0,13)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange([title length]-1,1)]; [notbindBtn setAttributedTitle:attributedString forState:UIControlStateNormal]; [notbindBtn sizeToFit]; @@ -4216,35 +4272,60 @@ GWP2PCallErrorNotSupport, -(void)selectXuanduo2Index:(NSIndexPath *)index withBackModel:(Xuanduo2Model *)backModel{ if (backModel) { - if (index.row == 3) { - //循环泵 - manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init]; - [[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel]; - NSString*switchString=manulModel.description; - manulModel.lightNumber = @"04"; - if([[backModel.waterPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) - { - manulModel.switchBtn = @"01"; - }else{ - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认关闭循环泵?" preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil]; - UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - manulModel.switchBtn = @"00"; - manulModel.crc16Str = @"0000"; - NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; - NSData*manulData=[dataContorl stringToHexData:switchString2]; - [[Socketsingleton sharedInstance] soketWriteData:manulData]; - }]; - [alertController addAction:cancelAction]; - [alertController addAction:sureAction]; - [self.navigationController presentViewController:alertController animated:YES completion:nil]; - return; - } + if (index.row == 3) + { + if ([backModel isKindOfClass:[Xuanduo2Model class]]) { + //循环泵 + manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init]; + [[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel]; + NSString*switchString=manulModel.description; + manulModel.lightNumber = @"04"; + if([[backModel.waterPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) + { + manulModel.switchBtn = @"01"; + }else{ + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认关闭循环泵?" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil]; + UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + manulModel.switchBtn = @"00"; + manulModel.crc16Str = @"0000"; + NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; + NSData*manulData=[dataContorl stringToHexData:switchString2]; + [[Socketsingleton sharedInstance] soketWriteData:manulData]; + }]; + [alertController addAction:cancelAction]; + [alertController addAction:sureAction]; + [self.navigationController presentViewController:alertController animated:YES completion:nil]; + return; + } + manulModel.crc16Str = @"0000"; + NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; + NSData*manulData=[dataContorl stringToHexData:switchString2]; + [[Socketsingleton sharedInstance] soketWriteData:manulData]; + } + else + { + //循环泵 + Xuanduo3fModel*backModel=backModel; manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init]; + [[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel]; + NSString*switchString=manulModel.description; + manulModel.lightNumber = @"01"; + if([[backModel.light substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) + { + manulModel.switchBtn = @"01"; + }else + { + manulModel.switchBtn = @"00"; + } + + manulModel.crc16Str = @"0000"; - NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; - NSData*manulData=[dataContorl stringToHexData:switchString2]; - [[Socketsingleton sharedInstance] soketWriteData:manulData]; + NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; + NSData*manulData=[dataContorl stringToHexData:switchString2]; + [[Socketsingleton sharedInstance] soketWriteData:manulData]; + + } }else { _xuanduoPicView=[[HaveHotCoolWenDuPicview alloc] init]; _xuanduoPicView.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height); diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm index f6a534c..d1b0318 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm @@ -473,10 +473,17 @@ self.attentionLabel.text=@"1、请长按摄像头背后复位孔,复位摄像 [[GWP2PClient sharedClient] setDeviceInitialPassword:self.lastSetPassword withDeviceID:deviceIP completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { NSLog(@"success:%i %@",success,dataDictionary); [self resetPassWord];//初始化密码 - [self bindCameraDevice]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self bindCameraDevice]; + + }); }]; }else{//如果已经设置过初始密码,则直接使用 - [self bindCameraDevice]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self bindCameraDevice]; + + }); } } @@ -574,6 +581,7 @@ self.attentionLabel.text=@"1、请长按摄像头背后复位孔,复位摄像 contact.contactType = CONTACT_TYPE_UNKNOWN; [[FListManager sharedFList] insert:contact]; //设置密码成功后爱鱼奇用户绑定摄像头 + [self ifishUserBindcameraIdBy:self.deviceID]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/BootomViewSoketBackMasgConreol.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/BootomViewSoketBackMasgConreol.m index cdf2df2..5e33a69 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/BootomViewSoketBackMasgConreol.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/BootomViewSoketBackMasgConreol.m @@ -10,6 +10,7 @@ #import "IfishDeviceInfo.h" #import "RuSunGuiDeng.h" #import "XuanduoHuliModel.h" +#import "xuanduo3fModel.h" @implementation BootomViewSoketBackMasgConreol @@ -92,6 +93,9 @@ }else if ([type isEqualToString:DECICE_TYPE_XUANDUO2F]){ str=[str substringWithRange:NSMakeRange(60,IFISH_TEMPERATURE_BYTE2)]; } + else if ([type isEqualToString:DECICE_TYPE_XUANDUO3F]){ + str=[str substringWithRange:NSMakeRange(46,IFISH_TEMPERATURE_BYTE2)]; + } UInt64 mac=[dataContorl hexToTen:str]; NSLog(@"%llu",mac); @@ -927,7 +931,17 @@ indexPath { if (index == 0) { //循环 manulModel.lightNumber = @"04"; - if([[model.waterPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) + + NSString*state; + if ([model isKindOfClass:[Xuanduo3fModel class]]) + { + state=model.gasPump; + manulModel.lightNumber=@"01"; + } + else{ + state= model.waterPump; + } + if([[state substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) { manulModel.switchBtn = @"01"; @@ -939,6 +953,11 @@ indexPath { }else if (index == 1){ //增氧 manulModel.lightNumber = @"01"; + if ([model isKindOfClass:[Xuanduo3fModel class]]) + { + manulModel.lightNumber=@"02"; + } + if([[model.gasPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) { @@ -953,7 +972,16 @@ indexPath { manulModel.lightNumber = @"02"; - if([[model.light1 substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) + NSString*state; + if ([model isKindOfClass:[Xuanduo3fModel class]]) + { + state=model.uvLamp; + manulModel.lightNumber=@"03"; + } + else{ + state= model.light1; + } + if([[state substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) { manulModel.switchBtn = @"01"; @@ -967,7 +995,17 @@ indexPath { manulModel.lightNumber = @"03"; - if([[model.light2 substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) + NSString*state; + if ([model isKindOfClass:[Xuanduo3fModel class]]) + { + state=((Xuanduo3fModel*)model).constTmep; + manulModel.lightNumber=@"04"; + } + else{ + state= model.light2; + } + + if([[state substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"]) { manulModel.switchBtn = @"01"; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.h b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.h index 4fe9f9f..07478e1 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.h +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.h @@ -154,7 +154,7 @@ @property(nonatomic,strong) RunSun84Protocol *ruSun84Back; @property (nonatomic, strong) RuiMeiProtocolModel *ruiMeiBack; @property(nonatomic,strong) SongNuoBDProtocol *songNuoBDBack; -@property(nonatomic,strong) Xuanduo2Model *xuanduoBack; +@property(nonatomic,strong) id xuanduoBack; -(void)setTabViewWithFrame:(CGRect)frame; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.m index 3b29a93..626d65f 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/MonitorBootmView.m @@ -237,14 +237,14 @@ UIButton *notbindBtn=[UIButton buttonWithType:UIButtonTypeCustom]; - NSString *title=@"您暂无可用的水族箱,前往绑定。"; + NSString *title=@"您暂无可用的水族箱或宠物笼,前往绑定。"; [notbindBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:title]; NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - [paragraphStyle setLineSpacing:8]; + [paragraphStyle setLineSpacing:12]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [title length])]; - [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(9,5)]; + [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(13,5)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0,10)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange([title length]-1,1)]; [notbindBtn setAttributedTitle:attributedString forState:UIControlStateNormal]; @@ -307,7 +307,7 @@ //[headerView setBackgroundColor:XBGAlpha]; [headerView setBackgroundColor:RGB(242, 242, 242)]; UILabel *readLabel=[[UILabel alloc] init ]; - readLabel.text = @"请选择一个水族箱,和摄像头建立关系"; + readLabel.text = @"请选择一个水族箱或宠物笼,和摄像头建立关系"; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:readLabel.text ]; @@ -618,7 +618,11 @@ return 3 + 5; } else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]){ return 3 + self.device.controlAmount.integerValue + 1; - }else { + } + else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ + return 3 + self.device.controlAmount.integerValue + 1; + } + else { if (self.device.controlAmount.integerValue ==5) { @@ -708,7 +712,32 @@ if (!cell || [cell.templabel.text containsString:@"kwh"]) { return; } - UInt64 mac = [dataContorl hexToTen:_xuanduoBack.electricity]; + Xuanduo2Model*model=_xuanduoBack; + UInt64 mac = [dataContorl hexToTen:model.electricity]; + NSString *stringTemp = [NSString stringWithFormat:@"%llukwh",mac/10.0]; + cell.templabel.font = [UIFont systemFontOfSize:37]; + cell.templabel.textColor = RGB(253, 188, 63); + [cell.templabel setAttributedText:[NSString ls_changeFontAndColor:[UIFont systemFontOfSize:17] Color:nil TotalString:stringTemp SubStringArray:@[@"kwh"]]]; + if (!_switchTimer) { + _switchTimer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(changeTemp) userInfo:nil repeats:YES]; + [[NSRunLoop currentRunLoop] addTimer:_switchTimer forMode:NSRunLoopCommonModes]; + } + }else if(indexPath.row == 2) { + [self.MonitorBottomDelegate didselectXuanduo2SetttngWithData:self.device andBackModel:_xuanduoBack]; + } + } + else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ + if (!_xuanduoBack) { + [self makeToast:@"暂未连接"]; + return; + } + if (indexPath.row == 1) { + FishControlSecondCell *cell = [self.collectionView viewWithTag:ktempTag]; + if (!cell || [cell.templabel.text containsString:@"kwh"]) { + return; + } + Xuanduo3fModel*model=_xuanduoBack; + UInt64 mac = [dataContorl hexToTen:model.temperature]; NSString *stringTemp = [NSString stringWithFormat:@"%llukwh",mac/10.0]; cell.templabel.font = [UIFont systemFontOfSize:37]; cell.templabel.textColor = RGB(253, 188, 63); @@ -925,7 +954,7 @@ } [self makeToastActivity:CSToastPositionCenter]; - }else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]){ + }else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]||[self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ // 新绚多 if (!_xuanduoBack) { [self makeToast:@"暂未连接"]; @@ -1118,10 +1147,17 @@ if (!cell) { return; } - UInt64 mac = [dataContorl hexToTen:_xuanduoBack.waterTemperature]; - NSLog(@"%llu",mac); - //float TPlabel=mac/10+(mac%10)*0.1; - float temp = mac/10.0; + UInt64 mac = 0; + NSLog(@"%llu",mac); + if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]) { + Xuanduo2Model*model=(Xuanduo2Model*)_xuanduoBack; + mac=[dataContorl hexToTen:model.waterTemperature]; + } + else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + Xuanduo3fModel*model=(Xuanduo3fModel*)_xuanduoBack; + mac=[dataContorl hexToTen:model.temperature]; + } float temp = mac/10.0; NSString *stringTemp = [NSString stringWithFormat:@"%.1f",temp]; [cell setTemWith:stringTemp]; } @@ -1243,7 +1279,7 @@ [cell setSongNuoBDControBtnImg:self.btnImgArr addArr:self.btnOnImgArr atIndex:indexPath addBackModel:_songNuoBDBack]; - }else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]){ + }else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO2F]||[self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ if (!_xuanduoBack) { cell.controBtnImg.image = self.btnImgArr[indexPath.row - 3]; [self makeToast:@"连接设备中..."]; @@ -1487,7 +1523,21 @@ [UIImage imageNamed:@"shajun_selected"], [UIImage imageNamed:@"huli_selected"], [UIImage imageNamed:@"jiare_selected"]]; - }else{ + } + else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ + self.btnNameArr = @[@"照明",@"换气",@"杀菌",@"恒温"]; + + self.btnImgArr = @[[UIImage imageNamed:@"照明关"], + [UIImage imageNamed:@"换气关"], + [UIImage imageNamed:@"杀菌关"], + [UIImage imageNamed:@"恒温关"]]; + + self.btnOnImgArr = @[[UIImage imageNamed:@"照明开"], + [UIImage imageNamed:@"换气开"], + [UIImage imageNamed:@"杀菌开"], + [UIImage imageNamed:@"恒温开"]]; + } + else{ int controlAmount=[self.device.controlAmount intValue]; @@ -1802,7 +1852,16 @@ [Xuanduo2DataUtility readSocketDataWithBackMsgModel:_xuanduoBack addWithBackData:data type:DECICE_TYPE_XUANDUO2F]; self.temperature = [BootomViewSoketBackMasgConreol getTempNewWayWithSoketData:data adddeviceType:DECICE_TYPE_XUANDUO2F]; [self.collectionView reloadData]; - }else{ + }else if ([self.device.type isEqualToString:DECICE_TYPE_XUANDUO3F]){ + // 新绚多 + if (!_xuanduoBack) { + _xuanduoBack = [[Xuanduo3fModel alloc] init]; + } + [Xuanduo2DataUtility readSocketDataWithBackMsgModel:_xuanduoBack addWithBackData:data type:self.device.type]; + self.temperature = [BootomViewSoketBackMasgConreol getTempNewWayWithSoketData:data adddeviceType:DECICE_TYPE_XUANDUO3F]; + [self.collectionView reloadData]; + } + else{ int controlAmount=[devicemoel.controlAmount intValue]; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFirstCell.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFirstCell.m index 79b26ac..0c7b606 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFirstCell.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFirstCell.m @@ -29,6 +29,8 @@ UIView *hengLine=[[UIView alloc] initWithFrame:CGRectMake(0,self.frame.size.height -1,self.frame.size.width, 1)]; hengLine.backgroundColor = shuLine.backgroundColor = JWUIColorFromRGB(0xdddddd); [self addSubview:hengLine]; + [self bringSubviewToFront:self.factoryIcon]; + self.factoryIcon.hidden=NO; } @@ -38,12 +40,18 @@ -(void)intiFactoryImgWith:(DeviceModel *)devicemodel{ - [self.factoryIcon sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kGetLogUrl,devicemodel.logo]] placeholderImage:[UIImage imageNamed:@""]]; + + if (!self.factoryIcon.image) { + self.factoryIcon.image = [UIImage imageNamed:@"brandLogo_hold"]; + } + [self.factoryIcon sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kGetLogUrl,devicemodel.logo]] placeholderImage:[UIImage imageNamed:@"brandLogo_hold"]]; if (!self.factoryIcon) { self.factoryIcon.image = [UIImage imageNamed:@"greenbtn_big"]; } - + [self bringSubviewToFront:self.factoryIcon]; + self.factoryIcon.hidden=NO; + } @end diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFourthCell.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFourthCell.m index 5e072ef..e769328 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFourthCell.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/YseeCollectionCell/FishControlFourthCell.m @@ -7,6 +7,7 @@ // #import "FishControlFourthCell.h" +#import "xuanduo3fModel.h" @implementation FishControlFourthCell - (instancetype)initWithFrame:(CGRect)frame{ @@ -258,6 +259,10 @@ atIndex:(NSIndexPath *)indexPath addBackModel:(Xuanduo2Model*)model { + if ([model isKindOfClass:[Xuanduo2Model class]]) + { + + NSInteger index = indexPath.row - 3; if (index == 0) { @@ -307,7 +312,40 @@ addOffArr:imgOffArr]; } - + } + else if ([model isKindOfClass:[Xuanduo3fModel class]]) + { + + Xuanduo3fModel*xuan3fmodel=model; + NSInteger index = indexPath.row - 3; + if (index == 0) { + + NSString*stateString=[xuan3fmodel.light substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)]; + [self btnImgAtIndex:indexPath withStr:stateString addWithOnImg:imgOnArr + addOffArr:imgOffArr]; + }else if (index == 1){ + + NSString*stateString=[xuan3fmodel.gasPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)]; + [self btnImgAtIndex:indexPath withStr:stateString addWithOnImg:imgOnArr + addOffArr:imgOffArr]; + + }else if (index == 2){ + + NSString*stateString=[xuan3fmodel.uvLamp substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)]; + [self btnImgAtIndex:indexPath withStr:stateString addWithOnImg:imgOnArr + addOffArr:imgOffArr]; + + }else if (index == 3){ + + NSString*stateString=[xuan3fmodel.constTmep substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)]; + [self btnImgAtIndex:indexPath withStr:stateString addWithOnImg:imgOnArr + addOffArr:imgOffArr]; + + }else + { + NSLog(@"index=%ld",indexPath.row); + } + } } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/ifishdeviceListCell.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/ifishdeviceListCell.m index b3956fe..81f47a9 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/ifishdeviceListCell.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/yooseFishTankView/ifishdeviceListCell.m @@ -72,7 +72,7 @@ withdeviceName:(NSString *)nameStr{ - self.deviceNameLabel.text = [NSString stringWithFormat:@"水族箱:%@",nameStr]; + self.deviceNameLabel.text = nameStr; self.deviceNameLabel.textColor = [UIColor blackColor]; diff --git a/Ifish/controllers/erweima/CreatErWeiMaController.h b/Ifish/controllers/erweima/CreatErWeiMaController.h index f255d41..d2dc87c 100644 --- a/Ifish/controllers/erweima/CreatErWeiMaController.h +++ b/Ifish/controllers/erweima/CreatErWeiMaController.h @@ -14,6 +14,7 @@ @property (weak, nonatomic) IBOutlet UIImageView *erWeiMaView; @property (nonatomic,strong) DeviceModel *erdevicemodel; +@property (nonatomic, strong) NSString *deviceid; @end diff --git a/Ifish/controllers/erweima/CreatErWeiMaController.m b/Ifish/controllers/erweima/CreatErWeiMaController.m index 81999cd..2788300 100644 --- a/Ifish/controllers/erweima/CreatErWeiMaController.m +++ b/Ifish/controllers/erweima/CreatErWeiMaController.m @@ -42,7 +42,7 @@ // } //DeviceModel*model=[_arry objectAtIndex:0];//分享选中设备 - NSString*str=[NSString stringWithFormat:@"deviceId=%@",self.erdevicemodel.deviceId]; + NSString*str=[NSString stringWithFormat:@"deviceId=%@",self.erdevicemodel.deviceId.length?self.erdevicemodel.deviceId:[CommonUtils getNotNilStr:self.deviceid]]; self.erWeiMaView.image=[QRCodeGenerator qrImageForString:str imageSize:self.erWeiMaView.bounds.size.width]; } diff --git a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m index fe4ca46..7cc0f96 100644 --- a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m +++ b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m @@ -135,7 +135,7 @@ extern BOOL isfromCameraView; [self creatConnectStateUI]; //获取WiFi名称 [self getSSid]; - [self showStoreNameView]; + } - (void)updateUI { diff --git a/Ifish/models/wifiModel/sendmaseegemodel/ReadTimerModel.m b/Ifish/models/wifiModel/sendmaseegemodel/ReadTimerModel.m index 9eee4b3..9344418 100644 --- a/Ifish/models/wifiModel/sendmaseegemodel/ReadTimerModel.m +++ b/Ifish/models/wifiModel/sendmaseegemodel/ReadTimerModel.m @@ -13,7 +13,9 @@ { self.messagetype=@"00"; self.massagelegth=@"12"; - self.functionCode=@"16"; + if (!self.functionCode.length) { + self.functionCode=@"16"; + } return [NSString stringWithFormat:@"%@%@%@%@%@",self.messagetype,self.functionCode,self.sendmacId,self.resavemacId,self.massagelegth]; } diff --git a/Ifish/views/mypicView/remindCyclePic.m b/Ifish/views/mypicView/remindCyclePic.m index 5b00e2e..ace172c 100644 --- a/Ifish/views/mypicView/remindCyclePic.m +++ b/Ifish/views/mypicView/remindCyclePic.m @@ -52,6 +52,9 @@ else if ([self.type isEqualToString:@"temp"]) { title.text=@"恒温设置"; } + else if ([self.type isEqualToString:@"cycle"]) { + title.text=@"杀菌持续时长"; + } title.textAlignment=NSTextAlignmentCenter; @@ -118,6 +121,10 @@ _picArr=@[@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13" { _picArr=@[@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29",@"30",@"31",@"32",@"33",@"34",@"35",@"36",@"37",@"38",@"39",@"40",@"41",@"42",@"43",@"44",@"45",@"46",@"47",@"48",@"49",@"50",@"51",@"52",@"53",@"54",@"55",@"56",@"57",@"58",@"59",@"60",@"61",@"62",@"63",@"64",@"65",@"66",@"67",@"68",@"69",@"70",@"71",@"72",@"73",@"74",@"75",@"76",@"77",@"78",@"79",@"80"]]; } + else if ([self.type isEqualToString:@"cycle"]) + { + _picArr=@[@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29",@"30"]]; + } }