Skip to content

Commit dddb992

Browse files
authored
Merge pull request #352 from giloser/master
V1.6.5
2 parents f309f37 + afe9102 commit dddb992

File tree

8 files changed

+588
-71
lines changed

8 files changed

+588
-71
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
This plugin integrates Telegram Messenger with Octoprint. It sends messages (with photos if available) on print start, end and failure. Also it sends messages during the print at configurable intervals. That way you don't have to remember to regularly have a look at the printing process.
77
Also, you can control Octoprint via messages (settings, start a print and much more). Send `/status` to get the current printer status or `/abort` to abort the current print. Send `/help` for a list of all recognized commands. You may also use this bot in groups.
88

9-
**Latest release: [1.6.4](https://github.com/fabianonline/OctoPrint-Telegram/releases)**
9+
**Latest release: [1.6.5](https://github.com/fabianonline/OctoPrint-Telegram/releases)**
1010

1111
<!-- omit in toc -->
1212
## Contents

octoprint_telegram/__init__.py

Lines changed: 164 additions & 56 deletions
Large diffs are not rendered by default.

octoprint_telegram/emojiDict.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,4 +856,6 @@
856856
'smiling cat face with open mouth': '\U0001f63a',
857857
'shutdown' : '\U0001F4A4',
858858
'film frame' : '\U0001F39E',
859+
'ice cube' : '\U0001F9CA',
860+
'freezing face' : '\U0001F976',
859861
}

octoprint_telegram/static/js/telegram.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ $(function() {
4545
self.varInfoDialog = undefined;
4646
self.emoInfoDialog = undefined;
4747
self.mupInfoDialog = undefined;
48+
self.timeInfoDialog = undefined;
4849
self.currChatID = "Unknown";
4950
self.currChatTitle = ko.observable("Unknown");
5051
self.bind_cmd = {};
@@ -571,6 +572,7 @@ $(function() {
571572
self.varInfoDialog = $('#settings-telegramDialogVarInfo');
572573
self.emoInfoDialog = $('#settings-telegramDialogEmoInfo');
573574
self.mupInfoDialog = $('#settings-telegramDialogMupInfo');
575+
self.timeInfoDialog = $('#settings-telegramDialogTimeInfo');
574576
$('.teleEmojiImg').each( function(){
575577
$(this).attr('src','/plugin/telegram/static/img/'+$(this).attr('id')+".png")
576578
});

octoprint_telegram/telegramCommands.py

Lines changed: 104 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import requests
88
import base64
99
from flask_babel import gettext
10-
from subprocess import Popen, PIPE
10+
#from subprocess import Popen, PIPE
11+
import subprocess
1112
from .telegramNotifications import telegramMsgDict
1213

1314
################################################################################################################
@@ -27,6 +28,7 @@ def __init__(self, main):
2728
self.conSettingsTemp = []
2829
self.dirHashDict = {}
2930
self.tmpFileHash = ""
31+
self._spoolManagerPluginImplementation = None
3032
self.port = self.main._settings.global_get(["server","port"])
3133
self.commandDict = {
3234
"Yes": {'cmd': self.cmdYes, 'bind_none': True},
@@ -303,14 +305,14 @@ def cmdSettings(self,chat_id,from_id,cmd,parameter):
303305
return
304306
else:
305307
if self.main._settings.get_boolean(["send_gif"]):
306-
gif_txt = "Desactivate gif"
308+
gif_txt = "Deactivate gif"
307309
gif_emo = self.gEmo('check')
308310
else:
309311
gif_txt = "Activate gif"
310312
gif_emo = self.gEmo('error')
311313

312314
if self.main._settings.get_boolean(["multicam"]):
313-
multicam_txt = "Desactivate management of multicam"
315+
multicam_txt = "Deactivate management of multicam"
314316
multicam_emo = self.gEmo('check')
315317
else:
316318
multicam_txt = "Activate mangement of multicam"
@@ -1244,6 +1246,105 @@ def cmdFilament(self,chat_id,from_id,cmd,parameter):
12441246
keys.append([[self.main.emojis['cross mark']+gettext(" Close"),"No"]])
12451247
msg_id=self.main.getUpdateMsgId(chat_id) if parameter == "back" else ""
12461248
self.main.send_msg(message,chatID=chat_id,responses=keys,msg_id=msg_id)
1249+
elif self.main._plugin_manager.get_plugin("SpoolManager",True):
1250+
if parameter and parameter != "back":
1251+
self._logger.info("Parameter received for filament: %s" % parameter)
1252+
params = parameter.split('_')
1253+
apikey = self.main._settings.global_get(['api','key'])
1254+
errorText = ""
1255+
if params[0] == "spools":
1256+
try:
1257+
1258+
if self._spoolManagerPluginImplementation == None:
1259+
self._spoolManagerPluginImplementation = self.main._plugin_manager.get_plugin("SpoolManager",True)
1260+
message ="SpoolManager: "+str(self._spoolManagerPluginImplementation.SpoolManagerAPI.load_allSpools())
1261+
#selectedSpool = self._spoolManagerPluginImplementation.filamentManager.loadSelectedSpool()
1262+
#allSpool = self._spoolManagerPluginImplementation.filamentManager.load_allSpools
1263+
#message ="selectedSpool= " +str(selectedSpool) + "\nallSpool=" +str(allSpool)
1264+
1265+
# resp = requests.get("http://localhost:" + str(self.port) + "/plugin/spoolmanager/loadSpoolsByQuery?="+query)
1266+
# resp2 = requests.get("http://localhost:" + str(self.port) + "/plugin/filamentmanager/selections?apikey="+apikey)
1267+
# if (resp.status_code != 200):
1268+
# errorText = resp.text
1269+
# resp = resp.json()
1270+
# resp2 = resp2.json()
1271+
# self._logger.info("Spools: %s" % resp["spools"])
1272+
# message = self.gEmo('info') + " Available filament spools are:\n"
1273+
# for spool in resp["spools"]:
1274+
# weight = spool["weight"]
1275+
# used = spool["used"]
1276+
# percent = int(100 - (used / weight * 100))
1277+
# message += str(spool["profile"]["vendor"]) + " " + str(spool["name"]) + " " + str(spool["profile"]["material"]) + " [" + str(percent) + "%]\n"
1278+
# for selection in resp2["selections"]:
1279+
# if selection["tool"] == 0:
1280+
# message += "\n\nCurrently selected: " + str(selection["spool"]["profile"]["vendor"]) + " " + str(selection["spool"]["name"]) + " " + str(selection["spool"]["profile"]["material"])
1281+
msg_id=self.main.getUpdateMsgId(chat_id)
1282+
self.main.send_msg(message,chatID=chat_id,msg_id = msg_id,inline=False)
1283+
except ValueError:
1284+
message = self.gEmo('mistake')+" Error getting spools. Are you sure, you have installed the Spool Manager Plugin?"
1285+
if (errorText != ""):
1286+
message += "\nError text: " + str(errorText)
1287+
msg_id=self.main.getUpdateMsgId(chat_id)
1288+
self.main.send_msg(message,chatID=chat_id,msg_id = msg_id,inline=False)
1289+
if params[0] == "changeSpool":
1290+
self._logger.info("Command to change spool: %s" % params)
1291+
if len(params) > 1:
1292+
self._logger.info("Changing to spool: %s" % params[1])
1293+
try:
1294+
payload = {"selection": {"spool": {"id": params[1]},"tool": 0}}
1295+
self._logger.info("Payload: %s" % payload)
1296+
resp = requests.patch("http://localhost:" + str(self.port) + "/plugin/filamentmanager/selections/0?apikey="+apikey, json=payload, headers={'Content-Type': 'application/json'})
1297+
if (resp.status_code != 200):
1298+
errorText = resp.text
1299+
self._logger.info("Response: %s" % resp)
1300+
resp = resp.json()
1301+
message = self.gEmo('check') + " Selected spool is now: " + str(resp["selection"]["spool"]["profile"]["vendor"]) + " " + str(resp["selection"]["spool"]["name"]) + " " + str(resp["selection"]["spool"]["profile"]["material"])
1302+
msg_id=self.main.getUpdateMsgId(chat_id)
1303+
self.main.send_msg(message,chatID=chat_id,msg_id = msg_id,inline=False)
1304+
except ValueError:
1305+
message = self.gEmo('mistake')+" Error changing spool"
1306+
if (errorText != ""):
1307+
message += "\nError text: " + str(errorText)
1308+
msg_id=self.main.getUpdateMsgId(chat_id)
1309+
self.main.send_msg(message,chatID=chat_id,msg_id = msg_id,inline=False)
1310+
else:
1311+
self._logger.info("Asking for spool")
1312+
try:
1313+
resp = requests.get("http://localhost:" + str(self.port) + "/plugin/filamentmanager/spools?apikey="+apikey)
1314+
if (resp.status_code != 200):
1315+
errorText = resp.text
1316+
resp = resp.json()
1317+
message = self.gEmo('question') + " which filament spool do you want to select?"
1318+
keys = []
1319+
tmpKeys = []
1320+
i = 1
1321+
for spool in resp["spools"]:
1322+
self._logger.info("Appending spool: %s" % spool)
1323+
tmpKeys.append([str(spool["profile"]["vendor"]) + " " + str(spool['name']) + " " + str(spool["profile"]["material"]) ,"/filament_changeSpool_" + str(spool['id'])])
1324+
if i%2 == 0:
1325+
keys.append(tmpKeys)
1326+
tmpKeys = []
1327+
i += 1
1328+
if len(tmpKeys) > 0:
1329+
keys.append(tmpKeys)
1330+
keys.append([[self.main.emojis['cross mark']+gettext(" Close"),"No"]])
1331+
msg_id=self.main.getUpdateMsgId(chat_id)
1332+
self._logger.info("Sending message")
1333+
self.main.send_msg(message,chatID=chat_id,responses=keys,msg_id=msg_id)
1334+
except ValueError:
1335+
message = self.gEmo('mistake')+" Error changing spool"
1336+
if (errorText != ""):
1337+
message += "\nError text: " + str(errorText)
1338+
msg_id=self.main.getUpdateMsgId(chat_id)
1339+
self.main.send_msg(message,chatID=chat_id,msg_id = msg_id,inline=False)
1340+
else:
1341+
message = self.gEmo('info') + " The following Filament Manager commands are known."
1342+
keys = []
1343+
keys.append([["Show spools","/filament_spools"]])
1344+
keys.append([["Change spool","/filament_changeSpool"]])
1345+
keys.append([[self.main.emojis['cross mark']+gettext(" Close"),"No"]])
1346+
msg_id=self.main.getUpdateMsgId(chat_id) if parameter == "back" else ""
1347+
self.main.send_msg(message,chatID=chat_id,responses=keys,msg_id=msg_id)
12471348
else:
12481349
message = self.gEmo('warning') + " No filament manager plugin installed."
12491350
msg_id=self.main.getUpdateMsgId(chat_id) if parameter == "back" else ""

octoprint_telegram/telegramNotifications.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def is_in_python_2_7():
103103
'markup': "off"
104104
},
105105
'gCode_M600' : {
106-
'text': "{emo:warning} " + gettext("Color change requested Second try.\nBed {bed_temp}/{bed_target}, Extruder {e1_temp}/{e1_target}."),
106+
'text': "{emo:warning} " + gettext("Color change requested.\nBed {bed_temp}/{bed_target}, Extruder {e1_temp}/{e1_target}."),
107107
'image': True,
108108
'silent': False,
109109
'gif': False,
@@ -126,15 +126,46 @@ def is_in_python_2_7():
126126
'combined' : True,
127127
'markup': "off"
128128
},
129+
'Connected' : {
130+
'text': "{emo:link symbol} " + gettext("Printer Connected"),
131+
'image': False,
132+
'silent': False,
133+
'gif': False,
134+
'combined': True,
135+
'markup': "off"
136+
},
137+
'Disconnected' : {
138+
'text': "{emo:broken heart} " + gettext("Printer Disconnected"),
139+
'image': False,
140+
'silent': False,
141+
'gif': False,
142+
'combined': True,
143+
'markup': "off"
144+
},
145+
'Home' : {
146+
'text': "{emo:house building} " + gettext("Printer received home command \nBed {bed_temp}/{bed_target}, Extruder {e1_temp}/{e1_target}"),
147+
'image': True,
148+
'silent': False,
149+
'gif': False,
150+
'combined': True,
151+
'markup': "off"
152+
},
153+
'Alert' : {
154+
'text': "{emo:bell} " + gettext("Printer received alert command \nBed {bed_temp}/{bed_target}, Extruder {e1_temp}/{e1_target}"),
155+
'image': True,
156+
'silent': False,
157+
'gif': False,
158+
'combined': True,
159+
'markup': "off"
160+
},
129161
'UserNotif' : {
130162
'text': "{emo:waving hand sign} " + gettext("User Notification {UserNotif_Text}"),
131163
'image': True,
132164
'silent': False,
133165
'gif': False,
134166
'combined': True,
135167
'markup': "off"
136-
}
137-
168+
},
138169
}
139170

140171
# class to handle emojis on notifigation message format
@@ -179,7 +210,11 @@ def __init__(self, main):
179210
'gCode_M600': self.msgColorChangeRequested,
180211
'Error': self.msgPrinterError,
181212
'MovieDone': self.msgMovieDone,
182-
'UserNotif': self.msgUserNotif
213+
'UserNotif': self.msgUserNotif,
214+
'Connected':self.msgConnected,
215+
'Disconnected':self.msgConnected,
216+
'Alert':self.msgConnected,
217+
'Home':self.msgConnected,
183218
}
184219

185220
def startEvent(self, event, payload, **kwargs):
@@ -255,6 +290,11 @@ def msgUserNotif(self,payload, **kwargs):
255290
payload = {}
256291
self._sendNotification(payload, **kwargs)
257292

293+
def msgConnected(self,payload, **kwargs):
294+
if payload is None:
295+
payload = {}
296+
self._sendNotification(payload, **kwargs)
297+
258298
def _sendNotification(self, payload, **kwargs):
259299
try:
260300
status = self.main._printer.get_current_data()

0 commit comments

Comments
 (0)