{"id":13,"date":"2019-10-22T20:20:56","date_gmt":"2019-10-22T20:20:56","guid":{"rendered":"http:\/\/www.yamboo.se\/?page_id=13"},"modified":"2025-04-07T13:20:05","modified_gmt":"2025-04-07T11:20:05","slug":"badtunnetermometer-1","status":"publish","type":"page","link":"https:\/\/yamboo.se\/?page_id=13","title":{"rendered":"Badtunnetermometer del 1 &#8211; termometern"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"971\" height=\"842\" src=\"https:\/\/www.yamboo.se\/wp-content\/uploads\/2020\/05\/termometer-3.png\" alt=\"\" class=\"wp-image-102\" srcset=\"https:\/\/yamboo.se\/wp-content\/uploads\/2020\/05\/termometer-3.png 971w, https:\/\/yamboo.se\/wp-content\/uploads\/2020\/05\/termometer-3-300x260.png 300w, https:\/\/yamboo.se\/wp-content\/uploads\/2020\/05\/termometer-3-768x666.png 768w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><figcaption class=\"wp-element-caption\">Fram- och baksida p\u00e5 sj\u00e4lva termometern. Den vita ledningen \u00e4r kopplad till I\/O pin 2. Alltihopa monteras i en liten plastbox som jag g\u00f6r luftt\u00e4t med hj\u00e4lp av silikon.<\/figcaption><\/figure>\n\n\n\n<p>Ett projekt f\u00f6r er som gillar IoT, Arduino och gillar att l\u00f6da\/programmera. Byggbeskrivningen \u00e4r indelad i fyra sektioner:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sj\u00e4lva termometern som sitter i badtunnan<\/li>\n\n\n\n<li>Display som visar aktuell temperatur<\/li>\n\n\n\n<li>Installation av en Raspberry Pi med till\u00e4ggen Telegraf och Influx<\/li>\n\n\n\n<li>Grafana &#8211; grafverktyget<\/li>\n<\/ol>\n\n\n\n<p>Jag har 25 minuters bilresa till min sommarstuga d\u00e4r badtunnan finns och jag beh\u00f6ver kunna se aktuell temperatur i den; framf\u00f6r allt vintertid eftersom den inte f\u00e5r frysa. Badtunnans uppv\u00e4rmning \u00e4r b\u00e5de med el och ved. Samtidigt \u00e4r det smidigt att kunna se temperaturen stiga medan man eldar. P\u00e5 s\u00e5 s\u00e4tt \u00e4r det ingen risk att man kliver ned i tunnan n\u00e4r den fortfarande \u00e4r kall!<\/p>\n\n\n\n<p>Jag har anv\u00e4nt f\u00f6ljande delar till sj\u00e4lva temperaturenheten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adafruit Feather HUZZAH ESP8266 WiFi<\/li>\n\n\n\n<li>Temperature Sensor &#8211; WP (DS18B20)<\/li>\n<\/ul>\n\n\n\n<p>Jag brukar k\u00f6pa delarna hos Electrokit (<a href=\"https:\/\/www.electrokit.com\/\">https:\/\/www.electrokit.com\/<\/a>), de har ett bra sortiment och snabb service.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Sensorn ska vara nedstucken i vattnet, den \u00e4r vattent\u00e4t. Feather Huzzah str\u00f6mf\u00f6rs\u00f6rjs med 5 volt, en vanlig mobilladdare tillsammans med en USB-till-mikroUSB kabel r\u00e4cker gott. T\u00e4nk dock p\u00e5 att vanliga mobilladdare inte \u00e4r gjorda f\u00f6r utomhusbruk. <\/p>\n\n\n\n<p>Sensorn anv\u00e4nder Onewire, det \u00e4r allts\u00e5 bara tre tr\u00e5dar att koppla till Huzzah. R\u00f6d (Vcc) g\u00e5r till 3.3v, svart till GND och vit (DQ) till I\/O pin 2. I en del byggbeskrivningar f\u00f6rekommer ett s k pull-up motst\u00e5nd p\u00e5 4.7 kOhm, kopplat mellan Vcc och DQ. Jag beh\u00f6vde inget s\u00e5dant, min sensor fungerade \u00e4nd\u00e5. Om du f\u00e5r ett orimligt v\u00e4rde (-127 grader) s\u00e5 beh\u00f6vs antagligen motst\u00e5ndet.<\/p>\n\n\n\n<p>I koden nedan s\u00e5 har jag namngett sensorn &#8220;badtunna&#8221;. F\u00f6r att f\u00e5 allt att fungera s\u00e5 \u00e4r det n\u00e5gra saker som beh\u00f6vs. Dels tillg\u00e5ng till ett tr\u00e5dl\u00f6st wifi som Feather Huzzah kan ansluta till och dels ett gratiskonto hos Flespi (<a href=\"https:\/\/flespi.io\/\">https:\/\/flespi.io<\/a>). Protokollet som anv\u00e4nds \u00e4r MQTT och min sensor skickar aktuell temperatur en g\u00e5ng i minuten till Flespi. N\u00e4r du registrerat ditt konto s\u00e5 beh\u00f6ver du en token som du klistrar in i din kod.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>tempsensor.ino<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Code by G. Axelsson, 2020. Updated 2025\n \n#include \"ESP8266WiFi.h\"\n#include &lt;Adafruit_MQTT.h>\n#include &lt;Adafruit_MQTT_Client.h>\n#include &lt;OneWire.h>\n#include &lt;DallasTemperature.h>\n#include \"credentials.h\"\n\nOneWire oneWire(SENSOR_PIN);\nDallasTemperature sensors(&amp;oneWire);\nWiFiClientSecure client;\nAdafruit_MQTT_Client mqtt(&amp;client, MQTT_SERVER, MQTT_PORT, FLESPI_TOKEN, \"\");\n\nstatic const char *fingerprint PROGMEM = FLESPI_CERT_FINGERPRINT;\n\nAdafruit_MQTT_Publish data  = Adafruit_MQTT_Publish(&amp;mqtt, MQTT_FEEDNAME);\n\nvoid setup() {\n  sensors.begin();\n  \/\/Serial.begin(9600);\n  WiFi.begin(WLAN_SSID, WLAN_PASS);\n  delay(2000);\n  while (WiFi.status() != WL_CONNECTED) delay(500);\n  client.setFingerprint(fingerprint);\n  \/\/Serial.println(\"Connected\");\n  \/\/Serial.print(\"IP: \");\n  \/\/Serial.println(WiFi.localIP());\n}\n\nvoid loop() {\n  MQTT_connect();\n  sensors.requestTemperatures();\n  data.publish(sensors.getTempCByIndex(0));\n  \/\/Serial.print(\"Temp badtunna: \");\n  \/\/Serial.println(sensors.getTempCByIndex(0));\n  delay(30000);\n}\n\nvoid MQTT_connect() {\n  int8_t ret;\n  if (mqtt.connected()) return;\n\n  uint8_t retries = 3;\n  while ((ret = mqtt.connect()) != 0) {\n       mqtt.disconnect();\n       delay(5000);\n       retries--;\n       if (retries == 0) while (1);\n  }\n}<\/code><\/pre>\n\n\n\n<p><strong>Credentials.h<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define WLAN_SSID\t\t\"Name_of_wifi\"\n#define WLAN_PASS               \"password\"\n#define SENSOR_PIN              2\n#define MQTT_SERVER\t        \"mqtt.flespi.io\"\n#define MQTT_PORT               8883\n#define FLESPI_CERT_FINGERPRINT \"07 BE D1 90 95 5F 91 7A AC D6 7C 18 35 68 59 19 0F 19 E7 ED\"\n#define MQTT_USERNAME           \"zZkV5dETFeiaWGbWrmQ  Insert your own token  bgwJCaxHPA59vffMqNnA\"\n#define FLESPI_TOKEN            \"FlespiToken zZkV5dETFeiaWGbWrmQ  Insert your own token  bgwJCaxHPA59vffMqNnA\"\n#define MQTT_FEEDNAME           \"\/feeds\/badtunna\"<\/code><\/pre>\n\n\n\n<p>Observera att jag har f\u00f6rs\u00f6kt g\u00f6ra koden s\u00e5 minimalistisk som m\u00f6jlig; v\u00e4ldigt f\u00e5 kommentarer, ingen felhantering. En hel av koden har jag knyckt fr\u00e5n de exempel som Arduino sj\u00e4lva tillhandah\u00e5ller. F\u00f6r att fels\u00f6ka kod s\u00e5 rekommenderar jag att du anv\u00e4nder &#8220;Serial.println&#8221; s\u00e5 att du vet att det \u00e4r r\u00e4tt data du publicerar (skickar iv\u00e4g till Flespi), se kod l\u00e4ngre ned p\u00e5 sidan. Om du vill kontrollera att data har mottagits av Flespi.io s\u00e5 kan du via din Raspberry Pi k\u00f6ra kommandot &#8220;mosquitto&#8221;, se nedan.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>goran@ubuntu:~$ mosquitto_sub -h mqtt.flespi.io -p 1883 -u \"rXCdqA2UH  == Anv\u00e4nd din egen token == v2aLNwDbQx\" -d -t \"\/feeds\/#\"\nClient mosqsub|8788-ubuntu sending CONNECT\nClient mosqsub|8788-ubuntu received CONNACK\nClient mosqsub|8788-ubuntu sending SUBSCRIBE (Mid: 1, Topic: \/feeds\/#, QoS: 0)\nClient mosqsub|8788-ubuntu received SUBACK\nSubscribed (mid: 1): 0\nClient mosqsub|8788-ubuntu received PUBLISH (d0, q0, r0, m0, '\/feeds\/badtunna', ... (5 bytes))\n15.50\n<\/code><\/pre>\n\n\n\n<p><em>Instruktion f\u00f6r att installera en MQTT broker p\u00e5 Raspberry Pi finns tillg\u00e4nglig hos <\/em><a rel=\"noreferrer noopener\" aria-label=\"instructables.com (opens in a new tab)\" href=\"https:\/\/www.instructables.com\/id\/Installing-MQTT-BrokerMosquitto-on-Raspberry-Pi\/\" target=\"_blank\"><em>instructables.com<\/em><\/a><em>.<\/em><\/p>\n\n\n\n<p>V\u00e4nta tills n\u00e5gon text kommer fram, kan dr\u00f6ja upp till 60 sekunder. N\u00e4r sedan svaret kommer s\u00e5 framg\u00e5r det (i mitt fall) att badtunnans temperatur \u00e4r 15.5 grader.<\/p>\n\n\n\n<p>Steg 1 \u00e4r nu klart! Din termometer skickar temperaturen i badtunnan en g\u00e5ng i minuten via MQTT till en server p\u00e5 internet. Nu g\u00e5r vi till steg 2 och bygger en display som vi kan visa temperaturen p\u00e5.<\/p>\n\n\n\n<p>Fels\u00f6kning? Skriv till serial.print! Aktivera de utkommenterade raderna i koden och starta seriemonitorn f\u00f6r att se s\u00e5 att avl\u00e4sningen av sensorn fungerar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"319\" src=\"https:\/\/www.yamboo.se\/wp-content\/uploads\/2020\/05\/serialmonitor.png\" alt=\"\" class=\"wp-image-130\" srcset=\"https:\/\/yamboo.se\/wp-content\/uploads\/2020\/05\/serialmonitor.png 556w, https:\/\/yamboo.se\/wp-content\/uploads\/2020\/05\/serialmonitor-300x172.png 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><figcaption class=\"wp-element-caption\">Seriemonitorn visar att avl\u00e4sningen fungerar.<\/figcaption><\/figure>\n\n\n\n<p>En kommentar g\u00e4llande &#8220;FLESPI_CERT_FINGERPRINT&#8221;. Nuvarande certifikat hos www.flespi.io \u00e4r giltigt t o m 31 mars 2026. N\u00e5gon g\u00e5ng dagarna innan s\u00e5 kommer certet att bytas ut och d\u00e4rmed beh\u00f6ver en ny SHA1-hash genereras. Din termometer beh\u00f6ver lita p\u00e5 certet. F\u00f6r att skapa en ny SHA1-hash s\u00e5 gjorde jag s\u00e5 att jag laddade ner certet p\u00e5 en linuxmaskin jag har och k\u00f6rde kommandot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -in flespi -outform DEF | sha1sum\n07bed190955f917aacd67c18356859190f19e7ed  -<\/code><\/pre>\n\n\n\n<p>Jag formatterade raden till uppercase och lade in mellanslag. Det b\u00e4sta vore kanske att l\u00e4gga in rotcertet och det mellanliggande certet s\u00e5 kommer enheten att lita p\u00e5 alla kommande certifikat. Utrymme f\u00f6r f\u00f6rb\u00e4ttringar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ett projekt f\u00f6r er som gillar IoT, Arduino och gillar att l\u00f6da\/programmera. Byggbeskrivningen \u00e4r indelad i fyra sektioner: Jag har 25 minuters bilresa till min sommarstuga d\u00e4r badtunnan finns och jag beh\u00f6ver kunna se aktuell temperatur i den; framf\u00f6r allt vintertid eftersom den inte f\u00e5r frysa. Badtunnans uppv\u00e4rmning \u00e4r b\u00e5de med el och ved. Samtidigt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yamboo.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":54,"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":195,"href":"https:\/\/yamboo.se\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions\/195"}],"wp:attachment":[{"href":"https:\/\/yamboo.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}