Skip to content

Praktische Anwendungen (Showcase)

Zeigt eure umgesetzten Projekte
898 Themen 33.5k Beiträge

NEWS

  • Fensterkontakte Ideen und Anwendung

    Verschoben
    23
    0 Stimmen
    23 Beiträge
    6k Aufrufe
    ?
    @fabian-krauss said in Fensterkontakte Ideen und Anwendung: Brauchen tut es keiner, aber lustig ist es schon Hi, ich bin noch nicht dazu gekommen, das Wetter ist zu gut und die Regierung möchte meine Hilfe im Garten :) Kannst ja einfach mal Zeigen. VG Bernd
  • [Ideensammlung] Smarte Bewässerung für den Schrebergarten mittels 12v Solaranlage

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    OpenSourceNomadO
    Also ist ja schon ein alter Hut (:tophat:) aber falls hier noch jemand im Jahre 2020 sowas in der Art benötigt: Man kann sich so ziemlich alles (Router, LTE Stick, Raspberry Pi, mehrere D1 Mini's) sparen und alles mit einen einzigen D1 Mini (ca. 2€) realisieren: Relais/Ventile Feuchtigkeitssensoren (ab ca. 1€) Simkarten Modul (sim800l, ca. 2€) Wahlweise noch Pin Extender falls es mit den gpio's eng wird (MCP23017, ca. 1€) Darauf kommt dann esphome und die komplette Logik inklusive SMS Benachrichtigung und Steuerung :iphone: sowie einem lokalem WLAN Access Point zur Steuerung über das web interface. :tada: Natürlich beliebig erweiterbar. So kann man den esp z.B. auch noch um eine Schrebergarten Wetterstation und Alarmanlage ausbauen
  • Wetterstation Ventus W830 parsing mit ESP8266

    13
    2 Stimmen
    13 Beiträge
    2k Aufrufe
    FoggF
    So als kleine Zusatzinfo, ich baue gerade einen Adapter für die WS980Wifi, ist wohl die gleiche Software drauf wie hier :) Von daher sollte mein Adapter dann auch hier funktionieren. Hier das Thema dazu: https://forum.iobroker.net/topic/32599/wetterstation-ws980wifi-von-elv-neuer-adapter
  • Software: Türklingel -> IOBroker -> Fritzbox (inkl. Webcam)

    20
    6
    1 Stimmen
    20 Beiträge
    3k Aufrufe
    H
    @crunchip Ja dann verstehe ich aber das Problem doch nicht. Ihr habt doch dann alle Werkzeuge um die Telefone klingeln zu lassen und ein Bild zu sehen. Oder stehe ich gerade auf dem Schlauch?
  • 1 Stimmen
    11 Beiträge
    3k Aufrufe
    siggi85S
    Ich fände einen Adapter auch eine gute Idee. Ist einfacher zu handeln und nutzbarer für die Masse als ein Skript. Das war auch ein Grund das ganze in ein Blockly zu verpacken: Dass kann die Masse auch einfacher auf seine Bedürfnisse anpassen. Obwohl ich das Skript von @Pittini nicht selber implementiert habe, lesen sich die Features sehr durchdacht. Die Idee Fenster und Türen zusammen zu bringen ist einfach: Wenn das Haus verlassen wird, will ich schnell und einfach prüfen können, ob ich vergessen habe was zu schließen. Entweder über einen Smartmirror in der Nähe der Haustür und/oder über eine Ansage, die alle aktuell offenen Fenster und Türen ansagt die noch offen sind wenn die Haustür geöffnet wird und wenn die Zahl offener Türen UND Fenster >0 beträgt. Es kann also durchaus Sinn machen Türen und Fenster zusammen zu betrachten; es hängt nur davon ab, aus welcher Motivation und mit welchem Ziel man diese Daten zusammen bringt. Zum Status vom Lüften ist die Überwachung der Türen natürlich weniger relevant. Da macht das wirklich wenig Sinn.
  • SMA YASDI

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    609 Aufrufe
    I
    Hab jetzt noch nen bisschen gesucht. Eine interessante Variante ist: https://github.com/pkwagner/yasdi2mqtt Dann einfach per MQTT in den iobroker... Ich weiß leider noch nicht ob es bei mir läuft, da ich noch keinen Adapter von Modbus habe (warte auf Lieferung) aber danach wird das probiert... :-)
  • 5 Stimmen
    3 Beiträge
    2k Aufrufe
    Uwe ClementU
    @Scrounger erledigt
  • Grafana Mysql letzten bekannten Wert anzeigen

    1
    0 Stimmen
    1 Beiträge
    826 Aufrufe
    Niemand hat geantwortet
  • LandXcape Mähroboter LX792 mit WLAN Modul erweitern

    mähroboter esp8266
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • [gelöst] Zigbee Mesh Netzwerk

    zigbee zigbee xiaomi aqara zigbee-stick mesh
    8
    1
    0 Stimmen
    8 Beiträge
    6k Aufrufe
    N
    Alles klar, das erklärt es! Die Lösung mit dem Ikea Repeater hat funktioniert. Allerdings musst ich die Geräte entkoppeln und dann den Kopplungsmodus über den Repeater starten und die Geräte neu verbinden. Jetzt klappt aber alles wunderbar. Danke für Eure Hilfe!
  • Busch Free@Home Nutzer gesucht

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    4k Aufrufe
    TheBamT
    Ich hatte ein ähnliches Problem wo ein Kunde gerne Busch free@home mit iobroker verbinden wollte. Leider geht das noch nicht. Ich habe den Support von busch-jager kontaktiert. Und wenn ich das richtig verstanden Habe gibt die momentane Version des Routers keine Daten raus. Wodurch eine Anbindung auch nicht möglich wäre. Daher meine bitte an euch schreibt an den Support das ihr euch sowas gerne wünscht. Dann gibt es evtl. Ein Update vom Router und wenn die Jungs dort richtig gescheid sind dann machen die auch einen Adapter. Daher am besten so oft und so viel wie möglich Nachfragen
  • Anzeige Status Docker Container

    docker vis javascript
    44
    2
    1 Stimmen
    44 Beiträge
    5k Aufrufe
    D
    @Glasfaser sagte in Anzeige Status Docker Container: Nur angepasst auf die 918+ bzw. auf meine Bedürfnisse .. Ebenso, habs entsprechend für meine Bedarfe angepasst: #/bin/bash # Scriptname: sysinfo_iobroker.sh - Ermitteln von Systemwerten der Sysnology DS1515+ und übergeben an ioBroker # Version 1.0 - 05.08.2016 ioBrokerSetURL="http://192.168.1.82:8087/set/javascript.0.System.Synology." # URL zum Setzen der Werte in ioBroker URL_set_CPUTemp1="${ioBrokerSetURL}CPUTemp1?value=" URL_set_CPUTemp2="${ioBrokerSetURL}CPUTemp2?value=" URL_set_CPUTemp3="${ioBrokerSetURL}CPUTemp3?value=" URL_set_CPUTemp4="${ioBrokerSetURL}CPUTemp4?value=" #URL_set_CPUTempMax="${ioBrokerSetURL}CPUTempMax?value=" # Bisher fehlt mir die Möglichkeit zur Ermittlung der Max-Temp im Shell Script, daher aktuelle durch JavaScript ermittelt URL_set_CPUUsage="${ioBrokerSetURL}CPUUsage?value=" URL_set_CPULoad="${ioBrokerSetURL}CPULoad?value=" URL_set_MemTotalGB="${ioBrokerSetURL}MemTotalGB?value=" URL_set_MemFreeGB="${ioBrokerSetURL}MemFreeGB?value=" URL_set_MemUsedGB="${ioBrokerSetURL}MemUsedGB?value=" URL_set_MemFreePercent="${ioBrokerSetURL}MemFreePercent?value=" URL_set_MemUsedPercent="${ioBrokerSetURL}MemUsedPercent?value=" URL_set_HDDTemp1="${ioBrokerSetURL}HDDTemp1?value=" URL_set_HDDTemp2="${ioBrokerSetURL}HDDTemp2?value=" URL_set_HDDTemp3="${ioBrokerSetURL}HDDTemp3?value=" URL_set_HDDTemp4="${ioBrokerSetURL}HDDTemp4?value=" URL_set_HDDTemp5="${ioBrokerSetURL}HDDTemp5?value=" URL_set_StorageVolume1Total="${ioBrokerSetURL}StorageVolume1Total?value=" URL_set_StorageVolume1Free="${ioBrokerSetURL}StorageVolume1Free?value=" URL_set_StorageVolume1Used="${ioBrokerSetURL}StorageVolume1Used?value=" URL_set_StorageVolume1FreePercent="${ioBrokerSetURL}StorageVolume1FreePercent?value=" URL_set_StorageVolume1UsedPercent="${ioBrokerSetURL}StorageVolume1UsedPercent?value=" URL_set_StorageVolume2Total="${ioBrokerSetURL}StorageVolume2Total?value=" URL_set_StorageVolume2Free="${ioBrokerSetURL}StorageVolume2Free?value=" URL_set_StorageVolume2Used="${ioBrokerSetURL}StorageVolume2Used?value=" URL_set_StorageVolume2FreePercent="${ioBrokerSetURL}StorageVolume2FreePercent?value=" URL_set_StorageVolume2UsedPercent="${ioBrokerSetURL}StorageVolume2UsedPercent?value=" URL_set_UptimeDays="${ioBrokerSetURL}UptimeDays?value=" URL_set_UptimeHours="${ioBrokerSetURL}UptimeHours?value=" URL_set_UptimeMinutes="${ioBrokerSetURL}UptimeMinutes?value=" URL_set_DSMVersion="${ioBrokerSetURL}DSMVersion?value=" URL_set_Timestamp="${ioBrokerSetURL}Timestamp?value=" ##### Ermitteln und Setzen der Werte ##### # CPU-Temperatur CPUTemp1=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp1_input | awk '{print $1/1000}') CPUTemp2=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp2_input | awk '{print $1/1000}') CPUTemp3=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp3_input | awk '{print $1/1000}') CPUTemp4=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp4_input | awk '{print $1/1000}') url_CPUTemp1=$URL_set_CPUTemp1$CPUTemp1 echo "$url_CPUTemp1" curl -s $url_CPUTemp1 > /dev/null 2>&1 url_CPUTemp2=$URL_set_CPUTemp2$CPUTemp2 echo "$url_CPUTemp2" curl -s $url_CPUTemp2 > /dev/null 2>&1 url_CPUTemp3=$URL_set_CPUTemp3$CPUTemp3 echo "$url_CPUTemp3" curl -s $url_CPUTemp3 > /dev/null 2>&1 url_CPUTemp4=$URL_set_CPUTemp4$CPUTemp4 echo "$url_CPUTemp4" curl -s $url_CPUTemp4 > /dev/null 2>&1 # CPU-Usage CPUUsage=$(top -b -n15 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f\n", prefix, 100 - v }') url_CPUUsage=$URL_set_CPUUsage$CPUUsage echo "$url_CPUUsage" curl -s $url_CPUUsage > /dev/null 2>&1 # CPU-Load-Average CPULoad=$(uptime | awk -F'[a-z]:' '{ print $2}' | sed 's/,//g' | sed 's/ /%20/g') url_CPULoad=$URL_set_CPULoad$CPULoad echo "$url_CPULoad" curl -s $url_CPULoad > /dev/null 2>&1 # Memory Total in Gigabyte MemTotalGB=$(free | grep Mem | awk '{printf "%.1f\n", $2/1024/1024}') url_MemTotalGB=$URL_set_MemTotalGB$MemTotalGB echo "$url_MemTotalGB" curl -s $url_MemTotalGB > /dev/null 2>&1 # Memory Free in Gigabyte MemFreeGB=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/1024/1024}') url_MemFreeGB=$URL_set_MemFreeGB$MemFreeGB echo "$url_MemFreeGB" curl -s $url_MemFreeGB > /dev/null 2>&1 # Memory Used in Gigabyte MemUsedGB=$(free | grep Mem | awk '{printf "%.1f\n", $3/1024/1024}') url_MemUsedGB=$URL_set_MemUsedGB$MemUsedGB echo "$url_MemUsedGB" curl -s $url_MemUsedGB > /dev/null 2>&1 # Memory Free in Prozent MemFreePercent=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/$2 * 100.0}') url_MemFreePercent=$URL_set_MemFreePercent$MemFreePercent echo "$url_MemFreePercent" curl -s $url_MemFreePercent > /dev/null 2>&1 # Memory Used in Prozent MemUsedPercent=$(free | grep Mem | awk '{printf "%.1f\n", $3/$2 * 100.0}') url_MemUsedPercent=$URL_set_MemUsedPercent$MemUsedPercent echo "$url_MemUsedPercent" curl -s $url_MemUsedPercent > /dev/null 2>&1 # HDD-Temperaturen in Celsius HDDTemp1=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp1=$URL_set_HDDTemp1$HDDTemp1 echo "$url_HDDTemp1" curl -s $url_HDDTemp1 > /dev/null 2>&1 HDDTemp2=$(smartctl -A /dev/sdb -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp2=$URL_set_HDDTemp2$HDDTemp2 echo "$url_HDDTemp2" curl -s $url_HDDTemp2 > /dev/null 2>&1 HDDTemp3=$(smartctl -A /dev/sdc -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp3=$URL_set_HDDTemp3$HDDTemp3 echo "$url_HDDTemp3" curl -s $url_HDDTemp3 > /dev/null 2>&1 HDDTemp4=$(smartctl -A /dev/sdd -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp4=$URL_set_HDDTemp4$HDDTemp4 echo "$url_HDDTemp4" curl -s $url_HDDTemp4 > /dev/null 2>&1 HDDTemp5=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp5=$URL_set_HDDTemp5$HDDTemp5 echo "$url_HDDTemp5" curl -s $url_HDDTemp5 > /dev/null 2>&1 # Storage-Total Volume 1 in TB StorageVolume1Total=$(df|awk '/volume1$/{printf "%.2f\n", ($2/1024/1024/1024)}') url_StorageVolume1Total=$URL_set_StorageVolume1Total$StorageVolume1Total echo "$url_StorageVolume1Total" curl -s $url_StorageVolume1Total > /dev/null 2>&1 # Storage-Free Volume 1 in TB StorageVolume1Free=$(df|awk '/volume1$/{printf "%.2f\n", ($4/1024/1024/1024)}') url_StorageVolume1Free=$URL_set_StorageVolume1Free$StorageVolume1Free echo "$url_StorageVolume1Free" curl -s $url_StorageVolume1Free > /dev/null 2>&1 # Storage-Used Volume 1 in TB StorageVolume1Used=$(df|awk '/volume1$/{printf "%.2f\n", ($3/1024/1024/1024)}') url_StorageVolume1Used=$URL_set_StorageVolume1Used$StorageVolume1Used echo "$url_StorageVolume1Used" curl -s $url_StorageVolume1Used > /dev/null 2>&1 # Storage-Free Volume 1 in Prozent StorageVolume1FreePercent=$(df|awk '/volume1$/{printf "%.1f\n", ($4/$2*100)}') url_StorageVolume1FreePercent=$URL_set_StorageVolume1FreePercent$StorageVolume1FreePercent echo "$url_StorageVolume1FreePercent" curl -s $url_StorageVolume1FreePercent > /dev/null 2>&1 # Storage-Used Volume 1 in Prozent StorageVolume1UsedPercent=$(df|awk '/volume1$/{printf "%.1f\n", ($3/$2*100)}') url_StorageVolume1UsedPercent=$URL_set_StorageVolume1UsedPercent$StorageVolume1UsedPercent echo "$url_StorageVolume1UsedPercent" curl -s $url_StorageVolume1UsedPercent > /dev/null 2>&1 # Storage-Total Volume 2 in GB StorageVolume2Total=$(df|awk '/volume2$/{printf "%.2f\n", ($2/1024/1024)}') url_StorageVolume2Total=$URL_set_StorageVolume2Total$StorageVolume2Total echo "$url_StorageVolume2Total" curl -s $url_StorageVolume2Total > /dev/null 2>&1 # Storage-Free Volume 2 in GB StorageVolume2Free=$(df|awk '/volume2$/{printf "%.2f\n", ($4/1024/1024)}') url_StorageVolume2Free=$URL_set_StorageVolume2Free$StorageVolume2Free echo "$url_StorageVolume2Free" curl -s $url_StorageVolume2Free > /dev/null 2>&1 # Storage-Used Volume 2 in GB StorageVolume2Used=$(df|awk '/volume2$/{printf "%.2f\n", ($3/1024/1024)}') url_StorageVolume2Used=$URL_set_StorageVolume2Used$StorageVolume2Used echo "$url_StorageVolume2Used" curl -s $url_StorageVolume2Used > /dev/null 2>&1 # Storage-Free Volume 2 in Prozent StorageVolume2FreePercent=$(df|awk '/volume2$/{printf "%.1f\n", ($4/$2*100)}') url_StorageVolume2FreePercent=$URL_set_StorageVolume2FreePercent$StorageVolume2FreePercent echo "$url_StorageVolume2FreePercent" curl -s $url_StorageVolume2FreePercent > /dev/null 2>&1 # Storage-Used Volume 2 in Prozent StorageVolume2UsedPercent=$(df|awk '/volume2$/{printf "%.1f\n", ($3/$2*100)}') url_StorageVolume2UsedPercent=$URL_set_StorageVolume2UsedPercent$StorageVolume2UsedPercent echo "$url_StorageVolume2UsedPercent" curl -s $url_StorageVolume2UsedPercent > /dev/null 2>&1 # Uptime unterteilt in "volle Tage und Stunden" UptimeSecs=$(cat /proc/uptime | awk '{printf"%.0f\n", $1}') UptimeDays=$(($UptimeSecs/86400)) UptimeHours=$((($UptimeSecs/3600)-($UptimeDays*24))) UptimeMinutes=$((($UptimeSecs/60)-($UptimeDays*24*60)-($UptimeHours*60))) url_UptimeDays=$URL_set_UptimeDays$UptimeDays echo "$url_UptimeDays" curl -s $url_UptimeDays > /dev/null 2>&1 url_UptimeHours=$URL_set_UptimeHours$UptimeHours echo "$url_UptimeHours" curl -s $url_UptimeHours > /dev/null 2>&1 url_UptimeMinutes=$URL_set_UptimeMinutes$UptimeMinutes echo "$url_UptimeMinutes" curl -s $url_UptimeMinutes > /dev/null 2>&1 # DSM-Version Version=$(more /etc.defaults/VERSION | grep productversion | awk -F '=' '{print $2}' | sed 's/"//g') BuildNumber=$(more /etc.defaults/VERSION | grep buildnumber | awk -F '=' '{print $2}' | sed 's/"//g') FixNumber=$(more /etc.defaults/VERSION | grep smallfixnumber | awk -F '=' '{print $2}' | sed 's/"//g') DSMVersion=$Version"-"$BuildNumber"%20Update%20"$FixNumber url_DSMVersion=$URL_set_DSMVersion$DSMVersion echo "$url_DSMVersion" curl -s $url_DSMVersion > /dev/null 2>&1 # Timestamp für letztes Update der Werte TimestampDay=$(date +%Y-%m-%d) TimestampTime=$(date +%H:%M:%S) Timestamp=$TimestampDay"%20"$TimestampTime url_Timestamp=$URL_set_Timestamp$Timestamp echo "$url_Timestamp" curl -s $url_Timestamp > /dev/null 2>&1 exit 0
  • Horizon Box mit Alexa Steuern! IR Codes

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    6k Aufrufe
    Max12318M
    Hey.. irgendwie komme ich mit meinem Alten User Namen nicht mehr rein. Habe jetzt ein Neuen erstellt. Für deine Neue Box habe ich keine.. habe auch sehr lange gesucht, durch Zufall gefunden. Suche nach den genau Modell Bezeichnung und nicht nach „Horizon Box“
  • Lösung für langsam ladende VIS

    1
    2
    0 Stimmen
    1 Beiträge
    550 Aufrufe
    Niemand hat geantwortet
  • MPD Adapter einrichten

    4
    1
    0 Stimmen
    4 Beiträge
    519 Aufrufe
    HomoranH
    @pxxxxxp sagte in MPD Adapter einrichten: Hier mal mein log.[image: 1585227370825-mpd_log.jpg] Muss ich hier mine IP eintragen?[image: 1585227406796-mpd_ip.jpg] Ich kenne den Adapter nicht, weiß nicht mal wofür der ist. Aber üblicherweise stellt man in der Konfig die IP ein, unter der das Gerät oder wasauchimmer zu erreichen ist. 127.0.0.1 würde gelten, wenn sich mpd auf dem selben Rechner wie ioBroker befindet
  • Neus Jahr • Neue VIS

    3
    12
    3 Stimmen
    3 Beiträge
    2k Aufrufe
    Agria4800A
    @skvarel: echt gut geworden, sehr geil :+1:
  • Mi-Light RGBW Problem

    milight
    1
    0 Stimmen
    1 Beiträge
    205 Aufrufe
    Niemand hat geantwortet
  • [Projekt] Alarmanlage mit mehreren Alarmstufen

    Verschoben
    138
    1
    0 Stimmen
    138 Beiträge
    38k Aufrufe
    J
    @nis Hallo, mir ist nicht klar wie man die Alarmanlage verzögert "scharf" schaltet. Soweit klappt alles, nur wenn ich am Tablet auf "Full" gehe damit die Anlage einschalte, die Tür öffne und schließe, löst es schon Alarm aus. Wo kann man sich einstellen, das der Status scharf erst 30-60 Sekunden später erfolgt? Grüße JB
  • Haustürschloss für 10,- überwachen

    tür
    1
    7
    5 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet
  • Thermometer mit WS2811 oder WS 2812

    ws2812 display
    25
    0 Stimmen
    25 Beiträge
    3k Aufrufe
    joergeliJ
    @Chaot Hallo, anbei - wie versprochen - das JavaScript und der Arduino-Sketch für die NodeMCU. JavaScript: //########################################################################## // Aussen-/Innentemperatur für WS2812 BigThermometer //########################################################################## // Bitte die folgenden 2 Datenpunkte nicht! umbenennen createState('javascript.0.BigTemp.1', { name: 'BigTemp-Aussen', desc: 'Aussen-Temp', type: 'number', def: 0 }); createState('javascript.0.BigTemp.2', { name: 'BigTemp-Innen' , desc: 'Innen-Temp', type: 'number', def: 0 }); // Hier die eigenen! Datenpunkte für Aussen-/Innentemperatur eintragen const aussentemp = 'hm-rpc.2.CUX0100001.1.TEMPERATURE' // bei mir Aussentemp via CUX const innentemp = 'sonoff.0.Kodi-Stecker.AM2301_Temperature' // bei mir InnenTemp via Sonoff DHT22 on({id: aussentemp, change: "any"},function(obj) { let aussen_temperatur = getState(aussentemp).val; let around = Math.round(aussen_temperatur); //console.log("around: " + around); setState ('javascript.0.BigTemp.1', around); }); on({id: innentemp, change: "any"},function(obj) { let innen_temperatur = getState(innentemp).val; let iround = Math.round(innen_temperatur); //console.log("iround: " + iround); setState ('javascript.0.BigTemp.2', iround); }); Zum Testen kann man in den ioBroker-Objekten javascript.0.BigTemp.1 und javascript.0.BigTemp.2 die dortigen Temperaturwerte manuell überschreiben (im Bereich von -15 bis 45 Grad), dann sollten sich die LEDs im RGB_Stripe entspr. ändern. __ Arduino-Sketch: /* ######################################################################################## Innen-/Aussentemperatur aus ioBroker via MQTT auf LED-Thermometer (WS2812) anzeigen Hardware: NodeMCU Compiled with Arduino IDE V1.8.10 26.02.2020 Made by joergeli ######################################################################################## */ #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <ArduinoOTA.h> // fuer Flashen ueber WLAN ( OTA = Over The Air) #define FASTLED_ALLOW_INTERRUPTS 0 // gegen Flackern/Flickering #include <FastLED.h> #define LED_PIN 6 // = D6 #define LED_TYPE NEOPIXEL #define NUM_LEDS 61 #define COLOR_ORDER RGB CRGB leds[NUM_LEDS]; int start_helligkeit = 30; int helligkeit_temp = 10; // für WiFi Regenbogen-Intro #define TEMPERATURE_1 Tungsten100W #define TEMPERATURE_2 OvercastSky #define DISPLAYTIME 1 #define BLACKTIME 0 int intLED = D4; // interne, blaue LED (wird spaeter ausgeschaltet, da nicht benoetigt) int Aussen_LED_Nr; int Innen_LED_Nr; int a0 = 0; int i0 = 0; uint8_t gHue = 0; //######################################################################################## // Hier die eigenen Netzwerk-Parameter eintragen !!! IPAddress ip(xxx.xxx.xxx.xxx); //### statische ip-addresse IPAddress gateway(xxx.xxx.xxx.xxx); //### router IPAddress subnet(255, 255, 255, 0); //### subnet-mask IPAddress dns(xxx.xxx.xxx.xxx); //### dns-server meist identisch mit router const char* ssid = "yyyyyyyy"; //### WLAN SSID (Gänsefüsschen müssen erhalten bleiben) const char* pwd = "yyyyyyyy"; //### WLAN Password (Gänsefüsschen müssen erhalten bleiben) const char* mqtt_server = "xxx.xxx.xxx.xxx"; //### MQTT-Adapter IP-Adresse, bzw. ioBroker IP-Adresse(Gänsefüsschen müssen erhalten bleiben) int mqtt_port = 1883; //### MQTT-Port in ioBroker (normalerweise 1883) const char* OTA_host = "Big Thermometer"; // Name unter welchem der virtuelle Port in der Arduino-IDE auftaucht(Gänsefüsschen müssen erhalten bleiben) //######################################################################################## WiFiClient espClient; PubSubClient client(espClient); //_________________________________________________________________________________________ // Farb-Animation, wenn AussenTemp empfangen wurde void anima() { FastLED.setBrightness(helligkeit_temp); for(int n=0; n<=3; n++){ delay(100); leds[Aussen_LED_Nr] = CRGB( 255, 255, 0); FastLED.show(); delay(100); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); FastLED.show(); delay(100); leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); FastLED.show(); delay(100); leds[Aussen_LED_Nr] = CRGB( 0, 255, 255); FastLED.show(); delay(100); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); FastLED.show(); } } //_________________________________________________________________________________________ // Farb-Animation, wenn InnenTemp empfangen wurde void animi() { FastLED.setBrightness(helligkeit_temp); for(int n=0; n<=3; n++){ delay(100); leds[Innen_LED_Nr] = CRGB( 255, 255, 0); FastLED.show(); delay(100); leds[Innen_LED_Nr] = CRGB( 255, 0, 255); FastLED.show(); delay(100); leds[Innen_LED_Nr] = CRGB( 0, 255, 0); FastLED.show(); delay(100); leds[Innen_LED_Nr] = CRGB( 0, 255, 255); FastLED.show(); delay(100); leds[Innen_LED_Nr] = CRGB( 255, 0, 0); FastLED.show(); } } //_________________________________________________________________________________________ // blaue Skalen-Markierungen in 5er-Schritten setzen void markierungen_setzen(){ for( int i=0; i<= NUM_LEDS ; i+=5) {leds[i] = CRGB( 0, 0, 40); } // 5er Skalen-Markierungen erzeugen und setzen FastLED.show(); } //_________________________________________________________________________________________ void regenbogen(){ // Farb-Animation, so lange bis WLAN connected ist static uint8_t starthue = 0; fill_rainbow( leds , NUM_LEDS , --starthue, 20); uint8_t secs = (millis() / 1000) % (DISPLAYTIME * 2); if( secs < DISPLAYTIME) { FastLED.setTemperature( TEMPERATURE_1 ); // first temperature leds[0] = TEMPERATURE_1; // show indicator pixel } else { FastLED.setTemperature( TEMPERATURE_2 ); // second temperature leds[0] = TEMPERATURE_2; // show indicator pixel } if( (secs % DISPLAYTIME) < BLACKTIME) { memset8( leds, 0, NUM_LEDS * sizeof(CRGB)); } FastLED.show(); FastLED.delay(1); } //_________________________________________________________________________________________ // Subroutine fuer WLAN-Verbindung void setup_wifi(){ WiFi.config(ip, gateway, subnet, dns); delay(100); WiFi.mode(WIFI_STA); WiFi.begin(ssid, pwd); Serial.println(""); Serial.println("___________________________________________________"); Serial.print("Connecting to "); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { regenbogen(); // Regenbogen-Effekt anzeigen, solange bis WLAN verbunden ist } // end of while Serial.println(""); Serial.print(" OK ---> "); Serial.print("IP: "); Serial.println(WiFi.localIP()); FastLED.clear(); // alle LEDs aus FastLED.show(); } // end of void connectWIFI //_________________________________________________________________________________________ void MQTTCallback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived [" ); Serial.print(topic); Serial.print("] "); String Temp = ""; for (int i = 0; i < length; i++) { Temp = Temp + (char)payload[i]; } Serial.print(" Temp: " + Temp + "\t" ); String TopicName = topic; TopicName.replace("javascript/0/BigTemp/",""); int LedIndex = TopicName.toInt(); LedIndex = LedIndex - 1; Serial.print(" LedIndex: " ); Serial.print(LedIndex); Serial.print("\t"); //AussenTemp LED-Nr String AussenTemp; if(LedIndex == 0){ for (int i = 0; i < length; i++) { AussenTemp = AussenTemp + (char)payload[i]; } Aussen_LED_Nr = AussenTemp.toInt() +15; Serial.print(" Aussen_LED_Nr: "); Serial.println(Aussen_LED_Nr); } //InnenTemp LED-Nr String InnenTemp; if(LedIndex == 1){ for (int i = 0; i < length; i++) { InnenTemp = InnenTemp + (char)payload[i]; } Innen_LED_Nr = InnenTemp.toInt() +15 ; Serial.print(" Innen_LED_Nr: "); Serial.println(Innen_LED_Nr); } // für 5er Skala int modulo_a = Aussen_LED_Nr % 5; // ist 0, wenn durch 5 teilbar int modulo_i = Innen_LED_Nr % 5; // ist 0, wenn durch 5 teilbar //////////////////////////////////////////////////////////////////////////////////////////////// //##################### //Aussen-Temp anzeigen //##################### if(LedIndex == 0){ leds[a0] = CRGB( 0, 0, 0); // Aussen-LEDs zuruecksetzen markierungen_setzen(); //### InnenTemp mit altem, bisherigem Wert ueberschreiben ###// if(Innen_LED_Nr == 60) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+45 if(Innen_LED_Nr == 59) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+44 if(Innen_LED_Nr == 58) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+43 if(Innen_LED_Nr == 57) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+42 if(Innen_LED_Nr == 56) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+41 if(Innen_LED_Nr == 55) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+40 if(Innen_LED_Nr == 54) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+39 if(Innen_LED_Nr == 53) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+38 if(Innen_LED_Nr == 52) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+37 if(Innen_LED_Nr == 51) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+36 if(Innen_LED_Nr == 50) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+35 if(Innen_LED_Nr == 49) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+34 if(Innen_LED_Nr == 48) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+33 if(Innen_LED_Nr == 47) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+32 if(Innen_LED_Nr == 46) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+31 if(Innen_LED_Nr == 45) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+30 if(Innen_LED_Nr == 44) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+29 if(Innen_LED_Nr == 43) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+28 if(Innen_LED_Nr == 42) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+27 if(Innen_LED_Nr == 41) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+26 if(Innen_LED_Nr == 40) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+25 if(Innen_LED_Nr == 39) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+24 if(Innen_LED_Nr == 38) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+23 if(Innen_LED_Nr == 37) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+22 if(Innen_LED_Nr == 36) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+21 if(Innen_LED_Nr == 35) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+20 if(Innen_LED_Nr == 34) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+19 if(Innen_LED_Nr == 33) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+18 if(Innen_LED_Nr == 32) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+17 if(Innen_LED_Nr == 31) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+16 if(Innen_LED_Nr == 30) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+15 if(Innen_LED_Nr == 29) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+14 if(Innen_LED_Nr == 28) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+13 if(Innen_LED_Nr == 27) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+12 if(Innen_LED_Nr == 26) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+11 if(Innen_LED_Nr == 25) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+10 if(Innen_LED_Nr == 24) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+9 if(Innen_LED_Nr == 23) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+8 if(Innen_LED_Nr == 22) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+7 if(Innen_LED_Nr == 21) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+6 if(Innen_LED_Nr == 20) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+5 if(Innen_LED_Nr == 19) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+4 if(Innen_LED_Nr == 18) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+3 if(Innen_LED_Nr == 17) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+2 if(Innen_LED_Nr == 16) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+1 if(Innen_LED_Nr == 15) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //0 if(Innen_LED_Nr == 14) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-1 if(Innen_LED_Nr == 13) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-2 if(Innen_LED_Nr == 12) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-3 if(Innen_LED_Nr == 11) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-4 if(Innen_LED_Nr == 10) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-5 if(Innen_LED_Nr == 9) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-6 if(Innen_LED_Nr == 8) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-7 if(Innen_LED_Nr == 7) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-8 if(Innen_LED_Nr == 6) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-9 if(Innen_LED_Nr == 5) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-10 if(Innen_LED_Nr == 4) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-11 if(Innen_LED_Nr == 3) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-12 if(Innen_LED_Nr == 2) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-13 if(Innen_LED_Nr == 1) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-14 if(Innen_LED_Nr == 0) { leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-15 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(Aussen_LED_Nr == 60){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+45 if(Aussen_LED_Nr == 59){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+44 if(Aussen_LED_Nr == 58){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+43 if(Aussen_LED_Nr == 57){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+42 if(Aussen_LED_Nr == 56){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+41 if(Aussen_LED_Nr == 55){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+40 if(Aussen_LED_Nr == 54){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+39 if(Aussen_LED_Nr == 53){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+38 if(Aussen_LED_Nr == 52){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+37 if(Aussen_LED_Nr == 51){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+36 if(Aussen_LED_Nr == 50){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+35 if(Aussen_LED_Nr == 49){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+34 if(Aussen_LED_Nr == 48){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+33 if(Aussen_LED_Nr == 47){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+32 if(Aussen_LED_Nr == 46){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+31 if(Aussen_LED_Nr == 45){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+30 if(Aussen_LED_Nr == 44){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+29 if(Aussen_LED_Nr == 43){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+28 if(Aussen_LED_Nr == 42){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+27 if(Aussen_LED_Nr == 41){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+26 if(Aussen_LED_Nr == 40){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+25 if(Aussen_LED_Nr == 39){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+24 if(Aussen_LED_Nr == 38){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+23 if(Aussen_LED_Nr == 37){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+22 if(Aussen_LED_Nr == 36){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+21 if(Aussen_LED_Nr == 35){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+20 if(Aussen_LED_Nr == 34){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+19 if(Aussen_LED_Nr == 33){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+18 if(Aussen_LED_Nr == 32){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+17 if(Aussen_LED_Nr == 31){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+16 if(Aussen_LED_Nr == 30){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+15 if(Aussen_LED_Nr == 29){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+14 if(Aussen_LED_Nr == 28){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+13 if(Aussen_LED_Nr == 27){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+12 if(Aussen_LED_Nr == 26){ anima(); leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+11 if(Aussen_LED_Nr == 25){ anima(); leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+10 if(Aussen_LED_Nr == 24){ anima(); leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+9 if(Aussen_LED_Nr == 23){ anima(); leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+8 if(Aussen_LED_Nr == 22){ anima(); leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+7 if(Aussen_LED_Nr == 21){ anima(); leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+6 if(Aussen_LED_Nr == 20){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+5 if(Aussen_LED_Nr == 19){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+4 if(Aussen_LED_Nr == 18){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+3 if(Aussen_LED_Nr == 17){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+2 if(Aussen_LED_Nr == 16){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+1 if(Aussen_LED_Nr == 15){ anima(); leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //0 if(Aussen_LED_Nr == 14){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-1 if(Aussen_LED_Nr == 13){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-2 if(Aussen_LED_Nr == 12){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-3 if(Aussen_LED_Nr == 11){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-4 if(Aussen_LED_Nr == 10){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-5 if(Aussen_LED_Nr == 9){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-6 if(Aussen_LED_Nr == 8){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-7 if(Aussen_LED_Nr == 7){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-8 if(Aussen_LED_Nr == 6){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-9 if(Aussen_LED_Nr == 5){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-10 if(Aussen_LED_Nr == 4){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-11 if(Aussen_LED_Nr == 3){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-12 if(Aussen_LED_Nr == 2){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-13 if(Aussen_LED_Nr == 1){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-14 if(Aussen_LED_Nr == 0){ anima(); leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-15 FastLED.show(); } // end of ifLedIndex == 0 //////////////////////////////////////////////////////////////////////////////////////////////// //#################### //Innen-Temp anzeigen //#################### if(LedIndex == 1){ leds[i0] = CRGB( 0, 0, 0); // Innen-LEDs zuruecksetzen markierungen_setzen(); //### AuusenTemp mit altem Wert, bisherigem ueberschreiben ###// if(Aussen_LED_Nr == 60){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+45 if(Aussen_LED_Nr == 59){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+44 if(Aussen_LED_Nr == 58){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+43 if(Aussen_LED_Nr == 57){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+42 if(Aussen_LED_Nr == 56){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+41 if(Aussen_LED_Nr == 55){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+40 if(Aussen_LED_Nr == 54){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+39 if(Aussen_LED_Nr == 53){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+38 if(Aussen_LED_Nr == 52){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+37 if(Aussen_LED_Nr == 51){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //+36 if(Aussen_LED_Nr == 50){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+35 if(Aussen_LED_Nr == 49){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+34 if(Aussen_LED_Nr == 48){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+33 if(Aussen_LED_Nr == 47){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+32 if(Aussen_LED_Nr == 46){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+31 if(Aussen_LED_Nr == 45){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+30 if(Aussen_LED_Nr == 44){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+29 if(Aussen_LED_Nr == 43){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+28 if(Aussen_LED_Nr == 42){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+27 if(Aussen_LED_Nr == 41){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 0); a0 = Aussen_LED_Nr; } //+26 if(Aussen_LED_Nr == 40){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+25 if(Aussen_LED_Nr == 39){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+24 if(Aussen_LED_Nr == 38){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+23 if(Aussen_LED_Nr == 37){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+22 if(Aussen_LED_Nr == 36){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+21 if(Aussen_LED_Nr == 35){ leds[Aussen_LED_Nr] = CRGB( 255, 60, 0); a0 = Aussen_LED_Nr; } //+20 if(Aussen_LED_Nr == 34){ leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+19 if(Aussen_LED_Nr == 33){ leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+18 if(Aussen_LED_Nr == 32){ leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+17 if(Aussen_LED_Nr == 31){ leds[Aussen_LED_Nr] = CRGB( 0, 255, 0); a0 = Aussen_LED_Nr; } //+16 if(Aussen_LED_Nr == 30){ leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+15 if(Aussen_LED_Nr == 29){ leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+14 if(Aussen_LED_Nr == 28){ leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+13 if(Aussen_LED_Nr == 27){ leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+12 if(Aussen_LED_Nr == 26){ leds[Aussen_LED_Nr] = CRGB( 0, 50, 0); a0 = Aussen_LED_Nr; } //+11 if(Aussen_LED_Nr == 25){ leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+10 if(Aussen_LED_Nr == 24){ leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+9 if(Aussen_LED_Nr == 23){ leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+8 if(Aussen_LED_Nr == 22){ leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+7 if(Aussen_LED_Nr == 21){ leds[Aussen_LED_Nr] = CRGB( 70, 255, 70); a0 = Aussen_LED_Nr; } //+6 if(Aussen_LED_Nr == 20){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+5 if(Aussen_LED_Nr == 19){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+4 if(Aussen_LED_Nr == 18){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+3 if(Aussen_LED_Nr == 17){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+2 if(Aussen_LED_Nr == 16){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //+1 if(Aussen_LED_Nr == 15){ leds[Aussen_LED_Nr] = CRGB( 160, 160, 160); a0 = Aussen_LED_Nr; } //0 if(Aussen_LED_Nr == 14){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-1 if(Aussen_LED_Nr == 13){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-2 if(Aussen_LED_Nr == 12){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-3 if(Aussen_LED_Nr == 11){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-4 if(Aussen_LED_Nr == 10){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 255); a0 = Aussen_LED_Nr; } //-5 if(Aussen_LED_Nr == 9){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-6 if(Aussen_LED_Nr == 8){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-7 if(Aussen_LED_Nr == 7){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-8 if(Aussen_LED_Nr == 6){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-9 if(Aussen_LED_Nr == 5){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-10 if(Aussen_LED_Nr == 4){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-11 if(Aussen_LED_Nr == 3){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-12 if(Aussen_LED_Nr == 2){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-13 if(Aussen_LED_Nr == 1){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-14 if(Aussen_LED_Nr == 0){ leds[Aussen_LED_Nr] = CRGB( 255, 0, 70); a0 = Aussen_LED_Nr; } //-15 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(Innen_LED_Nr == 60) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+45 if(Innen_LED_Nr == 59) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+44 if(Innen_LED_Nr == 58) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+43 if(Innen_LED_Nr == 57) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+42 if(Innen_LED_Nr == 56) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+41 if(Innen_LED_Nr == 55) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+40 if(Innen_LED_Nr == 54) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+39 if(Innen_LED_Nr == 53) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+38 if(Innen_LED_Nr == 52) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+37 if(Innen_LED_Nr == 51) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+36 if(Innen_LED_Nr == 50) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+35 if(Innen_LED_Nr == 49) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+34 if(Innen_LED_Nr == 48) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+33 if(Innen_LED_Nr == 47) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+32 if(Innen_LED_Nr == 46) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+31 if(Innen_LED_Nr == 45) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+30 if(Innen_LED_Nr == 44) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+29 if(Innen_LED_Nr == 43) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+28 if(Innen_LED_Nr == 42) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+27 if(Innen_LED_Nr == 41) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+26 if(Innen_LED_Nr == 40) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+25 if(Innen_LED_Nr == 39) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+24 if(Innen_LED_Nr == 38) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+23 if(Innen_LED_Nr == 37) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+22 if(Innen_LED_Nr == 36) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+21 if(Innen_LED_Nr == 35) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+20 if(Innen_LED_Nr == 34) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+19 if(Innen_LED_Nr == 33) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+18 if(Innen_LED_Nr == 32) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+17 if(Innen_LED_Nr == 31) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+16 if(Innen_LED_Nr == 30) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+15 if(Innen_LED_Nr == 29) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+14 if(Innen_LED_Nr == 28) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+13 if(Innen_LED_Nr == 27) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+12 if(Innen_LED_Nr == 26) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+11 if(Innen_LED_Nr == 25) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+10 if(Innen_LED_Nr == 24) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+9 if(Innen_LED_Nr == 23) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+8 if(Innen_LED_Nr == 22) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+7 if(Innen_LED_Nr == 21) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+6 if(Innen_LED_Nr == 20) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+5 if(Innen_LED_Nr == 19) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+4 if(Innen_LED_Nr == 18) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+3 if(Innen_LED_Nr == 17) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+2 if(Innen_LED_Nr == 16) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //+1 if(Innen_LED_Nr == 15) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //0 if(Innen_LED_Nr == 14) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-1 if(Innen_LED_Nr == 13) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-2 if(Innen_LED_Nr == 12) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-3 if(Innen_LED_Nr == 11) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-4 if(Innen_LED_Nr == 10) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-5 if(Innen_LED_Nr == 9) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-6 if(Innen_LED_Nr == 8) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-7 if(Innen_LED_Nr == 7) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-8 if(Innen_LED_Nr == 6) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-9 if(Innen_LED_Nr == 5) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-10 if(Innen_LED_Nr == 4) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-11 if(Innen_LED_Nr == 3) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-12 if(Innen_LED_Nr == 2) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-13 if(Innen_LED_Nr == 1) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-14 if(Innen_LED_Nr == 0) { animi(); leds[Innen_LED_Nr] = CRGB( 255, 150, 0); i0 = Innen_LED_Nr; } //-15 FastLED.show(); } // end of ifLedIndex == 1 } // end of void MQTTCallback //_________________________________________________________________________________________ void reconnect() { while (!client.connected()) { for(int i=NUM_LEDS-1; i>=0; i--){ //alle LEDS leuchten nacheinander gruen, wenn noch nicht mit MQTT verbunden delay(15); leds[i] = CRGB( 0, 255, 0); FastLED.show(); } Serial.print("Attempting MQTT connection..."); String clientId = "Big Thermometer"; // Attempt to connect if (client.connect(clientId.c_str())) { delay(1000); FastLED.clear(); // alle LEDs aus, wenn mit MQTT verbunden FastLED.show(); Serial.println("connected"); client.subscribe("javascript/0/BigTemp/#"); // alle subscriben } else{ Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } // end of while markierungen_setzen(); // 5er Skalenmarkierungen setzen delay(200); } // end of void reconnect //_________________________________________________________________________________________ void setup() { pinMode(intLED, OUTPUT); // interne LED digitalWrite(intLED, HIGH); // interne blaue Board-LED ausschalten ( HIGH = Off) FastLED.addLeds<LED_TYPE, LED_PIN>(leds, NUM_LEDS); FastLED.setBrightness(start_helligkeit); for(int i=0; i<=NUM_LEDS-1; i++){ //alle LEDS leuchten nacheinander tuerkis nach dem booten delay(18); leds[i] = CRGB( 70, 150, 70); FastLED.show(); } delay(700); FastLED.clear(); // alle LEDs aus FastLED.show(); Serial.begin(115200); setup_wifi(); delay(500); client.setServer(mqtt_server, mqtt_port); // mqtt.0 auf Port 1891 in ioBroker client.setCallback(MQTTCallback); ArduinoOTA.setHostname(OTA_host); // fuer Flashen ueber WLAN ArduinoOTA.begin(); // fuer Flashen ueber WLAN } // end of setup //_________________________________________________________________________________________ void loop(){ ArduinoOTA.handle(); //fuer Flashen ueber WLAN if (!client.connected()) { reconnect(); } client.loop(); } // end of loop //_________________________________________________________________________________________ Anmerkungen zum Sketch: 0.) Ich verwende lieber statische IP-Adressen, als DHCP, deshalb müssen im Sketch die eigenen Netzwerkparameter manuell eingetragen werden 1.) Libraries ESP8266WiFi.h, PubSubClient.h ArduinoOTA.h, FastLED.h müssen in Arduino-IDE installiert sein. 2.) Nach dem Boot leuchten alle LEDs nacheinander türkis. 3.) Solange das WLAN noch nicht verbunden ist, leuchten alle LEDs mit einem Regenbogen-Effekt 4.) Wenn MQTT verbunden ist, leuchten alle LEDs nacheinander kurz grün. 5.) Meine gewählten Farben für die Aussen-Temp Bereiche: -15 bis -6 dunkelviolett -5 bis -1 violett 0 bis +5 weiß +6 bis +10 türkis +11 bis +15 dunkelgrün +16 bis +19 grün +20 bis +25 orange +26 bis +35 rot +36 bis +45 violett 6.) Farbe für kpl. Innen-Temp-Bereich : gelb Evtl. werden die Farben - je nach verwendetem RGB-Stripe - anders dargestellt, oder wem die Farben/Bereiche nicht gefallen, der kann sie im Sketch entspr. anpassen ( CRGB( xxx, yyy, zzz) ) Sollte es - aus welchen Gründen auch immer - nicht funktionieren, auch mal den seriellen Monitor einschalten und die Meldungen beobachten. Man könnte das Ganze wahrscheinlich auch eleganter - als mit den vielen if-Abfragen - programmieren, aber dazu stecke ich da nicht tief genug drin. Hinweis: Nach dem erstmaligen Flashen via USB-Kabel ist es fortan auch möglich die NodeMCU via WLAN zu flashen ( OTA = Over the air). Dazu in der Arduino-IDE unter "Werkzeuge" -> "Board" den Port "Big Thermometer at xxx.xxx.xxx.xxx" auswählen. Wer es gebrauchen kann, hier noch ein Layout auf Lochrasterplatine: [image: 1583245063668-bigthermometer_lochraster.jpg] (Den zusätzlichen Reset-Button habe ich per Kabel in der Gehäuse-Wandung montiert)

561

Online

32.6k

Benutzer

82.3k

Themen

1.3m

Beiträge