Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Fermate

Administrator
  • Innlegg

    1 923
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    149

Innlegg skrevet av Fermate

  1. Erling skrev (19 timer siden):

    r jo helt nytt dette, må finne ut lengde/breddegrad for sentrale deler av Norge, kun Bergen og Oslo var ikke. Husker ikke hvor jeg fant det forrige gang, bilen eller YR kanskje.

     

    https://support.google.com/maps/answer/18539

     

    Finn koordinatene til et sted

    1. Åpne Google Maps på datamaskinen.
    2. Høyreklikk på det aktuelle stedet eller området på kartet.
    3. Velg breddegrad og lengdegrad. Da kopieres koordinatene automatisk.
    • Like 1
  2. frodegill skrev (På 17.7.2021 den 1.06):

    fra Nordpool (via ENTSO-E) 

     

    Vil det si at du da gjør det "lovlig" siden du går via ENTSO-E ?
    Norpool er jo litt vrange her:

     

    image.png

     

    Ikke det at JEG er noen "det må du ikke gjøre for det er ikke lov, og siden jeg ikke tør å gjøre det synes jeg ikke du skal gjøre det heller" type, men jeg er litt interessert i at tjenester jeg bruker ikke plutselig blir borte fordi de blir stengt.

  3. På 5.6.2021 den 9.53, aarpi3 skrev:

    men det vet kanskje @Fermate?


    Jeg har bare så vidt begynt å teste ZigBee på HS4'en hjemme.
    Kjører deConz, Conbee og JowiHUE på hytta i Danmark (for der er det ikke plass til Fibaro piller i veggboksene så jeg må bruke IKEA pærer isteden :( )
    Blir kanskje litt eksprimentering der nede i sommer.

  4. Jeg slenger alikevel ut kode for denne løsningen i tilfelle noen ønsker å se på den eller bruke den til noe annet. Den er 98% ferdig men ikke ryddet for å se profesjonell ut ... ;)
    (Det er også lov å kommentere spørre eller kritisere)

    Fikk 2 ESP32 av @Moskus i posten (han bestikker meg for at koden min skal bli kjørbar på hans billigere prosessorer ;) ) så det kan også hende at koden nå blir skrevet om til å kjøre mer rettet mot disse...

     

    Sitat


    #include <Stepper.h>
    #include <ArduinoMqttClient.h>
    #include <WiFiNINA.h>
    #include <FlashStorage.h>

    // Flash storage
    FlashStorage(lastStatePull, int);
    FlashStorage(lastStepperPos, int);
    FlashStorage(lastStepperMaxPos, int);
    FlashStorage(lastTimeForTotalPullMillis, unsigned long );

    int lastSavedStatePull;
    int lastSavedStepperPos;
    int lastSavedStepperMaxPos;
    unsigned long lastSavedTimeForTotalPullMillis;

    unsigned long lastSaveTimeMillis=0;

    // Buttons
    const int buttonPin1 = A1;  
    const int buttonPin2 = A2; 
    const int buttonPin3 = A3;  
    bool buttonUp = false; 
    bool buttonDown = false;
    bool buttonConfirm = false; 

    // LED
    const int ledPinRED =  6;       
    const int ledPinGREEN =  7;       
    const int ledPinBLUE =  13;       

    // DC Motor
    const int Motor1PinH =  0;       
    const int Motor1PinV =  1;       

    // Stepper
    const int stepperPin1 =  2;       
    const int stepperPin2 =  4;       
    const int stepperPin3 =  3;       
    const int stepperPin4 =  5;       
    const int stepsPerRevolution = 32;   
    Stepper Motor2(stepsPerRevolution, stepperPin1, stepperPin2, stepperPin3, stepperPin4);

    int stepperPos = 0;
    int targetStepperPos =0;
    int stepperMaxPos = 3000; //minPos =0

    //WiFi
    char ssid[] = "espeland_ac";
    char pass[] = "espelandnett";
    WiFiClient wifiClient;

    //MQTT
    MqttClient mqttClient(wifiClient);
    const char broker[]    = "192.168.232.8";
    int        port        = 1883;
    const char willTopic[] = "panelCurtain/will";
    const char pullTopic[]   = "panelCurtain/pull"; // OPEN CLOSE
    const char turnTopic[]   = "panelCurtain/turn"; // % 0 -100
    const char learnTopic[]   = "panelCurtain/learn"; //  PULL_TIME SET_TURN_START SET_TURN_STOP TURN_ADJUST WRITE_FLASH READ_FLASH
    const char statusTopic[]  = "panelCurtain/status"; // Open Close IsClosing ISOPENING
    const char positionTopic[]  = "panelCurtain/position"; // 0-100


    String willPayload = "oh no!";
    bool willRetain = true;
    int willQos = 1;
    int subscribeQos = 1;

    String payload;
    bool retained = false;
    int qos = 1;
    bool dup = false;

    // DIV
    float x;
    unsigned long startMillis;
    unsigned long timeForTotalPullMillis =3000;

    // States
    enum _PullStates {
      ISOPEN,
      ISCLOSED,
      ISOPENING,
      ISCLOSING,
      WAIT_STARTTIMER,
      WAIT_STOPPTIMER
    };

    enum _TurnStates {
      TURNING_UP,
      TURNING_DOWN,
      TURN_ADJUST,
      TURNING_STOPPED
    };

    enum _motorCommandsTurn {
      TURN_UP,
      TURN_DOWN,
      TURN_STOP
    };
    enum _motorCommandsPull {
      PULL_OPEN,
      PULL_CLOSE,
      PULL_STOP
    };

    enum _PullStates statePull = ISOPEN;
    enum _TurnStates stateTurn = TURNING_STOPPED;
    enum _motorCommandsTurn motorTurn = TURN_STOP;
    enum _motorCommandsPull motorPull = PULL_STOP;

    // ********************************************************
    void setup() {
    // LED
      pinMode(ledPinRED, OUTPUT);
      pinMode(ledPinGREEN, OUTPUT);
      pinMode(ledPinBLUE, OUTPUT);
      ledAll();
    // Serial
      Serial.begin(9600);
      startMillis=millis();
      while (!Serial && millis() - startMillis<3000) {
        delay(100);
      }
      Serial.println("begin init");
    // Buttons 
      pinMode(buttonPin1, INPUT_PULLUP);
      pinMode(buttonPin2, INPUT_PULLUP);
      pinMode(buttonPin3, INPUT_PULLUP);
    // DC Motor
      pinMode(Motor1PinH, OUTPUT);
      pinMode(Motor1PinV, OUTPUT);
    // Stepper
      Motor2.setSpeed(1000);
      ledOff();
    // Flash
      readFromFlash();  
      Serial.println("End init");
    }

    // ********************************************************

    void loop() {
      //Save pos if changed
      testWriteToFlash();
      // Test WiFi
      connect_wifi();
      // Test MQTT
      connect_MQTT();
      //OK
      ledOff();
      // Poll MQTT
      mqttClient.poll();

      // read buttons 
      readButtons();

      // Update states for PULL
      if (statePull == WAIT_STOPPTIMER) {
        if (buttonConfirm && millis() - startMillis > 3000) { // stop the timing but after minimum 3 sek
          motorPull = PULL_STOP;
          timeForTotalPullMillis = millis() - startMillis;
          statePull = ISCLOSED;
          Serial.print("Button confirm pressed, Total pull time set to: "); Serial.println(timeForTotalPullMillis); Serial.println("Pull state = ISCLOSED");
        } // ignorer alle andre buttons
      } else if (statePull == WAIT_STARTTIMER) { 
        if (buttonUp) {
          Serial.println("Button H pressed");
          motorPull = PULL_CLOSE;
        } else if (buttonDown) {
          motorPull = PULL_OPEN;
          Serial.println("Button V pressed");
        } else if (buttonConfirm) { // start the timing
          motorPull = PULL_CLOSE;
          statePull = WAIT_STOPPTIMER;
          Serial.println("Button confirm pressed, Stating timer"); Serial.println("Pull state = WAIT_STOPPTIMER");
          startMillis = millis();
        } else  {
          motorPull = PULL_STOP;
        }
      } else { // da er vi i åpne lukke prod
        if (buttonConfirm && statePull == ISOPEN) { 
          motorPull = PULL_CLOSE;
          statePull = ISCLOSING;
          publishPullState();
          Serial.println("Button confirm pressed, Stating timer"); Serial.println("Pull state = ISCLOSING");
          startMillis = millis();    
        } else  if (buttonConfirm && statePull == ISCLOSED) {
          motorPull = PULL_OPEN;
          statePull = ISOPENING;
          publishPullState();
          Serial.println("Button confirm pressed, Stating timer"); Serial.println("Pull state = ISOPENING");
          startMillis = millis();    
        } // else er vi underveis og skal ikke gjøre noe
      }

      // Update states for Turning
      if (stateTurn == TURN_ADJUST) {
        if (buttonUp) {
          motorTurn = TURN_UP;
        } else if (buttonDown) {
          motorTurn = TURN_DOWN;
        } else if (buttonConfirm) {
          motorTurn = TURN_STOP;
          stepperPos =0;
          stateTurn=TURNING_STOPPED;
          publishTurnPos();
        } else {
          motorTurn = TURN_STOP;
        }
      } else if (stateTurn == TURNING_STOPPED) {
        if (buttonUp && stepperPos < stepperMaxPos) {
          motorTurn = TURN_UP;
        } else if (buttonDown && stepperPos > 0) {
          motorTurn = TURN_DOWN;
        } else {
          motorTurn = TURN_STOP;
        }
      } // else NOP as we are truning after an MQTT command

        
      // Execute Turn 
      ioMotorTurn();

      // Execute Pull
      ioMotorPull();

      // Check for Pull Stop
      if (statePull == ISCLOSING) {
        if (millis() - startMillis > timeForTotalPullMillis) {
          statePull = ISCLOSED;
          motorPull = PULL_STOP;
          publishPullState();
        }
      } else if (statePull == ISOPENING) {
        if (millis() - startMillis > timeForTotalPullMillis) {
          statePull = ISOPEN;
          motorPull = PULL_STOP;
          publishPullState();
        }
      }

      
      // Check for TURN stop
      if (stateTurn == TURNING_DOWN) {
        if (stepperPos <= 0 || stepperPos == targetStepperPos) {
          motorTurn = TURN_STOP;
          stateTurn = TURNING_STOPPED;
          publishTurnPos();
        }
      } else if (stateTurn == TURNING_UP) {
        if (stepperPos >= stepperMaxPos || stepperPos == targetStepperPos) {
          motorTurn = TURN_STOP;
          stateTurn = TURNING_STOPPED;
          publishTurnPos();
        }
      } else if (stateTurn == TURNING_STOPPED) {   
        motorTurn = TURN_STOP; // just in case :)
      }
    }

    // *************************************************************


    void connect_wifi() {
      int wstatus;
      // WIFI
    if (WiFi.status() != WL_CONNECTED) {
        
        Serial.print("Attempting to connect as wifi status is: ");
        Serial.println(WiFi.status());
        Serial.print("Attempting to connect to WPA SSID: ");
        Serial.println(ssid);
        delay(1000);
        ledRed();
        wstatus= WiFi.begin(ssid, pass);
        while (WiFi.status() != WL_CONNECTED) {
          // failed, retry
          delay(2000);
          ledOff();
          delay(1000);
          ledRed();
          wstatus= WiFi.begin(ssid, pass);
        Serial.print("Retried status:");
        Serial.println(wstatus); 
        }
        Serial.println("You're connected to the network");
      } 
    }

    void connect_MQTT() {
      if (!mqttClient.connected()) {
         ledBlue();
        // Will
        mqttClient.beginWill(willTopic, willPayload.length(), willRetain, willQos);
        mqttClient.print(willPayload);
        mqttClient.endWill();
        Serial.print("Attempting to connect to the MQTT broker: ");

        if (!mqttClient.connect(broker, port)) {
          Serial.print("MQTT connection failed! Error code = ");
          Serial.println(mqttClient.connectError());
        } else {
          Serial.println("You're connected to the MQTT broker!");
      
          mqttClient.onMessage(onMqttMessage); // set the message receive callback
      
          Serial.println("Subscribing to topics");
      
          mqttClient.subscribe(pullTopic, subscribeQos);
          mqttClient.subscribe(turnTopic, subscribeQos);
          mqttClient.subscribe(learnTopic, subscribeQos);
        } 
      } 
    }
      

    void onMqttMessage(int messageSize) {
      String buff;
      String topic;
      int i;
      Serial.print("Received a message with topic '");
      topic=mqttClient.messageTopic();
      Serial.print(topic);
      Serial.print("', duplicate = ");
      Serial.print(mqttClient.messageDup() ? "true" : "false");
      Serial.print(", QoS = ");
      Serial.print(mqttClient.messageQoS());
      Serial.print(", retained = ");
      Serial.print(mqttClient.messageRetain() ? "true" : "false");
      Serial.print("', length ");
      Serial.print(messageSize);
      Serial.println(" bytes:");

      // use the Stream interface to print the contents
      buff="";
      while (mqttClient.available()) {    
        buff+=(char)mqttClient.read();
      }
      Serial.print(topic);
      Serial.print("=");
      Serial.println(buff);

      // Turn
      if (topic.equalsIgnoreCase(turnTopic)) {
        i=buff.toInt();
        i=i*stepperMaxPos;
        targetStepperPos=i/100;
        if (targetStepperPos>stepperPos) {
          motorTurn = TURN_UP;
          stateTurn = TURNING_UP;
        } else if (targetStepperPos<stepperPos) {
          motorTurn = TURN_DOWN;
          stateTurn = TURNING_DOWN;
        } else { // equal
          motorTurn = TURN_STOP;
          stateTurn = TURNING_STOPPED;
        }
      }

    // Pull
      if (topic.equalsIgnoreCase(pullTopic)) {
         if (buff.equalsIgnoreCase("STOPP")) {
           motorPull = PULL_STOP;
         } else if (buff.equalsIgnoreCase("OPEN")) {
           motorPull = PULL_OPEN;
           statePull= ISOPENING;
         } else if (buff.equalsIgnoreCase("CLOSE")) {
           motorPull = PULL_CLOSE;
           statePull= ISCLOSING;
         }
      }

    // Learn  
      if (topic.equalsIgnoreCase(learnTopic)) {
        if (buff.equalsIgnoreCase("PULL_TIME")) {
           statePull = WAIT_STARTTIMER;
         } else if (buff.equalsIgnoreCase("TURN_ADJUST")) {
           Serial.println("Start Turning Adjust");
           stateTurn = TURN_ADJUST;
         } else if (buff.equalsIgnoreCase("SET_TURN_START")) {
           Serial.println("Start Turn pos set");
           stepperPos=0;
           stateTurn = TURNING_STOPPED;
         } else if (buff.equalsIgnoreCase("SET_TURN_STOP")) {
           stepperMaxPos = stepperPos;
           Serial.println("Turn Maxpos set to: ");
           Serial.println(stepperMaxPos);
           stateTurn = TURNING_STOPPED;
         }else if (buff.equalsIgnoreCase("READ_FLASH")) {
           readFromFlash();
         }else if (buff.equalsIgnoreCase("WRITE_FLASH")) {
           writeToFlash();
         }
      }

     }

    void ioMotorPull() {
      if (motorPull == PULL_OPEN) {
        digitalWrite(Motor1PinH,HIGH);
        digitalWrite(Motor1PinV,LOW);
      } else if (motorPull == PULL_CLOSE){
        digitalWrite(Motor1PinH,LOW);
        digitalWrite(Motor1PinV,HIGH);
      } else {
        digitalWrite(Motor1PinH,HIGH);
        digitalWrite(Motor1PinV,HIGH);
      }
    }

    void ioMotorTurn(){
    /*    Serial.print("Max ");
        Serial.println(stepperMaxPos);
        Serial.print("Target ");
        Serial.println(targetStepperPos);
        Serial.print("Current ");
        Serial.println(stepperPos);*/

      if (motorTurn == TURN_UP) {
          Motor2.step(1);
          stepperPos+=1;
      } else if (motorTurn == TURN_DOWN){
          Motor2.step(-1);
          stepperPos-=1;
      } else {
        digitalWrite(stepperPin1,LOW);
        digitalWrite(stepperPin2,LOW);
        digitalWrite(stepperPin3,LOW);
        digitalWrite(stepperPin4,LOW);
      }
    }

     void led(int red, int green, int blue) {
      digitalWrite(ledPinRED, red);
      digitalWrite(ledPinGREEN, green);
      digitalWrite(ledPinBLUE, blue);
     }

     void ledOff() {
      led(LOW,LOW,LOW);
     }
     void ledRed() {
      led(HIGH,LOW,LOW);
     }
     void ledGreen() {
      led(LOW,HIGH,LOW);
     }
     void ledBlue() {
      led(LOW,LOW,HIGH);
     }
     void ledAll() {
      led(HIGH,HIGH,HIGH);
     }

    void readButtons() {
      buttonDown = digitalRead(buttonPin1) == LOW; // bool
      buttonUp = digitalRead(buttonPin2) == LOW;
      buttonConfirm = digitalRead(buttonPin3) == LOW;
    /*  if (buttonDown)   Serial.println("Button V");
      if (buttonUp)   Serial.println("Button H");
      if (buttonConfirm)   Serial.println("Button C");
    */
    }

    void publishPullState() {
      switch (statePull) {
        case ISOPEN: payload="ISOPEN"; break;
        case ISCLOSED: payload="ISCLOSED"; break;
        case ISOPENING: payload="ISOPENING"; break;
        case ISCLOSING: payload="ISCLOSING"; break;
        case WAIT_STARTTIMER: payload="WAIT_STARTTIMER"; break;
        case WAIT_STOPPTIMER: payload="WAIT_STOPPTIMER"; break;
      }
      mqttClient.beginMessage(statusTopic, payload.length(), retained, qos, dup);
      mqttClient.print(payload);
      mqttClient.endMessage();
      Serial.print("Publish Pull status: ");
      Serial.println(payload);
    }

    void publishTurnPos() {
      x=stepperPos;
      x=x/stepperMaxPos;
      x=x*100;
      payload=String(int(x));
      mqttClient.beginMessage(positionTopic, payload.length(), retained, qos, dup);
      mqttClient.print(payload);
      mqttClient.endMessage();
      Serial.print("Publish Stepper pos: ");
      Serial.print(stepperPos);
      Serial.print(" = %: ");
      Serial.println(x);
    }

    void readFromFlash() {
      if (lastStatePull.read() == 0) {
        statePull = ISOPEN;
      } else {
        statePull = ISCLOSED;
      }
      lastSavedStatePull = statePull ;
      Serial.print("Reading flash statePull ");
      Serial.println(statePull);
      if (statePull == 0) statePull=ISOPEN; // first time init
     
      stepperPos = lastStepperPos.read();
      lastSavedStepperPos = stepperPos ;
      Serial.print("Reading flash StepperPos ");
      Serial.println(stepperPos);
     
      stepperMaxPos = lastStepperMaxPos.read();
      lastSavedStepperMaxPos = stepperMaxPos ;
      Serial.print("Reading flash StepperMaxPos ");
      Serial.println(stepperMaxPos);
      if (stepperMaxPos == 0) stepperMaxPos=3000; // first time init
      
      timeForTotalPullMillis = lastTimeForTotalPullMillis.read();
      lastSavedTimeForTotalPullMillis = timeForTotalPullMillis;
      Serial.print("Reading flash TimeForTotalPullMillis ");
      Serial.println(timeForTotalPullMillis);
      if (timeForTotalPullMillis == 0) timeForTotalPullMillis=5000; // first time init

      lastSaveTimeMillis=millis(); // start counting from now
    }

    void testWriteToFlash() {
      if (motorTurn == TURN_STOP && motorPull == PULL_STOP) { // dont save whilie moving
        if (millis() - lastSaveTimeMillis > 120000) { // 2 minutes
          writeToFlash();
          lastSaveTimeMillis=millis();
        } 
      } 
    }
    void writeToFlash() {
      if (statePull != lastSavedStatePull) {
        if (statePull == ISOPEN) {
          lastStatePull.write(0);
        } else {
          lastStatePull.write(1);
        }
        lastSavedStatePull=statePull;
        Serial.print("Saving to flash statePull ");
        Serial.println(statePull);
      }

      if (stepperPos != lastSavedStepperPos) {
        lastStepperPos.write(stepperPos);
        lastSavedStepperPos=stepperPos;
        Serial.print("Saving to flash StepperPos ");
        Serial.println(stepperPos);
      }

      if (stepperMaxPos != lastSavedStepperMaxPos) {
        lastStepperMaxPos.write(stepperMaxPos);
        lastSavedStepperMaxPos=stepperMaxPos ;
        Serial.print("Saving to flash StepperMaxPos ");
        Serial.println(stepperMaxPos);
      }

      if (timeForTotalPullMillis != lastSavedTimeForTotalPullMillis) {
        lastTimeForTotalPullMillis.write(timeForTotalPullMillis);
        lastSavedTimeForTotalPullMillis=timeForTotalPullMillis ;
        Serial.print("Saving to flash TimeForTotalPullMillis ");
        Serial.println(timeForTotalPullMillis);
      } 
    }

     

    • Like 1
    • Thanks 1
  5. For noen uker siden var neste prototype klar til test.
    Den var super optimalisert på plass og hadde fått plass til trykk knapper for å styre den manuelt. (De henger i kablene på dette bildet)

    Boksen som elektronikken skulle pakkes inn i var ikke klar men den var tiltenkt å ligge separat bak skinnen som en lang lav boks og kunne lages senere. Alt ble hektet sammen på en gardin som er montert på "braketter" slik at jeg kan teste: 

    image.png

     

    Alt ble kjørt med MQTT og devicer i HomeSeer og hadde følgende funksjoner:


    image.png

     

    Learn Devicen hadde følgende to funksjoner (men jeg har ikke funnet ut hvordan jeg får knapper på dem enda):

     

    image.png

     

    På de trykk-knappene kunne en da i "learn turn_start" mode, kjøre stepper motoren + / - til start punkt.
    Når posisjonen var korrekt kvitetrte en med den 3dje knappen.
    Antall stepp til det andre endepunktet kunne like godt hardkodes siden det ikke endret seg.

    I "Learn pull_time" modus kom en føst i en mode for å justere startpunktet (altså + / - på DC motoren som drar gardinene) og så trykket en på den 3dje knappen som kjørte gardinen over mens den målte opp tiden det tok før du kvitterte igjen når den var helt over. Denne tiden ble lagret.

     

    I drift modus var knappene:
    1 Vri høyre
    2 Vri venstre
    3 Toggle åpne / lukke (ikke mulig å la gardinen stå halvåpen da det ikke gir noe mening for meg på panelgardiner)

     

    Fra HS kunne en Åpne og Lukke og anngi vridning i %

     

    Alle statuser ble lagret i Flash memony slik at dersom strømmen gikk kunne det hentes oppigjen når den kom tilbake.
    (Dette vil da IKKE fungere dersom strømmen går akkurat når du kjører men det er akseptebelt (du må da kjøre LEARN på nytt))
     

    Alt fungerte kjempefint bortsett fra EN liten ting:

    59 sekrunder kjøring (skinna er ca 250 cm) av DC motor fra venstre til høyre var IKKE det samme som 59 sekunder andre veien :( :(  :(  
    Det manglet 2-3 sekunder på tilbaketuren hver gang. Skitt!!!

    Det var såpass regelmessig at det var fristende å bare kode inn 3 sekunder ekstra men perfeksjonisten i meg måtte bare innrømme:

    Å bruke TIDEN som parameter holder desverre ikke.
    Og jeg regner med at det å bruke en steppermotor og telle stepps vil gi samme problemet; det ligger i snora og friksjon og sånn. Synd!


    OK Da må jeg inn med endebrytere i begge ender.
    Back to the drawingboard...

    brb

  6. På 11.5.2021 den 6.27, stigvi skrev:

    Tja, når noen lager en hel reiseskildring over mange episoder bare for å oppgradere fra versjon 3 til 4, så kan en jo lure


    Du må ikke la deg skremme av mine langtekkelige prosjekter der jeg diskuterer med meg selv.

    Jeg hadde et råttent system som trengte å starte fra bunn og tanken var og ikke bare dele de tekniske trinnene i prosessen men også hvilke vurderinger og betrakninger som jeg gjorde meg underveis.

    Det finnes andre som har opplevd konverteringen som klikk og kjør:

     

     

  7. På 9.5.2021 den 16.04, Moskus skrev:

    @Fermate var begeistret da han prøvde.

    Var jeg?
    Den supporterer kun Nortek sticken så vidt jeg vet.
    Har en slk og skal teste mer men det ser ikke ut som det haster...

    Det jeg er begeistret for er å bli kvitt JowiHue som jeg mener Poller istedetfor å trigge når noe skjer...

  8. På 9.5.2021 den 15.06, aarpi3 skrev:

    Men hvordan lager en en virtuell device med flere features?

     

    Enable "Bulk edit"
    image.png

     

    Kryss av en Feature du vil kopiere:

     

    image.png

     

    Velg bulk Action "Copy"

    image.png

     

    Rediger kopien til det du ønsker:

     

    image.png

    • Thanks 1
  9. (Først) i dag la jeg på Jon00 sin remote control av PCer, på PCene til meg og kona slik at skjermene blir skrudd av når vi legger oss og når vi drar fra huset.
    (På de PCene som har TV skjermer skrur jeg av TVen)

    Det er ganske mye å lese hver gang og jeg går nesten lei før jeg får det på plass men sånn er den med Jon00 sine ting; de er spekket med funksjonalitet og opsjoner. Og egentlig elsker jeg det.

     

    Jeg har skrudd av HS3 PCen men har den stående og starter den av og til for å hente opp gamle script og se på gamle eventer.

    Jeg ser nå at jeg er inne i en fase der jeg lar ting stå ubrukt helt til jeg har bruk for det. Det betyr at det nok vil være noen ting fra HS3 som aldri kommer til å bli konvertert fordi det var Nice-to-have og morsomt å teste men egentlig ikke praktisk i bruk.

     

    Det kommer nok kun små drypp i denne tråden fra nå.

     

    Det første som slår meg når jeg skal nevne noe om forskjellen mellom HS3 og HS4 er nok at de virtuelle Devicene har ROT og under-devicer. Jeg bruker det en del for å gruppere sammen ting. Sånn som nå med PCene ble de slått sammen slik:

     

    image.png
     

  10. Sorry det er ca 1000 år siden de første spede forsøkene med ELKO Dimmere og termostater jeg gjorde og de har ligget i skuffen siden da.

    Jeg gjorde ETT forsøk på å oppgradere en dimmer som resulterte at den sluttet å fungere og bare var å kaste :(

     

    Ellers synes jeg beskrivelsen til @ohenrik bruker på ELKO virker veldig korrekt..

     

    Husk at ELKO ikke lenge er ELKO men kjøpt av Schneider og at det foregår en intern maktkamp om IOT tingene der ;) 

     

    Dog klarte jeg å råde min sønn til å bruke BARE elko dimmere og termostater da han totalrenoverte og jeg må før eller senere stilles til ansvar for all den HW'en han nå har i veggene. Så OM noen kommer opp men en løsning her så si ifra !

  11. Jeg fikk inn 12V versjonen av den lille stepper moteren i dag og den er IKKE sterk nok til å dra gardinen.

    Jeg har derfor foreløpig gått for DC Motor.

    Da må jeg også ta tiden på den siden jeg ikke kan telle omdreininger så det blir en ekstra morsom utfordring :)

     

    image.png

     

    Fant ut at den tar ENDA litt mindre plass om jeg legger den på siden.

     

    Det å tre snorene er noe pirk så jeg legger en del arbeid i at det skal bli så enkelt og tilgjengelig som mulig etter at greia er skrudd opp på veggen.

    Regner jo med at det må justeres noen ganger....

     

    Har fått igang MQTT på HS. Det var gøy. Må skrive en liten getting startet guide på det etterhvert..

     

    image.png

    • Like 1
×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.