Hauptmenü

Neueste Beiträge

#1
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von All-Ex - 23 März 2025, 09:30:39
Hallo zusammen,

kann die KI eigentlich die Verschattung einzelner Strings, die ja üblicherweise in unterschiedlichen Himmelsrichtungen und/oder Winkeln und montiert sind, erlernen?

Gemäß aiRawData erhält die KI diese Parameter als Trainingsgrundlage:
2025032215 => hod: 15, nod: Sa, sunaz: 217, sunalt: 35, rad1h: 7610, wcc: 89, wid: 3, rr1c: 0.00, pvrl: 3142, con: 884, temp: 16
Ich vermute, dass die Verschattung eines Strings (z.B. im Winter Vormittags im Schatten, im Sommer Vormittags in der Sonne) nur indirekt anhand der Summe der PV-Leistung erlernt werden kann. Diese Gesamt-PV-Leistung hängt aber noch von vielen anderen Dingen ab, daher dürfte das sehr ungenau sein.

Wäre es sinnvoll, aiRawData zu erweiterten, so dass die vorhandenen Datenfelder (Vorhersage, Leistung etc.) für jeden String separat gespeichert werden? Dann hätte die KI die Chance, eine Verschattung eines Strings viel direkter zu erlernen, als über die Summe aller Strings und das Ergebnis sollte genauer sein... Oder nicht?

VG,
Alex
#2
Bastelecke / Aw: ESP RGBWW Controller - Fir...
Letzter Beitrag von pjakobs - 23 März 2025, 09:25:28
so, jetzt funktioniert auch die Pin Konfiguration vollständig.
#3
Eigentlich wäre die beste Option den Html-Code in FHEM-Widgets unterzubringen.

Damit es die meisten nutzen, braucht es eines einfachen Aufrufs. Mit regex sind die meisten schon überfordert. Allerdings muss man sich den Aufbau von Widgets erst anschauen.

Das hätte auch den Vorteil, dass man Interaktion über FHEMWEB nutzen könnte. Widgets lassen sich in FHEMWEB gut nutzen. Ich habe mit @Ellert auch in DOIF-uiTable die Option eingebaut FHEM-Widgets zu nutzen.

Die meisten bisherigen Widgets nutzen keine svg-Elemente (bis auf die Icons). Sie sehen recht altbacken aus. Das beste Beispiel ist der Slider, wo man noch nicht mal den Anfang und das Ende erkennen kann.

Das knob-Widget ist ein gutes Beispiel, wie ein fremder SVG-Code in FHEM-Widget integriert wurde.

https://wiki.fhem.de/wiki/FHEMWEB/Widgets
#4
MQTT / Aw: MQTT2_Device readingList m...
Letzter Beitrag von Beta-User - 23 März 2025, 08:30:14
Warum rechnet eigentlich nicht die MCU?

Geht doch einfacher, wenn gleich die gewünschten Einheiten versendet werden....
#5
Sonstige Systeme / Aw: [Neues Modul] 74_Automower...
Letzter Beitrag von outhouse - 23 März 2025, 08:27:56
Ist es möglich, dass aktuell die neue Startzeit nicht mehr ausgelesen wird?

planner_nextStart -

Gruss Chris
#6
Homematic / Aw: Innogy SmartHome Unterputz...
Letzter Beitrag von justcallmeal - 23 März 2025, 08:16:51
Zitat von: Nighthawk am 21 März 2025, 19:38:19Soweit ich es richtig zuordne, gibt es dafür auch schon AskSinpp Firmware: https://homematic-forum.de/forum/viewtopic.php?f=76&t=65348
Damit wird das Gerät genau so wie HM behandelt.

Das klingt interessant, danke für die Info!
#7
FHEM Code changes / Revision 29778: controls_fhem....
Letzter Beitrag von System - 23 März 2025, 07:50:14
Revision 29778: controls_fhem.txt: fhemupdate checkin

controls_fhem.txt: fhemupdate checkin

Source: Revision 29778: controls_fhem.txt: fhemupdate checkin
#8
Einplatinencomputer / Aw: FHEM/51_RPI_GPIO.pm
Letzter Beitrag von frober - 23 März 2025, 07:04:27
Zitat von: frober am 22 März 2025, 22:27:08Aktuell hast du BCM.

Ich glaube da lag ich falsch.
Es geht vermutlich um die Definition, also was im Device angegeben wird.

Das wäre aktuell GPIO, bzw. die WiringPi-Nummerierung

Es wäre wahrscheinlich sinnvoller BCM oder die ph. Nr. anzugeben.
#9
Was jetzt ja noch schön wäre, wenn die Animation auch abläuft. Noch nicht optimiert, aber so als Proof-Of-Concept habe ich versucht die setValueFn() an der richtigen Stelle zu platzieren und im SVG zu speichern. Das geht auch (Juhu). Was ich nur lieber hätte ist, Zugriff auf das Readings Wert bei folgendem Testdevice - ich will ja nicht immer nur State dafür nutzen. Jemand eine Idee?

