Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Steelseries Widgets im NodeRed Dashboard nutzen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Steelseries Widgets im NodeRed Dashboard nutzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active last edited by

      Ich stelle ja fest, dass hin und wieder doch jemand meine Threads liest. So hat es sich ergeben, dass mich der User @Garf in dem Thread zur Einbindung der Wetter APIs auf ein paar in meinen Augen sehr ansprechend aussehende Widgets aufmerksam gemacht hat. Wahrscheinlich, lässt sich das im VIS noch leichter einbinden - zumindest in der alten Version der Steelseries Widgets, die hier benutzt wird.

      Zum Ausprobieren, welche Widgets es gibt und wie man deren Aussehen verändern kann, sollte man sich mal diese Demoseite anschauen.

      Die wichtigste Voraussetzung ist, wie bei der Beschreibung zur Einbindung der Bahnhofsuhr, dass man in der settings.js den http-static Parameter definiert, um es NodeRed zu ermöglichen auf eigene Datei zuzugreifen.

      Das Prinzip hier ist das Gleiche.

      Leider bin ich mit der ganzen WEB und meinem HTML Wissen und Javascript Dateien ein blutiger Anfänger 😞 . Diese neue Version auf die dieses GitHub Respository verweist, bekomme ich deshalb nicht eingebunden, da da auch alle Komponenten in Einzeldateien verpackt sind und nachgeladen werden. Weiß nicht warum man das macht, aber ich bekomme diese Imports nicht eingebunden, da es sich nicht um Module handelt und das Verändern von JSON Dateien etc. war alles nicht erfolgreich, sodass ich eigentlich schon beinahe am Aufgeben war. 😟 😩

      Aber zum Glück ist die alte Version noch verfügbar und es scheint, dass die Funktionlität sich nicht geändert hat in der neuen Version und ich bis jetzt bei meinen Versuchen, auch alles in der alten Version gefunden habe.

      Die alte Version, die funktioniert und mit der ich hier arbeite findet man hier: https://github.com/HanSolo/SteelSeries-Canvas
      Das heißt dieses Projekt ist ca. 10 Jahre alt. 😉

      Im Prinzip brauchst man aus dem Link eigentlich nur 2 Dateien:

      <script src="/myjs/tween.js"></script>
      <script src="/myjs/steelseries.js"></script>
      
      

      Ich habe jetzt mal nicht die minimal Versionen genommen, weil ich nicht weiß was fehlt. Die beiden Dateien also in Euer http-Static Verzeichnis kopieren und das wars dann eigentlich schon.

      Ein Beispiel Flow mit den alten JS-Dateien gibst in diesem Artikel von 2017 und der funktioniert auch heute noch 😉 :
      https://tech.scargill.net/steelseries-and-node-red/

      Hier wurden auch die alten Dateien verwendet. 😉

      Wenn man diesen Flow nachbildet dann kann man ein paar Effekte testen - so schaut das Teil dann im NR Dashboard aus:

      f31ed635-3872-4137-886a-7c7a298cc207-image.png

      Man kann da bissi Lernen. Zum Beispiel ist die LED rechts oben (also unter der 70) die leuchtet wenn ein selbst definierter Schwellenwert (durch das rote Dreieck markiert). Dabei kann man definieren, ob die LED leuchten soll, wenn der Schwellenwert unter oder überschritten wird. 😉

      Einer von den @Garf noch zur Verfügung gestellten Artikel, ist dieser hier:
      https://harmoniccode.blogspot.com/2011/09/steelseries-396.html. Da gibts zwar noch paar interessante Effekte (wie diese innen beleuchteten Rahmen), aber diese Quellen gibst leider nicht mehr. 😞 -

      Die Dokumentation zu diesen Widgets ist spärlich. Gibt zwar im Rahmen einiger Diskussionen, wie hier ein paar nützliche Infos - aber im Prinzip muss man sich die Javascript Dateien direkt anschauen.

      Ich habe mal einen Kommentar-Node gemacht, der zumindest mal die Definitionen, wie man diese aus den Template Nodes aufrufen muss, verfügbar gemacht.

      5f1696e1-fa56-46ab-ac3c-e3b3f66c7fe7-image.png

      vielleicht für den einen oder anderen der das ebenfalls nachbauen will - hier mal die Node:

      [
         {
             "id": "59a78acc.e15774",
             "type": "comment",
             "z": "f19174b9.aa88f8",
             "name": "steelseries - Types",
             "info": "#  Definitionen       \n        \n##         Components EXTERNAL : INTERNAL\n        Radial : radial,\n        RadialBargraph : radialBargraph,\n        RadialVertical : radialVertical,\n        Linear: linear,\n        LinearBargraph: linearBargraph,\n        DisplaySingle: displaySingle,\n        DisplayMulti: displayMulti,\n        Level : level,\n        Compass : compass,\n        WindDirection : windDirection,\n        Horizon : horizon,\n        Led : led,\n        Clock : clock,\n        Battery : battery,\n        StopWatch : stopwatch,\n        Altimeter : altimeter,\n        TrafficLight: trafficlight,\n        LightBulb: lightbulb,\n        Odometer: odometer,\n\n        // Images\n        drawFrame : drawRadialFrameImage,\n        drawBackground : drawRadialBackgroundImage,\n        drawForeground : drawRadialForegroundImage,\n\n        // Tools\n        rgbaColor :  RgbaColor,\n        ConicalGradient : ConicalGradient,\n        setAlpha : setAlpha,\n        getColorFromFraction : getColorFromFraction,\n        gradientWrapper : GradientWrapper,\n\n        // Constants\n        BackgroundColor : backgroundColor,\n        LcdColor : lcdColor,\n        ColorDef : color,\n        LedColor : ledColor,\n        GaugeType : gaugeType,\n        Orientation: orientation,\n        FrameDesign : frameDesign,\n        PointerType : pointerType,\n        ForegroundType : foregroundType,\n        KnobType : knobType,\n        KnobStyle: knobStyle,\n        LabelNumberFormat: labelNumberFormat,\n        TickLabelOrientation: tickLabelOrientation,\n        TrendState: trendState,\n\n        // Other\n        Section : section\n\n\n# Formate\n\n##         backgroundColor \n        DARK_GRAY: new BackgroundColorDef(new RgbaColor(0, 0, 0, 1), new RgbaColor(51, 51, 51, 1), new RgbaColor(153, 153, 153, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(180, 180, 180, 1), 'DARK_GRAY'),\n        SATIN_GRAY: new BackgroundColorDef(new RgbaColor(45, 57, 57, 1), new RgbaColor(45, 57, 57, 1), new RgbaColor(45, 57, 57, 1), new RgbaColor(167, 184, 180, 1), new RgbaColor(137, 154, 150, 1), 'SATIN_GRAY'),\n        LIGHT_GRAY: new BackgroundColorDef(new RgbaColor(130, 130, 130, 1), new RgbaColor(181, 181, 181, 1), new RgbaColor(253, 253, 253, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'LIGHT_GRAY'),\n        WHITE: new BackgroundColorDef(new RgbaColor(255, 255, 255, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'WHITE'),\n        BLACK: new BackgroundColorDef(new RgbaColor(0, 0, 0, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(150, 150, 150, 1), 'BLACK'),\n        BEIGE: new BackgroundColorDef(new RgbaColor(178, 172, 150, 1), new RgbaColor(204, 205, 184, 1), new RgbaColor(231, 231, 214, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'BEIGE'),\n        BROWN: new BackgroundColorDef(new RgbaColor(245, 225, 193, 1), new RgbaColor(245, 225, 193, 1), new RgbaColor(255, 250, 240, 1), new RgbaColor(109, 73, 47, 1), new RgbaColor(89, 53, 27, 1), 'BROWN'),\n        RED: new BackgroundColorDef(new RgbaColor(198, 93, 95, 1), new RgbaColor(212, 132, 134, 1), new RgbaColor(242, 218, 218, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(90, 0, 0, 1), 'RED'),\n        GREEN: new BackgroundColorDef(new RgbaColor(65, 120, 40, 1), new RgbaColor(129, 171, 95, 1), new RgbaColor(218, 237, 202, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(0, 90, 0, 1), 'GREEN'),\n        BLUE: new BackgroundColorDef(new RgbaColor(45, 83, 122, 1), new RgbaColor(115, 144, 170, 1), new RgbaColor(227, 234, 238, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(0, 0, 90, 1), 'BLUE'),\n        ANTHRACITE: new BackgroundColorDef(new RgbaColor(50, 50, 54, 1), new RgbaColor(47, 47, 51, 1), new RgbaColor(69, 69, 74, 1), new RgbaColor(250, 250, 250, 1), new RgbaColor(180, 180, 180, 1), 'ANTHRACITE'),\n        MUD: new BackgroundColorDef(new RgbaColor(80, 86, 82, 1), new RgbaColor(70, 76, 72, 1), new RgbaColor(57, 62, 58, 1), new RgbaColor(255, 255, 240, 1), new RgbaColor(225, 225, 210, 1), 'MUD'),\n        PUNCHED_SHEET: new BackgroundColorDef(new RgbaColor(50, 50, 54, 1), new RgbaColor(47, 47, 51, 1), new RgbaColor(69, 69, 74, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(180, 180, 180, 1), 'PUNCHED_SHEET'),\n        CARBON: new BackgroundColorDef(new RgbaColor(50, 50, 54, 1), new RgbaColor(47, 47, 51, 1), new RgbaColor(69, 69, 74, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(180, 180, 180, 1), 'CARBON'),\n        STAINLESS: new BackgroundColorDef(new RgbaColor(130, 130, 130, 1), new RgbaColor(181, 181, 181, 1), new RgbaColor(253, 253, 253, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'STAINLESS'),\n        BRUSHED_METAL: new BackgroundColorDef(new RgbaColor(50, 50, 54, 1), new RgbaColor(47, 47, 51, 1), new RgbaColor(69, 69, 74, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'BRUSHED_METAL'),\n        BRUSHED_STAINLESS: new BackgroundColorDef(new RgbaColor(50, 50, 54, 1), new RgbaColor(47, 47, 51, 1), new RgbaColor(110, 110, 112, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'BRUSHED_STAINLESS'),\n        TURNED: new BackgroundColorDef(new RgbaColor(130, 130, 130, 1), new RgbaColor(181, 181, 181, 1), new RgbaColor(253, 253, 253, 1), new RgbaColor(0, 0, 0, 1), new RgbaColor(80, 80, 80, 1), 'TURNED')\n\n\n##      lcdColor\n        BEIGE: new LcdColorDef('#c8c8b1', 'rgb(241, 237, 207)', 'rgb(234, 230, 194)', 'rgb(225, 220, 183)', 'rgb(237, 232, 191)', '#000000'),\n        BLUE: new LcdColorDef('#ffffff', 'rgb(231, 246, 255)', 'rgb(170, 224, 255)', 'rgb(136, 212, 255)', 'rgb(192, 232, 255)', '#124564'),\n        ORANGE: new LcdColorDef('#ffffff', 'rgb(255, 245, 225)', 'rgb(255, 217, 147)', 'rgb(255, 201, 104)', 'rgb(255, 227, 173)', '#503700'),\n        RED: new LcdColorDef('#ffffff', 'rgb(255, 225, 225)', 'rgb(253, 152, 152)', 'rgb(252, 114, 115)', 'rgb(254, 178, 178)', '#4f0c0e'),\n        YELLOW: new LcdColorDef('#ffffff', 'rgb(245, 255, 186)', 'rgb(210, 255, 0)', 'rgb(158, 205, 0)', 'rgb(210, 255, 0)', '#405300'),\n        WHITE: new LcdColorDef('#ffffff', '#ffffff', 'rgb(241, 246, 242)', 'rgb(229, 239, 244)', '#ffffff', '#000000'),\n        GRAY: new LcdColorDef('#414141', 'rgb(117, 117, 117)', 'rgb(87, 87, 87)', '#414141', 'rgb(81, 81, 81)', '#ffffff'),\n        BLACK: new LcdColorDef('#414141', '#666666', '#333333', '#000000', '#333333', '#cccccc'),\n        GREEN: new LcdColorDef('rgb(33, 67, 67)', 'rgb(33, 67, 67)', 'rgb(29, 58, 58)', 'rgb(28, 57, 57)', 'rgb(23, 46, 46)', 'rgba(0, 185, 165, 255)'),\n        BLUE2: new LcdColorDef('rgb(0, 68, 103)', 'rgb(8, 109, 165)', 'rgb(0, 72, 117)', 'rgb(0, 72, 117)', 'rgb(0, 68, 103)', 'rgb(111, 182, 228)'),\n        BLUE_BLACK: new LcdColorDef('rgb(22, 125, 212)', 'rgb(3, 162, 254)', 'rgb(3, 162, 254)', 'rgb(3, 162, 254)', 'rgb(11, 172, 244)', '#000000'),\n        BLUE_DARKBLUE: new LcdColorDef('rgb(18, 33, 88)', 'rgb(18, 33, 88)', 'rgb(19, 30, 90)', 'rgb(17, 31, 94)', 'rgb(21, 25, 90)', 'rgb(23, 99, 221)'),\n        BLUE_GRAY: new LcdColorDef('rgb(135, 174, 255)', 'rgb(101, 159, 255)', 'rgb(44, 93, 255)', 'rgb(27, 65, 254)', 'rgb(12, 50, 255)', '#b2b4ed'),\n        STANDARD: new LcdColorDef('rgb(131, 133, 119)', 'rgb(176, 183, 167)', 'rgb(165, 174, 153)', 'rgb(166, 175, 156)', 'rgb(175, 184, 165)', 'rgb(35, 42, 52)'),\n        STANDARD_GREEN: new LcdColorDef('#ffffff', 'rgb(219, 230, 220)', 'rgb(179, 194, 178)', 'rgb(153, 176, 151)', 'rgb(114, 138, 109)', '#080C06'),\n        BLUE_BLUE: new LcdColorDef('rgb(100, 168, 253)', 'rgb(100, 168, 253)', 'rgb(95, 160, 250)', 'rgb(80, 144, 252)', 'rgb(74, 134, 255)', '#002cbb'),\n        RED_DARKRED: new LcdColorDef('rgb(72, 36, 50)', 'rgb(185, 111, 110)', 'rgb(148, 66, 72)', 'rgb(83, 19, 20)', 'rgb(7, 6, 14)', '#FE8B92'),\n        DARKBLUE: new LcdColorDef('rgb(14, 24, 31)', 'rgb(46, 105, 144)', 'rgb(19, 64, 96)', 'rgb(6, 20, 29)', 'rgb(8, 9, 10)', '#3DB3FF'),\n        LILA: new LcdColorDef('rgb(175, 164, 255)', 'rgb(188, 168, 253)', 'rgb(176, 159, 255)', 'rgb(174, 147, 252)', 'rgb(168, 136, 233)', '#076148'),\n        BLACKRED: new LcdColorDef('rgb(8, 12, 11)', 'rgb(10, 11, 13)', 'rgb(11, 10, 15)', 'rgb(7, 13, 9)', 'rgb(9, 13, 14)', '#B50026'),\n        DARKGREEN: new LcdColorDef('rgb(25, 85, 0)', 'rgb(47, 154, 0)', 'rgb(30, 101, 0)', 'rgb(30, 101, 0)', 'rgb(25, 85, 0)', '#233123'),\n        AMBER: new LcdColorDef('rgb(182, 71, 0)', 'rgb(236, 155, 25)', 'rgb(212, 93, 5)', 'rgb(212, 93, 5)', 'rgb(182, 71, 0)', '#593A0A'),\n        LIGHTBLUE: new LcdColorDef('rgb(125, 146, 184)', 'rgb(197, 212, 231)', 'rgb(138, 155, 194)', 'rgb(138, 155, 194)', 'rgb(125, 146, 184)', '#090051'),\n        SECTIONS: new LcdColorDef('#b2b2b2', '#ffffff', '#c4c4c4', '#c4c4c4', '#b2b2b2', '#000000')\n\n\n##      color\n        RED: new ColorDef(new RgbaColor(82, 0, 0, 1), new RgbaColor(158, 0, 19, 1), new RgbaColor(213, 0, 25, 1), new RgbaColor(240, 82, 88, 1), new RgbaColor(255, 171, 173, 1), new RgbaColor(255, 217, 218, 1)),\n        GREEN: new ColorDef(new RgbaColor(8, 54, 4, 1), new RgbaColor(0, 107, 14, 1), new RgbaColor(15, 148, 0, 1), new RgbaColor(121, 186, 37, 1), new RgbaColor(190, 231, 141, 1), new RgbaColor(234, 247, 218, 1)),\n        BLUE: new ColorDef(new RgbaColor(0, 11, 68, 1), new RgbaColor(0, 73, 135, 1), new RgbaColor(0, 108, 201, 1), new RgbaColor(0, 141, 242, 1), new RgbaColor(122, 200, 255, 1), new RgbaColor(204, 236, 255, 1)),\n        ORANGE: new ColorDef(new RgbaColor(118, 83, 30, 1), new RgbaColor(215, 67, 0, 1), new RgbaColor(240, 117, 0, 1), new RgbaColor(255, 166, 0, 1), new RgbaColor(255, 255, 128, 1), new RgbaColor(255, 247, 194, 1)),\n        YELLOW: new ColorDef(new RgbaColor(41, 41, 0, 1), new RgbaColor(102, 102, 0, 1), new RgbaColor(177, 165, 0, 1), new RgbaColor(255, 242, 0, 1), new RgbaColor(255, 250, 153, 1), new RgbaColor(255, 252, 204, 1)),\n        CYAN: new ColorDef(new RgbaColor(15, 109, 109, 1), new RgbaColor(0, 109, 144, 1), new RgbaColor(0, 144, 191, 1), new RgbaColor(0, 174, 239, 1), new RgbaColor(153, 223, 249, 1), new RgbaColor(204, 239, 252, 1)),\n        MAGENTA: new ColorDef(new RgbaColor(98, 0, 114, 1), new RgbaColor(128, 24, 72, 1), new RgbaColor(191, 36, 107, 1), new RgbaColor(255, 48, 143, 1), new RgbaColor(255, 172, 210, 1), new RgbaColor(255, 214, 23, 1)),\n        WHITE: new ColorDef(new RgbaColor(210, 210, 210, 1), new RgbaColor(220, 220, 220, 1), new RgbaColor(235, 235, 235, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(255, 255, 255, 1), new RgbaColor(255, 255, 255, 1)),\n        GRAY: new ColorDef(new RgbaColor(25, 25, 25, 1), new RgbaColor(51, 51, 51, 1), new RgbaColor(76, 76, 76, 1), new RgbaColor(128, 128, 128, 1), new RgbaColor(204, 204, 204, 1), new RgbaColor(243, 243, 243, 1)),\n        BLACK: new ColorDef(new RgbaColor(0, 0, 0, 1), new RgbaColor(5, 5, 5, 1), new RgbaColor(10, 10, 10, 1), new RgbaColor(15, 15, 15, 1), new RgbaColor(20, 20, 20, 1), new RgbaColor(25, 25, 25, 1)),\n        RAITH: new ColorDef(new RgbaColor(0, 32, 65, 1), new RgbaColor(0, 65, 125, 1), new RgbaColor(0, 106, 172, 1), new RgbaColor(130, 180, 214, 1), new RgbaColor(148, 203, 242, 1), new RgbaColor(191, 229, 255, 1)),\n        GREEN_LCD: new ColorDef(new RgbaColor(0, 55, 45, 1), new RgbaColor(15, 109, 93, 1), new RgbaColor(0, 185, 165, 1), new RgbaColor(48, 255, 204, 1), new RgbaColor(153, 255, 227, 1), new RgbaColor(204, 255, 241, 1)),\n        JUG_GREEN: new ColorDef(new RgbaColor(0, 56, 0, 1), new RgbaColor(32, 69, 36, 1), new RgbaColor(50, 161, 0, 1), new RgbaColor(129, 206, 0, 1), new RgbaColor(190, 231, 141, 1), new RgbaColor(234, 247, 218, 1))\n\n\n##     ledColor \n        RED_LED: new LedColorDef('#FF9A89', '#FF9A89', '#FF3300', '#FF8D70', '#7E1C00', '#7E1C00', '#641B00'),\n        GREEN_LED: new LedColorDef('#9AFF89', '#9AFF89', '#59FF2A', '#A5FF00', '#1C7E00', '#1C7E00', '#1B6400'),\n        BLUE_LED: new LedColorDef('#899AFF', '#899AFF', '#0033FF', '#708DFF', '#001C7E', '#001C7E', '#001B64'),\n        ORANGE_LED: new LedColorDef('#FEA23F', '#FEA23F', '#FD6C00', '#FD6C00', '#592800', '#592800', '#421F00'),\n        YELLOW_LED: new LedColorDef('#FFFF62', '#FFFF62', '#FFFF00', '#FFFF00', '#6B6D00', '#6B6D00', '#515300'),\n        CYAN_LED: new LedColorDef('#00FFFF', '#00FFFF', '#1BC3C3', '#00FFFF', '#083B3B', '#083B3B', '#052727'),\n        MAGENTA_LED: new LedColorDef('#D300FF', '#D300FF', '#8600CB', '#C300FF', '#38004B', '#38004B', '#280035')\n\n\n##      gaugeType\n        TYPE1: new GaugeTypeDef('type1'),\n        TYPE2: new GaugeTypeDef('type2'),\n        TYPE3: new GaugeTypeDef('type3'),\n        TYPE4: new GaugeTypeDef('type4'),\n        TYPE5: new GaugeTypeDef('type5')\n\n\n##      orientation\n        NORTH: new OrientationDef('north'),\n        SOUTH: new OrientationDef('south'),\n        EAST: new OrientationDef('east'),\n        WEST: new OrientationDef('west')\n\n\n##      knobType \n        STANDARD_KNOB: new KnobTypeDef('standardKnob'),\n        METAL_KNOB: new KnobTypeDef('metalKnob')\n\n\n##      knobStyle \n        BLACK: new KnobStyleDef('black'),\n        BRASS: new KnobStyleDef('brass'),\n        SILVER: new KnobStyleDef('silver')\n\n##      frameDesign\n        BLACK_METAL: new FrameDesignDef('blackMetal'),\n        METAL: new FrameDesignDef('metal'),\n        SHINY_METAL: new FrameDesignDef('shinyMetal'),\n        BRASS: new FrameDesignDef('brass'),\n        STEEL: new FrameDesignDef('steel'),\n        CHROME: new FrameDesignDef('chrome'),\n        GOLD: new FrameDesignDef('gold'),\n        ANTHRACITE: new FrameDesignDef('anthracite'),\n        TILTED_GRAY: new FrameDesignDef('tiltedGray'),\n        TILTED_BLACK: new FrameDesignDef('tiltedBlack'),\n        GLOSSY_METAL: new FrameDesignDef('glossyMetal')\n\n\n##      pointerType\n        TYPE1: new PointerTypeDef('type1'),\n        TYPE2: new PointerTypeDef('type2'),\n        TYPE3: new PointerTypeDef('type3'),\n        TYPE4: new PointerTypeDef('type4'),\n        TYPE5: new PointerTypeDef('type5'),\n        TYPE6: new PointerTypeDef('type6'),\n        TYPE7: new PointerTypeDef('type7'),\n        TYPE8: new PointerTypeDef('type8'),\n        TYPE9: new PointerTypeDef('type9'),\n        TYPE10: new PointerTypeDef('type10'),\n        TYPE11: new PointerTypeDef('type11'),\n        TYPE12: new PointerTypeDef('type12'),\n        TYPE13: new PointerTypeDef('type13'),\n        TYPE14: new PointerTypeDef('type14'),\n        TYPE15: new PointerTypeDef('type15'),\n        TYPE16: new PointerTypeDef('type16')\n\n\n##      foregroundType\n        TYPE1: new ForegroundTypeDef('type1'),\n        TYPE2: new ForegroundTypeDef('type2'),\n        TYPE3: new ForegroundTypeDef('type3'),\n        TYPE4: new ForegroundTypeDef('type4'),\n        TYPE5: new ForegroundTypeDef('type5')\n\n\n##      labelNumberFormat \n        STANDARD: new LabelNumberFormatDef('standard'),\n        FRACTIONAL: new LabelNumberFormatDef('fractional'),\n        SCIENTIFIC: new LabelNumberFormatDef('scientific')\n\n\n##      tickLabelOrientation\n        NORMAL: new TickLabelOrientationDef('normal'),\n        HORIZONTAL: new TickLabelOrientationDef('horizontal'),\n        TANGENT: new TickLabelOrientationDef('tangent')\n\n\n##      trendState \n        UP: new TrendStateDef('up'),\n        STEADY: new TrendStateDef('steady'),\n        DOWN: new TrendStateDef('down'),\n        OFF: new TrendStateDef('off')\n\n",
             "x": 1710,
             "y": 560,
             "wires": []
         }
      ]
      

      Als Dokumentation - wie die verschiedenen Typen aussehen - hier mal ein Mapping mit der Demoseite im nächsten Posting .....

      mickym ? sigi234 4 Replies Last reply Reply Quote 1
      • mickym
        mickym Most Active @mickym last edited by mickym

        So das sind mal die Typen, die man erstellen kann:
        7d410d69-b0c0-454e-b805-e3f362b1784b-image.png

        Ich versuche das mal einigermassen mit den Widgets auf der Demoseite zu mappen (hoffe ich habs richtig verstanden):

        1. Radial sind diese hier:

        55091989-7a1a-4a38-b00c-0bf87eec3407-image.png

        Bei der Definition bzw. Erstellung kann man den Typ angeben, der ist hier im Bild als Beschreibung angegeben.

        1. RadialBargraph sind diese hier:

        d0099b3e-03e1-438a-866c-f131e40fe78c-image.png

        1. RadialVertical sind diese hier:

        d790825e-6677-4008-bac4-98c8ed8ca610-image.png

        1. Linear sind diese hier:

        1910d9ac-39ef-43f2-93f8-abc8ed28e22b-image.png

        1. LinearBargraph sind diese hier:

        eb040a3b-99ba-41b1-aa2b-ef2e1b185958-image.png

        1. DisplaySingle sind diese hier:

        de4a5c11-566b-481a-93d0-5c6cae5953f1-image.png

        sowie ich das verstanden habe - ist damit Laufschrift möglich.

        1. DisplayMulti sind diese hier:

        7cf761cd-82ee-4d8a-ab37-eeb10034490f-image.png

        1. Level - das hier:

        e2f656ea-6646-46aa-8c06-59757db47344-image.png

        1. Compass diese hier:

        5388eb58-7fc1-44e4-a75b-22296c6d5535-image.png

        1. WindDirection diese hier:

        500f36d0-ff02-4185-a15e-6f7eecbd5146-image.png

        1. Horizon das hier:

        47a833ee-76b7-4124-a7c6-ab894c4eb740-image.png

        1. Led das hier:

        02a7ae2f-c3c1-47f9-93eb-4017e7e30df9-image.png

        1. Clock das hier:

        041365de-5656-4f26-a0db-a57dc38dcb44-image.png

        1. Battery das hier:

        7c63f089-5d7a-4070-8559-f5b1c28738ff-image.png

        1. StopWatch das hier:

        ae1c4e92-bc95-4d14-8b31-f08bb66f18f6-image.png

        1. Altimeter das hier:

        23a3ba96-c598-488e-bb3c-030754734fa2-image.png

        1. TrafficLight das hier:

        7237c4e4-4d37-4d26-affc-b6dfa99e4ecc-image.png

        1. LightBulb das hier:

        c5eb9509-2aa9-491f-b83a-72ee24c4023d-image.png

        1. Odometer das hier:

        c014dea4-85d1-4358-91e9-72617a188750-image.png

        Die Effekte und wie die heißen sieht man dann auf der Demoseite!!!

        mickym G 2 Replies Last reply Reply Quote 1
        • mickym
          mickym Most Active @mickym last edited by

          So hier mal meine ersten Gehversuche von gestern mit einem kleinen Update. 😉

          83226f53-16c8-4da3-b5ad-7ba902de6afd-image.png

          und nochmal das kleine Video von gestern:

          Steelseries Test2.mp4

          mickym 1 Reply Last reply Reply Quote 1
          • mickym
            mickym Most Active @mickym last edited by

            So bevor ich auf meine Arbeit von heute komme, hier noch etwas Theorie und Erkenntnisse, die ich gewonnen habe bzw. was ich gelernt habe.

            Insgesamt ist das NodeRed Dashboard für individuelle und diffizile und ausgefeilte, anspruchsvolle grafisches Design nicht die Stärke des NodeRed Dashboard, dafür ist VIS wesentlich besser geeignet.
            Allerdings hat man mit dem Material Design - ein schnelle Möglichkeit mit den Android Design Element schnell eine Steuerungsoberfläche zu erstellen und diese auf allen Geräten zu benutzen. Die Kacheln sortieren sich selbst je nach Display Größe automatisch an. Deswegen werden sie halt auch oft durcheinander gewürfelt.

            Das man VIS in das Node Red Dashboard einbinden kann, das habe ich ja schon mal gezeigt.

            735acccb-593d-4596-90bf-d4f8a10da173-image.png

            Das die Titelleisten so doppelts sind liegt im Moment daran, dass ich es nicht getrennt aufrufe, was aber natürlich geht - aber das soll nicht das Thema sein.

            Interessant sind neben den Standardnodes die äußerst flexible Nutzung der ** Dashboard Template** Nodes des NodeRed Dashboards, also die blauen
            c7f9a756-93a0-47fc-acc5-8d3aec8c1aaa-image.png
            die hier genutzt werden.

            So habe ich ja mit diesen Template Nodes die FLOT - Charts eingebunden, wie hier beschrieben, aber auch externe Ressoucen sind mit einem Inline Frame super easy einzubinden.

            Wenn man zum Beispiel in einer Template Node nicht immer was anzeigen will, so wie ich beispielsweise auf meiner Wetterseite, wenn keine DWD Warnung vorhanden und folglich kein Kartenlink vom iobroker DWD Adapter vorliegt, so nutzt man diese Template Node in Kombination mit der anderen Template Node.

            2e0e59bc-2157-4e44-822f-d91bea1c4848-image.png

            In diesem Fall ist kein Link zu einer Karte vorhanden.

            Deswegen mal ein kleiner Exkurs aus dem Wetter API Thread mit der Einbindung der DWD Meldungen. Da habe ich ja auch einiges gelernt. 😉

            Schaut man sich mal die 2 Screenshots aus diesem Thread mit der Einbundung des DWD Adapters an.

            1. Ohne vorliegende Warnungen
              0b6efce4-5443-4294-ac72-9b6efea7cd95-image.png
            2. Mit Warnungen
              4460a4db-843b-4b77-8536-a61179793568-image.png

            Auf der rechten Kachel ist immer die zur Warnung zugehörigen Karte, die einem der DWD-Adapter als Link in einem Datenpunkt zur Verfügung stellt. Den lese ich einfach aus und den kann man auch auch in einer blauen Template Node mit einer Zeile zur Verfügung stellen:

            <img src={{msg.payload}} alt="n/a" >
            

            Statt "n/a" kann man auch einen leeren String hier angeben, dann wird auch wie gewüscht nichts angezeigt. Wenn man aber Überschriften oder anderen Text vielleicht mit konstantem und variablen Anteil einmal anzeigen will oder nicht, stößt man schnell an die Grenzen. Man müsste jede Textzeile - also auch konstanten Text als Teil eines Nachrichtenobjektes übergeben werden. Hier geht es lediglich um das Wort Bayern - als Überschrift, das einmal vorhanden sein muss, einmal nicht.
            Also wenn man zusätzlich variablen und Text und auch noch variablen Text mit variablen Variablen nutzen will, nimmt man die orange Template Node und erzeugt den HTML Code vorher, den man in die blaue Template Node als msg.template übergibt. Ausserdem kann man dann auch eine leere msg.Template Nachricht bei Bedarf weitergeben und die ganze Kachel löschen.

            71572a55-8f10-49d1-b42d-f150e941bb82-image.png

            Die blaue template Node ist komplett leer und oben wird einfach eine leere msg.template Nachricht weitergegeben, unten in der orangen Template Node wird der HTML code erzeugt.

            In dem Fall ist nur "Bayern" als Überschrift zusätzlich vorhanden.

            41a6c98b-b116-48b5-a6f2-137656ef5103-image.png

            In den orangen Nodes darf man nicht die Objektbezeichnung angeben. Das hat sicher irgendwelche Gründe aber ich habs noch nicht rausgefunden warum - aber ist eben so. Also in der blauen Template Node wird im HTML Teil auf die msg.payload mit {{msg.payload}} verwiesen in der orangen Template Node nur {{payload}}

            mickym 1 Reply Last reply Reply Quote 1
            • mickym
              mickym Most Active @mickym last edited by mickym

              So weiter mit der Theorie bzw. der template Node.

              Hier muss man verstehen, was einem die Hilfe zu dieser Node sagen will. 😉

              4bc8d785-a6d5-44e0-894e-afb2621e8b18-image.png

              Am Anfang - naiv wie ich war - wofür brauch ich das denn?. DAs wird ziemlich schnell klar, wenn man plötzlich Seiteneffekte hat oder eben mehrere Template Node verwendet.

              Man muss sich immer vor Augen halten, dass alle Template Nodes, die in einem TAB angezeigt werden ja auf einem HTML Dokument angezeigt werden und wenn man einzelne Elemente unterscheiden auf dieser Seite unterscheiden muss, dann braucht jedes Element eine eigene ID. Die ID muss man nicht wissen, sie muss nur eindeutig sein.

              Beispiel wieder mal meine WETTER Seite.

              3d6d9d94-55ee-4009-b2d5-0c33d8efb585-image.png

              Jede Stunde ist eine eigene Template NOde. 😉 Je nach vorherrschendem Wetter soll ja da Hintergrund immer den entsprechend vorhergesagten Wetter aussehen. Ich habe das so designed:

              Nacht = dunkler Hintergrund
              Tag und > 60% Wolken => hellgrauer Hintergrund
              Tag und < 60 % Wolken => hellblauer Hintergrund

              Wenn man nun keine eindeutigen IDs hat - schauen alle Kacheln bzw. Boxen wie der Hintergrund der zuletzt auf der ganzen Seite aus. 😉

              Hier mal der Code einer solchen Template Node = Kachel.

              <style>
              {{'#iconBoxh_'+$id}} {
                color: {{msg.iconTextColor}};
                background: {{msg.iconBackground}};
              }
              
              </style>
              
              <div class="mainHourly">
                  <hr>
                  <div id="{{'iconBoxh_'+$id}}">
                      <img src="/images/AccuWeatherIcons/{{msg.icon}}" alt="n/a" style="width:100%;height:50%;">
                      <div style="font-size: 200%; text-align:center;"><b>{{msg.payload.temp | number:0}} °C</b></div>
                      <table>
                          <tr><td width=150 height=34 style="font-size: 80%; text-align:center;">{{msg.payload.IconPhrase}}</td></tr>
                      </table>
                      <br>
                      <table id="iconBoxTable">
                          <tr>
                              <td width=15%><i class="fa fa-umbrella fa-lg" aria-hidden="true"></i></td><td width=35% class="forecastValue">{{msg.payload.pop *100 | number:0}} %</td>
                          </tr>
                          <tr>
                              <td width=15%><i class="wi wi-direction fa-lg wi-rotate-{{msg.windDirection}}"></i></td><td class="forecastValue" style="{{msg.colorWindSpeed}}">{{msg.payload.wind_speed | number:0}} km/h</td>
                          </tr>
                          <tr>
                              <td width=15%><i class="wi wi-darksky-wind  fa-lg"></i></td>
                              <td class="forecastValue" style="{{msg.colorWindGust}}">{{msg.payload.wind_gust | number:0}} km/h</td>
                          </tr>
                      </table>
                  </div>
                  <hr>
                  <table>
                      <tr>
                      <td id="groupTitleHourly"><b>{{msg.hour}}</b></td>
                      <td class="material-icons" ng-click="send({payload: msg.parts.index})">more_vert</td>
                      </tr>
                  </table>
              
              </div>
              

              Diese Template-Nodes können nun einfach für jede Stunde kopiert werden ohne, dass am Code was geändert werden muss.

              66d810d0-8dc7-48af-a2e2-7f9d30422c76-image.png

              Über die CSS - Definition mit eindeutiger ID ermöglicht nun für jede Node einen eigenen CSS Stil zu definieren, der auch der gleichen Kachel in der gleichen Template Node zugeordnet wird. Das klingt zwar banal, aber bei über 50 Template Nodes ist es wichtig, dass jede CSS Definition eindeutig ist. 😉

              Textfarbei und HIntergrund können so für jede Kachel individuell festgelegt werden und werden über

              {{msg.iconTextColor}};
              {{msg.iconBackground}};
              

              festgelegt. 😉

              Warum soviel Theorie, weil es einfach wichtig ist, dass man nun versteht für die Stellseries Widgets wichtig ist.

              Diese ganze NodeRed Dashboard unterstützt bzw. basiert auf AngularJS. Deswegen kann man nicht nur in den Text Nodes nicht NUR auf die Eigenschaften des Nachrichtenobjektes zugreifen, sondern auch dessen Funktionalität nutzen, wie beispielsweise das Runden (keine JS Funktion).

              Deswegen funktioniert zum Beispiel das Runden im HTML Bereich - hier das Beispiel der Windgeschwindigkeit in der Kachel:

              <td class="forecastValue" style="{{msg.colorWindSpeed}}">{{msg.payload.wind_speed | number:0}} km/h</td>
              

              Außerdem sieht man, dass die Bindung zu den Eigenschaften eines Nachrichtenobjektes nicht nur für den Wert an sich, sondern auch zur Einfärbung funktioniert.
              Das ist wahrscheinlich der gleiche Mechanismus, wie im VIS - nur dass dort die Bindings zu Datenpunkten in den Iobroker-Objekten erfolgt, in Node-Red hingegen erfolgt die Bindung zum Nachrichtenobjekt.

              Warum ist das alles wichtig??

              Nun das ist ein Teil der Erläuterungen dieses Node-Red Artikels.

              Ganz zum Schluss wird erklärt warum man, wenn mittels der AngularJS Direktiven also den geschweiften Klammern nicht nur Textersetzungen haben will, sondern auch dynamische HTML Styles übermitteln will, dann soll man diese
              Direktive verwenden:

              <div ng-bind-html="msg.payload"></div>
              

              Ehrlich gesagt, ganz verstanden habe ich es nicht, aber ich weiß nun - warum diese Zeile wohl immer als Vorgabe bei einer neuen Template Node enthalten ist. Ich verwende diese Direktive im Moment nicht!!!

              Wichtig für die Steelseries Widgets ist aber der Beitrag darüber.

              Bislang habe ich ja die msg.Eigenschaften nur in dem HTML Bereich verwendet, aber niemals im <script> Bereich und da funktioniert diese Bindung nicht.

              Das war wichtig, um den Code in den Templates für die Steelseries Widgets zu verstehen.

              Funktioniert (s. mein HTML Code für Wetterkachel):

              <h2>{{msg.topic}}</h2>
              <div>{{msg.payload}}</div>
              

              Funktioniert NICHT:

              <script>
                console.log({{msg.payload}});
              </script>
              

              das heißt msg.payload kann so nicht innerhalb des <script> Bereiches angewendet werden.

              Lange Rede kurzer Sinn, das Nachrichten Objekt msg ist im Script Bereich nur innerhalb eines Scope Bereichs verfügbar:

              (function(scope){ 
                      scope.$watch('msg', function(msg) {
                         if (typeof(msg.value) != "undefined")compass.setValueAnimated(msg.value);
                      });
                  })(scope);
              

              Deswegen müssen alle Aufrufe der JS Funktionen für die Steelseries Widgets die Eigenschaften des Nachrichtenobjektes enthalten soll innerhalb dieser scope-Funktion erfolgen!

              mickym 1 Reply Last reply Reply Quote 1
              • mickym
                mickym Most Active @mickym last edited by mickym

                Mit diesem theoretischem Background ist nun auch der Code der Template Nodes aus diesem Blog leicht zu verstehen.

                screen.png

                So solange ihr soweit meinen Ausführungen gefolgt seid, seid ihr auf meinem Wissensstand.

                Die Aufrufe der Steelseries Funktionen scheint auch von der Reihenfolge abzuhängen. Auch hier muss man bisschen probieren. Das dynamische Ändern des Hintergrunds als letzter Aufruf hat nicht funktioniert.

                Hier muss man probieren. Am Anfang dachte ich es sei die Syntax, war es aber nicht. 😉

                Ein Problem bei der ganzen Implementierung soll nicht verschwiegen werden. Die Template-Nodes bekommen nicht mit, wenn in einem anderen Browser Änderungen durchgeführt werden. Man kann zwar dann die Seite auf allen Browsern refreshen (komplettes Neuladen der Seite), aber optimal ist das nicht.

                So im nächsten Post nun zu meiner Arbeit des inzwischen gestrigen Tages. 😉

                mickym G 2 Replies Last reply Reply Quote 1
                • mickym
                  mickym Most Active @mickym last edited by mickym

                  So hier nun zur Arbeit des gestrigen Tages.

                  Wie ich schon gesagt habe - sind die Steelseries Widgets ja weniger zum Steuern, sondern vielmehr zur Anzeige gedacht, sodass man quasi ein "nice looking" Cockpit aufbauen kann - allerdings ohne Schalter - das macht man natürlich mit den normalen Steuerungsmöglichkeiten. Noch was zur Optik - in dem Beispiel habe ich mich bei den Template Nodes für eine Kachelbreite von 6 bzw. 7 entschieden - da diese perfekt für ein Smartphone sind. Leider sind die Skalenstriche auf dem iPhone etwas krisselig.

                  Links - iPhone - Rechts - PC

                  de5cacfb-dd64-4841-af24-825c650ea40e-image.png

                  Gut aber das ist wohl eher ein Apple Problem - schaut übrigens auf dem iPad genauso aus.

                  Im Übrigen habe ich mal die farbige Hinterlegung weggelassen - da ich das viel "cleaner" finde. 😉 Aber ist natürlich alles Geschmackssache.

                  screen.png

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @mickym last edited by mickym

                    So die Heizungsteuerung funktioniert bei mir noch mit MAX Heizkörperventil inkl. Wandthermostat.

                    Die gibts heute gar nicht mehr zu kaufen - der gepostete Link ist auch viel zu teuer - Original haben diese Dinger zusammen vielleicht 50€ gekostet. Vielleicht ist es aber auch nur so teuer, weil die Teile eben aussterben, falls jemand Ersatz braucht.

                    Mir geht es aber hier ja nicht um das Produkt, sondern mehr um die Funktionalität dieser Thermostate:

                    1. Man kann eigene Zeitpläne in die Thermostate programmieren, welche Temperatur zu welcher Zeit geschaltet wird. Dieser Modus nennt sich: auto
                    2. Dann gibts noch den Betriebsmodus manual - der diese zeitgesteuerte Steuerung abschaltet.
                    3. Dann gibts noch den Modus boost - der für eine definierte Zeit die Heizkörperventile komplett aufmacht, um schnell zu heizen.

                    Diese Steuerungsmöglichkeiten sind in meinen Augen bei allen Herstellern dieser batteriebetriebenen Heizkörperventile ziemlich ähnlich!

                    Die Steuerung bei mir erfolgt normal über das normale NodeRed Dashboard (ohne Programmierung der Zeitpläne) und natürlich wird auch der aktuelle Status angezeigt - inkl. der Status der Fenster und Türen.

                    Bei mir sieht das so aus und ist ein bisschen von der Bedienung der Wandthermostat nachempfunden.

                    Die Gauge Anzeigen sind auch mit Farbgradienten hinterlegt:

                    screen.png

                    So das ist der IST - Status - und wie gesagt die Steelseries Widgest sind nicht zum Steuern sondern zur Anzeige gedacht und ich will mal zeigen, wie man möglichst viel Status in so ein Anzeigeinstrument bringen kann - ohne x-Anzeigen dazu zu machen. Dies ist vor allem für ein Cockpit oder auch für das Smartphone interessant, da man dort möglichst viel Info auf kleinstem Raum sehen will. 😉

                    Auf der linke Seite wie gesagt das Node Red Dashboard mit den bisherigen Statusanzeigen und wie ich das auf das Steelseries Widget gemappt habe. 😉 Direkt angezeigt werden:

                    1. IST-Temperatur
                    2. SOLL-Temperatur
                    3. NEU Trend wird wärmer, bleibt konstant oder kälter
                    4. Alle anderen Status werden über die USER-LED realisiert. Details im nächsten POST
                    mickym G 2 Replies Last reply Reply Quote 1
                    • mickym
                      mickym Most Active @mickym last edited by

                      So was man mit einer solchen LED machen kann - ist schon erstaunlich, wenn man bisschen nachdenkt - zudem es sich ja nur um eine Software LED handelt, die vor allem alle möglichen Farben annehmen kann. 😉

                      Grundsätzlich kann man also folgende Zustände in diesem Steelseries Widget verwenden, um verschiedene Status anzuzeigen.

                      1. LED an oder aus
                      2. LED blinkend
                      3. Farbe der LED
                      1 Reply Last reply Reply Quote 1
                      • G
                        Garf @mickym last edited by

                        @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                        Alle anderen Status werden über die USER-LED realisiert. Details im nächsten POST

                        Da bin ich mal auf die Details dazu gespannt. Im Moment zeigt die LED, da statisches Bild, ja immer nur rot und soll wohl 4 Betriebszustände wiedergeben. Ich hatte schon überlegt, ob man nicht ein Kurztext einblenden sollte/könnte. Der Rest ist Mega, wie die gesamten Beiträge mit den Erläuterungen von dir. Herzlichen Dank für den Thread und den geposteten Beiträge. Einen Leser hast Du immer sicher. Kann ich dir hier im Forum folgen, um keine Beiträge zu verpassen?
                        Genial die Trendanzeige, bisher habe ich mich immer gefragt wofür könnte ich die Funktion mal gebrauchen können. Der optische Mehrwert gegenüber den grafischen Gauge-Nodes ist sicher für jeden gut erkennbar. Die Standarddarstellung ist geradezu Schrott dagegen. Hatte mich auch von Anfang an schon immer gestört.

                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @Garf last edited by mickym

                          @garf sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                          Da bin ich mal auf die Details dazu gespannt. Im Moment zeigt die LED, da statisches Bild, ja immer nur rot und soll wohl 4 Betriebszustände wiedergeben. Ich hatte schon überlegt, ob man nicht ein Kurztext einblenden sollte/könnte

                          Nun es handelt sich ja um ein analoges Instrument. 😏 😁 😀 und früher gab es zu analogen Instrumenten auch tatsächlich sowas, was man Betriebsanleitung nannte. 🤔 😜

                          Natürlich kann man mit Text und Anzeigen sich das Sparen, ansonsten meine Betriebsanleitung sieht so aus:

                          screen.png

                          Die Sonderumstände haben PRIO in absteigender Reihenfolge.

                          1. Batteriealarm
                          2. Fenster offen
                          3. Normale Zustände (Heizen und Modus)
                          mickym G 3 Replies Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @mickym last edited by mickym

                            Der ganze Flow ist nun doch etwas komplex geworden um das alles zu realisieren, macht aber keinen Sinn den zu exportieren, da ja die Heizung bei jeden durch andere Datenpunkte im iobroker repräsentiert werden.

                            Aber ich habs nun einigermaßen so hinbekommen, damit es wenigstens einigermaßen übersichtlich aussieht und man so das auch für seine Umgebung einigermaßen nachbauen kann:

                            screen.png

                            Der Code für das Widget ist dann relativ Simple - und man sieht ja was ich für Eigenschaften im Nachrichtenobjekt ich verwende:

                            <script src="/myjs/tween.js"></script>
                            <script src="/myjs/steelseries.js"></script>
                            <script>
                            var thermostat;
                            
                            
                                (function(scope){ 
                                    scope.$watch('msg', function(msg) {
                                       if (typeof(msg.ledColor) != "undefined"){thermostat.setUserLedColor(steelseries.LedColor[(msg.ledColor)]); }
                                       if (typeof(msg.ledOn) != "undefined"){thermostat.setUserLedOnOff((msg.ledOn)); }
                                       if (typeof(msg.ledBlink) != "undefined"){thermostat.blinkUserLed((msg.ledBlink)); }
                                       if (typeof(msg.temperature) != "undefined"){thermostat.setValueAnimated((msg.temperature)); }
                                       if (typeof(msg.desiredTemperature) != "undefined"){thermostat.setThreshold((msg.desiredTemperature)); }
                                       if (typeof(msg.trend) != "undefined"){thermostat.setTrend(steelseries.TrendState[(msg.trend)]); }
                                    });
                                })(scope);
                             
                                // Skala einfärben
                                var sections = [steelseries.Section(10, 20, 'rgba(0, 0, 220, 0.3)'),
                                                    steelseries.Section(20, 30, 'rgba(220, 220, 0, 0.5)'),
                                                    steelseries.Section(30, 40, 'rgba(220, 0, 0, 0.3)') ];
                                                    
                             
                                thermostat = new steelseries.Radial('thermostat', {
                                        gaugeType: steelseries.GaugeType.TYPE2,
                                        
                            
                                        size: 250,
                                        minValue: 10,
                                        maxValue:  40,
                                        niceScale: true,
                                        // section: sections,  //skala einfärben
                                        backgroundColor: steelseries.BackgroundColor.BLACK,
                                        frameDesign: steelseries.FrameDesign.TILTED_BLACK,
                                        //
                                        titleString: "Wohnzimmer",
                                        unitString: "°C",
                            
                            
                                       thresholdRising: false,
                                       lcdDecimals: 1,
                                       userLedVisible: true,
                                        //lcdVisible: true,
                                       ledVisible: false,
                                       trendVisible: true
                                       
                                    });
                            //cog.steelseries.BackgroundColor.(steelseries.BackgroundColor.WHITE); 
                               //thermostat.setFrameDesign(steelseries.FrameDesign.TILTED_BLACK);
                                           
                               
                               //cog.setPointerType(steelseries.PointerType.TYPE9);
                                
                                // thermostat.setValueAnimated(23.8);
                                
                             
                            </script>
                             
                            <canvas id="thermostat" width="100%" height="100%"></canvas>
                            
                            

                            Diese canvas Dinger mit den diese Steelwidgets erstellt wurden - scheinen übrigens HTML-5 Standard zu sein.

                            b7064960-efba-4398-a1b8-333f67ac8d10-image.png

                            aus: https://www.w3schools.com/html/html5_canvas.asp

                            1 Reply Last reply Reply Quote 1
                            • G
                              Garf @mickym last edited by

                              @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                              Betriebsanleitung

                              Kann man dazu Google befragen. Ich habe kürzlich die Printversion des Lexika-Bandes in die Tonne gekloppt. Mit der LED verstehe ich leider immer noch nicht. So viele Funktionen mit vier verschiedenen Farben? Welche Funktion hat den Priorität, oder springt die Farbe? Ich glaube, da muss ich noch einmal versuchen die Funktion zu verstehen. Du hast ja mehr als einmal gezeigt, dass bei dir alles mehr als durchdacht ist.

                              Ich lenke daher mal mit einer Frage ab, gibt mir dann mehr Zeit zum Nachdenken.😕

                              Ich lasse mir die gefallene Regenmenge über folgendes Anzeigeinstrument anzeigen.
                              Regenmenge.JPG
                              Leider wird selbst bei einer Niederschlagsmenge von 0 der 1. Teilstrich in blau dargestellt. Alle meine Versuche dies in den Griff zu bekommen sind gescheitert. Aber es ärgert mich bis heute noch. Vielleicht hast Du eine Idee, was wie und wo einzustellen ist.

                              mickym 1 Reply Last reply Reply Quote 0
                              • G
                                Garf @mickym last edited by

                                @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                Die Sonderumstände haben PRIO in absteigender Reihenfolge.

                                Batteriealarm
                                Fenster offen
                                Normale Zustände (Heizen und Modus)

                                So, Pkt 1 und 2 sind für mich nachvollziehbar und logisch. Aber grün und rot verstehe ich nicht. Eine von den roten Betriebszuständen wird es doch immer geben?

                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @Garf last edited by mickym

                                  @garf sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                  @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                  Die Sonderumstände haben PRIO in absteigender Reihenfolge.

                                  Batteriealarm
                                  Fenster offen
                                  Normale Zustände (Heizen und Modus)

                                  So, Pkt 1 und 2 sind für mich nachvollziehbar und logisch. Aber grün und rot verstehe ich nicht. Eine von den roten Betriebszuständen wird es doch immer geben?

                                  Nun ja die Heizung muss ja in jedem Fall einen Zustand haben. Somit wenn also nicht gelb oder blau, weil weder Fenster offen ist oder auch die Batterien alle vollgenug sind, hat die LED im Normalzustand entweder die Farbe GRÜN oder ROT.

                                  Ist sie GRÜN - ist der Automatik Modus eingestellt
                                  Ist sie ROT - ist der Manuelle Modus eingestellt.

                                  Ist sie GRÜN und ist AUS, dann ist der Automatikmodus eingestellt, es wird aber aktuell nicht geheizt.
                                  Ist sie GRÜN und ist EIN, dann ist der Automatikmodus eingestellt und es wird gerade geheizt.

                                  Ist sie ROT und ist AUS, dann ist der manuelle Modus eingestellt, es wird aber aktuell nicht geheizt.
                                  Ist sie ROT und ist EIN, dann ist der manuelle Modus eingestellt, es wird aber aktuell geheizt.
                                  Ist sie ROT und BLINKT, dann ist gerade der BOOST Modus aktiv.

                                  Eine von den roten Betriebszuständen wird es doch immer geben?

                                  Und NEIN, im Automatikmodus - ist die LED nicht rot, sondern grün.

                                  G 1 Reply Last reply Reply Quote 1
                                  • G
                                    Garf @mickym last edited by

                                    @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                    Nun ja die Heizung muss ja in jedem Fall einen Zustand haben. Somit wenn also nicht gelb oder blau, weil weder Fenster offen ist oder auch die Batterien alle vollgenug sind, hat die LED im Normalzustand entweder die Farbe GRÜN oder ROT.

                                    Ich war noch im Denkmodus und habe es sogar ohne deine Erklärung, quasi paralle zu deinem Posting, aufgelöst. Voraussetzung dafür war allerdings das Verständnis zu erlangen, dass Du ein Heizkörperventil meinst, wenn Du von Heizung sprichst und dass man die Funktion der Heizkörperventile kennst, mit der dortigen Funktion der Manuelumschaltung. Mir war von Anfang an klar, dass Du alles durchdacht hast.

                                    Dass ich zum richtigen Schluß gekommen bist hast Du mit deinem Post bestätigt. Ich hätte nach einer Woche die Funktion vergessen und wäre auf der Suche nach der Bedienunanleitung.😧

                                    1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @Garf last edited by mickym

                                      @garf sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                      Leider wird selbst bei einer Niederschlagsmenge von 0 der 1. Teilstrich in blau dargestellt. Alle meine Versuche dies in den Griff zu bekommen sind gescheitert. Aber es ärgert mich bis heute noch. Vielleicht hast Du eine Idee, was wie und wo einzustellen ist.

                                      Nun ich weiß ja nicht, was Du alles versucht hast - mir fallen spontan mal 2 Möglichkeiten ein.
                                      Zuerst die Einfache: 😉
                                      Setzt doch mal den Minimalwert auf 0.1 - oder irgendwas zwischen 0.1 und 0.4
                                      dann die Kompiziertere:
                                      Ansonsten müsstest Du es eben mit der Sectioneinfärbung machen und halt 0-1 auf grau setzten und den Rest darüber halt auf blau.

                                      Das mit dem Minimalwert wird doch nicht funktionieren, habe mir gerade den Quelltext angeschaut. Mal schauen, ob ich da selbst bissi rumprobieren kann. 😉 Also musst erst mal mit Sectioneinfärbung machen.

                                      G 1 Reply Last reply Reply Quote 1
                                      • G
                                        Garf @mickym last edited by

                                        @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                        Nun ich weiß ja nicht, was Du alles versucht hast

                                        Ich auch nicht mehr, ist mehr als 6 Monate her. Aber ich mach mich nochmal dran. Mit den Minimalwerten hatte ich es schon versucht, und den Einfärbeversuch ebenfalls. Aber jetzt hätte ich ja jemand den ich dazu auch mal fragen könnte.
                                        Ich werde es die Tage noch einmal versuchen.

                                        mickym 2 Replies Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @Garf last edited by mickym

                                          @garf Ich versuche das gerade nachzubauen - Du hast das wahrscheinlich alles schon gemacht, aber ich hab gerade an meinem Verstand gezweifelt und dann bissi recherchiert und für die RadialBargraphs muss man die

                                          steelseries.js - patchen

                                          siehe hier:

                                                  // Set the size - also clears the canvas
                                                  mainCtx.canvas.width = size;
                                                  mainCtx.canvas.height = size;
                                                  var minMeasuredValue = maxValue;
                                                  var maxMeasuredValue = minValue;
                                          

                                          Die letzten beiden Zeilen müssen eingefügt werden.

                                          Ich sehe aber, dass auch bereits ohne einen Code - der 1. Segmentstrich bereits leuchtet - also wahrscheinlich als Zeiger. Ich befürchte, dass man dieses Verhalten wohl abermals patchen muss.

                                          917c30a1-b9ba-4d4a-82a9-77578ed767b0-image.png

                                          1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @Garf last edited by mickym

                                            @garf sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                            @mickym sagte in Steelseries Widgets im NodeRed Dashboard nutzen:

                                            Nun ich weiß ja nicht, was Du alles versucht hast

                                            Ich auch nicht mehr, ist mehr als 6 Monate her. Aber ich mach mich nochmal dran. Mit den Minimalwerten hatte ich es schon versucht, und den Einfärbeversuch ebenfalls. Aber jetzt hätte ich ja jemand den ich dazu auch mal fragen könnte.
                                            Ich werde es die Tage noch einmal versuchen.

                                            So nach ein paar Stunden habe ich die Stelle nun gefunden. Das Problem ist aber trotzdem nicht so einfach zu lösen.

                                            Ich habe die Datei mal gepatched - aber es gibt damit eigentlich ein prinzipielles Problem, dass aus Entwicklersicht aus logischer Sicht gar nicht so einfach zu lösen ist und deswegen verstehe ich auch, warum es so implementiert ist und nicht wie Du es willst.

                                            Hier erst mal die Demo - die ja so in etwa Deinen Wünschen entsprechen dürfte:

                                            Patching steelseries 1.mp4

                                            Das Problem ist Folgendes:

                                            1. Es ist jetzt so gelöst, dass der Minimalwert nicht angezeigt wird. ( In Deinem Fall also die 0). Aber wenn der Minimalwert zum Beispiel wie bei meinem Thermostat von 10°C bis 40°C geht - wäre ich angefressen, wenn bei oder unter 10 gar nichts angezeigt wird - dann wäre das DIng für mich kaputt.
                                            2. Immer 0 auszublenden ist auch keine Lösung. Wenn man die Skala von -20 auf +40 setzt fände ich ein 0-Loch auch nicht prickelnd .

                                            Um es also optional zu machen, müsste man umfangreichere Änderungen vornehmen. Aber das dauert bissi. 😉

                                            EDIT:
                                            Habe das Video noch um die anderen beiden Typen ergänzt und ebenfalls mal gepatched - hoffe ich habe alle Stellen erwischt.

                                            G 2 Replies Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            node-red
                                            5
                                            65
                                            6478
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo