{"id":1092,"date":"2016-05-27T20:35:19","date_gmt":"2016-05-27T20:35:19","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=1092"},"modified":"2016-05-27T20:35:19","modified_gmt":"2016-05-27T20:35:19","slug":"webiopi-webservice-steuert-i2c-device","status":"publish","type":"post","link":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/","title":{"rendered":"WebIoPI: Webservice steuert I2C Device"},"content":{"rendered":"<p>Dieser Artikel ist eine Fortsetzung von\u00a0 diesem <a href=\"http:\/\/wp.andreas.bieri.name\/myblog\/index.php\/2016\/03\/29\/webiopi-und-weaved-installation\/\">Blog<\/a>. Die Installation von <a href=\"http:\/\/webiopi.trouch.com\/\">WebIoPI<\/a> wird vorausgesetzt und nicht weiter erkl\u00e4rt, das kann\u00a0dieser Blogger besser <a href=\"https:\/\/developer-blog.net\/webgpio\/\">hier<\/a>\u00a0(dort sind auch ein paar RPi Projekte zu finden, so wie hier ein paar Ideen zur <a href=\"http:\/\/de.slideshare.net\/tomykoch\/heimautomatisierung-mit-python-und-raspberry-pi\">Heimautomatisierung<\/a>).<\/p>\n<p>Ziel war es, als Finger\u00fcbung in WebIoPI einen Webservice zu realisieren, sodass dar\u00fcber eine I2C Ger\u00e4t gesteuert werden kann. Als erster Schritt wurde diese einfach in Form eines WebIoPI Macros realisiert. Der Aufruf des Webservice erfolgt so:<\/p>\n<pre>http:\/\/setscene\/&lt;nummer&gt;<\/pre>\n<p>Die &lt;nummer&gt; ist eine Zahl von 1 bis 20. Als Ger\u00e4t wurde eine <a href=\"http:\/\/thingm.com\/products\/blinkm\/blinkm-quick-start-guide\/\">BlinkM I2C Leuchtdiode<\/a> gew\u00e4hlt, da diese eine einfache optische Kontrolle erlaubt. Sie kann mit RGB Werten beschickt werden oder auch \u2013 wie hier verwendet \u2013 mit einer Nummer eine vorher einprogrammierte Sequenz abspielen, zum Beispiel den Text SOS morsen. Im Auslieferungszustand sind etliche Szenen bereits programmiert.<\/p>\n<p><a href=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1.jpg\"><img loading=\"lazy\" class=\"aligncenter\" title=\"blinkm1\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg\" alt=\"blinkm1\" width=\"195\" height=\"244\" border=\"0\" \/><\/a><\/p>\n<p>Es gibt praktischerweise auch eine einfache Python Bibliothek, die die Ansteuerung \u00fcbernimmt. Diese testen wir zuerst:<\/p>\n<pre>from pyblinkm import BlinkM, Scripts\nblinkm = BlinkM()\nblinkm.reset()\nblinkm.play_script(Scripts.THUNDERSTORM)\nblinkm.reset()\nblinkm.fade_to(255,0,0)\nblinkm.fade_to_hex(\"ff0000\")\nblinkm.go_to(0,255,0)<\/pre>\n<p>Die Logik dazu wird in einem <strong>script.py<\/strong> geschrieben und in WebIoPI eingebunden. Die index.html Seite braucht es nicht. Zuerst werden die Module geladen und eine Szene definiert, die gerade beim Start geschickt wird:<\/p>\n<pre># Imports\nimport webiopi\nimport time\nimport pyblinkm\nfrom pyblinkm import BlinkM, Scripts\n# Enable debug output\nwebiopi.setDebug()\n# Retrieve GPIO lib\nDEFSCENE = 10<\/pre>\n<pre># Called by WebIOPi at script loading\ndef setup():\n\u00a0\u00a0\u00a0 webiopi.debug(\"Script with macros - Setup\")\n\u00a0\u00a0\u00a0 global blinkm\n\u00a0\u00a0\u00a0 blinkm = BlinkM()\n\u00a0\u00a0\u00a0 blinkm.reset()\n\u00a0\u00a0\u00a0 blinkm.play_script(DEFSCENE)<\/pre>\n<p>Danach wird das Schleifenverhalten und Ende definiert:<\/p>\n<pre># Looped by WebIOPi\ndef loop():\n\u00a0\u00a0\u00a0 # Toggle LED each 5 seconds\n\u00a0\u00a0\u00a0 #value = not GPIO.digitalRead(LED1)\n\u00a0\u00a0\u00a0 #GPIO.digitalWrite(LED1, value)\n\u00a0\u00a0\u00a0 webiopi.sleep(5)<\/pre>\n<pre># Called by WebIOPi at server shutdown\ndef destroy():\n\u00a0\u00a0\u00a0 webiopi.debug(\"Script with macros - Destroy\")\n\u00a0\u00a0\u00a0 blinkm.reset()<\/pre>\n<p>Dann folgt endlich das einfache Macro <strong>setscene<\/strong> mit einer Variable. Da alles auf Python beruht, gestaltet sich der Aufruf dieser &#8222;externen Funktion&#8220; banal einfach.<\/p>\n<pre># A macro which sets the scene on the BlinkM\n@webiopi.macro\ndef setscene(scene):\n\u00a0\u00a0\u00a0 int_scene = int(scene)\n\u00a0\u00a0\u00a0 webiopi.debug(\"setscene(%s)\" % (int_scene))\n\u00a0\u00a0\u00a0 blinkm.play_script(int_scene)\n\u00a0\u00a0\u00a0 return int_scene<\/pre>\n<p>Zwei weitere Testmacros sind auch noch im Code enthalten:<\/p>\n<pre># A macro which says hello\n@webiopi.macro\ndef HelloWorld(first, last):\n\u00a0\u00a0\u00a0 webiopi.debug(\"HelloWorld(%s, %s)\" % (first, last))\n\u00a0\u00a0\u00a0 return \"Hello %s %s !\" % (first, last)<\/pre>\n<pre># A macro without args which return nothing\n@webiopi.macro\ndef PrintTime():\n\u00a0\u00a0\u00a0 webiopi.debug(\"PrintTime: \" + time.asctime())\n\u00a0\u00a0\u00a0 return time.asctime()<\/pre>\n<p>Das ist schon alles. Auf der To do Liste g\u00e4be es aber noch einiges:<\/p>\n<ul>\n<li>weitere Macros erstellen: \u00e4ndere die Farben (RGB), die Frequenz und anderes<\/li>\n<li>eine Webseite mit einem Eingabeformular erstellen, in dem die Szene und andere Parameter gesetzt werden k\u00f6nnen<\/li>\n<li>einen WebIoPI Treiber entwickeln<\/li>\n<\/ul>\n<p>Das ganze ist schliesslich nur eine Finger\u00fcbung f\u00fcr ein anderes Projekt, so werde ich die Perfektion hier nicht auf die Spitze treiben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Artikel ist eine Fortsetzung von\u00a0 diesem Blog. Die Installation von WebIoPI wird vorausgesetzt und nicht weiter erkl\u00e4rt, das kann\u00a0dieser Blogger besser hier\u00a0(dort sind auch ein paar RPi Projekte zu finden, so wie hier ein paar Ideen zur Heimautomatisierung). Ziel war es, als Finger\u00fcbung in WebIoPI einen Webservice zu realisieren, sodass dar\u00fcber eine I2C Ger\u00e4t [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,12],"tags":[102,146],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WebIoPI: Webservice steuert I2C Device - Merkbar.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WebIoPI: Webservice steuert I2C Device - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"Dieser Artikel ist eine Fortsetzung von\u00a0 diesem Blog. Die Installation von WebIoPI wird vorausgesetzt und nicht weiter erkl\u00e4rt, das kann\u00a0dieser Blogger besser hier\u00a0(dort sind auch ein paar RPi Projekte zu finden, so wie hier ein paar Ideen zur Heimautomatisierung). Ziel war es, als Finger\u00fcbung in WebIoPI einen Webservice zu realisieren, sodass dar\u00fcber eine I2C Ger\u00e4t [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-27T20:35:19+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"wp_blogadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\",\"url\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg\",\"contentUrl\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#webpage\",\"url\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/\",\"name\":\"WebIoPI: Webservice steuert I2C Device - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#primaryimage\"},\"datePublished\":\"2016-05-27T20:35:19+00:00\",\"dateModified\":\"2016-05-27T20:35:19+00:00\",\"author\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WebIoPI: Webservice steuert I2C Device\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"caption\":\"wp_blogadmin\"},\"url\":\"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WebIoPI: Webservice steuert I2C Device - Merkbar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/","og_locale":"de_DE","og_type":"article","og_title":"WebIoPI: Webservice steuert I2C Device - Merkbar.","og_description":"Dieser Artikel ist eine Fortsetzung von\u00a0 diesem Blog. Die Installation von WebIoPI wird vorausgesetzt und nicht weiter erkl\u00e4rt, das kann\u00a0dieser Blogger besser hier\u00a0(dort sind auch ein paar RPi Projekte zu finden, so wie hier ein paar Ideen zur Heimautomatisierung). Ziel war es, als Finger\u00fcbung in WebIoPI einen Webservice zu realisieren, sodass dar\u00fcber eine I2C Ger\u00e4t [&hellip;]","og_url":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/","og_site_name":"Merkbar.","article_published_time":"2016-05-27T20:35:19+00:00","og_image":[{"url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg"}],"twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"2 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website","url":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"ImageObject","@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#primaryimage","inLanguage":"de","url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg","contentUrl":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/05\/blinkm1_thumb.jpg"},{"@type":"WebPage","@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#webpage","url":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/","name":"WebIoPI: Webservice steuert I2C Device - Merkbar.","isPartOf":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#primaryimage"},"datePublished":"2016-05-27T20:35:19+00:00","dateModified":"2016-05-27T20:35:19+00:00","author":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/27\/webiopi-webservice-steuert-i2c-device\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/"},{"@type":"ListItem","position":2,"name":"WebIoPI: Webservice steuert I2C Device"}]},{"@type":"Person","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo","inLanguage":"de","url":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","caption":"wp_blogadmin"},"url":"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/1092"}],"collection":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/comments?post=1092"}],"version-history":[{"count":0,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/1092\/revisions"}],"wp:attachment":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/media?parent=1092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/categories?post=1092"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/tags?post=1092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}