Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Projekt: Shelly plus1 AddOn Temperaturen mit JS auslesen

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    681

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.0k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    900

Projekt: Shelly plus1 AddOn Temperaturen mit JS auslesen

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
1 Beiträge 1 Kommentatoren 527 Aufrufe 1 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • fuzzy1955F Online
    fuzzy1955F Online
    fuzzy1955
    schrieb am zuletzt editiert von fuzzy1955
    #1

    In meiner kurzen IoBroker-„Laufbahn“ seit Oktober 2024 habe ich eifrigst an dem wundervollen OpenSource-Tool einige praktische Anwendungsbeispiele erprobt. Eines davon ist das automatisierte Auslesen von 3 Temperatursensoren und die 10-minütige Speicherung der Werte in einer MySQL-Datenbank. Das Projekt läuft seit 3 Wochen im Testbetrieb und wird ein Teil meiner geplanten Heizungssteuerung mit IoBroker. Darin befindet sich auch ein Luftsolarkollektor der deutschen Firma Grammer Solar, den ich seit 2007 nicht mehr missen möchte. In diesem Projekt wurde bewusst auf den Shelly-Adapter verzichtet, weil ich als Programmier-Freak gerne die Freiheiten in JavaScript genieße.

    Hardware:
    • RaspBerry Pi 4 mit 4 GB RAM im Hutschienengehäuse; Linux Debian an USB2-Stick mit 256 GB
    • Shelly Plus1 mit AddOn
    • 3 x Temperatursensoren DS18B20

    Adapter:
    • Javascript

    Ablauf:
    • An den Shelly Plus1 mit AddOn werden die Temperatursensoren angeschlossen und anschließend in der eingestellten IP-Adresse im Internet-Browser unter dem Punkt „Add-on“ konfiguriert.

    Shelly Pro 1 AddOn Temperatursensoren.jpg

    In dieser Web-Oberfläche kann man auch sofort die Temperaturen ablesen.

    • Im IoBroker wechselt man zu „Objekte“ und legt folgende Datenpunkte zuerst unter „javascript.0.scriptEnabled.Eigene_Datenpunkte“ an:

    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01.Aussentemperatur
    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01. Innentemperatur
    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01. Luftsolartemperatur

    • Dann legt man die gleichen DP unter „alias.0.Klimatisierung (als Beispiel)“ an und referenziert sie auf die DP unter „javascript.0.scriptEnabled.Eigene_Datenpunkte“ und aktiviert – wahlweise - die automatische SQL-Speicherung (Zahnrad rechts im Datenpunkt). Die DP sind aber auch ohne SQL-Speicherung direkt in Skripts verwendbar:

    alias.0.Klimatisierung.ShellyPlus1_01.Aussentemperatur
    alias.0.Klimatisierung.ShellyPlus1_01.Innentemperatur
    alias.0.Klimatisierung.ShellyPlus1_01.Luftsolartemperatur

    IoB_Objekte_Alias.jpg

    Dazu habe ich von mehreren Forums_Usern den wertvollen Tipp gelesen, dass eine eigene DP-Struktur unter alias.0.xxx... sehr hilfreich in Blick auf die Übersichtlichkeit ist. Meine Struktur schaut teils so aus:

    IoB_Objektstruktur.jpg

    • Im IoB wechselt man dann zu „Skripte – neues Skript (+) – JavaScript“ und legt folgendes Skript an:

    var data;
    
    schedule("*/10 * * * * *", async () => {
      httpGet('http://192.168.xxx.xxx/rpc/temperature.getstatus?id=100', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Aussentemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    
      httpGet('http://192.168. xxx.xxx /rpc/temperature.getstatus?id=101', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Innentemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    
      httpGet('http://192.168. xxx.xxx /rpc/temperature.getstatus?id=102', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Luftsolartemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    });
    
    

    Dieses Skript aktiviert man mit Klick auf den roten Pfeil und damit läuft es dann alle 10 Minuten. Die Zeit kann jeder beliebig einstellen. Die Werte werden – wahlweise - in die MySQL-Datenbanktabelle „ts_number“ geschrieben. Die MySQL-Tabellen habe ich selbst angelegt – wiederum aufgrund von Internet-Recherchen (ich bin halt ein Datenbank-Fan):

    CREATE TABLE sources(  
    	id INTEGER NOT NULL AUTO_INCREMENT,
    	name VARCHAR(255) NOT NULL,  
    PRIMARY KEY (id)) ENGINE = InnoDB;
    
    CREATE UNIQUE INDEX IX_sources01 ON sources(name);
    
    CREATE TABLE datapoints(  
    	id INTEGER NOT NULL AUTO_INCREMENT,  
    	name TEXT NOT NULL,
    	type INTEGER NOT NULL,  
    PRIMARY KEY (id)) ENGINE = InnoDB;
    
    CREATE UNIQUE INDEX IX_datapoints01 ON datapoints(name);
    
    CREATE TABLE ts_number(  
    	id INTEGER NOT NULL AUTO_INCREMENT,  
    	ts BIGINT NOT NULL,
    	val REAL,
    	ack BOOLEAN,
    	q INTEGER NULL,
    	_from INTEGER NOT NULL,
    PRIMARY KEY (id,ts)) ENGINE = InnoDB;
    
    CREATE INDEX IX_ts_number01 ON ts_number(ts);
    CREATE INDEX IX_ts_number02 ON ts_number(id);
    CREATE INDEX IX_ts_number03 ON ts_number(id);
    

    Die Abfrage für die Visualisierung (auch von Zeitreihen) lautet:

    CREATE OR REPLACE VIEW vw_temperaturen AS 
    SELECT a.id, from_unixtime(SUBSTRING(a.ts, 1, 10)) AS tsDate, a.val AS GradC, b.name, c.name as sourcename
    FROM ts_number a LEFT OUTER JOIN
    	datapoints b ON a.id = b.id LEFT OUTER JOIN
    	sources c ON a._from = c.id
    WHERE a.id in (xx, yy,zz) AND a.q = 0; //siehe Tabelle datapoints 
    
    

    Diese Abfrage lässt sich etwa bei den IoB-Diagrammen einsetzen:

    IoB_Diagramm01.jpg

    Nun – das war es. Ich freue mich, wenn das Beispiel für manche von euch verwendbar ist.

    Beste Grüße aus dem Mühlviertel, hf

    Smart-Home-Automation unter IOB auf RASPI5, 16GB RAM, 50GB SSD, MariaSQL, VIS-2.
    Anfang 2025 war ich Newbie in Sachen RaspBerry, Linux und IOB.
    Jetzt läuft alles konstant gut und ich gebe gern meine Erfahrungen und mein Wissen an die Forums-User/Innen weiter.
    Großes Danke an alle tatkräftigen Helfer im Forum!

    1 Antwort Letzte Antwort
    0

    Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

    Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

    Mit deinem Input könnte dieser Beitrag noch besser werden 💗

    Registrieren Anmelden
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    311

    Online

    32.9k

    Benutzer

    83.1k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe