text:
July 2021 – Volume 30 – 4
RISK ASSESSMENT GOVERNMENT OFFICIAL JOINS TOBACCO INDUSTRY ASSOCIATION
The revolving door from government to the tobacco industry and its allies is a familiar story to long-time tobacco industry watchers. The benefit to the industry is obvious: former government officials bring with them knowledge of the inner workings of policy making and key decision-makers. As the WHO Framework Convention on Tobacco Control Article 5.3 increasingly prevents the tobacco industry from having a seat at the policy making table, employing former policy makers and other government officials to carry the industry message and gather intelligence is a useful alternative avenue for facilitating industry policy influence. In Germany, PhD chemist Frank Henkler-Stephanie worked for the German Federal Institute for Risk Assessment (BfR) for more than a decade.
The BfR is an agency within the portfolio of the Federal Ministry of Food and Agriculture responsible for all scientific aspects of consumer protection. During his employment, Dr Henkler-Stephanie was involved in the authorisation of tobacco products, tobacco heaters, e-cigarettes and other nicotine products. From May 1st 2021 he will be a senior director for harm reduction at the German Association of the Tobacco Industry and New Products (BVTE). According to the association he will be responsible for risk reduction for innovative products. As part of this role, it is anticipated that he will contribute to advocating for BVTE's interests to policy makers. Among the members of BVTE are British American Tobacco, Reemtsma and Japan Tobacco.
Germany's Forum Rauchfrei expressed serious concern about the appointment, stating 'Mr Henkler-Stephanie must surely know that from now on he will be the puppet of an association, the members of which are co-responsible for 120000 yearly deaths in Germany. With Mr. Henkler-Stephanie the BVTE has bought a lobbyist to make itself look like a legitimate stakeholder and to have a door-opener for administrative and political decision makers'.
Dr Henkler-Stephanie is not the first 'door opener' at BVTE. The organisation's general manager, Jan Mücke, is the former parliamentary manager of the German Bundestag's liberal party group, and until 2013 was the parliamentary state secretary in the Federal Ministry of Transport, Building and Housing. He is also general manager of the German Cigarette Association (DZV). In this function he succeeded Marianne Tritz, who is a former member of the German Bundestag for Germany's Green Party Bündnis 90/ Die Grünen.
Johannes Spatz
aktionszentrum@forum-rauchfrei.de
https://tobaccocontrol.bmj.com/content/30/4?current-issue=y
Tabaré Vazquez †
We would like to join all in expressing our grief on receiving the information on the death of Dr. Tabaré Vazquez. We still remember meeting him on his visit to Berlin in 2017, he gave us so much hope then. He showed us how the fight against the tobacco industry could be won. Johannes Spatz, speaking for all members of Forum Rauchfrei
www.forum-rauchfrei.de
Tobacco Retailers in Germany hiding health warnings
Tobacco retailers in Germany are more and more using so-called "product cards", small cards made from cardboard or plastic in most cases provided by tobacco manufacturers, to hide the packs in the shelves behind the counter so the health warnings are not visible
The Tobacco Products Directive however calls for the visibility of the health warnings when tobacco products are placed on the market: "Member States shall ensure that the health warnings on a unit packet and any outside packaging are irremovably printed, indelible and fully visible, including not being partially or totally hidden or interrupted by tax stamps, price marks, security features, wrappers, jackets, boxes, or other items, when tobacco products are placed on the market."
The Federal Ministry for Food and Agriculture which is in charge of ruling tobacco products in Germany states that this is illegal but says also that local authorities must examine case by case if the law is violated or not. The cigarette manufacturers' association says it's legal to hide the warnings as the TPD regulates products and not the way they are presented.
Forum Rauchfrei has asked the ministry to clarify the situation and to inform retailers about the illegality of hiding health warnings when presenting tobacco products. Meanwhile we have reported numerous violations to authorities in several German cities.
Worldwide protest against tobacco trade fair in Dortmund
Open letter to North Rhine-Westphalia's premier Hannelore Kraft
Many renowned physicians as well as German and international medical associations today addressed North Rhine-Westphalia's premier Hannelore Kraft in an open letter, asking her to see to the shut-down of the world's biggest tobacco trade fair "InterTabac" in the German city of Dortmund, which is to begin on September 16th. The open letter was started off by Forum Rauchfrei, Transparency International Germany and the Cancer Advice Center and Contact Point for Healthcare Self-Help Groups in Aachen.
Among the co-signatories from North Rhine-Westphalia are:
• Dr. med. Burkhard Lawrenz, chairman of the Association of Children and Adolescent Physicians in Westfalen-Lippe
• Prof. Dr. Bernd Bertram, board member of the Medical Association North Rhine
• Prof. Dr. Dirk Schadendorf, director of the West German Tumor Center, Essen
• Dr. med. Helmut Weber, MR a. D., regional chairman of the Protection League of Non-Smokers North Rhine-Westphalia
• Prof. Dr. Oliver Razum, dean of the Department of Public Health, University of Bielefeld
In a letter to Forum Rauchfrei the president of the Medical Association Saarland, Dr. Josef Mischo, agreed that the organization of a trade fair is "counterproductive" to the effort to curb the use of tobacco.
Dr. Theodor Windhorst, president of the Medical Association Westfalen-Lippe, had already called for an end of "InterTabac" last year. In a letter to North Rhine-Westphalia's health minister he wrote: "In my view an event like InterTabac is contradicting the aim to protect non-smokers."
"This tobacco trade fair brings endless suffering to the world," says Johannes Spatz, physician and spokesman of Forum Rauchfrei. "It is the state's duty to fight tobacco consumption and cancer. But by organizing this promotional event it achieves the opposite," he says. As owner of the Westfalenhallen Dortmund GmbH the city is directly responsible for promoting the use of tobacco.
"The conflict of interest becoming manifest with the tobacco trade fair must be made transparent and be brought to an end," says Dr. Angela Spelsberg, head of Transparency International Germany's workgroup on public health. She adds: "By authorizing the tobacco trade fair in Dortmund the state of North Rhine-Westphalia clearly violates the world's first global health agreement "Framework Convention on Tobacco Control (FCTC)", which Germany joined in 2004."
"Dortmund's mayor and North Rhine-Westphalia's health minister have both denied the responsibility for the trade fair up to this day," says Spatz. "We shall see if the premier will do the same." The fact that the city of Dortmund is offensively marketing products from which according to WHO six million people die each year is a full-blown scandal.
At international level representatives of numerous health science and tobacco control organizations have participated in the protest. Among them are Michael Moore, president of the World Federation of Public Health Associations and Laurent Huber, executive director of Action on Smoking and Health (ASH), one of the leading non-governmental tobacco control organizations of the world.
Forum Rauchfrei has already announced a protest rally in front of Dortmund's Westfalenhallen for September 17th. Until then a response from the premier is expected.
Open Letter to Hannelore Kraft (English)
Forum Rauchfrei congratulates Uruguay's president Tabaré Vázquez
In a letter to the president of Uruguay, Tabaré Vázquez, Forum Rauchfrei offered congratulations on the country's victory over tobacco giant Philip Morris and thanked president Vázquez for his longstanding and unfailing efforts in the field of tobacco control.
His Excellency , Tabaré Vázquez, President of the Republic of Uruguay
Your Excellency,
we would very much like to congratulate you on Uruguay's victory over tobacco giant Philip Morris and to express our deeply felt joy about the International Centre for Settlement of Investment Disputes' decision in favour of your country and in favour of the protection of the health and lives of the Uruguayan people.
We feel grateful for your country's fight for a decision, which will doubtlessly have worldwide consequences. Without your determination and endurance with regard to fighting the tobacco epidemic, this victory would not have been possible.
We very much hope that other countries will now follow Uruguay's example to put the interests of their own people above the interests of the tobacco industry. We especially hope that German politicians, too, will see this event as a turning point. Contemplating our more than fifteen years of working in the field of tobacco control in Germany we must sadly say that we are in great need of a statesman who is willing to fight for a tobacco free world as much as you are.
Spokesman of Forum Rauchfrei
Cigarette company JTI intends to take legal action against Johannes Spatz
Cigarette company Japan Tobacco International Germany (JTI) is threatening to take legal action against Forum Rauchfrei's spokesman Johannes Spatz, in case he doesn't confirm in writing, no longer to damage the company's advertising bills. Spatz is also to take a picture off Forum Rauchfrei's homepage. The picture shows Spatz tampering with a poster advertising JTI's cigarette brand Camel.
The text on the website below the picture reads: "Tobacco ads banned? No chance. Outdoor advertising for tobacco products will be allowed in Germany until the year 2020. All the other European countries abide by the Framework Convention on Tobacco Control, which bans tobacco advertising. We lend a helping hand to politics with a spring cleaning."
The deadline, which the company has set for submitting a declaration of cease and desist, is ending today. "I will not give in to the tobacco company's demands", Johannes Spatz states. In his view a tobacco company, advertising a product from which 121,000 people in Germany die each year, should be held responsible rather than a person protesting against such ads.
"According to Germany's Framework Convention on Tobacco Control Act tobacco advertising should have been banned in 2010", Spatz says. At the same time he criticizes the federal minister for food and agriculture, who is responsible for Germany's new Tobacco Products Act. The draft bill for this act included a ban on outdoor advertising for 2016. The ban was then postponed until 2020. According to Spatz this delay is completely unjustified. It is exclusively caused by pressure from tobacco lobbyists to whom the government once again condescended.
If a company with a turnover of more than half a billion USD each year presses charges over one damaged advertising bill, this clearly shows how raw their nerves are with regard to an impending advertising ban. "I am looking forward to the announced court proceedings", says Spatz.
Forum Rauchfrei appeals to Governor of Jakarta: Stop Upcoming Tobacco Trade fair!
Forum Rauchfrei, a tobacco control organization in Germany, today appealed to the governor of Jakarta, to stop the upcoming tobacco trade fair "WT Process and Machinery" in Jakarta. The trade fair, which is planned for April 27th-28th, is the resumption of "World Tobacco Asia 2012" under a new name.
"Organizers of the trade fair are trying to mislead the public," states Johannes Spatz, spokesman of Forum Rauchfrei. "In 2014 the fair could not be held in Indonesia due to public protests. Now they want to sneak back in. We strongly appeal to the governor of Jakarta, not to let this happen," says Spatz.
According to the World Health Organization, the consumption of tobacco will cause 6,000,000 premature deaths worldwide this year alone. As smoking prevalence is declining in western countries, the tobacco industry is trying to open up new markets in Southeast Asia and the Pacific Region. It is trying to use Indonesia as its basis for this.
In February 2014 a German company tried to hold a tobacco trade fair called "Intertabac ASIA" in Bali. At that time the organizers wanted to open up the growing Indonesian market for cigarette makers. The trade fair had to be cancelled on short notice due to massive international protest initiated by Forum Rauchfrei.
WT Process and Machinery would bring back a platform for marketing tobacco products in Indonesia, products which kill every second consumer when used as intended. As Germany is the largest exporter of these products worldwide, Forum Rauchfrei feels a special responsibility for trying to prevent this.
New tobacco control law: Little to celebrate in Germany
On February 25th the German Parliament (Bundestag) approved a bill on implementing the EU Tobacco Products Directive (TPD 2) in Germany. There is little doubt that the federal states will give their required consent on March 18th. The new Tobacco Products Directive will then come into effect in May as specified.
German politicians are celebrating this as a great victory in the fight against tobacco use and congratulate themselves for resisting the tobacco industry's lobbying pressure. Well, it is a victory, but not for German politicians, or for public health in Germany. Since its first draft appeared in June 2015, the bill has been massively changed due to tobacco industry interference.
The first draft aimed at combined health warnings for all tobacco products. The new law will make exceptions for cigars and pipe tobacco.
The first draft aimed at an immediate ban of menthol. A ban on menthol is now postponed until 2020.
The first draft aimed at applying the new rules to all tobacco products produced in Germany. The new law will allow exceptions for products that will be exported to non-EU countries.
And finally, the first draft aimed at an immediate ban on outdoor advertising of tobacco products. This was completely removed: an outdoor advertising ban is now scheduled for 2020.
In other words, Germany will do what it has to do according to the TPD 2 and won't go any further. Before a coming TPD 3 might call for it, Germany will probably not introduce a display ban, a ban on advertising at points of sale, a ban on brand stretching, a ban on tobacco industry sponsorship and plain packs.
German politicians still put the industry's interests above public health. During the parliamentary debate one of these politicians expressed it this way: "Only few people know, that 65 percent of all cigarettes consumed in Europe are produced in Germany – in German factories according to German standards, by German workers – and analyzed in German laboratories. I don't want this to change."
There really is not much to celebrate in Germany when it comes to tobacco control.
Tobacco industry's influence on German Tobacco Control Legislation
According to Article 5.3 of the Framework Convention on Tobacco Control (FCTC) Germany is under the obligation to protect itself from the influence of the tobacco industry. How poorly this obligation is met is made obvious by the sheer number of interactions between politicians or ministry officials and tobacco industry representatives. Our – incomplete – summary of contacts shows, up to which point the tobacco industry is able to exert its influence.
British Medical Journal publishes article on physicians' protest action against tobacco trade fair in Dortmund
British Medical Journal's Tobacco Control has published an article on German physicians protesting against the world's leading trade fair for tobacco products, "InterTabac", in Dortmund, Germany. The tobacco trade fair is organized by a city-owned company and backed by the city's mayor, thus constituting a blatant breach of the Framework Convention on Tobacco Control's article 5.3.
Link to Tobacco Control
Tobacco lobby stubs out total German tobacco ad ban
When in June Germany's federal minister of food and agriculture announced his plans for converting the Tobacco Product Directive into German law, his ambitions were high: an immediate ban on menthol, pictorial health warnings for cigars and pipe tobacco and above all a ban on outdoor advertising for tobacco products. Now in December not much is left of these ambitious plans. Euractiv published an interesting article on this in English, originally printed in the German newspaper "Der Tagesspiegel".
Article on Euractiv on 10. Dec. 2015
France to introduce plain packaging for cigarettes
On February 3rd the French National Assembly voted for the introduction of plain cigarette packs. The provision is to be implemented by May 2016. The Assembly also voted for other measures to reduce the use of tobacco, among them a display ban at points of sale, a smoking ban in cars when children are present, a commitment of the tobacco industry to transparency and a ban of tobacco flavorings according to the new Tobacco Products Directive. In a next step the plans will be discussed in the Senate, an approval is deemed certain. We congratulate our French colleagues and hope very much that this will have an effect on Germany, which is so near to France on the map but still so far away when it comes to tobacco control.
Posters to be seen at the 16th World Conference on Tobacco or Health
Forum Rauchfrei will be present at the 16th World Conference on Tobacco or Health in Abu Dhabi and show three posters depicting its work and some of the problems tobacco control faces in Germany. The first poster shows Germany's President Joachim Gauck and Germany's First Lady in front of a sponsoring board showing the logo of British American Tobacco, one of the main sponsors of the Federal Press Ball, which Gauck was attending in December 2014. The second one shows members of Forum Rauchfrei pasting over tobacco ads. Large outdoor billboards showing tobacco ads are still legally put up in the streets of Germany, although Germany has ratified FCTC and is obliged to implement a comprehensive ban of all forms of tobacco advertising. The third poster shows the mayor of the German city of Dortmund and wants to draw attention to the Inter-tabac in the German city of Dortmund, the world's biggest trade fair for tobacco products, organized by a city-owned company. In February 2014, Dortmund wanted to hold an offshoot of this trade fair, the Inter-tabac ASIA, in Bali. Thanks to massive international protests this trade fair had to be cancelled. The Inter-tabac in Dortmund, however, is still held each year and getting bigger and bigger.
Protest Rally against Reemtsma Liberty Award Ceremony on March 5th
The Reemtsma Liberty Award was initiated in 2007 by the German cigarette manufacturer Reemtsma (part of Imperial Tobacco Group) as part of an image campaign. The award is given to journalists, who from the company's point of view have rendered outstanding services to liberty. Reemtsma succeeds again and again in attracting prestigious personalities for its award ceremonies, last year the speech was held by Glenn Greenwald, before there were Salman Rushdie or Mohamed ElBaradei. This year Luis Moreno Ocampo, until 2012 prosecutor of the International Criminal Court, will be the keynote speaker.
We will hold a protest rally against this on March 5th 2015. You will find more details in the invitation below and you can watch a video of last year's protests on youtube.
Invitation to protest rally
Der Spiegel reports on criticized tobacco sponsoring
Again and again tobacco companies succeed in improving their images by sponsoring events. And when doing so, they also know how to use politicians for their purposes. Recently German president Joachim Gauck had his picture taken in front of British American Tobacco's logo when he attended the Bundespresseball (federal press ball) in Berlin. Subsequently Forum Rauchfrei wrote him a letter asking him to speak out against tobacco industry sponsoring. The German newsmagazine Der Spiegel reported on this. You will find a translation of the article below.
Translation: Der Spiegel issue # 50
German newspaper "Neues Deutschland" reports on protest action of Forum Rauchfrei
In its edition of 21st of October the German newspaper "Neues Deutschland" reports on the attempts of Philip Morris, a company which had been actively involved in cigarette smuggling for decades, to dominate the discussion on illicit cigarette trade. The report was occasioned by a conference on smuggling, organized by the Europäische Akademie Berlin (European Academy Berlin) and financed by the tobacco company. The report also takes up Forum Rauchfrei's criticism of the event. The attempts of combating illicit cigarette trade are undermined by the tobacco company, they say.
Neues Deutschland online October 21st 2014
Ban tobacco advertising now!
Members of the German Bundestag paste over tobacco ad
Today two members of the German Bundestag pasted over an advertising poster in Potsdam as part of a protest action of Forum Rauchfrei (Forum Smokefree). The act aimed at underlining the demand for a long overdue comprehensive ban of all forms of tobacco advertising, promotion and sponsorship in Germany.
Update on Marlboro Maybe Campaign in Germany
After the start of the campaign in 2011 Forum Rauchfrei filed more than a dozen complaints against the ads, as they clearly targeted young people. We then turned to the health ministers of the different federal states in Germany and the federal minister for consumer protection. Although the campaign was finally stopped in Germany at the end of 2013 by the Landratsamt München (the administrative district office of Munich, the city in which PM has its German headquarters), recently new ad posters for Marlboro showing the slogan "Maybe" appeared in the streets (yes, outdoor advertising for tobacco products is still allowed in Germany!). As these new posters do not show any of the old pictures and the slogans do not openly address young people, this is not a breach of German laws. We have already complained about these new ads, as we think people seeing these will automatically recall the campaign and its pictures from 2013, but are not sure of our complaint's outcome. Meanwhile we have found another way of dealing with these posters, namely by simply pasting them over (for pictures please follow the link below).
Following the Cancellation of a Tobacco Trade Fair in Singapore Forum Rauchfrei Aims at Stopping the Planned Tobacco Trade Fair Inter-tabac in Dortmund
The tobacco trade fair World Tobacco Asia in Singapore has been cancelled. The trade magazine Tobacco Journal states that the Singapore government had exerted pressure on the organizer as reason for this. The organizer of the trade fair therefore deemed it appropriate to make an early decision instead of being left with doubts about its safety and positive completion.
Forum Rauchfrei is still permitted to shed light on tobacco trade fair on intertabac.org website – Westfalenhallen Dortmund GmbH failed in attempted censorship before international arbitration Panel
Attempts of the Westfalenhallen Dortmund GmbH to prevent criticism of their organizing tobacco trade fairs have come to naught. The trade fair company had brought proceedings against Johannes Spatz because he had had registered the name intertabac.org for the protest campaign against the organization of tobacco trade fairs. Visitors of the domain intertabac.org are immediately directed to the Dortmund kills website. There they will find information about the course of the campaign which led to the prevention of the tobacco trade fair Inter-tabac ASIA. On May 27th 2014, the arbitration panel of the UN organization for intellectual property (WIPO) stated, that this practice was legitimate with the result that the complaint was denied.
The complaint by Westfalenhallen Dortmund GmbH can be obtained from Forum Rauchfrei (+49 30 74755922), the decision by WIPO is to be found by following the link below..
WIPO Decision
Forum Rauchfrei appeals to Singapore's Minister of Health to stop the planned tobacco trade fair World Tobacco Asia
After the ban of the tobacco trade fair Inter-tabac ASIA 2014 by the Governor of Bali, the organizers of the World Tobacco Asia, scheduled to be held in Indonesia as well, thought the venue unsafe and relocated the tobacco trade fair to Singapore. Into a country, of all countries, which is being lauded for its leading role with respect to tobacco control as hardly another. That is why Forum Rauchfrei appealed to Singapore's minister of health to stop the trade fair.
Letter to Singapore's Minister of Health
Tobacco Trade Fair in Bali Cancelled by Westfalenhallen Dortmund GmbH on Short Notice
Two days ago the Westfalenhallen company informed the public on its homepage about the cancellation of the tobacco trade fair "Inter-tabac ASIA", which was planned to be held on February 27th. and 28th. The cancellation was preceded by worldwide massive protests. The governor of Bali had lately repeatedly announced, to stop the trade fair. The Westfalenhallen had praised Indonesia as "booming" tobacco market and at the same time completely ignored, that the extremely high number of adolescent smokers would rise even more due to the planned trade fair. The Westfalenhallen company is completely owned by the city of Dortmund.
Open Letter to Indonesian Minister of Health
The governor of Bali has repeatedly declared his intention to stop the tobacco trade fair Inter-tabac ASIA 2014. In spite of massive protests in Indonesia, the fair's organizer, the German city owned company Westfalenhallen Dortmund GmbH, still insists on carrying through the fair. In an open letter, organizations from Europe, Asia and the U.S. have now asked the Indonesian minister of health to back the governor's decision and to speak out openly against tobacco trade fairs in Indonesia.
Cancellation of Inter-tabac ASIA 2014 in Bali is highly probable
According to the latest news from Bali, the tobacco trade fair Inter-tabac ASIA 2014 will not be held as planned. In a report of February 11th the Bali Daily is citing the governor of Bali: "I will certainly halt the exhibition if the committee still insists on holding the event here." This decision was lauded the next day by the Indonesian Hotels and Restaurants Association. The trade fair's organizer, the German Westfalenhallen Dortmund GmbH, however, according to their website still maintain, that the fair will take place as scheduled on February 27th.-28th. 2014 at Bali Nusa Dua Convention Center.
Bali Daily February 12th. 2014
City of Dortmund's Tobacco Trade Fair in Indonesia: Mayor Sierau Refuses to Accept Petition
Nearly 12,000 people signed the petition addressed to the mayor of Dortmund (Ullrich Sierau), which Max Vollmer and Yosef Rabindanata Nugraha wanted to hand over in the Dortmund city hall on February 3rd. The petition aims at stopping the tobacco trade fair Inter-tabac ASIA 2014, which the city-owned Westfalenhallen Dortmund GmbH aims to carry through in Bali. The mayor however was not willing to welcome the bearers of the petition.
Extensive media coverage of protests against Inter-tabac ASIA 2014 in Bali
Protests against the organization of the Inter-tabac ASIA 2014 by the city-owned German company Westfalenhallen Dortmund GmbH have now found a wide echo in the Indonesian media. Over the weekend up to 20 articles could be found in Indonesian newspapers. Protests in Indonesia have now reached a level, which can no longer be ignored by the Westfalenhallen Dortmund GmbH or the mayor of Dortmund.
Bali Daily January 25th 2014
The Jakarta Post January 24th 2014
The Jakarta Post January 22nd 2014
Initiatives on Smoking Bans in Germany: a Review
On January 3rd the International Journal of Environmental Research and Public Health published the article "Smoke-Free Laws and Direct Democracy Initiatives on Smoking Bans in Germany: A Systematic Review and Quantitative Assessment." The authors systematically review federal and state laws regulating smoking as well as petitions, popular initiatives and referenda that aimed at changing statutory smoking bans.
International Journal of Environmental Research and Public Health Jan. 3rd 2014
"Tobacco Control" publishes a contribution by Forum Rauchfrei
In its latest issue "Tobacco Control" publishes a contribution by Forum Rauchfrei on the role played by the city-owned Westfalenhallen Dortmund GmbH in organizing the tobacco trade fair "Inter-tabac Asia 2014" in Indonesia. By exporting the Dortmund-based "Inter-tabac" to a country, in which cigarettes are sold even to children, the trade fair company aims to open the door to the booming Southeast-Asian market for the tobacco industry and thus neglects all ethical values.
Contribution to Tobacco Control No. 23
Germany should raise Smoking Age to 21
"The Local – Germany's English Speaking Newspaper" reports on suggestions to follow the example of New York and to raise the legal smoking age in Germany to 21. Please note: In Germany the number of young people smoking has dropped from about 28 percent in 2003 to under 12 percent today, not by 28 percent as printed erroneously in the article.
The Local, November 5th 2013
City of Dortmund Promotes the Sale of Tobacco
The world's biggest trade fair for tobacco goods and smokers' requirements, the Inter-tabac, is scheduled to be held in the city of Dortmund, Germany, from September 20th to 22nd. The trade fair is organized by the Westfalenhallen Dortmund GmbH, a company completely owned by the city of Dortmund. The city-owned company is not merely managing the trade fair but organizes it completely, maintains a tight-woven net of relationships to the exhibiting companies, offers a stage for tobacco-related presentations and advertises the "world's biggest marketplace for the tobacco branch" on the internet.
Berlin Cancer Society Tolerates Cooperation of Members of its Foundation's Board of Trustees with the Tobacco Industry
On March 20th 2013 Reemtsma's award presentation ceremony for the company's Liberty Award was staged in Berlin. With a market share of 24.3 % Reemtsma is the second biggest cigarette producing company in Germany. The Reemtsma Liberty Award includes a prize money of 15,000 Euro and has been awarded for the seventh time.
This year the award was presented by jury member Dr. Claudia Nothelle. Dr. Nothelle is the programme director of the Berlin Brandenburg Broadcasting Company and also chairwoman of the board of trustees of the Berlin Cancer Foundation. The Berlin Cancer Foundation is part of the Berlin Cancer Society. Asked for a statement, Dr. Nothelle did not see a problem in her participation in the tobacco company's award ceremony, though she conceded, that companies award prizes to better their images. Subsequently we asked the chairman of the Berlin Cancer Society, Prof. Dr. h.c. P. M. Schlag, to disengage Dr. Nothelle from her post as chairwoman of the board of trustees. Prof. Dr. h.c. P. M. Schlag answered, that the demand for such a demission was not justified. Thus the participation of Dr. Nothelle in an event hosted by a tobacco company has now become a problem of the Berlin Cancer Society. This problem is intensified by the participation of another member of the board of trustees of the Berlin Cancer Foundation, Gero von Boehm, in the event.
Prof. Dr. h.c. P. M. Schlag justifies his decision arguing that Dr. Nothelle's bearing would not shed a positive light on the tobacco industry. Nevertheless she allows Reemtsma to use her name in advertising the company's award, as the company does for example in its press releases. As stated above, Dr. Nothelle is aware of the fact, that Reemtsma uses the award to better its image. It should be taken for granted that the chairwoman of the board of trustees of a cancer foundation clearly disassociates herself from the tobacco industry. In this case however a clear distance is not perceptible.
The guidelines for the implementation of Article 5.3 of the Law on the Framework Convention on Tobacco Control can be seen as a standard for dealing with the tobacco industry. These guidelines state, that there is a fundamental and irreconcilable conflict between the tobacco industry's interests and public health policy interests.
As chairwoman of the board of trustees of the Berlin Cancer Foundation Dr. Nothelle advocates public health policy interests. These are in no way consistent with her appearance at an event hosted by the tobacco industry. There can be absolutely no doubt, that any connection between the Berlin Cancer Society and the tobacco industry must be terminated.
Forum Rauchfrei has informed several international cancer societies about Dr. Nothelle's participation in the award ceremony and asked them to call for her demission.
Letter to cancer societies
Dalli's successor must not delay the new Tobacco Products Directive and must ensure complete transparency
Forum Rauchfrei calls on the EU Commission to hold on to its plan of toughening the Tobacco Products Directive and to release the long-announced directive before the end of the year. Under no circumstances may Health Commissioner John Dalli's resignation lead to a delay or dilution of tobacco control plans.
The City of Hamburg's Representation's summer party in Berlin is again co-financed by tobacco companies
Hamburg's Representation's summer party in Berlin, which took place on September 4th, was made possible by an astonishingly large number of sponsors – among them the tobacco giants Reemtsma and British American Tobacco (BAT). Both companies were allowed to put up booths at the party. A delegate of BAT was bid welcome by the First Mayor of Hamburg, Olaf Scholz. "In doing this Hamburg's Representation disregards the guidelines to the law on the Framework Convention on Tobacco Control," criticises Johannes Spatz, one of Forum Rauchfrei's spokesmen.
Forum Rauchfrei congratulates the Australian government on its victory over the tobacco industry
Australia's government is an inspiring examole for us, showing that decisively taking the side of protecting people's health stands a chance. The German Government's reaction to the decision of the Australian court is inexcusable. Mechthold Dyckmans, Federal Government Drug Commissioner, sided with the wrong party. She rejects the introduction of plain packages in Germany as this would place too far reaching restrictions on the tobacco industry (see also the article in the Berliner Zeitung of August 16th).
Forum Rauchfrei congratulates the Australian government
The changed face of the tobacco industry
In March this year, Margaret Chan, Director-General of the World Health Organization, made the keynote speech at the 15th World Conference on Tobacco or Health in Singapore. She called for global action towards a tobacco-free world. Chan is a strong and courageous fighter against the tobacco industry. Margaret Chan speaks openly about the problems: "The enemy, the tobacco industry, has changed its face and its tactics. The wolf is not longer in sheep´s clothing, and its teeth are bared." Her speech is indicative for the world.
Keynote speech of Margaret Chan at the 15th World Conference in Singapore
Technical Resource – for Country Implementation of WHO Framework Convention on Tobacco Control, Article 5.3
Jose Manuel Barroso allows himself to be exploited by tobacco company British American Tobacco's Foundation for Future Studies
It is an utter scandal, says Johannes Spatz, spokesmen of Forum Rauchfrei that the President of the European commission allows himself to be used for an image campaign for BAT. He calls on Barrose to distinctly distance himself from the foundation and BAT. The European Union's efforts to drive back the use of tobacco were made totally worthless by this appearance.
Lancet Article
Second-hand smoke's worldwide disease toll
Great Success for Non-Smokers' Rights in Bavaria
In Bavaria corner bars, restaurants and marquees are completely smokefree from now on. Johannes Spatz, spokesman of Forum Rauchfrei, congratulates the Bavarians to their great success for the protection of non-smokers. "The Bavarian example encourages others, to fight for a smokefree gastronomy in Berlin and other federal states of Germany."
Cigarette ad poster taken down on behalf of local authorities in Berlin
Streets in Berlin are awash with cigarette ads, as Japan Tobacco International is trying to launch a new brand. For the first time now, authorities decided to act and have posters taken down, that violate the German tobacco law. more
14.12.06 Klaus Wowereit patron for world's largest manufacturer of cigarette-making machines
02.12.06 Black Friday for Protection of Non-Smokers
28.09.06 Heavy barrage of tobacco industry on political sector
27.09.06 Chumminess between tobacco industry and the political sector:
Bundestag member courts the Association of the Cigarette Industry
11.09.06 Opposing hypocritical youth protection dialogue of British American Tobacco
26.07.06 Boycott against Philip Morris Research Prize Berlin, 26.07.06
21.06.06 Party contributions by tobacco industry serve exclusively to influence public debate
28.03.06 Tobacco industry keeps politicians happy
21.02.06 Philip Morris in sheep's clothing
06.02.06 Church makes pact with the devil
eichingerNews in English 03.01.2016


text:
Vdeo
High temperature pre-tightened disc spring
Biangular Screws
American standard threaded rods
Company notice
A nut sells for more than 10,000 nuclear power fasteners are high-strength
Zhejiang High-Strength Fasteners Co., Ltd. is a professional manufacturer of high-strength fasteners integrating R&D, production, testing and sales. The University, Anhui University, Zhejiang Normal University and many other universities and research institutes have established a research and development mechanism integrating production, education and research.
Near the end of the year, Zhejiang High-Strength Fasteners Co., Ltd. located in Lizhu Town is showing a busy production scene. The company has signed more than 10 nuclear power engineering fastener supply contracts this year and is organizing production. The person in charge of the company told the author that, as a first-class material supplier for a number of nuclear power projects, the company's supply contract delivery date has been scheduled for next year and the next year.
"Fujian Fuqing Nuclear Power Plant Unit 3 and Unit 4 Pipeline Flange Fasteners, Yangjiang Nuclear Power Plant Phase I Project 5 and 6 Unit Fasteners, CGN Anti-shock Device Embedded Fasteners..." The person in charge of the company took A thick contract book was published to tell the author that in the bidding of these projects, the companies that competed with their companies were all well-known foreign brand companies, but in the end, they overcame the pack and succeeded in winning the bid, relying on technology.
In the recent bidding for fasteners for embedded parts of anti-shock devices of CGN, among the 6 companies that signed up for the bidding, Zhejiang High Strength Fasteners Co., Ltd. was the only Chinese company, and its competitors were GM of the United States, NORDON of France, French ANVIS, French KLEYFRANCE and a well-known machinery company in Germany. Because the project is by the sea, the requirements for the product are very high, and a series of experiments are required. "High-strength" products have passed a series of experiments such as tensile strength above 350°C, seawater salt spray resistance, tensile strength above 1060MPA, and yield strength above 860MPA. Among these products, the most expensive nut is only 40% of that of similar foreign products, although the price for each nut exceeds 10,000 yuan, which saves a lot of money for the project. No wonder even the project bidding organizer gave a thumbs up and boasted: "It's amazing! It's amazing!"
At present, the company's products are widely used in large-scale national projects such as petroleum, chemical industry, shipbuilding, machinery, aerospace, military industry, etc., and successfully entered the field of nuclear power, becoming a technological leader in the field of nuclear power engineering fasteners at home and abroad, and a leading domestic nuclear power enterprise. First-class material supplier.
This year, the company has successfully developed 3 new fastener products applied in the field of nuclear power, filling the domestic blank in this field. According to reports, the technical requirements of fasteners in the field of nuclear power are particularly high, and they have always been monopolized by foreign products. The three bolt performance levels successfully developed by the company all meet the requirements of similar foreign products, but the price is less than half of foreign products. The development of my country's nuclear power industry is of great significance.
At present, the company's fastener production process in the field of nuclear power has applied for a national invention patent and has been officially accepted. Not long ago, the company was identified as the second batch of high-tech enterprises supported by the state, and the company will also apply for high-tech enterprises in the National Torch Program next year.
Classification and selection of high temperature preloaded disc springs
What aspects should be paid attention to when installing the disc spring?
What is the difference between a disc spring and a spring washer?
What are the characteristics and applications of high temperature disc springs?
Description of the use of the disc spring
Explain the application of disc spring in detail
E-mail:zjgq@zjgaoqiang.com
Tel:86-0575-84888721 0575-85055696
Add:No. 1158 Kebei Avenue, Kebei Development Zone, Keqiao District, Shaoxing City, Zhejiang Province
COPYRIGHT: Zhejiang High-Intensity Fastener co.,ltd Powered by 300.cn SEO

