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

deve87

Medlemmer
  • Innlegg

    134
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    6

Innlegg skrevet av deve87

  1. Laget like gjerne en plugin til domoticz ut av det.

     

    Opprett en ny mappen under domoticz-->plugins som heter eks badetassen

    Dermed, lagre innholdet i koden som "plugin.py", og legg filen i mappen

    Restart domoticz

     

    
    """
    
    Altibox badetassen API
    
    Author: deve87, 2023
    
    Version:    1.0: Initial Version
    
    """
    """
    
    <plugin key="Badetassen" name="Altibox badetassen API" author="deve87" version="1.0" wikilink="" externallink="https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location">
        <params>
            <param field="Address" label="API URL" width="400px" required="true" default="https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location"/>
            <param field="Mode1" label="Authorization" width="400px" required="true" default="Bearer 9df43895-3d09-30d5-afe4-db2bf92a86f0"/>
            <param field="Mode2" label="Place 1" width="400px" required="true" default="Osebakkenstranda"/>
            <param field="Mode3" label="Place 2" width="400px" required="false" default=""/>
            <param field="Mode4" label="Place 3" width="400px" required="false" default=""/>
            <param field="Mode5" label="Update every x minutes" width="200px" required="true" default="60"/>
            <param field="Mode6" label="Debug" width="75px">
                <options>
                    <option label="False" value="Normal"  default="False" />
                    <option label="True" value="Debug"/>
                </options>
            </param>
        </params>
    </plugin>
    
    """
    
    import Domoticz
    import requests
    import time
    from datetime import datetime, timedelta
    
    class BasePlugin:
    
        heartbeatsInterval = 10
        heartbeatsCount = 0
    
        def __init__(self):
            self.debug = False
            self.error = False
            self.nextpoll = datetime.now()
            self.pollinterval = 60
            return
    
        def onStart(self):
    
            Domoticz.Debug("onStart called")
            self.pollinterval = int(Parameters["Mode5"])*60
    
            if Parameters["Mode6"] == 'Debug':
                self.debug = True
                Domoticz.Debugging(1)
                DumpConfigToLog()
            else:
                Domoticz.Debugging(0)
    
            if len(Parameters["Mode2"]) > 0:
                if 1 not in Devices:
                    Domoticz.Device(Name=Parameters["Mode2"], Unit=1, TypeName="Temperature", Used=1).Create()
                    Domoticz.Log(Parameters["Mode2"]+" created")
            if len(Parameters["Mode3"]) > 0:
                if 2 not in Devices:
                    Domoticz.Device(Name=Parameters["Mode3"], Unit=2, TypeName="Temperature", Used=1).Create()
                    Domoticz.Log(Parameters["Mode3"]+" created")
            if len(Parameters["Mode4"]) > 0:
                if 3 not in Devices:
                    Domoticz.Device(Name=Parameters["Mode4"], Unit=3, TypeName="Temperature", Used=1).Create()
                    Domoticz.Log(Parameters["Mode4"]+" created")
    
            self.checkAPI()
    
            Domoticz.Heartbeat(self.heartbeatsInterval)
    
        def onStop(self):
            Domoticz.Log("Plugin is stopping.")
            Domoticz.Debugging(0)
    
        def onHeartbeat(self):
            Domoticz.Debug("onHeartbeat called")
            self.heartbeatsCount = self.heartbeatsCount + 1
            if self.pollinterval <= self.heartbeatsInterval * self.heartbeatsCount:
                self.heartbeatsCount = 0
                self.checkAPI()
    
        def checkAPI(self):
    
            try:
              url = Parameters["Address"]
              headers = {
                  'accept': 'application/json',
                  'content-type': 'application/json',
                  'Authorization': Parameters["Mode1"]
              }
    
              response = requests.get(url, headers=headers)
              jsondata = response.json()
              lenght = len(jsondata)
              for i in range(lenght):
                  if Parameters["Mode2"] in jsondata[i]["Name"]:
                      temp = jsondata[i]["lastTemperature"]
                      if 1 in Devices:
                          Devices[1].Update(nValue=1, sValue=temp)
                  if Parameters["Mode3"] in jsondata[i]["Name"]:
                      temp = jsondata[i]["lastTemperature"]
                      if 2 in Devices:
                          Devices[2].Update(nValue=1, sValue=temp)
                  if Parameters["Mode4"] in jsondata[i]["Name"]:
                      temp = jsondata[i]["lastTemperature"]
                      if 3 in Devices:
                          Devices[3].Update(nValue=1, sValue=temp)
    
            except Exception as e:
              Domoticz.Log("Error message: "+str(e))
    
    global _plugin
    _plugin = BasePlugin()
    
    def onStart():
        global _plugin
        _plugin.onStart()
    
    def onStop():
        global _plugin
        _plugin.onStop()
    
    def onHeartbeat():
        global _plugin
        _plugin.onHeartbeat()
    
    
    # Generic helper functions
    def DumpConfigToLog():
        for x in Parameters:
            if Parameters[x] != "":
                Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
        Domoticz.Debug("Device count: " + str(len(Devices)))
        for x in Devices:
            Domoticz.Debug("Device:           " + str(x) + " - " + str(Devices[x]))
            Domoticz.Debug("Device ID:       '" + str(Devices[x].ID) + "'")
            Domoticz.Debug("Device Name:     '" + Devices[x].Name + "'")
            Domoticz.Debug("Device nValue:    " + str(Devices[x].nValue))
            Domoticz.Debug("Device sValue:   '" + Devices[x].sValue + "'")
        return

     

    Kun "Name" under "Product URL" linken vil fungere her. 

    domo1.png.90b27da6bd280ab8d61f47d0757b27b2.png

     

    domo2.thumb.png.78110ce5250d32d8f3807381feae9618.png

    • Thanks 1
  2. Hei.

     

    Her har du en kode i python som gjør samme greiene.

    Du må opprette et dummypunkt i Domoticz, finne idx for dette punktet og endre det i linken under "idx= "

     

    Scriptet kan ikke kjøres direkte i Domoticz, men i bakgrunnen.

     

    Lag en ny fil og lim inn innholdet:

    eks Badetemperatur.py

     

    Kjøres slik i terminalen på RPI: python3 Badetemperatur.py &

    import requests
    import time
    
    #Endre stedsnavnet her
    Stedsnavn = "Osebakkenstranda"
    
    def api_data():
    
            url = "https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location"
    
            headers = {
                'accept': 'application/json',
                'content-type': 'application/json',
                'Authorization': 'Bearer 9df43895-3d09-30d5-afe4-db2bf92a86f0'
            }
    
            try:
                    response = requests.get(url, headers=headers)
                    jsondata = response.json()
                    lenght = len(jsondata)
    
                    for i in range(lenght):
                            if Stedsnavn in jsondata[i]["Name"]:
                                    temp = jsondata[i]["lastTemperature"]
                                    print("Badetemperaturen for "+Stedsnavn+": "+temp+"°C")
                                    #Endre idx=  med IDX for punktet
                                    requests.post("http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=565&nvalue=0&svalue="+temp)
    
            except Exception as e:
                    print("Feilmelding: "+str(e))
    
    while True:
            api_data()
            #Polling er satt til 1 time
            time.sleep(3600)

     

     

    Kjører du domoticz på en RPI, kan du få scriptet til å starte automatisk slik:

    sudo nano /etc/rc.local

    Legg linjen under i rc.local mellom fi og exit0 (endre stien hvis filen ikke er plassert i /home/pi mappen)

    fi
    (sleep 5;python3 /home/pi/Badetemperatur.py) &
    exit 0

    Restart etterpå.

     

     

    • Thanks 1
  3. Saggis skrev (På 16.10.2021 den 19.31):

     


    Jeg har satt opp huset vårt med MRF og bruk av CKOZ-00/13. Kan jeg bruke CKOZ-00/13 mot home assistant, eller må jeg ha en CKOZ-00/14?

    Må ha CKOZ-00/14. 

     

    CKOZ-00/13 er kun for programmering.

    CKOZ-00/14 må søkes opp å linkes sammen med andre enheter med CKOZ-00/13 I MRF

  4. Ingen? 😥

     

    Raw data fra måler er:

     

    Got 136 bytes:
    7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E5 09 06 01 13 2F 28 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 32 39 35 34 32 39 35 39 33 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 32 31 42 4E 32 34 33 31 30 31 30 34 30 09 06 01 01 01 07 E0 06 00 E0 4B 7F FF 06 FE FF C7 09 86 F9 FF 12 C0 2F C8 50 50 B0 90 12 00 FC A9 17 7E


    Got 135 bytes:
    7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E5 09 06 01 13 2F 32 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 32 39 35 34 32 39 35 39 33 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 32 31 42 4E 32 34 33 31 30 31 30 34 30 09 06 01 01 01 07 E0 06 00 E0 4B 7F DF 06 FE C7 09 86 F9 FF 12 C0 2F C8 50 50 B0 90 12 00 FC 53 87 7E
     

  5. Hei.

     

    Har en BEG KNX IP-interface som jeg skulle skiftet IP adresse på. Den har nå i dag 192.168.10.200 og skal få 192.168.23.200

    Det er 2 timer unna, så på stedet står det en Windows XP maskin som jeg fikk installert ETS 4.0.6 på. Men var ikke veldig selvforklarende hva de neste stegende er 😄

     

     

    ets4.png

    IMG_20210303_122007681.jpg

  6. Hei.

     

    Er ganske ferskt på dette området, men har klart å satt opp en NGINX reversert proxy som igjen viderekobler trafikken til en maskin.

     

    eksempeldomene.no -> nginx -> 192.168.10.204 (SSL) OK

     

    Hos domene selskapet jeg kjøpte eksempeldomene.no har jeg satt opp 2x A-record.

     

    eksempeldomene mot offentlig IP

    test.eksempeldomene.no mot offentlig IP

     

    I .conf filen for server i nginx har jeg lagt opp slik at test.eksempeldomene.no skal viderekobles til en annen server enn hva eksempeldomene.no gjør.

     

    Men begge kommer til den første serveren jeg har i oppsettet.

     

    Prøvd forskjellige oppsett jeg har funnet på nettet. Så begynner å lure på om jeg ikke helt forstår oppsettet i sonefilen for domenet jeg har kjøpt eller hva 😭

  7. Hei.

     

    Trudde det skulle være enkelt å få Windows 10 til å starte et python skript ved oppstart. Men nå har jeg prøvd alle mulige valgt i Schedule, mens  ingen ting skjer. Det står bare "Ready". Trykker jeg på "Run" knappen i Schedule. Funker det fint.

     

    Har også prøvd å laget en .bat fil som skal starte skriptet med samme resultat. Kjører fint når jeg manuelt kjører den, men kjører ikke ved oppstart.

     

    Prøvd å lagt den til regedit under run mappene (både alle og en og en). Slik at det dukker opp i "Startup i Task Manager"

     

    Lagt det til i shell:startup

     

    Ingen av disse gjør noe som helst 😭

  8. Fjernstyring av min eldre Carrier varmepumpe.. 

    ESP8266 + IR + DS18B20 (DS18B20 for å måle utblåsningstemp)

     

    Var heldig å fant 5VDC i kretskortet for innedelen. ESP8266 fikk også fint plass i den originale boksen 😉

    Satte inn en Fibaro plugg for å kunne måle strømtrekken i tillegg.

     

    https://www.domoticz.com/wiki/ESPEasy_Aircondition_Inverter_IR_control

     

    IMG_20200822_172337179.jpg

    IMG_20200822_172612846.jpg

    IMG_20200822_173929234.jpg

    IMG_20200627_105559396.jpg

    Uten navn.jpg

    • Like 2
  9. Takk for svar.

     

    Har installert NGINX på en Raspberry PI. Og ting ser ut til å fungere fint.

     

    Går en inn på domenenavn.no nå. Kommer man til server med gyldig SSL sertifikat fra lets encrypt.

     

    Men søtet på et lite problem. For brukergrensesnittet kommer med to versjoner. En ny versjon kjørende med HTML 5 og en eldre kjørende på noe java greier med eget program. Begge benytter port 443.

     

    Nå får ikke det eldre java programmet kontakt med server. Men det rare er at det gjør det etter noe restarter av NGINX. 🤨

     

    Deretter, kan jeg restarte Raspberry PI. Og java programmet mister kontakten igjen. Men web brukergrensesnittet fungerer fint..

     

    Noen idé?

     

     

    NGINX domene konfig

     

    server {
        listen      80;
        server_name pascalportal.no;
        rewrite     ^   https://$server_name$request_uri? permanent;
    }
    
    server {
    
        listen 443 ssl;
        server_name pascalportal.no;
    
        ssl_certificate /etc/letsencrypt/live/pascalportal.no/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/pascalportal.no/privkey.pem;
    
        ssl on;
        ssl_session_cache  builtin:1000  shared:SSL:10m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_prefer_server_ciphers on;
    
        access_log            /var/log/nginx/jenkins.access.log;
    
          location / {
          proxy_set_header        Host $host;
          proxy_set_header        X-Real-IP $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;
    
          # Fix the “It appears that your reverse proxy set up is broken" error.
          proxy_pass          https://192.168.10.204;
          proxy_read_timeout  90;
    
        }
          location /.well-known/acme-challenge {
          root /var/www/letsencrypt;
    }
      }
    

    Edit: Hvis det eldre java programmet prøver å koble seg til en IP som er offline. Får jeg etter noen sekunder en timeout beskjed. Men det skjer ikke når jeg prøver å koble meg til med domene.no navn eller direkte IP. Den kommer selvfølgelig bare aldri inn.

  10. 2 timer siden, ZoRaC skrev:

    Domenekontroller er noe helt annet. :) 

     

    Det er bare å gå inn på kontrollpanelet til der dere har kjøpt .no-domenet og legge inn ip-adressen deres med A-rekord mot domenet. Kan gjøre det samme med nr2.domene.no, men du må ha en reverse proxy på port 443 (eller kjøre den på port 80 og selve serveren på port 443) som sender trafikken til riktig server basert på domenet trafikken ber om (evt fange opp /nr2 på hoveddomenet). 

     

     

    Okay. Takk. Skal se hva jeg får til her 😄

  11. Vi har et brukergrensesnitt på en lokal server som vi deler port 443 mot offentlig nettverk. Denne IP adressen skal nå knyttes til et .no domene vi har kjøpt.

    Med tiden, kommer det flere servere. Da håpet vi på en løsning som gjorde at domene kan linkes til de forskjellige serverens brukergrensesnitt. Dette må vel skje lokalt?

     

    Jeg er ikke veldig inn i dette her, så kan prøve å gi et eksempel:

     

    Skal man i dag nå UI på server nr1. Taster man inn www.domenenavn.no

    Men når server nr2 kommer. Håpet vi på en løsning på noe som ligner det her domenenavn.no/nr2   eller  nr2.domenenavn.no    Da må server nr1 også bli lik.

     

    Si at en har en linux server på stedet. Taster man inn domenenavn.no/nr1 viderekobler denne serveren trafikken til UI på server nr1..

     

    Her er jeg altså helt blank 😆 

     

    Edit: Fant ut at en må lage en reversert proxy server.

  12. Benytter Zigate USB mot Domoticz for Zigbee.

    Etter en firmware oppdatering på Zigate USB. Klarte jeg ved en feil å velge 'erase eeprom'

    Som gjorde at jeg måtte inkludere alle Zigbee enheter på nytt.

     

    Alle andre enheter som Elko dimmer/termostater, Philips HUE enheter, Ikea ting og andre Xiaomi Aqara enheter lot seg enkelt inkludere mot Zigate på nytt.

     

    Bortsett fra Aqara batteribryteren.. Det står at den skal holdes inne i 10sekunder, deretter skal den gå i inkludering. Det gjør den ikke.

    Det står at den skal kvittere med 3 blink fra LED, men den blinker 5 ganger.

     

    Ingenting blir mottatt i Zigate logg.

    Benytter kanal 11 som ved første gang jeg i inkluderte den.

  13. Etter litt tid, ble det ferdige oppsettet litt andelenes.

    Var egentlig lurest å hente data utifra tiden for hver array fra json.

    Ved neste time, plusses bare 1 time på den eksisterende timen osv..

    def weather_data():
            #værdata denne timen starter her
            Yr(location_name='Norway/Telemark/Skien/Skien', forecast_link='forecast_hour_by_hour')
            for forecast in weather.forecast(hex):
                    tn = time.strftime("%d""T""%H")
                    jsondata = json.loads(forecast)
                    data = jsondata["@from"]
                    regn = jsondata["precipitation"]["@value"]
                    trykk = jsondata["pressure"]["@value"]
                    temp = jsondata["temperature"]["@value"]
                    if tn in data:
                            print("Temp nå: " + temp,"°C")
                            print("Trykk nå: " + trykk,"hpa")
                            print("Regn nå: " + regn,"mm")
                            print('\n')
                            
                            return
    weather_data()

     

    • Like 3
  14. Ved å se nærmere på libyr.py Så det ut som at data ble generert ved brukt av "yield"

     

    Så ved å ha med    ' '.join(forecast)  var det mulig å benytte slice for stringen eks [45:-5500] før [pressure], [@value] blir hentet. Slik at en derifra kan hente riktig rad utifra den og den timen.

×
×
  • 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.