Best Python code snippet using SeleniumBase
22 Wilcoxon signed rank toets II R.py
Source:22 Wilcoxon signed rank toets II R.py
1#!/usr/bin/env python2# coding: utf-83---4title: "Wilcoxon signed rank toets"5output:6 html_document:7 theme: lumen8 toc: yes9 toc_depth: 210 toc_float: 11 collapsed: FALSE 12 number_sections: true13 includes:14 in_header: ["../01. Includes/html/nocache.html", "../01. Includes/html/favicon.html", "../01. Includes/html/analytics.html"]15 keywords: [statistisch handboek, studiedata]16---17# <!-- ## CLOSEDBLOK: Functies.R -->18# In[1]:19library(here)20if (!exists("Substitute_var")) {21 ## Installeer packages en functies22 source(paste0(here::here(), "/99. Functies en Libraries/00. Voorbereidingen.R"), echo = FALSE)23}24# <!-- ## /CLOSEDBLOK: Functies.R -->25# 26# <!-- ## CLOSEDBLOK: CSS -->27# <style>28# `r htmltools::includeHTML(paste0(here::here(),"/01. Includes/css/Stylesheet_SHHO.css"))`29# </style>30# <!-- ## /CLOSEDBLOK: CSS -->31# 32# <!-- ## CLOSEDBLOK: Header.R -->33# In[ ]:34# <!-- ## /CLOSEDBLOK: Header.R -->35# 36# <!-- ## CLOSEDBLOK: Status.R -->37# In[ ]:38# <!-- ## /CLOSEDBLOK: Status.R -->39# 40# <!-- ## CLOSEDBLOK: Reticulate.R -->41# 42# <!-- ## /CLOSEDBLOK: Reticulate.R -->43# 44# <!-- ## OPENBLOK: Data-aanmaken.R -->45# In[ ]:46source(paste0(here::here(),"/01. Includes/data/22.R"))47# <!-- ## /OPENBLOK: Data-aanmaken.R -->48# 49# # Toepassing50# Gebruik de *Wilcoxon signed rank toets* om te toetsen of twee gepaarde groepen van elkaar verschillen op een ordinale[^10] variabele. Als de variabele beter als nominaal[^11] beschouwd kan worden, is de *McNemar toets* een alternatief. Bij de *McNemar toets* wordt echter geen rekening gehouden met de ordening van de categorieën van de ordinale variabele: de variabele wordt behandeld als een nominale variabele.51# 52# # Onderwijscasus53# <div id ="casus">54# De hoofddocent van het vak âSpeech schrijvenâ van de bachelor Politicologie is benieuwd naar de effectiviteit van zijn eigen vak. Daarom laat hij studenten bij de eerste bijeenkomst van het vak een speech schrijven die zij beoordeelt als onvoldoende, voldoende, goed of uitstekend. Gedurende het vak leren studenten het schrijven van speeches vanuit verschillende perspectieven. Aan het einde van het vak schrijven studenten wederom een speech die op dezelfde wijze door de hoofddocent beoordeeld wordt. Op deze manier kan hij onderzoeken of zijn lessen ervoor zorgen dat studenten beter worden in het schrijven van speeches.55# 56# Dit onderzoek vertaalt zich in de volgende combinatie van hypothesen, waarbij de nulhypothese zo geformuleerd is dat er geen effect of verschil is en de alternatieve hypothese zo geformuleerd is dat er wel een effect of verschil is.57# 58# *H~0~*: Er is geen verschil tussen de (som van rangschikkingen van de) beoordelingen van de speeches geschreven door studenten aan het begin en aan het eind van het vak.59# 60# *H~A~*: Er is een verschil tussen de (som van rangschikkingen van de) beoordelingen van de speeches geschreven door studenten aan het begin en aan het eind van het vak. De beoordelingen zijn hoger voor een van de twee meetmomenten.61# 62# </div>63# 64# # Assumpties65# 66# Het meetniveau van de afhankelijke variabele is ordinaal[^10] of continu.[^1] In deze toetspagina staat een casus met ordinale data centraal; een casus met continue data met bijbehorende uitwerking zijn te vinden in [de Wilcoxon signed rank toets I](07-Wilcoxon-signed-rank-toets-I-R.html).67# 68# Om de *Wilcoxon signed rank toets* uit te voeren met een ordinale afhankelijke variabele, moet deze variabele omgezet worden in getallen. Wanneer er vier categorieën zijn, worden ze genummerd van 1 tot en met 4 op basis van de ordening van de variabele. De categorieën onvoldoende, voldoende, goed en uitstekend worden dan omgezet in respectievelijk 1, 2, 3 en 4. Met behulp van deze getallen worden verschilscores berekend per deelnemer[^19]. Een persoon die van voldoende naar uitstekend gaat, krijgt als verschilscore 2. Hierbij wordt impliciet aangenomen dat de afstand tussen alle categorieën even groot is. In andere woorden, het verschil tussen onvoldoende en voldoende is even groot als het verschil tussen voldoende en goed en tussen goed en uitstekend. Bij de [Bhapkar toets](18-Bhapkar-toets-R.html) wordt deze aanname niet gedaan, maar wordt de ordinale variabele als nominaal[^11] beschouwd. De *Wilcoxon signed rank toets* maakt een rangschikking van de absolute waarden van de verschilscores en telt vervolgens de rangschikkingen op voor de positieve en negatieve verschilscores. Het verschil tussen de som van de positieve en negatieve rangschikkingen bepaalt de significantie van de toets. 69# 70# # Effectmaat71# 72# De p-waarde geeft aan of een (mogelijk) verschil tussen twee groepen significant is. De grootte van het verschil of effect is echter ook relevant. Een effectmaat is een gestandaardiseerde maat die de grootte van een effect weergeeft, zodat effecten van verschillende onderzoeken met elkaar vergeleken kunnen worden.[^6] 73# 74# De *Wilcoxon signed rank toets* heeft als effectmaat *r*. Een indicatie om *r* te interpreteren is: rond 0,1 is het een klein effect, rond 0,3 is het een gemiddeld effect en rond 0,5 is het een groot effect.[^8] De effectmaat *r* wordt voor de *Wilcoxon signed rank toets* berekend door de *z*-waarde behorend bij de p-waarde van de toets te delen door de wortel van het aantal deelnemers, i.e. $\frac{z}{\sqrt{N}}$.[^8] Een correlatie tussen twee variabelen wordt vaak ook aangeduid met het symbool *r*. Beide zijn effectmaten, maar er is verder geen verband tussen de correlatie en de effectmaat van de *Wilcoxon signed rank toets*.75# 76# # Uitvoering77# 78# ## De data bekijken79# <!-- ## TEKSTBLOK: Data-bekijken.R -->80# Er is data ingeladen met de beoordeling van studenten van het vak 'Speech schrijven' aan het begin en eind van het vak. Gebruik `head()` en `tail()` om de structuur van de data te bekijken.81# <!-- ## /TEKSTBLOK: Data-bekijken.R -->82# 83# <!-- ## OPENBLOK: Data-bekijken.R -->84# In[ ]:85## Eerste 6 observaties86head(Beoordelingen_speech_schrijven)87## Laatste 6 observaties88tail(Beoordelingen_speech_schrijven)89# <!-- ## /OPENBLOK: Data-bekijken.R -->90# 91# <!-- ## TEKSTBLOK: Data-kruistabel1.R -->92# Een kruistabel geeft de aantallen observaties weer voor de combinaties van de categorieën van de variabelen `Meetmoment` en `Beoordeling`. In feite laat dit zien welke beoordelingen studenten krijgen aan het begin en eind van de cursus. Maak de kruistabel met de functie `table()` met als argumenten de variabele `Beoordelingen_speech_schrijven$Meetmoment`, die weergeeft of de speech aan het begin of eind van de cursus is geschreven en de variabele `Beoordelingen_speech_schrijven$Beoordeling` die de beoordeling weergeeft.93# <!-- ## /TEKSTBLOK: Data-kruistabel1.R -->94# 95# <!-- ## OPENBLOK: Data-kruistabel2.R -->96# In[ ]:97## Maak een kruistabel98Beoordelingen_kruistabel <- table(Beoordelingen_speech_schrijven$Meetmoment, Beoordelingen_speech_schrijven$Beoordeling)99## Bepaal de volgorde van de beoordelingen100Volgorde <- c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")101## Print de kruistabel 102print(Beoordelingen_kruistabel[,Volgorde])103## Print een tabel met proporties; het tweede argument `1` zorgt ervoor dat de 104## proporties per kolom berekend worden105prop.table(Beoordelingen_kruistabel[,Volgorde], 1)106# <!-- ## /OPENBLOK: Data-kruistabel2.R -->107# 108# De kruistabel laat zien dat er aan het eind van het vak meer speeches als goed en uitstekend worden beoordeeld en minder speeches als onvoldoende of voldoende. Dit is ook te zien in de kruistabel met proporties.109# 110# Naast de kruistabel, is de confusiematrix ook relevant om te bekijken. Bij een confusiematrix worden de beoordelingen van studenten aan het begin en eind van de cursus tegen elkaar uitgezet. Sla daarom de variabele `Beoordeling` apart op in twee vectoren: een voor het begin van het vak en een voor het eind. Maak daarna de confusiematrix.111# 112# <!-- ## OPENBLOK: Data-beschrijven.R -->113# In[ ]:114## Definieer de groepen115Begin <- Beoordelingen_speech_schrijven$Beoordeling[Beoordelingen_speech_schrijven$Meetmoment == "Begin"]116Eind <- Beoordelingen_speech_schrijven$Beoordeling[Beoordelingen_speech_schrijven$Meetmoment == "Eind"]117## Bepaal de volgorde van de beoordelingen118Volgorde <- c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")119## Maak een confusiematrix120Beoordelingen_confusiematrix <- table(Begin, Eind)121## Print de confusiematrix 122print(Beoordelingen_confusiematrix[Volgorde, Volgorde])123# <!-- ## /OPENBLOK: Data-beschrijven.R -->124# 125# De confusiematrix geeft informatie over de verschillen tussen de beoordelingen aan het begin en eind van het vak. Er zijn bijvoorbeeld 16 studenten die aan het begin goed als beoordeling ontvingen en aan het eind de beoordeling uitstekend.126# ## De data visualiseren127# 128# Maak een staafdiagram om de verdeling van de beoordelingen aan het begin en eind van het vak visueel weer te geven.129# 130# <!-- ## OPENBLOK: Histogram1.R -->131# In[ ]:132## Histogram met ggplot2133library(ggplot2)134ggplot(Beoordelingen_speech_schrijven,135 aes(Beoordeling)) +136 geom_bar(color = "grey30",137 fill = "#0089CF") +138 scale_x_discrete(limits = c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")) +139 facet_wrap(~ Meetmoment, labeller = labeller(Meetmoment = c(Begin = "Begin van het vak", Eind = "Eind van het vak"))) +140 ylab("Frequentie") +141 labs(title = "Beoordeling van het speech schrijven aan het begin en eind van het vak")142# <!-- ## /OPENBLOK: Histogram1.R -->143# 144# Aan het eind van het vak zijn er meer speeches als goed en uitstekend beoordeeld in vergelijking tot het begin van het vak. Daarnaast zijn er minder speeches als onvoldoende en voldoende beoordeeld.145# ## Wilcoxon signed rank toets146# <!-- ## TEKSTBLOK: Wilcoxon-signed-rank-toets.R -->147# Voer de *Wilcoxon signed rank toets* uit om de vraag te beantwoorden of de beoordelingen van het schrijven van speeches bij het vak 'Speech schrijven' verschillen tussen het begin en eind van het vak. Zet eerst de categorische variabele `Beoordeling` om in een numerieke variabele door de categorieën onvoldoende, voldoende, goed en uitstekend om te zetten in respectievelijk 1, 2, 3 en 4. Gebruik daarna de functie `wilcox.test()` met als eerste argument `Beoordeling ~ Meetmoment` waarin `Beoordeling` de afhankelijke variabele is en `Meetmoment` de onafhankelijke variabele is die twee meetmomenten aangeeft. Gebruik het argument `paired = TRUE` om aan te geven dat de twee meetmomenten aan elkaar gepaard zijn. Toets tweezijdig door het argument `alternative = "two.sided"` te gebruiken.148# <!-- ## /TEKSTBLOK: Wilcoxon-signed-rank-toets.R -->149# 150# <!-- ## OPENBLOK: Wilcoxon-signed-rank-toets.R -->151# In[ ]:152# Zet de categorieën om in getallen153Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Onvoldoende"] <- 1154Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Voldoende"] <- 2155Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Goed"] <- 3156Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Uitstekend"] <- 4157# Maak de variabele numeriek158Beoordelingen_speech_schrijven$Beoordeling_numeriek <- as.numeric(Beoordelingen_speech_schrijven$Beoordeling_numeriek)159# Voer de wilcoxon signed rank toets uit160wilcox.test(Beoordeling_numeriek ~ Meetmoment, Beoordelingen_speech_schrijven, 161 paired = TRUE, alternative = "two.sided")162# <!-- ## /OPENBLOK: Wilcoxon-signed-rank-toets.R -->163# 164# <!-- ## OPENBLOK: Wilcoxon-signed-rank-toets2.R -->165# Bereken de effectmaat *r* vervolgens op basis van de p-waarde van de *Wilcoxon signed rank toets*.166# In[ ]:167# Sla de p-waarde op168pwaarde <- wilcox.test(Beoordeling_numeriek ~ Meetmoment, Beoordelingen_speech_schrijven, 169 paired = TRUE, alternative = "two.sided")$p.value170# Bereken de effectgrootte voor een tweezijdige toets171r <- abs(qnorm(pwaarde/2)) / sqrt(length(Beoordelingen_speech_schrijven))172# Bereken de effectgrootte voor een eenzijdige toets173#r <- abs(qnorm(pwaarde)) / sqrt(length(Beoordelingen_speech_schrijven))174# Print de effectgrootte175paste("De effectmaat is", r)176# <!-- ## /OPENBLOK: Wilcoxon-signed-rank-toets2.R -->177# 178# Bereken de aantallen en de sommen van positieve en negatieve rangschikkingen op basis van de verschilscores.179# 180# <!-- ## OPENBLOK: Wilcoxon-signed-rank-toets3.R -->181# In[ ]:182# Bereken de verschilscores183Verschilscores <- Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Meetmoment == "Eind"] - Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Meetmoment == "Begin"]184# Rangschik de absolute waarden van de verschilscores185Rangschikkingen <- rank(abs(Verschilscores))186# Maak een vector met daarin de tekens (plus of min) van de verschilscores)187Tekens <- sign(Verschilscores)188# Bereken het aantal en de som van de positieve rangschikkingen189N_positief <- length(Tekens[Tekens == 1])190Som_positief <- sum(Rangschikkingen[Tekens == 1])191# Bereken het aantal en de som van de negatieve rangschikkingen192N_negatief <- length(Tekens[Tekens == -1])193Som_negatief <- sum(Rangschikkingen[Tekens == -1])194# Print de resultaten195N_positief196Som_positief197N_negatief198Som_negatief199# <!-- ## /OPENBLOK: Wilcoxon-signed-rank-toets3.R -->200# <!-- ## CLOSEDBLOK: Wilcoxon-signed-rank-toets.R -->201# In[ ]:202wilcox <- wilcox.test(Beoordeling_numeriek ~ Meetmoment, Beoordelingen_speech_schrijven, 203 paired = TRUE, alternative = "two.sided")204vVstatistic <- Round_and_format(wilcox$statistic)205# <!-- ## /CLOSEDBLOK: Wilcoxon-signed-rank-toets.R -->206# 207# <!-- ## TEKSTBLOK: Wilcoxon-signed-rank-toets4.R -->208# * *V* = `r vVstatistic`, *p* < 0,0001 , *r* = `r Round_and_format(r)`209# * p-waarde < 0,05, dus de H~0~ wordt verworpen[^9]210# * Het aantal positieve rangschikkingen is `r N_positief`; de som is `r format(round(Som_positief), scientific = FALSE)`211# * Het aantal negatieve rangschikkingen is `r N_negatief`; de som is `r round(Som_negatief)`212# * De som van de positieve rangschikkingen is hoger dan de som van de negatieve rangschikkingen. Er zijn dus hogere beoordelingen aan het eind van het vak in vergelijking tot het begin van het vak.213# * Effectmaat is `r Round_and_format(r)`, dus een groot effect214# <!-- ## /TEKSTBLOK: Wilcoxon-signed-rank-toets4.R -->215# 216# # Rapportage217# <!-- ## TEKSTBLOK: Rapportage.R -->218# De *Wilcoxon signed rank toets* is uitgevoerd om de vraag te beantwoorden of er verschil is tussen de beoordelingen van het schrijven van speeches aan het begin en eind van het vak 'Speech schrijven'. De resultaten van de toets laten zien dat er een significant verschil is tussen het de beoordelingen aan het begin en eind van het vak, *V* = `r vVstatistic`, *p* < 0,0001, *r* = `r Round_and_format(r)`. Er zijn `r N_positief` studenten met een hogere beoordeling aan het eind van het vak (som van rangschikkingen is `r format(round(Som_positief), scientific = FALSE)`) en er zijn `r N_negatief` studenten met een lagere beoordeling aan het eind van het vak. Studenten lijken dus beter speeches te schrijven aan het eind vak het vak.219# <!-- ## /TEKSTBLOK: Rapportage.R -->220# 221# <!-- ## CLOSEDBLOK: Footer.R -->222# In[ ]:223# <!-- ## /CLOSEDBLOK: Footer.R -->224# 225# [^1]: Laerd Statistics (2018). *Wilcoxon Signed-Rank Test using SPSS Statistics*. https://statistics.laerd.com/spss-tutorials/wilcoxon-signed-rank-test-using-spss-statistics.php226# [^6]: Field, A., Miles, J., & Field, Z. (2012). *Discovering statistics using R*. London: Sage publications.227# [^8]: Allen, P. & Bennett, K. (2012). *SPSS A practical Guide version 20.0*. Cengage Learning Australia Pty Limited.228# [^9]: In dit voorbeeld wordt uitgegaan van een waarschijnlijkheid van 95% c.q. een p-waardegrens van 0,05. De grens is naar eigen inzicht aan te passen; houd hierbij rekening met type I en type II fouten.229# [^10]: Een ordinale variabele is een categorische variabele waarbij de categorieën geordend kunnen worden. Een voorbeeld is de variabele beoordeling met de categorieën Onvoldoende, Voldoende, Goed en Uitstekend.230# [^11]: Een nominale variabele is een categorische variabele waarbij de categorieën niet geordend kunnen worden. Een voorbeeld is de variabele windstreek (noord, oost, zuid, west) en geslacht (man of vrouw).231# [^19]: Met een deelnemer wordt het object bedoeld dat geobserveerd wordt, bijvoorbeeld een student, een inwoner van Nederland, een opleiding of een organisatie. Met een observatie wordt de waarde bedoeld die de deelnemer heeft voor een bepaalde variabele. Een deelnemer heeft dus meestal een observatie voor meerdere variabelen....
Trann-power-only-v2.py
Source:Trann-power-only-v2.py
1# Trannergy inverter webscraper2#3from requests.auth import HTTPBasicAuth4import requests5import re6from selenium import webdriver7from selenium.webdriver.chrome.options import Options8from selenium.common.exceptions import TimeoutException9from selenium.webdriver.support.ui import WebDriverWait10from selenium.webdriver.support import expected_conditions as EC11from selenium.webdriver.common.by import By12import time13import datetime14import sys15import warnings16import platform # For getting the operating system name17import subprocess # For executing a shell command18import json19from urllib.request import urlopen20import time21import datetime22from datetime import timedelta23from time import sleep24sun_url = "http://192.168.1.70:8888/json.htm?type=command¶m=getSunRiseSet" # Domoticz server25baseURL = 'http://192.168.1.70:8888/json.htm?type=command¶m=udevice&nvalue=0'26TrannLoginAdress = 'http://admin:admin@192.168.1.76' # Trannergyinverter fixed local IP adress BC-54-F9-F3-E2-B527TrannIPAdress = '192.168.1.76' 28INTERVAL = 120 # default tijd tussen akties in sec29LOGFILE = '/ubuntu/Trann-scraper.log'30ENERGYFILE = '/ubuntu/Trann-energy.log'31def suntimes():32 json_url= urlopen(sun_url)33 data = json.loads(json_url.read())34 hour = float(data["Sunset"][0:2])35 minute = float(data["Sunset"][3:5])36 dark = round(hour + minute /60 + 1, 2)37 #print(dark)38 hour = float(data["Sunrise"][0:2])39 minute = float(data["Sunrise"][3:5])40 light = round(hour + minute /60 - 0.4, 2)41 #print(light)42 return(light, dark)43def Ping(host):44 45 # Building the command. Ex: "ping -c 1 google.com"46 command = ['ping', '-c', '1', host]47 return subprocess.run(args=command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 048def LogSchrijven(loginfo):49 f = open(LOGFILE, 'a')50 f.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + ": " + str(loginfo) + "\n")51 f.close()52def EnergyLog(loginfo):53 text = str(loginfo)54 text = text.replace(".", ",")[:-4] # replace . with , and remove the " kWh" at the end55 f = open(ENERGYFILE, 'a')56 f.write(text + datetime.datetime.now().strftime(" %Y-%m-%d") + "\n")57 f.close()58def Domoticz_update(power):59 url = baseURL + "&idx=%s&svalue=%s" % ("13", power) # use correct IDX; energy calculated by domoticz60 #LogSchrijven('P: %s' % power)61 try:62 r = requests.get(url)63 except requests.ConnectionError:64 pass # ignore the exception and hope next time connection is there again65 LogSchrijven('Connection error to Domoticz')66def main():67 LogSchrijven('==== starting =============')68 options = Options()69 options.add_argument('--no-sandbox')70 options.add_argument('--headless')71 options.add_argument('--disable-dev-shm-usage')72 light, dark = suntimes()73 driver_init = False74 try:75 while True:76 hour = round(datetime.datetime.now().hour + datetime.datetime.now().minute/60, 2) # calculate hour in decimal77 wait_next_day = False78 if hour >= light and hour <= dark: # daylight79 wait = INTERVAL80 if not driver_init: # first time today81 light, dark = suntimes()82 LogSchrijven('Licht: Login and init driver van %0.1f' %light + ' tot %0.1f' %dark)83 if Ping(TrannIPAdress): # check of omvormer bereikbaar84 Trann_running = True85 LogSchrijven('Omvormer: Normal mode')86 elif hour > (dark -2): # omvormer niet bereikbaar en namiddag87 Trann_running = False88 wait_next_day = True89 LogSchrijven('Omvormer: niet bereikbaar; Namiddag dus wacht tot morgen')90 else: # omvormer niet bereikbaar en ochtend91 LogSchrijven('Omvormer: niet bereikbaar; Wacht op Normal mode')92 while not Ping(TrannIPAdress): # wacht tot bereikbaar93 sleep(INTERVAL)94 sleep(300) # extra opstarttijd95 Trann_running = True96 LogSchrijven('Omvormer: Normal Mode')97 if Trann_running:98 driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver',options=options)99 driver.get(TrannLoginAdress)100 driver_init = True101 LogSchrijven('Login succesvol en laden pagina gelukt') 102 else:103 driver.refresh()104 sleep(20) # wellicht niet nodig?105 if driver_init:106 try: 107 s = WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "child_page")))108 #LogSchrijven('child_page loaded')109 except:110 LogSchrijven('Unable to load child_page')111 driver_init = False112 try:113 driver.close() # close driver114 driver.quit()115 except:116 pass117 if driver_init: 118 try:119 s = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "webdata_now_p")))120 except:121 LogSchrijven("'Webdata_now_p missed")122 pass123 try: # convert to integer124 #LogSchrijven('Trannergy power : %s' % s.get_attribute("innerHTML"))125 powerstr = re.sub(' W', '', s.get_attribute("innerHTML")) # remove " W"126 127 if powerstr == "---": # return power is zero when not active128 power = 0129 else:130 power = int(powerstr)131 except ValueError: # handle spurious empty string132 pass133 power = -1134 if power >= 0:135 Domoticz_update(power)136 if (powerstr == "---") and (abs(hour - dark) < 2): # omvormer gaat zo uit137 LogSchrijven('Omvormer gaat zo uit')138 s = driver.find_element_by_id("webdata_total_e")139 total_energy = s.get_attribute("innerHTML")140 EnergyLog(' %s' % total_energy)141 #LogSchrijven('Total energy: %s'% total_energy)142 driver.close() # close driver143 driver.quit()144 driver_init = False145 wait_next_day = True146 wait = INTERVAL - 20 # compenseer de extra wachtijd na refresh147 elif (hour < light): # risk of waiting too long148 wait = (light - hour) * 3600149 LogSchrijven('Early morning: wait till %0.1f' % light)150 elif hour > dark: 151 wait_next_day = True152 else: # early morning just before sunrise153 wait = INTERVAL154 if wait_next_day:155 wait = (24 - hour + light) * 3600156 wait_next_day = False157 LogSchrijven('Evening: wacht %0.1f' % (wait / 3600) + ' hrs tot %0.1f' % light) 158 #LogSchrijven('wait %0.1f (s)' % wait)159 sleep(wait)160 except (KeyboardInterrupt, OSError, RuntimeError):161 print("Unexpected error:", sys.exc_info()[0])162 LogSchrijven('Interrupted')163 if driver_init:164 driver.close() # close driver165 driver.quit()166#------------- Voer Main uit ----------------------------------------------------------------------...
Server basic.py
Source:Server basic.py
1import socket2import datetime34print("start")5s = socket.socket()6host = ""7port = 543218s.bind((host, port))910s.listen(2)11c, addr = s.accept()1213while True:14 ontvangen = c.recv(1024).decode()15 if ontvangen == "alarm gaat af":16 print("alarm gaat af")17 vandaag = datetime.datetime.today()18 datumtijd = vandaag.strftime("%a %x %X")19 with open("server.txt", "a") as schrijven:20 schrijven.write("{:5} - {:5} {}".format("alarm gaat af", datumtijd, "\n"))21 print(datumtijd)22 if ontvangen == "vals alarm":23 print("vals alarm")24 vandaag = datetime.datetime.today()25 datumtijd = vandaag.strftime("%a %x %X")26 with open("server.txt", "a") as schrijven:27 schrijven.write("{:5} - {:5} {}".format("vals alarm", datumtijd, "\n"))28 print(datumtijd)29 if ontvangen == "alarm":30 print("alarm")31 vandaag = datetime.datetime.today()32 datumtijd = vandaag.strftime("%a %x %X")33 with open("server.txt", "a") as schrijven:34 schrijven.write("{:5} - {:5} {}".format("alarm", datumtijd, "\n"))35 print(datumtijd)36 if ontvangen == "alarm reset":37 print("alarm reset")38 vandaag = datetime.datetime.today()39 datumtijd = vandaag.strftime("%a %x %X")40 with open("server.txt", "a") as schrijven:41 schrijven.write("{:5} - {:5} {}".format("alarm reset", datumtijd, "\n"))42 print(datumtijd)43 if ontvangen == "break":44 break
...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!