redpajama_set_name: RedPajamaCommonCrawl


text:
Blockchain Accounting & Tax Services
Business Applications Advisory Services
Digital Transformation & Cybersecurity
Litigation Support & Forensic Accounting Services
M&A Advisory & Brokerage Services
Risk Management Advisory
Treasury Optimization Services
Non-Financial Assurance
Information Assurance
Individual & Family Tax
State & Local Tax (SALT)
Business Tax Credits & Incentives
CFO Advisory Services
Payroll & HR
Financial & Accounting Staffing
COVID Relief Assistance
Employee Retention Credit Services
PPP Loan Assistance for Borrowers
Provider Relief Fund
Affordable & Public Housing
Restaurant, Franchise & Hospitality
Technology & Blockchain
Insights | Financial Operations
Requirements for Good Faith Certification Concerning Necessity of PPP Loan
On May 13, 2020, the Treasury released FAQ 46 regarding the SBA's review of borrowers' required good-faith certification concerning the necessity of the loan request.
The Treasury's FAQ addresses both borrowers whose loan is less than $2 million and those whose loan is greater than $2 million.
Loans Less than $2 million
The Treasury stated, "Any borrower that, together with its affiliates, received PPP loans with an original principal amount of less than $2 million will be deemed to have made the required certification concerning the necessity of the loan request in good faith."
This statement removes the requirement for borrowers of less than $2 million to have to re-consider their certification of economic uncertainty based on the sources of liquidity available.
Loans Greater than $2 million
FAQ 46 does not provide clarification to borrowers with loans greater than $2 million of what must be considered as part of the certification that "[c]urrent economic uncertainty makes this loan request necessary to support the ongoing operations of the Applicant."
As previously stated in FAQ 39 as issued on April 29, 2020, the SBA will review all loans in excess of $2 million and other loans as deemed appropriate. FAQ 46 clarifies the consequences of the SBA ultimately deeming the borrower ineligible. In the event the SBA determines the borrower "lacked an adequate basis for the required certification concerning the necessity of the loan request," the loan will be required to be repaid and no forgiveness will be provided. In the event the borrower repays the loan, the SBA has stated that they "will not pursue administrative enforcement or referrals to other agencies based on its determination with respect to the certification concerning necessity of the loan request."
Let Aprio Help
We view this as very important in assessing risk in what the ultimate cost may be if the SBA determination is different than the company's.
To discuss your documentation of economic uncertainty or how to interpret and document spending requirements for PPP forgiveness with an Aprio SBA loan expert, reach out today.
Disclaimer for services provided relative to SBA programs and the CARES Act
Aprio's goal is to provide the most up to date information, along with our insights and current understanding of these programs and regulations to help you navigate your business response to COVID-19.
The rules regarding SBA programs are constantly being refined and clarified by the SBA and other agencies In certain instances, the guidance being provided by the agencies and/or the financial institutions is in direct conflict with other competing guidance, regulations and/or existing laws.
Due to the evolving nature of the situation and the lack of final published rules, Aprio cannot guarantee that additional changes or updates won't be needed or forthcoming and the original advice given by Aprio may be affected by the evolving nature of the situation.
You need to evaluate and draw your own conclusions and determine your Company's best approach relative to participation within these programs based on your Company's specific circumstances, cash flow forecast and business strategy.
In situations where resources are provided by third parties, those services should be covered under a separate agreement directly with that service provider. Aprio is not responsible for the actions of any other third party.
Aprio encourages you to contact your legal counsel to address the legal implications of the impact of the CARES Act and specifically your participation in any of the SBA programs.
How to Navigate Staffing in an Inflationary Environment
6 Manufacturing Insights from Q1 2023 and What They Mean for You
New Year's Resolution #12: I will establish or submit billing rates for 2023
From the Forensic Accounting Experts: 3 Key Risks to Plan for in 2023
Tommy is the partner-in-charge of Aprio's Retail, Franchise and Hospitality group. His practice focuses on small and mid-sized retail, franchise and hospitality companies and real estate firms. Tommy has expertise in corporate structuring arrangements, multi-state and international tax planning, and corporate and individual tax mitigation.
Aprio Wealth Management, LLC Disclosures
Mount Airy, NC
APRIO, the Aprio pentagonal pinwheel logo,"PASSIONATE FOR WHAT'S NEXT", and the "ISO 27001 CERTIFIED BY APRIO" seal, are registered marks of Aprio, LLP. "APRIO CLOUD" is a service mark of Aprio, LLP. Aprio, LLP © 2022. All rights reserved.
Investment advisory services are offered through Aprio Wealth Management, LLC, an independent Securities and Exchange Commission Registered Investment Advisor. Securities are offered through Purshe Kaplan Sterling ("PKS") Investments, Inc., member of FINRA/SIPC. Aprio Wealth Management, LLC and Purshe Kaplan Sterling Investments, Inc. are separate and unaffiliated. Information presented is for educational purposes only and does not intend to make an offer or solicitation for the sale or purchase of any securities, and past performance is not indicative of future results. Investments involve risk and are not guaranteed. Be sure to first consult with a qualified financial adviser and/or tax professional before implementing any strategy discussed here.


