{"id":349,"date":"2016-04-18T20:51:11","date_gmt":"2016-04-18T18:51:11","guid":{"rendered":"http:\/\/thedutchguys.com\/?p=349"},"modified":"2022-03-29T22:01:52","modified_gmt":"2022-03-29T20:01:52","slug":"octoprint-pushover","status":"publish","type":"post","link":"https:\/\/thijsbekke.nl\/blog\/2016\/04\/18\/octoprint-pushover\/","title":{"rendered":"Octoprint &#038; Pushover"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Leestijd: <\/span> <span class=\"rt-time\">3<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span>\n<p>Ik gebruik al heel lang <a href=\"http:\/\/pushover.net\" target=\"_blank\" rel=\"noopener\">Pushover<\/a>&nbsp;om notificaties te ontvangen op mijn telefoon. Sinds kort gebruik ik&nbsp;Octoprint&nbsp;om <a href=\"http:\/\/thedutchguys.com\/2016\/03\/22\/3d-printer-2\/\" target=\"_blank\" rel=\"noopener\">3d objecten<\/a> te printen op mijn <a href=\"http:\/\/thedutchguys.com\/2016\/02\/17\/3d-printer\/\" target=\"_blank\" rel=\"noopener\">3d printer<\/a>. &nbsp;Octoprint heeft geen ondersteuning voor Pushover en ook geen plugins die dat kunnen. Echter.. Pushover is gemaakt in&nbsp;<a href=\"http:\/\/thedutchguys.com\/2016\/03\/28\/skills-python-1\/\" target=\"_blank\" rel=\"noopener\">Python<\/a>, en laat ik dat nu net een beetje onder de knie te hebben. Dus ik ben aan de slag gegaan.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2>Proof of concept<\/h2>\n\n\n\n<p>Een plugin maken voor een bestaand pakket is toch iets anders dan een Fibonacci in een console tonen. Misschien had ik toch iets teveel hooi op mijn vork genomen. Ik begon met simpel, kan ik een notificatie sturen met Python naar Pushover ? Ja dat kan en dat is eigenlijk wel heel simpel&nbsp;.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">conn = httplib.HTTPSConnection(\"api.pushover.net:443\")\nconn.request(\"POST\", \"\/1\/messages.json\",\n  urllib.urlencode({\n    \"token\": \"xx_app_token_xx\",\n    \"user\": \"xx_user_token_xx\",\n    \"message\": \"hello world\",\n  }), { \"Content-type\": \"application\/x-www-form-urlencoded\" })\nconn.getresponse()\n<\/pre>\n\n\n\n<p>Een notificatie kan, nu de rest;&nbsp;Zoeken naar <a href=\"http:\/\/docs.octoprint.org\/en\/master\/plugins\/gettingstarted.html\" target=\"_blank\" rel=\"noopener\">documentatie<\/a>, kijken hoe andere mensen plugins hebben gemaakt. Al snel werd het duidelijk dat ik geen idee had hoe ik het moest testen. Daarom heb ik een standalone class gemaakt zonder dependencies naar het Octoprint framework. Dat werkte, ik kon mijn token valideren en berichten versturen. Tijd om de dependencies in te bouwen en te kijken of het werkte. En dat deed het.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"http:\/\/thedutchguys.com\/wordpress\/wp-content\/uploads\/2016\/04\/pushover.png\" rel=\"lightbox[349]\"><img src=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2016\/04\/pushover.png\" alt=\"pushover\"\/><\/a><\/figure><\/div>\n\n\n\n<h2>Jinja2<\/h2>\n\n\n\n<p>Om alles instelbaar te maken maakt Octoprint gebruik van Jinja2. Jinja2 is zoals ze zelf zeggen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>Jinja2 is a modern and designer-friendly templating language for Python<\/p><\/blockquote>\n\n\n\n<p>Het is een soort template parser, om je front end en je backend gescheiden te houden. &nbsp;Ook dat was niet al te moeilijk. Je maakt input velden en de bind deze velden met je settings in je backend door middel van een unieke key. Het Octoprint framework regelt de rest. Ik wou met een API call alle geluiden ophalen van Pushover. zodat ik die kan weergeven in de settings pagina. &nbsp;Wat mij een tijdje heeft gekost is hoe ik bepaalde waardes meegaf vanuit je backend naar Jinja2.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">def get_template_vars(self):\n\treturn dict(sounds=self.get_sounds())\n\ndef get_sounds(self):\n\tHTTPResponse = self.get(\"sounds.json\")\n\n\tif not HTTPResponse:\n\t\treturn\n\n\treturn json.loads(HTTPResponse.read())[\"sounds\"]<\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"http:\/\/thedutchguys.com\/wordpress\/wp-content\/uploads\/2016\/04\/settings.png\" rel=\"lightbox[349]\"><img src=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2016\/04\/settings.png\" alt=\"settings\"\/><\/a><\/figure><\/div>\n\n\n\n<h2>Github<\/h2>\n\n\n\n<p>Alles werkt, tijd om een mijn plugin te distribueren. Om mijn plugin in de repository te krijgen van Octoprint moet je hun <a href=\"https:\/\/github.com\/OctoPrint\/plugins.octoprint.org\" target=\"_blank\" rel=\"noopener\">project <\/a>forken om vervolgens je <a href=\"https:\/\/github.com\/OctoPrint\/plugins.octoprint.org\/commit\/558851efcfe317293ada973eda5a2b6a6fdd97fb\" target=\"_blank\" rel=\"noopener\">aanpassing <\/a>te doen, eenmaal klaar kan je je pull request doen. En na goedkeuring staat jouw plugin op&nbsp;<a href=\"http:\/\/plugins.octoprint.org\/plugins\/pushover\/\" target=\"_blank\" rel=\"noopener\">plugins.octoprint.org<\/a>.<\/p>\n\n\n\n<h3>Versies<\/h3>\n\n\n\n<p>Om gebruik te maken van de Octoprint update manager maak je gebruik van <a href=\"https:\/\/github.com\/thijsbekke\/OctoPrint-Pushover\" target=\"_blank\" rel=\"noopener\">releases <\/a>in Github. Om dit in te stellen maak je jouw release aan in Github. Je zorgt dat jouw plugin_version in setup.py correspondeert met jouw huidige versie, en wanneer je een nieuwe versie aanmaakt geeft Octoprint je een melding dat je kan updaten.<\/p>\n\n\n\n<h2>En nu verder<\/h2>\n\n\n\n<p>Uiteindelijk stelt het allemaal niet heel veel voor, zolang &nbsp;je het maar in kleine stukjes opdeelt. Waar ik veel an heb gehad tijdens het ontwikkelen is de <a href=\"http:\/\/docs.octoprint.org\/en\/master\/plugins\/gettingstarted.html\" target=\"_blank\" rel=\"noopener\">Getting started<\/a>. Mijn uiteindelijke code kan je vinden hier: &nbsp;<a href=\"https:\/\/github.com\/thijsbekke\/OctoPrint-Pushover\" target=\"_blank\" rel=\"noopener\">Github &#8211; Octoprint Pushover<\/a><\/p>\n\n\n\n<p>Ik heb nog een idee voor een nieuwe kleine plugin wat ik kan maken, tot nu toe heb ik genoten van dit kleine maar doch leuke projectje.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Leestijd: <\/span> <span class=\"rt-time\">3<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span> Ik gebruik al heel lang Pushover&nbsp;om notificaties te ontvangen op mijn telefoon. Sinds kort gebruik ik&nbsp;Octoprint&nbsp;om 3d objecten te printen op mijn 3d printer. &nbsp;Octoprint heeft geen ondersteuning voor Pushover en ook geen plugins die dat kunnen. Echter.. Pushover is gemaakt in&nbsp;Python, en laat ik dat nu net een beetje onder de knie te hebben. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":364,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[13],"_links":{"self":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/349"}],"collection":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/comments?post=349"}],"version-history":[{"count":3,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/349\/revisions"}],"predecessor-version":[{"id":567,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/349\/revisions\/567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/media\/364"}],"wp:attachment":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/media?parent=349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/categories?post=349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/tags?post=349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}