defmod bargraphSVG dummy
attr bargraphSVG devStateIcon {\
    my $val = 100+ReadingsVal($name, 'wert', '???');;\
    my $bargraph = FW_makeImage('bargraph2');;\
    $bargraph =~ s/(<svg[^>]+style="[^"]*)--rssi:\d{1,3}/$1--rssi:$val/;;\
    \
    return $bargraph;;\
}
attr bargraphSVG readingList wert
attr bargraphSVG setList wert
attr bargraphSVG userReadings state:wert:.* {\
    return ReadingsVal($name, "wert", "???");;\
}
attr bargraphSVG webCmd wert -100:wert -82:wert -55:wert -40:wert -10:wert -3:wert 0

Das SVG hat nun eben auch noch ein JS um setValueFn() zu platzieren:
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" style="--rssi:100">
  <style>
    #bar00 {
      height: 1%;
      y: 99%;
      fill: #ff0000; /* Red for 0% */
    }

    /* For bars from 10% to 100% */
    #bar10 {
      --cmp: max(0, calc(var(--rssi) - 10));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 10%);
      y: calc(100% - var(--cmp2) * 10%);
      fill: #ff0000; /* Red for 10% */
    }

    #bar20 {
      --cmp: max(0, calc(var(--rssi) - 20));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 20%);
      y: calc(100% - var(--cmp2) * 20%);
      fill: #ff5500; /* Orange for 20% */
    }

    #bar30 {
      --cmp: max(0, calc(var(--rssi) - 30));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 30%);
      y: calc(100% - var(--cmp2) * 30%);
      fill: #ff9900; /* Yellow-Orange for 30% */
    }

    #bar40 {
      --cmp: max(0, calc(var(--rssi) - 40));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 40%);
      y: calc(100% - var(--cmp2) * 40%);
      fill: #ffcc00; /* Yellow for 40% */
    }

    #bar50 {
      --cmp: max(0, calc(var(--rssi) - 50));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 50%);
      y: calc(100% - var(--cmp2) * 50%);
      fill: #ffff00; /* Yellow for 50% */
    }

    #bar60 {
      --cmp: max(0, calc(var(--rssi) - 60));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 60%);
      y: calc(100% - var(--cmp2) * 60%);
      fill: #99ff00; /* Light Green for 60% */
    }

    #bar70 {
      --cmp: max(0, calc(var(--rssi) - 70));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 70%);
      y: calc(100% - var(--cmp2) * 70%);
      fill: #66cc00; /* Green for 70% */
    }

    #bar80 {
      --cmp: max(0, calc(var(--rssi) - 80));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 80%);
      y: calc(100% - var(--cmp2) * 80%);
      fill: #339900; /* Darker Green for 80% */
    }

    #bar90 {
      --cmp: max(0, calc(var(--rssi) - 90));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 90%);
      y: calc(100% - var(--cmp2) * 90%);
      fill: #006600; /* Dark Green for 90% */
    }

    #bar100 {
      --cmp: max(0, calc(var(--rssi) - 99));
      --cmp2: min(1, calc(var(--cmp)));
      height: calc(var(--cmp2) * 100%);
      y: calc(100% - var(--cmp2) * 100%);
      fill: #004d00; /* Dark Green for 100% */
    }
   
    .background {
      fill: #cccccc;
    }
   
    rect {
      transition: height 1s ease-in-out, y 1s ease-in-out;
    }
  </style>
 
  <script>
   console.log("los gehts");
    (() => {
        const script = document.currentScript;
        const svg = script.closest('svg');
        const container = svg.parentNode.parentNode;

        function setValueFn(value) {
          console.log("Neuer RSSI-Wert:", value);
          svg.style.setProperty("--rssi", 100 + parseInt(value));
        }

        container.setValueFn = setValueFn;
    })();
  </script>
 
  <rect class="background" x="0" y="99%" width="7%" height="1%" />
  <rect class="background" x="9%" y="90%" width="7%" height="10%" />
  <rect class="background" x="18%" y="80%" width="7%" height="20%" />
  <rect class="background" x="27%" y="70%" width="7%" height="30%" />
  <rect class="background" x="36%" y="60%" width="7%" height="40%" />
  <rect class="background" x="45%" y="50%" width="7%" height="50%" />
  <rect class="background" x="54%" y="40%" width="7%" height="60%" />
  <rect class="background" x="63%" y="30%" width="7%" height="70%" />
  <rect class="background" x="72%" y="20%" width="7%" height="80%" />
  <rect class="background" x="81%" y="10%" width="7%" height="90%" />
  <rect class="background" x="90%" y="0%" width="7%" height="100%" />

  <rect id="bar00" x="0" width="7%" />
  <rect id="bar10" x="9%" width="7%" />
  <rect id="bar20" x="18%" width="7%" />
  <rect id="bar30" x="27%" width="7%" />
  <rect id="bar40" x="36%" width="7%" />
  <rect id="bar50" x="45%" width="7%" />
  <rect id="bar60" x="54%" width="7%" />
  <rect id="bar70" x="63%" width="7%" />
  <rect id="bar80" x="72%" width="7%" />
  <rect id="bar90" x="81%" width="7%" />
  <rect id="bar100" x="90%" width="7%" />
</svg>
#10
Einplatinencomputer / Aw: FHEM/51_RPI_GPIO.pm
Letzter Beitrag von frober - 22 März 2025, 22:27:08
Prinzipiell sollte es egal sein. Du musst du es dir merken, bzw. bei Fragen entsprechend kommunizieren.

Aktuell hast du BCM.