Zufallsgenerator Skript für Anwesenheitssimulation, Lampen..

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
funkleuchtturm
Beiträge: 2369
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von funkleuchtturm » 01.06.2014, 19:51

Homoran hat geschrieben:kann es daran liegen, dass ich in einem Programm mehrere Skripts laufen lasse, u.a. auch dein Sonnenstandsskript?
Nee, kann eigentlicht nicht!
Probier mal diesen Code im "Skript testen" Fenster. Vielleicht ist bei Dir doch noch irgendein Tippfehler:

Code: Alles auswählen

    !Version  2014.06.01 ;  Verfasser :Eugen Stall
    !zwei Systemvariablen "random_zahl"  und "random_tp" als Zahl anlegen, Wertebereich 0 bis 70000 !
    !Skript erzeugt Real-Zufallszahl zwischen 0 und 1 ungefiltert auf "random_zahl und gemittelt auf "random_tp"

    real random = 65536.0 * dom.GetObject("random_zahl").Value();
    integer zahl = random.ToInteger();
    if ((zahl == 0) || (zahl > 65535)) {zahl= 33757;} !um saubere Startposition sicherzustellen
    integer zahl_alt = zahl;
    string dualzahl = "";
    integer xor  ;
    integer x;
    string messwert;
    real m_wert =0.0;

    !hier wird ein 16bit-Schieberegister mit XOR-Rückkopplungen simuliert
    if (zahl > 32767) {dualzahl = dualzahl + "1"; zahl = zahl - 32768; x = 1;} else    {dualzahl = dualzahl + "0";  x = 0;}
    xor = x;   
    if (zahl > 16383) {dualzahl = dualzahl + "1"; zahl = zahl - 16384; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 8191) {dualzahl = dualzahl + "1";  zahl = zahl - 8192; x = 1;} else    {dualzahl = dualzahl + "0"; x = 0;}
    if ((xor + x) ==1) {xor = 1;} else {xor = 0;}
    if (zahl > 4095) {dualzahl = dualzahl + "1"; zahl = zahl - 4096; x = 1;} else    {dualzahl = dualzahl + "0"; x = 0;}
    if ((xor + x) ==1) {xor = 1;} else {xor = 0;}
    if (zahl > 2047) {dualzahl = dualzahl + "1"; zahl = zahl - 2048 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 1023) {dualzahl = dualzahl + "1"; zahl = zahl - 1024 ; x = 1;} else    {dualzahl = dualzahl + "0"; x = 0;}
    if ((xor + x) ==1) {xor = 1;} else {xor = 0;}
    if (zahl > 511) {dualzahl = dualzahl + "1"; zahl = zahl - 512 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 255) {dualzahl = dualzahl + "1"; zahl = zahl - 256 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 127) {dualzahl = dualzahl + "1"; zahl = zahl - 128 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 63) {dualzahl = dualzahl + "1"; zahl = zahl - 64 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 31) {dualzahl = dualzahl + "1"; zahl = zahl - 32 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 15) {dualzahl = dualzahl + "1"; zahl = zahl - 16 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 7) {dualzahl = dualzahl + "1"; zahl = zahl - 8 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 3) {dualzahl = dualzahl + "1"; zahl = zahl - 4 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 1) {dualzahl = dualzahl + "1"; zahl = zahl - 2 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    if (zahl > 0) {dualzahl = dualzahl + "1"; zahl = zahl - 1 ; x = 1;} else    {dualzahl = dualzahl + "0";}
    !if ((xor + 1) ==1) {xor = 1;} else {xor = 0;}
    zahl = zahl_alt * 2;
    if (zahl > 65535) {zahl = zahl - 65536;}
    zahl = zahl + xor;

    !Ergebnis ausgeben:
    random = 0.0000153055 * zahl; !random auf Wertebereich 0.0 bis 1.0 normieren
    dom.GetObject("random_zahl").State(random);
 WriteLine ( "random  :" + random);
    !Mittelwertbildung :
    !der Faktor 0.4 bestimmt die Mittelungsstärke. Je kleiner, desto "ruhiger" das Rauschsignal
    real tp_random = dom.GetObject("random_tp").Value();
    tp_random =  tp_random + (0.4 * (random - tp_random));
WriteLine("tp_random :" +tp_random);
    dom.GetObject("random_tp").State(tp_random);
Beim mehrmaligen Ausführen müssten sich die Ausgabewerte ändern !?
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von Homoran » 01.06.2014, 20:11

Ich habe inzwischen
- die variablenbezeichnung geändert (auch im Skript),
- die CCU neu gestartet.
- ein neues Programm geschrieben, in der ein physischer Schalter ;-) das Programm triggert.
die Zahl ändert sich; TP nicht;
seltsamerweise ändert sich auch der Timestamp von TP nicht mehr.

Bin gerade dabei Schnipsel für Schnipsel durchzugehen;
Die Testumgebung sagt: Kein Fehler!

EDIT: Habe gerade folgendes festgestellt:
test_tust.jpg
Bei Änderung des Wertes in der zweiten Zeile muss ich 2x Ausführen drücken, bevor sich der Wert im Ausgabefeld ändert.