KATY PERRY is celebrating her reported engagement at the Taj Mahal in Agra, India.
The pop star has posted a photo of herself and funnyman Russell Brand cuddling in front of the historical site on her Twitter.com page, joking, "He built this for me..."
Perry and Brand have yet to confirm engagement reports and the singer doesn't appear to be wearing a ring on her wedding finger in the holiday photo, but sources insist that's because it's still being designed.
Her fans seem to believe the news, cooing about the picture of the celebrity couple and congratulating them on Twitter.com.
Other than the brief Tweet, Perry gave no further details of her low key trip to India.
But no one apparently recognised the pair when they were at the Taj complex - India's biggest tourist draw.
A source said: "They came but the guides (at the Taj) didn't recognise them. The state government's protocol office had no information either about their visit.
"Generally all the big celebrities stay at the The Oberoi Amarvilas. But the hotel doesn't give away information for security reasons."
It is not known if Perry and Brand are still in India, said the source.
Meanwhile, Brand has fuelled reports he's ready to settle down with Katy after splashing out $3.52 million on a new Los Angeles lovenest.
The Forgetting Sarah Marshall star appears to be making moves to relocate to California permanently - he's placed his home in north London on the market for $4 million and purchased a 1920s-style house on the West Coast.
The lavish four-storey home boasts four bedrooms, four bathrooms, a powder room and an outdoor swimming pool.


