40
40
group_three = conf .GROUP_03
41
41
42
42
# api and bot settings
43
- SELECTION , DURATION = range (2 )
43
+ SELECTION , DURATION , GROUPING = range (3 )
44
44
# LIST_OF_ADMINS = ['mock to test']
45
45
list_of_admins = conf .admins
46
46
token = conf .token
@@ -148,6 +148,7 @@ def __selected_target(bot, update, selected_target):
148
148
logger .info ('Selection: {0}' .format (str (selected_target )))
149
149
__start_standby_timer (bot , update )
150
150
return DURATION
151
+ # end: set targets
151
152
152
153
153
154
# set water duration
@@ -219,7 +220,9 @@ def __duration(bot, update):
219
220
__water (bot , update , group_three [1 ])
220
221
221
222
elif target == str (lib .grouping ):
222
- logger .warning ("selected to water..." + str (selection ))
223
+ """ starts separate thread """
224
+ display .show_switch_group_duration (int (water_time ))
225
+
223
226
__water_group (bot , update , selection )
224
227
225
228
else :
@@ -237,30 +240,6 @@ def __all_off():
237
240
return
238
241
239
242
240
- # TODO: check if still needed!
241
- @run_async
242
- def __water_all (bot , update ):
243
- logger .info ('Duration: {0}' .format (water_time ))
244
- __stop_standby_timer (bot , update )
245
- update .message .reply_text (lib .water_on_all .format (target , water_time ),
246
- parse_mode = ParseMode .MARKDOWN , reply_markup = markup3 )
247
-
248
- """ starts separate thread """
249
- display .show_switch_group_duration (0 , int (water_time ))
250
-
251
- for channel in all_groups :
252
- utils .switch_on (channel )
253
- time .sleep (int (water_time ) * int (lib .time_conversion ))
254
- __all_off ()
255
-
256
- update .message .reply_text ('{0}{1}{2}' .format (
257
- __timestamp (), lib .water_off_all .format (water_time ), lib .msg_new_choice ),
258
- parse_mode = ParseMode .MARKDOWN , reply_markup = markup1 )
259
- display .show_off ()
260
- __start_standby_timer (bot , update )
261
- return
262
-
263
-
264
243
@run_async
265
244
def __water (bot , update , channel ):
266
245
logger .info ('Duration: {0}' .format (water_time ))
@@ -286,7 +265,7 @@ def __water_group(bot, update, group):
286
265
logger .info ('Duration: {0}' .format (water_time ))
287
266
logger .info ('Toggle {0}' .format (str (group )))
288
267
__stop_standby_timer (bot , update )
289
- update .message .reply_text (lib .water_on_group .format (target , water_time ),
268
+ update .message .reply_text (lib .water_on .format (target , water_time ),
290
269
parse_mode = ParseMode .MARKDOWN , reply_markup = markup3 )
291
270
292
271
for channel in group :
@@ -295,11 +274,12 @@ def __water_group(bot, update, group):
295
274
for channel in group :
296
275
utils .switch_off (channel )
297
276
update .message .reply_text ('{0}{1}{2}' .format (
298
- __timestamp (), lib .water_off_group .format (target , water_time ), lib .msg_new_choice ),
277
+ __timestamp (), lib .water_off .format (target , water_time ), lib .msg_new_choice ),
299
278
parse_mode = ParseMode .MARKDOWN , reply_markup = markup1 )
300
279
display .show_off ()
301
280
__start_standby_timer (bot , update )
302
281
return
282
+ # end watering targets
303
283
304
284
305
285
# get humidity and temperature values
@@ -350,27 +330,29 @@ def __emergency_stop_handler(bot, update, chat_data):
350
330
def __start_emergency_stop (bot , update ):
351
331
global emergency_job
352
332
emergency_job = jq .run_once (__job_stop_and_restart , 0 , context = update )
353
- logger .warning ("Initialize emergency stop immediately." )
333
+ logger .info ("Initialize emergency stop immediately." )
354
334
return
335
+ # end: emergency stop
355
336
356
337
357
338
# [#30] implement standby init after given time without user activity
358
339
def __start_standby_timer (bot , update ):
359
340
global timer_job
360
341
timer_job = jq .run_once (__job_stop_and_restart , conf .standby_timeout , context = update )
361
- logger .warning ("Init standby timer of {0} seconds, added to queue." .format (conf .standby_timeout ))
342
+ logger .info ("Init standby timer of {0} seconds, added to queue." .format (conf .standby_timeout ))
362
343
return
363
344
364
345
365
346
def __stop_standby_timer (bot , update ):
366
347
timer_job .schedule_removal ()
367
- logger .warning ("Timer job removed from the queue." )
348
+ logger .info ("Timer job removed from the queue." )
368
349
return
350
+ # end: standby
369
351
370
352
371
353
# job to stop and restart application
372
354
def __job_stop_and_restart (bot , job ):
373
- logger .warning ("Job: Stop and restart called!" )
355
+ logger .info ("Job: Stop and restart called!" )
374
356
stop_and_restart .stop_and_restart (job .context )
375
357
return
376
358
@@ -391,6 +373,7 @@ def __timestamp():
391
373
392
374
def __start_time ():
393
375
return utils .get_timestamp ()
376
+ # end: time stamps
394
377
395
378
396
379
# camera
@@ -404,13 +387,15 @@ def __cam_off():
404
387
logger .info ('Disable camera module.' )
405
388
os .system (conf .disable_camera )
406
389
return
390
+ # end: camera
407
391
408
392
409
- # grouping
410
- def __button (bot , update , chat_data ):
393
+ # [#31] grouping
394
+ def __push_button (bot , update , chat_data ):
411
395
global selection
412
396
query = update .callback_query
413
397
added_selection = str (query .data )
398
+
414
399
if not (added_selection == str (lib .btn_finished ) or added_selection == str (lib .cancel )):
415
400
if not selection .__contains__ (int (added_selection )):
416
401
selection += (int (added_selection ),)
@@ -420,13 +405,9 @@ def __button(bot, update, chat_data):
420
405
parse_mode = ParseMode .MARKDOWN ,
421
406
reply_markup = reply_markup )
422
407
423
- logger .info (selection )
424
-
425
- elif added_selection == str (lib .btn_finished ):
408
+ elif added_selection == str (lib .btn_finished ) and len (selection ) > 0 :
426
409
global target
427
410
target = lib .grouping
428
- logger .info ('current selection: ' + str (selection ))
429
- logger .info ('current target: ' + str (target ))
430
411
bot .delete_message (chat_id = query .message .chat_id ,
431
412
message_id = query .message .message_id )
432
413
bot .send_message (text = lib .msg_duration .format (target ),
@@ -444,30 +425,31 @@ def __button(bot, update, chat_data):
444
425
chat_id = query .message .chat_id ,
445
426
parse_mode = ParseMode .MARKDOWN ,
446
427
reply_markup = markup1 )
447
- logger .info (lib .msg_new_choice )
448
428
return SELECTION
449
429
450
430
451
- def __get_inline_btn (text , callback ):
452
- return InlineKeyboardButton (text , callback_data = callback )
453
-
454
-
455
- def __group (bot , update ):
431
+ def __group_menu (bot , update ):
456
432
global selection
457
433
selection = ()
458
434
logger .info ('Grouping mode called.' )
459
435
inline_keyboard = [
460
- [__get_inline_btn (lib .group1 [1 ], conf .RELAIS_01 ), __get_inline_btn (lib .group1 [2 ], conf .RELAIS_02 ),
461
- __get_inline_btn (lib .group1 [3 ], conf .RELAIS_03 ), __get_inline_btn (lib .group3 [1 ], conf .RELAIS_04 )],
462
- [__get_inline_btn (lib .group3 [2 ], conf .RELAIS_05 ), __get_inline_btn (lib .group2 [1 ], conf .RELAIS_06 ),
463
- __get_inline_btn (lib .group2 [2 ], conf .RELAIS_07 ), __get_inline_btn (lib .group2 [3 ], conf .RELAIS_08 )],
464
- [__get_inline_btn (lib .btn_finished , lib .btn_finished ), __get_inline_btn (lib .btn_cancel , lib .btn_cancel )]
436
+ [__get_btn (lib .group1 [1 ], conf .RELAIS_01 ), __get_btn (lib .group1 [2 ], conf .RELAIS_02 ),
437
+ __get_btn (lib .group1 [3 ], conf .RELAIS_03 ), __get_btn (lib .group3 [1 ], conf .RELAIS_04 )],
438
+ [__get_btn (lib .group3 [2 ], conf .RELAIS_05 ), __get_btn (lib .group2 [1 ], conf .RELAIS_06 ),
439
+ __get_btn (lib .group2 [2 ], conf .RELAIS_07 ), __get_btn (lib .group2 [3 ], conf .RELAIS_08 )],
440
+ [InlineKeyboardButton (lib .btn_finished , callback_data = lib .btn_finished ),
441
+ InlineKeyboardButton (lib .btn_cancel , callback_data = lib .btn_cancel )]
465
442
]
466
443
467
444
global reply_markup
468
445
reply_markup = InlineKeyboardMarkup (inline_keyboard )
469
446
update .message .reply_text (lib .msg_grouping , reply_markup = reply_markup , parse_mode = ParseMode .MARKDOWN )
470
- __start_standby_timer (bot , update )
447
+ return GROUPING
448
+
449
+
450
+ def __get_btn (text , callback ):
451
+ return InlineKeyboardButton ('{0} ({1})' .format (text , callback ), callback_data = callback )
452
+ # end: grouping
471
453
472
454
473
455
def main ():
@@ -482,53 +464,35 @@ def main():
482
464
483
465
dp = updater .dispatcher
484
466
485
- group_handler = CallbackQueryHandler (__button , pass_chat_data = True )
486
-
487
467
emergency_stop_handler = RegexHandler ('^{0}$' .format (str (lib .emergency_stop )),
488
468
__emergency_stop_handler ,
489
469
pass_chat_data = True )
490
470
ch = ConversationHandler (
491
471
entry_points = [CommandHandler ('start' , __start )],
492
472
states = {
493
- SELECTION : [RegexHandler (
494
- '^({0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11})$' .format (
495
- str (lib .group1 [1 ]),
496
- str (lib .group1 [2 ]),
497
- str (lib .group1 [3 ]),
498
- str (lib .group2 [1 ]),
499
- str (lib .group2 [2 ]),
500
- str (lib .group2 [3 ]),
501
- str (lib .group3 [1 ]),
502
- str (lib .group3 [2 ]),
503
- str (lib .panic ),
504
- str (lib .live_stream ),
505
- str (lib .reload ),
506
- str (selection )),
473
+ SELECTION : [RegexHandler ('^({0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10})$' .format (
474
+ str (lib .group1 [1 ]), str (lib .group1 [2 ]), str (lib .group1 [3 ]),
475
+ str (lib .group2 [1 ]), str (lib .group2 [2 ]), str (lib .group2 [3 ]),
476
+ str (lib .group3 [1 ]), str (lib .group3 [2 ]),
477
+ str (lib .panic ), str (lib .live_stream ), str (lib .reload )),
507
478
__selection ),
508
- RegexHandler (
509
- '^{0}$' .format (
510
- lib .stop_bot ),
511
- __stop ),
512
- RegexHandler (
513
- '^{0}$' .format (
514
- lib .grouping ),
515
- __group )
516
- ],
517
-
518
- DURATION : [RegexHandler (
519
- '^([0-9]+|{0}|{1})$' .format (
520
- str (lib .cancel ),
521
- str (lib .panic )),
522
- __duration ),
523
- RegexHandler (
524
- '^{0}$' .format (
525
- lib .stop_bot ),
526
- __stop )]
527
- },
479
+
480
+ RegexHandler ('^{0}$' .format (lib .stop_bot ), __stop ),
481
+ RegexHandler ('^{0}$' .format (lib .grouping ), __group_menu )],
482
+
483
+ DURATION : [RegexHandler ('^([0-9]+|{0}|{1})$' .format (str (lib .cancel ), str (lib .panic )), __duration ),
484
+ RegexHandler ('^{0}$' .format (lib .stop_bot ), __stop )],
485
+
486
+ GROUPING : [CallbackQueryHandler (__push_button , pass_chat_data = True ),
487
+ RegexHandler ('^({0}|{1}|{2})$' .format (
488
+ str (lib .cancel ), str (lib .btn_finished ), str (selection )),
489
+ __selection )]
490
+ },
528
491
fallbacks = [CommandHandler ('stop' , __stop )],
529
- allow_reentry = True
492
+ allow_reentry = True ,
493
+ per_chat = True ,
494
+ per_user = True
530
495
)
531
- dp .add_handler (group_handler )
532
496
533
497
dp .add_handler (emergency_stop_handler )
534
498
0 commit comments