Gruß
Rainer
PS ich fahre auf der lxCCU, aber das dürfte kein Problem sein, oder?
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

Benutzeravatar
funkleuchtturm
Beiträge: 2369
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von funkleuchtturm » 01.06.2014, 20:24

Vertausch mal die erste und zweite Zeile, dann müsste es beim ersten Mal schon klappen!
Homoran hat geschrieben:PS ich fahre auf der lxCCU, aber das dürfte kein Problem sein, oder?
.. natürlich nicht :D
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von Homoran » 01.06.2014, 20:27

Ich hab es gefunden,
da hat sich irgendein Ausrufezeichen verirrt;

Du hast da ein EDIT von 01.05. (??) fehlende Zeile.....

War das die Ursache?
die Zeile mit dem Ausrufezeichen kurz vor Schluss (WriteLine) hab ich nicht, dafür ein Ausrufezeichen am ende der Zeile davor.


Läuft jetzt
Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

Benutzeravatar
funkleuchtturm
Beiträge: 2369
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von funkleuchtturm » 01.06.2014, 20:51

Homoran hat geschrieben:Du hast da ein EDIT von 01.05. (??) fehlende Zeile.....

War das die Ursache?
Da fehlte eine Zeile im Schieberegister. Aber das kann nicht die Ursache gewesen sein.
Na wunderbar, wenn jetzt alles läuft.
Jetzt musst Du nur noch ein wenig mit dem Skript-Intervall und der Schaltschwelle "spielen", damit ein für Deine Zwecke optimales Random entsteht.
Viel Erfolg :D
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
funkleuchtturm
Beiträge: 2369
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von funkleuchtturm » 02.06.2014, 13:54

Eine verkürztes und schnelleres Skript ist jetzt als Version vom 02.06.2014 vorne im Thread eingestellt.
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

saschen79
Beiträge: 94
Registriert: 07.07.2012, 12:29

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von saschen79 » 10.06.2014, 23:05

Klasse, danke. Läuft. Genau das habe ich gesucht. Jetzt muss ich nur noch die Sonnenstandsberechnung 2.0 einbauen!

Viele Grüße, Sascha.

Benutzeravatar
joni-blue
Beiträge: 1173
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von joni-blue » 14.05.2015, 16:43

funkleuchtturm hat geschrieben: Sonst = Licht x1 Aus
wenn das im Programm steht wird dann die Lampe nicht immer ausgeschaltet wenn die CCU neu Startet?
Reboot tut gut ! ! !

tz04
Beiträge: 46
Registriert: 27.08.2013, 21:09
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von tz04 » 10.08.2015, 14:37

Sollte das Script auch mit der aktuellen Firmware noch funktionieren?

<<1. Zwei Systemvariable "random_zahl" und "random_tp" vom Variablentyp Zahl anlegen, Wertebereich -2.0 bis 2.0 !
Dabei ist "random_zahl" eine bei jedem Skriptaufruf neu berechnete Zufallszahl zwischen 0.0 und 1.0 Die Systemvariable "random_tp" ist eine gemitteltes oder "geglättetes" Abbild von "random_zahl" im gleichen Wertebereich. >>

Bei mir läuft das Script zwar ohne Fehler durch aber, random_tp enthält momentan -1,58 (random_zahl=0,11) während laut oben ja eigentlich immer Werte zwischen 0 und 1 errechnet werden sollten?
Ich habe das Script jetzt noch 3 mal laufen lassen und random_tp war immer negativ und random_zahl immer positiv.

Ich habe mir dann auch noch ein Testprogramm aufgesetzt aber das scheint die Variable komplett zu ignorieren? Geschaltet werden sollte sobald random_tp > 0.5. Aber das Programm schaltet die Lampe immer an, egal was in random_tp steht?

Ich habe mal ein paar Screenshots angehängt aber eigentlich kann man da doch nicht viel falsch machen?

Gruss
Thomas
Dateianhänge
Variablendefinition.pdf
(137.39 KiB) 204-mal heruntergeladen
RaspberryMatic

Benutzeravatar
funkleuchtturm
Beiträge: 2369
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Zufallsgenerator Skript für Anwesenheitssimulation, Lamp

Beitrag von funkleuchtturm » 10.08.2015, 16:12

tz04 hat geschrieben:Sollte das Script auch mit der aktuellen Firmware noch funktionieren?
Hab´s zwar nicht ausprobiert, wird aber mit ziemlicher Sicherheit von der Firmware-Version unabhängig sein!

Damit das WebUI-Programm läuft, muß mit einem zweiten WebUI-Programm das Skript "ganztägig" alle 3 bis 5 Minuten aufgerufen werden. Wenn Du das Skript einfach nur im Fenster aufrufst, dann werden zwar einmalig die Systemvariablen gesetzt, aber das erste WebUI-Programm wird erst durchaufen und schalten, wenn die Werte die Schwelle über/unterschreiten.
Schau Dir dazu die Logik der WebUI-Sprache an; steht hier im Forum http://homematic-forum.de/forum/viewtop ... =31&t=4251
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“