"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Scripts für Hausautomation

normahl 25.07.2020 - 09:49 468 10
Posts

normahl

Here to stay
Avatar
Registered: Aug 2003
Location: AT
Posts: 2783
Ich nehme an ich bin nicht der Einzige der keine oder kaum Programmierkenntnisse hat.

Wäre doch toll wenn wir hier eine kleine Sammlung schaffen könnten.
Welche scripts habt ihr denn am Laufen bzw selbst porgrammiert?

Ich hab hier eine Taupunktsteuerung per Blockly realisiert.
Ein Sensor im Keller einer draußen, 2 Lüfter.
Glücklich bin ich damit aber noch nicht, tut aber fürs erste was es soll:

click to enlarge

Wenn jemand was besseres mit Lua oder dzvents realisiert hat, wär ich nicht böse über euren code ;)
toll wäre natürlich eine maximale laufzeit, delta des taupunktes zu definieren usw... aber das kenn weder ich noch blockly (glaub ich)

banjoe

Addicted
Avatar
Registered: Jan 2003
Location: 4820
Posts: 456
@normahl machnoch eine hysterese dazu, damit du ein eventuelles prellen verhindern kannst

normahl

Here to stay
Avatar
Registered: Aug 2003
Location: AT
Posts: 2783
Zitat aus einem Post von banjoe
@normahl machnoch eine hysterese dazu, damit du ein eventuelles prellen verhindern kannst

bitte vergiss nicht das du hier mit jemanden redest der ein kompletter depp ist was das anbelangt. :D
wie realisiere ich das? vorallem wäre für dieses script wohl jede andere sprache besser geeignet...

Viper780

Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 40241
Einfach Ein- und Ausschalt Schwelle ein wenig auseinander ziehen.

ZB ein bei 66% und aus bei 64% (ca die doppelte Abweichung vom Sensor)

Und jeden schaltvorgang etwas verzögern oder schauen wann der letzte war und min 5min Pause erzwingen. Damit der Lüfter min 5min rennt oder aus ist.

Sonst kanns sein dass er um die Schwelle die ganze Zeit schwankt.
Bearbeitet von Viper780 am 25.07.2020, 10:55

normahl

Here to stay
Avatar
Registered: Aug 2003
Location: AT
Posts: 2783
hier stand blödsinn
Bearbeitet von normahl am 25.07.2020, 12:27

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 6264
DIY KNX Geräte

Warum: zum einen sehr teuer (wobei das bei der Anzahl an verbauten Geräten auch nicht mehr ins Gewicht fällt), zum anderen aber die Möglichkeit zu basteln und etwas individuelles zu gestalten. Möglichkeiten gibts unendlich. Man kann quasi alles günstig bauen. Vom BWM bis zum CO2 Sensor.
In meinem Fall ist es eine Statusanzeige:
Und zwar nehme ich einen KNX Busankoppler mit seriellem Interface, eine Arduino Pro Micro und ein paar LEDs. Ziel ist es ein Übersichtsboard zu machen wo ich auf einen Blick (und ohne App) die Stati meiner Ausshülle sehen kann. Sprich ob und welches Fenster bzw. Tür offen ist.
Das Ganze war für mich absolutes Neuland. Also Ardiuno und, abgesehen davon was ich mal vor 100 Jahren in der Schule gemacht hab, Programmierung eigentlich auch. Hat erstaunlicherweise aber auf Anhieb funktioniert :)

Code:
#include <Arduino.h>
#include <KnxTpUart.h>

#define PHYSICAL_ADDRESS "1.1.49"


#define LED1_GROUP_ADDRESS "5/2/22"
#define LED1 2 // Green=HIGH

KnxTpUart knx(&Serial1, PHYSICAL_ADDRESS);


void setup() {
  Serial.begin(9600);

  // LED config
  pinMode(LED1, OUTPUT);
  digitalWrite(LED1, LOW);

  // KNX config
  Serial1.begin(19200, SERIAL_8E1);
  knx.uartReset();
  knx.addListenGroupAddress(LED1_GROUP_ADDRESS);
 }