Spring is in full swing in the Sierras and it's got me thinking about getting outside and getting hiking! Yosemite is one of the most beautiful national parks in the Sierra's making it's hiking pretty spectacular. Most people know about the popular hikes like Half Dome, the Mist Trail, and Yosemite Falls, but if you are looking for something a little different and a good challenge then these High Sierra hikes will not disappoint.
These hikes are not for the faint of heart – they are long, strenuous, and at high elevation so if you are feeling like a badass then they are for you!
Start: Porcupine Creek Trailhead on Tioga Rd about a mile past Porcupine Flat Campground.
Views: Yosemite Valley, Half Dome, Clouds Rest, and the Sierra Nevada mountains.
North Dome might be one of the most underrated hikes in Yosemite, the views alone make this one of the coolest hikes in the park. While there isn't a ton of elevation gain the hike's length is what makes this hike badass (well that and the views). Most of the hike is flat starting in the pine forest, and then you get a little bit of down hill as you navigate the granite mountain tops to descend on the North Dome peak.
From the top of North Dome you can see the entire Yosemite Valley, get an epic view of Half Dome and Clouds Rest, and see the backcountry of the park and Sierra Nevada mountains.
We did this hike in October when the weather wasn't great – it rained a little and even started to snow at one point. Of course I'd left my rain jacket in my other backpack, so I was little soggy and bratty for a bit, but hey it's type two fun! From the top we were actually able to see the storm starting to roll into the valley which meant it was time for us to go, you don't want to be out on the trail or on top of a granite dome when inclimate weather sets in.
We didn't encounter any springs or streams, but if you hike in the spring and early summer you may happen upon some snow melt that you'll need to navigate around which is something to be aware of.
All the car camping essentials you'll need!
Start: Ostrander Lake Trailhead off Glacier Point Road about half a mile after the Bridalveil Creek Campground, there is a parking lot at the trailhead. You can also start out the back of Bridalveil Creek campground if you are camping there.
Views: Pine forests, granite mountains, bright blue Ostrander Lake.
The Ostrander Lake hike is not your typical Yosemite hike with sweeping views and mountain tops, it's more of a hike through the woods to a beautiful lake. 12 miles is a solid day's worth of hiking, luckily the elevation gain is pretty gradual on the way out so the most strenuous part of this hike is the length, but you get the bonus of a down hill on the way back.
Once you get to the lake pull off your boots and dip your toes into the cool snow melt water, it feels so good, especially if it's a hot day. We hung around the lake for a bit, had some lunch and checked out the little backcountry ski cabin nearby before heading back, it's locked during the summer months but still cool to see.
We did this hike in early September, it was quite hot so remember to bring plenty of water and/or a water filter to filter water from the lake to replenish.
Start: May Lakes/Mount Hoffman Trailhead and parking lot are off Tioga Rd about 20 miles west of the Tioga Pass Park Entrance and about 2 miles down the road after the turn off.
This hike may be short but man is it steep! You'll start out under the cover of pine trees and make your way up via switch backs to May Lake. It's a nice spot to take a little break in the shade as there won't be too much of it once you start up the mountain from there. The last third of the hike or so is pretty gravely and rocky. It can be hard to keep track of the trail as there isn't a whole lot of distinction between the rocks so keep an eye out for karins marking the way. There is a little bit of scrambling but I find that kind of stuff fun.
The views from the top might not be as spectacular as North Dome, you'll feel pretty accomplished perched up on a rock surveying all the mountains below.
I did this hike in early September after a big snow year so there was still some snow on the ground in spots. Because of it's high elevation snow tends to stick around even through the summer sometimes.
One thing to note is that May Lake is home to one of Yosemite's five High Sierra Camps.
Start: Just outside of the Tioga Pass Park Entrance, you can park in the pull outs on the side of the road, the trail starts right next to the entrance gate on what looks like a service road.
Views: Mono Lake on one side and the Sierra Nevada Mountains on the other side.
Mount Dana is probably the most badass hike in Yosemite (and why I saved it for last, because it's my favorite). From a physical standpoint it is a hard hike at high elevation, and from a view standpoint it is just amazing, you'll get two totally different views from each side of the peak. You'll see granite peaks and Yosemite wilderness to the west and Mono Lake and the Mono Basin to the east, it's pretty spectacular.
The first thing to know about hiking Mount Dana is that it' not an official trail so it won't be listed on any trail maps or have a trailhead marker. That being said the trail is well worn and it's easy to find your way. From the bottom you'll meander through Dana Meadows toward the Mount Dana, you'll be able to pick it out because the rocks have a reddish tint making it stand out from the all the surrounding granite peaks. The hike gets more difficult the further up you go, by the end you will be scrambling up rocks and boulders. In the last quarter of the hike the trail kind of disappears among the rocks so be sure to look for karins marking the way.
This hike has quite a bit of elevation gain and you will be starting at a high elevation already (Tioga Pass is at 9,945 ft), so be weary of altitude sickness. Bring lots of water, take the ascent slowly, and if you start to feel sick head down to lower elevations.
We hiked Mount Dana in early September after a big snow year so there were still snow fields and patches around. Depending on the year and snow levels there is a good chance you'll encounter a bit of snow near the top.
Yosemite has so much to offer in terms of hiking and outdoor fun. So if you are looking to challenge yourself and get a different view of the park these hikes are for you!
Always go out into the backcountry prepared, things like water, a jacket, and sunscreen are musts for any hiking excursion. I've got all my favorites listed below in a handy little guide. That way you don't find yourself out on top of North Dome in the rain without a jacket!


text:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:title="@string/preference_header_general">

        <EditTextPreference
            android:key="@string/preference_key_username"
            android:title="@string/preference_username"
            android:summary="@string/preference_username_description"
            android:dialogTitle="@string/preference_username"
            android:inputType="text"/>

        <ca.alexland.renewpass.PasswordPreference
            android:key="@string/preference_key_password"
            android:title="@string/preference_password"
            android:summary="@string/preference_password_description"
            android:dialogTitle="@string/preference_password"
            android:inputType="textWebPassword"/>

        <ListPreference
            android:key="@string/preference_key_School"
            android:title="@string/preference_school"
            android:summary="@string/preference_school_description"
            android:dialogTitle="@string/preference_school"
            android:entries="@array/school_list"
            android:entryValues="@array/school_list"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:title="@string/preference_header_autorenew">

        <CheckBoxPreference
            android:key="@string/preference_key_autorenew_enabled"
            android:title="@string/preference_autorenewenabled_title"
            android:summary="@string/preference_autorenewenabled_description"/>

        <ListPreference
            android:key="@string/preference_key_autorenew_date"
            android:dependency="NotificationsEnabled"
            android:title="@string/preference_autorenewdate_title"
            android:entries="@array/date_list"
            android:entryValues="@array/date_list"
            android:defaultValue="@string/preference_value_notification_default_date"
            android:summary="@string/preference_autorenewdate_description"/>

        <ca.alexland.renewpass.TimePreference
            android:key="@string/preference_key_autorenew_time"
            android:dependency="NotificationsEnabled"
            android:title="@string/preference_autorenewtime_title"
            android:summary="@string/preference_autorenewtime_description"
            android:defaultValue="@string/preference_value_notification_default_time"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:title="@string/preference_header_other">

        <!--TODO: change these keys to string resources-->
        <Preference
            android:key="Credits"
            android:title="@string/preference_credits"/>

        <Preference
            android:key="Licenses"
            android:title="@string/preference_licenses"/>

        <Preference
            android:key="Debug"
            android:title="@string/preference_debug"/>

    </PreferenceCategory>

</PreferenceScreen>

redpajama_set_name: RedPajamaGithub


After that, he seemed fine. He was having some digestive issues but we thought it might just be a 24-hour bug. Daddy stayed home with him for a couple days and he went back to school on Wednesday. When I went to pick him up, his teacher told me that he was saying his stomach hurt and just had no energy (which he was proving by slowly lying down on the ground while she was talking). 30 minutes after we got home he threw up again. His appetite was almost completely gone, and he was having diarrhea very regularly – sometimes every 20-30 minutes. We waited until Sunday (1 week after he originally got sick) to take him to the Doctor who said that he might be constipated, sent us for X-rays, and told us to come back on Tuesday. Sunday night at about midnight, he threw up again – this time it was in his sleep. Monday passed and we didn't hear from the Doctor, so we went back first thing Tuesday morning and she told us that he wasn't constipated, but that there was a lot of fluid in his intestines and it might be an infection. She gave us two prescriptions, one antibiotic and one anti-nausea, and said that if he wasn't better in 3 days… we needed to go to the ER.
Within 24 hours of starting both medications he was eating again, his colour came back, and he wasn't running to the bathroom every 30 minutes. It took us about a week after finishing the medication to let our guard down and stop worrying about the issue coming back. I know in the grand scheme of childhood illnesses this isn't very big… but it was very scary for us.
Then on Monday of this week, while picking Cordelia up I completely wrecked my right shoulder. It was a bit achy when I went to bed and only got worse. I spent most of Tuesday in ridiculous pain, completely unable to fall asleep in bed that night (thank gosh for reclining couches), so I went to the Chiropractor yesterday who did some adjusting, massaging, a bit of laser work to promote healing, and taped me up. I still only have about 10% movement in my right arm, and I have shooting pain if I forget and reach quickly or try to do something I shouldn't, but I was able to sleep last night and haven't cried out in pain in over 24 hours so that's a win for me. I go back today and then three times next week, so I'm sure I'll be able to use it again in no time.
We did have a few highlights – Seeing Lego Batman (Cordelia's first movie), the TKD Winter Tournament, and lots of cuddle time with both littles. We are all fighting off a spring cold now, but hopeful that it will pass quickly and we can get life back to normal again.
Oh… my… GOD. What a ridiculous month! The further I kept reading the more horrified I felt for you. Good grief… March can ONLY be better, right??
Thank you Chelle. I think the saying is in like a lion and out like a lamb right? So if it's true the second half of the month should be amazing lol.
Oh crap, you sure had a rough month! It's so tough when our kids get sick, right? I'm glad to hear Bobby got better with the meds and that it wasn't anything serious.
And I hope your shoulder feels better soon.
Thank you Chantal 🙂 I thought the worry would reduce as they got older but it really never does eh?


text:
Jack Colback
Martin Gray urges Di Canio to give SAFC youngsters a chance
Former Sunderland star Martin Gray wants to see Paolo Di Canio give the youngsters at his former club a chance to shine
Sunderland boss Paolo Di Canio
Sunderland's League One promotion hunt is in full swing. Get the latest as it happens by signing up to our SAFC newsletter
Martin Gray played for Sunderland, just about the closest person he had to a foreign teammate was Marco Gabbiadini.
Nottingham-born, York-bred Marco Gabbiadini.
Now, the Black Cats squad – as defined by the official club website – boasts 29 senior players (two are out on loan), 17 of whom hail from beyond the UK and Republic of Ireland.
Thirteen of that 17 have arrived this summer.
Of course, the Stadium and Academy of Light are far from alone among Premier League venues in being populated by vast and ever-growing numbers of overseas stars.
The ongoing influx of foreign talent to the English game has brought criticism in recent days from both Roy Hodgson and new FA chairman Greg Dyke.
Martin Gray, former Sunderland football player
Paolo Di Canio has hit back, insisting football in this country can and does benefit from foreign players and coaches.
Ex-Wearside midfielder Gray acknowledges as much, and the difficulty clubs have meeting the spiraling cost of homegrown footballers.
He is also optimistic about the long-term prospects of Di Canio's newly-assembled squad.
Yet working in the academy system – he runs Sunderland's south Durham development centre – Gray remains simultaneously "frustrated" at the relative scarcity of genuine opportunities for young, local talent.
"It's very difficult for Paolo," said Gray.
"He knew he had to make a lot of changes but whenever you do that, it can take time for everyone to gel.
"You need time for people to settle in, so it's hard to hit the ground running.
"There's obviously the communication factor as well, which could be tricky to get right.
"Hopefully, it'll all come good.
"But it is frustrating, not just for me but for everyone involved in academy set-ups all over the country.
"Clubs invest millions into their youth set-ups and there are good, young players about.
Sunderland youngster Jack Colback in action
"But I just feel like it's almost become too familiar, too modern a trend to buy players from abroad.
"That's fine when you're talking about the top, top players like Robin Van Persie, Yaya Toure and Mesut Ozil, people who make the Premier League what it is.
"They are technically-gifted footballers, and playing alongside them can only help develop our kids.
"But is every foreign player coming into the English game technically better than the homegrown lads? It's not always the case.
"Now fair play to Sunderland, someone like Jack Colback has come through and it's dead right to do so, you've got to be good enough.
"I'm not talking about giving kids a chance for the sake of it.
"I'd just like to see more of them given the chance, at Sunderland and every other club, to prove themselves. The talent is out there."


If you need a support about your pet in English,Please use contact form.
If you are too busy to go for a walk with your dog,☆Yuki Loop☆ is ready to go for a walk with your dog.
If you leave your pet at your home when you go to work or go to travel,☆Yuki Loop☆ is ready to take care of your pets at your home.
When you go to travel or business trip,you can use ☆Yuki Loop☆'s pet hotel service.
If you want to take a dog training lesson,☆Yuki Loop☆ is ready to help you and your dog.
But training lesson is only in Japanese.


text:
"""Support for Tuya sensors."""
from __future__ import annotations

from dataclasses import dataclass
from typing import cast

from tuya_iot import TuyaDevice, TuyaDeviceManager
from tuya_iot.device import TuyaDeviceStatusRange

from homeassistant.components.sensor import (
    SensorDeviceClass,
    SensorEntity,
    SensorEntityDescription,
    SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
    ELECTRIC_CURRENT_AMPERE,
    ELECTRIC_POTENTIAL_VOLT,
    PERCENTAGE,
    POWER_KILO_WATT,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType

from . import HomeAssistantTuyaData
from .base import ElectricityTypeData, EnumTypeData, IntegerTypeData, TuyaEntity
from .const import (
    DEVICE_CLASS_TUYA_STATUS,
    DEVICE_CLASS_UNITS,
    DOMAIN,
    TUYA_DISCOVERY_NEW,
    DPCode,
    UnitOfMeasurement,
)

@dataclass
class TuyaSensorEntityDescription(SensorEntityDescription):
    """Describes Tuya sensor entity."""

    subkey: str | None = None

# Commonly used battery sensors, that are re-used in the sensors down below.
BATTERY_SENSORS: tuple[TuyaSensorEntityDescription, ...] = (
    TuyaSensorEntityDescription(
        key=DPCode.BATTERY_PERCENTAGE,
        name="Battery",
        native_unit_of_measurement=PERCENTAGE,
        device_class=SensorDeviceClass.BATTERY,
        state_class=SensorStateClass.MEASUREMENT,
        entity_category=EntityCategory.DIAGNOSTIC,
    ),
    TuyaSensorEntityDescription(
        key=DPCode.BATTERY_STATE,
        name="Battery State",
        icon="mdi:battery",
        entity_category=EntityCategory.DIAGNOSTIC,
    ),
    TuyaSensorEntityDescription(
        key=DPCode.BATTERY_VALUE,
        name="Battery",
        device_class=SensorDeviceClass.BATTERY,
        entity_category=EntityCategory.DIAGNOSTIC,
        state_class=SensorStateClass.MEASUREMENT,
    ),
    TuyaSensorEntityDescription(
        key=DPCode.VA_BATTERY,
        name="Battery",
        device_class=SensorDeviceClass.BATTERY,
        entity_category=EntityCategory.DIAGNOSTIC,
        state_class=SensorStateClass.MEASUREMENT,
    ),
)

# All descriptions can be found here. Mostly the Integer data types in the
# default status set of each category (that don't have a set instruction)
# end up being a sensor.
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
SENSORS: dict[str, tuple[TuyaSensorEntityDescription, ...]] = {
    # Smart Kettle
    # https://developer.tuya.com/en/docs/iot/fbh?id=K9gf484m21yq7
    "bh": (
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Current Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT_F,
            name="Current Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.STATUS,
            name="Status",
            device_class=DEVICE_CLASS_TUYA_STATUS,
        ),
    ),
    # CO2 Detector
    # https://developer.tuya.com/en/docs/iot/categoryco2bj?id=Kaiuz3wes7yuy
    "co2bj": (
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # CO Detector
    # https://developer.tuya.com/en/docs/iot/categorycobj?id=Kaiuz3u1j6q1v
    "cobj": (
        TuyaSensorEntityDescription(
            key=DPCode.CO_VALUE,
            name="Carbon Monoxide",
            device_class=SensorDeviceClass.CO,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Air Quality Monitor
    # No specification on Tuya portal
    "hjjcy": (
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CH2O_VALUE,
            name="Formaldehyde",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VOC_VALUE,
            name="Volatile Organic Compound",
            device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PM25_VALUE,
            name="Particulate Matter 2.5 µm",
            device_class=SensorDeviceClass.PM25,
            state_class=SensorStateClass.MEASUREMENT,
        ),
    ),
    # Formaldehyde Detector
    # Note: Not documented
    "jqbj": (
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VOC_VALUE,
            name="Volatile Organic Compound",
            device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PM25_VALUE,
            name="Particulate Matter 2.5 µm",
            device_class=SensorDeviceClass.PM25,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VA_HUMIDITY,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VA_TEMPERATURE,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CH2O_VALUE,
            name="Formaldehyde",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Methane Detector
    # https://developer.tuya.com/en/docs/iot/categoryjwbj?id=Kaiuz40u98lkm
    "jwbj": (
        TuyaSensorEntityDescription(
            key=DPCode.CH4_SENSOR_VALUE,
            name="Methane",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Switch
    # https://developer.tuya.com/en/docs/iot/s?id=K9gf7o5prgf7s
    "kg": (
        TuyaSensorEntityDescription(
            key=DPCode.CUR_CURRENT,
            name="Current",
            device_class=SensorDeviceClass.CURRENT,
            state_class=SensorStateClass.MEASUREMENT,
            entity_registry_enabled_default=False,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CUR_POWER,
            name="Power",
            device_class=SensorDeviceClass.POWER,
            state_class=SensorStateClass.MEASUREMENT,
            entity_registry_enabled_default=False,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CUR_VOLTAGE,
            name="Voltage",
            device_class=SensorDeviceClass.VOLTAGE,
            state_class=SensorStateClass.MEASUREMENT,
            entity_registry_enabled_default=False,
        ),
    ),
    # Luminance Sensor
    # https://developer.tuya.com/en/docs/iot/categoryldcg?id=Kaiuz3n7u69l8
    "ldcg": (
        TuyaSensorEntityDescription(
            key=DPCode.BRIGHT_STATE,
            name="Luminosity",
            icon="mdi:brightness-6",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.BRIGHT_VALUE,
            name="Luminosity",
            device_class=SensorDeviceClass.ILLUMINANCE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Door Window Sensor
    # https://developer.tuya.com/en/docs/iot/s?id=K9gf48hm02l8m
    "mcs": BATTERY_SENSORS,
    # PIR Detector
    # https://developer.tuya.com/en/docs/iot/categorypir?id=Kaiuz3ss11b80
    "pir": BATTERY_SENSORS,
    # PM2.5 Sensor
    # https://developer.tuya.com/en/docs/iot/categorypm25?id=Kaiuz3qof3yfu
    "pm2.5": (
        TuyaSensorEntityDescription(
            key=DPCode.PM25_VALUE,
            name="Particulate Matter 2.5 µm",
            device_class=SensorDeviceClass.PM25,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CH2O_VALUE,
            name="Formaldehyde",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VOC_VALUE,
            name="Volatile Organic Compound",
            device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PM1,
            name="Particulate Matter 1.0 µm",
            device_class=SensorDeviceClass.PM1,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PM10,
            name="Particulate Matter 10.0 µm",
            device_class=SensorDeviceClass.PM10,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Heater
    # https://developer.tuya.com/en/docs/iot/categoryqn?id=Kaiuz18kih0sm
    "qn": (
        TuyaSensorEntityDescription(
            key=DPCode.WORK_POWER,
            name="Power",
            device_class=SensorDeviceClass.POWER,
            state_class=SensorStateClass.MEASUREMENT,
        ),
    ),
    # Gas Detector
    # https://developer.tuya.com/en/docs/iot/categoryrqbj?id=Kaiuz3d162ubw
    "rqbj": (
        TuyaSensorEntityDescription(
            key=DPCode.GAS_SENSOR_VALUE,
            icon="mdi:gas-cylinder",
            device_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Water Detector
    # https://developer.tuya.com/en/docs/iot/categorysj?id=Kaiuz3iub2sli
    "sj": BATTERY_SENSORS,
    # Emergency Button
    # https://developer.tuya.com/en/docs/iot/categorysos?id=Kaiuz3oi6agjy
    "sos": BATTERY_SENSORS,
    # Smart Camera
    # https://developer.tuya.com/en/docs/iot/categorysp?id=Kaiuz35leyo12
    "sp": (
        TuyaSensorEntityDescription(
            key=DPCode.SENSOR_TEMPERATURE,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.SENSOR_HUMIDITY,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.WIRELESS_ELECTRICITY,
            name="Battery",
            device_class=SensorDeviceClass.BATTERY,
            entity_category=EntityCategory.DIAGNOSTIC,
            state_class=SensorStateClass.MEASUREMENT,
        ),
    ),
    # Fingerbot
    "szjqr": BATTERY_SENSORS,
    # Solar Light
    # https://developer.tuya.com/en/docs/iot/tynd?id=Kaof8j02e1t98
    "tyndj": BATTERY_SENSORS,
    # Volatile Organic Compound Sensor
    # Note: Undocumented in cloud API docs, based on test device
    "voc": (
        TuyaSensorEntityDescription(
            key=DPCode.CO2_VALUE,
            name="Carbon Dioxide",
            device_class=SensorDeviceClass.CO2,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PM25_VALUE,
            name="Particulate Matter 2.5 µm",
            device_class=SensorDeviceClass.PM25,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CH2O_VALUE,
            name="Formaldehyde",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VOC_VALUE,
            name="Volatile Organic Compound",
            device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Temperature and Humidity Sensor
    # https://developer.tuya.com/en/docs/iot/categorywsdcg?id=Kaiuz3hinij34
    "wsdcg": (
        TuyaSensorEntityDescription(
            key=DPCode.VA_TEMPERATURE,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TEMP_CURRENT,
            name="Temperature",
            device_class=SensorDeviceClass.TEMPERATURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.VA_HUMIDITY,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.HUMIDITY_VALUE,
            name="Humidity",
            device_class=SensorDeviceClass.HUMIDITY,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.BRIGHT_VALUE,
            name="Luminosity",
            device_class=SensorDeviceClass.ILLUMINANCE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Pressure Sensor
    # https://developer.tuya.com/en/docs/iot/categoryylcg?id=Kaiuz3kc2e4gm
    "ylcg": (
        TuyaSensorEntityDescription(
            key=DPCode.PRESSURE_VALUE,
            device_class=SensorDeviceClass.PRESSURE,
            state_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Smoke Detector
    # https://developer.tuya.com/en/docs/iot/categoryywbj?id=Kaiuz3f6sf952
    "ywbj": (
        TuyaSensorEntityDescription(
            key=DPCode.SMOKE_SENSOR_VALUE,
            name="Smoke Amount",
            icon="mdi:smoke-detector",
            entity_category=EntityCategory.DIAGNOSTIC,
            device_class=SensorStateClass.MEASUREMENT,
        ),
        *BATTERY_SENSORS,
    ),
    # Vibration Sensor
    # https://developer.tuya.com/en/docs/iot/categoryzd?id=Kaiuz3a5vrzno
    "zd": BATTERY_SENSORS,
    # Smart Electricity Meter
    # https://developer.tuya.com/en/docs/iot/smart-meter?id=Kaiuz4gv6ack7
    "zndb": (
        TuyaSensorEntityDescription(
            key=DPCode.FORWARD_ENERGY_TOTAL,
            name="Total Energy",
            device_class=SensorDeviceClass.ENERGY,
            state_class=SensorStateClass.TOTAL_INCREASING,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_A,
            name="Phase A Current",
            device_class=SensorDeviceClass.CURRENT,
            native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
            state_class=SensorStateClass.MEASUREMENT,
            subkey="electriccurrent",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_A,
            name="Phase A Power",
            device_class=SensorDeviceClass.POWER,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=POWER_KILO_WATT,
            subkey="power",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_A,
            name="Phase A Voltage",
            device_class=SensorDeviceClass.VOLTAGE,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
            subkey="voltage",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_B,
            name="Phase B Current",
            device_class=SensorDeviceClass.CURRENT,
            native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
            state_class=SensorStateClass.MEASUREMENT,
            subkey="electriccurrent",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_B,
            name="Phase B Power",
            device_class=SensorDeviceClass.POWER,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=POWER_KILO_WATT,
            subkey="power",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_B,
            name="Phase B Voltage",
            device_class=SensorDeviceClass.VOLTAGE,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
            subkey="voltage",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_C,
            name="Phase C Current",
            device_class=SensorDeviceClass.CURRENT,
            native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
            state_class=SensorStateClass.MEASUREMENT,
            subkey="electriccurrent",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_C,
            name="Phase C Power",
            device_class=SensorDeviceClass.POWER,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=POWER_KILO_WATT,
            subkey="power",
        ),
        TuyaSensorEntityDescription(
            key=DPCode.PHASE_C,
            name="Phase C Voltage",
            device_class=SensorDeviceClass.VOLTAGE,
            state_class=SensorStateClass.MEASUREMENT,
            native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
            subkey="voltage",
        ),
    ),
    # Robot Vacuum
    # https://developer.tuya.com/en/docs/iot/fsd?id=K9gf487ck1tlo
    "sd": (
        TuyaSensorEntityDescription(
            key=DPCode.CLEAN_AREA,
            name="Cleaning Area",
            icon="mdi:texture-box",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.CLEAN_TIME,
            name="Cleaning Time",
            icon="mdi:progress-clock",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TOTAL_CLEAN_AREA,
            name="Total Cleaning Area",
            icon="mdi:texture-box",
            state_class=SensorStateClass.TOTAL_INCREASING,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TOTAL_CLEAN_TIME,
            name="Total Cleaning Time",
            icon="mdi:history",
            state_class=SensorStateClass.TOTAL_INCREASING,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.TOTAL_CLEAN_COUNT,
            name="Total Cleaning Times",
            icon="mdi:counter",
            state_class=SensorStateClass.TOTAL_INCREASING,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.DUSTER_CLOTH,
            name="Duster Cloth Life",
            icon="mdi:ticket-percent-outline",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.EDGE_BRUSH,
            name="Side Brush Life",
            icon="mdi:ticket-percent-outline",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.FILTER_LIFE,
            name="Filter Life",
            icon="mdi:ticket-percent-outline",
            state_class=SensorStateClass.MEASUREMENT,
        ),
        TuyaSensorEntityDescription(
            key=DPCode.ROLL_BRUSH,
            name="Rolling Brush Life",
            icon="mdi:ticket-percent-outline",
            state_class=SensorStateClass.MEASUREMENT,
        ),
    ),
}

# Socket (duplicate of `kg`)
# https://developer.tuya.com/en/docs/iot/s?id=K9gf7o5prgf7s
SENSORS["cz"] = SENSORS["kg"]

# Power Socket (duplicate of `kg`)
# https://developer.tuya.com/en/docs/iot/s?id=K9gf7o5prgf7s
SENSORS["pc"] = SENSORS["kg"]

async def async_setup_entry(
    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
    """Set up Tuya sensor dynamically through Tuya discovery."""
    hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]

    @callback
    def async_discover_device(device_ids: list[str]) -> None:
        """Discover and add a discovered Tuya sensor."""
        entities: list[TuyaSensorEntity] = []
        for device_id in device_ids:
            device = hass_data.device_manager.device_map[device_id]
            if descriptions := SENSORS.get(device.category):
                for description in descriptions:
                    if (
                        description.key in device.function
                        or description.key in device.status
                    ):
                        entities.append(
                            TuyaSensorEntity(
                                device, hass_data.device_manager, description
                            )
                        )

        async_add_entities(entities)

    async_discover_device([*hass_data.device_manager.device_map])

    entry.async_on_unload(
        async_dispatcher_connect(hass, TUYA_DISCOVERY_NEW, async_discover_device)
    )

class TuyaSensorEntity(TuyaEntity, SensorEntity):
    """Tuya Sensor Entity."""

    entity_description: TuyaSensorEntityDescription

    _status_range: TuyaDeviceStatusRange | None = None
    _type_data: IntegerTypeData | EnumTypeData | None = None
    _uom: UnitOfMeasurement | None = None

    def __init__(
        self,
        device: TuyaDevice,
        device_manager: TuyaDeviceManager,
        description: TuyaSensorEntityDescription,
    ) -> None:
        """Init Tuya sensor."""
        super().__init__(device, device_manager)
        self.entity_description = description
        self._attr_unique_id = (
            f"{super().unique_id}{description.key}{description.subkey or ''}"
        )

        if status_range := device.status_range.get(description.key):
            self._status_range = cast(TuyaDeviceStatusRange, status_range)

            # Extract type data from integer status range,
            # and determine unit of measurement
            if self._status_range.type == "Integer":
                self._type_data = IntegerTypeData.from_json(self._status_range.values)
                if description.native_unit_of_measurement is None:
                    self._attr_native_unit_of_measurement = self._type_data.unit

            # Extract type data from enum status range
            elif self._status_range.type == "Enum":
                self._type_data = EnumTypeData.from_json(self._status_range.values)

        # Logic to ensure the set device class and API received Unit Of Measurement
        # match Home Assistants requirements.
        if (
            self.device_class is not None
            and not self.device_class.startswith(DOMAIN)
            and description.native_unit_of_measurement is None
        ):
            # We cannot have a device class, if the UOM isn't set or the
            # device class cannot be found in the validation mapping.
            if (
                self.unit_of_measurement is None
                or self.device_class not in DEVICE_CLASS_UNITS
            ):
                self._attr_device_class = None
                return

            uoms = DEVICE_CLASS_UNITS[self.device_class]
            self._uom = uoms.get(self.unit_of_measurement) or uoms.get(
                self.unit_of_measurement.lower()
            )

            # Unknown unit of measurement, device class should not be used.
            if self._uom is None:
                self._attr_device_class = None
                return

            # Found unit of measurement, use the standardized Unit
            # Use the target conversion unit (if set)
            self._attr_native_unit_of_measurement = (
                self._uom.conversion_unit or self._uom.unit
            )

    @property
    def native_value(self) -> StateType:
        """Return the value reported by the sensor."""
        # Unknown or unsupported data type
        if self._status_range is None or self._status_range.type not in (
            "Integer",
            "String",
            "Enum",
            "Json",
        ):
            return None

        # Raw value
        value = self.device.status.get(self.entity_description.key)
        if value is None:
            return None

        # Scale integer/float value
        if isinstance(self._type_data, IntegerTypeData):
            scaled_value = self._type_data.scale_value(value)
            if self._uom and self._uom.conversion_fn is not None:
                return self._uom.conversion_fn(scaled_value)
            return scaled_value

        # Unexpected enum value
        if (
            isinstance(self._type_data, EnumTypeData)
            and value not in self._type_data.range
        ):
            return None

        # Get subkey value from Json string.
        if self._status_range.type == "Json":
            if self.entity_description.subkey is None:
                return None
            values = ElectricityTypeData.from_json(value)
            return getattr(values, self.entity_description.subkey)

        # Valid string or enum value
        return value


We're so excited to share Jennifer and Landon's spring wedding at one of our favorite venues, Piedmont Community Hall, on the blog today!
We just finished a busy weekend back at this favorite venue, Ru's Farm in Healdsburg, and I realized I never shared Anais and Patrick's gorgeous early fall wedding that we photographed there last year.
Chris and Pei-Ru's engagement session started in the Financial District in San Francisco with gorgeous light and ended in a super windy adventure at Fort Funston.


text:
Q: Select entry from array given another value I have a text file with the format (date, time, resistance):
12/11/2013  13:20:38    28.321930E+3
...         ...             ...

I need to extract the value of resistance (third column) from every 6 seconds after the first data entry. To start I wanted to import the text file using:
date, time, resistance = loadtxt('Thermometers.txt', unpack=True, usecols=[0,1,2])

However before I've hardly begun my program, I get the error:

ValueError: invalid literal for float(): 12/11/2013

-ALSO-
I am not sure how to also iterate through time given that the date changes as it's an over-night data run. Elegant solutions to my problem(s) would be much appreciated.

A: I think this code will do what you want to do. And also, you don't have to worry about the overnight data and changing date since this converts it to datetime object.
    import datetime

    filtered_data=[]

    my_data=open(my_file,'r')
    for line in my_data:

        data_arr=line.split()
        dte=data_arr[0].split("/") r
        tme=data_arr[1].split(":")
        new_date=datetime.datetime((int(dte[2]),int(dte[0]),int(dte[1]),
                                    int(tme[0]),int(tme[1]),int(tme[2]))

        if filtered_data==[]:
           filtered_data.append(data_arr)

        else:
           if (new_date-old_date).seconds==6:
                filtered_data.append(data_arr)

        old_date=new_date

This will give you a list where the items are filtered as per your situation ( in every 6 seconds). Now if you just want the array of your resistance which are distributed at 6 seconds interval, using simple loop or list comprehension like below will suffice:
R_in_six_sec_interval=[R[2] for R in filtered_data]

A: you might want to have a look at this if you want to do stick to numpy for other reasons.

redpajama_set_name: RedPajamaStackExchange


Outstanding career prospectsSMEC is a professional services firm with Australian origins and a global footprint that provides high-quality consultancy services for major infrastructure projects.
Manages, guides, and directs project teams and activities to achieve efficient, cost-effective, timely, and high quality delivery of consultancy assignments around Africa.
Fluency in English mandatory. Additional language abilities such as French is advantageous.
At least a Master's Degree in Environmental Science, Ecology, Environmental Engineering, Agricultural Engineering, or Natural Resources Management or related from a recognized university.
Excellent technical writing skills in English (mandatory). Experience in preparing reports, proposals, and/or publications of international standard.
Nationals and residents in Africa are encouraged to apply.
At least 12 years overall relevant experience in the field and at least 3 years experience managing or directing projects in developing countries. Project management experience is mandatory.
Strong technical knowledge in relevant areas such as Environmental and Social Impact Assessment of dam/irrigation/water supply/power transmission lines/roads/building complex or other large infrastructure projects, environmental and social studies, environmental management, environmental planning.
Membership in a related professional association or registration as an environmental expert is advantageous.
Note: Please send your detailed CV and application letter. Only shortlisted individuals will be contacted.