void maintainKnxSerial() {
  if (Serial1.available() > 0) {
    KnxTpUartSerialEventType eType = knx.serialEvent();
    if (eType == KNX_TELEGRAM) {
      KnxTelegram* telegram = knx.getReceivedTelegram();

      String target =
        String(0 + telegram->getTargetMainGroup()) + "/" +
        String(0 + telegram->getTargetMiddleGroup()) + "/" +
        String(0 + telegram->getTargetSubGroup());

       {
        // Write commands
        if (target == LED1_GROUP_ADDRESS) {
          digitalWrite(LED1, telegram->getBool() ? HIGH : LOW);
        }
      }
    }
  }
}

Die notwendigen Bibliotheken gibts hier: klick

Kurze Erklärung zum Skript selbst:
Dem Busankoppler gibt man eine freie Adresse (1/1/49 bei mir) und die LED hört in dem Bsp. auf den Status einer Tür (5/5/22).
Am Breadboard hab ich das so gemacht, dass ich auf den definierten Ausgang (LED1 2) 2 LEDs mit Vorwiderstand hängen. einmal gegen Plus und einmal gegen Minus. Bei Ausgang High leuchtet somit die grüne und bei Low die Rote LED.

Kleines Problem hab ich hier noch wo mir vielleicht jemand unter die Arme greifen könnte. Und zwar stimmt der Initialstatus nicht. Es scheint als würde beim Verbinden der Ausgang per Standard auf Low gesetzt und nicht eingelesen. Dh erst beim erstmaligen manuellen öffnen/schließen stimmts. Das ist natürlich unschön. Help welcome.
Bearbeitet von Captain Kirk am 28.07.2020, 09:13

Gegi

Here to stay
Registered: Jan 2001
Location: Wien
Posts: 663
Vermutlich sendet dein Tür/Fenster Sensor nur bei Change. Sollte aber am Binäreingang (?) u.U. die Option geben den Status regelmäßig auf den Bus zu senden.

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 6264
Zitat aus einem Post von Gegi
Vermutlich sendet dein Tür/Fenster Sensor nur bei Change. Sollte aber am Binäreingang (?) u.U. die Option geben den Status regelmäßig auf den Bus zu senden.
Stimmt das kann ich sicher in der ets konfigurieren. Check ich gleich am Abend, thx.

Snoop

Here to stay
Registered: Jun 2002
Location: Vienna
Posts: 884
Genau aus dem Grund bin ich am überlegen, ob ich hier nicht eine Brücke zu MQTT bei unserer KNX Anlage bauen werde. Denn ansonsten glaub ich dass der aktuelle Status eher "zufall" ist bei den meisten Reaktoren nach einem Neustart.

Gegi

Here to stay
Registered: Jan 2001
Location: Wien
Posts: 663
Zitat aus einem Post von Snoop
Genau aus dem Grund bin ich am überlegen, ob ich hier nicht eine Brücke zu MQTT bei unserer KNX Anlage bauen werde. Denn ansonsten glaub ich dass der aktuelle Status eher "zufall" ist bei den meisten Reaktoren nach einem Neustart.

Initialstatus sollte konfigurierbar sein.

Snoop

Here to stay
Registered: Jun 2002
Location: Vienna
Posts: 884
Ich glaube aber, dass der Initialstatus nur dann was bringt, wenn alle aktoren gleich schnell booten und erst den status durchschicken, wenn alle am Netz sind. ALso wie gesagt ich kenne mich noch nicht aus und bekomme das system erst, aber aus meiner sonstigen programmiererfahrung ist ein EventBus halt am geschicktesten, wenn alle akteure von einer zentrale die befehle der reihe nach zugestellt bekommen. In meinem fall denke ich hier vor allem eben an so ein szenario wie es captain kirk vor hat, so dass man zwei verschiedene hausautomatisierungssysteme mit einander verbindet. aber mal gucken. hab ja noch vieeeelll zeit mich damit zu spielen, sobalds mal installiert ist :D
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz